softable-pixels-web 1.2.34 → 1.2.35

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MaskModule-DZko7F_e.js","names":["locales: LocaleRegistry","DATE_LENGTH","pattern: RegExp"],"sources":["../src/services/MaskModule/MaskModule.ts","../src/services/MaskModule/enums.ts","../src/services/MaskModule/base/maskUtils.ts","../src/services/MaskModule/base/BaseMask.ts","../src/services/MaskModule/locales/br/masks/CpfMask.ts","../src/services/MaskModule/locales/br/masks/CnpjMask.ts","../src/services/MaskModule/locales/br/masks/DateMask.ts","../src/services/MaskModule/locales/br/masks/TimeMask.ts","../src/services/MaskModule/locales/br/masks/PhoneMask.ts","../src/services/MaskModule/locales/br/masks/FloatMask.ts","../src/services/MaskModule/locales/br/masks/MoneyMask.ts","../src/services/MaskModule/locales/br/masks/IntegerMask.ts","../src/services/MaskModule/locales/br/masks/ZipCodeMask.ts","../src/services/MaskModule/types.ts","../src/services/MaskModule/locales/br/masks/DocumentMask.ts","../src/services/MaskModule/locales/br/masks/NumericSymbolMask.ts","../src/services/MaskModule/base/BaseValidator.ts","../src/services/MaskModule/locales/br/validators/CpfValidator.ts","../src/services/MaskModule/locales/br/validators/CnpjValidator.ts","../src/services/MaskModule/locales/br/validators/DateValidator.ts","../src/services/MaskModule/locales/br/validators/TimeValidator.ts","../src/services/MaskModule/locales/br/validators/PhoneValidator.ts","../src/services/MaskModule/locales/br/validators/FloatValidator.ts","../src/services/MaskModule/locales/br/validators/MoneyValidator.ts","../src/services/MaskModule/locales/br/validators/IntegerValidator.ts","../src/services/MaskModule/locales/br/validators/ZipCodeValidator.ts","../src/services/MaskModule/locales/br/validators/DocumentValidator.ts","../src/services/MaskModule/locales/br/validators/NumericSymbolValidator.ts","../src/services/MaskModule/locales/br/registerMasks.ts","../src/services/MaskModule/index.ts"],"sourcesContent":["// Types\nimport type { Locale, MaskType } from './enums'\nimport type { BaseMask } from './base/BaseMask'\nimport type { BaseValidator } from './base/BaseValidator'\n\ntype MaskRegistry = {\n masks: Record<MaskType, BaseMask>\n validators: Record<MaskType, BaseValidator>\n}\n\ntype LocaleRegistry = Record<Locale, MaskRegistry>\n\nconst locales: LocaleRegistry = {} as LocaleRegistry\n\nfunction ensureLocale(locale: Locale): void {\n if (!locales[locale]) {\n locales[locale] = { masks: {}, validators: {} } as LocaleRegistry[Locale]\n }\n}\n\nexport const MaskModule = {\n registerMask(locale: Locale, type: MaskType, mask: BaseMask): void {\n ensureLocale(locale)\n locales[locale].masks[type] = mask\n },\n\n registerValidator(\n locale: Locale,\n type: MaskType,\n validator: BaseValidator\n ): void {\n ensureLocale(locale)\n locales[locale].validators[type] = validator\n },\n\n getMask(locale: Locale, type: MaskType): BaseMask | undefined {\n return locales[locale]?.masks[type]\n },\n\n getValidator(locale: Locale, type: MaskType): BaseValidator | undefined {\n return locales[locale]?.validators[type]\n },\n\n reset(): void {\n Object.keys(locales).forEach(locale => {\n delete locales[locale as Locale]\n })\n }\n}\n","/**\n * Supported locales (country + language region).\n *\n * Extend this enum as needed for new countries.\n */\nexport enum Locale {\n BR = 'pt-BR', // Brazil\n US = 'en-US', // United States\n AR = 'es-AR' // Argentina\n}\n\n/**\n * Types of masks supported in the system.\n *\n * Add new types as needed for different data formats.\n */\nexport const MaskType = {\n CPF: 'CPF',\n CNPJ: 'CNPJ',\n DOCUMENT: 'DOCUMENT',\n PHONE: 'PHONE',\n DATE: 'DATE',\n FLOAT: 'FLOAT',\n INTEGER: 'INTEGER',\n MONEY: 'MONEY',\n ZIP_CODE: 'ZIP_CODE',\n NUMERIC_SYMBOL: 'NUMERIC_SYMBOL',\n TIME_12H: 'TIME_12H',\n TIME_24H: 'TIME_24H'\n} as const\n\nexport type MaskType = (typeof MaskType)[keyof typeof MaskType]\n","/**\n * Removes all non-numeric characters from a string.\n * @param value - Input string.\n * @returns String containing only digits.\n */\nexport function onlyDigits(value: string): string {\n if (value == null) return ''\n return value.replace(/\\D/g, '')\n}\n\n/**\n * Applies the mask progressively according to the available characters.\n *\n * Alphanumeric characters (letters and digits) in the pattern will be replaced\n * by characters from the input `value`, in order. Non-alphanumeric characters\n * (e.g. `.`, `-`, `/`) are treated as static parts of the mask.\n *\n * Examples:\n *\n * applyPattern('12345', 'XXX.XXX.XXX-XX') -> '123.45'\n *\n * applyPattern('AB1234', 'AA-NN.NN') -> 'AB-12.34'\n *\n * applyPattern('12345678901', 'XXX.XXX.XXX-XX') -> '123.456.789-01'\n *\n * @param value - raw input string (partial or complete)\n * @param pattern - mask pattern where alphanumeric characters are placeholders\n * @returns partially formatted string\n */\nexport function applyPattern(value: string, pattern: string): string {\n if (value == null) return ''\n if (pattern == null) return value\n\n let result = ''\n let digitIndex = 0\n\n for (let i = 0; i < pattern.length; i++) {\n const char = pattern[i]\n\n if (/[a-zA-Z0-9]/.test(char)) {\n if (digitIndex < value.length) {\n result += value[digitIndex++]\n } else {\n break // No more digits available, stop applying more mask\n }\n } else {\n // Fixed mask character\n if (digitIndex < value.length) result += char\n }\n }\n\n return result\n}\n\n/**\n * Checks whether a string matches a regular expression.\n * @param value - Input string.\n * @param regex - Regular expression to test.\n * @returns Boolean indicating whether it matches.\n */\nexport function matchesPattern(value: string, regex: RegExp): boolean {\n return regex.test(value)\n}\n\n/**\n * Limits the length of a string to a maximum.\n * @param value - Input string.\n * @param maxLength - Maximum length allowed.\n * @returns Truncated string if longer than maxLength.\n */\nexport function limitLength(value: string, maxLength?: number): string {\n if (value == null) return ''\n if (maxLength === undefined) return value\n return value.slice(0, maxLength)\n}\n\n/**\n * Checks if a string meets min and max length constraints.\n * @param value - Input string.\n * @param min - Minimum length (optional).\n * @param max - Maximum length (optional).\n * @returns Boolean indicating whether the length is valid.\n */\nexport function isValidLength(\n value: string,\n min?: number,\n max?: number\n): boolean {\n if (value == null) return false\n\n if (min !== undefined && value.length < min) return false\n if (max !== undefined && value.length > max) return false\n return true\n}\n","import type { Mask } from '../types'\nimport { onlyDigits } from './maskUtils'\n\n/**\n * Abstract class that provides default behavior for most masks.\n * - Implements unmask() by removing all non-numeric characters.\n * - Supports optional maxLength and minLength constraints.\n */\nexport abstract class BaseMask implements Mask {\n /**\n * Maximum length of the masked string (optional).\n */\n maxLength?: number\n\n /**\n * Minimum length of the masked string (optional).\n */\n minLength?: number\n\n constructor(minLength?: number, maxLength?: number) {\n this.maxLength = maxLength\n this.minLength = minLength\n }\n\n /**\n * Removes all non-numeric characters from a string.\n * @param value - Masked or unmasked string.\n * @returns Plain string with digits only.\n */\n unmask(value: string): string {\n return onlyDigits(value)\n }\n\n /**\n * Must be implemented by each concrete mask class.\n * Applies the mask format to the input string.\n * @param value - Raw string.\n * @returns Masked string.\n */\n abstract format(value: string): string\n}\n","import { BaseMask } from '../../../base/BaseMask'\nimport { applyPattern, limitLength, onlyDigits } from '../../../base/maskUtils'\n\nexport const CPF_PATTERN = 'XXX.XXX.XXX-XX'\n\nexport class CpfMask extends BaseMask {\n constructor() {\n const length = CPF_PATTERN.length\n super(length, length)\n }\n\n format(value: string): string {\n const digits = onlyDigits(value)\n const formatted = applyPattern(digits, CPF_PATTERN)\n\n return limitLength(formatted, this.maxLength)\n }\n}\n","import { BaseMask } from '../../../base/BaseMask'\nimport { applyPattern, limitLength, onlyDigits } from '../../../base/maskUtils'\n\nexport const CNPJ_PATTERN = 'XX.XXX.XXX/XXXX-XX'\n\nexport class CnpjMask extends BaseMask {\n constructor() {\n const length = CNPJ_PATTERN.length\n super(length, length)\n }\n\n format(value: string): string {\n const digits = onlyDigits(value)\n const formatted = applyPattern(digits, CNPJ_PATTERN)\n\n return limitLength(formatted, this.maxLength)\n }\n}\n","import { BaseMask } from '../../../base/BaseMask'\nimport { limitLength, onlyDigits } from '../../../base/maskUtils'\n\nexport type DateMaskFormat = 'DD/MM/YYYY' | 'MM/DD/YYYY' | 'YYYY/MM/DD'\n\nconst DATE_LENGTH = 10\n\nexport class DateMask extends BaseMask {\n private dateFormat: DateMaskFormat\n\n constructor({ dateFormat }: { dateFormat?: DateMaskFormat } = {}) {\n super(DATE_LENGTH, DATE_LENGTH)\n this.dateFormat = dateFormat ?? 'DD/MM/YYYY'\n }\n\n private destructureDate(value: string): {\n day: string\n month: string\n year: string\n } {\n const digits = onlyDigits(value)\n\n switch (this.dateFormat) {\n case 'YYYY/MM/DD':\n return {\n year: digits.slice(0, 4),\n month: digits.slice(4, 6),\n day: digits.slice(6, 8)\n }\n\n case 'MM/DD/YYYY':\n return {\n month: digits.slice(0, 2),\n day: digits.slice(2, 4),\n year: digits.slice(4, 8)\n }\n\n case 'DD/MM/YYYY':\n return {\n day: digits.slice(0, 2),\n month: digits.slice(2, 4),\n year: digits.slice(4, 8)\n }\n }\n }\n\n format(value: string): string {\n const { day, month, year } = this.destructureDate(value)\n\n let d = day\n let m = month\n let y = year\n\n // Clamp day (01–31)\n if (d.length === 2) {\n const parsed = parseInt(d)\n if (parsed > 31) d = '31'\n else if (parsed < 1) d = '01'\n }\n\n // Clamp month (01–12)\n if (m.length === 2) {\n const parsed = parseInt(m)\n if (parsed > 12) m = '12'\n else if (parsed < 1) m = '01'\n }\n\n // Clamp year (>= 0000)\n if (y.length === 4) {\n const parsed = parseInt(y)\n if (parsed < 0) y = '0000'\n }\n\n return limitLength(this.buildDate(d, m, y), this.maxLength)\n }\n\n private buildDate(day: string, month: string, year: string) {\n switch (this.dateFormat) {\n case 'YYYY/MM/DD':\n return [year, month && `/${month}`, day && `/${day}`].join('')\n\n case 'MM/DD/YYYY':\n return [month, day && `/${day}`, year && `/${year}`].join('')\n\n case 'DD/MM/YYYY':\n return [day, month && `/${month}`, year && `/${year}`].join('')\n }\n }\n}\n","// masks/time/TimeInputMask.ts\nimport { BaseMask } from '../../../base/BaseMask'\nimport { applyPattern, limitLength, onlyDigits } from '../../../base/maskUtils'\n\nexport const TIME_PATTERN = 'XX:XX'\n\n/**\n * Formats time input allowing editing at any position.\n * Uses pattern-based formatting similar to CPF/CNPJ masks.\n *\n * Key difference from TimeMask:\n * - TimeMask: Sequential digit-by-digit formatting (good for append-only input)\n * - TimeInputMask: Pattern-based formatting (allows editing anywhere in the string)\n *\n * @example\n * const mask = new TimeInputMask({ timeFormat: '24h' })\n * mask.format('1430') // \"14:30\"\n * mask.format('1530') // \"15:30\" (can change first digit easily)\n *\n * @example\n * const mask12h = new TimeInputMask({ timeFormat: '12h' })\n * mask12h.format('0230') // \"02:30\"\n */\nexport class TimeMask extends BaseMask {\n private timeFormat: '24h' | '12h'\n\n constructor({\n timeFormat = '24h',\n minLength = 5,\n maxLength = 5\n }: {\n timeFormat?: '24h' | '12h'\n minLength?: number\n maxLength?: number\n } = {}) {\n super(minLength, maxLength)\n this.timeFormat = timeFormat\n }\n\n format(value: string): string {\n const digits = onlyDigits(value)\n const limitedDigits = limitLength(digits, 4)\n\n if (!limitedDigits) return ''\n\n const formatted = applyPattern(digits, TIME_PATTERN)\n\n let result = formatted\n\n if (formatted.length >= 3) {\n result = this.validateAndCorrect(formatted)\n }\n\n return limitLength(result, this.maxLength)\n }\n\n /**\n * Validates and corrects the formatted time string\n */\n private validateAndCorrect(value: string): string {\n if (!value) return '00:00'\n\n const parts = value.split(':')\n const hours = parts[0] || ''\n const minutes = parts[1] || ''\n\n const correctedHours = this.correctHours(hours)\n\n // Return early if no minutes yet\n if (!minutes) {\n // Add colon if we have complete hours\n return hours.length === 2 ? `${correctedHours}:` : correctedHours\n }\n\n const correctedMinutes = this.correctMinutes(minutes)\n\n return `${correctedHours}:${correctedMinutes}`\n }\n\n /**\n * Corrects hours to valid range based on format\n */\n private correctHours(hours: string): string {\n if (!hours) return ''\n\n // Single digit: apply smart correction\n if (hours.length === 1) {\n const digit = parseInt(hours, 10)\n\n if (this.timeFormat === '24h') {\n // For 24h: digits 3-9 as first digit should become 03-09\n if (digit > 2) {\n return `0${digit}`\n }\n return hours\n } else {\n // For 12h: digit 0 stays, digits 2-9 should become 02-09\n if (digit === 0) {\n return '0'\n }\n if (digit > 1) {\n return `0${digit}`\n }\n return hours\n }\n }\n\n // Two digits: validate complete hour\n let hourNum = parseInt(hours, 10)\n\n if (this.timeFormat === '24h') {\n if (hourNum > 23) hourNum = 23\n if (hourNum < 0) hourNum = 0\n } else {\n if (hourNum === 0) hourNum = 12\n if (hourNum > 12) hourNum = 12\n if (hourNum < 1) hourNum = 1\n }\n\n return hourNum.toString().padStart(2, '0')\n }\n\n /**\n * Corrects minutes to valid range (00-59)\n */\n private correctMinutes(minutes: string): string {\n if (!minutes) return ''\n\n // Single digit: apply smart correction\n if (minutes.length === 1) {\n const digit = parseInt(minutes, 10)\n // Digits 6-9 as first minute digit should become 06-09\n if (digit > 5) {\n return `0${digit}`\n }\n return minutes\n }\n\n // Two digits: validate complete minute\n let minuteNum = parseInt(minutes, 10)\n\n if (minuteNum > 59) minuteNum = 59\n if (minuteNum < 0) minuteNum = 0\n\n return minuteNum.toString().padStart(2, '0')\n }\n}\n","import { BaseMask } from '../../../base/BaseMask'\nimport { limitLength, onlyDigits } from '../../../base/maskUtils'\n\n/**\n * Formats a Brazilian phone number progressively:\n * (XX) XXXXX-XXXX or (XX) XXXX-XXXX depending on length.\n */\nexport class PhoneMask extends BaseMask {\n constructor(maxLength = 15) {\n super(14, maxLength) // 14 (fixo) or 15 (celular)\n }\n\n format(value: string): string {\n const digits = limitLength(onlyDigits(value), this.maxLength)\n if (!digits) return ''\n\n // DDD\n if (digits.length < 3) return `(${digits}`\n\n const ddd = digits.slice(0, 2)\n const rest = digits.slice(2)\n\n // Fixo: 8 dígitos / Celular: 9 dígitos\n if (rest.length <= 4) {\n return `(${ddd}) ${rest}`\n } else if (rest.length <= 8) {\n const part1 = rest.slice(0, 4)\n const part2 = rest.slice(4)\n return `(${ddd}) ${part1}${part2 ? `-${part2}` : ''}`\n } else {\n const part1 = rest.slice(0, 5)\n const part2 = rest.slice(5)\n return `(${ddd}) ${part1}-${part2}`\n }\n }\n}\n","import { BaseMask } from '../../../base/BaseMask'\nimport { onlyDigits, limitLength } from '../../../base/maskUtils'\n\ninterface FloatMaskConstructorOptions {\n decimalDigits?: number\n maxLength?: number\n}\n\n/**\n * Automatically formats a numeric input as a float using comma as decimal separator.\n *\n * Ignores user-entered punctuation and inserts the comma based on configured decimal places.\n */\nexport class FloatMask extends BaseMask {\n private maxDecimalPlaces: number\n\n constructor({\n maxLength = 20,\n decimalDigits = 2\n }: FloatMaskConstructorOptions = {}) {\n super(1, maxLength)\n this.maxDecimalPlaces = decimalDigits\n }\n\n format(value: string): string {\n const rawDigits = onlyDigits(value)\n const digits = limitLength(rawDigits, this.maxLength)\n\n if (!digits) return `0,${'0'.repeat(this.maxDecimalPlaces)}`\n\n const length = digits.length\n\n if (length <= this.maxDecimalPlaces) {\n const padded = digits.padStart(this.maxDecimalPlaces + 1, '0')\n const intPart = padded.slice(0, padded.length - this.maxDecimalPlaces)\n const decimalPart = padded.slice(-this.maxDecimalPlaces)\n return `${intPart},${decimalPart}`\n }\n\n const intRaw =\n digits.slice(0, length - this.maxDecimalPlaces).replace(/^0+/, '') || '0'\n const decimal = digits.slice(-this.maxDecimalPlaces)\n const intFormatted = this.formatThousands(intRaw)\n return `${intFormatted},${decimal}`\n }\n\n /**\n * Adds dot thousand separators to a string of digits.\n * Example: \"1234567\" => \"1.234.567\"\n */\n private formatThousands(value: string): string {\n return value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.')\n }\n}\n","import { BaseMask } from '../../../base/BaseMask'\nimport { onlyDigits } from '../../../base/maskUtils'\n\n/**\n * Formats input as currency, with thousand separator, decimal comma,\n * optional prefix (e.g. R$, $), and support for negatives.\n *\n * Examples:\n * - \"123456\" → \"R$ 1.234,56\"\n * - \"-123\" → \"R$ -1,23\"\n */\nexport class MoneyMask extends BaseMask {\n private maxDecimalPlaces: number\n private prefix: string\n private allowNegative: boolean\n\n constructor({\n prefix = 'R$',\n maxDecimalPlaces = 2,\n allowNegative = true,\n maxLength = 20\n }: {\n prefix?: string\n maxDecimalPlaces?: number\n allowNegative?: boolean\n maxLength?: number\n } = {}) {\n super(1, maxLength)\n this.prefix = prefix\n this.maxDecimalPlaces = maxDecimalPlaces\n this.allowNegative = allowNegative\n }\n\n format(value: string): string {\n if (!value) return ''\n\n const isNegative = this.allowNegative && value.trim().startsWith('-')\n const digits = onlyDigits(value).slice(0, this.maxLength)\n\n if (!digits) {\n return isNegative\n ? `${this.prefix} -0,${'0'.repeat(this.maxDecimalPlaces)}`\n : `${this.prefix} 0,${'0'.repeat(this.maxDecimalPlaces)}`\n }\n\n const len = digits.length\n\n // Ex: 3 digits, 2 decimals → '003' => '0,03'\n if (len <= this.maxDecimalPlaces) {\n const padded = digits.padStart(this.maxDecimalPlaces + 1, '0')\n const intPart = padded.slice(0, padded.length - this.maxDecimalPlaces)\n const decimalPart =\n padded.slice(-this.maxDecimalPlaces).replace(/^0+/, '') || '0'\n return `${this.prefix} ${isNegative ? '-' : ''}${intPart},${decimalPart}`\n }\n\n const intRaw =\n digits.slice(0, len - this.maxDecimalPlaces).replace(/^0+/, '') || '0'\n const decimal = digits.slice(-this.maxDecimalPlaces)\n const intFormatted = this.formatThousands(intRaw)\n\n return `${this.prefix} ${isNegative ? '-' : ''}${intFormatted},${decimal}`\n }\n\n private formatThousands(value: string): string {\n return value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.')\n }\n}\n","import { BaseMask } from '../../../base/BaseMask'\nimport { limitLength, onlyDigits } from '../../../base/maskUtils'\n\n/**\n * Formats integers, allowing only digits.\n */\nexport class IntegerMask extends BaseMask {\n max?: number\n min?: number\n\n constructor(\n options: { maxLength?: number; max?: number; min?: number } = {}\n ) {\n super(1, options.maxLength)\n this.max = options.max\n this.min = options.min\n }\n\n format(value: string): string {\n const digits = onlyDigits(value)\n\n if (this.max !== undefined && Number(digits) > this.max)\n return this.max.toString()\n\n if (this.min !== undefined && Number(digits) < this.min)\n return this.min.toString()\n\n return limitLength(digits, this.maxLength)\n }\n}\n","import { BaseMask } from '../../../base/BaseMask'\nimport { applyPattern, limitLength, onlyDigits } from '../../../base/maskUtils'\n\nexport const ZIP_CODE_PATTERN = 'XXXXX-XXX'\n\nexport class ZipCodeMask extends BaseMask {\n constructor() {\n const length = ZIP_CODE_PATTERN.length\n super(length, length)\n }\n\n format(value: string): string {\n const digits = onlyDigits(value)\n const formatted = applyPattern(digits, ZIP_CODE_PATTERN)\n\n return limitLength(formatted, this.maxLength)\n }\n}\n","/**\n * Represents a generic mask.\n *\n * A mask is responsible for formatting and unformatting (removing formatting) from a value.\n */\nexport interface Mask {\n /**\n * Optional minimum length of the masked string.\n */\n minLength?: number\n\n /**\n * Optional maximum length of the masked string.\n */\n maxLength?: number\n\n /**\n * Formats a plain string into a masked format.\n * @param value - Raw string (e.g., \"12345678901\").\n * @returns Masked string (e.g., \"123.456.789-01\").\n */\n format(value: string): string\n\n /**\n * Removes all mask characters from a formatted string.\n * @param value - Masked string (e.g., \"123.456.789-01\").\n * @returns Unmasked string (e.g., \"12345678901\").\n */\n unmask(value: string): string\n}\n\n/**\n * Represents a validator for a masked value.\n *\n * A validator checks whether a masked value is valid based on rules.\n */\nexport interface Validator {\n /**\n * Validates whether the input value is valid.\n * @param value - Masked string.\n * @returns `true` if valid, `false` otherwise.\n */\n validate(value: string): boolean\n}\n\n/**\n * Mode of document mask and validator.\n *\n * - AUTO: Automatically detect based on length.\n * - CPF: Force CPF.\n * - CNPJ: Force CNPJ.\n */\nexport enum DocumentMode {\n CPF = 'cpf',\n CNPJ = 'cnpj',\n AUTO = 'auto'\n}\n","import { CpfMask } from './CpfMask'\nimport { CnpjMask } from './CnpjMask'\nimport { BaseMask } from '../../../base/BaseMask'\nimport { onlyDigits } from '../../../base/maskUtils'\nimport { DocumentMode } from '../../../types'\n\nexport class DocumentMask extends BaseMask {\n private cpfMask = new CpfMask()\n private cnpjMask = new CnpjMask()\n private mode: DocumentMode\n\n constructor(mode: DocumentMode = DocumentMode.AUTO) {\n super()\n this.mode = mode\n }\n\n format(value: string): string {\n const digits = onlyDigits(value)\n const mode = this.resolveMode(digits)\n\n if (mode === DocumentMode.CPF) {\n return this.cpfMask.format(digits)\n }\n\n if (mode === DocumentMode.CNPJ) {\n return this.cnpjMask.format(digits)\n }\n\n return digits\n }\n\n private resolveMode(digits: string): DocumentMode.CPF | DocumentMode.CNPJ {\n if (this.mode === DocumentMode.CPF) return DocumentMode.CPF\n if (this.mode === DocumentMode.CNPJ) return DocumentMode.CNPJ\n\n return digits.length <= 11 ? DocumentMode.CPF : DocumentMode.CNPJ\n }\n}\n","import { BaseMask } from '../../../base/BaseMask'\nimport { limitLength } from '../../../base/maskUtils'\n\nexport class NumericSymbolMask extends BaseMask {\n constructor(maxLength = 25) {\n super(1, maxLength)\n }\n\n format(value: string): string {\n if (value == null) return ''\n\n const result = value.replace(/[^\\d.,/-]/g, '')\n return limitLength(result, this.maxLength)\n }\n}\n","import type { Validator } from '../types'\n\n/**\n * Abstract class providing common validation utilities.\n * - Supports regex validation.\n * - Supports min and max length validation.\n */\nexport abstract class BaseValidator implements Validator {\n protected pattern?: RegExp\n protected minLength?: number\n protected maxLength?: number\n\n constructor(options?: {\n pattern?: RegExp\n minLength?: number\n maxLength?: number\n }) {\n this.pattern = options?.pattern\n this.minLength = options?.minLength\n this.maxLength = options?.maxLength\n }\n\n /**\n * Validates the input value based on:\n * - Pattern matching (if defined)\n * - Min length (if defined)\n * - Max length (if defined)\n *\n * Override this method if you need custom validation logic.\n *\n * @param value - Value to validate (usually masked string)\n * @returns true if valid, false otherwise\n */\n validate(value: string): boolean {\n if (value == null) return false\n\n const length = value.length\n\n if (this.minLength !== undefined && length < this.minLength) {\n return false\n }\n\n if (this.maxLength !== undefined && length > this.maxLength) {\n return false\n }\n\n if (this.pattern && !this.pattern.test(value)) return false\n\n return true\n }\n}\n","import { CPF_PATTERN } from '../masks/CpfMask'\nimport { BaseValidator } from '../../../base/BaseValidator'\n\nexport class CpfValidator extends BaseValidator {\n constructor() {\n const length = CPF_PATTERN.length\n super({ minLength: length, maxLength: length })\n }\n\n validate(value: string): boolean {\n if (value == null) return false\n\n return isCpfValid(value)\n }\n}\n\n/**\n * Validates if a CPF (Brazilian tax ID) is valid.\n *\n * This function:\n * - Removes any non-digit characters (dots, dashes, spaces).\n * - Checks if CPF has 11 digits.\n * - Rejects CPFs where all digits are the same (e.g., '11111111111').\n * - Performs CPF check digit validation (standard algorithm).\n *\n * @param inputCPF - CPF as a string, can be formatted (e.g., \"123.456.789-09\").\n * @returns true if CPF is valid, false otherwise.\n */\nfunction isCpfValid(inputCPF: string): boolean {\n // Remove dots, dashes, and spaces\n const cpfOnlyNumbers = inputCPF.replace(/[\\s.-]/g, '')\n\n // CPF must be exactly 11 digits\n if (cpfOnlyNumbers.length !== 11) return false\n\n // Check if all digits are the same (invalid CPF)\n if (/^(\\d)\\1{10}$/.test(cpfOnlyNumbers)) return false\n\n // Validate first check digit\n let sum = 0\n for (let i = 0; i < 9; i++) {\n sum += parseInt(cpfOnlyNumbers.charAt(i)) * (10 - i)\n }\n\n let firstCheckDigit = (sum * 10) % 11\n if (firstCheckDigit === 10 || firstCheckDigit === 11) firstCheckDigit = 0\n if (firstCheckDigit !== parseInt(cpfOnlyNumbers.charAt(9))) return false\n\n // Validate second check digit\n sum = 0\n for (let i = 0; i < 10; i++) {\n sum += parseInt(cpfOnlyNumbers.charAt(i)) * (11 - i)\n }\n\n let secondCheckDigit = (sum * 10) % 11\n if (secondCheckDigit === 10 || secondCheckDigit === 11) secondCheckDigit = 0\n if (secondCheckDigit !== parseInt(cpfOnlyNumbers.charAt(10))) return false\n\n return true\n}\n","import { CNPJ_PATTERN } from '../masks/CnpjMask'\nimport { BaseValidator } from '../../../base/BaseValidator'\n\nexport class CnpjValidator extends BaseValidator {\n constructor() {\n const length = CNPJ_PATTERN.length\n super({ minLength: length, maxLength: length })\n }\n\n validate(value: string): boolean {\n if (value == null) return false\n\n return isCnpjValid(value)\n }\n}\n\n/**\n * Validates whether a given CNPJ number is valid.\n * @param cnpj The CNPJ number as a string.\n * @returns True if valid, false otherwise.\n */\nfunction isCnpjValid(cnpj: string): boolean {\n if (!cnpj) return false\n\n // Remove any non-digit characters\n const cleanedCnpj = cnpj.replace(/[^\\d]+/g, '')\n\n // CNPJ must be exactly 14 digits\n if (cleanedCnpj.length !== 14) return false\n\n // Reject CNPJs with all identical digits (e.g., 00000000000000)\n if (/^(\\d)\\1{13}$/.test(cleanedCnpj)) return false\n\n // Extract the base CNPJ and the two check digits\n const baseCnpj = cleanedCnpj.slice(0, 12)\n const checkDigits = cleanedCnpj.slice(12)\n\n // Calculate first check digit\n const firstSum = calculateCnpjWeightedSum(baseCnpj, 12, 5)\n const firstCheckDigit = calculateCnpjCheckDigit(firstSum)\n\n if (firstCheckDigit !== Number(checkDigits.charAt(0))) {\n return false\n }\n\n // Calculate second check digit (base + first check digit)\n const secondSum = calculateCnpjWeightedSum(baseCnpj + firstCheckDigit, 13, 6)\n const secondCheckDigit = calculateCnpjCheckDigit(secondSum)\n\n if (secondCheckDigit !== Number(checkDigits.charAt(1))) {\n return false\n }\n\n return true\n}\n\n/**\n * Calculates the weighted sum for CNPJ verification digits.\n * @param numbers The numeric string of the CNPJ.\n * @param size The number of digits to consider for the calculation.\n * @param position The starting multiplier position (5 or 6).\n * @returns The weighted sum.\n */\nfunction calculateCnpjWeightedSum(\n numbers: string,\n size: number,\n position: number\n): number {\n let sum = 0\n\n for (let i = 0; i < size; i++) {\n sum += Number(numbers.charAt(i)) * position\n position--\n\n if (position < 2) {\n position = 9\n }\n }\n\n return sum\n}\n\n/**\n * Calculates the verification digit based on the weighted sum.\n * @param sum The weighted sum.\n * @returns The verification digit (0-9).\n */\nfunction calculateCnpjCheckDigit(sum: number): number {\n const remainder = sum % 11\n return remainder < 2 ? 0 : 11 - remainder\n}\n","import { BaseValidator } from '../../../base/BaseValidator'\nimport type { DateMaskFormat } from '../masks/DateMask'\n\nconst DATE_LENGTH = 10\n\nexport class DateValidator extends BaseValidator {\n private dateFormat: DateMaskFormat\n\n constructor({ dateFormat }: { dateFormat?: DateMaskFormat } = {}) {\n super({\n minLength: DATE_LENGTH,\n maxLength: DATE_LENGTH,\n pattern: /^\\d{2,4}\\/\\d{2}\\/\\d{2,4}$/\n })\n\n this.dateFormat = dateFormat ?? 'DD/MM/YYYY'\n }\n\n override validate(value: string): boolean {\n if (!super.validate(value)) return false\n\n const { day, month, year } = this.destructureDate(value)\n\n if (!day || !month || !year) return false\n\n const d = parseInt(day, 10)\n const m = parseInt(month, 10)\n const y = parseInt(year, 10)\n\n if (m < 1 || m > 12) return false\n if (d < 1 || d > 31) return false\n\n const date = new Date(y, m - 1, d)\n\n return (\n date.getFullYear() === y &&\n date.getMonth() === m - 1 &&\n date.getDate() === d\n )\n }\n\n private destructureDate(value: string): {\n day: string\n month: string\n year: string\n } {\n const parts = value.split('/')\n\n switch (this.dateFormat) {\n case 'YYYY/MM/DD':\n return {\n year: parts[0],\n month: parts[1],\n day: parts[2]\n }\n\n case 'MM/DD/YYYY':\n return {\n month: parts[0],\n day: parts[1],\n year: parts[2]\n }\n\n case 'DD/MM/YYYY':\n return {\n day: parts[0],\n month: parts[1],\n year: parts[2]\n }\n }\n }\n}\n","import { BaseValidator } from '../../../base/BaseValidator'\n\n/**\n * Validates formatted time strings.\n *\n * Supports both 24-hour and 12-hour formats.\n * The 12-hour format **does NOT include AM/PM indicators**.\n *\n * ## Supported formats\n *\n * - **24h** → `HH:mm` (00:00 to 23:59)\n * - **12h** → `HH:mm` (01:00 to 12:59)\n *\n * ## Notes\n * - When using the 12-hour format, the validator only checks the numeric range.\n * - AM/PM handling must be managed separately by the application logic.\n *\n * @example\n * // 24-hour format\n * new TimeValidator({ format: '24h' })\n *\n * // Valid:\n * \"00:00\", \"12:00\", \"23:59\"\n *\n * // Invalid:\n * \"24:00\", \"25:00\", \"12:60\", \"12:00 PM\"\n *\n * @example\n * // 12-hour format (without AM/PM)\n * new TimeValidator({ format: '12h' })\n *\n * // Valid:\n * \"01:00\", \"09:30\", \"12:59\"\n *\n * // Invalid:\n * \"00:30\", \"13:00\", \"12:60\", \"11:00 AM\"\n */\n\nexport class TimeValidator extends BaseValidator {\n private format: '24h' | '12h'\n\n constructor({\n format = '24h',\n minLength,\n maxLength\n }: {\n format?: '24h' | '12h'\n minLength?: number\n maxLength?: number\n } = {}) {\n let pattern: RegExp\n\n if (format === '24h') {\n pattern = /^([0-1][0-9]|2[0-3]):([0-5][0-9])$/\n } else {\n pattern = /^(0[1-9]|1[0-2]):([0-5][0-9])$/\n }\n\n super({\n pattern,\n minLength,\n maxLength\n })\n\n this.format = format\n }\n\n validate(value: string): boolean {\n if (!super.validate(value)) return false\n\n return this.format === '24h'\n ? this.validate24h(value)\n : this.validate12h(value)\n }\n\n private validate24h(value: string): boolean {\n const match = value.match(/^(\\d{2}):(\\d{2})$/)\n if (!match) return false\n\n const hours = Number(match[1])\n const minutes = Number(match[2])\n\n return hours >= 0 && hours <= 23 && minutes >= 0 && minutes <= 59\n }\n\n private validate12h(value: string): boolean {\n const match = value.match(/^(\\d{2}):(\\d{2})$/)\n if (!match) return false\n\n const hours = Number(match[1])\n const minutes = Number(match[2])\n\n return hours >= 1 && hours <= 12 && minutes >= 0 && minutes <= 59\n }\n}\n","import { BaseValidator } from '../../../base/BaseValidator'\n\n/**\n * Validates a Brazilian phone number with optional mobile or landline support.\n */\nexport class PhoneValidator extends BaseValidator {\n private allowedDDDs: string[]\n\n constructor({\n allowMobile = true,\n allowLandline = true,\n allowedDDDs = Array.from({ length: 89 }, (_, i) => `${i + 11}`), // 11–99\n minLength,\n maxLength\n }: {\n allowMobile?: boolean\n allowLandline?: boolean\n allowedDDDs?: string[]\n minLength?: number\n maxLength?: number\n } = {}) {\n const mobileRegex = /^\\(?(\\d{2})\\)?\\s?\\d{5}-?\\d{4}$/ // (11) 98765-4321\n const landlineRegex = /^\\(?(\\d{2})\\)?\\s?\\d{4}-?\\d{4}$/ // (11) 3456-7890\n\n const pattern =\n allowMobile && allowLandline\n ? /^\\(?\\d{2}\\)?\\s?(\\d{4,5})-?\\d{4}$/\n : allowMobile\n ? mobileRegex\n : landlineRegex\n\n super({ pattern, minLength, maxLength })\n\n this.allowedDDDs = allowedDDDs\n }\n\n validate(value: string): boolean {\n if (!super.validate(value)) return false\n\n const digits = value.replace(/\\D/g, '')\n if (digits.length !== 10 && digits.length !== 11) return false\n\n const ddd = digits.slice(0, 2)\n return this.allowedDDDs.includes(ddd)\n }\n}\n","import { BaseValidator } from '../../../base/BaseValidator'\n\nexport class FloatValidator extends BaseValidator {\n constructor(maxDecimalPlaces = 3, minLength = 1, maxLength = 20) {\n const decimalRegex = new RegExp(`^\\\\d+(,\\\\d{1,${maxDecimalPlaces}})?$`)\n\n super({\n pattern: decimalRegex,\n minLength,\n maxLength\n })\n }\n}\n","import { BaseValidator } from '../../../base/BaseValidator'\n\n/**\n * Validates formatted currency strings.\n *\n * Supports optional prefix, negative values, and comma decimal separator.\n */\nexport class MoneyValidator extends BaseValidator {\n constructor({\n prefix = 'R$',\n maxDecimalPlaces = 2,\n allowNegative = true,\n minLength,\n maxLength\n }: {\n prefix?: string\n maxDecimalPlaces?: number\n allowNegative?: boolean\n minLength?: number\n maxLength?: number\n } = {}) {\n // Escape prefix for regex (if it has symbols)\n const escapedPrefix = prefix.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\n // Matches: R$ -1.234,56\n const pattern = new RegExp(\n `^${escapedPrefix}\\\\s?${allowNegative ? '-?' : ''}\\\\d{1,3}(\\\\.\\\\d{3})*(,\\\\d{1,${maxDecimalPlaces}})?$`\n )\n\n super({\n pattern,\n minLength,\n maxLength\n })\n }\n}\n","import { BaseValidator } from '../../../base/BaseValidator'\n\nexport class IntegerValidator extends BaseValidator {\n constructor(minLength = 1, maxLength = 15) {\n super({\n pattern: /^\\d+$/,\n minLength,\n maxLength\n })\n }\n}\n","import { ZIP_CODE_PATTERN } from '../masks/ZipCodeMask'\nimport { BaseValidator } from '../../../base/BaseValidator'\n\nexport class ZipCodeValidator extends BaseValidator {\n constructor() {\n const length = ZIP_CODE_PATTERN.length\n super({ minLength: length, maxLength: length })\n }\n\n validate(value: string): boolean {\n if (value == null) return false\n\n if (this.minLength !== undefined && value.length < this.minLength)\n return false\n\n if (this.maxLength !== undefined && value.length > this.maxLength)\n return false\n\n return true\n }\n}\n","import { CpfValidator } from './CpfValidator'\nimport { CnpjValidator } from './CnpjValidator'\nimport { BaseValidator } from '../../../base/BaseValidator'\nimport { onlyDigits } from '../../../base/maskUtils'\nimport { DocumentMode } from '../../../types'\n\nexport class DocumentValidator extends BaseValidator {\n private cpfValidator = new CpfValidator()\n private cnpjValidator = new CnpjValidator()\n private mode: DocumentMode\n\n constructor(mode: DocumentMode = DocumentMode.AUTO) {\n super()\n this.mode = mode\n }\n\n validate(value: string): boolean {\n const digits = onlyDigits(value)\n const type = this.resolveType(digits)\n\n if (type === DocumentMode.CPF) {\n return this.cpfValidator.validate(value)\n }\n\n if (type === DocumentMode.CNPJ) {\n return this.cnpjValidator.validate(value)\n }\n\n return false\n }\n\n private resolveType(digits: string): DocumentMode.CPF | DocumentMode.CNPJ {\n if (this.mode === DocumentMode.CPF) return DocumentMode.CPF\n if (this.mode === DocumentMode.CNPJ) return DocumentMode.CNPJ\n\n return digits.length <= 11 ? DocumentMode.CPF : DocumentMode.CNPJ\n }\n}\n","import { BaseValidator } from '../../../base/BaseValidator'\n\nexport class NumericSymbolValidator extends BaseValidator {\n constructor(minLength = 1, maxLength = 25) {\n super({\n pattern: /^[\\d.,/-]+$/,\n minLength,\n maxLength\n })\n }\n}\n","import { MaskModule } from '../../MaskModule'\nimport { MaskType, Locale } from '../../enums'\n\nimport { CpfMask } from './masks/CpfMask'\nimport { CnpjMask } from './masks/CnpjMask'\nimport { DateMask } from './masks/DateMask'\nimport { TimeMask } from './masks/TimeMask'\nimport { PhoneMask } from './masks/PhoneMask'\nimport { FloatMask } from './masks/FloatMask'\nimport { MoneyMask } from './masks/MoneyMask'\nimport { IntegerMask } from './masks/IntegerMask'\nimport { ZipCodeMask } from './masks/ZipCodeMask'\nimport { DocumentMask } from './masks/DocumentMask'\nimport { NumericSymbolMask } from './masks/NumericSymbolMask'\n\nimport { CpfValidator } from './validators/CpfValidator'\nimport { CnpjValidator } from './validators/CnpjValidator'\nimport { DateValidator } from './validators/DateValidator'\nimport { TimeValidator } from './validators/TimeValidator'\nimport { PhoneValidator } from './validators/PhoneValidator'\nimport { FloatValidator } from './validators/FloatValidator'\nimport { MoneyValidator } from './validators/MoneyValidator'\nimport { IntegerValidator } from './validators/IntegerValidator'\nimport { ZipCodeValidator } from './validators/ZipCodeValidator'\nimport { DocumentValidator } from './validators/DocumentValidator'\nimport { NumericSymbolValidator } from './validators/NumericSymbolValidator'\n\nexport function registerBrMasks() {\n MaskModule.registerMask(Locale.BR, MaskType.CPF, new CpfMask())\n MaskModule.registerValidator(Locale.BR, MaskType.CPF, new CpfValidator())\n\n MaskModule.registerMask(Locale.BR, MaskType.CNPJ, new CnpjMask())\n MaskModule.registerValidator(Locale.BR, MaskType.CNPJ, new CnpjValidator())\n\n MaskModule.registerMask(Locale.BR, MaskType.DOCUMENT, new DocumentMask())\n MaskModule.registerValidator(\n Locale.BR,\n MaskType.DOCUMENT,\n new DocumentValidator()\n )\n\n MaskModule.registerMask(\n Locale.BR,\n MaskType.TIME_12H,\n new TimeMask({ timeFormat: '12h' })\n )\n MaskModule.registerValidator(\n Locale.BR,\n MaskType.TIME_12H,\n new TimeValidator({ format: '12h' })\n )\n\n MaskModule.registerMask(\n Locale.BR,\n MaskType.TIME_24H,\n new TimeMask({ timeFormat: '24h' })\n )\n MaskModule.registerValidator(\n Locale.BR,\n MaskType.TIME_24H,\n new TimeValidator({ format: '24h' })\n )\n\n MaskModule.registerMask(Locale.BR, MaskType.PHONE, new PhoneMask())\n MaskModule.registerValidator(Locale.BR, MaskType.PHONE, new PhoneValidator())\n\n MaskModule.registerMask(Locale.BR, MaskType.DATE, new DateMask())\n MaskModule.registerValidator(Locale.BR, MaskType.DATE, new DateValidator())\n\n MaskModule.registerMask(Locale.BR, MaskType.FLOAT, new FloatMask())\n MaskModule.registerValidator(Locale.BR, MaskType.FLOAT, new FloatValidator())\n\n MaskModule.registerMask(Locale.BR, MaskType.INTEGER, new IntegerMask())\n MaskModule.registerValidator(\n Locale.BR,\n MaskType.INTEGER,\n new IntegerValidator()\n )\n\n MaskModule.registerMask(Locale.BR, MaskType.MONEY, new MoneyMask())\n MaskModule.registerValidator(Locale.BR, MaskType.MONEY, new MoneyValidator())\n\n MaskModule.registerMask(\n Locale.BR,\n MaskType.NUMERIC_SYMBOL,\n new NumericSymbolMask()\n )\n MaskModule.registerValidator(\n Locale.BR,\n MaskType.NUMERIC_SYMBOL,\n new NumericSymbolValidator()\n )\n\n MaskModule.registerMask(Locale.BR, MaskType.ZIP_CODE, new ZipCodeMask())\n MaskModule.registerValidator(\n Locale.BR,\n MaskType.ZIP_CODE,\n new ZipCodeValidator()\n )\n}\n","import { registerBrMasks } from './locales/br/registerMasks'\n\nexport * from './enums'\nexport * from './MaskModule'\n\n// Register default locales\nregisterBrMasks()\n"],"mappings":";AAYA,MAAMA,UAA0B,EAAE;AAElC,SAAS,aAAa,QAAsB;AAC1C,KAAI,CAAC,QAAQ,QACX,SAAQ,UAAU;EAAE,OAAO,EAAE;EAAE,YAAY,EAAE;EAAE;;AAInD,MAAa,aAAa;CACxB,aAAa,QAAgB,MAAgB,MAAsB;AACjE,eAAa,OAAO;AACpB,UAAQ,QAAQ,MAAM,QAAQ;;CAGhC,kBACE,QACA,MACA,WACM;AACN,eAAa,OAAO;AACpB,UAAQ,QAAQ,WAAW,QAAQ;;CAGrC,QAAQ,QAAgB,MAAsC;AAC5D,SAAO,QAAQ,SAAS,MAAM;;CAGhC,aAAa,QAAgB,MAA2C;AACtE,SAAO,QAAQ,SAAS,WAAW;;CAGrC,QAAc;AACZ,SAAO,KAAK,QAAQ,CAAC,SAAQ,WAAU;AACrC,UAAO,QAAQ;IACf;;CAEL;;;;;;;;;AC3CD,IAAY,4CAAL;AACL;AACA;AACA;;;;;;;;AAQF,MAAa,WAAW;CACtB,KAAK;CACL,MAAM;CACN,UAAU;CACV,OAAO;CACP,MAAM;CACN,OAAO;CACP,SAAS;CACT,OAAO;CACP,UAAU;CACV,gBAAgB;CAChB,UAAU;CACV,UAAU;CACX;;;;;;;;;ACxBD,SAAgB,WAAW,OAAuB;AAChD,KAAI,SAAS,KAAM,QAAO;AAC1B,QAAO,MAAM,QAAQ,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;AAsBjC,SAAgB,aAAa,OAAe,SAAyB;AACnE,KAAI,SAAS,KAAM,QAAO;AAC1B,KAAI,WAAW,KAAM,QAAO;CAE5B,IAAI,SAAS;CACb,IAAI,aAAa;AAEjB,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;EACvC,MAAM,OAAO,QAAQ;AAErB,MAAI,cAAc,KAAK,KAAK,CAC1B,KAAI,aAAa,MAAM,OACrB,WAAU,MAAM;MAEhB;WAIE,aAAa,MAAM,OAAQ,WAAU;;AAI7C,QAAO;;;;;;;;AAmBT,SAAgB,YAAY,OAAe,WAA4B;AACrE,KAAI,SAAS,KAAM,QAAO;AAC1B,KAAI,cAAc,OAAW,QAAO;AACpC,QAAO,MAAM,MAAM,GAAG,UAAU;;;;;;;;;;ACjElC,IAAsB,WAAtB,MAA+C;;;;CAI7C;;;;CAKA;CAEA,YAAY,WAAoB,WAAoB;AAClD,OAAK,YAAY;AACjB,OAAK,YAAY;;;;;;;CAQnB,OAAO,OAAuB;AAC5B,SAAO,WAAW,MAAM;;;;;;AC3B5B,MAAa,cAAc;AAE3B,IAAa,UAAb,cAA6B,SAAS;CACpC,cAAc;EACZ,MAAM,SAAS;AACf,QAAM,QAAQ,OAAO;;CAGvB,OAAO,OAAuB;AAI5B,SAAO,YAFW,aADH,WAAW,MAAM,EACO,YAAY,EAErB,KAAK,UAAU;;;;;;ACZjD,MAAa,eAAe;AAE5B,IAAa,WAAb,cAA8B,SAAS;CACrC,cAAc;EACZ,MAAM,SAAS;AACf,QAAM,QAAQ,OAAO;;CAGvB,OAAO,OAAuB;AAI5B,SAAO,YAFW,aADH,WAAW,MAAM,EACO,aAAa,EAEtB,KAAK,UAAU;;;;;;ACVjD,MAAMC,gBAAc;AAEpB,IAAa,WAAb,cAA8B,SAAS;CACrC,AAAQ;CAER,YAAY,EAAE,eAAgD,EAAE,EAAE;AAChE,QAAMA,eAAaA,cAAY;AAC/B,OAAK,aAAa,cAAc;;CAGlC,AAAQ,gBAAgB,OAItB;EACA,MAAM,SAAS,WAAW,MAAM;AAEhC,UAAQ,KAAK,YAAb;GACE,KAAK,aACH,QAAO;IACL,MAAM,OAAO,MAAM,GAAG,EAAE;IACxB,OAAO,OAAO,MAAM,GAAG,EAAE;IACzB,KAAK,OAAO,MAAM,GAAG,EAAE;IACxB;GAEH,KAAK,aACH,QAAO;IACL,OAAO,OAAO,MAAM,GAAG,EAAE;IACzB,KAAK,OAAO,MAAM,GAAG,EAAE;IACvB,MAAM,OAAO,MAAM,GAAG,EAAE;IACzB;GAEH,KAAK,aACH,QAAO;IACL,KAAK,OAAO,MAAM,GAAG,EAAE;IACvB,OAAO,OAAO,MAAM,GAAG,EAAE;IACzB,MAAM,OAAO,MAAM,GAAG,EAAE;IACzB;;;CAIP,OAAO,OAAuB;EAC5B,MAAM,EAAE,KAAK,OAAO,SAAS,KAAK,gBAAgB,MAAM;EAExD,IAAI,IAAI;EACR,IAAI,IAAI;EACR,IAAI,IAAI;AAGR,MAAI,EAAE,WAAW,GAAG;GAClB,MAAM,SAAS,SAAS,EAAE;AAC1B,OAAI,SAAS,GAAI,KAAI;YACZ,SAAS,EAAG,KAAI;;AAI3B,MAAI,EAAE,WAAW,GAAG;GAClB,MAAM,SAAS,SAAS,EAAE;AAC1B,OAAI,SAAS,GAAI,KAAI;YACZ,SAAS,EAAG,KAAI;;AAI3B,MAAI,EAAE,WAAW,GAEf;OADe,SAAS,EAAE,GACb,EAAG,KAAI;;AAGtB,SAAO,YAAY,KAAK,UAAU,GAAG,GAAG,EAAE,EAAE,KAAK,UAAU;;CAG7D,AAAQ,UAAU,KAAa,OAAe,MAAc;AAC1D,UAAQ,KAAK,YAAb;GACE,KAAK,aACH,QAAO;IAAC;IAAM,SAAS,IAAI;IAAS,OAAO,IAAI;IAAM,CAAC,KAAK,GAAG;GAEhE,KAAK,aACH,QAAO;IAAC;IAAO,OAAO,IAAI;IAAO,QAAQ,IAAI;IAAO,CAAC,KAAK,GAAG;GAE/D,KAAK,aACH,QAAO;IAAC;IAAK,SAAS,IAAI;IAAS,QAAQ,IAAI;IAAO,CAAC,KAAK,GAAG;;;;;;;ACjFvE,MAAa,eAAe;;;;;;;;;;;;;;;;;;AAmB5B,IAAa,WAAb,cAA8B,SAAS;CACrC,AAAQ;CAER,YAAY,EACV,aAAa,OACb,YAAY,GACZ,YAAY,MAKV,EAAE,EAAE;AACN,QAAM,WAAW,UAAU;AAC3B,OAAK,aAAa;;CAGpB,OAAO,OAAuB;EAC5B,MAAM,SAAS,WAAW,MAAM;AAGhC,MAAI,CAFkB,YAAY,QAAQ,EAAE,CAExB,QAAO;EAE3B,MAAM,YAAY,aAAa,QAAQ,aAAa;EAEpD,IAAI,SAAS;AAEb,MAAI,UAAU,UAAU,EACtB,UAAS,KAAK,mBAAmB,UAAU;AAG7C,SAAO,YAAY,QAAQ,KAAK,UAAU;;;;;CAM5C,AAAQ,mBAAmB,OAAuB;AAChD,MAAI,CAAC,MAAO,QAAO;EAEnB,MAAM,QAAQ,MAAM,MAAM,IAAI;EAC9B,MAAM,QAAQ,MAAM,MAAM;EAC1B,MAAM,UAAU,MAAM,MAAM;EAE5B,MAAM,iBAAiB,KAAK,aAAa,MAAM;AAG/C,MAAI,CAAC,QAEH,QAAO,MAAM,WAAW,IAAI,GAAG,eAAe,KAAK;AAKrD,SAAO,GAAG,eAAe,GAFA,KAAK,eAAe,QAAQ;;;;;CAQvD,AAAQ,aAAa,OAAuB;AAC1C,MAAI,CAAC,MAAO,QAAO;AAGnB,MAAI,MAAM,WAAW,GAAG;GACtB,MAAM,QAAQ,SAAS,OAAO,GAAG;AAEjC,OAAI,KAAK,eAAe,OAAO;AAE7B,QAAI,QAAQ,EACV,QAAO,IAAI;AAEb,WAAO;UACF;AAEL,QAAI,UAAU,EACZ,QAAO;AAET,QAAI,QAAQ,EACV,QAAO,IAAI;AAEb,WAAO;;;EAKX,IAAI,UAAU,SAAS,OAAO,GAAG;AAEjC,MAAI,KAAK,eAAe,OAAO;AAC7B,OAAI,UAAU,GAAI,WAAU;AAC5B,OAAI,UAAU,EAAG,WAAU;SACtB;AACL,OAAI,YAAY,EAAG,WAAU;AAC7B,OAAI,UAAU,GAAI,WAAU;AAC5B,OAAI,UAAU,EAAG,WAAU;;AAG7B,SAAO,QAAQ,UAAU,CAAC,SAAS,GAAG,IAAI;;;;;CAM5C,AAAQ,eAAe,SAAyB;AAC9C,MAAI,CAAC,QAAS,QAAO;AAGrB,MAAI,QAAQ,WAAW,GAAG;GACxB,MAAM,QAAQ,SAAS,SAAS,GAAG;AAEnC,OAAI,QAAQ,EACV,QAAO,IAAI;AAEb,UAAO;;EAIT,IAAI,YAAY,SAAS,SAAS,GAAG;AAErC,MAAI,YAAY,GAAI,aAAY;AAChC,MAAI,YAAY,EAAG,aAAY;AAE/B,SAAO,UAAU,UAAU,CAAC,SAAS,GAAG,IAAI;;;;;;;;;;ACzIhD,IAAa,YAAb,cAA+B,SAAS;CACtC,YAAY,YAAY,IAAI;AAC1B,QAAM,IAAI,UAAU;;CAGtB,OAAO,OAAuB;EAC5B,MAAM,SAAS,YAAY,WAAW,MAAM,EAAE,KAAK,UAAU;AAC7D,MAAI,CAAC,OAAQ,QAAO;AAGpB,MAAI,OAAO,SAAS,EAAG,QAAO,IAAI;EAElC,MAAM,MAAM,OAAO,MAAM,GAAG,EAAE;EAC9B,MAAM,OAAO,OAAO,MAAM,EAAE;AAG5B,MAAI,KAAK,UAAU,EACjB,QAAO,IAAI,IAAI,IAAI;WACV,KAAK,UAAU,GAAG;GAC3B,MAAM,QAAQ,KAAK,MAAM,GAAG,EAAE;GAC9B,MAAM,QAAQ,KAAK,MAAM,EAAE;AAC3B,UAAO,IAAI,IAAI,IAAI,QAAQ,QAAQ,IAAI,UAAU;QAIjD,QAAO,IAAI,IAAI,IAFD,KAAK,MAAM,GAAG,EAAE,CAEL,GADX,KAAK,MAAM,EAAE;;;;;;;;;;;AClBjC,IAAa,YAAb,cAA+B,SAAS;CACtC,AAAQ;CAER,YAAY,EACV,YAAY,IACZ,gBAAgB,MACe,EAAE,EAAE;AACnC,QAAM,GAAG,UAAU;AACnB,OAAK,mBAAmB;;CAG1B,OAAO,OAAuB;EAE5B,MAAM,SAAS,YADG,WAAW,MAAM,EACG,KAAK,UAAU;AAErD,MAAI,CAAC,OAAQ,QAAO,KAAK,IAAI,OAAO,KAAK,iBAAiB;EAE1D,MAAM,SAAS,OAAO;AAEtB,MAAI,UAAU,KAAK,kBAAkB;GACnC,MAAM,SAAS,OAAO,SAAS,KAAK,mBAAmB,GAAG,IAAI;AAG9D,UAAO,GAFS,OAAO,MAAM,GAAG,OAAO,SAAS,KAAK,iBAAiB,CAEpD,GADE,OAAO,MAAM,CAAC,KAAK,iBAAiB;;EAI1D,MAAM,SACJ,OAAO,MAAM,GAAG,SAAS,KAAK,iBAAiB,CAAC,QAAQ,OAAO,GAAG,IAAI;EACxE,MAAM,UAAU,OAAO,MAAM,CAAC,KAAK,iBAAiB;AAEpD,SAAO,GADc,KAAK,gBAAgB,OAAO,CAC1B,GAAG;;;;;;CAO5B,AAAQ,gBAAgB,OAAuB;AAC7C,SAAO,MAAM,QAAQ,yBAAyB,IAAI;;;;;;;;;;;;;;ACxCtD,IAAa,YAAb,cAA+B,SAAS;CACtC,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YAAY,EACV,SAAS,MACT,mBAAmB,GACnB,gBAAgB,MAChB,YAAY,OAMV,EAAE,EAAE;AACN,QAAM,GAAG,UAAU;AACnB,OAAK,SAAS;AACd,OAAK,mBAAmB;AACxB,OAAK,gBAAgB;;CAGvB,OAAO,OAAuB;AAC5B,MAAI,CAAC,MAAO,QAAO;EAEnB,MAAM,aAAa,KAAK,iBAAiB,MAAM,MAAM,CAAC,WAAW,IAAI;EACrE,MAAM,SAAS,WAAW,MAAM,CAAC,MAAM,GAAG,KAAK,UAAU;AAEzD,MAAI,CAAC,OACH,QAAO,aACH,GAAG,KAAK,OAAO,MAAM,IAAI,OAAO,KAAK,iBAAiB,KACtD,GAAG,KAAK,OAAO,KAAK,IAAI,OAAO,KAAK,iBAAiB;EAG3D,MAAM,MAAM,OAAO;AAGnB,MAAI,OAAO,KAAK,kBAAkB;GAChC,MAAM,SAAS,OAAO,SAAS,KAAK,mBAAmB,GAAG,IAAI;GAC9D,MAAM,UAAU,OAAO,MAAM,GAAG,OAAO,SAAS,KAAK,iBAAiB;GACtE,MAAM,cACJ,OAAO,MAAM,CAAC,KAAK,iBAAiB,CAAC,QAAQ,OAAO,GAAG,IAAI;AAC7D,UAAO,GAAG,KAAK,OAAO,GAAG,aAAa,MAAM,KAAK,QAAQ,GAAG;;EAG9D,MAAM,SACJ,OAAO,MAAM,GAAG,MAAM,KAAK,iBAAiB,CAAC,QAAQ,OAAO,GAAG,IAAI;EACrE,MAAM,UAAU,OAAO,MAAM,CAAC,KAAK,iBAAiB;EACpD,MAAM,eAAe,KAAK,gBAAgB,OAAO;AAEjD,SAAO,GAAG,KAAK,OAAO,GAAG,aAAa,MAAM,KAAK,aAAa,GAAG;;CAGnE,AAAQ,gBAAgB,OAAuB;AAC7C,SAAO,MAAM,QAAQ,yBAAyB,IAAI;;;;;;;;;AC3DtD,IAAa,cAAb,cAAiC,SAAS;CACxC;CACA;CAEA,YACE,UAA8D,EAAE,EAChE;AACA,QAAM,GAAG,QAAQ,UAAU;AAC3B,OAAK,MAAM,QAAQ;AACnB,OAAK,MAAM,QAAQ;;CAGrB,OAAO,OAAuB;EAC5B,MAAM,SAAS,WAAW,MAAM;AAEhC,MAAI,KAAK,QAAQ,UAAa,OAAO,OAAO,GAAG,KAAK,IAClD,QAAO,KAAK,IAAI,UAAU;AAE5B,MAAI,KAAK,QAAQ,UAAa,OAAO,OAAO,GAAG,KAAK,IAClD,QAAO,KAAK,IAAI,UAAU;AAE5B,SAAO,YAAY,QAAQ,KAAK,UAAU;;;;;;ACxB9C,MAAa,mBAAmB;AAEhC,IAAa,cAAb,cAAiC,SAAS;CACxC,cAAc;EACZ,MAAM,SAAS;AACf,QAAM,QAAQ,OAAO;;CAGvB,OAAO,OAAuB;AAI5B,SAAO,YAFW,aADH,WAAW,MAAM,EACO,iBAAiB,EAE1B,KAAK,UAAU;;;;;;;;;;;;;ACqCjD,IAAY,wDAAL;AACL;AACA;AACA;;;;;;ACjDF,IAAa,eAAb,cAAkC,SAAS;CACzC,AAAQ,UAAU,IAAI,SAAS;CAC/B,AAAQ,WAAW,IAAI,UAAU;CACjC,AAAQ;CAER,YAAY,OAAqB,aAAa,MAAM;AAClD,SAAO;AACP,OAAK,OAAO;;CAGd,OAAO,OAAuB;EAC5B,MAAM,SAAS,WAAW,MAAM;EAChC,MAAM,OAAO,KAAK,YAAY,OAAO;AAErC,MAAI,SAAS,aAAa,IACxB,QAAO,KAAK,QAAQ,OAAO,OAAO;AAGpC,MAAI,SAAS,aAAa,KACxB,QAAO,KAAK,SAAS,OAAO,OAAO;AAGrC,SAAO;;CAGT,AAAQ,YAAY,QAAsD;AACxE,MAAI,KAAK,SAAS,aAAa,IAAK,QAAO,aAAa;AACxD,MAAI,KAAK,SAAS,aAAa,KAAM,QAAO,aAAa;AAEzD,SAAO,OAAO,UAAU,KAAK,aAAa,MAAM,aAAa;;;;;;AChCjE,IAAa,oBAAb,cAAuC,SAAS;CAC9C,YAAY,YAAY,IAAI;AAC1B,QAAM,GAAG,UAAU;;CAGrB,OAAO,OAAuB;AAC5B,MAAI,SAAS,KAAM,QAAO;AAG1B,SAAO,YADQ,MAAM,QAAQ,cAAc,GAAG,EACnB,KAAK,UAAU;;;;;;;;;;;ACL9C,IAAsB,gBAAtB,MAAyD;CACvD,AAAU;CACV,AAAU;CACV,AAAU;CAEV,YAAY,SAIT;AACD,OAAK,UAAU,SAAS;AACxB,OAAK,YAAY,SAAS;AAC1B,OAAK,YAAY,SAAS;;;;;;;;;;;;;CAc5B,SAAS,OAAwB;AAC/B,MAAI,SAAS,KAAM,QAAO;EAE1B,MAAM,SAAS,MAAM;AAErB,MAAI,KAAK,cAAc,UAAa,SAAS,KAAK,UAChD,QAAO;AAGT,MAAI,KAAK,cAAc,UAAa,SAAS,KAAK,UAChD,QAAO;AAGT,MAAI,KAAK,WAAW,CAAC,KAAK,QAAQ,KAAK,MAAM,CAAE,QAAO;AAEtD,SAAO;;;;;;AC7CX,IAAa,eAAb,cAAkC,cAAc;CAC9C,cAAc;EACZ,MAAM,SAAS,YAAY;AAC3B,QAAM;GAAE,WAAW;GAAQ,WAAW;GAAQ,CAAC;;CAGjD,SAAS,OAAwB;AAC/B,MAAI,SAAS,KAAM,QAAO;AAE1B,SAAO,WAAW,MAAM;;;;;;;;;;;;;;;AAgB5B,SAAS,WAAW,UAA2B;CAE7C,MAAM,iBAAiB,SAAS,QAAQ,WAAW,GAAG;AAGtD,KAAI,eAAe,WAAW,GAAI,QAAO;AAGzC,KAAI,eAAe,KAAK,eAAe,CAAE,QAAO;CAGhD,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IACrB,QAAO,SAAS,eAAe,OAAO,EAAE,CAAC,IAAI,KAAK;CAGpD,IAAI,kBAAmB,MAAM,KAAM;AACnC,KAAI,oBAAoB,MAAM,oBAAoB,GAAI,mBAAkB;AACxE,KAAI,oBAAoB,SAAS,eAAe,OAAO,EAAE,CAAC,CAAE,QAAO;AAGnE,OAAM;AACN,MAAK,IAAI,IAAI,GAAG,IAAI,IAAI,IACtB,QAAO,SAAS,eAAe,OAAO,EAAE,CAAC,IAAI,KAAK;CAGpD,IAAI,mBAAoB,MAAM,KAAM;AACpC,KAAI,qBAAqB,MAAM,qBAAqB,GAAI,oBAAmB;AAC3E,KAAI,qBAAqB,SAAS,eAAe,OAAO,GAAG,CAAC,CAAE,QAAO;AAErE,QAAO;;;;;ACvDT,IAAa,gBAAb,cAAmC,cAAc;CAC/C,cAAc;EACZ,MAAM,SAAS,aAAa;AAC5B,QAAM;GAAE,WAAW;GAAQ,WAAW;GAAQ,CAAC;;CAGjD,SAAS,OAAwB;AAC/B,MAAI,SAAS,KAAM,QAAO;AAE1B,SAAO,YAAY,MAAM;;;;;;;;AAS7B,SAAS,YAAY,MAAuB;AAC1C,KAAI,CAAC,KAAM,QAAO;CAGlB,MAAM,cAAc,KAAK,QAAQ,WAAW,GAAG;AAG/C,KAAI,YAAY,WAAW,GAAI,QAAO;AAGtC,KAAI,eAAe,KAAK,YAAY,CAAE,QAAO;CAG7C,MAAM,WAAW,YAAY,MAAM,GAAG,GAAG;CACzC,MAAM,cAAc,YAAY,MAAM,GAAG;CAIzC,MAAM,kBAAkB,wBADP,yBAAyB,UAAU,IAAI,EAAE,CACD;AAEzD,KAAI,oBAAoB,OAAO,YAAY,OAAO,EAAE,CAAC,CACnD,QAAO;AAOT,KAFyB,wBADP,yBAAyB,WAAW,iBAAiB,IAAI,EAAE,CAClB,KAElC,OAAO,YAAY,OAAO,EAAE,CAAC,CACpD,QAAO;AAGT,QAAO;;;;;;;;;AAUT,SAAS,yBACP,SACA,MACA,UACQ;CACR,IAAI,MAAM;AAEV,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,SAAO,OAAO,QAAQ,OAAO,EAAE,CAAC,GAAG;AACnC;AAEA,MAAI,WAAW,EACb,YAAW;;AAIf,QAAO;;;;;;;AAQT,SAAS,wBAAwB,KAAqB;CACpD,MAAM,YAAY,MAAM;AACxB,QAAO,YAAY,IAAI,IAAI,KAAK;;;;;ACtFlC,MAAM,cAAc;AAEpB,IAAa,gBAAb,cAAmC,cAAc;CAC/C,AAAQ;CAER,YAAY,EAAE,eAAgD,EAAE,EAAE;AAChE,QAAM;GACJ,WAAW;GACX,WAAW;GACX,SAAS;GACV,CAAC;AAEF,OAAK,aAAa,cAAc;;CAGlC,AAAS,SAAS,OAAwB;AACxC,MAAI,CAAC,MAAM,SAAS,MAAM,CAAE,QAAO;EAEnC,MAAM,EAAE,KAAK,OAAO,SAAS,KAAK,gBAAgB,MAAM;AAExD,MAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAM,QAAO;EAEpC,MAAM,IAAI,SAAS,KAAK,GAAG;EAC3B,MAAM,IAAI,SAAS,OAAO,GAAG;EAC7B,MAAM,IAAI,SAAS,MAAM,GAAG;AAE5B,MAAI,IAAI,KAAK,IAAI,GAAI,QAAO;AAC5B,MAAI,IAAI,KAAK,IAAI,GAAI,QAAO;EAE5B,MAAM,OAAO,IAAI,KAAK,GAAG,IAAI,GAAG,EAAE;AAElC,SACE,KAAK,aAAa,KAAK,KACvB,KAAK,UAAU,KAAK,IAAI,KACxB,KAAK,SAAS,KAAK;;CAIvB,AAAQ,gBAAgB,OAItB;EACA,MAAM,QAAQ,MAAM,MAAM,IAAI;AAE9B,UAAQ,KAAK,YAAb;GACE,KAAK,aACH,QAAO;IACL,MAAM,MAAM;IACZ,OAAO,MAAM;IACb,KAAK,MAAM;IACZ;GAEH,KAAK,aACH,QAAO;IACL,OAAO,MAAM;IACb,KAAK,MAAM;IACX,MAAM,MAAM;IACb;GAEH,KAAK,aACH,QAAO;IACL,KAAK,MAAM;IACX,OAAO,MAAM;IACb,MAAM,MAAM;IACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BT,IAAa,gBAAb,cAAmC,cAAc;CAC/C,AAAQ;CAER,YAAY,EACV,SAAS,OACT,WACA,cAKE,EAAE,EAAE;EACN,IAAIC;AAEJ,MAAI,WAAW,MACb,WAAU;MAEV,WAAU;AAGZ,QAAM;GACJ;GACA;GACA;GACD,CAAC;AAEF,OAAK,SAAS;;CAGhB,SAAS,OAAwB;AAC/B,MAAI,CAAC,MAAM,SAAS,MAAM,CAAE,QAAO;AAEnC,SAAO,KAAK,WAAW,QACnB,KAAK,YAAY,MAAM,GACvB,KAAK,YAAY,MAAM;;CAG7B,AAAQ,YAAY,OAAwB;EAC1C,MAAM,QAAQ,MAAM,MAAM,oBAAoB;AAC9C,MAAI,CAAC,MAAO,QAAO;EAEnB,MAAM,QAAQ,OAAO,MAAM,GAAG;EAC9B,MAAM,UAAU,OAAO,MAAM,GAAG;AAEhC,SAAO,SAAS,KAAK,SAAS,MAAM,WAAW,KAAK,WAAW;;CAGjE,AAAQ,YAAY,OAAwB;EAC1C,MAAM,QAAQ,MAAM,MAAM,oBAAoB;AAC9C,MAAI,CAAC,MAAO,QAAO;EAEnB,MAAM,QAAQ,OAAO,MAAM,GAAG;EAC9B,MAAM,UAAU,OAAO,MAAM,GAAG;AAEhC,SAAO,SAAS,KAAK,SAAS,MAAM,WAAW,KAAK,WAAW;;;;;;;;;ACvFnE,IAAa,iBAAb,cAAoC,cAAc;CAChD,AAAQ;CAER,YAAY,EACV,cAAc,MACd,gBAAgB,MAChB,cAAc,MAAM,KAAK,EAAE,QAAQ,IAAI,GAAG,GAAG,MAAM,GAAG,IAAI,KAAK,EAC/D,WACA,cAOE,EAAE,EAAE;AAWN,QAAM;GAAE,SANN,eAAe,gBACX,qCACA,cANc,mCACE;GASL;GAAW;GAAW,CAAC;AAExC,OAAK,cAAc;;CAGrB,SAAS,OAAwB;AAC/B,MAAI,CAAC,MAAM,SAAS,MAAM,CAAE,QAAO;EAEnC,MAAM,SAAS,MAAM,QAAQ,OAAO,GAAG;AACvC,MAAI,OAAO,WAAW,MAAM,OAAO,WAAW,GAAI,QAAO;EAEzD,MAAM,MAAM,OAAO,MAAM,GAAG,EAAE;AAC9B,SAAO,KAAK,YAAY,SAAS,IAAI;;;;;;ACzCzC,IAAa,iBAAb,cAAoC,cAAc;CAChD,YAAY,mBAAmB,GAAG,YAAY,GAAG,YAAY,IAAI;EAC/D,MAAM,+BAAe,IAAI,OAAO,gBAAgB,iBAAiB,MAAM;AAEvE,QAAM;GACJ,SAAS;GACT;GACA;GACD,CAAC;;;;;;;;;;;ACHN,IAAa,iBAAb,cAAoC,cAAc;CAChD,YAAY,EACV,SAAS,MACT,mBAAmB,GACnB,gBAAgB,MAChB,WACA,cAOE,EAAE,EAAE;EAEN,MAAM,gBAAgB,OAAO,QAAQ,uBAAuB,OAAO;EAGnE,MAAM,0BAAU,IAAI,OAClB,IAAI,cAAc,MAAM,gBAAgB,OAAO,GAAG,8BAA8B,iBAAiB,MAClG;AAED,QAAM;GACJ;GACA;GACA;GACD,CAAC;;;;;;AC/BN,IAAa,mBAAb,cAAsC,cAAc;CAClD,YAAY,YAAY,GAAG,YAAY,IAAI;AACzC,QAAM;GACJ,SAAS;GACT;GACA;GACD,CAAC;;;;;;ACLN,IAAa,mBAAb,cAAsC,cAAc;CAClD,cAAc;EACZ,MAAM,SAAS,iBAAiB;AAChC,QAAM;GAAE,WAAW;GAAQ,WAAW;GAAQ,CAAC;;CAGjD,SAAS,OAAwB;AAC/B,MAAI,SAAS,KAAM,QAAO;AAE1B,MAAI,KAAK,cAAc,UAAa,MAAM,SAAS,KAAK,UACtD,QAAO;AAET,MAAI,KAAK,cAAc,UAAa,MAAM,SAAS,KAAK,UACtD,QAAO;AAET,SAAO;;;;;;ACZX,IAAa,oBAAb,cAAuC,cAAc;CACnD,AAAQ,eAAe,IAAI,cAAc;CACzC,AAAQ,gBAAgB,IAAI,eAAe;CAC3C,AAAQ;CAER,YAAY,OAAqB,aAAa,MAAM;AAClD,SAAO;AACP,OAAK,OAAO;;CAGd,SAAS,OAAwB;EAC/B,MAAM,SAAS,WAAW,MAAM;EAChC,MAAM,OAAO,KAAK,YAAY,OAAO;AAErC,MAAI,SAAS,aAAa,IACxB,QAAO,KAAK,aAAa,SAAS,MAAM;AAG1C,MAAI,SAAS,aAAa,KACxB,QAAO,KAAK,cAAc,SAAS,MAAM;AAG3C,SAAO;;CAGT,AAAQ,YAAY,QAAsD;AACxE,MAAI,KAAK,SAAS,aAAa,IAAK,QAAO,aAAa;AACxD,MAAI,KAAK,SAAS,aAAa,KAAM,QAAO,aAAa;AAEzD,SAAO,OAAO,UAAU,KAAK,aAAa,MAAM,aAAa;;;;;;ACjCjE,IAAa,yBAAb,cAA4C,cAAc;CACxD,YAAY,YAAY,GAAG,YAAY,IAAI;AACzC,QAAM;GACJ,SAAS;GACT;GACA;GACD,CAAC;;;;;;ACmBN,SAAgB,kBAAkB;AAChC,YAAW,aAAa,OAAO,IAAI,SAAS,KAAK,IAAI,SAAS,CAAC;AAC/D,YAAW,kBAAkB,OAAO,IAAI,SAAS,KAAK,IAAI,cAAc,CAAC;AAEzE,YAAW,aAAa,OAAO,IAAI,SAAS,MAAM,IAAI,UAAU,CAAC;AACjE,YAAW,kBAAkB,OAAO,IAAI,SAAS,MAAM,IAAI,eAAe,CAAC;AAE3E,YAAW,aAAa,OAAO,IAAI,SAAS,UAAU,IAAI,cAAc,CAAC;AACzE,YAAW,kBACT,OAAO,IACP,SAAS,UACT,IAAI,mBAAmB,CACxB;AAED,YAAW,aACT,OAAO,IACP,SAAS,UACT,IAAI,SAAS,EAAE,YAAY,OAAO,CAAC,CACpC;AACD,YAAW,kBACT,OAAO,IACP,SAAS,UACT,IAAI,cAAc,EAAE,QAAQ,OAAO,CAAC,CACrC;AAED,YAAW,aACT,OAAO,IACP,SAAS,UACT,IAAI,SAAS,EAAE,YAAY,OAAO,CAAC,CACpC;AACD,YAAW,kBACT,OAAO,IACP,SAAS,UACT,IAAI,cAAc,EAAE,QAAQ,OAAO,CAAC,CACrC;AAED,YAAW,aAAa,OAAO,IAAI,SAAS,OAAO,IAAI,WAAW,CAAC;AACnE,YAAW,kBAAkB,OAAO,IAAI,SAAS,OAAO,IAAI,gBAAgB,CAAC;AAE7E,YAAW,aAAa,OAAO,IAAI,SAAS,MAAM,IAAI,UAAU,CAAC;AACjE,YAAW,kBAAkB,OAAO,IAAI,SAAS,MAAM,IAAI,eAAe,CAAC;AAE3E,YAAW,aAAa,OAAO,IAAI,SAAS,OAAO,IAAI,WAAW,CAAC;AACnE,YAAW,kBAAkB,OAAO,IAAI,SAAS,OAAO,IAAI,gBAAgB,CAAC;AAE7E,YAAW,aAAa,OAAO,IAAI,SAAS,SAAS,IAAI,aAAa,CAAC;AACvE,YAAW,kBACT,OAAO,IACP,SAAS,SACT,IAAI,kBAAkB,CACvB;AAED,YAAW,aAAa,OAAO,IAAI,SAAS,OAAO,IAAI,WAAW,CAAC;AACnE,YAAW,kBAAkB,OAAO,IAAI,SAAS,OAAO,IAAI,gBAAgB,CAAC;AAE7E,YAAW,aACT,OAAO,IACP,SAAS,gBACT,IAAI,mBAAmB,CACxB;AACD,YAAW,kBACT,OAAO,IACP,SAAS,gBACT,IAAI,wBAAwB,CAC7B;AAED,YAAW,aAAa,OAAO,IAAI,SAAS,UAAU,IAAI,aAAa,CAAC;AACxE,YAAW,kBACT,OAAO,IACP,SAAS,UACT,IAAI,kBAAkB,CACvB;;;;;AC5FH,iBAAiB"}
@@ -6,7 +6,7 @@ import { t as Label } from "./Label-VE3hoSbt.js";
6
6
  import { t as ErrorMessage } from "./ErrorMessage-6pG4hFId.js";
7
7
  import { t as Loader } from "./Loader-BTp8PCMz.js";
8
8
  import { r as ScrollDirection, t as ScrollPaginationContainer } from "./ScrollPaginationContainer-isAA4BsG.js";
9
- import { t as Input } from "./Input-F3bzYKoi.js";
9
+ import { t as Input } from "./Input-BLnysNxN.js";
10
10
  import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from "react";
11
11
  import { jsx, jsxs } from "react/jsx-runtime";
12
12
 
@@ -527,4 +527,4 @@ const Select = (props) => {
527
527
 
528
528
  //#endregion
529
529
  export { types_exports as n, Select as t };
530
- //# sourceMappingURL=Select-CaU6hbX4.js.map
530
+ //# sourceMappingURL=Select-ChVwX-7Z.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Select-CaU6hbX4.js","names":["value","Select: React.FC<SelectProps>","result: React.ReactNode[] | string"],"sources":["../src/utils/functions/normalizeString.ts","../src/components/commons/inputs/Select/components/OptionItem/styles.ts","../src/components/commons/inputs/Select/components/OptionItem/index.tsx","../src/hooks/useCompositeListNavigation/index.ts","../src/components/commons/inputs/Select/hooks/useSelect/index.ts","../src/components/commons/inputs/Select/styles.ts","../src/components/commons/inputs/Select/types.ts","../src/components/commons/inputs/Select/index.tsx"],"sourcesContent":["export function normalizeString(value: string) {\n if (!value || typeof value !== 'string') return ''\n\n return value\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toUpperCase()\n .trim()\n}\n","import type { OptionItemProps } from './types'\nimport { styled } from '@hooks/useThemedStyles/types'\n\nexport function createOptionsStyles(\n props: OptionItemProps & { ['data-active']?: string }\n) {\n const { isSelected } = props\n const isActive = props['data-active'] === 'true'\n const highlighted = isSelected || isActive\n\n return styled({\n container: {\n width: '100%',\n\n display: 'flex',\n alignItems: 'center',\n textAlign: 'left',\n\n borderRadius: '0.25rem',\n padding: '0.5rem 0.75rem',\n\n cursor: 'pointer',\n transition: 'background-color 0.2s ease-out',\n\n backgroundColor: highlighted\n ? 'var(--px-background-card-hover)'\n : 'transparent',\n\n __rules: {\n '&:hover': {\n backgroundColor: 'var(--px-background-card-hover) !important'\n },\n\n '&:focus': {\n outlineOffset: '-2px',\n outline: '2px solid var(--px-color-primary)'\n }\n }\n },\n\n text: {\n flex: 1,\n\n fontSize: '1rem',\n fontWeight: 500,\n lineHeight: '1.5rem',\n fontFamily: 'inherit',\n color: 'var(--px-text-primary)',\n\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n\n optionContent: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n columnGap: '0.25rem'\n }\n })\n}\n","/** biome-ignore-all lint/a11y/useSemanticElements: It's a custom select component */\nimport type React from 'react'\nimport { forwardRef } from 'react'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { OptionItemProps } from './types'\n\n// Styles\nimport { createOptionsStyles } from './styles'\n\ntype NativeButtonProps = Omit<\n React.ComponentPropsWithoutRef<'button'>,\n 'onClick'\n>\n\nexport const OptionItem = forwardRef<\n HTMLButtonElement,\n OptionItemProps & NativeButtonProps\n>((props, ref) => {\n const { styles, classes } = useThemedStyles(props, createOptionsStyles)\n\n const { option, isSelected, onClick, ...rest } = props\n\n return (\n <button\n {...rest}\n ref={ref}\n type=\"button\"\n role=\"option\"\n style={styles.container}\n className={classes.container}\n aria-label={option.label}\n aria-selected={isSelected}\n onClick={() => onClick(option.value)}\n >\n <div style={styles.optionContent}>\n {option.startIcon}\n <span style={styles.text}> {option.label}</span>\n </div>\n </button>\n )\n})\n\nOptionItem.displayName = 'OptionItem'\n","// External Libraries\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nexport type CompositeItemMeta = {\n disabled?: boolean\n hasChildren?: boolean\n onActivate?: () => void\n onOpenChildren?: () => void\n onCloseChildren?: () => void\n}\n\ntype Params = {\n open: boolean\n itemCount: number\n autoFocusFirstOption?: boolean\n initialIndex?: number\n onCloseByTab?: () => void\n setOpen: (v: boolean) => void\n makeMeta: (index: number) => CompositeItemMeta\n}\n\nfunction findNextEnabled(\n start: number,\n dir: 1 | -1,\n count: number,\n isDisabled: (i: number) => boolean\n) {\n if (count <= 0) return 0\n let i = start\n for (let step = 0; step < count; step++) {\n i = (i + dir + count) % count\n if (!isDisabled(i)) return i\n }\n return start\n}\n\nfunction findFirstEnabled(count: number, isDisabled: (i: number) => boolean) {\n for (let i = 0; i < count; i++) if (!isDisabled(i)) return i\n return 0\n}\n\nexport function useCompositeListNavigation({\n open,\n itemCount,\n autoFocusFirstOption = true,\n initialIndex,\n setOpen,\n makeMeta,\n onCloseByTab\n}: Params) {\n const listRef = useRef<HTMLElement | null>(null)\n const itemRefs = useRef<Array<HTMLButtonElement | null>>([])\n\n const isDisabled = useCallback(\n (i: number) => !!makeMeta(i).disabled,\n [makeMeta]\n )\n\n const [activeIndex, setActiveIndex] = useState(0)\n\n const focusItem = useCallback((i: number) => {\n const el = itemRefs.current[i]\n if (!el) return\n el.focus({ preventScroll: true })\n el.scrollIntoView({ block: 'nearest' })\n }, [])\n\n const openAndFocus = useCallback(\n (index?: number) => {\n setOpen(true)\n\n if (!autoFocusFirstOption) return\n\n const next =\n typeof index === 'number'\n ? index\n : typeof initialIndex === 'number'\n ? initialIndex\n : findFirstEnabled(itemCount, isDisabled)\n\n setActiveIndex(next)\n requestAnimationFrame(() => focusItem(next))\n },\n [\n autoFocusFirstOption,\n focusItem,\n initialIndex,\n isDisabled,\n itemCount,\n setOpen\n ]\n )\n\n useEffect(() => {\n if (!open || !autoFocusFirstOption) return\n requestAnimationFrame(() => focusItem(activeIndex))\n }, [open, activeIndex, autoFocusFirstOption, focusItem])\n\n const move = useCallback(\n (dir: 1 | -1) => {\n const next = findNextEnabled(activeIndex, dir, itemCount, isDisabled)\n setActiveIndex(next)\n requestAnimationFrame(() => focusItem(next))\n },\n [activeIndex, itemCount, isDisabled, focusItem]\n )\n\n const activate = useCallback(() => {\n const meta = makeMeta(activeIndex)\n if (meta.disabled) return\n meta.onActivate?.()\n }, [activeIndex, makeMeta])\n\n const onListKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (!open) return\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n move(+1)\n return\n\n case 'ArrowUp':\n e.preventDefault()\n move(-1)\n return\n\n case 'Escape':\n e.preventDefault()\n setOpen(false)\n onCloseByTab?.()\n return\n\n case 'Home': {\n e.preventDefault()\n const first = findFirstEnabled(itemCount, isDisabled)\n setActiveIndex(first)\n requestAnimationFrame(() => focusItem(first))\n return\n }\n\n case 'End': {\n e.preventDefault()\n let last = itemCount - 1\n for (let i = itemCount - 1; i >= 0; i--) {\n if (!isDisabled(i)) {\n last = i\n break\n }\n }\n setActiveIndex(last)\n requestAnimationFrame(() => focusItem(last))\n return\n }\n\n case 'Enter': {\n e.preventDefault()\n activate()\n return\n }\n\n case 'ArrowRight': {\n e.preventDefault()\n const meta = makeMeta(activeIndex)\n if (meta.hasChildren) meta.onOpenChildren?.()\n return\n }\n\n case 'ArrowLeft': {\n e.preventDefault()\n const meta = makeMeta(activeIndex)\n meta.onCloseChildren?.()\n return\n }\n }\n },\n [\n open,\n itemCount,\n activeIndex,\n move,\n activate,\n makeMeta,\n focusItem,\n isDisabled,\n onCloseByTab,\n setOpen\n ]\n )\n\n const getTriggerProps = useCallback(() => {\n return {\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n e.preventDefault()\n if (!open) openAndFocus()\n return\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n if (!open) openAndFocus(itemCount > 0 ? itemCount - 1 : 0)\n }\n }\n }\n }, [open, openAndFocus, itemCount])\n\n const getListProps = useCallback(() => {\n return {\n ref: (el: HTMLElement | null) => {\n listRef.current = el\n },\n onKeyDown: onListKeyDown\n }\n }, [onListKeyDown])\n\n const getItemProps = useCallback(\n (index: number) => {\n const isActive = index === activeIndex\n return {\n ref: (el: HTMLButtonElement | null) => {\n itemRefs.current[index] = el\n },\n tabIndex: isActive ? 0 : -1,\n 'data-active': isActive ? 'true' : 'false'\n } as const\n },\n [activeIndex]\n )\n\n return {\n activeIndex,\n getListProps,\n getItemProps,\n openAndFocus,\n setActiveIndex,\n getTriggerProps\n }\n}\n","// External Libraries\nimport { useEffect, useRef, useState } from 'react'\n\n// Hooks\nimport { useCompositeListNavigation } from '@hooks/useCompositeListNavigation'\n\n// Utils\nimport { normalizeString } from '@utils/functions'\n\n// Types\nimport type { SelectOption, SelectProps } from '../../types'\n\nexport function useSelect({\n value,\n options,\n multiple,\n disabled,\n canClear,\n withSearch,\n onChange,\n onSearchChange\n}: SelectProps) {\n // Refs\n const timeoutRef = useRef<NodeJS.Timeout>(null)\n\n // States\n const [open, setOpen] = useState(false)\n const [search, setSearch] = useState('')\n const [availableOptions, setAvailableOptions] = useState<SelectOption[]>([])\n\n // Hooks\n const nav = useCompositeListNavigation({\n open,\n itemCount: availableOptions.length,\n autoFocusFirstOption: !withSearch,\n makeMeta: makeMeta,\n setOpen: changeOpen\n })\n\n useEffect(() => {\n setAvailableOptions(options ?? [])\n }, [options])\n\n // Functions\n function handleOptionClick(option: string) {\n const isAlreadySelected = value.includes(option)\n\n if (!multiple) {\n if (isAlreadySelected) {\n if (canClear) onChange([])\n } else onChange([option])\n\n setOpen(false)\n return\n }\n\n if (isAlreadySelected) {\n if (value.length === 1) {\n if (canClear) onChange([])\n } else onChange(value.filter(v => v !== option))\n } else onChange([...value, option])\n }\n\n function makeMeta(index: number) {\n const opt = availableOptions[index]\n\n return {\n onActivate: () => {\n if (opt) handleOptionClick(opt.value)\n }\n }\n }\n\n function changeOpen(value: boolean) {\n setOpen(value)\n setSearch('')\n setAvailableOptions(options)\n }\n\n function togglePanel() {\n if (disabled) return\n if (!open) nav.openAndFocus()\n }\n\n function closePanel() {\n setOpen(false)\n }\n\n function handleSearchChange(value: string) {\n setSearch(value)\n if (onSearchChange) return onSearchChange(value)\n\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n\n if (!search) return setAvailableOptions(options)\n\n timeoutRef.current = setTimeout(() => {\n const normalizedSearch = normalizeString(value)\n const filteredOptions = options.filter(opt =>\n normalizeString(opt.label).includes(normalizedSearch)\n )\n\n setAvailableOptions(filteredOptions)\n }, 500)\n }\n\n return {\n nav,\n open,\n search,\n availableOptions,\n makeMeta,\n changeOpen,\n togglePanel,\n closePanel,\n handleOptionClick,\n handleSearchChange\n }\n}\n","import { styled } from '@hooks/useThemedStyles/types'\nimport type { SelectProps } from './types'\n\nexport function createSelectStyles(props: SelectProps) {\n return styled({\n container: {\n width: '100%',\n\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n\n rowGap: '0.375rem'\n },\n\n content: {\n width: '100%',\n height: '2.75rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n\n borderWidth: 1,\n columnGap: '0.25rem',\n borderRadius: '0.5rem',\n padding: '0.625rem 0.875rem',\n\n opacity: props.disabled || props.isLoading ? 0.5 : 1,\n cursor: props.isLoading\n ? 'progress'\n : props.disabled\n ? 'not-allowed'\n : 'pointer',\n boxShadow: 'var(--px-shadow-default)',\n borderColor: props.errorMessage\n ? 'var(--px-color-error)'\n : 'var(--px-border-primary)',\n\n __rules: {\n '&:focus-within': {\n outlineOffset: '-1px !important',\n outline: `2px solid var(${props.errorMessage ? '--px-color-error' : '--px-color-primary'}) !important`\n }\n }\n },\n\n text: {\n flex: 1,\n\n textAlign: 'left',\n\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n\n fontSize: '1rem',\n lineHeight: '1.5rem',\n fontFamily: 'inherit',\n fontWeight: props.value.length ? 500 : 400,\n color: props.value.length\n ? 'var(--px-text-primary)'\n : 'var(--px-text-secondary)'\n },\n\n panel: { width: '100%' },\n\n contentValueImage: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n columnGap: '0.25rem'\n },\n\n iconContainer: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n maxWidth: '1rem'\n }\n })\n}\n","import type {\n TextProps,\n LayoutProps,\n MarginProps,\n TypeStyles\n} from '@hooks/useThemedStyles/types'\nimport type { createSelectStyles } from './styles'\nimport type { FloatingOptions } from '@hooks/useFloating/types'\nimport type { PopoverProps } from '@components/commons/toolkit/Popover/types'\nimport type { Pagination } from '@components/commons/toolkit/ScrollPaginationContainer/types'\n\nexport interface SelectProps extends LayoutProps, MarginProps {\n label: string\n value: string[]\n placeholder?: string\n options: SelectOption[]\n isLoading?: boolean\n\n portalId?: PopoverProps['portalId']\n strategy?: FloatingOptions['strategy']\n placement?: FloatingOptions['placement']\n scrollContainerId?: FloatingOptions['scrollContainerId']\n absoluteReference?: FloatingOptions['absoluteReference']\n\n canClear?: boolean\n multiple?: boolean\n required?: boolean\n disabled?: boolean\n hideLabel?: boolean\n withSearch?: boolean\n autoFocusFirstOption?: boolean\n errorMessage?: string\n maxVisibleItems?: number\n maxHeightPopover?: string\n searchPlaceholder?: string\n\n pagination?: Pagination\n\n startIcon?: React.ReactNode\n styles?: TypeStyles<typeof createSelectStyles>\n\n requiredColor?: string\n labelConfig?: TextProps\n\n onChange: (value: string[]) => void\n onSearchChange?: (value: string) => void\n}\n\nexport interface SelectOption {\n label: string\n value: string\n startIcon?: React.ReactNode\n}\n","/** biome-ignore-all lint/a11y/useSemanticElements: It's a custom select component */\n// External Libraries\nimport type React from 'react'\nimport { useMemo } from 'react'\n\n// Components\nimport { Input } from '../Input'\nimport { OptionItem } from './components/OptionItem'\nimport { Icon } from '@components/commons/toolkit/Icon'\nimport { Label } from '@components/commons/toolkit/Label'\nimport { ErrorMessage } from '../../toolkit/ErrorMessage'\nimport { Loader } from '@components/commons/toolkit/Loader'\nimport { Typography } from '@components/commons/toolkit/Typography'\nimport { BasePopover } from '@components/commons/structure/BasePopover'\nimport { ScrollPaginationContainer } from '@components/commons/toolkit/ScrollPaginationContainer'\n\n// Hooks\nimport { useSelect } from './hooks/useSelect'\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { SelectProps } from './types'\nimport type { PopoverTriggerRenderProps } from '@components/commons/toolkit/Popover/types'\nimport { ScrollDirection } from '@components/commons/toolkit/ScrollPaginationContainer/types'\n\n// Styles\nimport { createSelectStyles } from './styles'\n\nexport * as SelectTypes from './types'\n\nexport const Select: React.FC<SelectProps> = props => {\n const {\n nav,\n open,\n search,\n availableOptions,\n changeOpen,\n handleOptionClick,\n handleSearchChange\n } = useSelect(props)\n const { styles, classes } = useThemedStyles(props, createSelectStyles, {\n pick: p => [p.disabled, p.errorMessage, p.value, p.isLoading],\n override: props.styles,\n applyCommonProps: true,\n commonSlot: 'container'\n })\n\n const maxVisible = props.maxVisibleItems ?? Infinity\n const optionsMap = useMemo(\n () =>\n new Map(\n props.options.map(option => [\n option.value,\n { label: option.label, startIcon: option.startIcon }\n ])\n ),\n [props.options]\n )\n\n // Functions\n function renderContent() {\n if (!props.value?.length) return props.placeholder\n\n const resolvedValues = props.value.map(\n val => optionsMap.get(val) ?? { label: val, startIcon: null }\n )\n const visibleItems = resolvedValues.slice(0, maxVisible)\n const hiddenCount = resolvedValues.length - visibleItems.length\n\n let result: React.ReactNode[] | string = []\n\n if (props.multiple) {\n result = visibleItems.map(i => i.label).join(', ')\n } else {\n result = visibleItems.map(i => (\n <span key={i.label} style={styles.contentValueImage}>\n {i.startIcon ? i.startIcon : null}\n <span style={styles.text}>{i.label}</span>\n </span>\n ))\n }\n\n if (typeof result === 'object' && hiddenCount > 0)\n result.push(<span key=\"hidden-count\">{hiddenCount}</span>)\n\n if (typeof result === 'string' && hiddenCount > 0)\n result = `${result} ${hiddenCount}`\n\n return result\n }\n\n function renderTrigger({\n ref,\n ariaExpanded,\n onClick\n }: PopoverTriggerRenderProps) {\n const triggerKeyProps = nav.getTriggerProps()\n\n return (\n <button\n ref={ref as React.RefObject<HTMLButtonElement>}\n dir=\"ltr\"\n type=\"button\"\n role=\"combobox\"\n style={styles.content}\n aria-autocomplete=\"none\"\n aria-label={props.label}\n className={classes.content}\n aria-expanded={ariaExpanded}\n disabled={props.disabled || props.isLoading}\n {...triggerKeyProps}\n onClick={onClick}\n >\n {props.value.length ? props.startIcon : null}\n\n <span id=\"text-content\" style={styles.text}>\n {renderContent()}\n </span>\n\n {props.isLoading ? (\n <Loader size=\"1rem\" color=\"var(--px-color-primary)\" />\n ) : (\n <div style={styles.iconContainer}>\n <Icon size=\"sm\" name=\"chevrons-down\" />\n </div>\n )}\n </button>\n )\n }\n\n function renderOptions() {\n if (availableOptions.length === 0) {\n return (\n <Typography variant=\"b2\" textAlign=\"center\">\n No options\n </Typography>\n )\n }\n\n return availableOptions.map((option, idx) => (\n <OptionItem\n key={option.value}\n option={option}\n onClick={handleOptionClick}\n isSelected={props.value.includes(option.value)}\n {...nav.getItemProps(idx)}\n />\n ))\n }\n\n return (\n <div style={styles.container}>\n {props.hideLabel ? null : (\n <Label\n label={props.label}\n required={props.required}\n requiredColor={props.requiredColor}\n {...props.labelConfig}\n />\n )}\n\n <BasePopover\n open={open}\n portalId={props.portalId}\n absoluteReference={props.absoluteReference}\n maxHeight={props.maxHeightPopover}\n floatingOptions={{\n viewportMargin: 0,\n strategy: props.strategy,\n placement: props.placement,\n scrollContainerId: props.scrollContainerId\n }}\n trigger={renderTrigger}\n onOpenChange={changeOpen}\n >\n <ScrollPaginationContainer\n fillFlex\n direction={ScrollDirection.Vertical}\n verticalPagination={props.pagination}\n >\n <div style={styles.panel} role=\"listbox\" {...nav.getListProps()}>\n {props.withSearch ? (\n <Input\n hideLabel\n autoFocus\n mb=\"0.5rem\"\n value={search}\n label=\"Search\"\n placeholder={props.searchPlaceholder ?? 'Pesquisar...'}\n onChange={handleSearchChange}\n />\n ) : null}\n\n {renderOptions()}\n </div>\n </ScrollPaginationContainer>\n </BasePopover>\n\n {props.errorMessage ? (\n <ErrorMessage message={props.errorMessage} />\n ) : null}\n </div>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Select-ChVwX-7Z.js","names":["value","Select: React.FC<SelectProps>","result: React.ReactNode[] | string"],"sources":["../src/utils/functions/normalizeString.ts","../src/components/commons/inputs/Select/components/OptionItem/styles.ts","../src/components/commons/inputs/Select/components/OptionItem/index.tsx","../src/hooks/useCompositeListNavigation/index.ts","../src/components/commons/inputs/Select/hooks/useSelect/index.ts","../src/components/commons/inputs/Select/styles.ts","../src/components/commons/inputs/Select/types.ts","../src/components/commons/inputs/Select/index.tsx"],"sourcesContent":["export function normalizeString(value: string) {\n if (!value || typeof value !== 'string') return ''\n\n return value\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toUpperCase()\n .trim()\n}\n","import type { OptionItemProps } from './types'\nimport { styled } from '@hooks/useThemedStyles/types'\n\nexport function createOptionsStyles(\n props: OptionItemProps & { ['data-active']?: string }\n) {\n const { isSelected } = props\n const isActive = props['data-active'] === 'true'\n const highlighted = isSelected || isActive\n\n return styled({\n container: {\n width: '100%',\n\n display: 'flex',\n alignItems: 'center',\n textAlign: 'left',\n\n borderRadius: '0.25rem',\n padding: '0.5rem 0.75rem',\n\n cursor: 'pointer',\n transition: 'background-color 0.2s ease-out',\n\n backgroundColor: highlighted\n ? 'var(--px-background-card-hover)'\n : 'transparent',\n\n __rules: {\n '&:hover': {\n backgroundColor: 'var(--px-background-card-hover) !important'\n },\n\n '&:focus': {\n outlineOffset: '-2px',\n outline: '2px solid var(--px-color-primary)'\n }\n }\n },\n\n text: {\n flex: 1,\n\n fontSize: '1rem',\n fontWeight: 500,\n lineHeight: '1.5rem',\n fontFamily: 'inherit',\n color: 'var(--px-text-primary)',\n\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis'\n },\n\n optionContent: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n columnGap: '0.25rem'\n }\n })\n}\n","/** biome-ignore-all lint/a11y/useSemanticElements: It's a custom select component */\nimport type React from 'react'\nimport { forwardRef } from 'react'\n\n// Hooks\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { OptionItemProps } from './types'\n\n// Styles\nimport { createOptionsStyles } from './styles'\n\ntype NativeButtonProps = Omit<\n React.ComponentPropsWithoutRef<'button'>,\n 'onClick'\n>\n\nexport const OptionItem = forwardRef<\n HTMLButtonElement,\n OptionItemProps & NativeButtonProps\n>((props, ref) => {\n const { styles, classes } = useThemedStyles(props, createOptionsStyles)\n\n const { option, isSelected, onClick, ...rest } = props\n\n return (\n <button\n {...rest}\n ref={ref}\n type=\"button\"\n role=\"option\"\n style={styles.container}\n className={classes.container}\n aria-label={option.label}\n aria-selected={isSelected}\n onClick={() => onClick(option.value)}\n >\n <div style={styles.optionContent}>\n {option.startIcon}\n <span style={styles.text}> {option.label}</span>\n </div>\n </button>\n )\n})\n\nOptionItem.displayName = 'OptionItem'\n","// External Libraries\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nexport type CompositeItemMeta = {\n disabled?: boolean\n hasChildren?: boolean\n onActivate?: () => void\n onOpenChildren?: () => void\n onCloseChildren?: () => void\n}\n\ntype Params = {\n open: boolean\n itemCount: number\n autoFocusFirstOption?: boolean\n initialIndex?: number\n onCloseByTab?: () => void\n setOpen: (v: boolean) => void\n makeMeta: (index: number) => CompositeItemMeta\n}\n\nfunction findNextEnabled(\n start: number,\n dir: 1 | -1,\n count: number,\n isDisabled: (i: number) => boolean\n) {\n if (count <= 0) return 0\n let i = start\n for (let step = 0; step < count; step++) {\n i = (i + dir + count) % count\n if (!isDisabled(i)) return i\n }\n return start\n}\n\nfunction findFirstEnabled(count: number, isDisabled: (i: number) => boolean) {\n for (let i = 0; i < count; i++) if (!isDisabled(i)) return i\n return 0\n}\n\nexport function useCompositeListNavigation({\n open,\n itemCount,\n autoFocusFirstOption = true,\n initialIndex,\n setOpen,\n makeMeta,\n onCloseByTab\n}: Params) {\n const listRef = useRef<HTMLElement | null>(null)\n const itemRefs = useRef<Array<HTMLButtonElement | null>>([])\n\n const isDisabled = useCallback(\n (i: number) => !!makeMeta(i).disabled,\n [makeMeta]\n )\n\n const [activeIndex, setActiveIndex] = useState(0)\n\n const focusItem = useCallback((i: number) => {\n const el = itemRefs.current[i]\n if (!el) return\n el.focus({ preventScroll: true })\n el.scrollIntoView({ block: 'nearest' })\n }, [])\n\n const openAndFocus = useCallback(\n (index?: number) => {\n setOpen(true)\n\n if (!autoFocusFirstOption) return\n\n const next =\n typeof index === 'number'\n ? index\n : typeof initialIndex === 'number'\n ? initialIndex\n : findFirstEnabled(itemCount, isDisabled)\n\n setActiveIndex(next)\n requestAnimationFrame(() => focusItem(next))\n },\n [\n autoFocusFirstOption,\n focusItem,\n initialIndex,\n isDisabled,\n itemCount,\n setOpen\n ]\n )\n\n useEffect(() => {\n if (!open || !autoFocusFirstOption) return\n requestAnimationFrame(() => focusItem(activeIndex))\n }, [open, activeIndex, autoFocusFirstOption, focusItem])\n\n const move = useCallback(\n (dir: 1 | -1) => {\n const next = findNextEnabled(activeIndex, dir, itemCount, isDisabled)\n setActiveIndex(next)\n requestAnimationFrame(() => focusItem(next))\n },\n [activeIndex, itemCount, isDisabled, focusItem]\n )\n\n const activate = useCallback(() => {\n const meta = makeMeta(activeIndex)\n if (meta.disabled) return\n meta.onActivate?.()\n }, [activeIndex, makeMeta])\n\n const onListKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (!open) return\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n move(+1)\n return\n\n case 'ArrowUp':\n e.preventDefault()\n move(-1)\n return\n\n case 'Escape':\n e.preventDefault()\n setOpen(false)\n onCloseByTab?.()\n return\n\n case 'Home': {\n e.preventDefault()\n const first = findFirstEnabled(itemCount, isDisabled)\n setActiveIndex(first)\n requestAnimationFrame(() => focusItem(first))\n return\n }\n\n case 'End': {\n e.preventDefault()\n let last = itemCount - 1\n for (let i = itemCount - 1; i >= 0; i--) {\n if (!isDisabled(i)) {\n last = i\n break\n }\n }\n setActiveIndex(last)\n requestAnimationFrame(() => focusItem(last))\n return\n }\n\n case 'Enter': {\n e.preventDefault()\n activate()\n return\n }\n\n case 'ArrowRight': {\n e.preventDefault()\n const meta = makeMeta(activeIndex)\n if (meta.hasChildren) meta.onOpenChildren?.()\n return\n }\n\n case 'ArrowLeft': {\n e.preventDefault()\n const meta = makeMeta(activeIndex)\n meta.onCloseChildren?.()\n return\n }\n }\n },\n [\n open,\n itemCount,\n activeIndex,\n move,\n activate,\n makeMeta,\n focusItem,\n isDisabled,\n onCloseByTab,\n setOpen\n ]\n )\n\n const getTriggerProps = useCallback(() => {\n return {\n onKeyDown: (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {\n e.preventDefault()\n if (!open) openAndFocus()\n return\n }\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n if (!open) openAndFocus(itemCount > 0 ? itemCount - 1 : 0)\n }\n }\n }\n }, [open, openAndFocus, itemCount])\n\n const getListProps = useCallback(() => {\n return {\n ref: (el: HTMLElement | null) => {\n listRef.current = el\n },\n onKeyDown: onListKeyDown\n }\n }, [onListKeyDown])\n\n const getItemProps = useCallback(\n (index: number) => {\n const isActive = index === activeIndex\n return {\n ref: (el: HTMLButtonElement | null) => {\n itemRefs.current[index] = el\n },\n tabIndex: isActive ? 0 : -1,\n 'data-active': isActive ? 'true' : 'false'\n } as const\n },\n [activeIndex]\n )\n\n return {\n activeIndex,\n getListProps,\n getItemProps,\n openAndFocus,\n setActiveIndex,\n getTriggerProps\n }\n}\n","// External Libraries\nimport { useEffect, useRef, useState } from 'react'\n\n// Hooks\nimport { useCompositeListNavigation } from '@hooks/useCompositeListNavigation'\n\n// Utils\nimport { normalizeString } from '@utils/functions'\n\n// Types\nimport type { SelectOption, SelectProps } from '../../types'\n\nexport function useSelect({\n value,\n options,\n multiple,\n disabled,\n canClear,\n withSearch,\n onChange,\n onSearchChange\n}: SelectProps) {\n // Refs\n const timeoutRef = useRef<NodeJS.Timeout>(null)\n\n // States\n const [open, setOpen] = useState(false)\n const [search, setSearch] = useState('')\n const [availableOptions, setAvailableOptions] = useState<SelectOption[]>([])\n\n // Hooks\n const nav = useCompositeListNavigation({\n open,\n itemCount: availableOptions.length,\n autoFocusFirstOption: !withSearch,\n makeMeta: makeMeta,\n setOpen: changeOpen\n })\n\n useEffect(() => {\n setAvailableOptions(options ?? [])\n }, [options])\n\n // Functions\n function handleOptionClick(option: string) {\n const isAlreadySelected = value.includes(option)\n\n if (!multiple) {\n if (isAlreadySelected) {\n if (canClear) onChange([])\n } else onChange([option])\n\n setOpen(false)\n return\n }\n\n if (isAlreadySelected) {\n if (value.length === 1) {\n if (canClear) onChange([])\n } else onChange(value.filter(v => v !== option))\n } else onChange([...value, option])\n }\n\n function makeMeta(index: number) {\n const opt = availableOptions[index]\n\n return {\n onActivate: () => {\n if (opt) handleOptionClick(opt.value)\n }\n }\n }\n\n function changeOpen(value: boolean) {\n setOpen(value)\n setSearch('')\n setAvailableOptions(options)\n }\n\n function togglePanel() {\n if (disabled) return\n if (!open) nav.openAndFocus()\n }\n\n function closePanel() {\n setOpen(false)\n }\n\n function handleSearchChange(value: string) {\n setSearch(value)\n if (onSearchChange) return onSearchChange(value)\n\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n\n if (!search) return setAvailableOptions(options)\n\n timeoutRef.current = setTimeout(() => {\n const normalizedSearch = normalizeString(value)\n const filteredOptions = options.filter(opt =>\n normalizeString(opt.label).includes(normalizedSearch)\n )\n\n setAvailableOptions(filteredOptions)\n }, 500)\n }\n\n return {\n nav,\n open,\n search,\n availableOptions,\n makeMeta,\n changeOpen,\n togglePanel,\n closePanel,\n handleOptionClick,\n handleSearchChange\n }\n}\n","import { styled } from '@hooks/useThemedStyles/types'\nimport type { SelectProps } from './types'\n\nexport function createSelectStyles(props: SelectProps) {\n return styled({\n container: {\n width: '100%',\n\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n\n rowGap: '0.375rem'\n },\n\n content: {\n width: '100%',\n height: '2.75rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n\n borderWidth: 1,\n columnGap: '0.25rem',\n borderRadius: '0.5rem',\n padding: '0.625rem 0.875rem',\n\n opacity: props.disabled || props.isLoading ? 0.5 : 1,\n cursor: props.isLoading\n ? 'progress'\n : props.disabled\n ? 'not-allowed'\n : 'pointer',\n boxShadow: 'var(--px-shadow-default)',\n borderColor: props.errorMessage\n ? 'var(--px-color-error)'\n : 'var(--px-border-primary)',\n\n __rules: {\n '&:focus-within': {\n outlineOffset: '-1px !important',\n outline: `2px solid var(${props.errorMessage ? '--px-color-error' : '--px-color-primary'}) !important`\n }\n }\n },\n\n text: {\n flex: 1,\n\n textAlign: 'left',\n\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n\n fontSize: '1rem',\n lineHeight: '1.5rem',\n fontFamily: 'inherit',\n fontWeight: props.value.length ? 500 : 400,\n color: props.value.length\n ? 'var(--px-text-primary)'\n : 'var(--px-text-secondary)'\n },\n\n panel: { width: '100%' },\n\n contentValueImage: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n columnGap: '0.25rem'\n },\n\n iconContainer: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n maxWidth: '1rem'\n }\n })\n}\n","import type {\n TextProps,\n LayoutProps,\n MarginProps,\n TypeStyles\n} from '@hooks/useThemedStyles/types'\nimport type { createSelectStyles } from './styles'\nimport type { FloatingOptions } from '@hooks/useFloating/types'\nimport type { PopoverProps } from '@components/commons/toolkit/Popover/types'\nimport type { Pagination } from '@components/commons/toolkit/ScrollPaginationContainer/types'\n\nexport interface SelectProps extends LayoutProps, MarginProps {\n label: string\n value: string[]\n placeholder?: string\n options: SelectOption[]\n isLoading?: boolean\n\n portalId?: PopoverProps['portalId']\n strategy?: FloatingOptions['strategy']\n placement?: FloatingOptions['placement']\n scrollContainerId?: FloatingOptions['scrollContainerId']\n absoluteReference?: FloatingOptions['absoluteReference']\n\n canClear?: boolean\n multiple?: boolean\n required?: boolean\n disabled?: boolean\n hideLabel?: boolean\n withSearch?: boolean\n autoFocusFirstOption?: boolean\n errorMessage?: string\n maxVisibleItems?: number\n maxHeightPopover?: string\n searchPlaceholder?: string\n\n pagination?: Pagination\n\n startIcon?: React.ReactNode\n styles?: TypeStyles<typeof createSelectStyles>\n\n requiredColor?: string\n labelConfig?: TextProps\n\n onChange: (value: string[]) => void\n onSearchChange?: (value: string) => void\n}\n\nexport interface SelectOption {\n label: string\n value: string\n startIcon?: React.ReactNode\n}\n","/** biome-ignore-all lint/a11y/useSemanticElements: It's a custom select component */\n// External Libraries\nimport type React from 'react'\nimport { useMemo } from 'react'\n\n// Components\nimport { Input } from '../Input'\nimport { OptionItem } from './components/OptionItem'\nimport { Icon } from '@components/commons/toolkit/Icon'\nimport { Label } from '@components/commons/toolkit/Label'\nimport { ErrorMessage } from '../../toolkit/ErrorMessage'\nimport { Loader } from '@components/commons/toolkit/Loader'\nimport { Typography } from '@components/commons/toolkit/Typography'\nimport { BasePopover } from '@components/commons/structure/BasePopover'\nimport { ScrollPaginationContainer } from '@components/commons/toolkit/ScrollPaginationContainer'\n\n// Hooks\nimport { useSelect } from './hooks/useSelect'\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Types\nimport type { SelectProps } from './types'\nimport type { PopoverTriggerRenderProps } from '@components/commons/toolkit/Popover/types'\nimport { ScrollDirection } from '@components/commons/toolkit/ScrollPaginationContainer/types'\n\n// Styles\nimport { createSelectStyles } from './styles'\n\nexport * as SelectTypes from './types'\n\nexport const Select: React.FC<SelectProps> = props => {\n const {\n nav,\n open,\n search,\n availableOptions,\n changeOpen,\n handleOptionClick,\n handleSearchChange\n } = useSelect(props)\n const { styles, classes } = useThemedStyles(props, createSelectStyles, {\n pick: p => [p.disabled, p.errorMessage, p.value, p.isLoading],\n override: props.styles,\n applyCommonProps: true,\n commonSlot: 'container'\n })\n\n const maxVisible = props.maxVisibleItems ?? Infinity\n const optionsMap = useMemo(\n () =>\n new Map(\n props.options.map(option => [\n option.value,\n { label: option.label, startIcon: option.startIcon }\n ])\n ),\n [props.options]\n )\n\n // Functions\n function renderContent() {\n if (!props.value?.length) return props.placeholder\n\n const resolvedValues = props.value.map(\n val => optionsMap.get(val) ?? { label: val, startIcon: null }\n )\n const visibleItems = resolvedValues.slice(0, maxVisible)\n const hiddenCount = resolvedValues.length - visibleItems.length\n\n let result: React.ReactNode[] | string = []\n\n if (props.multiple) {\n result = visibleItems.map(i => i.label).join(', ')\n } else {\n result = visibleItems.map(i => (\n <span key={i.label} style={styles.contentValueImage}>\n {i.startIcon ? i.startIcon : null}\n <span style={styles.text}>{i.label}</span>\n </span>\n ))\n }\n\n if (typeof result === 'object' && hiddenCount > 0)\n result.push(<span key=\"hidden-count\">{hiddenCount}</span>)\n\n if (typeof result === 'string' && hiddenCount > 0)\n result = `${result} ${hiddenCount}`\n\n return result\n }\n\n function renderTrigger({\n ref,\n ariaExpanded,\n onClick\n }: PopoverTriggerRenderProps) {\n const triggerKeyProps = nav.getTriggerProps()\n\n return (\n <button\n ref={ref as React.RefObject<HTMLButtonElement>}\n dir=\"ltr\"\n type=\"button\"\n role=\"combobox\"\n style={styles.content}\n aria-autocomplete=\"none\"\n aria-label={props.label}\n className={classes.content}\n aria-expanded={ariaExpanded}\n disabled={props.disabled || props.isLoading}\n {...triggerKeyProps}\n onClick={onClick}\n >\n {props.value.length ? props.startIcon : null}\n\n <span id=\"text-content\" style={styles.text}>\n {renderContent()}\n </span>\n\n {props.isLoading ? (\n <Loader size=\"1rem\" color=\"var(--px-color-primary)\" />\n ) : (\n <div style={styles.iconContainer}>\n <Icon size=\"sm\" name=\"chevrons-down\" />\n </div>\n )}\n </button>\n )\n }\n\n function renderOptions() {\n if (availableOptions.length === 0) {\n return (\n <Typography variant=\"b2\" textAlign=\"center\">\n No options\n </Typography>\n )\n }\n\n return availableOptions.map((option, idx) => (\n <OptionItem\n key={option.value}\n option={option}\n onClick={handleOptionClick}\n isSelected={props.value.includes(option.value)}\n {...nav.getItemProps(idx)}\n />\n ))\n }\n\n return (\n <div style={styles.container}>\n {props.hideLabel ? null : (\n <Label\n label={props.label}\n required={props.required}\n requiredColor={props.requiredColor}\n {...props.labelConfig}\n />\n )}\n\n <BasePopover\n open={open}\n portalId={props.portalId}\n absoluteReference={props.absoluteReference}\n maxHeight={props.maxHeightPopover}\n floatingOptions={{\n viewportMargin: 0,\n strategy: props.strategy,\n placement: props.placement,\n scrollContainerId: props.scrollContainerId\n }}\n trigger={renderTrigger}\n onOpenChange={changeOpen}\n >\n <ScrollPaginationContainer\n fillFlex\n direction={ScrollDirection.Vertical}\n verticalPagination={props.pagination}\n >\n <div style={styles.panel} role=\"listbox\" {...nav.getListProps()}>\n {props.withSearch ? (\n <Input\n hideLabel\n autoFocus\n mb=\"0.5rem\"\n value={search}\n label=\"Search\"\n placeholder={props.searchPlaceholder ?? 'Pesquisar...'}\n onChange={handleSearchChange}\n />\n ) : null}\n\n {renderOptions()}\n </div>\n </ScrollPaginationContainer>\n </BasePopover>\n\n {props.errorMessage ? (\n <ErrorMessage message={props.errorMessage} />\n ) : null}\n </div>\n )\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { n as types_d_exports, t as ContextMenu } from "./index-R4SFv1ug.js";
1
+ import { n as types_d_exports, t as ContextMenu } from "./index-Bo6Mz8jJ.js";
2
2
  export { ContextMenu, types_d_exports as ContextMenuTypes };
@@ -4,12 +4,12 @@ import "./useDismiss-Dpzg5Xpf.js";
4
4
  import "./useFloating-D-2IDIWG.js";
5
5
  import "./Popover-BV_1hBez.js";
6
6
  import "./Icon-bV19y393.js";
7
- import { n as types_exports, t as DatePicker } from "./DatePicker-B9UoHcYW.js";
7
+ import { n as types_exports, t as DatePicker } from "./DatePicker-FL9pUwup.js";
8
8
  import "./BasePopover-CY-9StFD.js";
9
9
  import "./Label-VE3hoSbt.js";
10
10
  import "./ErrorMessage-6pG4hFId.js";
11
11
  import "./Loader-BTp8PCMz.js";
12
12
  import "./Button-o_4n7GFO.js";
13
- import "./MaskModule-CkD4Tlae.js";
13
+ import "./MaskModule-DZko7F_e.js";
14
14
 
15
15
  export { DatePicker, types_exports as DatePickerTypes };
@@ -1,7 +1,7 @@
1
1
  import { r as TypeStyles } from "./useThemedStyles-DoHwc6h5.js";
2
2
  import { n as Placement } from "./types-CsM6b8c5.js";
3
3
  import { ReactNode } from "react";
4
- import * as react_jsx_runtime1 from "react/jsx-runtime";
4
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
5
5
 
6
6
  //#region src/components/commons/toolkit/ContextMenu/styles.d.ts
7
7
  declare function createContextMenuStyles<T>(_props: ContextMenuProps<T>): {
@@ -68,7 +68,7 @@ interface ContextMenuProps<T> {
68
68
  }
69
69
  //#endregion
70
70
  //#region src/components/commons/toolkit/ContextMenu/index.d.ts
71
- declare const ContextMenu: <T extends string>(props: ContextMenuProps<T>) => react_jsx_runtime1.JSX.Element;
71
+ declare const ContextMenu: <T extends string>(props: ContextMenuProps<T>) => react_jsx_runtime0.JSX.Element;
72
72
  //#endregion
73
73
  export { types_d_exports as n, ContextMenu as t };
74
- //# sourceMappingURL=index-R4SFv1ug.d.ts.map
74
+ //# sourceMappingURL=index-Bo6Mz8jJ.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import { a as TextProps } from "./styleProps-Bq2PkDym.js";
2
2
  import { r as TypeStyles } from "./useThemedStyles-DoHwc6h5.js";
3
- import * as react_jsx_runtime0 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime1 from "react/jsx-runtime";
4
4
 
5
5
  //#region src/components/commons/inputs/TextArea/styles.d.ts
6
6
  declare function createTextAreaStyles(props: TextAreaProps): {
@@ -27,7 +27,7 @@ declare function createTextAreaStyles(props: TextAreaProps): {
27
27
  fontWeight: "400";
28
28
  fontSize: string;
29
29
  color: "var(--px-text-primary)";
30
- borderColor: "var(--px-border-primary)" | "var(--px-color-error)";
30
+ borderColor: "var(--px-color-error)" | "var(--px-border-primary)";
31
31
  outlineOffset: string;
32
32
  cursor: "default" | undefined;
33
33
  __rules: {
@@ -67,7 +67,7 @@ interface TextAreaProps {
67
67
  }
68
68
  //#endregion
69
69
  //#region src/components/commons/inputs/TextArea/index.d.ts
70
- declare const TextArea: (props: TextAreaProps) => react_jsx_runtime0.JSX.Element;
70
+ declare const TextArea: (props: TextAreaProps) => react_jsx_runtime1.JSX.Element;
71
71
  //#endregion
72
72
  export { TextArea as t };
73
- //# sourceMappingURL=index-Ll44Zh-u.d.ts.map
73
+ //# sourceMappingURL=index-D6on4J-S.d.ts.map
@@ -27,7 +27,7 @@ declare function createSelectStyles(props: SelectProps): {
27
27
  opacity: number;
28
28
  cursor: "not-allowed" | "pointer" | "progress";
29
29
  boxShadow: "var(--px-shadow-default)";
30
- borderColor: "var(--px-border-primary)" | "var(--px-color-error)";
30
+ borderColor: "var(--px-color-error)" | "var(--px-border-primary)";
31
31
  __rules: {
32
32
  '&:focus-within': {
33
33
  outlineOffset: string;
@@ -106,4 +106,4 @@ interface SelectOption {
106
106
  declare const Select: React$1.FC<SelectProps>;
107
107
  //#endregion
108
108
  export { types_d_exports as n, Select as t };
109
- //# sourceMappingURL=index-BmFKokpv.d.ts.map
109
+ //# sourceMappingURL=index-j6W-PwB7.d.ts.map
@@ -22,7 +22,7 @@ declare function createInputStyles(props: InputProps): {
22
22
  padding: string;
23
23
  opacity: number;
24
24
  boxShadow: "var(--px-shadow-default)";
25
- borderColor: "var(--px-border-primary)" | "var(--px-color-error)";
25
+ borderColor: "var(--px-color-error)" | "var(--px-border-primary)";
26
26
  __rules: {
27
27
  '&:focus-within': {
28
28
  outlineOffset: string;
@@ -66,7 +66,8 @@ declare function createInputStyles(props: InputProps): {
66
66
  };
67
67
  //#endregion
68
68
  //#region src/components/commons/inputs/Input/types.d.ts
69
- interface InputProps extends LayoutProps, MarginProps {
69
+ type InputProps = InputBaseProps | FloatProps;
70
+ interface InputBaseProps extends LayoutProps, MarginProps {
70
71
  id?: string;
71
72
  max?: number;
72
73
  min?: number;
@@ -94,6 +95,10 @@ interface InputProps extends LayoutProps, MarginProps {
94
95
  labelConfig?: TextProps;
95
96
  onChange: (value: string) => void;
96
97
  }
98
+ interface FloatProps extends Omit<InputBaseProps, 'mask'> {
99
+ mask?: 'FLOAT';
100
+ decimalPlaces?: number;
101
+ }
97
102
  interface InputMethods {
98
103
  focus: () => void;
99
104
  blur: () => void;
@@ -103,4 +108,4 @@ interface InputMethods {
103
108
  declare const Input: react0.ForwardRefExoticComponent<InputProps & react0.RefAttributes<InputMethods>>;
104
109
  //#endregion
105
110
  export { Input as t };
106
- //# sourceMappingURL=index-DFfPk9_X.d.ts.map
111
+ //# sourceMappingURL=index-qPJuO65u.d.ts.map
package/dist/index.d.ts CHANGED
@@ -6,11 +6,11 @@ import { n as types_d_exports$5 } from "./types-vfa_y8KH.js";
6
6
  import { n as types_d_exports$3, t as DatePicker } from "./index-BaTeJXMP.js";
7
7
  import { n as types_d_exports$4, t as FileInput } from "./index-DDF3jbpO.js";
8
8
  import { n as Locale, r as MaskType, t as MaskModule } from "./index-CSRzYxDc.js";
9
- import { t as Input } from "./index-DFfPk9_X.js";
9
+ import { t as Input } from "./index-qPJuO65u.js";
10
10
  import { t as SearchInput } from "./index-MyZ_XVsH.js";
11
- import { n as types_d_exports$6, t as Select } from "./index-BmFKokpv.js";
11
+ import { n as types_d_exports$6, t as Select } from "./index-j6W-PwB7.js";
12
12
  import { t as index_d_exports } from "./index-CriBmhqv.js";
13
- import { t as TextArea } from "./index-Ll44Zh-u.js";
13
+ import { t as TextArea } from "./index-D6on4J-S.js";
14
14
  import { t as Popover } from "./index-tivXt3ba.js";
15
15
  import { t as BasePopover } from "./index-BKsKKh1p.js";
16
16
  import { t as Breadcrumb } from "./index-CBHEtmuG.js";
@@ -20,7 +20,7 @@ import { t as Checkbox } from "./index-DlP2AWaD.js";
20
20
  import { r as types_d_exports } from "./types-Db3dpdVw.js";
21
21
  import { Chip } from "./chip.js";
22
22
  import { t as ChipList } from "./index-CdGHX8AR.js";
23
- import { n as types_d_exports$2, t as ContextMenu } from "./index-R4SFv1ug.js";
23
+ import { n as types_d_exports$2, t as ContextMenu } from "./index-Bo6Mz8jJ.js";
24
24
  import { InfoSummary, InfoSummaryItem, InfoSummaryProps } from "./info-summary.js";
25
25
  import { t as Pagination } from "./index-D5kC89SC.js";
26
26
  import { ScrollPaginationContainer } from "./scroll-pagination-container.js";
package/dist/index.js CHANGED
@@ -6,9 +6,9 @@ import { t as useFloating } from "./useFloating-D-2IDIWG.js";
6
6
  import { n as types_exports$5, t as Popover } from "./Popover-BV_1hBez.js";
7
7
  import "./Icon-bV19y393.js";
8
8
  import { t as Checkbox } from "./Checkbox-qoUWy3Nj.js";
9
- import { n as types_exports$3, t as DatePicker } from "./DatePicker-B9UoHcYW.js";
9
+ import { n as types_exports$3, t as DatePicker } from "./DatePicker-FL9pUwup.js";
10
10
  import { n as useTheme, t as ThemeProvider } from "./ThemeContext-CRVo1wLa.js";
11
- import { n as types_exports$7, t as Select } from "./Select-CaU6hbX4.js";
11
+ import { n as types_exports$7, t as Select } from "./Select-ChVwX-7Z.js";
12
12
  import { n as types_exports$8, t as TabSwitch } from "./TabSwitch-Co6kaDbi.js";
13
13
  import { t as CheckItem } from "./CheckItem-C2NriXyN.js";
14
14
  import { t as InfoSummary } from "./InfoSummary-B6k4_vpG.js";
@@ -23,8 +23,8 @@ import { t as Pagination } from "./Pagination-D-eoDEIJ.js";
23
23
  import "./Loader-BTp8PCMz.js";
24
24
  import { t as Button } from "./Button-o_4n7GFO.js";
25
25
  import { n as types_exports$6, t as ScrollPaginationContainer } from "./ScrollPaginationContainer-isAA4BsG.js";
26
- import { a as Locale, o as MaskType, s as MaskModule } from "./MaskModule-CkD4Tlae.js";
27
- import { t as Input } from "./Input-F3bzYKoi.js";
26
+ import { c as MaskModule, o as Locale, s as MaskType } from "./MaskModule-DZko7F_e.js";
27
+ import { t as Input } from "./Input-BLnysNxN.js";
28
28
  import { t as TextArea } from "./TextArea-s6HdNSc5.js";
29
29
  import { t as SearchInput } from "./SearchInput-vI-WcTPT.js";
30
30
  import { n as types_exports$1, t as ColorPicker } from "./ColorPicker-sqs31Md7.js";
package/dist/input.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { t as Input } from "./index-DFfPk9_X.js";
1
+ import { t as Input } from "./index-qPJuO65u.js";
2
2
  export { Input };
package/dist/input.js CHANGED
@@ -3,7 +3,7 @@ import "./Typography-u0BPHgCr.js";
3
3
  import "./Icon-bV19y393.js";
4
4
  import "./Label-VE3hoSbt.js";
5
5
  import "./ErrorMessage-6pG4hFId.js";
6
- import "./MaskModule-CkD4Tlae.js";
7
- import { t as Input } from "./Input-F3bzYKoi.js";
6
+ import "./MaskModule-DZko7F_e.js";
7
+ import { t as Input } from "./Input-BLnysNxN.js";
8
8
 
9
9
  export { Input };
@@ -1,3 +1,3 @@
1
- import { a as Locale, o as MaskType, s as MaskModule } from "./MaskModule-CkD4Tlae.js";
1
+ import { c as MaskModule, o as Locale, s as MaskType } from "./MaskModule-DZko7F_e.js";
2
2
 
3
3
  export { Locale, MaskModule, MaskType };
package/dist/select.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import "./types-vfa_y8KH.js";
2
- import { n as types_d_exports, t as Select } from "./index-BmFKokpv.js";
2
+ import { n as types_d_exports, t as Select } from "./index-j6W-PwB7.js";
3
3
  import "./index-CriBmhqv.js";
4
4
  export { Select, types_d_exports as SelectTypes };
package/dist/select.js CHANGED
@@ -4,13 +4,13 @@ import "./useDismiss-Dpzg5Xpf.js";
4
4
  import "./useFloating-D-2IDIWG.js";
5
5
  import "./Popover-BV_1hBez.js";
6
6
  import "./Icon-bV19y393.js";
7
- import { n as types_exports, t as Select } from "./Select-CaU6hbX4.js";
7
+ import { n as types_exports, t as Select } from "./Select-ChVwX-7Z.js";
8
8
  import "./BasePopover-CY-9StFD.js";
9
9
  import "./Label-VE3hoSbt.js";
10
10
  import "./ErrorMessage-6pG4hFId.js";
11
11
  import "./Loader-BTp8PCMz.js";
12
12
  import "./ScrollPaginationContainer-isAA4BsG.js";
13
- import "./MaskModule-CkD4Tlae.js";
14
- import "./Input-F3bzYKoi.js";
13
+ import "./MaskModule-DZko7F_e.js";
14
+ import "./Input-BLnysNxN.js";
15
15
 
16
16
  export { Select, types_exports as SelectTypes };
@@ -1,2 +1,2 @@
1
- import { t as TextArea } from "./index-Ll44Zh-u.js";
1
+ import { t as TextArea } from "./index-D6on4J-S.js";
2
2
  export { TextArea };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "softable-pixels-web",
3
- "version": "1.2.34",
3
+ "version": "1.2.35",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "author": "softable",
@@ -1 +0,0 @@
1
- {"version":3,"file":"Input-F3bzYKoi.js","names":["value"],"sources":["../src/components/commons/inputs/Input/hooks/useInput/index.ts","../src/components/commons/inputs/Input/styles.ts","../src/components/commons/inputs/Input/index.tsx"],"sourcesContent":["// External Libraries\nimport { useState, useRef, useMemo, useEffect } from 'react'\n\n// Services\nimport { Locale, MaskModule, MaskType } from 'src/services/MaskModule'\n\n// Types\nimport type { InputProps } from '../../types'\nimport { IntegerMask } from '@services/MaskModule/locales/br/masks/IntegerMask'\n\nexport function useInput({\n max,\n mask,\n delay,\n value,\n min,\n onChange,\n ...rest\n}: InputProps) {\n // Refs\n const inputRef = useRef<HTMLInputElement>(null)\n const timeoutRef = useRef<NodeJS.Timeout>(null)\n\n // States\n const [inputValue, setInputValue] = useState(value)\n const [showPassword, setShowPassword] = useState(false)\n\n // Constants\n // biome-ignore lint/correctness/useExhaustiveDependencies: Not Needed\n const { minLength, maxLength } = useMemo(() => {\n const appliedMask = getMask()\n\n const minLength = rest.minLength ?? appliedMask?.minLength\n const maxLength = rest.maxLength ?? appliedMask?.maxLength\n\n return { minLength, maxLength }\n }, [mask, rest.minLength, rest.maxLength])\n\n // UseEffects\n useEffect(() => {\n setInputValue(value)\n }, [value])\n\n // Functions\n function getMask() {\n if (!mask) return undefined\n\n if (mask === MaskType.INTEGER) return new IntegerMask({ max, min })\n else return MaskModule.getMask(Locale.BR, mask)\n }\n\n function togglePasswordVisibility() {\n setShowPassword(prev => !prev)\n }\n\n function handleRefMethods() {\n return { focus: handleFocus, blur: handleBlur }\n }\n\n function handleFocus() {\n inputRef.current?.focus()\n }\n\n function handleBlur() {\n inputRef.current?.blur()\n }\n\n function handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n let value = e.target.value\n\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n\n if (mask) {\n const module = getMask()\n if (module) value = module.format(value)\n }\n\n if (!delay) onChange?.(value)\n else {\n timeoutRef.current = setTimeout(() => onChange?.(value), delay)\n }\n }\n\n return {\n inputRef,\n minLength,\n maxLength,\n inputValue,\n showPassword,\n handleChange,\n handleRefMethods,\n togglePasswordVisibility\n }\n}\n","// Hooks\nimport { styled } from '@hooks/useThemedStyles/types'\n\n// Types\nimport type { InputProps } from './types'\n\nexport function createInputStyles(props: InputProps) {\n return styled({\n container: {\n width: '100%',\n\n display: 'flex',\n flexDirection: 'column',\n\n rowGap: '0.375rem'\n },\n wrapper: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n\n borderWidth: 1,\n columnGap: '0.25rem',\n borderRadius: '0.5rem',\n padding: '0.625rem 0.875rem',\n\n opacity: props.disabled ? 0.5 : 1,\n boxShadow: 'var(--px-shadow-default)',\n borderColor: props.errorMessage\n ? 'var(--px-color-error)'\n : 'var(--px-border-primary)',\n\n __rules: {\n '&:focus-within': {\n outlineOffset: '-1px',\n outline: `2px solid var(${props.errorMessage ? '--px-color-error' : '--px-color-primary'})`\n }\n }\n },\n\n input: {\n flex: 1,\n\n fontWeight: 500,\n fontSize: '1rem',\n lineHeight: '1.5rem',\n fontFamily: 'inherit',\n color: 'var(--px-text-primary)',\n\n __rules: {\n '&:disabled': {\n cursor: 'not-allowed'\n },\n\n '&:focus': {\n outline: 'none'\n },\n\n '&::placeholder': {\n fontWeight: 400,\n color: 'var(--px-text-secondary)'\n }\n }\n },\n\n button: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n cursor: 'pointer',\n padding: '0.25rem',\n borderRadius: '0.5rem',\n\n __rules: {\n '&:focus': {\n outline: '1px solid var(--px-border-primary)'\n }\n }\n }\n })\n}\n","/** biome-ignore-all lint/a11y/noAutofocus: It's a custom input component */\n// External Libraries\nimport { forwardRef, useId, useImperativeHandle, useMemo } from 'react'\n\n// Components\nimport { Label } from '../../toolkit/Label'\nimport { Icon } from '@components/commons/toolkit/Icon'\nimport { ErrorMessage } from '../../toolkit/ErrorMessage'\n\n// Types\nimport type { InputProps, InputMethods } from './types'\n\n// Hooks\nimport { useInput } from './hooks/useInput'\nimport { useThemedStyles } from '@hooks/useThemedStyles'\n\n// Styles\nimport { createInputStyles } from './styles'\n\nexport const Input = forwardRef<InputMethods, InputProps>((props, ref) => {\n // Constants\n const reactId = useId()\n const inputId = useMemo(() => {\n return props.id || `input-${reactId}`\n }, [props.id, reactId])\n\n // Hooks\n const {\n inputRef,\n minLength,\n maxLength,\n inputValue,\n showPassword,\n handleChange,\n handleRefMethods,\n togglePasswordVisibility\n } = useInput(props)\n useImperativeHandle(ref, handleRefMethods)\n\n // Hooks\n const { styles, classes } = useThemedStyles(props, createInputStyles, {\n pick: p => [p.disabled, p.errorMessage],\n override: props.styles,\n applyCommonProps: true,\n commonSlot: 'container'\n })\n\n // Functions\n function getType() {\n if (props.type === 'password' && showPassword) return 'text'\n return props.type\n }\n\n function renderEndContent() {\n if (props.type === 'password') {\n return (\n <button\n type=\"button\"\n style={styles.button}\n className={classes.button}\n onClick={togglePasswordVisibility}\n >\n <Icon\n size=\"sm\"\n name={showPassword ? 'general-eye-off' : 'general-eye'}\n />\n </button>\n )\n }\n\n return props.endIcon ?? null\n }\n\n return (\n <div style={styles.container}>\n {props.hideLabel ? null : (\n <Label\n htmlFor={inputId}\n label={props.label}\n required={props.required}\n requiredColor={props.requiredColor}\n {...props.labelConfig}\n />\n )}\n\n <div style={styles.wrapper} className={classes.wrapper}>\n {props.startIcon}\n\n <input\n ref={inputRef}\n id={inputId}\n type={getType()}\n value={inputValue}\n style={styles.input}\n minLength={minLength}\n maxLength={maxLength}\n required={props.required}\n disabled={props.disabled}\n className={classes.input}\n autoFocus={props.autoFocus}\n spellCheck={props.spellCheck}\n autoCorrect={props.autoCorrect}\n placeholder={props.placeholder}\n autoComplete={props.autoComplete}\n autoCapitalize={props.autoCapitalize}\n aria-label={!props.hideLabel ? undefined : props.label}\n onChange={handleChange}\n />\n\n {renderEndContent()}\n </div>\n\n {props.errorMessage ? (\n <ErrorMessage message={props.errorMessage} />\n ) : null}\n </div>\n )\n})\n\nInput.displayName = 'Input'\n"],"mappings":"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"}