@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/README.md +114 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +563 -0
- package/dist/index.js +2904 -173
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +15 -146
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","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.cjs","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","searchIcon","InputEmail","validateOnBlur","validateOnChange","showValidIcon","onValidationChange","validation","setValidation","touched","setTouched","runValidation","isError","resolvedErrorText","isSuccess","emailIcon","validIcon","InputPhone","showCountryCode","formatOnChange","COUNTRY_PREFIXES","prefix","phoneIcon","InputName","autoCapitalize","allowNumbers","allowSpecialChars","minWords","filterValue","raw","words","userIcon","InputIBAN","bankIcon","VALIDATORS","MAX_LENGTHS","PLACEHOLDERS","InputTaxId","taxIdType","idIcon","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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"}
|