ngx-transforms 0.0.3 → 0.0.5

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.
@@ -925,7 +925,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
925
925
  * QrCodePipe: Generates a QR code from a string.
926
926
  *
927
927
  * @param {string} value - The string to encode.
928
- * @param {QRCode.QRCodeToDataURLOptions} [options] - The QR code options.
928
+ * @param {QrCodeOptions} [options] - The QR code options.
929
929
  *
930
930
  * @returns {Promise<string>} - A promise that resolves with the QR code data URL.
931
931
  *
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-transforms.mjs","sources":["../../../../libs/ngx-transforms/src/lib/pipes/ascii-art/ascii-art.ts","../../../../libs/ngx-transforms/src/lib/pipes/barcode/barcode.ts","../../../../libs/ngx-transforms/src/lib/pipes/camel-case/camel-case.ts","../../../../libs/ngx-transforms/src/lib/pipes/color-convert/color-convert.ts","../../../../libs/ngx-transforms/src/lib/pipes/count/count.ts","../../../../libs/ngx-transforms/src/lib/pipes/credit-card-mask/credit-card-mask.ts","../../../../libs/ngx-transforms/src/lib/pipes/device-type/device-type.ts","../../../../libs/ngx-transforms/src/lib/pipes/email-mask/email-mask.ts","../../../../libs/ngx-transforms/src/lib/pipes/gravatar/gravatar.ts","../../../../libs/ngx-transforms/src/lib/pipes/highlight/highlight.ts","../../../../libs/ngx-transforms/src/lib/pipes/html-escape/html-escape.ts","../../../../libs/ngx-transforms/src/lib/pipes/html-sanitize/html-sanitize.ts","../../../../libs/ngx-transforms/src/lib/pipes/initials/initials.ts","../../../../libs/ngx-transforms/src/lib/pipes/ip-address-mask/ip-address-mask.ts","../../../../libs/ngx-transforms/src/lib/pipes/json-pretty/json-pretty.ts","../../../../libs/ngx-transforms/src/lib/pipes/kebab-case/kebab-case.ts","../../../../libs/ngx-transforms/src/lib/pipes/morse-code/morse-code.ts","../../../../libs/ngx-transforms/src/lib/pipes/qr-code/qr-code.ts","../../../../libs/ngx-transforms/src/lib/pipes/replace/replace.ts","../../../../libs/ngx-transforms/src/lib/pipes/reverse/reverse.ts","../../../../libs/ngx-transforms/src/lib/pipes/snake-case/snake-case.ts","../../../../libs/ngx-transforms/src/lib/pipes/text-to-speech/text-to-speech.ts","../../../../libs/ngx-transforms/src/lib/pipes/title-case/title-case.ts","../../../../libs/ngx-transforms/src/lib/pipes/truncate/truncate.ts","../../../../libs/ngx-transforms/src/providers/all-pipes.provider.ts","../../../../libs/ngx-transforms/src/ngx-transforms.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { AsciiGenerator, CharsetPreset, AsciiConfig, TextToAsciiOptions } from 'ts-ascii-engine';\n\n/**\n * Supported charset presets for ASCII art generation.\n */\nexport { CharsetPreset } from 'ts-ascii-engine';\n\n/**\n * Configuration options for ASCII art generation\n */\nexport interface AsciiArtOptions extends Partial<AsciiConfig> {\n /**\n * Text rendering options (only used when converting text to ASCII)\n */\n textOptions?: TextToAsciiOptions;\n\n /**\n * Return format: 'html' returns formatted HTML, 'text' returns plain text\n * @default 'html'\n */\n format?: 'html' | 'text';\n}\n\n/**\n * AsciiArtPipe: Converts text into ASCII art using ts-ascii-engine.\n *\n * This pipe leverages the high-performance ts-ascii-engine library to convert\n * text into visually appealing ASCII art with various customization options.\n *\n * @param {string} value - The text to convert to ASCII art.\n * @param {AsciiArtOptions} [options] - Configuration options for ASCII generation.\n *\n * @returns {string} - The ASCII art as HTML or plain text based on format option.\n *\n * @security\n * The pipe returns HTML by default. When using with [innerHTML], Angular's\n * DomSanitizer automatically sanitizes the output. For additional safety,\n * you can explicitly sanitize:\n * ```typescript\n * import { DomSanitizer } from '@angular/platform-browser';\n * this.safeHtml = this.sanitizer.sanitize(SecurityContext.HTML, asciiOutput);\n * ```\n *\n * @performance\n * - The AsciiGenerator instance is reused across transformations for optimal performance\n * - Use smaller charset and width values for faster rendering\n * - Consider format: 'text' for simple use cases (faster than HTML formatting)\n * - The library is optimized with typed arrays and minimal garbage collection\n *\n * @example\n * // Basic usage with default options\n * {{ 'HELLO' | asciiArt }}\n *\n * @example\n * // Custom charset and width\n * {{ 'CODE' | asciiArt:{ charset: CharsetPreset.BLOCK, width: 60 } }}\n *\n * @example\n * // Plain text output\n * {{ 'ASCII' | asciiArt:{ format: 'text' } }}\n *\n * @example\n * // Advanced text rendering with custom font\n * {{ 'WELCOME' | asciiArt:{\n * charset: CharsetPreset.STANDARD,\n * width: 80,\n * textOptions: {\n * font: 'Arial',\n * fontSize: 72,\n * fontWeight: 'bold'\n * }\n * }}}\n *\n * @example\n * // With inverted colors\n * {{ 'DARK' | asciiArt:{ inverted: true, charset: CharsetPreset.MINIMAL } }}\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'asciiArt',\n standalone: true,\n})\nexport class AsciiArtPipe implements PipeTransform {\n private generator: AsciiGenerator;\n\n constructor() {\n this.generator = new AsciiGenerator({\n charset: CharsetPreset.STANDARD,\n width: 80,\n optimized: true,\n });\n }\n\n transform(value: string, options: AsciiArtOptions = {}): string {\n if (!value || typeof value !== 'string') {\n return '';\n }\n\n const maxLength = 100;\n if (value.length > maxLength) {\n console.warn(`AsciiArtPipe: Input truncated to ${maxLength} characters for security`);\n value = value.substring(0, maxLength);\n }\n\n const { format = 'html', textOptions, ...config } = options;\n\n try {\n if (Object.keys(config).length > 0) {\n this.generator.updateConfig(config);\n }\n\n const result = this.generator.convertText(value, textOptions);\n\n if (format === 'text') {\n return `<pre class=\"ascii-art\">${this.escapeHtml(result.text)}</pre>`;\n }\n\n // Return HTML format (already safe from ts-ascii-engine)\n return result.html;\n } catch (error) {\n console.error('AsciiArtPipe: Error generating ASCII art', error);\n return `<pre class=\"ascii-art-error\">Error: Unable to generate ASCII art</pre>`;\n }\n }\n\n /**\n * Escapes HTML special characters to prevent XSS\n * @private\n */\n private escapeHtml(text: string): string {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml, SafeResourceUrl } from '@angular/platform-browser';\nimport JsBarcode from 'jsbarcode';\n\n/**\n * BarcodeElementType: Defines the type of element to render the barcode.\n *\n * @typedef {'svg' | 'img' | 'canvas'} BarcodeElementType\n */\nexport type BarcodeElementType = 'svg' | 'img' | 'canvas';\n\n/**\n * BarcodeFormat: Defines supported barcode formats.\n *\n * @typedef {'CODE128' | 'EAN13' | 'CODE39'} BarcodeFormat\n */\nexport type BarcodeFormat = 'CODE128' | 'EAN13' | 'CODE39';\n\n/**\n * BarcodeOptions: Configuration options for barcode generation.\n *\n * @interface BarcodeOptions\n * @property {BarcodeElementType} [elementType='svg'] - Output type (svg, img, canvas).\n * @property {BarcodeFormat} [format='CODE128'] - Barcode format.\n * @property {number} [width=2] - Bar width in pixels.\n * @property {number} [height=100] - Barcode height in pixels.\n * @property {string} [lineColor='#000000'] - Color of bars.\n * @property {boolean} [displayValue=true] - Show value below barcode.\n */\nexport interface BarcodeOptions {\n elementType?: BarcodeElementType;\n format?: BarcodeFormat;\n width?: number;\n height?: number;\n lineColor?: string;\n displayValue?: boolean;\n}\n\n/**\n * BarcodePipe: Generates a barcode from a string value.\n *\n * @param {string} value - The value to encode (e.g., '123456789').\n * @param {BarcodeOptions} [options={}] - Configuration options.\n *\n * @returns {Promise<SafeHtml | SafeResourceUrl>} - SVG markup or image data URL.\n *\n * @example\n * <div [innerHTML]=\"'123456789' | barcode:{elementType:'svg',format:'CODE128'} | async\"></div>\n * <img [src]=\"'123456789' | barcode:{elementType:'img'} | async\" />\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'barcode',\n standalone: true,\n})\nexport class BarcodePipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n async transform(value: string, options: BarcodeOptions = {}): Promise<SafeHtml | SafeResourceUrl | ''> {\n const {\n elementType = 'svg',\n format = 'CODE128',\n lineColor = '#000000',\n width = 2,\n height = 100,\n displayValue = true,\n } = options;\n\n if (!value) {\n return '';\n }\n\n // Sanitize the value to prevent XSS\n const sanitizedValue = value.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\n try {\n const config = { format, lineColor, width, height, displayValue };\n if (elementType === 'svg') {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n JsBarcode(svg, sanitizedValue, config);\n return this.sanitizer.bypassSecurityTrustHtml(svg.outerHTML);\n } else {\n const canvas = document.createElement('canvas');\n JsBarcode(canvas, sanitizedValue, config);\n const dataUrl = canvas.toDataURL('image/png');\n return this.sanitizer.bypassSecurityTrustResourceUrl(dataUrl);\n }\n } catch (error) {\n console.error('Barcode generation failed:', error);\n return '';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * CamelCasePipe: Converts text to camelCase (e.g., \"hello world\" → \"helloWorld\").\n *\n * @param {string} value - The input string to transform.\n * @returns {string} The string in camelCase, or an empty string if input is invalid.\n *\n * @example\n * ```html\n * {{ 'hello world' | camelCase }} <!-- Outputs: helloWorld -->\n * ```\n * \n * @author Mofiro Jean\n */\n@Pipe({\n name: 'camelCase',\n standalone: true\n})\nexport class CamelCasePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value || typeof value !== 'string') return '';\n return value\n .toLowerCase()\n .replace(/[^a-zA-Z0-9]+/g, ' ')\n .trim()\n .split(' ')\n .filter(word => word.length > 0)\n .map((word, index) => \n index === 0 \n ? word.toLowerCase() \n : word.charAt(0).toUpperCase() + word.slice(1)\n )\n .join('');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * ColorTargetType: Defines the target color format for conversion.\n *\n * @typedef {'hex' | 'rgb' | 'rgba'} ColorTargetType\n *\n * @description\n * Specifies the output format for color conversion:\n * - 'hex': Hexadecimal format (#RRGGBB or #RRGGBBAA)\n * - 'rgb': RGB format rgb(r, g, b)\n * - 'rgba': RGBA format rgba(r, g, b, a)\n */\nexport type ColorTargetType = 'hex' | 'rgb' | 'rgba';\n\n// Pre-compiled regex patterns for performance\nconst HEX_6_PATTERN = /^#([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/;\nconst HEX_8_PATTERN = /^#([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/;\nconst HEX_3_PATTERN = /^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/;\nconst HEX_4_PATTERN = /^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/;\nconst RGB_PATTERN = /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/i;\nconst RGBA_PATTERN = /^rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*([\\d.]+)\\s*\\)$/i;\n\n/**\n * Clamps a value between 0 and 255 for valid RGB channel values.\n */\nfunction clampChannel(value: number): number {\n return Math.max(0, Math.min(255, Math.round(value)));\n}\n\n/**\n * Clamps alpha value between 0 and 1.\n */\nfunction clampAlpha(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\n/**\n * Converts a single hex character to its full two-character representation.\n */\nfunction expandHexChar(char: string): string {\n return char + char;\n}\n\n/**\n * Converts a number to a two-character hex string.\n */\nfunction toHex(value: number): string {\n return clampChannel(value).toString(16).padStart(2, '0').toUpperCase();\n}\n\n/**\n * Converts alpha (0-1) to hex (00-FF).\n */\nfunction alphaToHex(alpha: number): string {\n return Math.round(clampAlpha(alpha) * 255).toString(16).padStart(2, '0').toUpperCase();\n}\n\n/**\n * Converts hex alpha (00-FF) to decimal (0-1).\n */\nfunction hexToAlpha(hex: string): number {\n return Math.round((parseInt(hex, 16) / 255) * 100) / 100;\n}\n\ninterface ParsedColor {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\n/**\n * Parses any supported color format into RGBA components.\n */\nfunction parseColor(value: string): ParsedColor | null {\n // Try 6-digit hex (#RRGGBB)\n let match = value.match(HEX_6_PATTERN);\n if (match) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n a: 1,\n };\n }\n\n // Try 8-digit hex (#RRGGBBAA)\n match = value.match(HEX_8_PATTERN);\n if (match) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n a: hexToAlpha(match[4]),\n };\n }\n\n // Try 3-digit hex (#RGB)\n match = value.match(HEX_3_PATTERN);\n if (match) {\n return {\n r: parseInt(expandHexChar(match[1]), 16),\n g: parseInt(expandHexChar(match[2]), 16),\n b: parseInt(expandHexChar(match[3]), 16),\n a: 1,\n };\n }\n\n // Try 4-digit hex (#RGBA)\n match = value.match(HEX_4_PATTERN);\n if (match) {\n return {\n r: parseInt(expandHexChar(match[1]), 16),\n g: parseInt(expandHexChar(match[2]), 16),\n b: parseInt(expandHexChar(match[3]), 16),\n a: hexToAlpha(expandHexChar(match[4])),\n };\n }\n\n // Try RGB format\n match = value.match(RGB_PATTERN);\n if (match) {\n const r = parseInt(match[1], 10);\n const g = parseInt(match[2], 10);\n const b = parseInt(match[3], 10);\n // Validate range\n if (r > 255 || g > 255 || b > 255) {\n return null;\n }\n return { r, g, b, a: 1 };\n }\n\n // Try RGBA format\n match = value.match(RGBA_PATTERN);\n if (match) {\n const r = parseInt(match[1], 10);\n const g = parseInt(match[2], 10);\n const b = parseInt(match[3], 10);\n const a = parseFloat(match[4]);\n // Validate range\n if (r > 255 || g > 255 || b > 255 || a < 0 || a > 1) {\n return null;\n }\n return { r, g, b, a };\n }\n\n return null;\n}\n\n/**\n * ColorConvertPipe: Converts colors between HEX, RGB, and RGBA formats.\n *\n * @description\n * A versatile color conversion pipe that supports multiple input formats\n * and can convert to hex, rgb, or rgba output formats.\n *\n * **Supported Input Formats:**\n * - 3-digit HEX: #RGB (e.g., #F00)\n * - 4-digit HEX with alpha: #RGBA (e.g., #F00F)\n * - 6-digit HEX: #RRGGBB (e.g., #FF0000)\n * - 8-digit HEX with alpha: #RRGGBBAA (e.g., #FF0000FF)\n * - RGB: rgb(r, g, b) with flexible whitespace\n * - RGBA: rgba(r, g, b, a) with flexible whitespace\n *\n * **Output Formats:**\n * - 'hex': Returns #RRGGBB or #RRGGBBAA (if alpha < 1)\n * - 'rgb': Returns rgb(r, g, b) - alpha is discarded\n * - 'rgba': Returns rgba(r, g, b, a)\n *\n * @param {string} value - The input color string\n * @param {ColorTargetType} target - The desired output format\n * @returns {string} The converted color string, or original value if invalid\n *\n * @example\n * // Basic conversions\n * {{ '#FF0000' | colorConvert:'rgb' }} // rgb(255, 0, 0)\n * {{ 'rgb(0, 255, 0)' | colorConvert:'hex' }} // #00FF00\n *\n * @example\n * // Short hex support\n * {{ '#F00' | colorConvert:'rgb' }} // rgb(255, 0, 0)\n *\n * @example\n * // Alpha channel support\n * {{ '#FF000080' | colorConvert:'rgba' }} // rgba(255, 0, 0, 0.5)\n * {{ 'rgba(255, 0, 0, 0.5)' | colorConvert:'hex' }} // #FF000080\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'colorConvert',\n standalone: true,\n})\nexport class ColorConvertPipe implements PipeTransform {\n transform(value: string, target: ColorTargetType): string {\n if (!value || typeof value !== 'string') {\n return '';\n }\n\n const trimmedValue = value.trim();\n const parsed = parseColor(trimmedValue);\n\n if (!parsed) {\n return value;\n }\n\n const { r, g, b, a } = parsed;\n\n switch (target) {\n case 'hex':\n if (a < 1) {\n return `#${toHex(r)}${toHex(g)}${toHex(b)}${alphaToHex(a)}`;\n }\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n\n case 'rgb':\n return `rgb(${clampChannel(r)}, ${clampChannel(g)}, ${clampChannel(b)})`;\n\n case 'rgba':\n return `rgba(${clampChannel(r)}, ${clampChannel(g)}, ${clampChannel(b)}, ${clampAlpha(a)})`;\n\n default:\n return value;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'count',\n standalone: true\n})\nexport class CountPipe implements PipeTransform {\n\n transform(value: any): number {\n if (value === null || value === undefined) {\n return 0;\n }\n if (Array.isArray(value) || typeof value === 'string') {\n return value.length;\n }\n if (typeof value === 'object') {\n return Object.keys(value).length;\n }\n return 0;\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * CreditCardMaskPipe: Masks all but the last four digits of a string, optionally controlled by a boolean flag.\n * By default, masking is applied.\n *\n * @param {string} value - The input string to mask (e.g., credit card number).\n * @param {boolean} shouldMask - (Optional) Determines if masking should be applied. Defaults to true.\n * @returns {string} - The masked string or the original value if `shouldMask` is false or the value is too short.\n *\n * @example\n * {{ '1234567890123456' | creditCardMask }} // Outputs: **** **** **** 3456\n * {{ '1234-5678-9012-3456' | creditCardMask }} // Outputs: **** **** **** 3456\n * {{ '1234567890123456' | creditCardMask: true }} // Outputs: **** **** **** 3456\n * {{ '1234567890123456' | creditCardMask: false }} // Outputs: 1234567890123456\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'creditCardMask',\n standalone: true,\n})\nexport class CreditCardMaskPipe implements PipeTransform {\n transform(value: string | null | undefined, shouldMask = true): string | null | undefined {\n if (!value) {\n return value;\n }\n\n if (shouldMask) {\n const cleanedValue = value.replace(/[\\s-]/g, '');\n const cleanedLength = cleanedValue.length;\n\n if (cleanedLength < 4) {\n return value;\n }\n\n const visibleDigits = cleanedValue.slice(-4);\n const maskedSection = '*'.repeat(cleanedLength - 4);\n const groupedMask = maskedSection.match(/.{1,4}/g)?.join(' ') ?? '';\n\n return `${groupedMask} ${visibleDigits}`.trim();\n }\n\n return value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * DeviceType: Defines the type of element to render the QR code.\n *\n * @typedef {'mobile' | 'tablet' | 'desktop' | 'unknown'} DeviceType\n *\n * @description\n * This type specifies the type of device in which the program is currently running on.\n * - 'mobile': Indicates that the device is mobile.\n * - 'tablet': Indicates that the device is a tablet.\n * - 'desktop': Indicates that the device is a desktop.\n * - 'unknown': Indicates an invalid or empty input.\n */\nexport type DeviceType = 'mobile' | 'tablet' | 'desktop' | 'unknown';\n\n/**\n * DeviceTypePipe: Detects the device type based on the user agent string.\n *\n * @param {string} value - The user agent string (defaults to navigator.userAgent).\n *\n * @returns {'mobile' | 'tablet' | 'desktop' | 'unknown'} - The detected device type.\n *\n * @example\n * {{ '' | device }} // Outputs: 'mobile' (on a mobile device)\n * <div *ngIf=\"'' | device === 'desktop'\">Desktop-only content</div>\n */\n@Pipe({\n name: 'device',\n standalone: true\n})\nexport class DeviceTypePipe implements PipeTransform {\n\n transform(value: string = typeof navigator !== 'undefined' ? navigator.userAgent : ''): DeviceType {\n if (!value) return 'unknown';\n\n const userAgent = value.toLowerCase();\n const isMobile = /mobile|android|iphone|ipod|blackberry|opera mini|iemobile|windows phone/i.test(userAgent);\n const isTablet = /ipad|tablet|kindle|playbook|silk|nexus 7|nexus 10|android(?!.*mobile)/i.test(userAgent);\n\n if (isMobile) return 'mobile';\n if (isTablet) return 'tablet';\n\n return 'desktop';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * EmailMaskPipe: Masks the local part of an email address, revealing only the first and last characters.\n *\n * This Angular pipe transforms an email address string by replacing the characters between the first and last characters of the local part (before the '@') with \"***\".\n * If the local part is 2 characters or less, it masks all characters except the first.\n *\n * @param {string} value - The email address string to be masked.\n * @returns {string} - The masked email address, or the original value if it's not a valid email or falsy.\n *\n * @example\n * {{ 'test@example.com' | emailMask }} // Returns 't***t@example.com'\n * {{ 'te@example.com' | emailMask }} // Returns 't***@example.com'\n * {{ 't@example.com' | emailMask }} // Returns 't***@example.com'\n * {{ 'example.com' | emailMask }} // Returns 'example.com'\n * {{ null | emailMask }} // Returns ''\n * {{ undefined | emailMask }} // Returns ''\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'emailMask',\n standalone: true\n})\nexport class EmailMaskPipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value || !value.includes('@')) {\n return value || '';\n }\n\n const [local, domain] = value.split('@');\n if (local.length <= 2) {\n return `${local[0]}***@${domain}`;\n }\n const firstChar = local[0];\n const lastChar = local[local.length - 1];\n return `${firstChar}***${lastChar}@${domain}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { md5 } from 'js-md5';\n\n/**\n * GravatarPipe: Generates Gravatar URLs from email addresses.\n *\n * @param {string} value - The email address.\n * @param {number} [size=80] - The avatar size in pixels.\n *\n * @returns {string} - The Gravatar URL.\n *\n * @example\n * <img [src]=\"'user@example.com' | gravatar:100\" />\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'gravatar',\n standalone: true\n})\nexport class GravatarPipe implements PipeTransform {\n transform(value: string, size = 80): string {\n if (!value) return `https://www.gravatar.com/avatar/?s=${size}`;\n const hash = md5(value.trim().toLowerCase());\n return `https://www.gravatar.com/avatar/${hash}?s=${size}`;\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n/**\n * HighlightPipe: Highlights occurrences of a search term within a string.\n *\n * This Angular pipe transforms a string input by wrapping all occurrences of a specified\n * search term with a `<span>` element that has the class \"highlight\".\n * It uses the Angular `DomSanitizer` to bypass security and render the highlighted HTML.\n *\n * @param {string} value - The input string in which to highlight the search term.\n * @param {string} searchTerm - The string to search for and highlight.\n * @returns {SafeHtml} - The input string with the search term highlighted, or an empty string if input or searchTerm are falsy.\n *\n * @example\n * {{ 'This is a test string' | highlight: 'test' }} // Returns 'This is a <span class=\"highlight\">test</span> string'\n * {{ 'This is a test TEST string' | highlight: 'test' }} // Returns 'This is a <span class=\"highlight\">test</span> <span class=\"highlight\">TEST</span> string'\n * {{ 'This is a test string' | highlight: '' }} // Returns 'This is a test string'\n * {{ null | highlight: 'test' }} // Returns ''\n * {{ undefined | highlight: 'test' }} // Returns ''\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'highlight',\n standalone: true\n})\nexport class HighlightPipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n transform(value: string, searchTerm: string): SafeHtml {\n if (!value || !searchTerm) {\n return this.sanitizer.bypassSecurityTrustHtml(value || '');\n }\n\n const escapedSearch = searchTerm.replace(/[.*+?${}()|[\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escapedSearch})`, 'gi');\n const highlighed = value.replace(regex, '<span class=\"highlight\">$1</span>');\n return this.sanitizer.bypassSecurityTrustHtml(highlighed);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Converts special HTML characters in a string to their corresponding HTML entities.\n * This prevents the browser from interpreting the input as HTML, rendering it as plain text.\n *\n * @param {string} value - The input string containing HTML to escape.\n * @returns {string} The string with special HTML characters escaped, or an empty string if input is invalid.\n *\n * @example\n * ```html\n * {{ '<p>Hello</p>' | htmlEscape }} <!-- Outputs: &lt;p&gt;Hello&lt;/p&gt; -->\n * ```\n */\n@Pipe({\n name: 'htmlEscape',\n standalone: true\n})\nexport class HtmlEscapePipe implements PipeTransform {\n transform(value: string): string {\n if (!value || typeof value !== 'string') return '';\n\n const escapeMap: { [key: string]: string } = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&apos;'\n };\n\n return value.replace(/[&<>\"']/g, char => escapeMap[char]);\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n/**\n * Sanitizes HTML input to remove unsafe elements while allowing safe HTML to be rendered.\n * Uses Angular's DomSanitizer to mark the output as trusted for use in [innerHTML].\n *\n * @param {string} value - The input string containing HTML to sanitize.\n * @returns {SafeHtml} The sanitized HTML marked as safe, or an empty string if input is invalid.\n *\n * @remarks\n * WARNING: Use with caution. Only apply to trusted input to avoid XSS risks.\n * Ensure input is pre-validated or sourced from a secure origin (e.g., a controlled rich-text editor).\n *\n * @example\n * ```html\n * <div [innerHTML]=\"'<p>Hello</p><script>alert(1)</script>' | htmlSanitize\"></div>\n * <!-- Renders: <p>Hello</p> (script tag removed) -->\n * ```\n */\n@Pipe({\n name: 'htmlSanitize',\n standalone: true\n})\nexport class HtmlSanitizePipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n transform(value: string): SafeHtml {\n if (!value || typeof value !== 'string') return this.sanitizer.bypassSecurityTrustHtml('');\n return this.sanitizer.sanitize(0, value) || this.sanitizer.bypassSecurityTrustHtml('');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * InitialsPipe: Extracts initials from a name.\n *\n * @param {string} value - The full name.\n *\n * @returns {string} - The initials (e.g., 'John Doe' → 'JD').\n *\n * @example\n * {{ 'John Doe' | initials }} // Outputs: JD\n * {{ 'Mary Jane Watson' | initials }} // Outputs: MJW\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'initials',\n standalone: true\n})\nexport class InitialsPipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value) return '';\n return value\n .trim()\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase())\n .join('');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * IpAddressMaskPipe: Masks the last two octets of an IPv4 address.\n *\n * @param {string} value - The IPv4 address (e.g., 192.168.1.1).\n * @param {boolean} shouldMask - (Optional) Determines if masking should be applied. Defaults to true..\n *\n * @returns {string} - The masked IP address (e.g., 192.168.*.*).\n *\n * @example\n * {{ '192.168.1.1' | ipAddressMask }} // Outputs: 192.168.*.*\n * {{ '10.0.0.255' | ipAddressMask }} // Outputs: 10.0.*.*\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'ipAddressMask',\n standalone: true\n})\nexport class IpAddressMaskPipe implements PipeTransform {\n\n transform(value: string, shouldMask = true): string {\n if (!value || !/^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/.test(value)) {\n return value;\n }\n if (shouldMask) {\n const parts = value.split('.');\n return `${parts[0]}.${parts[1]}.*.*`;\n }\n return value;\n }\n}\n","import {inject, Pipe, PipeTransform} from '@angular/core';\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\n\n/**\n * JsonPrettyPipe: Formats JSON data with indentation and syntax highlighting.\n *\n * @param {string | object} value - The JSON string or object to format.\n * @param {number} [spaces=2] - Number of spaces for indentation.\n *\n * @returns {SafeHtml} - Formatted HTML with color-coded JSON.\n *\n * @example\n * {{ '{\"name\": \"John\", \"age\": 30}' | jsonPretty }} // Outputs: Colorful, indented JSON\n * <pre [innerHTML]=\"data | jsonPretty:4\"></pre> // 4-space indentation\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'jsonPretty',\n standalone: true\n})\nexport class JsonPrettyPipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n transform(value: string | object, spaces = 2, highlightProperty?: string | null): SafeHtml {\n let jsonString: string;\n\n try {\n if (typeof value === 'object') {\n jsonString = JSON.stringify(value, null, spaces);\n } else if (value && typeof value === 'string') {\n jsonString = JSON.stringify(JSON.parse(value), null, spaces);\n } else {\n throw new Error('Invalid or empty input');\n }\n } catch (e) {\n return this.sanitizer.bypassSecurityTrustHtml(\n '<span class=\"json-error\">Invalid JSON: ' + (e instanceof Error ? e.message : 'Unknown error') + '</span>'\n );\n }\n\n const escapedJson = jsonString\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n\n let finalJson = this.highlightJson(escapedJson);\n if (highlightProperty) {\n const lines = finalJson.split('\\n');\n const highlightedLines = lines.map(line => {\n const searchString = `<span class=\"json-key\">\"${highlightProperty}\"</span>`;\n if (line.includes(searchString)) {\n return `<span class=\"highlight-line\">${line}</span>`;\n }\n return line;\n });\n finalJson = highlightedLines.join('\\n');\n }\n return this.sanitizer.bypassSecurityTrustHtml(`<pre class=\"json-pretty\">${finalJson}</pre>`);\n }\n\n private highlightJson(json: string): string {\n let result = json.replace(/\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"/g, (match, p1, offset) => {\n const remainingString = json.substring(offset + match.length);\n const isKey = /^\\s*:/.test(remainingString);\n\n return isKey\n ? `<span class=\"json-key\">${match}</span>`\n : `<span class=\"json-string\">${match}</span>`;\n });\n\n // Highlight numbers\n result = result.replace(/\\b-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b/g, '<span class=\"json-number\">$&</span>');\n\n // Highlight booleans\n result = result.replace(/\\b(true|false)\\b/g, '<span class=\"json-boolean\">$&</span>');\n\n // Highlight null\n result = result.replace(/\\bnull\\b/g, '<span class=\"json-null\">$&</span>');\n\n // Highlight punctuation\n result = result.replace(/[{}[\\]]/g, '<span class=\"json-punctuation\">$&</span>');\n\n return result;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * KebabCasePipe: Converts text to kebab-case (e.g., \"hello world\" → \"hello-world\").\n *\n * @param {string} value - The input string to transform.\n * @returns {string} The string in kebab-case, or an empty string if input is invalid.\n *\n * @example\n * ```html\n * {{ 'hello world' | kebabCase }} <!-- Outputs: hello-world -->\n * ```\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'kebabCase',\n standalone: true\n})\nexport class KebabCasePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value || typeof value !== 'string') return '';\n return value\n .trim()\n .replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2') // Add hyphen between camelCase words\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, '-') // Replace non-alphanumeric (except hyphen) with hyphen\n .replace(/^-|-$/g, ''); // Remove leading/trailing hyphens\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * MorseCodePipe: Converts text to Morse code.\n *\n * @param {string} value - The text to convert to Morse code.\n *\n * @returns {string} - The Morse code representation (e.g., 'SOS' → '... --- ...').\n *\n * @example\n * {{ 'SOS' | morseCode }} // Outputs: '... --- ...'\n * {{ 'HELP' | morseCode }} // Outputs: '.... . .-.. .--.'\n * <p>{{ userInput | morseCode }}</p>\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'morseCode',\n standalone: true\n})\nexport class MorseCodePipe implements PipeTransform {\n private readonly morseCodeMap: { [key: string]: string } = {\n 'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.',\n 'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..',\n 'M': '--', 'N': '-.', 'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.',\n 'S': '...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-',\n 'Y': '-.--', 'Z': '--..', '0': '-----', '1': '.----', '2': '..---',\n '3': '...--', '4': '....-', '5': '.....', '6': '-....', '7': '--...',\n '8': '---..', '9': '----.'\n };\n\n transform(value: string): string {\n if (!value || typeof value !== 'string') {\n return '';\n }\n\n return value\n .toUpperCase()\n .split('')\n .map(char => this.morseCodeMap[char] || '')\n .filter(code => code)\n .join(' ');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as QRCode from 'qrcode';\n\n/**\n * QrCodePipe: Generates a QR code from a string.\n *\n * @param {string} value - The string to encode.\n * @param {QRCode.QRCodeToDataURLOptions} [options] - The QR code options.\n *\n * @returns {Promise<string>} - A promise that resolves with the QR code data URL.\n *\n * @example\n * <img [src]=\"'Hello, World!' | qrCode | async\" />\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'qrCode',\n standalone: true\n})\nexport class QrCodePipe implements PipeTransform {\n transform(value: string, options?: QRCode.QRCodeToDataURLOptions): Promise<string> {\n if (!value) {\n return Promise.resolve('');\n }\n\n return QRCode.toDataURL(value, options);\n }\n}","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n/**\n * ReplacePipe: A custom Angular pipe that either highlights or replaces text based on a pattern.\n *\n * - If `isReplace` is `false`, it highlights occurrences of the pattern (if `highlightClass` is provided).\n * - If `isReplace` is `true`, it replaces occurrences of the pattern with the replacement string, optionally highlighting the replacement.\n *\n * @param {string} value - The input string to transform.\n * @param {string | RegExp} pattern - The pattern to match (string or RegExp). If an empty string, the value is returned as-is.\n * @param {string} replacement - The string to replace matches with.\n * @param {string} [highlightClass] - Optional CSS class for highlighting matched or replaced text (e.g., 'highlight').\n * @param {boolean} [isReplace=true] - Whether to perform replacement (true) or only highlight matches (false).\n *\n * @returns {string | SafeHtml} - Returns the transformed string or SafeHtml with highlights.\n *\n * @example\n * {{ 'Hello World' | replace:'World':'Universe' }}\n * // Output: Hello Universe\n *\n * {{ 'test123' | replace:/\\d+/g:'X':'highlight' }}\n * // Output: test<span class=\"highlight\">X</span>\n *\n * {{ 'Angular is great' | replace:'great':'awesome':'highlight':true }}\n * // Output: Angular is <span class=\"highlight\">awesome</span>\n *\n * {{ 'Angular is great' | replace:'great':'awesome':'highlight':false }}\n * // Output: Angular is <span class=\"highlight\">great</span>\n *\n * <div [innerHTML]=\"'Angular is great' | replace:'great':'awesome':'highlight':false\"></div>\n * // Renders: Angular is <span class=\"highlight\">great</span>\n *\n * @author Mofiro Jean\n */\n\n@Pipe({\n name: 'replace',\n standalone: true\n})\nexport class ReplacePipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n transform(\n value: string,\n pattern: string | RegExp,\n replacement: string,\n highlightClass?: string,\n isReplace = true\n ): string | SafeHtml {\n\n if (!value) return '';\n\n // handles empty string pattern\n if (!pattern || (typeof pattern === 'string' && pattern.trim() === '')) {\n return value;\n }\n\n const finalPattern = typeof pattern === 'string' ? new RegExp(pattern, 'gi') : pattern;\n\n if (!highlightClass) {\n return isReplace ? value.replace(finalPattern, replacement) : value;\n }\n\n // Sanitize the replacement to prevent XSS\n const sanitizedReplacement = replacement.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\n if (isReplace) {\n const highlightedReplacement = `<span class=\"${highlightClass}\">${sanitizedReplacement}</span>`;\n const replaced = value.replace(finalPattern, highlightedReplacement);\n return this.sanitizer.bypassSecurityTrustHtml(replaced);\n }\n\n const highlightedMatch = `<span class=\"${highlightClass}\">$&</span>`;\n const result = value.replace(finalPattern, highlightedMatch);\n return this.sanitizer.bypassSecurityTrustHtml(result);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * ReversePipe: Reverses the characters in a string.\n *\n * @param {string} value - The string to reverse.\n *\n * @returns {string} - The reversed string (e.g., 'hello' → 'olleh').\n *\n * @example\n * {{ 'hello' | reverse }} // Outputs: 'olleh'\n * {{ '12345' | reverse }} // Outputs: '54321'\n * <p>{{ userInput | reverse }}</p>\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'reverse',\n standalone: true\n})\nexport class ReversePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value || typeof value !== 'string') {\n return '';\n }\n\n return value.split('').reverse().join('');\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * SnakeCasePipe: Converts text to snake_case (e.g., \"hello world\" → \"hello_world\").\n *\n * @param {string} value - The input string to transform.\n * @returns {string} The string in snake_case, or an empty string if input is invalid.\n *\n * @example\n * ```html\n * {{ 'hello world' | snakeCase }} <!-- Outputs: hello_world -->\n * ```\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'snakeCase',\n standalone: true\n})\nexport class SnakeCasePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value || typeof value !== 'string') return '';\n return value\n .trim()\n .replace(/([A-Z])/g, '_$1') // Convert camelCase to snake_case (e.g., helloWorld -> hello_World)\n .toLowerCase() // Convert everything to lowercase\n .replace(/[\\s-]+/g, '_') // Replace spaces and hyphens with underscores\n .replace(/[^a-z0-9_]+/g, '') // Remove all non-alphanumeric and non-underscore characters\n .replace(/_+/g, '_') // Collapse multiple underscores\n .replace(/^_|_$/g, ''); // Remove leading/trailing underscores\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * TextToSpeechPipe: Converts text to speech using the Web Speech API.\n *\n * @param {string} value - The text to convert to speech.\n * @param {string} [lang='en-US'] - The language (local) for speech synthesis.\n *\n * @returns {void} - Triggers speech synthesis (no return value).\n *\n * @example\n * <div>{{ Hello World' | textToSpeech }}</div>\n * <div>{{ 'Bonjour' | textToSpeech:'fr-FR' }}h</div>\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'textToSpeech',\n standalone: true\n})\nexport class TextToSpeechPipe implements PipeTransform {\n transform(value: string, lang = 'en-US'): void {\n if (!value || typeof window === 'undefined' || !window.speechSynthesis) return;\n const uttrance = new SpeechSynthesisUtterance(value);\n uttrance.lang = lang;\n window.speechSynthesis.speak(uttrance);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * TitleCasePipe: Capitalizes the first letter of each word in a string.\n *\n * @param {string} value - The input string to transform.\n * @returns {string} The string with each word capitalized, or an empty string if input is invalid.\n *\n * @example\n * ```html\n * {{ 'hello world' | titleCase }} <!-- Outputs: Hello World -->\n * ```\n */\n@Pipe({\n name: 'titleCase',\n standalone: true\n})\nexport class TitleCasePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value || typeof value !== 'string') return '';\n return value\n .split(' ')\n .filter(word => word.length > 0)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * TruncatePipe: Truncates a string to a specified maximum length, optionally preserving words.\n *\n * This Angular pipe transforms a string input by truncating it to the given `maxLength`.\n * It provides options to customize the ellipsis and preserve word boundaries.\n *\n * @param {string} value - The input string to be truncated.\n * @param {number} [maxLength=10] - The maximum length of the truncated string. Defaults to 10.\n * @param {string} [ellipsis='...'] - The string to append to the truncated portion. Defaults to '...'.\n * @param {boolean} [preserveWords=false] - If true, truncates at the last space before `maxLength` to avoid cutting words. Defaults to false.\n * @returns {string} - The truncated string. Returns an empty string if the input is null, undefined, or not a string.\n *\n * @example\n * {{ 'This is a long sentence' | truncate }} // Returns 'This is a...'\n * {{ 'This is a long sentence' | truncate: 20 }} // Returns 'This is a long sente...'\n * {{ 'This is a long sentence' | truncate: 15: ' [more]' }} // Returns 'This is a long [more]'\n * {{ 'This is a long sentence' | truncate: 15: '...' : true }} // Returns 'This is a...'\n * {{ 'This is a long sentence' | truncate: 20: '...' : true }} // Returns 'This is a long...'\n * {{ null | truncate }} // Returns ''\n * {{ undefined | truncate }} // Returns ''\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'truncate',\n standalone: true\n})\nexport class TruncatePipe implements PipeTransform {\n\n transform(value: string, maxLength = 10, ellipsis = '...', preserveWords = false): string {\n if (!value || typeof value !== 'string') {\n return '';\n }\n\n if (value.length <= maxLength) {\n return value;\n }\n\n const charsToKeep = maxLength - ellipsis.length;\n\n // If maxLength is too small to even include the ellipsis, just return the ellipsis.\n if (charsToKeep < 0) {\n return ellipsis;\n }\n\n let truncated = value.substring(0, charsToKeep);\n\n if (preserveWords) {\n const lastSpaceIndex = truncated.lastIndexOf(' ');\n // If a space is found and it's not the very beginning of the string\n if (lastSpaceIndex !== -1 && lastSpaceIndex !== 0) {\n truncated = truncated.substring(0, lastSpaceIndex);\n }\n }\n\n return truncated.trim() + ellipsis;\n }\n}\n","import { Provider } from '@angular/core';\nimport { AsciiArtPipe } from '../lib/pipes/ascii-art/ascii-art';\nimport { BarcodePipe } from '../lib/pipes/barcode/barcode';\nimport { CamelCasePipe } from '../lib/pipes/camel-case/camel-case';\nimport { ColorConvertPipe } from '../lib/pipes/color-convert/color-convert';\nimport { CreditCardMaskPipe } from '../lib/pipes/credit-card-mask/credit-card-mask';\nimport { DeviceTypePipe } from '../lib/pipes/device-type/device-type';\nimport { EmailMaskPipe } from '../lib/pipes/email-mask/email-mask';\nimport { GravatarPipe } from '../lib/pipes/gravatar/gravatar';\nimport { HighlightPipe } from '../lib/pipes/highlight/highlight';\nimport { HtmlEscapePipe } from '../lib/pipes/html-escape/html-escape';\nimport { HtmlSanitizePipe } from '../lib/pipes/html-sanitize/html-sanitize';\nimport { InitialsPipe } from '../lib/pipes/initials/initials';\nimport { IpAddressMaskPipe } from '../lib/pipes/ip-address-mask/ip-address-mask';\nimport { JsonPrettyPipe } from '../lib/pipes/json-pretty/json-pretty';\nimport { KebabCasePipe } from '../lib/pipes/kebab-case/kebab-case';\nimport { MorseCodePipe } from '../lib/pipes/morse-code/morse-code';\nimport { QrCodePipe } from '../lib/pipes/qr-code/qr-code';\nimport { ReplacePipe } from '../lib/pipes/replace/replace';\nimport { ReversePipe } from '../lib/pipes/reverse/reverse';\nimport { SnakeCasePipe } from '../lib/pipes/snake-case/snake-case';\nimport { TextToSpeechPipe } from '../lib/pipes/text-to-speech/text-to-speech';\nimport { TitleCasePipe } from '../lib/pipes/title-case/title-case';\nimport { TruncatePipe } from '../lib/pipes/truncate/truncate';\nimport { CountPipe } from '../lib/pipes/count/count'\n\nexport const ALL_PIPES: Provider[] = [\n AsciiArtPipe,\n BarcodePipe,\n CamelCasePipe,\n ColorConvertPipe,\n CreditCardMaskPipe,\n DeviceTypePipe,\n EmailMaskPipe,\n GravatarPipe,\n HighlightPipe,\n HtmlEscapePipe,\n HtmlSanitizePipe,\n InitialsPipe,\n IpAddressMaskPipe,\n JsonPrettyPipe,\n KebabCasePipe,\n MorseCodePipe,\n QrCodePipe,\n ReplacePipe,\n ReversePipe,\n SnakeCasePipe,\n TextToSpeechPipe,\n TitleCasePipe,\n TruncatePipe,\n CountPipe\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-transforms.mjs","sources":["../../../../libs/ngx-transforms/src/lib/pipes/ascii-art/ascii-art.ts","../../../../libs/ngx-transforms/src/lib/pipes/barcode/barcode.ts","../../../../libs/ngx-transforms/src/lib/pipes/camel-case/camel-case.ts","../../../../libs/ngx-transforms/src/lib/pipes/color-convert/color-convert.ts","../../../../libs/ngx-transforms/src/lib/pipes/count/count.ts","../../../../libs/ngx-transforms/src/lib/pipes/credit-card-mask/credit-card-mask.ts","../../../../libs/ngx-transforms/src/lib/pipes/device-type/device-type.ts","../../../../libs/ngx-transforms/src/lib/pipes/email-mask/email-mask.ts","../../../../libs/ngx-transforms/src/lib/pipes/gravatar/gravatar.ts","../../../../libs/ngx-transforms/src/lib/pipes/highlight/highlight.ts","../../../../libs/ngx-transforms/src/lib/pipes/html-escape/html-escape.ts","../../../../libs/ngx-transforms/src/lib/pipes/html-sanitize/html-sanitize.ts","../../../../libs/ngx-transforms/src/lib/pipes/initials/initials.ts","../../../../libs/ngx-transforms/src/lib/pipes/ip-address-mask/ip-address-mask.ts","../../../../libs/ngx-transforms/src/lib/pipes/json-pretty/json-pretty.ts","../../../../libs/ngx-transforms/src/lib/pipes/kebab-case/kebab-case.ts","../../../../libs/ngx-transforms/src/lib/pipes/morse-code/morse-code.ts","../../../../libs/ngx-transforms/src/lib/pipes/qr-code/qr-code.ts","../../../../libs/ngx-transforms/src/lib/pipes/replace/replace.ts","../../../../libs/ngx-transforms/src/lib/pipes/reverse/reverse.ts","../../../../libs/ngx-transforms/src/lib/pipes/snake-case/snake-case.ts","../../../../libs/ngx-transforms/src/lib/pipes/text-to-speech/text-to-speech.ts","../../../../libs/ngx-transforms/src/lib/pipes/title-case/title-case.ts","../../../../libs/ngx-transforms/src/lib/pipes/truncate/truncate.ts","../../../../libs/ngx-transforms/src/providers/all-pipes.provider.ts","../../../../libs/ngx-transforms/src/ngx-transforms.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport { AsciiGenerator, CharsetPreset, AsciiConfig, TextToAsciiOptions } from 'ts-ascii-engine';\n\n/**\n * Supported charset presets for ASCII art generation.\n */\nexport { CharsetPreset } from 'ts-ascii-engine';\n\n/**\n * Configuration options for ASCII art generation\n */\nexport interface AsciiArtOptions extends Partial<AsciiConfig> {\n /**\n * Text rendering options (only used when converting text to ASCII)\n */\n textOptions?: TextToAsciiOptions;\n\n /**\n * Return format: 'html' returns formatted HTML, 'text' returns plain text\n * @default 'html'\n */\n format?: 'html' | 'text';\n}\n\n/**\n * AsciiArtPipe: Converts text into ASCII art using ts-ascii-engine.\n *\n * This pipe leverages the high-performance ts-ascii-engine library to convert\n * text into visually appealing ASCII art with various customization options.\n *\n * @param {string} value - The text to convert to ASCII art.\n * @param {AsciiArtOptions} [options] - Configuration options for ASCII generation.\n *\n * @returns {string} - The ASCII art as HTML or plain text based on format option.\n *\n * @security\n * The pipe returns HTML by default. When using with [innerHTML], Angular's\n * DomSanitizer automatically sanitizes the output. For additional safety,\n * you can explicitly sanitize:\n * ```typescript\n * import { DomSanitizer } from '@angular/platform-browser';\n * this.safeHtml = this.sanitizer.sanitize(SecurityContext.HTML, asciiOutput);\n * ```\n *\n * @performance\n * - The AsciiGenerator instance is reused across transformations for optimal performance\n * - Use smaller charset and width values for faster rendering\n * - Consider format: 'text' for simple use cases (faster than HTML formatting)\n * - The library is optimized with typed arrays and minimal garbage collection\n *\n * @example\n * // Basic usage with default options\n * {{ 'HELLO' | asciiArt }}\n *\n * @example\n * // Custom charset and width\n * {{ 'CODE' | asciiArt:{ charset: CharsetPreset.BLOCK, width: 60 } }}\n *\n * @example\n * // Plain text output\n * {{ 'ASCII' | asciiArt:{ format: 'text' } }}\n *\n * @example\n * // Advanced text rendering with custom font\n * {{ 'WELCOME' | asciiArt:{\n * charset: CharsetPreset.STANDARD,\n * width: 80,\n * textOptions: {\n * font: 'Arial',\n * fontSize: 72,\n * fontWeight: 'bold'\n * }\n * }}}\n *\n * @example\n * // With inverted colors\n * {{ 'DARK' | asciiArt:{ inverted: true, charset: CharsetPreset.MINIMAL } }}\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'asciiArt',\n standalone: true,\n})\nexport class AsciiArtPipe implements PipeTransform {\n private generator: AsciiGenerator;\n\n constructor() {\n this.generator = new AsciiGenerator({\n charset: CharsetPreset.STANDARD,\n width: 80,\n optimized: true,\n });\n }\n\n transform(value: string, options: AsciiArtOptions = {}): string {\n if (!value || typeof value !== 'string') {\n return '';\n }\n\n const maxLength = 100;\n if (value.length > maxLength) {\n console.warn(`AsciiArtPipe: Input truncated to ${maxLength} characters for security`);\n value = value.substring(0, maxLength);\n }\n\n const { format = 'html', textOptions, ...config } = options;\n\n try {\n if (Object.keys(config).length > 0) {\n this.generator.updateConfig(config);\n }\n\n const result = this.generator.convertText(value, textOptions);\n\n if (format === 'text') {\n return `<pre class=\"ascii-art\">${this.escapeHtml(result.text)}</pre>`;\n }\n\n // Return HTML format (already safe from ts-ascii-engine)\n return result.html;\n } catch (error) {\n console.error('AsciiArtPipe: Error generating ASCII art', error);\n return `<pre class=\"ascii-art-error\">Error: Unable to generate ASCII art</pre>`;\n }\n }\n\n /**\n * Escapes HTML special characters to prevent XSS\n * @private\n */\n private escapeHtml(text: string): string {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml, SafeResourceUrl } from '@angular/platform-browser';\nimport JsBarcode from 'jsbarcode';\n\n/**\n * BarcodeElementType: Defines the type of element to render the barcode.\n *\n * @typedef {'svg' | 'img' | 'canvas'} BarcodeElementType\n */\nexport type BarcodeElementType = 'svg' | 'img' | 'canvas';\n\n/**\n * BarcodeFormat: Defines supported barcode formats.\n *\n * @typedef {'CODE128' | 'EAN13' | 'CODE39'} BarcodeFormat\n */\nexport type BarcodeFormat = 'CODE128' | 'EAN13' | 'CODE39';\n\n/**\n * BarcodeOptions: Configuration options for barcode generation.\n *\n * @interface BarcodeOptions\n * @property {BarcodeElementType} [elementType='svg'] - Output type (svg, img, canvas).\n * @property {BarcodeFormat} [format='CODE128'] - Barcode format.\n * @property {number} [width=2] - Bar width in pixels.\n * @property {number} [height=100] - Barcode height in pixels.\n * @property {string} [lineColor='#000000'] - Color of bars.\n * @property {boolean} [displayValue=true] - Show value below barcode.\n */\nexport interface BarcodeOptions {\n elementType?: BarcodeElementType;\n format?: BarcodeFormat;\n width?: number;\n height?: number;\n lineColor?: string;\n displayValue?: boolean;\n}\n\n/**\n * BarcodePipe: Generates a barcode from a string value.\n *\n * @param {string} value - The value to encode (e.g., '123456789').\n * @param {BarcodeOptions} [options={}] - Configuration options.\n *\n * @returns {Promise<SafeHtml | SafeResourceUrl>} - SVG markup or image data URL.\n *\n * @example\n * <div [innerHTML]=\"'123456789' | barcode:{elementType:'svg',format:'CODE128'} | async\"></div>\n * <img [src]=\"'123456789' | barcode:{elementType:'img'} | async\" />\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'barcode',\n standalone: true,\n})\nexport class BarcodePipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n async transform(value: string, options: BarcodeOptions = {}): Promise<SafeHtml | SafeResourceUrl | ''> {\n const {\n elementType = 'svg',\n format = 'CODE128',\n lineColor = '#000000',\n width = 2,\n height = 100,\n displayValue = true,\n } = options;\n\n if (!value) {\n return '';\n }\n\n // Sanitize the value to prevent XSS\n const sanitizedValue = value.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\n try {\n const config = { format, lineColor, width, height, displayValue };\n if (elementType === 'svg') {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n JsBarcode(svg, sanitizedValue, config);\n return this.sanitizer.bypassSecurityTrustHtml(svg.outerHTML);\n } else {\n const canvas = document.createElement('canvas');\n JsBarcode(canvas, sanitizedValue, config);\n const dataUrl = canvas.toDataURL('image/png');\n return this.sanitizer.bypassSecurityTrustResourceUrl(dataUrl);\n }\n } catch (error) {\n console.error('Barcode generation failed:', error);\n return '';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * CamelCasePipe: Converts text to camelCase (e.g., \"hello world\" → \"helloWorld\").\n *\n * @param {string} value - The input string to transform.\n * @returns {string} The string in camelCase, or an empty string if input is invalid.\n *\n * @example\n * ```html\n * {{ 'hello world' | camelCase }} <!-- Outputs: helloWorld -->\n * ```\n * \n * @author Mofiro Jean\n */\n@Pipe({\n name: 'camelCase',\n standalone: true\n})\nexport class CamelCasePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value || typeof value !== 'string') return '';\n return value\n .toLowerCase()\n .replace(/[^a-zA-Z0-9]+/g, ' ')\n .trim()\n .split(' ')\n .filter(word => word.length > 0)\n .map((word, index) => \n index === 0 \n ? word.toLowerCase() \n : word.charAt(0).toUpperCase() + word.slice(1)\n )\n .join('');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * ColorTargetType: Defines the target color format for conversion.\n *\n * @typedef {'hex' | 'rgb' | 'rgba'} ColorTargetType\n *\n * @description\n * Specifies the output format for color conversion:\n * - 'hex': Hexadecimal format (#RRGGBB or #RRGGBBAA)\n * - 'rgb': RGB format rgb(r, g, b)\n * - 'rgba': RGBA format rgba(r, g, b, a)\n */\nexport type ColorTargetType = 'hex' | 'rgb' | 'rgba';\n\n// Pre-compiled regex patterns for performance\nconst HEX_6_PATTERN = /^#([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/;\nconst HEX_8_PATTERN = /^#([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/;\nconst HEX_3_PATTERN = /^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/;\nconst HEX_4_PATTERN = /^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/;\nconst RGB_PATTERN = /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/i;\nconst RGBA_PATTERN = /^rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*([\\d.]+)\\s*\\)$/i;\n\n/**\n * Clamps a value between 0 and 255 for valid RGB channel values.\n */\nfunction clampChannel(value: number): number {\n return Math.max(0, Math.min(255, Math.round(value)));\n}\n\n/**\n * Clamps alpha value between 0 and 1.\n */\nfunction clampAlpha(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n\n/**\n * Converts a single hex character to its full two-character representation.\n */\nfunction expandHexChar(char: string): string {\n return char + char;\n}\n\n/**\n * Converts a number to a two-character hex string.\n */\nfunction toHex(value: number): string {\n return clampChannel(value).toString(16).padStart(2, '0').toUpperCase();\n}\n\n/**\n * Converts alpha (0-1) to hex (00-FF).\n */\nfunction alphaToHex(alpha: number): string {\n return Math.round(clampAlpha(alpha) * 255).toString(16).padStart(2, '0').toUpperCase();\n}\n\n/**\n * Converts hex alpha (00-FF) to decimal (0-1).\n */\nfunction hexToAlpha(hex: string): number {\n return Math.round((parseInt(hex, 16) / 255) * 100) / 100;\n}\n\ninterface ParsedColor {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\n/**\n * Parses any supported color format into RGBA components.\n */\nfunction parseColor(value: string): ParsedColor | null {\n // Try 6-digit hex (#RRGGBB)\n let match = value.match(HEX_6_PATTERN);\n if (match) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n a: 1,\n };\n }\n\n // Try 8-digit hex (#RRGGBBAA)\n match = value.match(HEX_8_PATTERN);\n if (match) {\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16),\n a: hexToAlpha(match[4]),\n };\n }\n\n // Try 3-digit hex (#RGB)\n match = value.match(HEX_3_PATTERN);\n if (match) {\n return {\n r: parseInt(expandHexChar(match[1]), 16),\n g: parseInt(expandHexChar(match[2]), 16),\n b: parseInt(expandHexChar(match[3]), 16),\n a: 1,\n };\n }\n\n // Try 4-digit hex (#RGBA)\n match = value.match(HEX_4_PATTERN);\n if (match) {\n return {\n r: parseInt(expandHexChar(match[1]), 16),\n g: parseInt(expandHexChar(match[2]), 16),\n b: parseInt(expandHexChar(match[3]), 16),\n a: hexToAlpha(expandHexChar(match[4])),\n };\n }\n\n // Try RGB format\n match = value.match(RGB_PATTERN);\n if (match) {\n const r = parseInt(match[1], 10);\n const g = parseInt(match[2], 10);\n const b = parseInt(match[3], 10);\n // Validate range\n if (r > 255 || g > 255 || b > 255) {\n return null;\n }\n return { r, g, b, a: 1 };\n }\n\n // Try RGBA format\n match = value.match(RGBA_PATTERN);\n if (match) {\n const r = parseInt(match[1], 10);\n const g = parseInt(match[2], 10);\n const b = parseInt(match[3], 10);\n const a = parseFloat(match[4]);\n // Validate range\n if (r > 255 || g > 255 || b > 255 || a < 0 || a > 1) {\n return null;\n }\n return { r, g, b, a };\n }\n\n return null;\n}\n\n/**\n * ColorConvertPipe: Converts colors between HEX, RGB, and RGBA formats.\n *\n * @description\n * A versatile color conversion pipe that supports multiple input formats\n * and can convert to hex, rgb, or rgba output formats.\n *\n * **Supported Input Formats:**\n * - 3-digit HEX: #RGB (e.g., #F00)\n * - 4-digit HEX with alpha: #RGBA (e.g., #F00F)\n * - 6-digit HEX: #RRGGBB (e.g., #FF0000)\n * - 8-digit HEX with alpha: #RRGGBBAA (e.g., #FF0000FF)\n * - RGB: rgb(r, g, b) with flexible whitespace\n * - RGBA: rgba(r, g, b, a) with flexible whitespace\n *\n * **Output Formats:**\n * - 'hex': Returns #RRGGBB or #RRGGBBAA (if alpha < 1)\n * - 'rgb': Returns rgb(r, g, b) - alpha is discarded\n * - 'rgba': Returns rgba(r, g, b, a)\n *\n * @param {string} value - The input color string\n * @param {ColorTargetType} target - The desired output format\n * @returns {string} The converted color string, or original value if invalid\n *\n * @example\n * // Basic conversions\n * {{ '#FF0000' | colorConvert:'rgb' }} // rgb(255, 0, 0)\n * {{ 'rgb(0, 255, 0)' | colorConvert:'hex' }} // #00FF00\n *\n * @example\n * // Short hex support\n * {{ '#F00' | colorConvert:'rgb' }} // rgb(255, 0, 0)\n *\n * @example\n * // Alpha channel support\n * {{ '#FF000080' | colorConvert:'rgba' }} // rgba(255, 0, 0, 0.5)\n * {{ 'rgba(255, 0, 0, 0.5)' | colorConvert:'hex' }} // #FF000080\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'colorConvert',\n standalone: true,\n})\nexport class ColorConvertPipe implements PipeTransform {\n transform(value: string, target: ColorTargetType): string {\n if (!value || typeof value !== 'string') {\n return '';\n }\n\n const trimmedValue = value.trim();\n const parsed = parseColor(trimmedValue);\n\n if (!parsed) {\n return value;\n }\n\n const { r, g, b, a } = parsed;\n\n switch (target) {\n case 'hex':\n if (a < 1) {\n return `#${toHex(r)}${toHex(g)}${toHex(b)}${alphaToHex(a)}`;\n }\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n\n case 'rgb':\n return `rgb(${clampChannel(r)}, ${clampChannel(g)}, ${clampChannel(b)})`;\n\n case 'rgba':\n return `rgba(${clampChannel(r)}, ${clampChannel(g)}, ${clampChannel(b)}, ${clampAlpha(a)})`;\n\n default:\n return value;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'count',\n standalone: true\n})\nexport class CountPipe implements PipeTransform {\n\n transform(value: any): number {\n if (value === null || value === undefined) {\n return 0;\n }\n if (Array.isArray(value) || typeof value === 'string') {\n return value.length;\n }\n if (typeof value === 'object') {\n return Object.keys(value).length;\n }\n return 0;\n }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * CreditCardMaskPipe: Masks all but the last four digits of a string, optionally controlled by a boolean flag.\n * By default, masking is applied.\n *\n * @param {string} value - The input string to mask (e.g., credit card number).\n * @param {boolean} shouldMask - (Optional) Determines if masking should be applied. Defaults to true.\n * @returns {string} - The masked string or the original value if `shouldMask` is false or the value is too short.\n *\n * @example\n * {{ '1234567890123456' | creditCardMask }} // Outputs: **** **** **** 3456\n * {{ '1234-5678-9012-3456' | creditCardMask }} // Outputs: **** **** **** 3456\n * {{ '1234567890123456' | creditCardMask: true }} // Outputs: **** **** **** 3456\n * {{ '1234567890123456' | creditCardMask: false }} // Outputs: 1234567890123456\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'creditCardMask',\n standalone: true,\n})\nexport class CreditCardMaskPipe implements PipeTransform {\n transform(value: string | null | undefined, shouldMask = true): string | null | undefined {\n if (!value) {\n return value;\n }\n\n if (shouldMask) {\n const cleanedValue = value.replace(/[\\s-]/g, '');\n const cleanedLength = cleanedValue.length;\n\n if (cleanedLength < 4) {\n return value;\n }\n\n const visibleDigits = cleanedValue.slice(-4);\n const maskedSection = '*'.repeat(cleanedLength - 4);\n const groupedMask = maskedSection.match(/.{1,4}/g)?.join(' ') ?? '';\n\n return `${groupedMask} ${visibleDigits}`.trim();\n }\n\n return value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * DeviceType: Defines the type of element to render the QR code.\n *\n * @typedef {'mobile' | 'tablet' | 'desktop' | 'unknown'} DeviceType\n *\n * @description\n * This type specifies the type of device in which the program is currently running on.\n * - 'mobile': Indicates that the device is mobile.\n * - 'tablet': Indicates that the device is a tablet.\n * - 'desktop': Indicates that the device is a desktop.\n * - 'unknown': Indicates an invalid or empty input.\n */\nexport type DeviceType = 'mobile' | 'tablet' | 'desktop' | 'unknown';\n\n/**\n * DeviceTypePipe: Detects the device type based on the user agent string.\n *\n * @param {string} value - The user agent string (defaults to navigator.userAgent).\n *\n * @returns {'mobile' | 'tablet' | 'desktop' | 'unknown'} - The detected device type.\n *\n * @example\n * {{ '' | device }} // Outputs: 'mobile' (on a mobile device)\n * <div *ngIf=\"'' | device === 'desktop'\">Desktop-only content</div>\n */\n@Pipe({\n name: 'device',\n standalone: true\n})\nexport class DeviceTypePipe implements PipeTransform {\n\n transform(value: string = typeof navigator !== 'undefined' ? navigator.userAgent : ''): DeviceType {\n if (!value) return 'unknown';\n\n const userAgent = value.toLowerCase();\n const isMobile = /mobile|android|iphone|ipod|blackberry|opera mini|iemobile|windows phone/i.test(userAgent);\n const isTablet = /ipad|tablet|kindle|playbook|silk|nexus 7|nexus 10|android(?!.*mobile)/i.test(userAgent);\n\n if (isMobile) return 'mobile';\n if (isTablet) return 'tablet';\n\n return 'desktop';\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * EmailMaskPipe: Masks the local part of an email address, revealing only the first and last characters.\n *\n * This Angular pipe transforms an email address string by replacing the characters between the first and last characters of the local part (before the '@') with \"***\".\n * If the local part is 2 characters or less, it masks all characters except the first.\n *\n * @param {string} value - The email address string to be masked.\n * @returns {string} - The masked email address, or the original value if it's not a valid email or falsy.\n *\n * @example\n * {{ 'test@example.com' | emailMask }} // Returns 't***t@example.com'\n * {{ 'te@example.com' | emailMask }} // Returns 't***@example.com'\n * {{ 't@example.com' | emailMask }} // Returns 't***@example.com'\n * {{ 'example.com' | emailMask }} // Returns 'example.com'\n * {{ null | emailMask }} // Returns ''\n * {{ undefined | emailMask }} // Returns ''\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'emailMask',\n standalone: true\n})\nexport class EmailMaskPipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value || !value.includes('@')) {\n return value || '';\n }\n\n const [local, domain] = value.split('@');\n if (local.length <= 2) {\n return `${local[0]}***@${domain}`;\n }\n const firstChar = local[0];\n const lastChar = local[local.length - 1];\n return `${firstChar}***${lastChar}@${domain}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { md5 } from 'js-md5';\n\n/**\n * GravatarPipe: Generates Gravatar URLs from email addresses.\n *\n * @param {string} value - The email address.\n * @param {number} [size=80] - The avatar size in pixels.\n *\n * @returns {string} - The Gravatar URL.\n *\n * @example\n * <img [src]=\"'user@example.com' | gravatar:100\" />\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'gravatar',\n standalone: true\n})\nexport class GravatarPipe implements PipeTransform {\n transform(value: string, size = 80): string {\n if (!value) return `https://www.gravatar.com/avatar/?s=${size}`;\n const hash = md5(value.trim().toLowerCase());\n return `https://www.gravatar.com/avatar/${hash}?s=${size}`;\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n/**\n * HighlightPipe: Highlights occurrences of a search term within a string.\n *\n * This Angular pipe transforms a string input by wrapping all occurrences of a specified\n * search term with a `<span>` element that has the class \"highlight\".\n * It uses the Angular `DomSanitizer` to bypass security and render the highlighted HTML.\n *\n * @param {string} value - The input string in which to highlight the search term.\n * @param {string} searchTerm - The string to search for and highlight.\n * @returns {SafeHtml} - The input string with the search term highlighted, or an empty string if input or searchTerm are falsy.\n *\n * @example\n * {{ 'This is a test string' | highlight: 'test' }} // Returns 'This is a <span class=\"highlight\">test</span> string'\n * {{ 'This is a test TEST string' | highlight: 'test' }} // Returns 'This is a <span class=\"highlight\">test</span> <span class=\"highlight\">TEST</span> string'\n * {{ 'This is a test string' | highlight: '' }} // Returns 'This is a test string'\n * {{ null | highlight: 'test' }} // Returns ''\n * {{ undefined | highlight: 'test' }} // Returns ''\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'highlight',\n standalone: true\n})\nexport class HighlightPipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n transform(value: string, searchTerm: string): SafeHtml {\n if (!value || !searchTerm) {\n return this.sanitizer.bypassSecurityTrustHtml(value || '');\n }\n\n const escapedSearch = searchTerm.replace(/[.*+?${}()|[\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escapedSearch})`, 'gi');\n const highlighed = value.replace(regex, '<span class=\"highlight\">$1</span>');\n return this.sanitizer.bypassSecurityTrustHtml(highlighed);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Converts special HTML characters in a string to their corresponding HTML entities.\n * This prevents the browser from interpreting the input as HTML, rendering it as plain text.\n *\n * @param {string} value - The input string containing HTML to escape.\n * @returns {string} The string with special HTML characters escaped, or an empty string if input is invalid.\n *\n * @example\n * ```html\n * {{ '<p>Hello</p>' | htmlEscape }} <!-- Outputs: &lt;p&gt;Hello&lt;/p&gt; -->\n * ```\n */\n@Pipe({\n name: 'htmlEscape',\n standalone: true\n})\nexport class HtmlEscapePipe implements PipeTransform {\n transform(value: string): string {\n if (!value || typeof value !== 'string') return '';\n\n const escapeMap: { [key: string]: string } = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&apos;'\n };\n\n return value.replace(/[&<>\"']/g, char => escapeMap[char]);\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n/**\n * Sanitizes HTML input to remove unsafe elements while allowing safe HTML to be rendered.\n * Uses Angular's DomSanitizer to mark the output as trusted for use in [innerHTML].\n *\n * @param {string} value - The input string containing HTML to sanitize.\n * @returns {SafeHtml} The sanitized HTML marked as safe, or an empty string if input is invalid.\n *\n * @remarks\n * WARNING: Use with caution. Only apply to trusted input to avoid XSS risks.\n * Ensure input is pre-validated or sourced from a secure origin (e.g., a controlled rich-text editor).\n *\n * @example\n * ```html\n * <div [innerHTML]=\"'<p>Hello</p><script>alert(1)</script>' | htmlSanitize\"></div>\n * <!-- Renders: <p>Hello</p> (script tag removed) -->\n * ```\n */\n@Pipe({\n name: 'htmlSanitize',\n standalone: true\n})\nexport class HtmlSanitizePipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n transform(value: string): SafeHtml {\n if (!value || typeof value !== 'string') return this.sanitizer.bypassSecurityTrustHtml('');\n return this.sanitizer.sanitize(0, value) || this.sanitizer.bypassSecurityTrustHtml('');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * InitialsPipe: Extracts initials from a name.\n *\n * @param {string} value - The full name.\n *\n * @returns {string} - The initials (e.g., 'John Doe' → 'JD').\n *\n * @example\n * {{ 'John Doe' | initials }} // Outputs: JD\n * {{ 'Mary Jane Watson' | initials }} // Outputs: MJW\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'initials',\n standalone: true\n})\nexport class InitialsPipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value) return '';\n return value\n .trim()\n .split(/\\s+/)\n .map(word => word.charAt(0).toUpperCase())\n .join('');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * IpAddressMaskPipe: Masks the last two octets of an IPv4 address.\n *\n * @param {string} value - The IPv4 address (e.g., 192.168.1.1).\n * @param {boolean} shouldMask - (Optional) Determines if masking should be applied. Defaults to true..\n *\n * @returns {string} - The masked IP address (e.g., 192.168.*.*).\n *\n * @example\n * {{ '192.168.1.1' | ipAddressMask }} // Outputs: 192.168.*.*\n * {{ '10.0.0.255' | ipAddressMask }} // Outputs: 10.0.*.*\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'ipAddressMask',\n standalone: true\n})\nexport class IpAddressMaskPipe implements PipeTransform {\n\n transform(value: string, shouldMask = true): string {\n if (!value || !/^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/.test(value)) {\n return value;\n }\n if (shouldMask) {\n const parts = value.split('.');\n return `${parts[0]}.${parts[1]}.*.*`;\n }\n return value;\n }\n}\n","import {inject, Pipe, PipeTransform} from '@angular/core';\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\n\n/**\n * JsonPrettyPipe: Formats JSON data with indentation and syntax highlighting.\n *\n * @param {string | object} value - The JSON string or object to format.\n * @param {number} [spaces=2] - Number of spaces for indentation.\n *\n * @returns {SafeHtml} - Formatted HTML with color-coded JSON.\n *\n * @example\n * {{ '{\"name\": \"John\", \"age\": 30}' | jsonPretty }} // Outputs: Colorful, indented JSON\n * <pre [innerHTML]=\"data | jsonPretty:4\"></pre> // 4-space indentation\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'jsonPretty',\n standalone: true\n})\nexport class JsonPrettyPipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n transform(value: string | object, spaces = 2, highlightProperty?: string | null): SafeHtml {\n let jsonString: string;\n\n try {\n if (typeof value === 'object') {\n jsonString = JSON.stringify(value, null, spaces);\n } else if (value && typeof value === 'string') {\n jsonString = JSON.stringify(JSON.parse(value), null, spaces);\n } else {\n throw new Error('Invalid or empty input');\n }\n } catch (e) {\n return this.sanitizer.bypassSecurityTrustHtml(\n '<span class=\"json-error\">Invalid JSON: ' + (e instanceof Error ? e.message : 'Unknown error') + '</span>'\n );\n }\n\n const escapedJson = jsonString\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n\n let finalJson = this.highlightJson(escapedJson);\n if (highlightProperty) {\n const lines = finalJson.split('\\n');\n const highlightedLines = lines.map(line => {\n const searchString = `<span class=\"json-key\">\"${highlightProperty}\"</span>`;\n if (line.includes(searchString)) {\n return `<span class=\"highlight-line\">${line}</span>`;\n }\n return line;\n });\n finalJson = highlightedLines.join('\\n');\n }\n return this.sanitizer.bypassSecurityTrustHtml(`<pre class=\"json-pretty\">${finalJson}</pre>`);\n }\n\n private highlightJson(json: string): string {\n let result = json.replace(/\"([^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)\"/g, (match, p1, offset) => {\n const remainingString = json.substring(offset + match.length);\n const isKey = /^\\s*:/.test(remainingString);\n\n return isKey\n ? `<span class=\"json-key\">${match}</span>`\n : `<span class=\"json-string\">${match}</span>`;\n });\n\n // Highlight numbers\n result = result.replace(/\\b-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?\\b/g, '<span class=\"json-number\">$&</span>');\n\n // Highlight booleans\n result = result.replace(/\\b(true|false)\\b/g, '<span class=\"json-boolean\">$&</span>');\n\n // Highlight null\n result = result.replace(/\\bnull\\b/g, '<span class=\"json-null\">$&</span>');\n\n // Highlight punctuation\n result = result.replace(/[{}[\\]]/g, '<span class=\"json-punctuation\">$&</span>');\n\n return result;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * KebabCasePipe: Converts text to kebab-case (e.g., \"hello world\" → \"hello-world\").\n *\n * @param {string} value - The input string to transform.\n * @returns {string} The string in kebab-case, or an empty string if input is invalid.\n *\n * @example\n * ```html\n * {{ 'hello world' | kebabCase }} <!-- Outputs: hello-world -->\n * ```\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'kebabCase',\n standalone: true\n})\nexport class KebabCasePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value || typeof value !== 'string') return '';\n return value\n .trim()\n .replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2') // Add hyphen between camelCase words\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, '-') // Replace non-alphanumeric (except hyphen) with hyphen\n .replace(/^-|-$/g, ''); // Remove leading/trailing hyphens\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * MorseCodePipe: Converts text to Morse code.\n *\n * @param {string} value - The text to convert to Morse code.\n *\n * @returns {string} - The Morse code representation (e.g., 'SOS' → '... --- ...').\n *\n * @example\n * {{ 'SOS' | morseCode }} // Outputs: '... --- ...'\n * {{ 'HELP' | morseCode }} // Outputs: '.... . .-.. .--.'\n * <p>{{ userInput | morseCode }}</p>\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'morseCode',\n standalone: true\n})\nexport class MorseCodePipe implements PipeTransform {\n private readonly morseCodeMap: { [key: string]: string } = {\n 'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.',\n 'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..',\n 'M': '--', 'N': '-.', 'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.',\n 'S': '...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-',\n 'Y': '-.--', 'Z': '--..', '0': '-----', '1': '.----', '2': '..---',\n '3': '...--', '4': '....-', '5': '.....', '6': '-....', '7': '--...',\n '8': '---..', '9': '----.'\n };\n\n transform(value: string): string {\n if (!value || typeof value !== 'string') {\n return '';\n }\n\n return value\n .toUpperCase()\n .split('')\n .map(char => this.morseCodeMap[char] || '')\n .filter(code => code)\n .join(' ');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport * as QRCode from 'qrcode';\n\nexport interface QrCodeOptions {\n version?: number;\n errorCorrectionLevel?: 'low' | 'medium' | 'quartile' | 'high' | 'L' | 'M' | 'Q' | 'H';\n maskPattern?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;\n margin?: number;\n scale?: number;\n width?: number;\n color?: {\n dark?: string;\n light?: string;\n };\n type?: 'image/png' | 'image/jpeg' | 'image/webp';\n rendererOpts?: {\n quality?: number;\n };\n}\n\n/**\n * QrCodePipe: Generates a QR code from a string.\n *\n * @param {string} value - The string to encode.\n * @param {QrCodeOptions} [options] - The QR code options.\n *\n * @returns {Promise<string>} - A promise that resolves with the QR code data URL.\n *\n * @example\n * <img [src]=\"'Hello, World!' | qrCode | async\" />\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'qrCode',\n standalone: true\n})\nexport class QrCodePipe implements PipeTransform {\n transform(value: string, options?: QrCodeOptions): Promise<string> {\n if (!value) {\n return Promise.resolve('');\n }\n\n return QRCode.toDataURL(value, options as QRCode.QRCodeToDataURLOptions);\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n/**\n * ReplacePipe: A custom Angular pipe that either highlights or replaces text based on a pattern.\n *\n * - If `isReplace` is `false`, it highlights occurrences of the pattern (if `highlightClass` is provided).\n * - If `isReplace` is `true`, it replaces occurrences of the pattern with the replacement string, optionally highlighting the replacement.\n *\n * @param {string} value - The input string to transform.\n * @param {string | RegExp} pattern - The pattern to match (string or RegExp). If an empty string, the value is returned as-is.\n * @param {string} replacement - The string to replace matches with.\n * @param {string} [highlightClass] - Optional CSS class for highlighting matched or replaced text (e.g., 'highlight').\n * @param {boolean} [isReplace=true] - Whether to perform replacement (true) or only highlight matches (false).\n *\n * @returns {string | SafeHtml} - Returns the transformed string or SafeHtml with highlights.\n *\n * @example\n * {{ 'Hello World' | replace:'World':'Universe' }}\n * // Output: Hello Universe\n *\n * {{ 'test123' | replace:/\\d+/g:'X':'highlight' }}\n * // Output: test<span class=\"highlight\">X</span>\n *\n * {{ 'Angular is great' | replace:'great':'awesome':'highlight':true }}\n * // Output: Angular is <span class=\"highlight\">awesome</span>\n *\n * {{ 'Angular is great' | replace:'great':'awesome':'highlight':false }}\n * // Output: Angular is <span class=\"highlight\">great</span>\n *\n * <div [innerHTML]=\"'Angular is great' | replace:'great':'awesome':'highlight':false\"></div>\n * // Renders: Angular is <span class=\"highlight\">great</span>\n *\n * @author Mofiro Jean\n */\n\n@Pipe({\n name: 'replace',\n standalone: true\n})\nexport class ReplacePipe implements PipeTransform {\n private sanitizer = inject(DomSanitizer);\n\n transform(\n value: string,\n pattern: string | RegExp,\n replacement: string,\n highlightClass?: string,\n isReplace = true\n ): string | SafeHtml {\n\n if (!value) return '';\n\n // handles empty string pattern\n if (!pattern || (typeof pattern === 'string' && pattern.trim() === '')) {\n return value;\n }\n\n const finalPattern = typeof pattern === 'string' ? new RegExp(pattern, 'gi') : pattern;\n\n if (!highlightClass) {\n return isReplace ? value.replace(finalPattern, replacement) : value;\n }\n\n // Sanitize the replacement to prevent XSS\n const sanitizedReplacement = replacement.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n\n if (isReplace) {\n const highlightedReplacement = `<span class=\"${highlightClass}\">${sanitizedReplacement}</span>`;\n const replaced = value.replace(finalPattern, highlightedReplacement);\n return this.sanitizer.bypassSecurityTrustHtml(replaced);\n }\n\n const highlightedMatch = `<span class=\"${highlightClass}\">$&</span>`;\n const result = value.replace(finalPattern, highlightedMatch);\n return this.sanitizer.bypassSecurityTrustHtml(result);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * ReversePipe: Reverses the characters in a string.\n *\n * @param {string} value - The string to reverse.\n *\n * @returns {string} - The reversed string (e.g., 'hello' → 'olleh').\n *\n * @example\n * {{ 'hello' | reverse }} // Outputs: 'olleh'\n * {{ '12345' | reverse }} // Outputs: '54321'\n * <p>{{ userInput | reverse }}</p>\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'reverse',\n standalone: true\n})\nexport class ReversePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value || typeof value !== 'string') {\n return '';\n }\n\n return value.split('').reverse().join('');\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * SnakeCasePipe: Converts text to snake_case (e.g., \"hello world\" → \"hello_world\").\n *\n * @param {string} value - The input string to transform.\n * @returns {string} The string in snake_case, or an empty string if input is invalid.\n *\n * @example\n * ```html\n * {{ 'hello world' | snakeCase }} <!-- Outputs: hello_world -->\n * ```\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'snakeCase',\n standalone: true\n})\nexport class SnakeCasePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value || typeof value !== 'string') return '';\n return value\n .trim()\n .replace(/([A-Z])/g, '_$1') // Convert camelCase to snake_case (e.g., helloWorld -> hello_World)\n .toLowerCase() // Convert everything to lowercase\n .replace(/[\\s-]+/g, '_') // Replace spaces and hyphens with underscores\n .replace(/[^a-z0-9_]+/g, '') // Remove all non-alphanumeric and non-underscore characters\n .replace(/_+/g, '_') // Collapse multiple underscores\n .replace(/^_|_$/g, ''); // Remove leading/trailing underscores\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * TextToSpeechPipe: Converts text to speech using the Web Speech API.\n *\n * @param {string} value - The text to convert to speech.\n * @param {string} [lang='en-US'] - The language (local) for speech synthesis.\n *\n * @returns {void} - Triggers speech synthesis (no return value).\n *\n * @example\n * <div>{{ Hello World' | textToSpeech }}</div>\n * <div>{{ 'Bonjour' | textToSpeech:'fr-FR' }}h</div>\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'textToSpeech',\n standalone: true\n})\nexport class TextToSpeechPipe implements PipeTransform {\n transform(value: string, lang = 'en-US'): void {\n if (!value || typeof window === 'undefined' || !window.speechSynthesis) return;\n const uttrance = new SpeechSynthesisUtterance(value);\n uttrance.lang = lang;\n window.speechSynthesis.speak(uttrance);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * TitleCasePipe: Capitalizes the first letter of each word in a string.\n *\n * @param {string} value - The input string to transform.\n * @returns {string} The string with each word capitalized, or an empty string if input is invalid.\n *\n * @example\n * ```html\n * {{ 'hello world' | titleCase }} <!-- Outputs: Hello World -->\n * ```\n */\n@Pipe({\n name: 'titleCase',\n standalone: true\n})\nexport class TitleCasePipe implements PipeTransform {\n\n transform(value: string): string {\n if (!value || typeof value !== 'string') return '';\n return value\n .split(' ')\n .filter(word => word.length > 0)\n .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())\n .join(' ');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * TruncatePipe: Truncates a string to a specified maximum length, optionally preserving words.\n *\n * This Angular pipe transforms a string input by truncating it to the given `maxLength`.\n * It provides options to customize the ellipsis and preserve word boundaries.\n *\n * @param {string} value - The input string to be truncated.\n * @param {number} [maxLength=10] - The maximum length of the truncated string. Defaults to 10.\n * @param {string} [ellipsis='...'] - The string to append to the truncated portion. Defaults to '...'.\n * @param {boolean} [preserveWords=false] - If true, truncates at the last space before `maxLength` to avoid cutting words. Defaults to false.\n * @returns {string} - The truncated string. Returns an empty string if the input is null, undefined, or not a string.\n *\n * @example\n * {{ 'This is a long sentence' | truncate }} // Returns 'This is a...'\n * {{ 'This is a long sentence' | truncate: 20 }} // Returns 'This is a long sente...'\n * {{ 'This is a long sentence' | truncate: 15: ' [more]' }} // Returns 'This is a long [more]'\n * {{ 'This is a long sentence' | truncate: 15: '...' : true }} // Returns 'This is a...'\n * {{ 'This is a long sentence' | truncate: 20: '...' : true }} // Returns 'This is a long...'\n * {{ null | truncate }} // Returns ''\n * {{ undefined | truncate }} // Returns ''\n *\n * @author Mofiro Jean\n */\n@Pipe({\n name: 'truncate',\n standalone: true\n})\nexport class TruncatePipe implements PipeTransform {\n\n transform(value: string, maxLength = 10, ellipsis = '...', preserveWords = false): string {\n if (!value || typeof value !== 'string') {\n return '';\n }\n\n if (value.length <= maxLength) {\n return value;\n }\n\n const charsToKeep = maxLength - ellipsis.length;\n\n // If maxLength is too small to even include the ellipsis, just return the ellipsis.\n if (charsToKeep < 0) {\n return ellipsis;\n }\n\n let truncated = value.substring(0, charsToKeep);\n\n if (preserveWords) {\n const lastSpaceIndex = truncated.lastIndexOf(' ');\n // If a space is found and it's not the very beginning of the string\n if (lastSpaceIndex !== -1 && lastSpaceIndex !== 0) {\n truncated = truncated.substring(0, lastSpaceIndex);\n }\n }\n\n return truncated.trim() + ellipsis;\n }\n}\n","import { Provider } from '@angular/core';\nimport { AsciiArtPipe } from '../lib/pipes/ascii-art/ascii-art';\nimport { BarcodePipe } from '../lib/pipes/barcode/barcode';\nimport { CamelCasePipe } from '../lib/pipes/camel-case/camel-case';\nimport { ColorConvertPipe } from '../lib/pipes/color-convert/color-convert';\nimport { CreditCardMaskPipe } from '../lib/pipes/credit-card-mask/credit-card-mask';\nimport { DeviceTypePipe } from '../lib/pipes/device-type/device-type';\nimport { EmailMaskPipe } from '../lib/pipes/email-mask/email-mask';\nimport { GravatarPipe } from '../lib/pipes/gravatar/gravatar';\nimport { HighlightPipe } from '../lib/pipes/highlight/highlight';\nimport { HtmlEscapePipe } from '../lib/pipes/html-escape/html-escape';\nimport { HtmlSanitizePipe } from '../lib/pipes/html-sanitize/html-sanitize';\nimport { InitialsPipe } from '../lib/pipes/initials/initials';\nimport { IpAddressMaskPipe } from '../lib/pipes/ip-address-mask/ip-address-mask';\nimport { JsonPrettyPipe } from '../lib/pipes/json-pretty/json-pretty';\nimport { KebabCasePipe } from '../lib/pipes/kebab-case/kebab-case';\nimport { MorseCodePipe } from '../lib/pipes/morse-code/morse-code';\nimport { QrCodePipe } from '../lib/pipes/qr-code/qr-code';\nimport { ReplacePipe } from '../lib/pipes/replace/replace';\nimport { ReversePipe } from '../lib/pipes/reverse/reverse';\nimport { SnakeCasePipe } from '../lib/pipes/snake-case/snake-case';\nimport { TextToSpeechPipe } from '../lib/pipes/text-to-speech/text-to-speech';\nimport { TitleCasePipe } from '../lib/pipes/title-case/title-case';\nimport { TruncatePipe } from '../lib/pipes/truncate/truncate';\nimport { CountPipe } from '../lib/pipes/count/count'\n\nexport const ALL_PIPES: Provider[] = [\n AsciiArtPipe,\n BarcodePipe,\n CamelCasePipe,\n ColorConvertPipe,\n CreditCardMaskPipe,\n DeviceTypePipe,\n EmailMaskPipe,\n GravatarPipe,\n HighlightPipe,\n HtmlEscapePipe,\n HtmlSanitizePipe,\n InitialsPipe,\n IpAddressMaskPipe,\n JsonPrettyPipe,\n KebabCasePipe,\n MorseCodePipe,\n QrCodePipe,\n ReplacePipe,\n ReversePipe,\n SnakeCasePipe,\n TextToSpeechPipe,\n TitleCasePipe,\n TruncatePipe,\n CountPipe\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AAwBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDG;MAKU,YAAY,CAAA;AACf,IAAA,SAAS;AAEjB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC;YAClC,OAAO,EAAE,aAAa,CAAC,QAAQ;AAC/B,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA,CAAC;IACJ;AAEA,IAAA,SAAS,CAAC,KAAa,EAAE,OAAA,GAA2B,EAAE,EAAA;QACpD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,SAAS,GAAG,GAAG;AACrB,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE;AAC5B,YAAA,OAAO,CAAC,IAAI,CAAC,oCAAoC,SAAS,CAAA,wBAAA,CAA0B,CAAC;YACrF,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC;QACvC;AAEA,QAAA,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO;AAE3D,QAAA,IAAI;YACF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,gBAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC;YACrC;AAEA,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC;AAE7D,YAAA,IAAI,MAAM,KAAK,MAAM,EAAE;gBACrB,OAAO,CAAA,uBAAA,EAA0B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA,MAAA,CAAQ;YACvE;;YAGA,OAAO,MAAM,CAAC,IAAI;QACpB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;AAChE,YAAA,OAAO,wEAAwE;QACjF;IACF;AAEA;;;AAGG;AACK,IAAA,UAAU,CAAC,IAAY,EAAA;QAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI;QACtB,OAAO,GAAG,CAAC,SAAS;IACtB;uGAnDW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;AC7CD;;;;;;;;;;;;;AAaG;MAKU,WAAW,CAAA;AACd,IAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAExC,IAAA,MAAM,SAAS,CAAC,KAAa,EAAE,UAA0B,EAAE,EAAA;QACzD,MAAM,EACJ,WAAW,GAAG,KAAK,EACnB,MAAM,GAAG,SAAS,EAClB,SAAS,GAAG,SAAS,EACrB,KAAK,GAAG,CAAC,EACT,MAAM,GAAG,GAAG,EACZ,YAAY,GAAG,IAAI,GACpB,GAAG,OAAO;QAEX,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE;QACX;;AAGA,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AAExE,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE;AACjE,YAAA,IAAI,WAAW,KAAK,KAAK,EAAE;gBACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,KAAK,CAAC;AACzE,gBAAA,SAAS,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC;gBACtC,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC;YAC9D;iBAAO;gBACL,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,gBAAA,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC;gBACzC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;gBAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,8BAA8B,CAAC,OAAO,CAAC;YAC/D;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC;AAClD,YAAA,OAAO,EAAE;QACX;IACF;uGApCW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACrDD;;;;;;;;;;;;AAYG;MAKU,aAAa,CAAA;AAExB,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,EAAE;AAClD,QAAA,OAAO;AACJ,aAAA,WAAW;AACX,aAAA,OAAO,CAAC,gBAAgB,EAAE,GAAG;AAC7B,aAAA,IAAI;aACJ,KAAK,CAAC,GAAG;aACT,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;aAC9B,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KACf,KAAK,KAAK;AACR,cAAE,IAAI,CAAC,WAAW;AAClB,cAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aAEjD,IAAI,CAAC,EAAE,CAAC;IACb;uGAhBW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACHD;AACA,MAAM,aAAa,GAAG,qDAAqD;AAC3E,MAAM,aAAa,GAAG,qEAAqE;AAC3F,MAAM,aAAa,GAAG,4CAA4C;AAClE,MAAM,aAAa,GAAG,yDAAyD;AAC/E,MAAM,WAAW,GAAG,2DAA2D;AAC/E,MAAM,YAAY,GAAG,2EAA2E;AAEhG;;AAEG;AACH,SAAS,YAAY,CAAC,KAAa,EAAA;IACjC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACtD;AAEA;;AAEG;AACH,SAAS,UAAU,CAAC,KAAa,EAAA;AAC/B,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACxC;AAEA;;AAEG;AACH,SAAS,aAAa,CAAC,IAAY,EAAA;IACjC,OAAO,IAAI,GAAG,IAAI;AACpB;AAEA;;AAEG;AACH,SAAS,KAAK,CAAC,KAAa,EAAA;AAC1B,IAAA,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE;AACxE;AAEA;;AAEG;AACH,SAAS,UAAU,CAAC,KAAa,EAAA;IAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE;AACxF;AAEA;;AAEG;AACH,SAAS,UAAU,CAAC,GAAW,EAAA;AAC7B,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG;AAC1D;AASA;;AAEG;AACH,SAAS,UAAU,CAAC,KAAa,EAAA;;IAE/B,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;IACtC,IAAI,KAAK,EAAE;QACT,OAAO;YACL,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACzB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACzB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACzB,YAAA,CAAC,EAAE,CAAC;SACL;IACH;;AAGA,IAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;IAClC,IAAI,KAAK,EAAE;QACT,OAAO;YACL,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACzB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACzB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACzB,YAAA,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACxB;IACH;;AAGA,IAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;IAClC,IAAI,KAAK,EAAE;QACT,OAAO;AACL,YAAA,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACxC,YAAA,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACxC,YAAA,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACxC,YAAA,CAAC,EAAE,CAAC;SACL;IACH;;AAGA,IAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;IAClC,IAAI,KAAK,EAAE;QACT,OAAO;AACL,YAAA,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACxC,YAAA,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACxC,YAAA,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACxC,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACvC;IACH;;AAGA,IAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;IAChC,IAAI,KAAK,EAAE;QACT,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;;AAEhC,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE;AACjC,YAAA,OAAO,IAAI;QACb;QACA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IAC1B;;AAGA,IAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;IACjC,IAAI,KAAK,EAAE;QACT,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;QAE9B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACnD,YAAA,OAAO,IAAI;QACb;QACA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IACvB;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCG;MAKU,gBAAgB,CAAA;IAC3B,SAAS,CAAC,KAAa,EAAE,MAAuB,EAAA;QAC9C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE;AACjC,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;QAEvC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM;QAE7B,QAAQ,MAAM;AACZ,YAAA,KAAK,KAAK;AACR,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE;oBACT,OAAO,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAA,EAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA,EAAG,UAAU,CAAC,CAAC,CAAC,CAAA,CAAE;gBAC7D;AACA,gBAAA,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE;AAE7C,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,OAAO,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,GAAG;AAE1E,YAAA,KAAK,MAAM;gBACT,OAAO,CAAA,KAAA,EAAQ,YAAY,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,YAAY,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,UAAU,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG;AAE7F,YAAA;AACE,gBAAA,OAAO,KAAK;;IAElB;uGA/BW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;MC3LY,SAAS,CAAA;AAEpB,IAAA,SAAS,CAAC,KAAU,EAAA;QAClB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,YAAA,OAAO,CAAC;QACV;AACA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACrD,OAAO,KAAK,CAAC,MAAM;QACrB;AACA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;QAClC;AACA,QAAA,OAAO,CAAC;IACV;uGAbW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBAJrB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACHD;;;;;;;;;;;;;;;AAeG;MAKU,kBAAkB,CAAA;AAC7B,IAAA,SAAS,CAAC,KAAgC,EAAE,UAAU,GAAG,IAAI,EAAA;QAC3D,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,UAAU,EAAE;YACd,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;AAChD,YAAA,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM;AAEzC,YAAA,IAAI,aAAa,GAAG,CAAC,EAAE;AACrB,gBAAA,OAAO,KAAK;YACd;YAEA,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;AACnD,YAAA,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YAEnE,OAAO,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,aAAa,EAAE,CAAC,IAAI,EAAE;QACjD;AAEA,QAAA,OAAO,KAAK;IACd;uGAtBW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,UAAU,EAAE,IAAI;AACjB,iBAAA;;;ACLD;;;;;;;;;;AAUG;MAKU,cAAc,CAAA;AAEzB,IAAA,SAAS,CAAC,KAAA,GAAgB,OAAO,SAAS,KAAK,WAAW,GAAG,SAAS,CAAC,SAAS,GAAG,EAAE,EAAA;AACnF,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,SAAS;AAE5B,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE;QACrC,MAAM,QAAQ,GAAG,0EAA0E,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3G,MAAM,QAAQ,GAAG,wEAAwE,CAAC,IAAI,CAAC,SAAS,CAAC;AAEzG,QAAA,IAAI,QAAQ;AAAE,YAAA,OAAO,QAAQ;AAC7B,QAAA,IAAI,QAAQ;AAAE,YAAA,OAAO,QAAQ;AAE7B,QAAA,OAAO,SAAS;IAClB;uGAbW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC5BD;;;;;;;;;;;;;;;;;;AAkBG;MAKU,aAAa,CAAA;AAExB,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAClC,OAAO,KAAK,IAAI,EAAE;QACpB;AAEA,QAAA,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;YACrB,OAAO,CAAA,EAAG,KAAK,CAAC,CAAC,CAAC,CAAA,IAAA,EAAO,MAAM,EAAE;QACnC;AACA,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACxC,QAAA,OAAO,GAAG,SAAS,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAA,EAAI,MAAM,EAAE;IAC/C;uGAdW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACrBD;;;;;;;;;;;;AAYG;MAKU,YAAY,CAAA;AACvB,IAAA,SAAS,CAAC,KAAa,EAAE,IAAI,GAAG,EAAE,EAAA;AAChC,QAAA,IAAI,CAAC,KAAK;YAAE,OAAO,CAAA,mCAAA,EAAsC,IAAI,CAAA,CAAE;AAC/D,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAC5C,QAAA,OAAO,CAAA,gCAAA,EAAmC,IAAI,CAAA,GAAA,EAAM,IAAI,EAAE;IAC5D;uGALW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AChBD;;;;;;;;;;;;;;;;;;;AAmBG;MAKU,aAAa,CAAA;AAChB,IAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;IAExC,SAAS,CAAC,KAAa,EAAE,UAAkB,EAAA;AACzC,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE;YACzB,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5D;QAEA,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpE,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAA,CAAA,EAAI,aAAa,CAAA,CAAA,CAAG,EAAE,IAAI,CAAC;QACpD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,mCAAmC,CAAC;QAC5E,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,UAAU,CAAC;IAC3D;uGAZW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACxBD;;;;;;;;;;;AAWG;MAKU,cAAc,CAAA;AACzB,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,EAAE;AAElD,QAAA,MAAM,SAAS,GAA8B;AAC3C,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,GAAG,EAAE;SACN;AAED,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3D;uGAbW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACdD;;;;;;;;;;;;;;;;AAgBG;MAKU,gBAAgB,CAAA;AACnB,IAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAExC,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,EAAE,CAAC;AAC1F,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,EAAE,CAAC;IACxF;uGANW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACrBD;;;;;;;;;;;;AAYG;MAKU,YAAY,CAAA;AAEvB,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AACrB,QAAA,OAAO;AACJ,aAAA,IAAI;aACJ,KAAK,CAAC,KAAK;AACX,aAAA,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;aACxC,IAAI,CAAC,EAAE,CAAC;IACb;uGATW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AChBD;;;;;;;;;;;;;AAaG;MAKU,iBAAiB,CAAA;AAE5B,IAAA,SAAS,CAAC,KAAa,EAAE,UAAU,GAAG,IAAI,EAAA;QACxC,IAAI,CAAC,KAAK,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACjE,YAAA,OAAO,KAAK;QACd;QACA,IAAI,UAAU,EAAE;YACd,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;YAC9B,OAAO,CAAA,EAAG,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAC,CAAC,CAAC,CAAA,IAAA,CAAM;QACtC;AACA,QAAA,OAAO,KAAK;IACd;uGAXW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AChBD;;;;;;;;;;;;;AAaG;MAKU,cAAc,CAAA;AACjB,IAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAExC,IAAA,SAAS,CAAC,KAAsB,EAAE,MAAM,GAAG,CAAC,EAAE,iBAAiC,EAAA;AAC7E,QAAA,IAAI,UAAkB;AAEtB,QAAA,IAAI;AACF,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;YAClD;AAAO,iBAAA,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7C,gBAAA,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC;YAC9D;iBAAO;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;YAC3C;QACF;QAAE,OAAO,CAAC,EAAE;YACV,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAC3C,yCAAyC,IAAI,CAAC,YAAY,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,eAAe,CAAC,GAAG,SAAS,CAC3G;QACH;QAEA,MAAM,WAAW,GAAG;AACjB,aAAA,OAAO,CAAC,IAAI,EAAE,OAAO;AACrB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QAExB,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;QAC/C,IAAI,iBAAiB,EAAE;YACrB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;YACnC,MAAM,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;AACxC,gBAAA,MAAM,YAAY,GAAG,CAAA,wBAAA,EAA2B,iBAAiB,UAAU;AAC3E,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;oBAC/B,OAAO,CAAA,6BAAA,EAAgC,IAAI,CAAA,OAAA,CAAS;gBACtD;AACA,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC,CAAC;AACF,YAAA,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QACzC;QACA,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAA,yBAAA,EAA4B,SAAS,CAAA,MAAA,CAAQ,CAAC;IAC9F;AAEQ,IAAA,aAAa,CAAC,IAAY,EAAA;AAChC,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,KAAI;AAC7E,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;AAE3C,YAAA,OAAO;kBACH,CAAA,uBAAA,EAA0B,KAAK,CAAA,OAAA;AACjC,kBAAE,CAAA,0BAAA,EAA6B,KAAK,CAAA,OAAA,CAAS;AACjD,QAAA,CAAC,CAAC;;QAGF,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,uCAAuC,EAAE,qCAAqC,CAAC;;QAGvG,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,sCAAsC,CAAC;;QAGpF,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,mCAAmC,CAAC;;QAGzE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,0CAA0C,CAAC;AAE/E,QAAA,OAAO,MAAM;IACf;uGA/DW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,YAAY;AAClB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AClBD;;;;;;;;;;;;AAYG;MAKU,aAAa,CAAA;AAExB,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,EAAE;AAClD,QAAA,OAAO;AACJ,aAAA,IAAI;AACJ,aAAA,OAAO,CAAC,8BAA8B,EAAE,OAAO,CAAC;AAChD,aAAA,WAAW;AACX,aAAA,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;AAC5B,aAAA,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC3B;uGAVW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AChBD;;;;;;;;;;;;;AAaG;MAKU,aAAa,CAAA;AACP,IAAA,YAAY,GAA8B;QACzD,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;QACtE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM;QACxE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK;QACtE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM;AACtE,QAAA,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO;AAClE,QAAA,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO;AACpE,QAAA,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE;KACpB;AAED,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,OAAO;AACJ,aAAA,WAAW;aACX,KAAK,CAAC,EAAE;AACR,aAAA,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;AACzC,aAAA,MAAM,CAAC,IAAI,IAAI,IAAI;aACnB,IAAI,CAAC,GAAG,CAAC;IACd;uGAtBW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACCD;;;;;;;;;;;;AAYG;MAKU,UAAU,CAAA;IACrB,SAAS,CAAC,KAAa,EAAE,OAAuB,EAAA;QAC9C,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B;QAEA,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAwC,CAAC;IAC1E;uGAPW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,QAAA,EAAA,CAAA;;2FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBAJtB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACjCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BG;MAMU,WAAW,CAAA;AACd,IAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;IAExC,SAAS,CACP,KAAa,EACb,OAAwB,EACxB,WAAmB,EACnB,cAAuB,EACvB,SAAS,GAAG,IAAI,EAAA;AAGhB,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;;AAGrB,QAAA,IAAI,CAAC,OAAO,KAAK,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE;AACtE,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,YAAY,GAAG,OAAO,OAAO,KAAK,QAAQ,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO;QAEtF,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,OAAO,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,KAAK;QACrE;;AAGA,QAAA,MAAM,oBAAoB,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QAEpF,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,sBAAsB,GAAG,CAAA,aAAA,EAAgB,cAAc,CAAA,EAAA,EAAK,oBAAoB,SAAS;YAC/F,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,sBAAsB,CAAC;YACpE,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,QAAQ,CAAC;QACzD;AAEA,QAAA,MAAM,gBAAgB,GAAG,CAAA,aAAA,EAAgB,cAAc,aAAa;QACpE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC;QAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,CAAC;IACvD;uGApCW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACrCD;;;;;;;;;;;;;AAaG;MAKU,WAAW,CAAA;AAEtB,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3C;uGARW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAJvB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACjBD;;;;;;;;;;;;AAYG;MAKU,aAAa,CAAA;AAExB,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,EAAE;AAClD,QAAA,OAAO;AACJ,aAAA,IAAI;AACJ,aAAA,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;aAC1B,WAAW,EAAE;AACb,aAAA,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;AACvB,aAAA,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;AAC3B,aAAA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;AACnB,aAAA,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC3B;uGAZW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AChBD;;;;;;;;;;;;;AAaG;MAKU,gBAAgB,CAAA;AAC3B,IAAA,SAAS,CAAC,KAAa,EAAE,IAAI,GAAG,OAAO,EAAA;QACrC,IAAI,CAAC,KAAK,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,eAAe;YAAE;AACxE,QAAA,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC,KAAK,CAAC;AACpD,QAAA,QAAQ,CAAC,IAAI,GAAG,IAAI;AACpB,QAAA,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC;IACxC;uGANW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAJ5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACjBD;;;;;;;;;;AAUG;MAKU,aAAa,CAAA;AAExB,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,EAAE;AAClD,QAAA,OAAO;aACJ,KAAK,CAAC,GAAG;aACT,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;aAC9B,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;aACtE,IAAI,CAAC,GAAG,CAAC;IACd;uGATW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAJzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AACjB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACdD;;;;;;;;;;;;;;;;;;;;;;AAsBG;MAKU,YAAY,CAAA;AAEvB,IAAA,SAAS,CAAC,KAAa,EAAE,SAAS,GAAG,EAAE,EAAE,QAAQ,GAAG,KAAK,EAAE,aAAa,GAAG,KAAK,EAAA;QAC9E,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE;AAC7B,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC,MAAM;;AAG/C,QAAA,IAAI,WAAW,GAAG,CAAC,EAAE;AACnB,YAAA,OAAO,QAAQ;QACjB;QAEA,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC;QAE/C,IAAI,aAAa,EAAE;YACjB,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC;;YAEjD,IAAI,cAAc,KAAK,CAAC,CAAC,IAAI,cAAc,KAAK,CAAC,EAAE;gBACjD,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,CAAC;YACpD;QACF;AAEA,QAAA,OAAO,SAAS,CAAC,IAAI,EAAE,GAAG,QAAQ;IACpC;uGA7BW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACFM,MAAM,SAAS,GAAe;IACnC,YAAY;IACZ,WAAW;IACX,aAAa;IACb,gBAAgB;IAChB,kBAAkB;IAClB,cAAc;IACd,aAAa;IACb,YAAY;IACZ,aAAa;IACb,cAAc;IACd,gBAAgB;IAChB,YAAY;IACZ,iBAAiB;IACjB,cAAc;IACd,aAAa;IACb,aAAa;IACb,UAAU;IACV,WAAW;IACX,WAAW;IACX,aAAa;IACb,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ;;;AClDF;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-transforms",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "description": "A collection of 24 standalone Angular pipes for common data transformations — text, masking, encoding, sanitization, and more.",
5
5
  "keywords": [
6
6
  "angular",
@@ -3,7 +3,6 @@ import { PipeTransform, Provider } from '@angular/core';
3
3
  import { AsciiConfig, TextToAsciiOptions } from 'ts-ascii-engine';
4
4
  export { CharsetPreset } from 'ts-ascii-engine';
5
5
  import { SafeHtml, SafeResourceUrl } from '@angular/platform-browser';
6
- import * as QRCode from 'qrcode';
7
6
 
8
7
  /**
9
8
  * Configuration options for ASCII art generation
@@ -489,11 +488,27 @@ declare class MorseCodePipe implements PipeTransform {
489
488
  static ɵpipe: i0.ɵɵPipeDeclaration<MorseCodePipe, "morseCode", true>;
490
489
  }
491
490
 
491
+ interface QrCodeOptions {
492
+ version?: number;
493
+ errorCorrectionLevel?: 'low' | 'medium' | 'quartile' | 'high' | 'L' | 'M' | 'Q' | 'H';
494
+ maskPattern?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;
495
+ margin?: number;
496
+ scale?: number;
497
+ width?: number;
498
+ color?: {
499
+ dark?: string;
500
+ light?: string;
501
+ };
502
+ type?: 'image/png' | 'image/jpeg' | 'image/webp';
503
+ rendererOpts?: {
504
+ quality?: number;
505
+ };
506
+ }
492
507
  /**
493
508
  * QrCodePipe: Generates a QR code from a string.
494
509
  *
495
510
  * @param {string} value - The string to encode.
496
- * @param {QRCode.QRCodeToDataURLOptions} [options] - The QR code options.
511
+ * @param {QrCodeOptions} [options] - The QR code options.
497
512
  *
498
513
  * @returns {Promise<string>} - A promise that resolves with the QR code data URL.
499
514
  *
@@ -503,7 +518,7 @@ declare class MorseCodePipe implements PipeTransform {
503
518
  * @author Mofiro Jean
504
519
  */
505
520
  declare class QrCodePipe implements PipeTransform {
506
- transform(value: string, options?: QRCode.QRCodeToDataURLOptions): Promise<string>;
521
+ transform(value: string, options?: QrCodeOptions): Promise<string>;
507
522
  static ɵfac: i0.ɵɵFactoryDeclaration<QrCodePipe, never>;
508
523
  static ɵpipe: i0.ɵɵPipeDeclaration<QrCodePipe, "qrCode", true>;
509
524
  }
@@ -655,4 +670,4 @@ declare class TruncatePipe implements PipeTransform {
655
670
  declare const ALL_PIPES: Provider[];
656
671
 
657
672
  export { ALL_PIPES, AsciiArtPipe, BarcodePipe, CamelCasePipe, ColorConvertPipe, CountPipe, CreditCardMaskPipe, DeviceTypePipe, EmailMaskPipe, GravatarPipe, HighlightPipe, HtmlEscapePipe, HtmlSanitizePipe, InitialsPipe, IpAddressMaskPipe, JsonPrettyPipe, KebabCasePipe, MorseCodePipe, QrCodePipe, ReplacePipe, ReversePipe, SnakeCasePipe, TextToSpeechPipe, TitleCasePipe, TruncatePipe };
658
- export type { AsciiArtOptions, BarcodeElementType, BarcodeFormat, BarcodeOptions, ColorTargetType, DeviceType };
673
+ export type { AsciiArtOptions, BarcodeElementType, BarcodeFormat, BarcodeOptions, ColorTargetType, DeviceType, QrCodeOptions };