@banzamel/mineralui 0.1.0 → 0.2.1

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/theme/ThemeProvider.tsx","../src/utils/cn.ts","../src/components/Input/Input.tsx"],"sourcesContent":["import { createContext, useContext, useEffect, useRef, type ReactNode } from 'react';\nimport type { MineralTheme } from './types';\n\nconst ThemeContext = createContext<MineralTheme>({});\n\nconst themeToVarMap: Record<keyof MineralTheme, string> = {\n primary: '--mineral-primary',\n primaryDark: '--mineral-primary-dark',\n primaryLight: '--mineral-primary-light',\n dark: '--mineral-dark',\n darkLight: '--mineral-dark-light',\n surface: '--mineral-surface',\n text: '--mineral-text',\n textSecondary: '--mineral-text-secondary',\n textHeading: '--mineral-text-heading',\n border: '--mineral-border',\n borderHover: '--mineral-border-hover',\n borderFocus: '--mineral-border-focus',\n success: '--mineral-success',\n error: '--mineral-error',\n warning: '--mineral-warning',\n info: '--mineral-info',\n fontFamily: '--mineral-font-family',\n radiusSm: '--mineral-radius-sm',\n radiusMd: '--mineral-radius-md',\n radiusLg: '--mineral-radius-lg',\n};\n\ninterface MineralThemeProviderProps {\n theme: MineralTheme;\n children: ReactNode;\n}\n\nexport function MineralThemeProvider({ theme, children }: MineralThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const el = ref.current;\n\n for (const [key, value] of Object.entries(theme)) {\n const varName = themeToVarMap[key as keyof MineralTheme];\n if (varName && value) {\n el.style.setProperty(varName, value);\n }\n }\n }, [theme]);\n\n return (\n <ThemeContext.Provider value={theme}>\n <div ref={ref}>{children}</div>\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme(): MineralTheme {\n return useContext(ThemeContext);\n}\n","/**\n * Łączy klasy CSS, odfiltrowując falsy wartości.\n * Lekki zamiennik clsx/classnames — zero dependencies.\n */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n","import {useState, useRef, useCallback, forwardRef} from 'react';\nimport type {InputProps} from './Input.types';\nimport {cn} from '../../utils/cn';\nimport styles from './Input.module.css';\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n type = 'text',\n value,\n defaultValue,\n name,\n id,\n placeholder,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n autoComplete,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n rounded = false,\n label,\n helperText,\n errorText,\n startIcon,\n endIcon,\n clearable = false,\n error = false,\n success = false,\n maxLength,\n showCharCount = false,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClear,\n loading = false,\n className,\n style,\n inputClassName,\n labelClassName,\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const currentValue = value !== undefined ? value.toString() : internalValue;\n const hasError = error || !!errorText;\n const hasContent = currentValue.length > 0;\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n },\n [onChange, value],\n );\n\n const handleClear = useCallback(() => {\n if (value === undefined) {\n setInternalValue('');\n }\n onClear?.();\n // Focus input after clear\n const input = (ref as React.RefObject<HTMLInputElement>)?.current ?? inputRef.current;\n input?.focus();\n }, [onClear, ref]);\n\n const containerClasses = cn(\n styles.inputContainer,\n styles[variant],\n styles[size],\n focused && styles.focused,\n hasError && styles.inputError,\n success && !hasError && styles.inputSuccess,\n color === 'warning' && styles.colorWarning,\n color === 'info' && styles.colorInfo,\n disabled && styles.disabled,\n rounded && styles.rounded,\n );\n\n return (\n <div\n className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn(\n styles.label,\n focused && styles.focused,\n hasError && styles.labelError,\n success && !hasError && styles.labelSuccess,\n required && styles.required,\n labelClassName,\n )}\n >\n {label}\n </label>\n )}\n\n <div className={containerClasses}>\n {startIcon && <span className={styles.startIcon}>{startIcon}</span>}\n\n <input\n ref={ref ?? inputRef}\n type={type}\n value={value}\n defaultValue={value === undefined ? defaultValue : undefined}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n maxLength={maxLength}\n className={cn(styles.input, inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={\n errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined\n }\n />\n\n {loading && <span className={styles.spinner}/>}\n\n {clearable && hasContent && !loading && !disabled && (\n <button\n type=\"button\"\n className={styles.clearBtn}\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear input\"\n >\n ✕\n </button>\n )}\n\n {endIcon && !loading && <span className={styles.endIcon}>{endIcon}</span>}\n </div>\n\n {(errorText || helperText || showCharCount) && (\n <div className={styles.bottomRow}>\n <span>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className={styles.errorTextMsg} role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className={styles.helperText}>\n {helperText}\n </span>\n )}\n </span>\n {showCharCount && maxLength && (\n <span\n className={cn(\n styles.charCount,\n currentValue.length > maxLength && styles.charCountOver,\n )}\n >\n {currentValue.length}/{maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n );\n});\n"],"names":["ThemeContext","createContext","themeToVarMap","MineralThemeProvider","theme","children","ref","useRef","useEffect","el","key","value","varName","jsx","useTheme","useContext","cn","classes","Input","forwardRef","type","defaultValue","name","id","placeholder","disabled","readOnly","required","autoFocus","autoComplete","variant","size","color","fullWidth","rounded","label","helperText","errorText","startIcon","endIcon","clearable","error","success","maxLength","showCharCount","onChange","onFocus","onBlur","onKeyDown","onClear","loading","className","style","inputClassName","labelClassName","focused","setFocused","useState","internalValue","setInternalValue","inputRef","currentValue","hasError","hasContent","handleFocus","useCallback","e","handleBlur","handleChange","handleClear","input","containerClasses","styles","jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/theme/ThemeProvider.tsx","../src/utils/cn.ts","../src/utils/validators.ts","../src/utils/formatters.ts","../src/utils/dateUtils.ts","../src/utils/useDebounce.ts","../src/utils/useClickOutside.ts","../src/utils/useKeyboardNav.ts","../src/components/primitives/Portal/Portal.tsx","../src/components/primitives/Popover/Popover.tsx","../src/components/controls/Checkbox/Checkbox.tsx","../src/components/controls/Radio/RadioContext.ts","../src/components/controls/Radio/Radio.tsx","../src/components/controls/Radio/RadioGroup.tsx","../src/components/controls/Toggle/Toggle.tsx","../src/components/inputs/Input/Input.tsx","../src/components/inputs/Textarea/Textarea.tsx","../src/components/inputs/InputPassword/InputPassword.tsx","../src/components/inputs/InputNumber/InputNumber.tsx","../src/components/inputs/InputSearch/InputSearch.tsx","../src/components/inputs/InputEmail/InputEmail.tsx","../src/components/inputs/InputPhone/InputPhone.tsx","../src/components/inputs/InputName/InputName.tsx","../src/components/inputs/InputIBAN/InputIBAN.tsx","../src/components/inputs/InputTaxId/InputTaxId.tsx","../src/components/inputs/InputCurrency/InputCurrency.tsx","../src/components/dropdowns/Select/Select.tsx","../src/components/dropdowns/Autocomplete/Autocomplete.tsx","../src/components/dropdowns/DatePicker/DatePicker.tsx","../src/components/dropdowns/TimePicker/TimePicker.tsx","../src/components/form/Form/FormContext.ts","../src/components/form/Form/Form.tsx","../src/components/form/Form/useFormField.ts"],"sourcesContent":["import { createContext, useContext, useEffect, useRef, type ReactNode } from 'react';\nimport type { MineralTheme } from './types';\n\nconst ThemeContext = createContext<MineralTheme>({});\n\nconst themeToVarMap: Record<keyof MineralTheme, string> = {\n primary: '--mineral-primary',\n primaryDark: '--mineral-primary-dark',\n primaryLight: '--mineral-primary-light',\n dark: '--mineral-dark',\n darkLight: '--mineral-dark-light',\n surface: '--mineral-surface',\n text: '--mineral-text',\n textSecondary: '--mineral-text-secondary',\n textHeading: '--mineral-text-heading',\n border: '--mineral-border',\n borderHover: '--mineral-border-hover',\n borderFocus: '--mineral-border-focus',\n success: '--mineral-success',\n error: '--mineral-error',\n warning: '--mineral-warning',\n info: '--mineral-info',\n fontFamily: '--mineral-font-family',\n radiusSm: '--mineral-radius-sm',\n radiusMd: '--mineral-radius-md',\n radiusLg: '--mineral-radius-lg',\n};\n\ninterface MineralThemeProviderProps {\n theme: MineralTheme;\n children: ReactNode;\n}\n\nexport function MineralThemeProvider({ theme, children }: MineralThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const el = ref.current;\n\n for (const [key, value] of Object.entries(theme)) {\n const varName = themeToVarMap[key as keyof MineralTheme];\n if (varName && value) {\n el.style.setProperty(varName, value);\n }\n }\n }, [theme]);\n\n return (\n <ThemeContext.Provider value={theme}>\n <div ref={ref}>{children}</div>\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme(): MineralTheme {\n return useContext(ThemeContext);\n}\n","/**\n * Łączy klasy CSS, odfiltrowując falsy wartości.\n * Lekki zamiennik clsx/classnames — zero dependencies.\n */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n","export interface ValidationResult {\n valid: boolean;\n error?: string;\n}\n\nexport type ValidatorFn = (value: string) => ValidationResult;\n\nconst ok: ValidationResult = {valid: true};\nconst fail = (error: string): ValidationResult => ({valid: false, error});\n\nexport function validateRequired(value: string): ValidationResult {\n return value.trim().length > 0 ? ok : fail('This field is required');\n}\n\nexport function validateMinLength(min: number): ValidatorFn {\n return (value: string) =>\n value.length >= min ? ok : fail(`Minimum ${min} characters`);\n}\n\nexport function validateMaxLength(max: number): ValidatorFn {\n return (value: string) =>\n value.length <= max ? ok : fail(`Maximum ${max} characters`);\n}\n\nexport function validatePattern(pattern: RegExp, message?: string): ValidatorFn {\n return (value: string) =>\n pattern.test(value) ? ok : fail(message ?? 'Invalid format');\n}\n\nexport function validateRange(min?: number, max?: number): ValidatorFn {\n return (value: string) => {\n const num = parseFloat(value);\n if (isNaN(num)) return fail('Must be a number');\n if (min !== undefined && num < min) return fail(`Minimum value is ${min}`);\n if (max !== undefined && num > max) return fail(`Maximum value is ${max}`);\n return ok;\n };\n}\n\n// === Email ===\n\nconst EMAIL_RE = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n\nexport function validateEmail(value: string): ValidationResult {\n if (!value) return ok;\n return EMAIL_RE.test(value) ? ok : fail('Invalid email address');\n}\n\n// === Phone ===\n\nconst PHONE_LENGTH: Record<string, number> = {\n PL: 9, DE: 10, US: 10, GB: 10, FR: 9, CZ: 9, SK: 9,\n};\n\nexport function validatePhone(value: string, countryCode?: string): ValidationResult {\n if (!value) return ok;\n const digits = value.replace(/\\D/g, '');\n if (digits.length < 7) return fail('Phone number too short');\n if (digits.length > 15) return fail('Phone number too long');\n if (countryCode) {\n const expected = PHONE_LENGTH[countryCode.toUpperCase()];\n if (expected && digits.length !== expected) {\n return fail(`Phone number should have ${expected} digits`);\n }\n }\n return ok;\n}\n\n// === IBAN (MOD-97, ISO 13616) ===\n\nconst IBAN_LENGTHS: Record<string, number> = {\n AL: 28, AD: 24, AT: 20, AZ: 28, BH: 22, BY: 28, BE: 16, BA: 20,\n BR: 29, BG: 22, CR: 22, HR: 21, CY: 28, CZ: 24, DK: 18, DO: 28,\n EG: 29, SV: 28, EE: 20, FO: 18, FI: 18, FR: 27, GE: 22, DE: 22,\n GI: 23, GR: 27, GL: 18, GT: 28, HU: 28, IS: 26, IQ: 23, IE: 22,\n IL: 23, IT: 27, JO: 30, KZ: 20, XK: 20, KW: 30, LV: 21, LB: 28,\n LI: 21, LT: 20, LU: 20, MT: 31, MR: 27, MU: 30, MD: 24, MC: 27,\n ME: 22, NL: 18, MK: 19, NO: 15, PK: 24, PS: 29, PL: 28, PT: 25,\n QA: 29, RO: 24, LC: 32, SM: 27, SA: 24, RS: 22, SC: 31, SK: 24,\n SI: 19, ES: 24, SE: 24, CH: 21, TL: 23, TN: 24, TR: 26, UA: 29,\n AE: 23, GB: 22, VA: 22, VG: 24,\n};\n\nfunction mod97(numStr: string): number {\n let remainder = 0;\n for (let i = 0; i < numStr.length; i++) {\n remainder = (remainder * 10 + parseInt(numStr[i], 10)) % 97;\n }\n return remainder;\n}\n\nexport function validateIBAN(value: string): ValidationResult {\n if (!value) return ok;\n const iban = value.replace(/\\s/g, '').toUpperCase();\n\n if (iban.length < 2) return fail('IBAN too short');\n\n const countryCode = iban.slice(0, 2);\n const expectedLength = IBAN_LENGTHS[countryCode];\n\n if (!expectedLength) return fail('Unknown IBAN country code');\n if (iban.length !== expectedLength) {\n return fail(`IBAN for ${countryCode} should have ${expectedLength} characters`);\n }\n\n // MOD-97 check: move first 4 chars to end, convert letters to numbers\n const rearranged = iban.slice(4) + iban.slice(0, 4);\n const numStr = rearranged.replace(/[A-Z]/g, (ch) => String(ch.charCodeAt(0) - 55));\n\n return mod97(numStr) === 1 ? ok : fail('Invalid IBAN checksum');\n}\n\n// === NIP (Polish Tax ID) ===\n\nconst NIP_WEIGHTS = [6, 5, 7, 2, 3, 4, 5, 6, 7];\n\nexport function validateNIP(value: string): ValidationResult {\n if (!value) return ok;\n const digits = value.replace(/\\D/g, '');\n if (digits.length !== 10) return fail('NIP must have 10 digits');\n\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n sum += parseInt(digits[i], 10) * NIP_WEIGHTS[i];\n }\n const checkDigit = sum % 11;\n if (checkDigit === 10) return fail('Invalid NIP');\n return checkDigit === parseInt(digits[9], 10) ? ok : fail('Invalid NIP checksum');\n}\n\n// === PESEL ===\n\nconst PESEL_WEIGHTS = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3];\n\nexport function validatePESEL(value: string): ValidationResult {\n if (!value) return ok;\n const digits = value.replace(/\\D/g, '');\n if (digits.length !== 11) return fail('PESEL must have 11 digits');\n\n let sum = 0;\n for (let i = 0; i < 10; i++) {\n sum += parseInt(digits[i], 10) * PESEL_WEIGHTS[i];\n }\n const checkDigit = (10 - (sum % 10)) % 10;\n return checkDigit === parseInt(digits[10], 10) ? ok : fail('Invalid PESEL checksum');\n}\n\n// === REGON ===\n\nconst REGON9_WEIGHTS = [8, 9, 2, 3, 4, 5, 6, 7];\nconst REGON14_WEIGHTS = [2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8];\n\nexport function validateREGON(value: string): ValidationResult {\n if (!value) return ok;\n const digits = value.replace(/\\D/g, '');\n\n if (digits.length !== 9 && digits.length !== 14) {\n return fail('REGON must have 9 or 14 digits');\n }\n\n const weights = digits.length === 9 ? REGON9_WEIGHTS : REGON14_WEIGHTS;\n let sum = 0;\n for (let i = 0; i < weights.length; i++) {\n sum += parseInt(digits[i], 10) * weights[i];\n }\n const checkDigit = sum % 11 === 10 ? 0 : sum % 11;\n const lastDigit = parseInt(digits[digits.length - 1], 10);\n return checkDigit === lastDigit ? ok : fail('Invalid REGON checksum');\n}\n\n// === Compose validators ===\n\nexport function composeValidators(...validators: ValidatorFn[]): ValidatorFn {\n return (value: string) => {\n for (const validator of validators) {\n const result = validator(value);\n if (!result.valid) return result;\n }\n return ok;\n };\n}\n","export function stripNonDigits(value: string): string {\n return value.replace(/\\D/g, '');\n}\n\nexport function stripNonAlphanumeric(value: string): string {\n return value.replace(/[^a-zA-Z0-9]/g, '');\n}\n\nexport function capitalizeWords(value: string): string {\n return value.replace(/\\b\\w/g, (ch) => ch.toUpperCase());\n}\n\n// === IBAN formatting: \"PL61109010140000071219812874\" → \"PL61 1090 1014 0000 0712 1981 2874\" ===\n\nexport function formatIBAN(value: string): string {\n const clean = value.replace(/\\s/g, '').toUpperCase();\n return clean.replace(/(.{4})/g, '$1 ').trim();\n}\n\nexport function unformatIBAN(value: string): string {\n return value.replace(/\\s/g, '').toUpperCase();\n}\n\n// === Phone formatting: \"123456789\" → \"123 456 789\" (Polish default) ===\n\nexport interface PhoneFormatOptions {\n countryCode?: string;\n groupPattern?: number[]; // e.g. [3, 3, 3] for PL\n}\n\nconst PHONE_GROUPS: Record<string, number[]> = {\n PL: [3, 3, 3],\n DE: [3, 4, 3],\n US: [3, 3, 4],\n GB: [4, 3, 3],\n FR: [2, 2, 2, 2, 2],\n DEFAULT: [3, 3, 3],\n};\n\nexport function formatPhone(value: string, options: PhoneFormatOptions = {}): string {\n const digits = stripNonDigits(value);\n if (!digits) return '';\n\n const groups = options.groupPattern\n ?? PHONE_GROUPS[options.countryCode?.toUpperCase() ?? '']\n ?? PHONE_GROUPS.DEFAULT;\n\n const parts: string[] = [];\n let pos = 0;\n for (const len of groups) {\n if (pos >= digits.length) break;\n parts.push(digits.slice(pos, pos + len));\n pos += len;\n }\n if (pos < digits.length) {\n parts.push(digits.slice(pos));\n }\n return parts.join(' ');\n}\n\n// === NIP formatting: \"1234567819\" → \"123-456-78-19\" ===\n\nexport function formatNIP(value: string): string {\n const digits = stripNonDigits(value);\n if (digits.length <= 3) return digits;\n if (digits.length <= 6) return `${digits.slice(0, 3)}-${digits.slice(3)}`;\n if (digits.length <= 8) return `${digits.slice(0, 3)}-${digits.slice(3, 6)}-${digits.slice(6)}`;\n return `${digits.slice(0, 3)}-${digits.slice(3, 6)}-${digits.slice(6, 8)}-${digits.slice(8, 10)}`;\n}\n\n// === Currency formatting ===\n\nexport interface CurrencyFormatOptions {\n decimalSeparator?: '.' | ',';\n thousandSeparator?: ' ' | '.' | ',' | '';\n precision?: number;\n}\n\nexport function formatCurrency(value: string, options: CurrencyFormatOptions = {}): string {\n const {\n decimalSeparator = ',',\n thousandSeparator = ' ',\n precision = 2,\n } = options;\n\n // Strip everything except digits, dots, commas, minus\n let clean = value.replace(/[^\\d.,-]/g, '');\n // Normalize decimal separator to dot for parsing\n clean = clean.replace(',', '.');\n\n // Split into integer and decimal parts\n const parts = clean.split('.');\n let intPart = parts[0] || '0';\n let decPart = parts.length > 1 ? parts[1] : '';\n\n // Handle negative\n const isNegative = intPart.startsWith('-');\n if (isNegative) intPart = intPart.slice(1);\n\n // Strip leading zeros\n intPart = intPart.replace(/^0+/, '') || '0';\n\n // Add thousand separators\n if (thousandSeparator) {\n intPart = intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\n }\n\n // Limit decimal precision\n decPart = decPart.slice(0, precision);\n\n const result = decPart\n ? `${intPart}${decimalSeparator}${decPart}`\n : intPart;\n\n return isNegative ? `-${result}` : result;\n}\n\nexport function parseCurrencyToNumber(\n formatted: string,\n thousandSeparator: string = ' ',\n decimalSeparator: string = ',',\n): number | null {\n let clean = formatted;\n // Remove thousand separators\n if (thousandSeparator) {\n clean = clean.split(thousandSeparator).join('');\n }\n // Normalize decimal\n clean = clean.replace(decimalSeparator, '.');\n // Remove non-numeric except dot and minus\n clean = clean.replace(/[^\\d.-]/g, '');\n const num = parseFloat(clean);\n return isNaN(num) ? null : num;\n}\n\n// === Cursor position helper for formatted inputs ===\n\nexport function adjustCursorAfterFormat(\n oldValue: string,\n newValue: string,\n oldCursor: number,\n): number {\n // Count how many \"real\" characters (non-space/separator) are before cursor in old value\n let realCharsBefore = 0;\n for (let i = 0; i < oldCursor && i < oldValue.length; i++) {\n if (oldValue[i] !== ' ' && oldValue[i] !== '-') {\n realCharsBefore++;\n }\n }\n\n // Find position in new value that has the same number of real chars before it\n let count = 0;\n for (let i = 0; i < newValue.length; i++) {\n if (newValue[i] !== ' ' && newValue[i] !== '-') {\n count++;\n }\n if (count === realCharsBefore) {\n return i + 1;\n }\n }\n return newValue.length;\n}\n","export function daysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nexport function firstDayOfMonth(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear()\n && a.getMonth() === b.getMonth()\n && a.getDate() === b.getDate();\n}\n\nexport function isDateInRange(date: Date, min?: Date | null, max?: Date | null): boolean {\n if (min && date < stripTime(min)) return false;\n if (max && date > stripTime(max)) return false;\n return true;\n}\n\nexport function stripTime(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nexport function addMonths(date: Date, count: number): Date {\n const result = new Date(date);\n result.setMonth(result.getMonth() + count);\n return result;\n}\n\nexport function addYears(date: Date, count: number): Date {\n const result = new Date(date);\n result.setFullYear(result.getFullYear() + count);\n return result;\n}\n\n// === Format/Parse with tokens: dd, MM, yyyy ===\n\nconst pad = (n: number): string => n.toString().padStart(2, '0');\n\nexport function formatDate(date: Date, format: string = 'dd.MM.yyyy'): string {\n const day = pad(date.getDate());\n const month = pad(date.getMonth() + 1);\n const year = date.getFullYear().toString();\n\n return format\n .replace('dd', day)\n .replace('MM', month)\n .replace('yyyy', year);\n}\n\nexport function parseDate(value: string, format: string = 'dd.MM.yyyy'): Date | null {\n const dayIdx = format.indexOf('dd');\n const monthIdx = format.indexOf('MM');\n const yearIdx = format.indexOf('yyyy');\n\n if (dayIdx === -1 || monthIdx === -1 || yearIdx === -1) return null;\n\n const day = parseInt(value.slice(dayIdx, dayIdx + 2), 10);\n const month = parseInt(value.slice(monthIdx, monthIdx + 2), 10);\n const year = parseInt(value.slice(yearIdx, yearIdx + 4), 10);\n\n if (isNaN(day) || isNaN(month) || isNaN(year)) return null;\n if (month < 1 || month > 12) return null;\n if (day < 1 || day > daysInMonth(year, month - 1)) return null;\n\n return new Date(year, month - 1, day);\n}\n\n// === Day/month names ===\n\nconst DAY_NAMES_PL = ['Pn', 'Wt', 'Śr', 'Cz', 'Pt', 'So', 'Nd'];\nconst DAY_NAMES_EN = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n\nconst MONTH_NAMES_PL = [\n 'Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec',\n 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień',\n];\nconst MONTH_NAMES_EN = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n];\n\nexport function getDayNames(locale: 'pl' | 'en' = 'pl'): string[] {\n return locale === 'pl' ? DAY_NAMES_PL : DAY_NAMES_EN;\n}\n\nexport function getMonthNames(locale: 'pl' | 'en' = 'pl'): string[] {\n return locale === 'pl' ? MONTH_NAMES_PL : MONTH_NAMES_EN;\n}\n\n// === Time parsing ===\n\nexport function parseTime(value: string): {hours: number; minutes: number; seconds: number} | null {\n const parts = value.split(':');\n if (parts.length < 2) return null;\n\n const hours = parseInt(parts[0], 10);\n const minutes = parseInt(parts[1], 10);\n const seconds = parts.length > 2 ? parseInt(parts[2], 10) : 0;\n\n if (isNaN(hours) || isNaN(minutes) || isNaN(seconds)) return null;\n if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59 || seconds < 0 || seconds > 59) return null;\n\n return {hours, minutes, seconds};\n}\n\nexport function formatTime(\n hours: number,\n minutes: number,\n seconds?: number,\n showSeconds: boolean = false,\n): string {\n const base = `${pad(hours)}:${pad(minutes)}`;\n return showSeconds ? `${base}:${pad(seconds ?? 0)}` : base;\n}\n","import {useState, useEffect, useRef, useCallback} from 'react';\n\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debounced, setDebounced] = useState(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debounced;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebouncedCallback<T extends (...args: any[]) => void>(\n callback: T,\n delay: number,\n): T {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n const timerRef = useRef<ReturnType<typeof setTimeout>>();\n\n return useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((...args: any[]) => {\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => callbackRef.current(...args), delay);\n }) as T,\n [delay],\n );\n}\n","import {useEffect, type RefObject} from 'react';\n\nexport function useClickOutside(\n ref: RefObject<HTMLElement | null>,\n handler: () => void,\n): void {\n useEffect(() => {\n const listener = (e: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(e.target as Node)) return;\n handler();\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [ref, handler]);\n}\n","import {useState, useCallback, type KeyboardEvent} from 'react';\n\nexport interface UseKeyboardNavOptions {\n itemCount: number;\n onSelect: (index: number) => void;\n onClose: () => void;\n isOpen: boolean;\n loop?: boolean;\n}\n\nexport function useKeyboardNav({\n itemCount,\n onSelect,\n onClose,\n isOpen,\n loop = true,\n}: UseKeyboardNavOptions) {\n const [activeIndex, setActiveIndex] = useState(-1);\n\n const resetIndex = useCallback(() => setActiveIndex(-1), []);\n\n const onKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isOpen || itemCount === 0) return;\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n setActiveIndex((prev) => {\n if (prev >= itemCount - 1) return loop ? 0 : prev;\n return prev + 1;\n });\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n setActiveIndex((prev) => {\n if (prev <= 0) return loop ? itemCount - 1 : 0;\n return prev - 1;\n });\n break;\n }\n case 'Enter': {\n e.preventDefault();\n if (activeIndex >= 0 && activeIndex < itemCount) {\n onSelect(activeIndex);\n }\n break;\n }\n case 'Escape': {\n e.preventDefault();\n onClose();\n break;\n }\n case 'Home': {\n e.preventDefault();\n setActiveIndex(0);\n break;\n }\n case 'End': {\n e.preventDefault();\n setActiveIndex(itemCount - 1);\n break;\n }\n }\n },\n [isOpen, itemCount, activeIndex, onSelect, onClose, loop],\n );\n\n return {activeIndex, setActiveIndex, resetIndex, onKeyDown};\n}\n","import {createPortal} from 'react-dom';\nimport type {PortalProps} from './Portal.types';\n\nexport function Portal({children, container}: PortalProps) {\n const target = container ?? (typeof document !== 'undefined' ? document.body : null);\n if (!target) return null;\n return createPortal(children, target);\n}\n","import {useState, useEffect, useRef, useCallback} from 'react';\nimport {Portal} from '../Portal';\nimport {cn} from '../../../utils/cn';\nimport type {PopoverProps} from './Popover.types';\nimport styles from './Popover.module.css';\n\nexport function Popover({\n open,\n anchorRef,\n onClose,\n placement = 'bottom-start',\n matchWidth = false,\n offset = 4,\n children,\n className,\n style,\n}: PopoverProps) {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<{top: number; left: number; width?: number}>({\n top: 0,\n left: 0,\n });\n const [flipped, setFlipped] = useState(false);\n\n const updatePosition = useCallback(() => {\n if (!anchorRef.current || !popoverRef.current) return;\n\n const anchor = anchorRef.current.getBoundingClientRect();\n const popover = popoverRef.current.getBoundingClientRect();\n const viewport = {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n\n const isTop = placement.startsWith('top');\n const isEnd = placement.endsWith('end');\n\n // Check if we need to flip (not enough space below, flip to top, or vice versa)\n const spaceBelow = viewport.height - anchor.bottom - offset;\n const spaceAbove = anchor.top - offset;\n const shouldFlip = isTop\n ? spaceAbove < popover.height && spaceBelow > spaceAbove\n : spaceBelow < popover.height && spaceAbove > spaceBelow;\n\n setFlipped(shouldFlip);\n\n const showOnTop = isTop ? !shouldFlip : shouldFlip;\n\n let top: number;\n if (showOnTop) {\n top = anchor.top - popover.height - offset + window.scrollY;\n } else {\n top = anchor.bottom + offset + window.scrollY;\n }\n\n let left: number;\n if (isEnd) {\n left = anchor.right - popover.width + window.scrollX;\n } else {\n left = anchor.left + window.scrollX;\n }\n\n // Clamp to viewport\n left = Math.max(8, Math.min(left, viewport.width - popover.width - 8));\n top = Math.max(8 + window.scrollY, top);\n\n setPosition({\n top,\n left,\n width: matchWidth ? anchor.width : undefined,\n });\n }, [anchorRef, placement, offset, matchWidth]);\n\n useEffect(() => {\n if (!open) return;\n\n // Initial position with a frame delay so the popover is rendered and measurable\n requestAnimationFrame(updatePosition);\n\n window.addEventListener('scroll', updatePosition, {passive: true});\n window.addEventListener('resize', updatePosition, {passive: true});\n return () => {\n window.removeEventListener('scroll', updatePosition);\n window.removeEventListener('resize', updatePosition);\n };\n }, [open, updatePosition]);\n\n // Close on Escape\n useEffect(() => {\n if (!open) return;\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [open, onClose]);\n\n // Close on click outside\n useEffect(() => {\n if (!open) return;\n const handleClick = (e: MouseEvent) => {\n if (\n popoverRef.current && !popoverRef.current.contains(e.target as Node)\n && anchorRef.current && !anchorRef.current.contains(e.target as Node)\n ) {\n onClose();\n }\n };\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [open, onClose, anchorRef]);\n\n if (!open) return null;\n\n return (\n <Portal>\n <div\n ref={popoverRef}\n className={cn(\n styles.popover,\n flipped ? styles.flipped : styles.normal,\n className,\n )}\n style={{\n position: 'absolute',\n top: position.top,\n left: position.left,\n width: position.width,\n ...style,\n }}\n role=\"listbox\"\n >\n {children}\n </div>\n </Portal>\n );\n}\n","import {useRef, useEffect, forwardRef} from 'react';\nimport type {CheckboxProps} from './Checkbox.types';\nimport {cn} from '../../../utils/cn';\nimport styles from './Checkbox.module.css';\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n checked,\n defaultChecked,\n indeterminate = false,\n name,\n id,\n value,\n disabled = false,\n size = 'md',\n color = 'primary',\n label,\n labelPosition = 'right',\n error = false,\n errorText,\n onChange,\n className,\n style,\n },\n ref,\n) {\n const internalRef = useRef<HTMLInputElement>(null);\n const inputRef = (ref as React.RefObject<HTMLInputElement>) ?? internalRef;\n\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate, inputRef]);\n\n const hasError = error || !!errorText;\n\n return (\n <div className={cn(styles.wrapper, className)} style={style}>\n <label\n className={cn(\n styles.label,\n styles[size],\n labelPosition === 'left' && styles.labelLeft,\n disabled && styles.disabled,\n )}\n >\n <span className={cn(\n styles.box,\n styles[`color-${color}`],\n hasError && styles.boxError,\n )}>\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n name={name}\n id={id}\n value={value}\n disabled={disabled}\n onChange={onChange}\n className={styles.input}\n aria-invalid={hasError || undefined}\n />\n <svg className={styles.checkmark} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n className={styles.checkPath}\n d=\"M3.5 8L6.5 11L12.5 5\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span className={styles.indeterminateMark} />\n </span>\n {label && <span className={styles.labelText}>{label}</span>}\n </label>\n {errorText && (\n <span className={styles.errorText} role=\"alert\">{errorText}</span>\n )}\n </div>\n );\n});\n","import {createContext, useContext} from 'react';\nimport type {RadioGroupContextValue} from './Radio.types';\n\nexport const RadioContext = createContext<RadioGroupContextValue | null>(null);\n\nexport function useRadioGroup(): RadioGroupContextValue | null {\n return useContext(RadioContext);\n}\n","import {forwardRef, useCallback} from 'react';\nimport type {RadioProps} from './Radio.types';\nimport {useRadioGroup} from './RadioContext';\nimport {cn} from '../../../utils/cn';\nimport styles from './Radio.module.css';\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n {\n checked,\n defaultChecked,\n name,\n id,\n value,\n disabled = false,\n size = 'md',\n color = 'primary',\n label,\n labelPosition = 'right',\n onChange,\n className,\n style,\n },\n ref,\n) {\n const group = useRadioGroup();\n\n const resolvedName = group?.name ?? name;\n const resolvedDisabled = group?.disabled ?? disabled;\n const resolvedSize = group?.size ?? size;\n const resolvedColor = group?.color ?? color;\n const resolvedChecked = group ? group.value === value : checked;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n if (group?.onChange && value) {\n group.onChange(value);\n }\n },\n [onChange, group, value],\n );\n\n return (\n <label\n className={cn(\n styles.label,\n styles[resolvedSize],\n labelPosition === 'left' && styles.labelLeft,\n resolvedDisabled && styles.disabled,\n className,\n )}\n style={style}\n >\n <span className={cn(styles.circle, styles[`color-${resolvedColor}`])}>\n <input\n ref={ref}\n type=\"radio\"\n name={resolvedName}\n id={id}\n value={value}\n checked={resolvedChecked}\n defaultChecked={!group ? defaultChecked : undefined}\n disabled={resolvedDisabled}\n onChange={handleChange}\n className={styles.input}\n />\n <span className={styles.dot} />\n </span>\n {label && <span className={styles.labelText}>{label}</span>}\n </label>\n );\n});\n","import {useState, useCallback, useMemo} from 'react';\nimport type {RadioGroupProps} from './Radio.types';\nimport {RadioContext} from './RadioContext';\nimport {cn} from '../../../utils/cn';\nimport styles from './Radio.module.css';\n\nexport function RadioGroup({\n name,\n value,\n defaultValue,\n onChange,\n direction = 'vertical',\n children,\n disabled = false,\n size = 'md',\n color = 'primary',\n error = false,\n errorText,\n label,\n className,\n style,\n}: RadioGroupProps) {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = value !== undefined ? value : internalValue;\n\n const handleChange = useCallback(\n (val: string) => {\n if (value === undefined) {\n setInternalValue(val);\n }\n onChange?.(val);\n },\n [onChange, value],\n );\n\n const ctx = useMemo(\n () => ({name, value: currentValue, disabled, size, color, onChange: handleChange}),\n [name, currentValue, disabled, size, color, handleChange],\n );\n\n return (\n <RadioContext.Provider value={ctx}>\n <fieldset\n className={cn(styles.group, styles[direction], className)}\n style={style}\n role=\"radiogroup\"\n >\n {label && (\n <legend className={cn(styles.groupLabel, error && styles.groupLabelError)}>\n {label}\n </legend>\n )}\n {children}\n {errorText && (\n <span className={styles.errorText} role=\"alert\">{errorText}</span>\n )}\n </fieldset>\n </RadioContext.Provider>\n );\n}\n","import {forwardRef} from 'react';\nimport type {ToggleProps} from './Toggle.types';\nimport {cn} from '../../../utils/cn';\nimport styles from './Toggle.module.css';\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(function Toggle(\n {\n checked,\n defaultChecked,\n name,\n id,\n disabled = false,\n size = 'md',\n color = 'primary',\n label,\n labelPosition = 'right',\n onChange,\n className,\n style,\n },\n ref,\n) {\n return (\n <label\n className={cn(\n styles.label,\n styles[size],\n labelPosition === 'left' && styles.labelLeft,\n disabled && styles.disabled,\n className,\n )}\n style={style}\n >\n <span className={cn(styles.track, styles[`color-${color}`])}>\n <input\n ref={ref}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n name={name}\n id={id}\n disabled={disabled}\n onChange={onChange}\n className={styles.input}\n role=\"switch\"\n aria-checked={checked}\n />\n <span className={styles.knob} />\n </span>\n {label && <span className={styles.labelText}>{label}</span>}\n </label>\n );\n});\n","import {useState, useRef, useCallback, forwardRef} from 'react';\nimport type {InputProps} from './Input.types';\nimport {cn} from '../../../utils/cn';\nimport styles from './Input.module.css';\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n type = 'text',\n value,\n defaultValue,\n name,\n id,\n placeholder,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n autoComplete,\n inputMode,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n rounded = false,\n label,\n helperText,\n errorText,\n startIcon,\n endIcon,\n clearable = false,\n error = false,\n success = false,\n maxLength,\n showCharCount = false,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClear,\n loading = false,\n className,\n style,\n inputClassName,\n labelClassName,\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const currentValue = value !== undefined ? value.toString() : internalValue;\n const hasError = error || !!errorText;\n const hasContent = currentValue.length > 0;\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n },\n [onChange, value],\n );\n\n const handleClear = useCallback(() => {\n if (value === undefined) {\n setInternalValue('');\n }\n onClear?.();\n // Focus input after clear\n const input = (ref as React.RefObject<HTMLInputElement>)?.current ?? inputRef.current;\n input?.focus();\n }, [onClear, ref]);\n\n const containerClasses = cn(\n styles.inputContainer,\n styles[variant],\n styles[size],\n focused && styles.focused,\n hasError && styles.inputError,\n success && !hasError && styles.inputSuccess,\n color === 'warning' && styles.colorWarning,\n color === 'info' && styles.colorInfo,\n disabled && styles.disabled,\n rounded && styles.rounded,\n );\n\n return (\n <div\n className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn(\n styles.label,\n focused && styles.focused,\n hasError && styles.labelError,\n success && !hasError && styles.labelSuccess,\n required && styles.required,\n labelClassName,\n )}\n >\n {label}\n </label>\n )}\n\n <div className={containerClasses}>\n {startIcon && <span className={styles.startIcon}>{startIcon}</span>}\n\n <input\n ref={ref ?? inputRef}\n type={type}\n value={value}\n defaultValue={value === undefined ? defaultValue : undefined}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n inputMode={inputMode}\n maxLength={maxLength}\n className={cn(styles.input, inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={\n errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined\n }\n />\n\n {loading && <span className={styles.spinner}/>}\n\n {clearable && hasContent && !loading && !disabled && (\n <button\n type=\"button\"\n className={styles.clearBtn}\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear input\"\n >\n ✕\n </button>\n )}\n\n {endIcon && !loading && <span className={styles.endIcon}>{endIcon}</span>}\n </div>\n\n {(errorText || helperText || showCharCount) && (\n <div className={styles.bottomRow}>\n <span>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className={styles.errorTextMsg} role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className={styles.helperText}>\n {helperText}\n </span>\n )}\n </span>\n {showCharCount && maxLength && (\n <span\n className={cn(\n styles.charCount,\n currentValue.length > maxLength && styles.charCountOver,\n )}\n >\n {currentValue.length}/{maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n );\n});\n","import {useState, useRef, useCallback, useEffect, forwardRef} from 'react';\nimport type {TextareaProps} from './Textarea.types';\nimport {cn} from '../../../utils/cn';\nimport styles from './Textarea.module.css';\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n {\n value,\n defaultValue,\n name,\n id,\n placeholder,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n rows = 3,\n autoResize = false,\n minRows,\n maxRows,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n label,\n helperText,\n errorText,\n error = false,\n success = false,\n maxLength,\n showCharCount = false,\n loading = false,\n onChange,\n onFocus,\n onBlur,\n className,\n style,\n textareaClassName,\n labelClassName,\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const currentValue = value !== undefined ? value : internalValue;\n const hasError = error || !!errorText;\n const resolvedRef = ref ?? textareaRef;\n\n const adjustHeight = useCallback(() => {\n const el = typeof resolvedRef === 'function' ? null : resolvedRef?.current;\n if (!el || !autoResize) return;\n\n el.style.height = 'auto';\n const lineHeight = parseFloat(getComputedStyle(el).lineHeight) || 20;\n const minH = minRows ? minRows * lineHeight : 0;\n const maxH = maxRows ? maxRows * lineHeight : Infinity;\n const newHeight = Math.min(Math.max(el.scrollHeight, minH), maxH);\n el.style.height = `${newHeight}px`;\n el.style.overflowY = el.scrollHeight > newHeight ? 'auto' : 'hidden';\n }, [autoResize, minRows, maxRows, resolvedRef]);\n\n useEffect(() => {\n adjustHeight();\n }, [currentValue, adjustHeight]);\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n },\n [onChange, value],\n );\n\n const containerClasses = cn(\n styles.container,\n styles[variant],\n styles[size],\n focused && styles.focused,\n hasError && styles.containerError,\n success && !hasError && styles.containerSuccess,\n color === 'warning' && styles.colorWarning,\n color === 'info' && styles.colorInfo,\n disabled && styles.disabled,\n );\n\n return (\n <div\n className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn(\n styles.label,\n focused && styles.labelFocused,\n hasError && styles.labelError,\n success && !hasError && styles.labelSuccess,\n required && styles.required,\n labelClassName,\n )}\n >\n {label}\n </label>\n )}\n\n <div className={containerClasses}>\n <textarea\n ref={resolvedRef as React.Ref<HTMLTextAreaElement>}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n rows={autoResize ? (minRows ?? rows) : rows}\n maxLength={maxLength}\n value={value}\n defaultValue={value === undefined ? defaultValue : undefined}\n className={cn(styles.textarea, textareaClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n aria-invalid={hasError || undefined}\n aria-describedby={\n errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined\n }\n />\n {loading && <span className={styles.spinner} />}\n </div>\n\n {(errorText || helperText || showCharCount) && (\n <div className={styles.bottomRow}>\n <span>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className={styles.errorTextMsg} role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className={styles.helperText}>\n {helperText}\n </span>\n )}\n </span>\n {showCharCount && maxLength && (\n <span\n className={cn(\n styles.charCount,\n currentValue.length > maxLength && styles.charCountOver,\n )}\n >\n {currentValue.length}/{maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n );\n});\n","import {useState, useCallback, useEffect, forwardRef} from 'react';\nimport type {InputPasswordProps, PasswordStrength} from './InputPassword.types';\nimport {Input} from '../Input';\nimport {cn} from '../../../utils/cn';\nimport styles from './InputPassword.module.css';\n\nfunction calcStrength(value: string): PasswordStrength {\n let score = 0;\n if (value.length >= 8) score++;\n if (value.length >= 12) score++;\n if (/[a-z]/.test(value) && /[A-Z]/.test(value)) score++;\n if (/\\d/.test(value)) score++;\n if (/[^a-zA-Z0-9]/.test(value)) score++;\n\n if (score <= 1) return 'weak';\n if (score <= 2) return 'fair';\n if (score <= 3) return 'good';\n return 'strong';\n}\n\nconst STRENGTH_LABELS: Record<PasswordStrength, string> = {\n weak: 'Weak',\n fair: 'Fair',\n good: 'Good',\n strong: 'Strong',\n};\n\nexport const InputPassword = forwardRef<HTMLInputElement, InputPasswordProps>(function InputPassword(\n {\n showToggle = true,\n showStrength = false,\n onStrengthChange,\n value,\n defaultValue,\n onChange,\n ...rest\n },\n ref,\n) {\n const [visible, setVisible] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const currentValue = value !== undefined ? value.toString() : internalValue;\n const strength = calcStrength(currentValue);\n\n useEffect(() => {\n onStrengthChange?.(strength);\n }, [strength, onStrengthChange]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n },\n [onChange, value],\n );\n\n const toggleIcon = showToggle ? (\n <button\n type=\"button\"\n className={styles.toggleBtn}\n onClick={() => setVisible((v) => !v)}\n tabIndex={-1}\n aria-label={visible ? 'Hide password' : 'Show password'}\n >\n {visible ? '◠' : '◉'}\n </button>\n ) : undefined;\n\n return (\n <div className={styles.wrapper}>\n <Input\n {...rest}\n ref={ref}\n type={visible ? 'text' : 'password'}\n value={value}\n defaultValue={defaultValue}\n onChange={handleChange}\n endIcon={toggleIcon}\n />\n {showStrength && currentValue.length > 0 && (\n <div className={styles.strengthRow}>\n <div className={styles.strengthBar}>\n {[0, 1, 2, 3].map((i) => (\n <div\n key={i}\n className={cn(\n styles.strengthSegment,\n i < (['weak', 'fair', 'good', 'strong'].indexOf(strength) + 1) && styles[`strength-${strength}`],\n )}\n />\n ))}\n </div>\n <span className={cn(styles.strengthLabel, styles[`strength-${strength}`])}>\n {STRENGTH_LABELS[strength]}\n </span>\n </div>\n )}\n </div>\n );\n});\n","import {useState, useCallback, useRef, useEffect, forwardRef} from 'react';\nimport type {InputNumberProps} from './InputNumber.types';\nimport {Input} from '../Input';\nimport styles from './InputNumber.module.css';\n\nfunction clampValue(val: number, min?: number, max?: number): number {\n if (min !== undefined && val < min) return min;\n if (max !== undefined && val > max) return max;\n return val;\n}\n\nfunction roundToPrecision(val: number, precision: number): number {\n const factor = Math.pow(10, precision);\n return Math.round(val * factor) / factor;\n}\n\nexport const InputNumber = forwardRef<HTMLInputElement, InputNumberProps>(function InputNumber(\n {\n min,\n max,\n step = 1,\n showStepper = true,\n precision = 0,\n allowNegative = true,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onKeyDown,\n onBlur,\n disabled = false,\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const currentValue = value !== undefined ? value.toString() : internalValue;\n const intervalRef = useRef<ReturnType<typeof setInterval>>();\n\n const updateValue = useCallback(\n (newVal: string) => {\n if (value === undefined) {\n setInternalValue(newVal);\n }\n const num = parseFloat(newVal);\n onValueChange?.(isNaN(num) ? null : num);\n },\n [value, onValueChange],\n );\n\n const increment = useCallback(\n (direction: 1 | -1) => {\n const current = parseFloat(currentValue) || 0;\n const newVal = roundToPrecision(clampValue(current + step * direction, min, max), precision);\n updateValue(newVal.toString());\n },\n [currentValue, step, min, max, precision, updateValue],\n );\n\n const startHold = useCallback(\n (direction: 1 | -1) => {\n increment(direction);\n intervalRef.current = setInterval(() => increment(direction), 150);\n },\n [increment],\n );\n\n const stopHold = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = undefined;\n }\n }, []);\n\n useEffect(() => {\n return stopHold;\n }, [stopHold]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n // Allow digits, dot, comma, minus\n const filtered = raw.replace(allowNegative ? /[^\\d.,-]/g : /[^\\d.,]/g, '');\n updateValue(filtered);\n onChange?.(e);\n },\n [onChange, allowNegative, updateValue],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n const num = parseFloat(currentValue);\n if (!isNaN(num)) {\n const clamped = roundToPrecision(clampValue(num, min, max), precision);\n updateValue(clamped.toString());\n }\n onBlur?.(e);\n },\n [currentValue, min, max, precision, updateValue, onBlur],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n increment(1);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n increment(-1);\n }\n onKeyDown?.(e);\n },\n [increment, onKeyDown],\n );\n\n const stepper = showStepper && !disabled ? (\n <div className={styles.stepper}>\n <button\n type=\"button\"\n className={styles.stepBtn}\n onMouseDown={() => startHold(1)}\n onMouseUp={stopHold}\n onMouseLeave={stopHold}\n tabIndex={-1}\n aria-label=\"Increment\"\n >\n ▲\n </button>\n <button\n type=\"button\"\n className={styles.stepBtn}\n onMouseDown={() => startHold(-1)}\n onMouseUp={stopHold}\n onMouseLeave={stopHold}\n tabIndex={-1}\n aria-label=\"Decrement\"\n >\n ▼\n </button>\n </div>\n ) : undefined;\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n value={value !== undefined ? currentValue : undefined}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n endIcon={stepper}\n disabled={disabled}\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputSearchProps} from './InputSearch.types';\nimport {Input} from '../Input';\nimport {useDebouncedCallback} from '../../../utils/useDebounce';\n\nexport const InputSearch = forwardRef<HTMLInputElement, InputSearchProps>(function InputSearch(\n {\n debounceMs = 300,\n onSearch,\n value,\n defaultValue,\n onChange,\n onKeyDown,\n onClear,\n clearable = true,\n placeholder = 'Search...',\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const debouncedSearch = useDebouncedCallback(\n (val: string) => onSearch?.(val),\n debounceMs,\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n debouncedSearch(e.target.value);\n onChange?.(e);\n },\n [onChange, value, debouncedSearch],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n onSearch?.(currentValue);\n }\n onKeyDown?.(e);\n },\n [currentValue, onSearch, onKeyDown],\n );\n\n const handleClear = useCallback(() => {\n if (value === undefined) {\n setInternalValue('');\n }\n onSearch?.('');\n onClear?.();\n }, [value, onSearch, onClear]);\n\n const searchIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"6.5\" cy=\"6.5\" r=\"5\" />\n <line x1=\"10\" y1=\"10\" x2=\"14.5\" y2=\"14.5\" />\n </svg>\n );\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"search\"\n value={value}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onClear={handleClear}\n clearable={clearable}\n placeholder={placeholder}\n startIcon={searchIcon}\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputEmailProps} from './InputEmail.types';\nimport {Input} from '../Input';\nimport {validateEmail} from '../../../utils/validators';\nimport type {ValidationResult} from '../../../utils/validators';\n\nexport const InputEmail = forwardRef<HTMLInputElement, InputEmailProps>(function InputEmail(\n {\n validateOnBlur = true,\n validateOnChange = false,\n showValidIcon = true,\n onValidationChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder = 'email@example.com',\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const [validation, setValidation] = useState<ValidationResult>({valid: true});\n const [touched, setTouched] = useState(false);\n\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const runValidation = useCallback(\n (val: string) => {\n const result = validateEmail(val);\n setValidation(result);\n onValidationChange?.(result);\n return result;\n },\n [onValidationChange],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n if (validateOnChange && touched) {\n runValidation(e.target.value);\n }\n onChange?.(e);\n },\n [onChange, value, validateOnChange, touched, runValidation],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true);\n if (validateOnBlur && e.target.value) {\n runValidation(e.target.value);\n }\n onBlur?.(e);\n },\n [onBlur, validateOnBlur, runValidation],\n );\n\n const isError = error || (touched && !validation.valid);\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined);\n const isSuccess = !isError && success !== undefined ? success : (touched && validation.valid && currentValue.length > 0);\n\n const emailIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"1\" y=\"3\" width=\"14\" height=\"10\" rx=\"2\" />\n <path d=\"M1 5L8 9L15 5\" />\n </svg>\n );\n\n const validIcon = showValidIcon && isSuccess ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"var(--mineral-success)\" strokeWidth=\"2\">\n <path d=\"M3 8L6.5 11.5L13 4.5\" />\n </svg>\n ) : undefined;\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"email\"\n value={value}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder}\n startIcon={emailIcon}\n endIcon={validIcon}\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputPhoneProps} from './InputPhone.types';\nimport {Input} from '../Input';\nimport {validatePhone} from '../../../utils/validators';\nimport {formatPhone, stripNonDigits} from '../../../utils/formatters';\nimport type {ValidationResult} from '../../../utils/validators';\nimport styles from './InputPhone.module.css';\n\nexport const InputPhone = forwardRef<HTMLInputElement, InputPhoneProps>(function InputPhone(\n {\n countryCode = 'PL',\n showCountryCode = true,\n formatOnChange = true,\n validateOnBlur = true,\n onValidationChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n placeholder = '123 456 789',\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const [validation, setValidation] = useState<ValidationResult>({valid: true});\n const [touched, setTouched] = useState(false);\n\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = stripNonDigits(e.target.value);\n const formatted = formatOnChange ? formatPhone(digits, {countryCode}) : digits;\n\n if (value === undefined) {\n setInternalValue(formatted);\n }\n onValueChange?.(digits, formatted);\n onChange?.(e);\n },\n [onChange, value, formatOnChange, countryCode, onValueChange],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true);\n if (validateOnBlur && currentValue) {\n const result = validatePhone(stripNonDigits(currentValue), countryCode);\n setValidation(result);\n onValidationChange?.(result);\n }\n onBlur?.(e);\n },\n [onBlur, validateOnBlur, currentValue, countryCode, onValidationChange],\n );\n\n const COUNTRY_PREFIXES: Record<string, string> = {\n PL: '+48', DE: '+49', US: '+1', GB: '+44', FR: '+33', CZ: '+420', SK: '+421',\n };\n\n const prefix = showCountryCode ? (\n <span className={styles.prefix}>{COUNTRY_PREFIXES[countryCode.toUpperCase()] ?? `+${countryCode}`}</span>\n ) : undefined;\n\n const phoneIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M3 1.5h10a1 1 0 011 1v11a1 1 0 01-1 1H3a1 1 0 01-1-1v-11a1 1 0 011-1z\" />\n <line x1=\"5\" y1=\"12\" x2=\"11\" y2=\"12\" />\n </svg>\n );\n\n const isError = error || (touched && !validation.valid);\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined);\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"tel\"\n value={value !== undefined ? currentValue : undefined}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n placeholder={placeholder}\n startIcon={showCountryCode ? prefix : phoneIcon}\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputNameProps} from './InputName.types';\nimport {Input} from '../Input';\nimport {capitalizeWords} from '../../../utils/formatters';\nimport type {ValidationResult} from '../../../utils/validators';\n\nexport const InputName = forwardRef<HTMLInputElement, InputNameProps>(function InputName(\n {\n autoCapitalize = true,\n allowNumbers = false,\n allowSpecialChars = false,\n minWords,\n validateOnBlur = true,\n onValidationChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n placeholder = 'Jan Kowalski',\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const [validation, setValidation] = useState<ValidationResult>({valid: true});\n const [touched, setTouched] = useState(false);\n\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const filterValue = useCallback(\n (raw: string): string => {\n let filtered = raw;\n if (!allowNumbers) {\n filtered = filtered.replace(/\\d/g, '');\n }\n if (!allowSpecialChars) {\n // Allow letters, spaces, hyphens, apostrophes, Polish chars\n filtered = filtered.replace(/[^a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\\s'-]/g, '');\n }\n if (autoCapitalize) {\n filtered = capitalizeWords(filtered);\n }\n return filtered;\n },\n [allowNumbers, allowSpecialChars, autoCapitalize],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const filtered = filterValue(e.target.value);\n if (value === undefined) {\n setInternalValue(filtered);\n }\n onChange?.(e);\n },\n [onChange, value, filterValue],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true);\n if (validateOnBlur && currentValue) {\n const words = currentValue.trim().split(/\\s+/).filter(Boolean);\n if (minWords && words.length < minWords) {\n const result: ValidationResult = {\n valid: false,\n error: `Enter at least ${minWords} word${minWords > 1 ? 's' : ''}`,\n };\n setValidation(result);\n onValidationChange?.(result);\n } else {\n const result: ValidationResult = {valid: true};\n setValidation(result);\n onValidationChange?.(result);\n }\n }\n onBlur?.(e);\n },\n [onBlur, validateOnBlur, currentValue, minWords, onValidationChange],\n );\n\n const isError = error || (touched && !validation.valid);\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined);\n\n const userIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <circle cx=\"8\" cy=\"5\" r=\"3\" />\n <path d=\"M2 14c0-3 2.5-5 6-5s6 2 6 5\" />\n </svg>\n );\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"text\"\n value={value !== undefined ? currentValue : undefined}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n placeholder={placeholder}\n startIcon={userIcon}\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputIBANProps} from './InputIBAN.types';\nimport {Input} from '../Input';\nimport {validateIBAN} from '../../../utils/validators';\nimport {formatIBAN, unformatIBAN} from '../../../utils/formatters';\nimport type {ValidationResult} from '../../../utils/validators';\n\nexport const InputIBAN = forwardRef<HTMLInputElement, InputIBANProps>(function InputIBAN(\n {\n formatOnChange = true,\n validateOnBlur = true,\n showValidIcon = true,\n onValidationChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder = 'PL00 0000 0000 0000 0000 0000 0000',\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const [validation, setValidation] = useState<ValidationResult>({valid: true});\n const [touched, setTouched] = useState(false);\n\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n // Allow only alphanumeric + spaces\n let raw = e.target.value.replace(/[^a-zA-Z0-9\\s]/g, '').toUpperCase();\n const clean = raw.replace(/\\s/g, '');\n const formatted = formatOnChange ? formatIBAN(clean) : clean;\n\n if (value === undefined) {\n setInternalValue(formatted);\n }\n onValueChange?.(clean, formatted);\n onChange?.(e);\n },\n [onChange, value, formatOnChange, onValueChange],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true);\n if (validateOnBlur && currentValue) {\n const result = validateIBAN(unformatIBAN(currentValue));\n setValidation(result);\n onValidationChange?.(result);\n }\n onBlur?.(e);\n },\n [onBlur, validateOnBlur, currentValue, onValidationChange],\n );\n\n const isError = error || (touched && !validation.valid);\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined);\n const isSuccess = !isError && (success !== undefined ? success : (touched && validation.valid && currentValue.length > 0));\n\n const bankIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M1 14h14\" />\n <path d=\"M2 6h12\" />\n <path d=\"M8 2L1 6h14L8 2z\" />\n <path d=\"M3 6v8M6 6v8M10 6v8M13 6v8\" />\n </svg>\n );\n\n const validIcon = showValidIcon && isSuccess ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"var(--mineral-success)\" strokeWidth=\"2\">\n <path d=\"M3 8L6.5 11.5L13 4.5\" />\n </svg>\n ) : undefined;\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"text\"\n value={value !== undefined ? currentValue : undefined}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder}\n startIcon={bankIcon}\n endIcon={validIcon}\n maxLength={34 + 8} // max IBAN length + spaces\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputTaxIdProps, TaxIdType} from './InputTaxId.types';\nimport {Input} from '../Input';\nimport {validateNIP, validatePESEL, validateREGON} from '../../../utils/validators';\nimport {formatNIP, stripNonDigits} from '../../../utils/formatters';\nimport type {ValidationResult} from '../../../utils/validators';\n\nconst VALIDATORS: Record<TaxIdType, (v: string) => ValidationResult> = {\n NIP: validateNIP,\n PESEL: validatePESEL,\n REGON: validateREGON,\n};\n\nconst MAX_LENGTHS: Record<TaxIdType, number> = {\n NIP: 13, // 10 digits + 3 dashes\n PESEL: 11,\n REGON: 14,\n};\n\nconst PLACEHOLDERS: Record<TaxIdType, string> = {\n NIP: '123-456-78-19',\n PESEL: '00000000000',\n REGON: '000000000',\n};\n\nexport const InputTaxId = forwardRef<HTMLInputElement, InputTaxIdProps>(function InputTaxId(\n {\n taxIdType,\n formatOnChange = true,\n validateOnBlur = true,\n showValidIcon = true,\n onValidationChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder,\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const [validation, setValidation] = useState<ValidationResult>({valid: true});\n const [touched, setTouched] = useState(false);\n\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = stripNonDigits(e.target.value);\n const formatted = (formatOnChange && taxIdType === 'NIP') ? formatNIP(digits) : digits;\n\n if (value === undefined) {\n setInternalValue(formatted);\n }\n onValueChange?.(digits);\n onChange?.(e);\n },\n [onChange, value, formatOnChange, taxIdType, onValueChange],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true);\n if (validateOnBlur && currentValue) {\n const validator = VALIDATORS[taxIdType];\n const result = validator(stripNonDigits(currentValue));\n setValidation(result);\n onValidationChange?.(result);\n }\n onBlur?.(e);\n },\n [onBlur, validateOnBlur, currentValue, taxIdType, onValidationChange],\n );\n\n const isError = error || (touched && !validation.valid);\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined);\n const isSuccess = !isError && (success !== undefined ? success : (touched && validation.valid && currentValue.length > 0));\n\n const idIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"1\" y=\"3\" width=\"14\" height=\"10\" rx=\"2\" />\n <line x1=\"4\" y1=\"7\" x2=\"8\" y2=\"7\" />\n <line x1=\"4\" y1=\"10\" x2=\"12\" y2=\"10\" />\n </svg>\n );\n\n const validIcon = showValidIcon && isSuccess ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"var(--mineral-success)\" strokeWidth=\"2\">\n <path d=\"M3 8L6.5 11.5L13 4.5\" />\n </svg>\n ) : undefined;\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n value={value !== undefined ? currentValue : undefined}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder ?? PLACEHOLDERS[taxIdType]}\n startIcon={idIcon}\n endIcon={validIcon}\n maxLength={MAX_LENGTHS[taxIdType]}\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputCurrencyProps} from './InputCurrency.types';\nimport {Input} from '../Input';\nimport {formatCurrency, parseCurrencyToNumber} from '../../../utils/formatters';\nimport styles from './InputCurrency.module.css';\n\nexport const InputCurrency = forwardRef<HTMLInputElement, InputCurrencyProps>(function InputCurrency(\n {\n currency,\n currencySymbol,\n currencyPosition = 'end',\n decimalSeparator = ',',\n thousandSeparator = ' ',\n precision = 2,\n min,\n max,\n allowNegative = false,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n placeholder = '0,00',\n startIcon,\n endIcon,\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const symbol = currencySymbol ?? currency ?? '';\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n // Allow digits, one decimal separator, minus\n let filtered = '';\n let hasDecimal = false;\n for (const ch of raw) {\n if (ch >= '0' && ch <= '9') {\n filtered += ch;\n } else if ((ch === ',' || ch === '.') && !hasDecimal) {\n filtered += decimalSeparator;\n hasDecimal = true;\n } else if (ch === '-' && allowNegative && filtered.length === 0) {\n filtered += '-';\n }\n }\n\n const formatted = formatCurrency(filtered, {decimalSeparator, thousandSeparator, precision});\n\n if (value === undefined) {\n setInternalValue(formatted);\n }\n\n const num = parseCurrencyToNumber(formatted, thousandSeparator, decimalSeparator);\n onValueChange?.(num);\n onChange?.(e);\n },\n [onChange, value, decimalSeparator, thousandSeparator, precision, allowNegative, onValueChange],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n // Clamp and pad decimals on blur\n let num = parseCurrencyToNumber(currentValue, thousandSeparator, decimalSeparator);\n if (num !== null) {\n if (min !== undefined && num < min) num = min;\n if (max !== undefined && num > max) num = max;\n const fixed = num.toFixed(precision).replace('.', decimalSeparator);\n const formatted = formatCurrency(fixed, {decimalSeparator, thousandSeparator, precision});\n if (value === undefined) {\n setInternalValue(formatted);\n }\n onValueChange?.(num);\n }\n onBlur?.(e);\n },\n [currentValue, min, max, precision, decimalSeparator, thousandSeparator, value, onValueChange, onBlur],\n );\n\n const symbolEl = symbol ? (\n <span className={styles.symbol}>{symbol}</span>\n ) : undefined;\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n value={value !== undefined ? currentValue : undefined}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n startIcon={currencyPosition === 'start' ? symbolEl : startIcon}\n endIcon={currencyPosition === 'end' ? symbolEl : endIcon}\n />\n );\n});\n","import {useState, useRef, useCallback, useMemo} from 'react';\nimport type {SelectProps, SelectOption} from './Select.types';\nimport {Popover} from '../../primitives/Popover';\nimport {cn} from '../../../utils/cn';\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav';\nimport styles from './Select.module.css';\n\nexport function Select({\n options,\n value,\n defaultValue,\n onChange,\n multiple = false,\n searchable = false,\n placeholder = 'Select...',\n disabled = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n loading = false,\n clearable = false,\n maxHeight = 300,\n noOptionsText = 'No options',\n renderOption,\n renderValue,\n className,\n style,\n}: SelectProps) {\n const [open, setOpen] = useState(false);\n const [internalValue, setInternalValue] = useState<string | string[]>(defaultValue ?? (multiple ? [] : ''));\n const [search, setSearch] = useState('');\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const currentValue = value !== undefined ? value : internalValue;\n const hasError = error || !!errorText;\n\n const selectedValues = useMemo(() => {\n if (Array.isArray(currentValue)) return currentValue;\n return currentValue ? [currentValue] : [];\n }, [currentValue]);\n\n const selectedOptions = useMemo(\n () => options.filter((o) => selectedValues.includes(o.value)),\n [options, selectedValues],\n );\n\n const filteredOptions = useMemo(() => {\n if (!searchable || !search) return options;\n const lower = search.toLowerCase();\n return options.filter((o) => o.label.toLowerCase().includes(lower));\n }, [options, searchable, search]);\n\n // Group options\n const groupedOptions = useMemo(() => {\n const groups = new Map<string, SelectOption[]>();\n for (const opt of filteredOptions) {\n const key = opt.group ?? '';\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key)!.push(opt);\n }\n return groups;\n }, [filteredOptions]);\n\n const flatFiltered = filteredOptions;\n\n const handleSelect = useCallback(\n (index: number) => {\n const opt = flatFiltered[index];\n if (!opt || opt.disabled) return;\n\n if (multiple) {\n const arr = Array.isArray(currentValue) ? currentValue : [];\n const newVal = arr.includes(opt.value)\n ? arr.filter((v) => v !== opt.value)\n : [...arr, opt.value];\n if (value === undefined) setInternalValue(newVal);\n onChange?.(newVal);\n } else {\n if (value === undefined) setInternalValue(opt.value);\n onChange?.(opt.value);\n setOpen(false);\n setSearch('');\n }\n },\n [flatFiltered, multiple, currentValue, value, onChange],\n );\n\n const {activeIndex, setActiveIndex, resetIndex, onKeyDown} = useKeyboardNav({\n itemCount: flatFiltered.length,\n onSelect: handleSelect,\n onClose: () => {\n setOpen(false);\n setSearch('');\n },\n isOpen: open,\n });\n\n const handleTriggerClick = useCallback(() => {\n if (disabled) return;\n setOpen((v) => !v);\n resetIndex();\n }, [disabled, resetIndex]);\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n const empty = multiple ? [] : '';\n if (value === undefined) setInternalValue(empty);\n onChange?.(empty);\n },\n [multiple, value, onChange],\n );\n\n const displayValue = useMemo(() => {\n if (renderValue && selectedOptions.length > 0) {\n return renderValue(multiple ? selectedOptions : selectedOptions[0]);\n }\n if (multiple && selectedOptions.length > 0) {\n return (\n <span className={styles.tags}>\n {selectedOptions.map((o) => (\n <span key={o.value} className={styles.tag}>{o.label}</span>\n ))}\n </span>\n );\n }\n if (!multiple && selectedOptions.length > 0) {\n return selectedOptions[0].label;\n }\n return <span className={styles.placeholder}>{placeholder}</span>;\n }, [selectedOptions, multiple, renderValue, placeholder]);\n\n return (\n <div\n className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn(\n styles.label,\n open && styles.labelFocused,\n hasError && styles.labelError,\n required && styles.required,\n )}\n >\n {label}\n </label>\n )}\n\n <div\n ref={triggerRef}\n className={cn(\n styles.trigger,\n styles[variant],\n styles[size],\n open && styles.focused,\n hasError && styles.triggerError,\n disabled && styles.disabled,\n )}\n onClick={handleTriggerClick}\n onKeyDown={onKeyDown as unknown as React.KeyboardEventHandler}\n tabIndex={disabled ? -1 : 0}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-invalid={hasError || undefined}\n id={id}\n >\n <span className={styles.value}>{displayValue}</span>\n\n {loading && <span className={styles.spinner} />}\n\n {clearable && selectedValues.length > 0 && !loading && !disabled && (\n <button\n type=\"button\"\n className={styles.clearBtn}\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear selection\"\n >\n ✕\n </button>\n )}\n\n <span className={cn(styles.arrow, open && styles.arrowOpen)}>▾</span>\n </div>\n\n {/* Hidden input for form submission */}\n {name && (\n <input type=\"hidden\" name={name} value={Array.isArray(currentValue) ? currentValue.join(',') : currentValue} />\n )}\n\n <Popover\n open={open}\n anchorRef={triggerRef}\n onClose={() => {\n setOpen(false);\n setSearch('');\n }}\n matchWidth\n placement=\"bottom-start\"\n >\n <div style={{maxHeight}} className={styles.dropdown}>\n {searchable && (\n <div className={styles.searchBox}>\n <input\n type=\"text\"\n className={styles.searchInput}\n placeholder=\"Search...\"\n value={search}\n onChange={(e) => {\n setSearch(e.target.value);\n setActiveIndex(0);\n }}\n onKeyDown={onKeyDown as unknown as React.KeyboardEventHandler}\n autoFocus\n />\n </div>\n )}\n\n {flatFiltered.length === 0 ? (\n <div className={styles.noOptions}>{noOptionsText}</div>\n ) : (\n <div className={styles.optionsList} role=\"listbox\">\n {[...groupedOptions.entries()].map(([group, opts]) => (\n <div key={group}>\n {group && <div className={styles.groupHeader}>{group}</div>}\n {opts.map((opt) => {\n const flatIndex = flatFiltered.indexOf(opt);\n const isActive = flatIndex === activeIndex;\n const isSelected = selectedValues.includes(opt.value);\n return (\n <div\n key={opt.value}\n className={cn(\n styles.option,\n isActive && styles.optionActive,\n isSelected && styles.optionSelected,\n opt.disabled && styles.optionDisabled,\n )}\n onClick={() => !opt.disabled && handleSelect(flatIndex)}\n onMouseEnter={() => setActiveIndex(flatIndex)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={opt.disabled}\n >\n {multiple && (\n <span className={cn(styles.checkbox, isSelected && styles.checkboxChecked)}>\n {isSelected && '✓'}\n </span>\n )}\n {renderOption\n ? renderOption(opt, isActive, isSelected)\n : opt.label\n }\n </div>\n );\n })}\n </div>\n ))}\n </div>\n )}\n </div>\n </Popover>\n\n {(errorText || helperText) && (\n <div className={styles.bottomRow}>\n {errorText ? (\n <span className={styles.errorTextMsg} role=\"alert\">{errorText}</span>\n ) : (\n <span className={styles.helperText}>{helperText}</span>\n )}\n </div>\n )}\n </div>\n );\n}\n","import {useState, useRef, useCallback, useMemo} from 'react';\nimport type {AutocompleteProps} from './Autocomplete.types';\nimport {Popover} from '../../primitives/Popover';\nimport {cn} from '../../../utils/cn';\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav';\nimport {useDebouncedCallback} from '../../../utils/useDebounce';\nimport styles from './Autocomplete.module.css';\n\nfunction defaultGetLabel<T>(option: T): string {\n if (typeof option === 'string') return option;\n return String(option);\n}\n\nfunction defaultGetValue<T>(option: T): string {\n if (typeof option === 'string') return option;\n return String(option);\n}\n\nfunction defaultFilter<T>(options: T[], input: string, getLabel: (o: T) => string): T[] {\n if (!input) return options;\n const lower = input.toLowerCase();\n return options.filter((o) => getLabel(o).toLowerCase().includes(lower));\n}\n\nexport function Autocomplete<T = string>({\n options,\n value,\n onChange,\n getOptionLabel = defaultGetLabel,\n getOptionValue = defaultGetValue,\n filterOptions,\n multiple = false,\n freeSolo = false,\n debounceMs = 0,\n onInputChange,\n loading = false,\n loadingText = 'Loading...',\n noOptionsText = 'No options',\n placeholder = 'Type to search...',\n disabled = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n fullWidth = false,\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n clearable = false,\n maxHeight = 300,\n renderOption,\n renderTags,\n className,\n style,\n}: AutocompleteProps<T>) {\n const [open, setOpen] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const wrapperRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const hasError = error || !!errorText;\n\n const selectedValues = useMemo(() => {\n if (value === undefined) return [];\n return Array.isArray(value) ? value : [value];\n }, [value]);\n\n const filtered = useMemo(() => {\n if (filterOptions) return filterOptions(options, inputValue);\n return defaultFilter(options, inputValue, getOptionLabel);\n }, [options, inputValue, filterOptions, getOptionLabel]);\n\n const debouncedInputChange = useDebouncedCallback(\n (val: string) => onInputChange?.(val),\n debounceMs,\n );\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n debouncedInputChange(e.target.value);\n if (!open) setOpen(true);\n },\n [open, debouncedInputChange],\n );\n\n const handleSelect = useCallback(\n (index: number) => {\n const opt = filtered[index];\n if (!opt) return;\n\n if (multiple) {\n const arr = [...selectedValues];\n const val = getOptionValue(opt);\n const existIdx = arr.findIndex((v) => getOptionValue(v) === val);\n if (existIdx >= 0) {\n arr.splice(existIdx, 1);\n } else {\n arr.push(opt);\n }\n onChange?.(arr);\n setInputValue('');\n } else {\n onChange?.(opt);\n setInputValue(getOptionLabel(opt));\n setOpen(false);\n }\n inputRef.current?.focus();\n },\n [filtered, multiple, selectedValues, getOptionValue, getOptionLabel, onChange],\n );\n\n const handleRemoveTag = useCallback(\n (index: number) => {\n const arr = [...selectedValues];\n arr.splice(index, 1);\n onChange?.(multiple ? arr : arr[0] ?? ('' as unknown as T));\n },\n [selectedValues, onChange, multiple],\n );\n\n const {activeIndex, setActiveIndex, resetIndex, onKeyDown: navKeyDown} = useKeyboardNav({\n itemCount: filtered.length,\n onSelect: handleSelect,\n onClose: () => setOpen(false),\n isOpen: open,\n });\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && freeSolo && activeIndex < 0 && inputValue) {\n onChange?.(inputValue as unknown as T);\n setOpen(false);\n return;\n }\n // Backspace removes last tag in multiple\n if (e.key === 'Backspace' && multiple && !inputValue && selectedValues.length > 0) {\n handleRemoveTag(selectedValues.length - 1);\n return;\n }\n navKeyDown(e as unknown as React.KeyboardEvent<Element>);\n },\n [freeSolo, activeIndex, inputValue, multiple, selectedValues, onChange, navKeyDown, handleRemoveTag],\n );\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n setInputValue('');\n onChange?.(multiple ? ([] as unknown as T) : ('' as unknown as T));\n inputRef.current?.focus();\n },\n [multiple, onChange],\n );\n\n return (\n <div\n className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn(\n styles.label,\n open && styles.labelFocused,\n hasError && styles.labelError,\n required && styles.required,\n )}\n >\n {label}\n </label>\n )}\n\n <div\n ref={wrapperRef}\n className={cn(\n styles.inputWrapper,\n styles[variant],\n styles[size],\n open && styles.focused,\n hasError && styles.inputError,\n disabled && styles.disabled,\n )}\n onClick={() => inputRef.current?.focus()}\n >\n {multiple && selectedValues.length > 0 && (\n renderTags ? renderTags(selectedValues, handleRemoveTag) : (\n <span className={styles.tags}>\n {selectedValues.map((v, i) => (\n <span key={getOptionValue(v)} className={styles.tag}>\n {getOptionLabel(v)}\n <button\n type=\"button\"\n className={styles.tagRemove}\n onClick={(e) => {\n e.stopPropagation();\n handleRemoveTag(i);\n }}\n tabIndex={-1}\n >\n ✕\n </button>\n </span>\n ))}\n </span>\n )\n )}\n\n <input\n ref={inputRef}\n type=\"text\"\n className={styles.input}\n value={inputValue}\n onChange={handleInputChange}\n onFocus={() => {\n setOpen(true);\n resetIndex();\n }}\n onKeyDown={handleKeyDown}\n placeholder={selectedValues.length > 0 ? '' : placeholder}\n disabled={disabled}\n id={id}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-invalid={hasError || undefined}\n autoComplete=\"off\"\n />\n\n {loading && <span className={styles.spinner} />}\n\n {clearable && (selectedValues.length > 0 || inputValue) && !loading && !disabled && (\n <button\n type=\"button\"\n className={styles.clearBtn}\n onClick={handleClear}\n tabIndex={-1}\n >\n ✕\n </button>\n )}\n </div>\n\n {name && (\n <input\n type=\"hidden\"\n name={name}\n value={selectedValues.map(getOptionValue).join(',')}\n />\n )}\n\n <Popover\n open={open && (filtered.length > 0 || loading)}\n anchorRef={wrapperRef}\n onClose={() => setOpen(false)}\n matchWidth\n placement=\"bottom-start\"\n >\n <div style={{maxHeight}} className={styles.dropdown}>\n {loading ? (\n <div className={styles.loadingMsg}>{loadingText}</div>\n ) : filtered.length === 0 ? (\n <div className={styles.noOptions}>{noOptionsText}</div>\n ) : (\n <div className={styles.optionsList} role=\"listbox\">\n {filtered.map((opt, i) => {\n const isActive = i === activeIndex;\n const isSelected = selectedValues.some(\n (v) => getOptionValue(v) === getOptionValue(opt),\n );\n return (\n <div\n key={getOptionValue(opt)}\n className={cn(\n styles.option,\n isActive && styles.optionActive,\n isSelected && styles.optionSelected,\n )}\n onClick={() => handleSelect(i)}\n onMouseEnter={() => setActiveIndex(i)}\n role=\"option\"\n aria-selected={isSelected}\n >\n {renderOption ? renderOption(opt, isActive) : getOptionLabel(opt)}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </Popover>\n\n {(errorText || helperText) && (\n <div className={styles.bottomRow}>\n {errorText ? (\n <span className={styles.errorTextMsg} role=\"alert\">{errorText}</span>\n ) : (\n <span className={styles.helperText}>{helperText}</span>\n )}\n </div>\n )}\n </div>\n );\n}\n","import {useState, useRef, useCallback, useMemo} from 'react';\nimport type {DatePickerProps} from './DatePicker.types';\nimport {Popover} from '../../primitives/Popover';\nimport {cn} from '../../../utils/cn';\nimport {\n formatDate, parseDate, daysInMonth, firstDayOfMonth,\n isSameDay, isDateInRange, getDayNames, getMonthNames, addMonths, stripTime,\n} from '../../../utils/dateUtils';\nimport styles from './DatePicker.module.css';\n\nfunction toDate(val: Date | string | undefined): Date | null {\n if (!val) return null;\n if (val instanceof Date) return val;\n const d = new Date(val);\n return isNaN(d.getTime()) ? null : d;\n}\n\nexport function DatePicker({\n value,\n defaultValue,\n onChange,\n format = 'dd.MM.yyyy',\n locale = 'pl',\n min,\n max,\n disabledDates,\n placeholder,\n disabled = false,\n readOnly = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n clearable = false,\n inline = false,\n showTodayButton = true,\n firstDayOfWeek = 1,\n fullWidth = false,\n className,\n style,\n}: DatePickerProps) {\n const [open, setOpen] = useState(false);\n const [internalDate, setInternalDate] = useState<Date | null>(toDate(defaultValue));\n const [inputText, setInputText] = useState('');\n const [viewDate, setViewDate] = useState(() => {\n const d = toDate(value) ?? toDate(defaultValue) ?? new Date();\n return new Date(d.getFullYear(), d.getMonth(), 1);\n });\n const [viewMode, setViewMode] = useState<'days' | 'months' | 'years'>('days');\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const selectedDate = toDate(value) ?? internalDate;\n const minDate = toDate(min);\n const maxDate = toDate(max);\n const hasError = error || !!errorText;\n\n const displayText = useMemo(() => {\n if (inputText) return inputText;\n return selectedDate ? formatDate(selectedDate, format) : '';\n }, [selectedDate, format, inputText]);\n\n const dayNames = getDayNames(locale);\n const monthNames = getMonthNames(locale);\n\n const isDisabled = useCallback(\n (date: Date): boolean => {\n if (!isDateInRange(date, minDate, maxDate)) return true;\n if (Array.isArray(disabledDates)) {\n return disabledDates.some((d) => isSameDay(d, date));\n }\n if (typeof disabledDates === 'function') {\n return disabledDates(date);\n }\n return false;\n },\n [minDate, maxDate, disabledDates],\n );\n\n const handleSelectDate = useCallback(\n (date: Date) => {\n if (isDisabled(date)) return;\n if (value === undefined) setInternalDate(date);\n setInputText('');\n onChange?.(date);\n if (!inline) setOpen(false);\n },\n [value, onChange, inline, isDisabled],\n );\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputText(e.target.value);\n },\n [],\n );\n\n const handleInputBlur = useCallback(() => {\n if (inputText) {\n const parsed = parseDate(inputText, format);\n if (parsed && !isDisabled(parsed)) {\n handleSelectDate(parsed);\n }\n setInputText('');\n }\n }, [inputText, format, isDisabled, handleSelectDate]);\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (value === undefined) setInternalDate(null);\n setInputText('');\n onChange?.(null);\n },\n [value, onChange],\n );\n\n const handleToday = useCallback(() => {\n const today = stripTime(new Date());\n handleSelectDate(today);\n setViewDate(new Date(today.getFullYear(), today.getMonth(), 1));\n }, [handleSelectDate]);\n\n // === Calendar grid ===\n const calendarDays = useMemo(() => {\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n const totalDays = daysInMonth(year, month);\n let startDay = firstDayOfMonth(year, month); // 0=Sun\n\n // Adjust for firstDayOfWeek\n if (firstDayOfWeek === 1) {\n startDay = startDay === 0 ? 6 : startDay - 1;\n }\n\n const days: Array<{date: Date; currentMonth: boolean}> = [];\n\n // Previous month fill\n const prevMonth = month === 0 ? 11 : month - 1;\n const prevYear = month === 0 ? year - 1 : year;\n const prevDays = daysInMonth(prevYear, prevMonth);\n for (let i = startDay - 1; i >= 0; i--) {\n days.push({date: new Date(prevYear, prevMonth, prevDays - i), currentMonth: false});\n }\n\n // Current month\n for (let d = 1; d <= totalDays; d++) {\n days.push({date: new Date(year, month, d), currentMonth: true});\n }\n\n // Next month fill\n const remaining = 42 - days.length;\n const nextMonth = month === 11 ? 0 : month + 1;\n const nextYear = month === 11 ? year + 1 : year;\n for (let d = 1; d <= remaining; d++) {\n days.push({date: new Date(nextYear, nextMonth, d), currentMonth: false});\n }\n\n return days;\n }, [viewDate, firstDayOfWeek]);\n\n const today = stripTime(new Date());\n\n const renderCalendar = () => (\n <div className={styles.calendar}>\n {/* Header */}\n <div className={styles.calendarHeader}>\n <button\n type=\"button\"\n className={styles.navBtn}\n onClick={() => setViewDate(addMonths(viewDate, -1))}\n aria-label=\"Previous month\"\n >\n ‹\n </button>\n <button\n type=\"button\"\n className={styles.headerTitle}\n onClick={() => setViewMode(viewMode === 'days' ? 'months' : 'days')}\n >\n {monthNames[viewDate.getMonth()]} {viewDate.getFullYear()}\n </button>\n <button\n type=\"button\"\n className={styles.navBtn}\n onClick={() => setViewDate(addMonths(viewDate, 1))}\n aria-label=\"Next month\"\n >\n ›\n </button>\n </div>\n\n {viewMode === 'days' && (\n <>\n {/* Day names */}\n <div className={styles.dayNames}>\n {dayNames.map((d) => (\n <span key={d} className={styles.dayName}>{d}</span>\n ))}\n </div>\n\n {/* Day grid */}\n <div className={styles.dayGrid}>\n {calendarDays.map(({date, currentMonth}, i) => {\n const isSelected = selectedDate && isSameDay(date, selectedDate);\n const isToday = isSameDay(date, today);\n const isDis = isDisabled(date);\n\n return (\n <button\n key={i}\n type=\"button\"\n className={cn(\n styles.day,\n !currentMonth && styles.dayOtherMonth,\n isToday && styles.dayToday,\n isSelected && styles.daySelected,\n isDis && styles.dayDisabled,\n )}\n onClick={() => handleSelectDate(date)}\n disabled={isDis}\n tabIndex={-1}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </>\n )}\n\n {viewMode === 'months' && (\n <div className={styles.monthGrid}>\n {monthNames.map((m, i) => (\n <button\n key={m}\n type=\"button\"\n className={cn(\n styles.monthCell,\n viewDate.getMonth() === i && styles.monthSelected,\n )}\n onClick={() => {\n setViewDate(new Date(viewDate.getFullYear(), i, 1));\n setViewMode('days');\n }}\n >\n {m.slice(0, 3)}\n </button>\n ))}\n </div>\n )}\n\n {showTodayButton && (\n <div className={styles.footer}>\n <button type=\"button\" className={styles.todayBtn} onClick={handleToday}>\n Today\n </button>\n </div>\n )}\n </div>\n );\n\n const calendarIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"1\" y=\"3\" width=\"14\" height=\"12\" rx=\"2\" />\n <line x1=\"1\" y1=\"7\" x2=\"15\" y2=\"7\" />\n <line x1=\"5\" y1=\"1\" x2=\"5\" y2=\"4\" />\n <line x1=\"11\" y1=\"1\" x2=\"11\" y2=\"4\" />\n </svg>\n );\n\n if (inline) {\n return (\n <div className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)} style={style}>\n {label && (\n <label className={cn(styles.label, hasError && styles.labelError, required && styles.required)}>\n {label}\n </label>\n )}\n {renderCalendar()}\n </div>\n );\n }\n\n return (\n <div className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)} style={style}>\n {label && (\n <label\n htmlFor={id}\n className={cn(\n styles.label,\n open && styles.labelFocused,\n hasError && styles.labelError,\n required && styles.required,\n )}\n >\n {label}\n </label>\n )}\n\n <div\n ref={triggerRef}\n className={cn(\n styles.trigger,\n styles[variant],\n styles[size],\n open && styles.focused,\n hasError && styles.triggerError,\n disabled && styles.disabled,\n )}\n onClick={() => !disabled && !readOnly && setOpen(true)}\n >\n <span className={styles.icon}>{calendarIcon}</span>\n <input\n type=\"text\"\n className={styles.input}\n value={displayText}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n placeholder={placeholder ?? format.toLowerCase()}\n disabled={disabled}\n readOnly={readOnly}\n id={id}\n aria-invalid={hasError || undefined}\n />\n {clearable && selectedDate && !disabled && (\n <button\n type=\"button\"\n className={styles.clearBtn}\n onClick={handleClear}\n tabIndex={-1}\n >\n ✕\n </button>\n )}\n </div>\n\n {name && selectedDate && (\n <input type=\"hidden\" name={name} value={selectedDate.toISOString().split('T')[0]} />\n )}\n\n <Popover\n open={open}\n anchorRef={triggerRef}\n onClose={() => setOpen(false)}\n placement=\"bottom-start\"\n >\n {renderCalendar()}\n </Popover>\n\n {(errorText || helperText) && (\n <div className={styles.bottomRow}>\n {errorText ? (\n <span className={styles.errorTextMsg} role=\"alert\">{errorText}</span>\n ) : (\n <span className={styles.helperText}>{helperText}</span>\n )}\n </div>\n )}\n </div>\n );\n}\n","import {useState, useRef, useCallback, useMemo, useEffect} from 'react';\nimport type {TimePickerProps} from './TimePicker.types';\nimport {Popover} from '../../primitives/Popover';\nimport {cn} from '../../../utils/cn';\nimport {formatTime, parseTime} from '../../../utils/dateUtils';\nimport styles from './TimePicker.module.css';\n\nexport function TimePicker({\n value,\n defaultValue,\n onChange,\n format = '24h',\n showSeconds = false,\n minuteStep = 1,\n min,\n max,\n placeholder,\n disabled = false,\n readOnly = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n clearable = false,\n fullWidth = false,\n className,\n style,\n}: TimePickerProps) {\n const [open, setOpen] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const currentValue = value !== undefined ? value : internalValue;\n const hasError = error || !!errorText;\n const parsed = parseTime(currentValue);\n\n const hours = useMemo(() => {\n const arr: number[] = [];\n const maxH = format === '12h' ? 12 : 23;\n const startH = format === '12h' ? 1 : 0;\n for (let i = startH; i <= maxH; i++) arr.push(i);\n return arr;\n }, [format]);\n\n const minutes = useMemo(() => {\n const arr: number[] = [];\n for (let i = 0; i < 60; i += minuteStep) arr.push(i);\n return arr;\n }, [minuteStep]);\n\n const seconds = useMemo(() => {\n if (!showSeconds) return [];\n const arr: number[] = [];\n for (let i = 0; i < 60; i++) arr.push(i);\n return arr;\n }, [showSeconds]);\n\n const handleSelect = useCallback(\n (h: number, m: number, s: number = 0) => {\n const time = formatTime(h, m, s, showSeconds);\n if (value === undefined) setInternalValue(time);\n onChange?.(time);\n },\n [value, onChange, showSeconds],\n );\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n if (value === undefined) setInternalValue(raw);\n },\n [value],\n );\n\n const handleInputBlur = useCallback(() => {\n const p = parseTime(currentValue);\n if (p) {\n const time = formatTime(p.hours, p.minutes, p.seconds, showSeconds);\n if (value === undefined) setInternalValue(time);\n onChange?.(time);\n }\n }, [currentValue, showSeconds, value, onChange]);\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (value === undefined) setInternalValue('');\n onChange?.('');\n },\n [value, onChange],\n );\n\n const clockIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" />\n <line x1=\"8\" y1=\"4\" x2=\"8\" y2=\"8\" />\n <line x1=\"8\" y1=\"8\" x2=\"11\" y2=\"10\" />\n </svg>\n );\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n\n return (\n <div className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)} style={style}>\n {label && (\n <label\n htmlFor={id}\n className={cn(\n styles.label,\n open && styles.labelFocused,\n hasError && styles.labelError,\n required && styles.required,\n )}\n >\n {label}\n </label>\n )}\n\n <div\n ref={triggerRef}\n className={cn(\n styles.trigger,\n styles[variant],\n styles[size],\n open && styles.focused,\n hasError && styles.triggerError,\n disabled && styles.disabled,\n )}\n onClick={() => !disabled && !readOnly && setOpen(true)}\n >\n <span className={styles.icon}>{clockIcon}</span>\n <input\n type=\"text\"\n className={styles.input}\n value={currentValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n placeholder={placeholder ?? (showSeconds ? 'HH:MM:SS' : 'HH:MM')}\n disabled={disabled}\n readOnly={readOnly}\n id={id}\n aria-invalid={hasError || undefined}\n />\n {clearable && currentValue && !disabled && (\n <button type=\"button\" className={styles.clearBtn} onClick={handleClear} tabIndex={-1}>✕</button>\n )}\n </div>\n\n {name && <input type=\"hidden\" name={name} value={currentValue} />}\n\n <Popover\n open={open}\n anchorRef={triggerRef}\n onClose={() => setOpen(false)}\n placement=\"bottom-start\"\n >\n <div className={styles.columns}>\n <TimeColumn\n items={hours}\n selected={parsed?.hours}\n onSelect={(h) => handleSelect(h, parsed?.minutes ?? 0, parsed?.seconds ?? 0)}\n label=\"Hr\"\n />\n <TimeColumn\n items={minutes}\n selected={parsed?.minutes}\n onSelect={(m) => handleSelect(parsed?.hours ?? 0, m, parsed?.seconds ?? 0)}\n label=\"Min\"\n />\n {showSeconds && (\n <TimeColumn\n items={seconds}\n selected={parsed?.seconds}\n onSelect={(s) => handleSelect(parsed?.hours ?? 0, parsed?.minutes ?? 0, s)}\n label=\"Sec\"\n />\n )}\n </div>\n </Popover>\n\n {(errorText || helperText) && (\n <div className={styles.bottomRow}>\n {errorText ? (\n <span className={styles.errorTextMsg} role=\"alert\">{errorText}</span>\n ) : (\n <span className={styles.helperText}>{helperText}</span>\n )}\n </div>\n )}\n </div>\n );\n}\n\n// === TimeColumn sub-component ===\n\nfunction TimeColumn({\n items,\n selected,\n onSelect,\n label,\n}: {\n items: number[];\n selected?: number;\n onSelect: (val: number) => void;\n label: string;\n}) {\n const listRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (selected !== undefined && listRef.current) {\n const el = listRef.current.querySelector(`[data-value=\"${selected}\"]`) as HTMLElement | null;\n if (el) {\n el.scrollIntoView({block: 'center', behavior: 'instant'});\n }\n }\n }, [selected]);\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n\n return (\n <div className={styles.column}>\n <div className={styles.columnLabel}>{label}</div>\n <div ref={listRef} className={styles.columnList}>\n {items.map((val) => (\n <button\n key={val}\n type=\"button\"\n data-value={val}\n className={cn(\n styles.columnItem,\n val === selected && styles.columnItemSelected,\n )}\n onClick={() => onSelect(val)}\n >\n {pad(val)}\n </button>\n ))}\n </div>\n </div>\n );\n}\n","import {createContext, useContext} from 'react';\nimport type {FormContextValue} from './Form.types';\n\nexport const FormContext = createContext<FormContextValue | null>(null);\n\nexport function useFormContext(): FormContextValue | null {\n return useContext(FormContext);\n}\n","import {useState, useRef, useCallback, useMemo} from 'react';\nimport type {FormProps, FieldRegistration, FormContextValue, FormHelpers} from './Form.types';\nimport {FormContext} from './FormContext';\nimport {validateRequired} from '../../../utils/validators';\nimport type {ValidationResult} from '../../../utils/validators';\n\nexport function Form({\n initialValues = {},\n onSubmit,\n onChange,\n validationMode = 'onBlur',\n children,\n className,\n style,\n noValidate = true,\n}: FormProps) {\n const [values, setValues] = useState<Record<string, unknown>>({...initialValues});\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const fieldsRef = useRef<Map<string, FieldRegistration>>(new Map());\n\n const registerField = useCallback((reg: FieldRegistration) => {\n fieldsRef.current.set(reg.name, reg);\n }, []);\n\n const unregisterField = useCallback((name: string) => {\n fieldsRef.current.delete(name);\n }, []);\n\n const validateFieldInternal = useCallback(\n (name: string, val?: unknown): ValidationResult => {\n const reg = fieldsRef.current.get(name);\n if (!reg) return {valid: true};\n\n const fieldValue = val !== undefined ? val : values[name];\n const strValue = fieldValue != null ? String(fieldValue) : '';\n\n // Required check\n if (reg.required) {\n const reqResult = validateRequired(strValue);\n if (!reqResult.valid) return reqResult;\n }\n\n // Custom validators\n if (reg.validate) {\n for (const validator of reg.validate) {\n const result = validator(strValue);\n if (!result.valid) return result;\n }\n }\n\n return {valid: true};\n },\n [values],\n );\n\n const validateField = useCallback(\n (name: string): ValidationResult => {\n const result = validateFieldInternal(name);\n setErrors((prev) => {\n if (result.valid) {\n const next = {...prev};\n delete next[name];\n return next;\n }\n return {...prev, [name]: result.error!};\n });\n return result;\n },\n [validateFieldInternal],\n );\n\n const validateAll = useCallback((): boolean => {\n let allValid = true;\n const newErrors: Record<string, string> = {};\n\n for (const [name] of fieldsRef.current) {\n const result = validateFieldInternal(name);\n if (!result.valid) {\n allValid = false;\n newErrors[name] = result.error!;\n }\n }\n\n setErrors(newErrors);\n // Mark all as touched\n const allTouched: Record<string, boolean> = {};\n for (const [name] of fieldsRef.current) {\n allTouched[name] = true;\n }\n setTouched(allTouched);\n\n return allValid;\n }, [validateFieldInternal]);\n\n const setFieldValue = useCallback(\n (name: string, val: unknown) => {\n setValues((prev) => {\n const next = {...prev, [name]: val};\n onChange?.(next);\n return next;\n });\n\n if (validationMode === 'onChange' && touched[name]) {\n // Defer validation to next tick so values are updated\n setTimeout(() => validateField(name), 0);\n }\n },\n [onChange, validationMode, touched, validateField],\n );\n\n const setFieldError = useCallback(\n (name: string, error: string) => {\n setErrors((prev) => ({...prev, [name]: error}));\n },\n [],\n );\n\n const setFieldTouched = useCallback(\n (name: string, isTouched: boolean) => {\n setTouched((prev) => ({...prev, [name]: isTouched}));\n if (validationMode === 'onBlur' && isTouched) {\n validateField(name);\n }\n },\n [validationMode, validateField],\n );\n\n const resetForm = useCallback(() => {\n setValues({...initialValues});\n setErrors({});\n setTouched({});\n setIsSubmitting(false);\n }, [initialValues]);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n if (isSubmitting) return;\n\n const valid = validateAll();\n if (!valid) return;\n\n setIsSubmitting(true);\n const helpers: FormHelpers = {\n setSubmitting: setIsSubmitting,\n resetForm,\n setFieldError,\n };\n\n try {\n await onSubmit?.(values, helpers);\n } finally {\n setIsSubmitting(false);\n }\n },\n [isSubmitting, validateAll, values, onSubmit, resetForm, setFieldError],\n );\n\n const ctx = useMemo<FormContextValue>(\n () => ({\n values,\n errors,\n touched,\n registerField,\n unregisterField,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n validateField,\n validateAll,\n resetForm,\n isSubmitting,\n }),\n [values, errors, touched, registerField, unregisterField, setFieldValue, setFieldError, setFieldTouched, validateField, validateAll, resetForm, isSubmitting],\n );\n\n return (\n <FormContext.Provider value={ctx}>\n <form\n onSubmit={handleSubmit}\n noValidate={noValidate}\n className={className}\n style={style}\n >\n {typeof children === 'function' ? children(ctx) : children}\n </form>\n </FormContext.Provider>\n );\n}\n","import {useEffect, useCallback} from 'react';\nimport {useFormContext} from './FormContext';\nimport type {ValidatorFn} from '../../../utils/validators';\n\nexport interface UseFormFieldOptions {\n validate?: ValidatorFn[];\n required?: boolean;\n}\n\nexport interface UseFormFieldReturn {\n value: unknown;\n error: string | undefined;\n touched: boolean;\n onChange: (value: unknown) => void;\n onBlur: () => void;\n}\n\nexport function useFormField(name: string, options?: UseFormFieldOptions): UseFormFieldReturn {\n const ctx = useFormContext();\n\n useEffect(() => {\n if (!ctx) return;\n ctx.registerField({\n name,\n validate: options?.validate,\n required: options?.required,\n });\n return () => ctx.unregisterField(name);\n }, [ctx, name, options?.validate, options?.required]);\n\n const onChange = useCallback(\n (val: unknown) => {\n ctx?.setFieldValue(name, val);\n },\n [ctx, name],\n );\n\n const onBlur = useCallback(() => {\n ctx?.setFieldTouched(name, true);\n }, [ctx, name]);\n\n return {\n value: ctx?.values[name] ?? '',\n error: ctx?.errors[name],\n touched: ctx?.touched[name] ?? false,\n onChange,\n onBlur,\n };\n}\n"],"names":["ThemeContext","createContext","themeToVarMap","MineralThemeProvider","theme","children","ref","useRef","useEffect","el","key","value","varName","jsx","useTheme","useContext","cn","classes","ok","fail","error","validateRequired","validateMinLength","min","validateMaxLength","max","validatePattern","pattern","message","validateRange","num","EMAIL_RE","validateEmail","PHONE_LENGTH","validatePhone","countryCode","digits","expected","IBAN_LENGTHS","mod97","numStr","remainder","i","validateIBAN","iban","expectedLength","ch","NIP_WEIGHTS","validateNIP","sum","checkDigit","PESEL_WEIGHTS","validatePESEL","REGON9_WEIGHTS","REGON14_WEIGHTS","validateREGON","weights","lastDigit","composeValidators","validators","validator","result","stripNonDigits","stripNonAlphanumeric","capitalizeWords","formatIBAN","unformatIBAN","PHONE_GROUPS","formatPhone","options","groups","_a","parts","pos","len","formatNIP","formatCurrency","decimalSeparator","thousandSeparator","precision","clean","intPart","decPart","isNegative","parseCurrencyToNumber","formatted","adjustCursorAfterFormat","oldValue","newValue","oldCursor","realCharsBefore","count","daysInMonth","year","month","firstDayOfMonth","isSameDay","a","b","isDateInRange","date","stripTime","addMonths","addYears","pad","n","formatDate","format","day","parseDate","dayIdx","monthIdx","yearIdx","DAY_NAMES_PL","DAY_NAMES_EN","MONTH_NAMES_PL","MONTH_NAMES_EN","getDayNames","locale","getMonthNames","parseTime","hours","minutes","seconds","formatTime","showSeconds","base","useDebounce","delay","debounced","setDebounced","useState","timer","useDebouncedCallback","callback","callbackRef","timerRef","useCallback","args","useClickOutside","handler","listener","e","useKeyboardNav","itemCount","onSelect","onClose","isOpen","loop","activeIndex","setActiveIndex","resetIndex","onKeyDown","prev","Portal","container","target","createPortal","Popover","open","anchorRef","placement","matchWidth","offset","className","style","popoverRef","position","setPosition","flipped","setFlipped","updatePosition","anchor","popover","viewport","isTop","isEnd","spaceBelow","spaceAbove","shouldFlip","showOnTop","top","left","handleKey","handleClick","styles","Checkbox","forwardRef","checked","defaultChecked","indeterminate","name","id","disabled","size","color","label","labelPosition","errorText","onChange","internalRef","inputRef","hasError","jsxs","RadioContext","useRadioGroup","Radio","group","resolvedName","resolvedDisabled","resolvedSize","resolvedColor","resolvedChecked","handleChange","RadioGroup","defaultValue","direction","internalValue","setInternalValue","currentValue","val","ctx","useMemo","Toggle","Input","type","placeholder","readOnly","required","autoFocus","autoComplete","inputMode","variant","fullWidth","rounded","helperText","startIcon","endIcon","clearable","success","maxLength","showCharCount","onFocus","onBlur","onClear","loading","inputClassName","labelClassName","focused","setFocused","hasContent","handleFocus","handleBlur","handleClear","input","containerClasses","Textarea","rows","autoResize","minRows","maxRows","textareaClassName","textareaRef","resolvedRef","adjustHeight","lineHeight","minH","maxH","newHeight","calcStrength","score","STRENGTH_LABELS","InputPassword","showToggle","showStrength","onStrengthChange","rest","visible","setVisible","strength","toggleIcon","v","clampValue","roundToPrecision","factor","InputNumber","step","showStepper","allowNegative","onValueChange","intervalRef","updateValue","newVal","increment","current","startHold","stopHold","filtered","clamped","handleKeyDown","stepper","InputSearch","debounceMs","onSearch","debouncedSearch","InputEmail","validateOnBlur","validateOnChange","showValidIcon","onValidationChange","validation","setValidation","touched","setTouched","runValidation","isError","resolvedErrorText","isSuccess","InputPhone","showCountryCode","formatOnChange","COUNTRY_PREFIXES","prefix","phoneIcon","InputName","autoCapitalize","allowNumbers","allowSpecialChars","minWords","filterValue","raw","words","InputIBAN","VALIDATORS","MAX_LENGTHS","PLACEHOLDERS","InputTaxId","taxIdType","idIcon","validIcon","InputCurrency","currency","currencySymbol","currencyPosition","symbol","hasDecimal","fixed","symbolEl","Select","multiple","searchable","maxHeight","noOptionsText","renderOption","renderValue","setOpen","search","setSearch","triggerRef","selectedValues","selectedOptions","o","filteredOptions","lower","groupedOptions","opt","flatFiltered","handleSelect","index","arr","handleTriggerClick","empty","displayValue","opts","flatIndex","isActive","isSelected","defaultGetLabel","option","defaultGetValue","defaultFilter","getLabel","Autocomplete","getOptionLabel","getOptionValue","filterOptions","freeSolo","onInputChange","loadingText","renderTags","inputValue","setInputValue","wrapperRef","debouncedInputChange","handleInputChange","existIdx","handleRemoveTag","navKeyDown","toDate","d","DatePicker","disabledDates","inline","showTodayButton","firstDayOfWeek","internalDate","setInternalDate","inputText","setInputText","viewDate","setViewDate","viewMode","setViewMode","selectedDate","minDate","maxDate","displayText","dayNames","monthNames","isDisabled","handleSelectDate","handleInputBlur","parsed","handleToday","today","calendarDays","totalDays","startDay","days","prevMonth","prevYear","prevDays","remaining","nextMonth","nextYear","renderCalendar","Fragment","currentMonth","isToday","isDis","m","calendarIcon","TimePicker","minuteStep","startH","h","s","time","p","clockIcon","TimeColumn","items","selected","listRef","FormContext","useFormContext","Form","initialValues","onSubmit","validationMode","noValidate","values","setValues","errors","setErrors","isSubmitting","setIsSubmitting","fieldsRef","registerField","reg","unregisterField","validateFieldInternal","fieldValue","strValue","reqResult","validateField","next","validateAll","allValid","newErrors","allTouched","setFieldValue","setFieldError","setFieldTouched","isTouched","resetForm","handleSubmit","helpers","useFormField"],"mappings":"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"}