@banzamel/mineralui 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/theme/ThemeProvider.tsx","../src/utils/cn.ts","../src/utils/validators.ts","../src/utils/formatters.ts","../src/utils/dateUtils.ts","../src/utils/useDebounce.ts","../src/utils/useClickOutside.ts","../src/utils/useKeyboardNav.ts","../src/components/primitives/Portal/Portal.tsx","../src/components/primitives/Popover/Popover.tsx","../src/components/controls/Checkbox/Checkbox.tsx","../src/components/controls/Radio/RadioContext.ts","../src/components/controls/Radio/Radio.tsx","../src/components/controls/Radio/RadioGroup.tsx","../src/components/controls/Toggle/Toggle.tsx","../src/components/inputs/Input/Input.tsx","../src/components/inputs/Textarea/Textarea.tsx","../src/components/inputs/InputPassword/InputPassword.tsx","../src/components/inputs/InputNumber/InputNumber.tsx","../src/components/inputs/InputSearch/InputSearch.tsx","../src/components/inputs/InputEmail/InputEmail.tsx","../src/components/inputs/InputPhone/InputPhone.tsx","../src/components/inputs/InputName/InputName.tsx","../src/components/inputs/InputIBAN/InputIBAN.tsx","../src/components/inputs/InputTaxId/InputTaxId.tsx","../src/components/inputs/InputCurrency/InputCurrency.tsx","../src/components/dropdowns/Select/Select.tsx","../src/components/dropdowns/Autocomplete/Autocomplete.tsx","../src/components/dropdowns/DatePicker/DatePicker.tsx","../src/components/dropdowns/TimePicker/TimePicker.tsx","../src/components/form/Form/FormContext.ts","../src/components/form/Form/Form.tsx","../src/components/form/Form/useFormField.ts"],"sourcesContent":["import { createContext, useContext, useEffect, useRef, type ReactNode } from 'react';\nimport type { MineralTheme } from './types';\n\nconst ThemeContext = createContext<MineralTheme>({});\n\nconst themeToVarMap: Record<keyof MineralTheme, string> = {\n primary: '--mineral-primary',\n primaryDark: '--mineral-primary-dark',\n primaryLight: '--mineral-primary-light',\n dark: '--mineral-dark',\n darkLight: '--mineral-dark-light',\n surface: '--mineral-surface',\n text: '--mineral-text',\n textSecondary: '--mineral-text-secondary',\n textHeading: '--mineral-text-heading',\n border: '--mineral-border',\n borderHover: '--mineral-border-hover',\n borderFocus: '--mineral-border-focus',\n success: '--mineral-success',\n error: '--mineral-error',\n warning: '--mineral-warning',\n info: '--mineral-info',\n fontFamily: '--mineral-font-family',\n radiusSm: '--mineral-radius-sm',\n radiusMd: '--mineral-radius-md',\n radiusLg: '--mineral-radius-lg',\n};\n\ninterface MineralThemeProviderProps {\n theme: MineralTheme;\n children: ReactNode;\n}\n\nexport function MineralThemeProvider({ theme, children }: MineralThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const el = ref.current;\n\n for (const [key, value] of Object.entries(theme)) {\n const varName = themeToVarMap[key as keyof MineralTheme];\n if (varName && value) {\n el.style.setProperty(varName, value);\n }\n }\n }, [theme]);\n\n return (\n <ThemeContext.Provider value={theme}>\n <div ref={ref}>{children}</div>\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme(): MineralTheme {\n return useContext(ThemeContext);\n}\n","/**\n * Łączy klasy CSS, odfiltrowując falsy wartości.\n * Lekki zamiennik clsx/classnames — zero dependencies.\n */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ');\n}\n","export interface ValidationResult {\n valid: boolean;\n error?: string;\n}\n\nexport type ValidatorFn = (value: string) => ValidationResult;\n\nconst ok: ValidationResult = {valid: true};\nconst fail = (error: string): ValidationResult => ({valid: false, error});\n\nexport function validateRequired(value: string): ValidationResult {\n return value.trim().length > 0 ? ok : fail('This field is required');\n}\n\nexport function validateMinLength(min: number): ValidatorFn {\n return (value: string) =>\n value.length >= min ? ok : fail(`Minimum ${min} characters`);\n}\n\nexport function validateMaxLength(max: number): ValidatorFn {\n return (value: string) =>\n value.length <= max ? ok : fail(`Maximum ${max} characters`);\n}\n\nexport function validatePattern(pattern: RegExp, message?: string): ValidatorFn {\n return (value: string) =>\n pattern.test(value) ? ok : fail(message ?? 'Invalid format');\n}\n\nexport function validateRange(min?: number, max?: number): ValidatorFn {\n return (value: string) => {\n const num = parseFloat(value);\n if (isNaN(num)) return fail('Must be a number');\n if (min !== undefined && num < min) return fail(`Minimum value is ${min}`);\n if (max !== undefined && num > max) return fail(`Maximum value is ${max}`);\n return ok;\n };\n}\n\n// === Email ===\n\nconst EMAIL_RE = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n\nexport function validateEmail(value: string): ValidationResult {\n if (!value) return ok;\n return EMAIL_RE.test(value) ? ok : fail('Invalid email address');\n}\n\n// === Phone ===\n\nconst PHONE_LENGTH: Record<string, number> = {\n PL: 9, DE: 10, US: 10, GB: 10, FR: 9, CZ: 9, SK: 9,\n};\n\nexport function validatePhone(value: string, countryCode?: string): ValidationResult {\n if (!value) return ok;\n const digits = value.replace(/\\D/g, '');\n if (digits.length < 7) return fail('Phone number too short');\n if (digits.length > 15) return fail('Phone number too long');\n if (countryCode) {\n const expected = PHONE_LENGTH[countryCode.toUpperCase()];\n if (expected && digits.length !== expected) {\n return fail(`Phone number should have ${expected} digits`);\n }\n }\n return ok;\n}\n\n// === IBAN (MOD-97, ISO 13616) ===\n\nconst IBAN_LENGTHS: Record<string, number> = {\n AL: 28, AD: 24, AT: 20, AZ: 28, BH: 22, BY: 28, BE: 16, BA: 20,\n BR: 29, BG: 22, CR: 22, HR: 21, CY: 28, CZ: 24, DK: 18, DO: 28,\n EG: 29, SV: 28, EE: 20, FO: 18, FI: 18, FR: 27, GE: 22, DE: 22,\n GI: 23, GR: 27, GL: 18, GT: 28, HU: 28, IS: 26, IQ: 23, IE: 22,\n IL: 23, IT: 27, JO: 30, KZ: 20, XK: 20, KW: 30, LV: 21, LB: 28,\n LI: 21, LT: 20, LU: 20, MT: 31, MR: 27, MU: 30, MD: 24, MC: 27,\n ME: 22, NL: 18, MK: 19, NO: 15, PK: 24, PS: 29, PL: 28, PT: 25,\n QA: 29, RO: 24, LC: 32, SM: 27, SA: 24, RS: 22, SC: 31, SK: 24,\n SI: 19, ES: 24, SE: 24, CH: 21, TL: 23, TN: 24, TR: 26, UA: 29,\n AE: 23, GB: 22, VA: 22, VG: 24,\n};\n\nfunction mod97(numStr: string): number {\n let remainder = 0;\n for (let i = 0; i < numStr.length; i++) {\n remainder = (remainder * 10 + parseInt(numStr[i], 10)) % 97;\n }\n return remainder;\n}\n\nexport function validateIBAN(value: string): ValidationResult {\n if (!value) return ok;\n const iban = value.replace(/\\s/g, '').toUpperCase();\n\n if (iban.length < 2) return fail('IBAN too short');\n\n const countryCode = iban.slice(0, 2);\n const expectedLength = IBAN_LENGTHS[countryCode];\n\n if (!expectedLength) return fail('Unknown IBAN country code');\n if (iban.length !== expectedLength) {\n return fail(`IBAN for ${countryCode} should have ${expectedLength} characters`);\n }\n\n // MOD-97 check: move first 4 chars to end, convert letters to numbers\n const rearranged = iban.slice(4) + iban.slice(0, 4);\n const numStr = rearranged.replace(/[A-Z]/g, (ch) => String(ch.charCodeAt(0) - 55));\n\n return mod97(numStr) === 1 ? ok : fail('Invalid IBAN checksum');\n}\n\n// === NIP (Polish Tax ID) ===\n\nconst NIP_WEIGHTS = [6, 5, 7, 2, 3, 4, 5, 6, 7];\n\nexport function validateNIP(value: string): ValidationResult {\n if (!value) return ok;\n const digits = value.replace(/\\D/g, '');\n if (digits.length !== 10) return fail('NIP must have 10 digits');\n\n let sum = 0;\n for (let i = 0; i < 9; i++) {\n sum += parseInt(digits[i], 10) * NIP_WEIGHTS[i];\n }\n const checkDigit = sum % 11;\n if (checkDigit === 10) return fail('Invalid NIP');\n return checkDigit === parseInt(digits[9], 10) ? ok : fail('Invalid NIP checksum');\n}\n\n// === PESEL ===\n\nconst PESEL_WEIGHTS = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3];\n\nexport function validatePESEL(value: string): ValidationResult {\n if (!value) return ok;\n const digits = value.replace(/\\D/g, '');\n if (digits.length !== 11) return fail('PESEL must have 11 digits');\n\n let sum = 0;\n for (let i = 0; i < 10; i++) {\n sum += parseInt(digits[i], 10) * PESEL_WEIGHTS[i];\n }\n const checkDigit = (10 - (sum % 10)) % 10;\n return checkDigit === parseInt(digits[10], 10) ? ok : fail('Invalid PESEL checksum');\n}\n\n// === REGON ===\n\nconst REGON9_WEIGHTS = [8, 9, 2, 3, 4, 5, 6, 7];\nconst REGON14_WEIGHTS = [2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8];\n\nexport function validateREGON(value: string): ValidationResult {\n if (!value) return ok;\n const digits = value.replace(/\\D/g, '');\n\n if (digits.length !== 9 && digits.length !== 14) {\n return fail('REGON must have 9 or 14 digits');\n }\n\n const weights = digits.length === 9 ? REGON9_WEIGHTS : REGON14_WEIGHTS;\n let sum = 0;\n for (let i = 0; i < weights.length; i++) {\n sum += parseInt(digits[i], 10) * weights[i];\n }\n const checkDigit = sum % 11 === 10 ? 0 : sum % 11;\n const lastDigit = parseInt(digits[digits.length - 1], 10);\n return checkDigit === lastDigit ? ok : fail('Invalid REGON checksum');\n}\n\n// === Compose validators ===\n\nexport function composeValidators(...validators: ValidatorFn[]): ValidatorFn {\n return (value: string) => {\n for (const validator of validators) {\n const result = validator(value);\n if (!result.valid) return result;\n }\n return ok;\n };\n}\n","export function stripNonDigits(value: string): string {\n return value.replace(/\\D/g, '');\n}\n\nexport function stripNonAlphanumeric(value: string): string {\n return value.replace(/[^a-zA-Z0-9]/g, '');\n}\n\nexport function capitalizeWords(value: string): string {\n return value.replace(/\\b\\w/g, (ch) => ch.toUpperCase());\n}\n\n// === IBAN formatting: \"PL61109010140000071219812874\" → \"PL61 1090 1014 0000 0712 1981 2874\" ===\n\nexport function formatIBAN(value: string): string {\n const clean = value.replace(/\\s/g, '').toUpperCase();\n return clean.replace(/(.{4})/g, '$1 ').trim();\n}\n\nexport function unformatIBAN(value: string): string {\n return value.replace(/\\s/g, '').toUpperCase();\n}\n\n// === Phone formatting: \"123456789\" → \"123 456 789\" (Polish default) ===\n\nexport interface PhoneFormatOptions {\n countryCode?: string;\n groupPattern?: number[]; // e.g. [3, 3, 3] for PL\n}\n\nconst PHONE_GROUPS: Record<string, number[]> = {\n PL: [3, 3, 3],\n DE: [3, 4, 3],\n US: [3, 3, 4],\n GB: [4, 3, 3],\n FR: [2, 2, 2, 2, 2],\n DEFAULT: [3, 3, 3],\n};\n\nexport function formatPhone(value: string, options: PhoneFormatOptions = {}): string {\n const digits = stripNonDigits(value);\n if (!digits) return '';\n\n const groups = options.groupPattern\n ?? PHONE_GROUPS[options.countryCode?.toUpperCase() ?? '']\n ?? PHONE_GROUPS.DEFAULT;\n\n const parts: string[] = [];\n let pos = 0;\n for (const len of groups) {\n if (pos >= digits.length) break;\n parts.push(digits.slice(pos, pos + len));\n pos += len;\n }\n if (pos < digits.length) {\n parts.push(digits.slice(pos));\n }\n return parts.join(' ');\n}\n\n// === NIP formatting: \"1234567819\" → \"123-456-78-19\" ===\n\nexport function formatNIP(value: string): string {\n const digits = stripNonDigits(value);\n if (digits.length <= 3) return digits;\n if (digits.length <= 6) return `${digits.slice(0, 3)}-${digits.slice(3)}`;\n if (digits.length <= 8) return `${digits.slice(0, 3)}-${digits.slice(3, 6)}-${digits.slice(6)}`;\n return `${digits.slice(0, 3)}-${digits.slice(3, 6)}-${digits.slice(6, 8)}-${digits.slice(8, 10)}`;\n}\n\n// === Currency formatting ===\n\nexport interface CurrencyFormatOptions {\n decimalSeparator?: '.' | ',';\n thousandSeparator?: ' ' | '.' | ',' | '';\n precision?: number;\n}\n\nexport function formatCurrency(value: string, options: CurrencyFormatOptions = {}): string {\n const {\n decimalSeparator = ',',\n thousandSeparator = ' ',\n precision = 2,\n } = options;\n\n // Strip everything except digits, dots, commas, minus\n let clean = value.replace(/[^\\d.,-]/g, '');\n // Normalize decimal separator to dot for parsing\n clean = clean.replace(',', '.');\n\n // Split into integer and decimal parts\n const parts = clean.split('.');\n let intPart = parts[0] || '0';\n let decPart = parts.length > 1 ? parts[1] : '';\n\n // Handle negative\n const isNegative = intPart.startsWith('-');\n if (isNegative) intPart = intPart.slice(1);\n\n // Strip leading zeros\n intPart = intPart.replace(/^0+/, '') || '0';\n\n // Add thousand separators\n if (thousandSeparator) {\n intPart = intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator);\n }\n\n // Limit decimal precision\n decPart = decPart.slice(0, precision);\n\n const result = decPart\n ? `${intPart}${decimalSeparator}${decPart}`\n : intPart;\n\n return isNegative ? `-${result}` : result;\n}\n\nexport function parseCurrencyToNumber(\n formatted: string,\n thousandSeparator: string = ' ',\n decimalSeparator: string = ',',\n): number | null {\n let clean = formatted;\n // Remove thousand separators\n if (thousandSeparator) {\n clean = clean.split(thousandSeparator).join('');\n }\n // Normalize decimal\n clean = clean.replace(decimalSeparator, '.');\n // Remove non-numeric except dot and minus\n clean = clean.replace(/[^\\d.-]/g, '');\n const num = parseFloat(clean);\n return isNaN(num) ? null : num;\n}\n\n// === Cursor position helper for formatted inputs ===\n\nexport function adjustCursorAfterFormat(\n oldValue: string,\n newValue: string,\n oldCursor: number,\n): number {\n // Count how many \"real\" characters (non-space/separator) are before cursor in old value\n let realCharsBefore = 0;\n for (let i = 0; i < oldCursor && i < oldValue.length; i++) {\n if (oldValue[i] !== ' ' && oldValue[i] !== '-') {\n realCharsBefore++;\n }\n }\n\n // Find position in new value that has the same number of real chars before it\n let count = 0;\n for (let i = 0; i < newValue.length; i++) {\n if (newValue[i] !== ' ' && newValue[i] !== '-') {\n count++;\n }\n if (count === realCharsBefore) {\n return i + 1;\n }\n }\n return newValue.length;\n}\n","export function daysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\nexport function firstDayOfMonth(year: number, month: number): number {\n return new Date(year, month, 1).getDay();\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear()\n && a.getMonth() === b.getMonth()\n && a.getDate() === b.getDate();\n}\n\nexport function isDateInRange(date: Date, min?: Date | null, max?: Date | null): boolean {\n if (min && date < stripTime(min)) return false;\n if (max && date > stripTime(max)) return false;\n return true;\n}\n\nexport function stripTime(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nexport function addMonths(date: Date, count: number): Date {\n const result = new Date(date);\n result.setMonth(result.getMonth() + count);\n return result;\n}\n\nexport function addYears(date: Date, count: number): Date {\n const result = new Date(date);\n result.setFullYear(result.getFullYear() + count);\n return result;\n}\n\n// === Format/Parse with tokens: dd, MM, yyyy ===\n\nconst pad = (n: number): string => n.toString().padStart(2, '0');\n\nexport function formatDate(date: Date, format: string = 'dd.MM.yyyy'): string {\n const day = pad(date.getDate());\n const month = pad(date.getMonth() + 1);\n const year = date.getFullYear().toString();\n\n return format\n .replace('dd', day)\n .replace('MM', month)\n .replace('yyyy', year);\n}\n\nexport function parseDate(value: string, format: string = 'dd.MM.yyyy'): Date | null {\n const dayIdx = format.indexOf('dd');\n const monthIdx = format.indexOf('MM');\n const yearIdx = format.indexOf('yyyy');\n\n if (dayIdx === -1 || monthIdx === -1 || yearIdx === -1) return null;\n\n const day = parseInt(value.slice(dayIdx, dayIdx + 2), 10);\n const month = parseInt(value.slice(monthIdx, monthIdx + 2), 10);\n const year = parseInt(value.slice(yearIdx, yearIdx + 4), 10);\n\n if (isNaN(day) || isNaN(month) || isNaN(year)) return null;\n if (month < 1 || month > 12) return null;\n if (day < 1 || day > daysInMonth(year, month - 1)) return null;\n\n return new Date(year, month - 1, day);\n}\n\n// === Day/month names ===\n\nconst DAY_NAMES_PL = ['Pn', 'Wt', 'Śr', 'Cz', 'Pt', 'So', 'Nd'];\nconst DAY_NAMES_EN = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];\n\nconst MONTH_NAMES_PL = [\n 'Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec',\n 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień',\n];\nconst MONTH_NAMES_EN = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n];\n\nexport function getDayNames(locale: 'pl' | 'en' = 'pl'): string[] {\n return locale === 'pl' ? DAY_NAMES_PL : DAY_NAMES_EN;\n}\n\nexport function getMonthNames(locale: 'pl' | 'en' = 'pl'): string[] {\n return locale === 'pl' ? MONTH_NAMES_PL : MONTH_NAMES_EN;\n}\n\n// === Time parsing ===\n\nexport function parseTime(value: string): {hours: number; minutes: number; seconds: number} | null {\n const parts = value.split(':');\n if (parts.length < 2) return null;\n\n const hours = parseInt(parts[0], 10);\n const minutes = parseInt(parts[1], 10);\n const seconds = parts.length > 2 ? parseInt(parts[2], 10) : 0;\n\n if (isNaN(hours) || isNaN(minutes) || isNaN(seconds)) return null;\n if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59 || seconds < 0 || seconds > 59) return null;\n\n return {hours, minutes, seconds};\n}\n\nexport function formatTime(\n hours: number,\n minutes: number,\n seconds?: number,\n showSeconds: boolean = false,\n): string {\n const base = `${pad(hours)}:${pad(minutes)}`;\n return showSeconds ? `${base}:${pad(seconds ?? 0)}` : base;\n}\n","import {useState, useEffect, useRef, useCallback} from 'react';\n\nexport function useDebounce<T>(value: T, delay: number): T {\n const [debounced, setDebounced] = useState(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debounced;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebouncedCallback<T extends (...args: any[]) => void>(\n callback: T,\n delay: number,\n): T {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n const timerRef = useRef<ReturnType<typeof setTimeout>>();\n\n return useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ((...args: any[]) => {\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => callbackRef.current(...args), delay);\n }) as T,\n [delay],\n );\n}\n","import {useEffect, type RefObject} from 'react';\n\nexport function useClickOutside(\n ref: RefObject<HTMLElement | null>,\n handler: () => void,\n): void {\n useEffect(() => {\n const listener = (e: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(e.target as Node)) return;\n handler();\n };\n\n document.addEventListener('mousedown', listener);\n document.addEventListener('touchstart', listener);\n return () => {\n document.removeEventListener('mousedown', listener);\n document.removeEventListener('touchstart', listener);\n };\n }, [ref, handler]);\n}\n","import {useState, useCallback, type KeyboardEvent} from 'react';\n\nexport interface UseKeyboardNavOptions {\n itemCount: number;\n onSelect: (index: number) => void;\n onClose: () => void;\n isOpen: boolean;\n loop?: boolean;\n}\n\nexport function useKeyboardNav({\n itemCount,\n onSelect,\n onClose,\n isOpen,\n loop = true,\n}: UseKeyboardNavOptions) {\n const [activeIndex, setActiveIndex] = useState(-1);\n\n const resetIndex = useCallback(() => setActiveIndex(-1), []);\n\n const onKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isOpen || itemCount === 0) return;\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n setActiveIndex((prev) => {\n if (prev >= itemCount - 1) return loop ? 0 : prev;\n return prev + 1;\n });\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n setActiveIndex((prev) => {\n if (prev <= 0) return loop ? itemCount - 1 : 0;\n return prev - 1;\n });\n break;\n }\n case 'Enter': {\n e.preventDefault();\n if (activeIndex >= 0 && activeIndex < itemCount) {\n onSelect(activeIndex);\n }\n break;\n }\n case 'Escape': {\n e.preventDefault();\n onClose();\n break;\n }\n case 'Home': {\n e.preventDefault();\n setActiveIndex(0);\n break;\n }\n case 'End': {\n e.preventDefault();\n setActiveIndex(itemCount - 1);\n break;\n }\n }\n },\n [isOpen, itemCount, activeIndex, onSelect, onClose, loop],\n );\n\n return {activeIndex, setActiveIndex, resetIndex, onKeyDown};\n}\n","import {createPortal} from 'react-dom';\nimport type {PortalProps} from './Portal.types';\n\nexport function Portal({children, container}: PortalProps) {\n const target = container ?? (typeof document !== 'undefined' ? document.body : null);\n if (!target) return null;\n return createPortal(children, target);\n}\n","import {useState, useEffect, useRef, useCallback} from 'react';\nimport {Portal} from '../Portal';\nimport {cn} from '../../../utils/cn';\nimport type {PopoverProps} from './Popover.types';\nimport styles from './Popover.module.css';\n\nexport function Popover({\n open,\n anchorRef,\n onClose,\n placement = 'bottom-start',\n matchWidth = false,\n offset = 4,\n children,\n className,\n style,\n}: PopoverProps) {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState<{top: number; left: number; width?: number}>({\n top: 0,\n left: 0,\n });\n const [flipped, setFlipped] = useState(false);\n\n const updatePosition = useCallback(() => {\n if (!anchorRef.current || !popoverRef.current) return;\n\n const anchor = anchorRef.current.getBoundingClientRect();\n const popover = popoverRef.current.getBoundingClientRect();\n const viewport = {\n width: window.innerWidth,\n height: window.innerHeight,\n };\n\n const isTop = placement.startsWith('top');\n const isEnd = placement.endsWith('end');\n\n // Check if we need to flip (not enough space below, flip to top, or vice versa)\n const spaceBelow = viewport.height - anchor.bottom - offset;\n const spaceAbove = anchor.top - offset;\n const shouldFlip = isTop\n ? spaceAbove < popover.height && spaceBelow > spaceAbove\n : spaceBelow < popover.height && spaceAbove > spaceBelow;\n\n setFlipped(shouldFlip);\n\n const showOnTop = isTop ? !shouldFlip : shouldFlip;\n\n let top: number;\n if (showOnTop) {\n top = anchor.top - popover.height - offset + window.scrollY;\n } else {\n top = anchor.bottom + offset + window.scrollY;\n }\n\n let left: number;\n if (isEnd) {\n left = anchor.right - popover.width + window.scrollX;\n } else {\n left = anchor.left + window.scrollX;\n }\n\n // Clamp to viewport\n left = Math.max(8, Math.min(left, viewport.width - popover.width - 8));\n top = Math.max(8 + window.scrollY, top);\n\n setPosition({\n top,\n left,\n width: matchWidth ? anchor.width : undefined,\n });\n }, [anchorRef, placement, offset, matchWidth]);\n\n useEffect(() => {\n if (!open) return;\n\n // Initial position with a frame delay so the popover is rendered and measurable\n requestAnimationFrame(updatePosition);\n\n window.addEventListener('scroll', updatePosition, {passive: true});\n window.addEventListener('resize', updatePosition, {passive: true});\n return () => {\n window.removeEventListener('scroll', updatePosition);\n window.removeEventListener('resize', updatePosition);\n };\n }, [open, updatePosition]);\n\n // Close on Escape\n useEffect(() => {\n if (!open) return;\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [open, onClose]);\n\n // Close on click outside\n useEffect(() => {\n if (!open) return;\n const handleClick = (e: MouseEvent) => {\n if (\n popoverRef.current && !popoverRef.current.contains(e.target as Node)\n && anchorRef.current && !anchorRef.current.contains(e.target as Node)\n ) {\n onClose();\n }\n };\n document.addEventListener('mousedown', handleClick);\n return () => document.removeEventListener('mousedown', handleClick);\n }, [open, onClose, anchorRef]);\n\n if (!open) return null;\n\n return (\n <Portal>\n <div\n ref={popoverRef}\n className={cn(\n styles.popover,\n flipped ? styles.flipped : styles.normal,\n className,\n )}\n style={{\n position: 'absolute',\n top: position.top,\n left: position.left,\n width: position.width,\n ...style,\n }}\n role=\"listbox\"\n >\n {children}\n </div>\n </Portal>\n );\n}\n","import {useRef, useEffect, forwardRef} from 'react';\nimport type {CheckboxProps} from './Checkbox.types';\nimport {cn} from '../../../utils/cn';\nimport styles from './Checkbox.module.css';\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n checked,\n defaultChecked,\n indeterminate = false,\n name,\n id,\n value,\n disabled = false,\n size = 'md',\n color = 'primary',\n label,\n labelPosition = 'right',\n error = false,\n errorText,\n onChange,\n className,\n style,\n },\n ref,\n) {\n const internalRef = useRef<HTMLInputElement>(null);\n const inputRef = (ref as React.RefObject<HTMLInputElement>) ?? internalRef;\n\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate, inputRef]);\n\n const hasError = error || !!errorText;\n\n return (\n <div className={cn(styles.wrapper, className)} style={style}>\n <label\n className={cn(\n styles.label,\n styles[size],\n labelPosition === 'left' && styles.labelLeft,\n disabled && styles.disabled,\n )}\n >\n <span className={cn(\n styles.box,\n styles[`color-${color}`],\n hasError && styles.boxError,\n )}>\n <input\n ref={inputRef}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n name={name}\n id={id}\n value={value}\n disabled={disabled}\n onChange={onChange}\n className={styles.input}\n aria-invalid={hasError || undefined}\n />\n <svg className={styles.checkmark} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n className={styles.checkPath}\n d=\"M3.5 8L6.5 11L12.5 5\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span className={styles.indeterminateMark} />\n </span>\n {label && <span className={styles.labelText}>{label}</span>}\n </label>\n {errorText && (\n <span className={styles.errorText} role=\"alert\">{errorText}</span>\n )}\n </div>\n );\n});\n","import {createContext, useContext} from 'react';\nimport type {RadioGroupContextValue} from './Radio.types';\n\nexport const RadioContext = createContext<RadioGroupContextValue | null>(null);\n\nexport function useRadioGroup(): RadioGroupContextValue | null {\n return useContext(RadioContext);\n}\n","import {forwardRef, useCallback} from 'react';\nimport type {RadioProps} from './Radio.types';\nimport {useRadioGroup} from './RadioContext';\nimport {cn} from '../../../utils/cn';\nimport styles from './Radio.module.css';\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n {\n checked,\n defaultChecked,\n name,\n id,\n value,\n disabled = false,\n size = 'md',\n color = 'primary',\n label,\n labelPosition = 'right',\n onChange,\n className,\n style,\n },\n ref,\n) {\n const group = useRadioGroup();\n\n const resolvedName = group?.name ?? name;\n const resolvedDisabled = group?.disabled ?? disabled;\n const resolvedSize = group?.size ?? size;\n const resolvedColor = group?.color ?? color;\n const resolvedChecked = group ? group.value === value : checked;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n if (group?.onChange && value) {\n group.onChange(value);\n }\n },\n [onChange, group, value],\n );\n\n return (\n <label\n className={cn(\n styles.label,\n styles[resolvedSize],\n labelPosition === 'left' && styles.labelLeft,\n resolvedDisabled && styles.disabled,\n className,\n )}\n style={style}\n >\n <span className={cn(styles.circle, styles[`color-${resolvedColor}`])}>\n <input\n ref={ref}\n type=\"radio\"\n name={resolvedName}\n id={id}\n value={value}\n checked={resolvedChecked}\n defaultChecked={!group ? defaultChecked : undefined}\n disabled={resolvedDisabled}\n onChange={handleChange}\n className={styles.input}\n />\n <span className={styles.dot} />\n </span>\n {label && <span className={styles.labelText}>{label}</span>}\n </label>\n );\n});\n","import {useState, useCallback, useMemo} from 'react';\nimport type {RadioGroupProps} from './Radio.types';\nimport {RadioContext} from './RadioContext';\nimport {cn} from '../../../utils/cn';\nimport styles from './Radio.module.css';\n\nexport function RadioGroup({\n name,\n value,\n defaultValue,\n onChange,\n direction = 'vertical',\n children,\n disabled = false,\n size = 'md',\n color = 'primary',\n error = false,\n errorText,\n label,\n className,\n style,\n}: RadioGroupProps) {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const currentValue = value !== undefined ? value : internalValue;\n\n const handleChange = useCallback(\n (val: string) => {\n if (value === undefined) {\n setInternalValue(val);\n }\n onChange?.(val);\n },\n [onChange, value],\n );\n\n const ctx = useMemo(\n () => ({name, value: currentValue, disabled, size, color, onChange: handleChange}),\n [name, currentValue, disabled, size, color, handleChange],\n );\n\n return (\n <RadioContext.Provider value={ctx}>\n <fieldset\n className={cn(styles.group, styles[direction], className)}\n style={style}\n role=\"radiogroup\"\n >\n {label && (\n <legend className={cn(styles.groupLabel, error && styles.groupLabelError)}>\n {label}\n </legend>\n )}\n {children}\n {errorText && (\n <span className={styles.errorText} role=\"alert\">{errorText}</span>\n )}\n </fieldset>\n </RadioContext.Provider>\n );\n}\n","import {forwardRef} from 'react';\nimport type {ToggleProps} from './Toggle.types';\nimport {cn} from '../../../utils/cn';\nimport styles from './Toggle.module.css';\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(function Toggle(\n {\n checked,\n defaultChecked,\n name,\n id,\n disabled = false,\n size = 'md',\n color = 'primary',\n label,\n labelPosition = 'right',\n onChange,\n className,\n style,\n },\n ref,\n) {\n return (\n <label\n className={cn(\n styles.label,\n styles[size],\n labelPosition === 'left' && styles.labelLeft,\n disabled && styles.disabled,\n className,\n )}\n style={style}\n >\n <span className={cn(styles.track, styles[`color-${color}`])}>\n <input\n ref={ref}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n name={name}\n id={id}\n disabled={disabled}\n onChange={onChange}\n className={styles.input}\n role=\"switch\"\n aria-checked={checked}\n />\n <span className={styles.knob} />\n </span>\n {label && <span className={styles.labelText}>{label}</span>}\n </label>\n );\n});\n","import {useState, useRef, useCallback, forwardRef} from 'react';\nimport type {InputProps} from './Input.types';\nimport {cn} from '../../../utils/cn';\nimport styles from './Input.module.css';\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n type = 'text',\n value,\n defaultValue,\n name,\n id,\n placeholder,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n autoComplete,\n inputMode,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n rounded = false,\n label,\n helperText,\n errorText,\n startIcon,\n endIcon,\n clearable = false,\n error = false,\n success = false,\n maxLength,\n showCharCount = false,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n onClear,\n loading = false,\n className,\n style,\n inputClassName,\n labelClassName,\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const currentValue = value !== undefined ? value.toString() : internalValue;\n const hasError = error || !!errorText;\n const hasContent = currentValue.length > 0;\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n },\n [onChange, value],\n );\n\n const handleClear = useCallback(() => {\n if (value === undefined) {\n setInternalValue('');\n }\n onClear?.();\n // Focus input after clear\n const input = (ref as React.RefObject<HTMLInputElement>)?.current ?? inputRef.current;\n input?.focus();\n }, [onClear, ref]);\n\n const containerClasses = cn(\n styles.inputContainer,\n styles[variant],\n styles[size],\n focused && styles.focused,\n hasError && styles.inputError,\n success && !hasError && styles.inputSuccess,\n color === 'warning' && styles.colorWarning,\n color === 'info' && styles.colorInfo,\n disabled && styles.disabled,\n rounded && styles.rounded,\n );\n\n return (\n <div\n className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn(\n styles.label,\n focused && styles.focused,\n hasError && styles.labelError,\n success && !hasError && styles.labelSuccess,\n required && styles.required,\n labelClassName,\n )}\n >\n {label}\n </label>\n )}\n\n <div className={containerClasses}>\n {startIcon && <span className={styles.startIcon}>{startIcon}</span>}\n\n <input\n ref={ref ?? inputRef}\n type={type}\n value={value}\n defaultValue={value === undefined ? defaultValue : undefined}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n autoComplete={autoComplete}\n inputMode={inputMode}\n maxLength={maxLength}\n className={cn(styles.input, inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={\n errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined\n }\n />\n\n {loading && <span className={styles.spinner}/>}\n\n {clearable && hasContent && !loading && !disabled && (\n <button\n type=\"button\"\n className={styles.clearBtn}\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear input\"\n >\n ✕\n </button>\n )}\n\n {endIcon && !loading && <span className={styles.endIcon}>{endIcon}</span>}\n </div>\n\n {(errorText || helperText || showCharCount) && (\n <div className={styles.bottomRow}>\n <span>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className={styles.errorTextMsg} role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className={styles.helperText}>\n {helperText}\n </span>\n )}\n </span>\n {showCharCount && maxLength && (\n <span\n className={cn(\n styles.charCount,\n currentValue.length > maxLength && styles.charCountOver,\n )}\n >\n {currentValue.length}/{maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n );\n});\n","import {useState, useRef, useCallback, useEffect, forwardRef} from 'react';\nimport type {TextareaProps} from './Textarea.types';\nimport {cn} from '../../../utils/cn';\nimport styles from './Textarea.module.css';\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n {\n value,\n defaultValue,\n name,\n id,\n placeholder,\n disabled = false,\n readOnly = false,\n required = false,\n autoFocus = false,\n rows = 3,\n autoResize = false,\n minRows,\n maxRows,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n label,\n helperText,\n errorText,\n error = false,\n success = false,\n maxLength,\n showCharCount = false,\n loading = false,\n onChange,\n onFocus,\n onBlur,\n className,\n style,\n textareaClassName,\n labelClassName,\n },\n ref,\n) {\n const [focused, setFocused] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const currentValue = value !== undefined ? value : internalValue;\n const hasError = error || !!errorText;\n const resolvedRef = ref ?? textareaRef;\n\n const adjustHeight = useCallback(() => {\n const el = typeof resolvedRef === 'function' ? null : resolvedRef?.current;\n if (!el || !autoResize) return;\n\n el.style.height = 'auto';\n const lineHeight = parseFloat(getComputedStyle(el).lineHeight) || 20;\n const minH = minRows ? minRows * lineHeight : 0;\n const maxH = maxRows ? maxRows * lineHeight : Infinity;\n const newHeight = Math.min(Math.max(el.scrollHeight, minH), maxH);\n el.style.height = `${newHeight}px`;\n el.style.overflowY = el.scrollHeight > newHeight ? 'auto' : 'hidden';\n }, [autoResize, minRows, maxRows, resolvedRef]);\n\n useEffect(() => {\n adjustHeight();\n }, [currentValue, adjustHeight]);\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n },\n [onChange, value],\n );\n\n const containerClasses = cn(\n styles.container,\n styles[variant],\n styles[size],\n focused && styles.focused,\n hasError && styles.containerError,\n success && !hasError && styles.containerSuccess,\n color === 'warning' && styles.colorWarning,\n color === 'info' && styles.colorInfo,\n disabled && styles.disabled,\n );\n\n return (\n <div\n className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn(\n styles.label,\n focused && styles.labelFocused,\n hasError && styles.labelError,\n success && !hasError && styles.labelSuccess,\n required && styles.required,\n labelClassName,\n )}\n >\n {label}\n </label>\n )}\n\n <div className={containerClasses}>\n <textarea\n ref={resolvedRef as React.Ref<HTMLTextAreaElement>}\n name={name}\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n autoFocus={autoFocus}\n rows={autoResize ? (minRows ?? rows) : rows}\n maxLength={maxLength}\n value={value}\n defaultValue={value === undefined ? defaultValue : undefined}\n className={cn(styles.textarea, textareaClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n aria-invalid={hasError || undefined}\n aria-describedby={\n errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined\n }\n />\n {loading && <span className={styles.spinner} />}\n </div>\n\n {(errorText || helperText || showCharCount) && (\n <div className={styles.bottomRow}>\n <span>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className={styles.errorTextMsg} role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className={styles.helperText}>\n {helperText}\n </span>\n )}\n </span>\n {showCharCount && maxLength && (\n <span\n className={cn(\n styles.charCount,\n currentValue.length > maxLength && styles.charCountOver,\n )}\n >\n {currentValue.length}/{maxLength}\n </span>\n )}\n </div>\n )}\n </div>\n );\n});\n","import {useState, useCallback, useEffect, forwardRef} from 'react';\nimport type {InputPasswordProps, PasswordStrength} from './InputPassword.types';\nimport {Input} from '../Input';\nimport {cn} from '../../../utils/cn';\nimport styles from './InputPassword.module.css';\n\nfunction calcStrength(value: string): PasswordStrength {\n let score = 0;\n if (value.length >= 8) score++;\n if (value.length >= 12) score++;\n if (/[a-z]/.test(value) && /[A-Z]/.test(value)) score++;\n if (/\\d/.test(value)) score++;\n if (/[^a-zA-Z0-9]/.test(value)) score++;\n\n if (score <= 1) return 'weak';\n if (score <= 2) return 'fair';\n if (score <= 3) return 'good';\n return 'strong';\n}\n\nconst STRENGTH_LABELS: Record<PasswordStrength, string> = {\n weak: 'Weak',\n fair: 'Fair',\n good: 'Good',\n strong: 'Strong',\n};\n\nexport const InputPassword = forwardRef<HTMLInputElement, InputPasswordProps>(function InputPassword(\n {\n showToggle = true,\n showStrength = false,\n onStrengthChange,\n value,\n defaultValue,\n onChange,\n ...rest\n },\n ref,\n) {\n const [visible, setVisible] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const currentValue = value !== undefined ? value.toString() : internalValue;\n const strength = calcStrength(currentValue);\n\n useEffect(() => {\n onStrengthChange?.(strength);\n }, [strength, onStrengthChange]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e);\n },\n [onChange, value],\n );\n\n const toggleIcon = showToggle ? (\n <button\n type=\"button\"\n className={styles.toggleBtn}\n onClick={() => setVisible((v) => !v)}\n tabIndex={-1}\n aria-label={visible ? 'Hide password' : 'Show password'}\n >\n {visible ? '◠' : '◉'}\n </button>\n ) : undefined;\n\n return (\n <div className={styles.wrapper}>\n <Input\n {...rest}\n ref={ref}\n type={visible ? 'text' : 'password'}\n value={value}\n defaultValue={defaultValue}\n onChange={handleChange}\n endIcon={toggleIcon}\n />\n {showStrength && currentValue.length > 0 && (\n <div className={styles.strengthRow}>\n <div className={styles.strengthBar}>\n {[0, 1, 2, 3].map((i) => (\n <div\n key={i}\n className={cn(\n styles.strengthSegment,\n i < (['weak', 'fair', 'good', 'strong'].indexOf(strength) + 1) && styles[`strength-${strength}`],\n )}\n />\n ))}\n </div>\n <span className={cn(styles.strengthLabel, styles[`strength-${strength}`])}>\n {STRENGTH_LABELS[strength]}\n </span>\n </div>\n )}\n </div>\n );\n});\n","import {useState, useCallback, useRef, useEffect, forwardRef} from 'react';\nimport type {InputNumberProps} from './InputNumber.types';\nimport {Input} from '../Input';\nimport styles from './InputNumber.module.css';\n\nfunction clampValue(val: number, min?: number, max?: number): number {\n if (min !== undefined && val < min) return min;\n if (max !== undefined && val > max) return max;\n return val;\n}\n\nfunction roundToPrecision(val: number, precision: number): number {\n const factor = Math.pow(10, precision);\n return Math.round(val * factor) / factor;\n}\n\nexport const InputNumber = forwardRef<HTMLInputElement, InputNumberProps>(function InputNumber(\n {\n min,\n max,\n step = 1,\n showStepper = true,\n precision = 0,\n allowNegative = true,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onKeyDown,\n onBlur,\n disabled = false,\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const currentValue = value !== undefined ? value.toString() : internalValue;\n const intervalRef = useRef<ReturnType<typeof setInterval>>();\n\n const updateValue = useCallback(\n (newVal: string) => {\n if (value === undefined) {\n setInternalValue(newVal);\n }\n const num = parseFloat(newVal);\n onValueChange?.(isNaN(num) ? null : num);\n },\n [value, onValueChange],\n );\n\n const increment = useCallback(\n (direction: 1 | -1) => {\n const current = parseFloat(currentValue) || 0;\n const newVal = roundToPrecision(clampValue(current + step * direction, min, max), precision);\n updateValue(newVal.toString());\n },\n [currentValue, step, min, max, precision, updateValue],\n );\n\n const startHold = useCallback(\n (direction: 1 | -1) => {\n increment(direction);\n intervalRef.current = setInterval(() => increment(direction), 150);\n },\n [increment],\n );\n\n const stopHold = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = undefined;\n }\n }, []);\n\n useEffect(() => {\n return stopHold;\n }, [stopHold]);\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n // Allow digits, dot, comma, minus\n const filtered = raw.replace(allowNegative ? /[^\\d.,-]/g : /[^\\d.,]/g, '');\n updateValue(filtered);\n onChange?.(e);\n },\n [onChange, allowNegative, updateValue],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n const num = parseFloat(currentValue);\n if (!isNaN(num)) {\n const clamped = roundToPrecision(clampValue(num, min, max), precision);\n updateValue(clamped.toString());\n }\n onBlur?.(e);\n },\n [currentValue, min, max, precision, updateValue, onBlur],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n increment(1);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n increment(-1);\n }\n onKeyDown?.(e);\n },\n [increment, onKeyDown],\n );\n\n const stepper = showStepper && !disabled ? (\n <div className={styles.stepper}>\n <button\n type=\"button\"\n className={styles.stepBtn}\n onMouseDown={() => startHold(1)}\n onMouseUp={stopHold}\n onMouseLeave={stopHold}\n tabIndex={-1}\n aria-label=\"Increment\"\n >\n ▲\n </button>\n <button\n type=\"button\"\n className={styles.stepBtn}\n onMouseDown={() => startHold(-1)}\n onMouseUp={stopHold}\n onMouseLeave={stopHold}\n tabIndex={-1}\n aria-label=\"Decrement\"\n >\n ▼\n </button>\n </div>\n ) : undefined;\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n value={value !== undefined ? currentValue : undefined}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n endIcon={stepper}\n disabled={disabled}\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputSearchProps} from './InputSearch.types';\nimport {Input} from '../Input';\nimport {useDebouncedCallback} from '../../../utils/useDebounce';\n\nexport const InputSearch = forwardRef<HTMLInputElement, InputSearchProps>(function InputSearch(\n {\n debounceMs = 300,\n onSearch,\n value,\n defaultValue,\n onChange,\n onKeyDown,\n onClear,\n clearable = true,\n placeholder = 'Search...',\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const debouncedSearch = useDebouncedCallback(\n (val: string) => onSearch?.(val),\n debounceMs,\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n debouncedSearch(e.target.value);\n onChange?.(e);\n },\n [onChange, value, debouncedSearch],\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n onSearch?.(currentValue);\n }\n onKeyDown?.(e);\n },\n [currentValue, onSearch, onKeyDown],\n );\n\n const handleClear = useCallback(() => {\n if (value === undefined) {\n setInternalValue('');\n }\n onSearch?.('');\n onClear?.();\n }, [value, onSearch, onClear]);\n\n const searchIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"6.5\" cy=\"6.5\" r=\"5\" />\n <line x1=\"10\" y1=\"10\" x2=\"14.5\" y2=\"14.5\" />\n </svg>\n );\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"search\"\n value={value}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onClear={handleClear}\n clearable={clearable}\n placeholder={placeholder}\n startIcon={searchIcon}\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputEmailProps} from './InputEmail.types';\nimport {Input} from '../Input';\nimport {validateEmail} from '../../../utils/validators';\nimport type {ValidationResult} from '../../../utils/validators';\n\nexport const InputEmail = forwardRef<HTMLInputElement, InputEmailProps>(function InputEmail(\n {\n validateOnBlur = true,\n validateOnChange = false,\n showValidIcon = true,\n onValidationChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder = 'email@example.com',\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const [validation, setValidation] = useState<ValidationResult>({valid: true});\n const [touched, setTouched] = useState(false);\n\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const runValidation = useCallback(\n (val: string) => {\n const result = validateEmail(val);\n setValidation(result);\n onValidationChange?.(result);\n return result;\n },\n [onValidationChange],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n if (validateOnChange && touched) {\n runValidation(e.target.value);\n }\n onChange?.(e);\n },\n [onChange, value, validateOnChange, touched, runValidation],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true);\n if (validateOnBlur && e.target.value) {\n runValidation(e.target.value);\n }\n onBlur?.(e);\n },\n [onBlur, validateOnBlur, runValidation],\n );\n\n const isError = error || (touched && !validation.valid);\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined);\n const isSuccess = !isError && success !== undefined ? success : (touched && validation.valid && currentValue.length > 0);\n\n const emailIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"1\" y=\"3\" width=\"14\" height=\"10\" rx=\"2\" />\n <path d=\"M1 5L8 9L15 5\" />\n </svg>\n );\n\n const validIcon = showValidIcon && isSuccess ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"var(--mineral-success)\" strokeWidth=\"2\">\n <path d=\"M3 8L6.5 11.5L13 4.5\" />\n </svg>\n ) : undefined;\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"email\"\n value={value}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder}\n startIcon={emailIcon}\n endIcon={validIcon}\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputPhoneProps} from './InputPhone.types';\nimport {Input} from '../Input';\nimport {validatePhone} from '../../../utils/validators';\nimport {formatPhone, stripNonDigits} from '../../../utils/formatters';\nimport type {ValidationResult} from '../../../utils/validators';\nimport styles from './InputPhone.module.css';\n\nexport const InputPhone = forwardRef<HTMLInputElement, InputPhoneProps>(function InputPhone(\n {\n countryCode = 'PL',\n showCountryCode = true,\n formatOnChange = true,\n validateOnBlur = true,\n onValidationChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n placeholder = '123 456 789',\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const [validation, setValidation] = useState<ValidationResult>({valid: true});\n const [touched, setTouched] = useState(false);\n\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = stripNonDigits(e.target.value);\n const formatted = formatOnChange ? formatPhone(digits, {countryCode}) : digits;\n\n if (value === undefined) {\n setInternalValue(formatted);\n }\n onValueChange?.(digits, formatted);\n onChange?.(e);\n },\n [onChange, value, formatOnChange, countryCode, onValueChange],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true);\n if (validateOnBlur && currentValue) {\n const result = validatePhone(stripNonDigits(currentValue), countryCode);\n setValidation(result);\n onValidationChange?.(result);\n }\n onBlur?.(e);\n },\n [onBlur, validateOnBlur, currentValue, countryCode, onValidationChange],\n );\n\n const COUNTRY_PREFIXES: Record<string, string> = {\n PL: '+48', DE: '+49', US: '+1', GB: '+44', FR: '+33', CZ: '+420', SK: '+421',\n };\n\n const prefix = showCountryCode ? (\n <span className={styles.prefix}>{COUNTRY_PREFIXES[countryCode.toUpperCase()] ?? `+${countryCode}`}</span>\n ) : undefined;\n\n const phoneIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M3 1.5h10a1 1 0 011 1v11a1 1 0 01-1 1H3a1 1 0 01-1-1v-11a1 1 0 011-1z\" />\n <line x1=\"5\" y1=\"12\" x2=\"11\" y2=\"12\" />\n </svg>\n );\n\n const isError = error || (touched && !validation.valid);\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined);\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"tel\"\n value={value !== undefined ? currentValue : undefined}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n placeholder={placeholder}\n startIcon={showCountryCode ? prefix : phoneIcon}\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputNameProps} from './InputName.types';\nimport {Input} from '../Input';\nimport {capitalizeWords} from '../../../utils/formatters';\nimport type {ValidationResult} from '../../../utils/validators';\n\nexport const InputName = forwardRef<HTMLInputElement, InputNameProps>(function InputName(\n {\n autoCapitalize = true,\n allowNumbers = false,\n allowSpecialChars = false,\n minWords,\n validateOnBlur = true,\n onValidationChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n placeholder = 'Jan Kowalski',\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const [validation, setValidation] = useState<ValidationResult>({valid: true});\n const [touched, setTouched] = useState(false);\n\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const filterValue = useCallback(\n (raw: string): string => {\n let filtered = raw;\n if (!allowNumbers) {\n filtered = filtered.replace(/\\d/g, '');\n }\n if (!allowSpecialChars) {\n // Allow letters, spaces, hyphens, apostrophes, Polish chars\n filtered = filtered.replace(/[^a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ\\s'-]/g, '');\n }\n if (autoCapitalize) {\n filtered = capitalizeWords(filtered);\n }\n return filtered;\n },\n [allowNumbers, allowSpecialChars, autoCapitalize],\n );\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const filtered = filterValue(e.target.value);\n if (value === undefined) {\n setInternalValue(filtered);\n }\n onChange?.(e);\n },\n [onChange, value, filterValue],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true);\n if (validateOnBlur && currentValue) {\n const words = currentValue.trim().split(/\\s+/).filter(Boolean);\n if (minWords && words.length < minWords) {\n const result: ValidationResult = {\n valid: false,\n error: `Enter at least ${minWords} word${minWords > 1 ? 's' : ''}`,\n };\n setValidation(result);\n onValidationChange?.(result);\n } else {\n const result: ValidationResult = {valid: true};\n setValidation(result);\n onValidationChange?.(result);\n }\n }\n onBlur?.(e);\n },\n [onBlur, validateOnBlur, currentValue, minWords, onValidationChange],\n );\n\n const isError = error || (touched && !validation.valid);\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined);\n\n const userIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <circle cx=\"8\" cy=\"5\" r=\"3\" />\n <path d=\"M2 14c0-3 2.5-5 6-5s6 2 6 5\" />\n </svg>\n );\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"text\"\n value={value !== undefined ? currentValue : undefined}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n placeholder={placeholder}\n startIcon={userIcon}\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputIBANProps} from './InputIBAN.types';\nimport {Input} from '../Input';\nimport {validateIBAN} from '../../../utils/validators';\nimport {formatIBAN, unformatIBAN} from '../../../utils/formatters';\nimport type {ValidationResult} from '../../../utils/validators';\n\nexport const InputIBAN = forwardRef<HTMLInputElement, InputIBANProps>(function InputIBAN(\n {\n formatOnChange = true,\n validateOnBlur = true,\n showValidIcon = true,\n onValidationChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder = 'PL00 0000 0000 0000 0000 0000 0000',\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const [validation, setValidation] = useState<ValidationResult>({valid: true});\n const [touched, setTouched] = useState(false);\n\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n // Allow only alphanumeric + spaces\n let raw = e.target.value.replace(/[^a-zA-Z0-9\\s]/g, '').toUpperCase();\n const clean = raw.replace(/\\s/g, '');\n const formatted = formatOnChange ? formatIBAN(clean) : clean;\n\n if (value === undefined) {\n setInternalValue(formatted);\n }\n onValueChange?.(clean, formatted);\n onChange?.(e);\n },\n [onChange, value, formatOnChange, onValueChange],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true);\n if (validateOnBlur && currentValue) {\n const result = validateIBAN(unformatIBAN(currentValue));\n setValidation(result);\n onValidationChange?.(result);\n }\n onBlur?.(e);\n },\n [onBlur, validateOnBlur, currentValue, onValidationChange],\n );\n\n const isError = error || (touched && !validation.valid);\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined);\n const isSuccess = !isError && (success !== undefined ? success : (touched && validation.valid && currentValue.length > 0));\n\n const bankIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M1 14h14\" />\n <path d=\"M2 6h12\" />\n <path d=\"M8 2L1 6h14L8 2z\" />\n <path d=\"M3 6v8M6 6v8M10 6v8M13 6v8\" />\n </svg>\n );\n\n const validIcon = showValidIcon && isSuccess ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"var(--mineral-success)\" strokeWidth=\"2\">\n <path d=\"M3 8L6.5 11.5L13 4.5\" />\n </svg>\n ) : undefined;\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"text\"\n value={value !== undefined ? currentValue : undefined}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder}\n startIcon={bankIcon}\n endIcon={validIcon}\n maxLength={34 + 8} // max IBAN length + spaces\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputTaxIdProps, TaxIdType} from './InputTaxId.types';\nimport {Input} from '../Input';\nimport {validateNIP, validatePESEL, validateREGON} from '../../../utils/validators';\nimport {formatNIP, stripNonDigits} from '../../../utils/formatters';\nimport type {ValidationResult} from '../../../utils/validators';\n\nconst VALIDATORS: Record<TaxIdType, (v: string) => ValidationResult> = {\n NIP: validateNIP,\n PESEL: validatePESEL,\n REGON: validateREGON,\n};\n\nconst MAX_LENGTHS: Record<TaxIdType, number> = {\n NIP: 13, // 10 digits + 3 dashes\n PESEL: 11,\n REGON: 14,\n};\n\nconst PLACEHOLDERS: Record<TaxIdType, string> = {\n NIP: '123-456-78-19',\n PESEL: '00000000000',\n REGON: '000000000',\n};\n\nexport const InputTaxId = forwardRef<HTMLInputElement, InputTaxIdProps>(function InputTaxId(\n {\n taxIdType,\n formatOnChange = true,\n validateOnBlur = true,\n showValidIcon = true,\n onValidationChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder,\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const [validation, setValidation] = useState<ValidationResult>({valid: true});\n const [touched, setTouched] = useState(false);\n\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = stripNonDigits(e.target.value);\n const formatted = (formatOnChange && taxIdType === 'NIP') ? formatNIP(digits) : digits;\n\n if (value === undefined) {\n setInternalValue(formatted);\n }\n onValueChange?.(digits);\n onChange?.(e);\n },\n [onChange, value, formatOnChange, taxIdType, onValueChange],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true);\n if (validateOnBlur && currentValue) {\n const validator = VALIDATORS[taxIdType];\n const result = validator(stripNonDigits(currentValue));\n setValidation(result);\n onValidationChange?.(result);\n }\n onBlur?.(e);\n },\n [onBlur, validateOnBlur, currentValue, taxIdType, onValidationChange],\n );\n\n const isError = error || (touched && !validation.valid);\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined);\n const isSuccess = !isError && (success !== undefined ? success : (touched && validation.valid && currentValue.length > 0));\n\n const idIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"1\" y=\"3\" width=\"14\" height=\"10\" rx=\"2\" />\n <line x1=\"4\" y1=\"7\" x2=\"8\" y2=\"7\" />\n <line x1=\"4\" y1=\"10\" x2=\"12\" y2=\"10\" />\n </svg>\n );\n\n const validIcon = showValidIcon && isSuccess ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"var(--mineral-success)\" strokeWidth=\"2\">\n <path d=\"M3 8L6.5 11.5L13 4.5\" />\n </svg>\n ) : undefined;\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n value={value !== undefined ? currentValue : undefined}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder ?? PLACEHOLDERS[taxIdType]}\n startIcon={idIcon}\n endIcon={validIcon}\n maxLength={MAX_LENGTHS[taxIdType]}\n />\n );\n});\n","import {useState, useCallback, forwardRef} from 'react';\nimport type {InputCurrencyProps} from './InputCurrency.types';\nimport {Input} from '../Input';\nimport {formatCurrency, parseCurrencyToNumber} from '../../../utils/formatters';\nimport styles from './InputCurrency.module.css';\n\nexport const InputCurrency = forwardRef<HTMLInputElement, InputCurrencyProps>(function InputCurrency(\n {\n currency,\n currencySymbol,\n currencyPosition = 'end',\n decimalSeparator = ',',\n thousandSeparator = ' ',\n precision = 2,\n min,\n max,\n allowNegative = false,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n placeholder = '0,00',\n startIcon,\n endIcon,\n ...rest\n },\n ref,\n) {\n const [internalValue, setInternalValue] = useState(defaultValue?.toString() ?? '');\n const currentValue = value !== undefined ? value.toString() : internalValue;\n\n const symbol = currencySymbol ?? currency ?? '';\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n // Allow digits, one decimal separator, minus\n let filtered = '';\n let hasDecimal = false;\n for (const ch of raw) {\n if (ch >= '0' && ch <= '9') {\n filtered += ch;\n } else if ((ch === ',' || ch === '.') && !hasDecimal) {\n filtered += decimalSeparator;\n hasDecimal = true;\n } else if (ch === '-' && allowNegative && filtered.length === 0) {\n filtered += '-';\n }\n }\n\n const formatted = formatCurrency(filtered, {decimalSeparator, thousandSeparator, precision});\n\n if (value === undefined) {\n setInternalValue(formatted);\n }\n\n const num = parseCurrencyToNumber(formatted, thousandSeparator, decimalSeparator);\n onValueChange?.(num);\n onChange?.(e);\n },\n [onChange, value, decimalSeparator, thousandSeparator, precision, allowNegative, onValueChange],\n );\n\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n // Clamp and pad decimals on blur\n let num = parseCurrencyToNumber(currentValue, thousandSeparator, decimalSeparator);\n if (num !== null) {\n if (min !== undefined && num < min) num = min;\n if (max !== undefined && num > max) num = max;\n const fixed = num.toFixed(precision).replace('.', decimalSeparator);\n const formatted = formatCurrency(fixed, {decimalSeparator, thousandSeparator, precision});\n if (value === undefined) {\n setInternalValue(formatted);\n }\n onValueChange?.(num);\n }\n onBlur?.(e);\n },\n [currentValue, min, max, precision, decimalSeparator, thousandSeparator, value, onValueChange, onBlur],\n );\n\n const symbolEl = symbol ? (\n <span className={styles.symbol}>{symbol}</span>\n ) : undefined;\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n value={value !== undefined ? currentValue : undefined}\n defaultValue={value !== undefined ? undefined : defaultValue}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n startIcon={currencyPosition === 'start' ? symbolEl : startIcon}\n endIcon={currencyPosition === 'end' ? symbolEl : endIcon}\n />\n );\n});\n","import {useState, useRef, useCallback, useMemo} from 'react';\nimport type {SelectProps, SelectOption} from './Select.types';\nimport {Popover} from '../../primitives/Popover';\nimport {cn} from '../../../utils/cn';\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav';\nimport styles from './Select.module.css';\n\nexport function Select({\n options,\n value,\n defaultValue,\n onChange,\n multiple = false,\n searchable = false,\n placeholder = 'Select...',\n disabled = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n color,\n fullWidth = false,\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n loading = false,\n clearable = false,\n maxHeight = 300,\n noOptionsText = 'No options',\n renderOption,\n renderValue,\n className,\n style,\n}: SelectProps) {\n const [open, setOpen] = useState(false);\n const [internalValue, setInternalValue] = useState<string | string[]>(defaultValue ?? (multiple ? [] : ''));\n const [search, setSearch] = useState('');\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const currentValue = value !== undefined ? value : internalValue;\n const hasError = error || !!errorText;\n\n const selectedValues = useMemo(() => {\n if (Array.isArray(currentValue)) return currentValue;\n return currentValue ? [currentValue] : [];\n }, [currentValue]);\n\n const selectedOptions = useMemo(\n () => options.filter((o) => selectedValues.includes(o.value)),\n [options, selectedValues],\n );\n\n const filteredOptions = useMemo(() => {\n if (!searchable || !search) return options;\n const lower = search.toLowerCase();\n return options.filter((o) => o.label.toLowerCase().includes(lower));\n }, [options, searchable, search]);\n\n // Group options\n const groupedOptions = useMemo(() => {\n const groups = new Map<string, SelectOption[]>();\n for (const opt of filteredOptions) {\n const key = opt.group ?? '';\n if (!groups.has(key)) groups.set(key, []);\n groups.get(key)!.push(opt);\n }\n return groups;\n }, [filteredOptions]);\n\n const flatFiltered = filteredOptions;\n\n const handleSelect = useCallback(\n (index: number) => {\n const opt = flatFiltered[index];\n if (!opt || opt.disabled) return;\n\n if (multiple) {\n const arr = Array.isArray(currentValue) ? currentValue : [];\n const newVal = arr.includes(opt.value)\n ? arr.filter((v) => v !== opt.value)\n : [...arr, opt.value];\n if (value === undefined) setInternalValue(newVal);\n onChange?.(newVal);\n } else {\n if (value === undefined) setInternalValue(opt.value);\n onChange?.(opt.value);\n setOpen(false);\n setSearch('');\n }\n },\n [flatFiltered, multiple, currentValue, value, onChange],\n );\n\n const {activeIndex, setActiveIndex, resetIndex, onKeyDown} = useKeyboardNav({\n itemCount: flatFiltered.length,\n onSelect: handleSelect,\n onClose: () => {\n setOpen(false);\n setSearch('');\n },\n isOpen: open,\n });\n\n const handleTriggerClick = useCallback(() => {\n if (disabled) return;\n setOpen((v) => !v);\n resetIndex();\n }, [disabled, resetIndex]);\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n const empty = multiple ? [] : '';\n if (value === undefined) setInternalValue(empty);\n onChange?.(empty);\n },\n [multiple, value, onChange],\n );\n\n const displayValue = useMemo(() => {\n if (renderValue && selectedOptions.length > 0) {\n return renderValue(multiple ? selectedOptions : selectedOptions[0]);\n }\n if (multiple && selectedOptions.length > 0) {\n return (\n <span className={styles.tags}>\n {selectedOptions.map((o) => (\n <span key={o.value} className={styles.tag}>{o.label}</span>\n ))}\n </span>\n );\n }\n if (!multiple && selectedOptions.length > 0) {\n return selectedOptions[0].label;\n }\n return <span className={styles.placeholder}>{placeholder}</span>;\n }, [selectedOptions, multiple, renderValue, placeholder]);\n\n return (\n <div\n className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn(\n styles.label,\n open && styles.labelFocused,\n hasError && styles.labelError,\n required && styles.required,\n )}\n >\n {label}\n </label>\n )}\n\n <div\n ref={triggerRef}\n className={cn(\n styles.trigger,\n styles[variant],\n styles[size],\n open && styles.focused,\n hasError && styles.triggerError,\n disabled && styles.disabled,\n )}\n onClick={handleTriggerClick}\n onKeyDown={onKeyDown as unknown as React.KeyboardEventHandler}\n tabIndex={disabled ? -1 : 0}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-invalid={hasError || undefined}\n id={id}\n >\n <span className={styles.value}>{displayValue}</span>\n\n {loading && <span className={styles.spinner} />}\n\n {clearable && selectedValues.length > 0 && !loading && !disabled && (\n <button\n type=\"button\"\n className={styles.clearBtn}\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear selection\"\n >\n ✕\n </button>\n )}\n\n <span className={cn(styles.arrow, open && styles.arrowOpen)}>▾</span>\n </div>\n\n {/* Hidden input for form submission */}\n {name && (\n <input type=\"hidden\" name={name} value={Array.isArray(currentValue) ? currentValue.join(',') : currentValue} />\n )}\n\n <Popover\n open={open}\n anchorRef={triggerRef}\n onClose={() => {\n setOpen(false);\n setSearch('');\n }}\n matchWidth\n placement=\"bottom-start\"\n >\n <div style={{maxHeight}} className={styles.dropdown}>\n {searchable && (\n <div className={styles.searchBox}>\n <input\n type=\"text\"\n className={styles.searchInput}\n placeholder=\"Search...\"\n value={search}\n onChange={(e) => {\n setSearch(e.target.value);\n setActiveIndex(0);\n }}\n onKeyDown={onKeyDown as unknown as React.KeyboardEventHandler}\n autoFocus\n />\n </div>\n )}\n\n {flatFiltered.length === 0 ? (\n <div className={styles.noOptions}>{noOptionsText}</div>\n ) : (\n <div className={styles.optionsList} role=\"listbox\">\n {[...groupedOptions.entries()].map(([group, opts]) => (\n <div key={group}>\n {group && <div className={styles.groupHeader}>{group}</div>}\n {opts.map((opt) => {\n const flatIndex = flatFiltered.indexOf(opt);\n const isActive = flatIndex === activeIndex;\n const isSelected = selectedValues.includes(opt.value);\n return (\n <div\n key={opt.value}\n className={cn(\n styles.option,\n isActive && styles.optionActive,\n isSelected && styles.optionSelected,\n opt.disabled && styles.optionDisabled,\n )}\n onClick={() => !opt.disabled && handleSelect(flatIndex)}\n onMouseEnter={() => setActiveIndex(flatIndex)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={opt.disabled}\n >\n {multiple && (\n <span className={cn(styles.checkbox, isSelected && styles.checkboxChecked)}>\n {isSelected && '✓'}\n </span>\n )}\n {renderOption\n ? renderOption(opt, isActive, isSelected)\n : opt.label\n }\n </div>\n );\n })}\n </div>\n ))}\n </div>\n )}\n </div>\n </Popover>\n\n {(errorText || helperText) && (\n <div className={styles.bottomRow}>\n {errorText ? (\n <span className={styles.errorTextMsg} role=\"alert\">{errorText}</span>\n ) : (\n <span className={styles.helperText}>{helperText}</span>\n )}\n </div>\n )}\n </div>\n );\n}\n","import {useState, useRef, useCallback, useMemo} from 'react';\nimport type {AutocompleteProps} from './Autocomplete.types';\nimport {Popover} from '../../primitives/Popover';\nimport {cn} from '../../../utils/cn';\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav';\nimport {useDebouncedCallback} from '../../../utils/useDebounce';\nimport styles from './Autocomplete.module.css';\n\nfunction defaultGetLabel<T>(option: T): string {\n if (typeof option === 'string') return option;\n return String(option);\n}\n\nfunction defaultGetValue<T>(option: T): string {\n if (typeof option === 'string') return option;\n return String(option);\n}\n\nfunction defaultFilter<T>(options: T[], input: string, getLabel: (o: T) => string): T[] {\n if (!input) return options;\n const lower = input.toLowerCase();\n return options.filter((o) => getLabel(o).toLowerCase().includes(lower));\n}\n\nexport function Autocomplete<T = string>({\n options,\n value,\n onChange,\n getOptionLabel = defaultGetLabel,\n getOptionValue = defaultGetValue,\n filterOptions,\n multiple = false,\n freeSolo = false,\n debounceMs = 0,\n onInputChange,\n loading = false,\n loadingText = 'Loading...',\n noOptionsText = 'No options',\n placeholder = 'Type to search...',\n disabled = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n fullWidth = false,\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n clearable = false,\n maxHeight = 300,\n renderOption,\n renderTags,\n className,\n style,\n}: AutocompleteProps<T>) {\n const [open, setOpen] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const wrapperRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const hasError = error || !!errorText;\n\n const selectedValues = useMemo(() => {\n if (value === undefined) return [];\n return Array.isArray(value) ? value : [value];\n }, [value]);\n\n const filtered = useMemo(() => {\n if (filterOptions) return filterOptions(options, inputValue);\n return defaultFilter(options, inputValue, getOptionLabel);\n }, [options, inputValue, filterOptions, getOptionLabel]);\n\n const debouncedInputChange = useDebouncedCallback(\n (val: string) => onInputChange?.(val),\n debounceMs,\n );\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n debouncedInputChange(e.target.value);\n if (!open) setOpen(true);\n },\n [open, debouncedInputChange],\n );\n\n const handleSelect = useCallback(\n (index: number) => {\n const opt = filtered[index];\n if (!opt) return;\n\n if (multiple) {\n const arr = [...selectedValues];\n const val = getOptionValue(opt);\n const existIdx = arr.findIndex((v) => getOptionValue(v) === val);\n if (existIdx >= 0) {\n arr.splice(existIdx, 1);\n } else {\n arr.push(opt);\n }\n onChange?.(arr);\n setInputValue('');\n } else {\n onChange?.(opt);\n setInputValue(getOptionLabel(opt));\n setOpen(false);\n }\n inputRef.current?.focus();\n },\n [filtered, multiple, selectedValues, getOptionValue, getOptionLabel, onChange],\n );\n\n const handleRemoveTag = useCallback(\n (index: number) => {\n const arr = [...selectedValues];\n arr.splice(index, 1);\n onChange?.(multiple ? arr : arr[0] ?? ('' as unknown as T));\n },\n [selectedValues, onChange, multiple],\n );\n\n const {activeIndex, setActiveIndex, resetIndex, onKeyDown: navKeyDown} = useKeyboardNav({\n itemCount: filtered.length,\n onSelect: handleSelect,\n onClose: () => setOpen(false),\n isOpen: open,\n });\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && freeSolo && activeIndex < 0 && inputValue) {\n onChange?.(inputValue as unknown as T);\n setOpen(false);\n return;\n }\n // Backspace removes last tag in multiple\n if (e.key === 'Backspace' && multiple && !inputValue && selectedValues.length > 0) {\n handleRemoveTag(selectedValues.length - 1);\n return;\n }\n navKeyDown(e as unknown as React.KeyboardEvent<Element>);\n },\n [freeSolo, activeIndex, inputValue, multiple, selectedValues, onChange, navKeyDown, handleRemoveTag],\n );\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n setInputValue('');\n onChange?.(multiple ? ([] as unknown as T) : ('' as unknown as T));\n inputRef.current?.focus();\n },\n [multiple, onChange],\n );\n\n return (\n <div\n className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn(\n styles.label,\n open && styles.labelFocused,\n hasError && styles.labelError,\n required && styles.required,\n )}\n >\n {label}\n </label>\n )}\n\n <div\n ref={wrapperRef}\n className={cn(\n styles.inputWrapper,\n styles[variant],\n styles[size],\n open && styles.focused,\n hasError && styles.inputError,\n disabled && styles.disabled,\n )}\n onClick={() => inputRef.current?.focus()}\n >\n {multiple && selectedValues.length > 0 && (\n renderTags ? renderTags(selectedValues, handleRemoveTag) : (\n <span className={styles.tags}>\n {selectedValues.map((v, i) => (\n <span key={getOptionValue(v)} className={styles.tag}>\n {getOptionLabel(v)}\n <button\n type=\"button\"\n className={styles.tagRemove}\n onClick={(e) => {\n e.stopPropagation();\n handleRemoveTag(i);\n }}\n tabIndex={-1}\n >\n ✕\n </button>\n </span>\n ))}\n </span>\n )\n )}\n\n <input\n ref={inputRef}\n type=\"text\"\n className={styles.input}\n value={inputValue}\n onChange={handleInputChange}\n onFocus={() => {\n setOpen(true);\n resetIndex();\n }}\n onKeyDown={handleKeyDown}\n placeholder={selectedValues.length > 0 ? '' : placeholder}\n disabled={disabled}\n id={id}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-invalid={hasError || undefined}\n autoComplete=\"off\"\n />\n\n {loading && <span className={styles.spinner} />}\n\n {clearable && (selectedValues.length > 0 || inputValue) && !loading && !disabled && (\n <button\n type=\"button\"\n className={styles.clearBtn}\n onClick={handleClear}\n tabIndex={-1}\n >\n ✕\n </button>\n )}\n </div>\n\n {name && (\n <input\n type=\"hidden\"\n name={name}\n value={selectedValues.map(getOptionValue).join(',')}\n />\n )}\n\n <Popover\n open={open && (filtered.length > 0 || loading)}\n anchorRef={wrapperRef}\n onClose={() => setOpen(false)}\n matchWidth\n placement=\"bottom-start\"\n >\n <div style={{maxHeight}} className={styles.dropdown}>\n {loading ? (\n <div className={styles.loadingMsg}>{loadingText}</div>\n ) : filtered.length === 0 ? (\n <div className={styles.noOptions}>{noOptionsText}</div>\n ) : (\n <div className={styles.optionsList} role=\"listbox\">\n {filtered.map((opt, i) => {\n const isActive = i === activeIndex;\n const isSelected = selectedValues.some(\n (v) => getOptionValue(v) === getOptionValue(opt),\n );\n return (\n <div\n key={getOptionValue(opt)}\n className={cn(\n styles.option,\n isActive && styles.optionActive,\n isSelected && styles.optionSelected,\n )}\n onClick={() => handleSelect(i)}\n onMouseEnter={() => setActiveIndex(i)}\n role=\"option\"\n aria-selected={isSelected}\n >\n {renderOption ? renderOption(opt, isActive) : getOptionLabel(opt)}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </Popover>\n\n {(errorText || helperText) && (\n <div className={styles.bottomRow}>\n {errorText ? (\n <span className={styles.errorTextMsg} role=\"alert\">{errorText}</span>\n ) : (\n <span className={styles.helperText}>{helperText}</span>\n )}\n </div>\n )}\n </div>\n );\n}\n","import {useState, useRef, useCallback, useMemo} from 'react';\nimport type {DatePickerProps} from './DatePicker.types';\nimport {Popover} from '../../primitives/Popover';\nimport {cn} from '../../../utils/cn';\nimport {\n formatDate, parseDate, daysInMonth, firstDayOfMonth,\n isSameDay, isDateInRange, getDayNames, getMonthNames, addMonths, stripTime,\n} from '../../../utils/dateUtils';\nimport styles from './DatePicker.module.css';\n\nfunction toDate(val: Date | string | undefined): Date | null {\n if (!val) return null;\n if (val instanceof Date) return val;\n const d = new Date(val);\n return isNaN(d.getTime()) ? null : d;\n}\n\nexport function DatePicker({\n value,\n defaultValue,\n onChange,\n format = 'dd.MM.yyyy',\n locale = 'pl',\n min,\n max,\n disabledDates,\n placeholder,\n disabled = false,\n readOnly = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n clearable = false,\n inline = false,\n showTodayButton = true,\n firstDayOfWeek = 1,\n fullWidth = false,\n className,\n style,\n}: DatePickerProps) {\n const [open, setOpen] = useState(false);\n const [internalDate, setInternalDate] = useState<Date | null>(toDate(defaultValue));\n const [inputText, setInputText] = useState('');\n const [viewDate, setViewDate] = useState(() => {\n const d = toDate(value) ?? toDate(defaultValue) ?? new Date();\n return new Date(d.getFullYear(), d.getMonth(), 1);\n });\n const [viewMode, setViewMode] = useState<'days' | 'months' | 'years'>('days');\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const selectedDate = toDate(value) ?? internalDate;\n const minDate = toDate(min);\n const maxDate = toDate(max);\n const hasError = error || !!errorText;\n\n const displayText = useMemo(() => {\n if (inputText) return inputText;\n return selectedDate ? formatDate(selectedDate, format) : '';\n }, [selectedDate, format, inputText]);\n\n const dayNames = getDayNames(locale);\n const monthNames = getMonthNames(locale);\n\n const isDisabled = useCallback(\n (date: Date): boolean => {\n if (!isDateInRange(date, minDate, maxDate)) return true;\n if (Array.isArray(disabledDates)) {\n return disabledDates.some((d) => isSameDay(d, date));\n }\n if (typeof disabledDates === 'function') {\n return disabledDates(date);\n }\n return false;\n },\n [minDate, maxDate, disabledDates],\n );\n\n const handleSelectDate = useCallback(\n (date: Date) => {\n if (isDisabled(date)) return;\n if (value === undefined) setInternalDate(date);\n setInputText('');\n onChange?.(date);\n if (!inline) setOpen(false);\n },\n [value, onChange, inline, isDisabled],\n );\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputText(e.target.value);\n },\n [],\n );\n\n const handleInputBlur = useCallback(() => {\n if (inputText) {\n const parsed = parseDate(inputText, format);\n if (parsed && !isDisabled(parsed)) {\n handleSelectDate(parsed);\n }\n setInputText('');\n }\n }, [inputText, format, isDisabled, handleSelectDate]);\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (value === undefined) setInternalDate(null);\n setInputText('');\n onChange?.(null);\n },\n [value, onChange],\n );\n\n const handleToday = useCallback(() => {\n const today = stripTime(new Date());\n handleSelectDate(today);\n setViewDate(new Date(today.getFullYear(), today.getMonth(), 1));\n }, [handleSelectDate]);\n\n // === Calendar grid ===\n const calendarDays = useMemo(() => {\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n const totalDays = daysInMonth(year, month);\n let startDay = firstDayOfMonth(year, month); // 0=Sun\n\n // Adjust for firstDayOfWeek\n if (firstDayOfWeek === 1) {\n startDay = startDay === 0 ? 6 : startDay - 1;\n }\n\n const days: Array<{date: Date; currentMonth: boolean}> = [];\n\n // Previous month fill\n const prevMonth = month === 0 ? 11 : month - 1;\n const prevYear = month === 0 ? year - 1 : year;\n const prevDays = daysInMonth(prevYear, prevMonth);\n for (let i = startDay - 1; i >= 0; i--) {\n days.push({date: new Date(prevYear, prevMonth, prevDays - i), currentMonth: false});\n }\n\n // Current month\n for (let d = 1; d <= totalDays; d++) {\n days.push({date: new Date(year, month, d), currentMonth: true});\n }\n\n // Next month fill\n const remaining = 42 - days.length;\n const nextMonth = month === 11 ? 0 : month + 1;\n const nextYear = month === 11 ? year + 1 : year;\n for (let d = 1; d <= remaining; d++) {\n days.push({date: new Date(nextYear, nextMonth, d), currentMonth: false});\n }\n\n return days;\n }, [viewDate, firstDayOfWeek]);\n\n const today = stripTime(new Date());\n\n const renderCalendar = () => (\n <div className={styles.calendar}>\n {/* Header */}\n <div className={styles.calendarHeader}>\n <button\n type=\"button\"\n className={styles.navBtn}\n onClick={() => setViewDate(addMonths(viewDate, -1))}\n aria-label=\"Previous month\"\n >\n ‹\n </button>\n <button\n type=\"button\"\n className={styles.headerTitle}\n onClick={() => setViewMode(viewMode === 'days' ? 'months' : 'days')}\n >\n {monthNames[viewDate.getMonth()]} {viewDate.getFullYear()}\n </button>\n <button\n type=\"button\"\n className={styles.navBtn}\n onClick={() => setViewDate(addMonths(viewDate, 1))}\n aria-label=\"Next month\"\n >\n ›\n </button>\n </div>\n\n {viewMode === 'days' && (\n <>\n {/* Day names */}\n <div className={styles.dayNames}>\n {dayNames.map((d) => (\n <span key={d} className={styles.dayName}>{d}</span>\n ))}\n </div>\n\n {/* Day grid */}\n <div className={styles.dayGrid}>\n {calendarDays.map(({date, currentMonth}, i) => {\n const isSelected = selectedDate && isSameDay(date, selectedDate);\n const isToday = isSameDay(date, today);\n const isDis = isDisabled(date);\n\n return (\n <button\n key={i}\n type=\"button\"\n className={cn(\n styles.day,\n !currentMonth && styles.dayOtherMonth,\n isToday && styles.dayToday,\n isSelected && styles.daySelected,\n isDis && styles.dayDisabled,\n )}\n onClick={() => handleSelectDate(date)}\n disabled={isDis}\n tabIndex={-1}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n </>\n )}\n\n {viewMode === 'months' && (\n <div className={styles.monthGrid}>\n {monthNames.map((m, i) => (\n <button\n key={m}\n type=\"button\"\n className={cn(\n styles.monthCell,\n viewDate.getMonth() === i && styles.monthSelected,\n )}\n onClick={() => {\n setViewDate(new Date(viewDate.getFullYear(), i, 1));\n setViewMode('days');\n }}\n >\n {m.slice(0, 3)}\n </button>\n ))}\n </div>\n )}\n\n {showTodayButton && (\n <div className={styles.footer}>\n <button type=\"button\" className={styles.todayBtn} onClick={handleToday}>\n Today\n </button>\n </div>\n )}\n </div>\n );\n\n const calendarIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <rect x=\"1\" y=\"3\" width=\"14\" height=\"12\" rx=\"2\" />\n <line x1=\"1\" y1=\"7\" x2=\"15\" y2=\"7\" />\n <line x1=\"5\" y1=\"1\" x2=\"5\" y2=\"4\" />\n <line x1=\"11\" y1=\"1\" x2=\"11\" y2=\"4\" />\n </svg>\n );\n\n if (inline) {\n return (\n <div className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)} style={style}>\n {label && (\n <label className={cn(styles.label, hasError && styles.labelError, required && styles.required)}>\n {label}\n </label>\n )}\n {renderCalendar()}\n </div>\n );\n }\n\n return (\n <div className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)} style={style}>\n {label && (\n <label\n htmlFor={id}\n className={cn(\n styles.label,\n open && styles.labelFocused,\n hasError && styles.labelError,\n required && styles.required,\n )}\n >\n {label}\n </label>\n )}\n\n <div\n ref={triggerRef}\n className={cn(\n styles.trigger,\n styles[variant],\n styles[size],\n open && styles.focused,\n hasError && styles.triggerError,\n disabled && styles.disabled,\n )}\n onClick={() => !disabled && !readOnly && setOpen(true)}\n >\n <span className={styles.icon}>{calendarIcon}</span>\n <input\n type=\"text\"\n className={styles.input}\n value={displayText}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n placeholder={placeholder ?? format.toLowerCase()}\n disabled={disabled}\n readOnly={readOnly}\n id={id}\n aria-invalid={hasError || undefined}\n />\n {clearable && selectedDate && !disabled && (\n <button\n type=\"button\"\n className={styles.clearBtn}\n onClick={handleClear}\n tabIndex={-1}\n >\n ✕\n </button>\n )}\n </div>\n\n {name && selectedDate && (\n <input type=\"hidden\" name={name} value={selectedDate.toISOString().split('T')[0]} />\n )}\n\n <Popover\n open={open}\n anchorRef={triggerRef}\n onClose={() => setOpen(false)}\n placement=\"bottom-start\"\n >\n {renderCalendar()}\n </Popover>\n\n {(errorText || helperText) && (\n <div className={styles.bottomRow}>\n {errorText ? (\n <span className={styles.errorTextMsg} role=\"alert\">{errorText}</span>\n ) : (\n <span className={styles.helperText}>{helperText}</span>\n )}\n </div>\n )}\n </div>\n );\n}\n","import {useState, useRef, useCallback, useMemo, useEffect} from 'react';\nimport type {TimePickerProps} from './TimePicker.types';\nimport {Popover} from '../../primitives/Popover';\nimport {cn} from '../../../utils/cn';\nimport {formatTime, parseTime} from '../../../utils/dateUtils';\nimport styles from './TimePicker.module.css';\n\nexport function TimePicker({\n value,\n defaultValue,\n onChange,\n format = '24h',\n showSeconds = false,\n minuteStep = 1,\n min,\n max,\n placeholder,\n disabled = false,\n readOnly = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n clearable = false,\n fullWidth = false,\n className,\n style,\n}: TimePickerProps) {\n const [open, setOpen] = useState(false);\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const currentValue = value !== undefined ? value : internalValue;\n const hasError = error || !!errorText;\n const parsed = parseTime(currentValue);\n\n const hours = useMemo(() => {\n const arr: number[] = [];\n const maxH = format === '12h' ? 12 : 23;\n const startH = format === '12h' ? 1 : 0;\n for (let i = startH; i <= maxH; i++) arr.push(i);\n return arr;\n }, [format]);\n\n const minutes = useMemo(() => {\n const arr: number[] = [];\n for (let i = 0; i < 60; i += minuteStep) arr.push(i);\n return arr;\n }, [minuteStep]);\n\n const seconds = useMemo(() => {\n if (!showSeconds) return [];\n const arr: number[] = [];\n for (let i = 0; i < 60; i++) arr.push(i);\n return arr;\n }, [showSeconds]);\n\n const handleSelect = useCallback(\n (h: number, m: number, s: number = 0) => {\n const time = formatTime(h, m, s, showSeconds);\n if (value === undefined) setInternalValue(time);\n onChange?.(time);\n },\n [value, onChange, showSeconds],\n );\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n if (value === undefined) setInternalValue(raw);\n },\n [value],\n );\n\n const handleInputBlur = useCallback(() => {\n const p = parseTime(currentValue);\n if (p) {\n const time = formatTime(p.hours, p.minutes, p.seconds, showSeconds);\n if (value === undefined) setInternalValue(time);\n onChange?.(time);\n }\n }, [currentValue, showSeconds, value, onChange]);\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (value === undefined) setInternalValue('');\n onChange?.('');\n },\n [value, onChange],\n );\n\n const clockIcon = (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" />\n <line x1=\"8\" y1=\"4\" x2=\"8\" y2=\"8\" />\n <line x1=\"8\" y1=\"8\" x2=\"11\" y2=\"10\" />\n </svg>\n );\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n\n return (\n <div className={cn(styles.wrapper, fullWidth && styles.fullWidth, className)} style={style}>\n {label && (\n <label\n htmlFor={id}\n className={cn(\n styles.label,\n open && styles.labelFocused,\n hasError && styles.labelError,\n required && styles.required,\n )}\n >\n {label}\n </label>\n )}\n\n <div\n ref={triggerRef}\n className={cn(\n styles.trigger,\n styles[variant],\n styles[size],\n open && styles.focused,\n hasError && styles.triggerError,\n disabled && styles.disabled,\n )}\n onClick={() => !disabled && !readOnly && setOpen(true)}\n >\n <span className={styles.icon}>{clockIcon}</span>\n <input\n type=\"text\"\n className={styles.input}\n value={currentValue}\n onChange={handleInputChange}\n onBlur={handleInputBlur}\n placeholder={placeholder ?? (showSeconds ? 'HH:MM:SS' : 'HH:MM')}\n disabled={disabled}\n readOnly={readOnly}\n id={id}\n aria-invalid={hasError || undefined}\n />\n {clearable && currentValue && !disabled && (\n <button type=\"button\" className={styles.clearBtn} onClick={handleClear} tabIndex={-1}>✕</button>\n )}\n </div>\n\n {name && <input type=\"hidden\" name={name} value={currentValue} />}\n\n <Popover\n open={open}\n anchorRef={triggerRef}\n onClose={() => setOpen(false)}\n placement=\"bottom-start\"\n >\n <div className={styles.columns}>\n <TimeColumn\n items={hours}\n selected={parsed?.hours}\n onSelect={(h) => handleSelect(h, parsed?.minutes ?? 0, parsed?.seconds ?? 0)}\n label=\"Hr\"\n />\n <TimeColumn\n items={minutes}\n selected={parsed?.minutes}\n onSelect={(m) => handleSelect(parsed?.hours ?? 0, m, parsed?.seconds ?? 0)}\n label=\"Min\"\n />\n {showSeconds && (\n <TimeColumn\n items={seconds}\n selected={parsed?.seconds}\n onSelect={(s) => handleSelect(parsed?.hours ?? 0, parsed?.minutes ?? 0, s)}\n label=\"Sec\"\n />\n )}\n </div>\n </Popover>\n\n {(errorText || helperText) && (\n <div className={styles.bottomRow}>\n {errorText ? (\n <span className={styles.errorTextMsg} role=\"alert\">{errorText}</span>\n ) : (\n <span className={styles.helperText}>{helperText}</span>\n )}\n </div>\n )}\n </div>\n );\n}\n\n// === TimeColumn sub-component ===\n\nfunction TimeColumn({\n items,\n selected,\n onSelect,\n label,\n}: {\n items: number[];\n selected?: number;\n onSelect: (val: number) => void;\n label: string;\n}) {\n const listRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (selected !== undefined && listRef.current) {\n const el = listRef.current.querySelector(`[data-value=\"${selected}\"]`) as HTMLElement | null;\n if (el) {\n el.scrollIntoView({block: 'center', behavior: 'instant'});\n }\n }\n }, [selected]);\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n\n return (\n <div className={styles.column}>\n <div className={styles.columnLabel}>{label}</div>\n <div ref={listRef} className={styles.columnList}>\n {items.map((val) => (\n <button\n key={val}\n type=\"button\"\n data-value={val}\n className={cn(\n styles.columnItem,\n val === selected && styles.columnItemSelected,\n )}\n onClick={() => onSelect(val)}\n >\n {pad(val)}\n </button>\n ))}\n </div>\n </div>\n );\n}\n","import {createContext, useContext} from 'react';\nimport type {FormContextValue} from './Form.types';\n\nexport const FormContext = createContext<FormContextValue | null>(null);\n\nexport function useFormContext(): FormContextValue | null {\n return useContext(FormContext);\n}\n","import {useState, useRef, useCallback, useMemo} from 'react';\nimport type {FormProps, FieldRegistration, FormContextValue, FormHelpers} from './Form.types';\nimport {FormContext} from './FormContext';\nimport {validateRequired} from '../../../utils/validators';\nimport type {ValidationResult} from '../../../utils/validators';\n\nexport function Form({\n initialValues = {},\n onSubmit,\n onChange,\n validationMode = 'onBlur',\n children,\n className,\n style,\n noValidate = true,\n}: FormProps) {\n const [values, setValues] = useState<Record<string, unknown>>({...initialValues});\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const fieldsRef = useRef<Map<string, FieldRegistration>>(new Map());\n\n const registerField = useCallback((reg: FieldRegistration) => {\n fieldsRef.current.set(reg.name, reg);\n }, []);\n\n const unregisterField = useCallback((name: string) => {\n fieldsRef.current.delete(name);\n }, []);\n\n const validateFieldInternal = useCallback(\n (name: string, val?: unknown): ValidationResult => {\n const reg = fieldsRef.current.get(name);\n if (!reg) return {valid: true};\n\n const fieldValue = val !== undefined ? val : values[name];\n const strValue = fieldValue != null ? String(fieldValue) : '';\n\n // Required check\n if (reg.required) {\n const reqResult = validateRequired(strValue);\n if (!reqResult.valid) return reqResult;\n }\n\n // Custom validators\n if (reg.validate) {\n for (const validator of reg.validate) {\n const result = validator(strValue);\n if (!result.valid) return result;\n }\n }\n\n return {valid: true};\n },\n [values],\n );\n\n const validateField = useCallback(\n (name: string): ValidationResult => {\n const result = validateFieldInternal(name);\n setErrors((prev) => {\n if (result.valid) {\n const next = {...prev};\n delete next[name];\n return next;\n }\n return {...prev, [name]: result.error!};\n });\n return result;\n },\n [validateFieldInternal],\n );\n\n const validateAll = useCallback((): boolean => {\n let allValid = true;\n const newErrors: Record<string, string> = {};\n\n for (const [name] of fieldsRef.current) {\n const result = validateFieldInternal(name);\n if (!result.valid) {\n allValid = false;\n newErrors[name] = result.error!;\n }\n }\n\n setErrors(newErrors);\n // Mark all as touched\n const allTouched: Record<string, boolean> = {};\n for (const [name] of fieldsRef.current) {\n allTouched[name] = true;\n }\n setTouched(allTouched);\n\n return allValid;\n }, [validateFieldInternal]);\n\n const setFieldValue = useCallback(\n (name: string, val: unknown) => {\n setValues((prev) => {\n const next = {...prev, [name]: val};\n onChange?.(next);\n return next;\n });\n\n if (validationMode === 'onChange' && touched[name]) {\n // Defer validation to next tick so values are updated\n setTimeout(() => validateField(name), 0);\n }\n },\n [onChange, validationMode, touched, validateField],\n );\n\n const setFieldError = useCallback(\n (name: string, error: string) => {\n setErrors((prev) => ({...prev, [name]: error}));\n },\n [],\n );\n\n const setFieldTouched = useCallback(\n (name: string, isTouched: boolean) => {\n setTouched((prev) => ({...prev, [name]: isTouched}));\n if (validationMode === 'onBlur' && isTouched) {\n validateField(name);\n }\n },\n [validationMode, validateField],\n );\n\n const resetForm = useCallback(() => {\n setValues({...initialValues});\n setErrors({});\n setTouched({});\n setIsSubmitting(false);\n }, [initialValues]);\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault();\n if (isSubmitting) return;\n\n const valid = validateAll();\n if (!valid) return;\n\n setIsSubmitting(true);\n const helpers: FormHelpers = {\n setSubmitting: setIsSubmitting,\n resetForm,\n setFieldError,\n };\n\n try {\n await onSubmit?.(values, helpers);\n } finally {\n setIsSubmitting(false);\n }\n },\n [isSubmitting, validateAll, values, onSubmit, resetForm, setFieldError],\n );\n\n const ctx = useMemo<FormContextValue>(\n () => ({\n values,\n errors,\n touched,\n registerField,\n unregisterField,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n validateField,\n validateAll,\n resetForm,\n isSubmitting,\n }),\n [values, errors, touched, registerField, unregisterField, setFieldValue, setFieldError, setFieldTouched, validateField, validateAll, resetForm, isSubmitting],\n );\n\n return (\n <FormContext.Provider value={ctx}>\n <form\n onSubmit={handleSubmit}\n noValidate={noValidate}\n className={className}\n style={style}\n >\n {typeof children === 'function' ? children(ctx) : children}\n </form>\n </FormContext.Provider>\n );\n}\n","import {useEffect, useCallback} from 'react';\nimport {useFormContext} from './FormContext';\nimport type {ValidatorFn} from '../../../utils/validators';\n\nexport interface UseFormFieldOptions {\n validate?: ValidatorFn[];\n required?: boolean;\n}\n\nexport interface UseFormFieldReturn {\n value: unknown;\n error: string | undefined;\n touched: boolean;\n onChange: (value: unknown) => void;\n onBlur: () => void;\n}\n\nexport function useFormField(name: string, options?: UseFormFieldOptions): UseFormFieldReturn {\n const ctx = useFormContext();\n\n useEffect(() => {\n if (!ctx) return;\n ctx.registerField({\n name,\n validate: options?.validate,\n required: options?.required,\n });\n return () => ctx.unregisterField(name);\n }, [ctx, name, options?.validate, options?.required]);\n\n const onChange = useCallback(\n (val: unknown) => {\n ctx?.setFieldValue(name, val);\n },\n [ctx, name],\n );\n\n const onBlur = useCallback(() => {\n ctx?.setFieldTouched(name, true);\n }, [ctx, name]);\n\n return {\n value: ctx?.values[name] ?? '',\n error: ctx?.errors[name],\n touched: ctx?.touched[name] ?? false,\n onChange,\n onBlur,\n };\n}\n"],"names":["ThemeContext","createContext","themeToVarMap","MineralThemeProvider","theme","children","ref","useRef","useEffect","el","key","value","varName","jsx","useTheme","useContext","cn","classes","ok","fail","error","validateRequired","validateMinLength","min","validateMaxLength","max","validatePattern","pattern","message","validateRange","num","EMAIL_RE","validateEmail","PHONE_LENGTH","validatePhone","countryCode","digits","expected","IBAN_LENGTHS","mod97","numStr","remainder","i","validateIBAN","iban","expectedLength","ch","NIP_WEIGHTS","validateNIP","sum","checkDigit","PESEL_WEIGHTS","validatePESEL","REGON9_WEIGHTS","REGON14_WEIGHTS","validateREGON","weights","lastDigit","composeValidators","validators","validator","result","stripNonDigits","stripNonAlphanumeric","capitalizeWords","formatIBAN","unformatIBAN","PHONE_GROUPS","formatPhone","options","groups","_a","parts","pos","len","formatNIP","formatCurrency","decimalSeparator","thousandSeparator","precision","clean","intPart","decPart","isNegative","parseCurrencyToNumber","formatted","adjustCursorAfterFormat","oldValue","newValue","oldCursor","realCharsBefore","count","daysInMonth","year","month","firstDayOfMonth","isSameDay","a","b","isDateInRange","date","stripTime","addMonths","addYears","pad","n","formatDate","format","day","parseDate","dayIdx","monthIdx","yearIdx","DAY_NAMES_PL","DAY_NAMES_EN","MONTH_NAMES_PL","MONTH_NAMES_EN","getDayNames","locale","getMonthNames","parseTime","hours","minutes","seconds","formatTime","showSeconds","base","useDebounce","delay","debounced","setDebounced","useState","timer","useDebouncedCallback","callback","callbackRef","timerRef","useCallback","args","useClickOutside","handler","listener","e","useKeyboardNav","itemCount","onSelect","onClose","isOpen","loop","activeIndex","setActiveIndex","resetIndex","onKeyDown","prev","Portal","container","target","createPortal","Popover","open","anchorRef","placement","matchWidth","offset","className","style","popoverRef","position","setPosition","flipped","setFlipped","updatePosition","anchor","popover","viewport","isTop","isEnd","spaceBelow","spaceAbove","shouldFlip","showOnTop","top","left","handleKey","handleClick","styles","Checkbox","forwardRef","checked","defaultChecked","indeterminate","name","id","disabled","size","color","label","labelPosition","errorText","onChange","internalRef","inputRef","hasError","jsxs","RadioContext","useRadioGroup","Radio","group","resolvedName","resolvedDisabled","resolvedSize","resolvedColor","resolvedChecked","handleChange","RadioGroup","defaultValue","direction","internalValue","setInternalValue","currentValue","val","ctx","useMemo","Toggle","Input","type","placeholder","readOnly","required","autoFocus","autoComplete","inputMode","variant","fullWidth","rounded","helperText","startIcon","endIcon","clearable","success","maxLength","showCharCount","onFocus","onBlur","onClear","loading","inputClassName","labelClassName","focused","setFocused","hasContent","handleFocus","handleBlur","handleClear","input","containerClasses","Textarea","rows","autoResize","minRows","maxRows","textareaClassName","textareaRef","resolvedRef","adjustHeight","lineHeight","minH","maxH","newHeight","calcStrength","score","STRENGTH_LABELS","InputPassword","showToggle","showStrength","onStrengthChange","rest","visible","setVisible","strength","toggleIcon","v","clampValue","roundToPrecision","factor","InputNumber","step","showStepper","allowNegative","onValueChange","intervalRef","updateValue","newVal","increment","current","startHold","stopHold","filtered","clamped","handleKeyDown","stepper","InputSearch","debounceMs","onSearch","debouncedSearch","InputEmail","validateOnBlur","validateOnChange","showValidIcon","onValidationChange","validation","setValidation","touched","setTouched","runValidation","isError","resolvedErrorText","isSuccess","InputPhone","showCountryCode","formatOnChange","COUNTRY_PREFIXES","prefix","phoneIcon","InputName","autoCapitalize","allowNumbers","allowSpecialChars","minWords","filterValue","raw","words","InputIBAN","VALIDATORS","MAX_LENGTHS","PLACEHOLDERS","InputTaxId","taxIdType","idIcon","validIcon","InputCurrency","currency","currencySymbol","currencyPosition","symbol","hasDecimal","fixed","symbolEl","Select","multiple","searchable","maxHeight","noOptionsText","renderOption","renderValue","setOpen","search","setSearch","triggerRef","selectedValues","selectedOptions","o","filteredOptions","lower","groupedOptions","opt","flatFiltered","handleSelect","index","arr","handleTriggerClick","empty","displayValue","opts","flatIndex","isActive","isSelected","defaultGetLabel","option","defaultGetValue","defaultFilter","getLabel","Autocomplete","getOptionLabel","getOptionValue","filterOptions","freeSolo","onInputChange","loadingText","renderTags","inputValue","setInputValue","wrapperRef","debouncedInputChange","handleInputChange","existIdx","handleRemoveTag","navKeyDown","toDate","d","DatePicker","disabledDates","inline","showTodayButton","firstDayOfWeek","internalDate","setInternalDate","inputText","setInputText","viewDate","setViewDate","viewMode","setViewMode","selectedDate","minDate","maxDate","displayText","dayNames","monthNames","isDisabled","handleSelectDate","handleInputBlur","parsed","handleToday","today","calendarDays","totalDays","startDay","days","prevMonth","prevYear","prevDays","remaining","nextMonth","nextYear","renderCalendar","Fragment","currentMonth","isToday","isDis","m","calendarIcon","TimePicker","minuteStep","startH","h","s","time","p","clockIcon","TimeColumn","items","selected","listRef","FormContext","useFormContext","Form","initialValues","onSubmit","validationMode","noValidate","values","setValues","errors","setErrors","isSubmitting","setIsSubmitting","fieldsRef","registerField","reg","unregisterField","validateFieldInternal","fieldValue","strValue","reqResult","validateField","next","validateAll","allValid","newErrors","allTouched","setFieldValue","setFieldError","setFieldTouched","isTouched","resetForm","handleSubmit","helpers","useFormField"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/theme/ThemeProvider.tsx","../src/utils/cn.ts","../src/utils/postalCodes.ts","../src/utils/creditCards.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/utils/useInteractionEffect.tsx","../src/components/primitives/Portal/Portal.tsx","../src/components/primitives/Popover/Popover.tsx","../src/utils/layoutProps.ts","../src/components/layout/Container/Container.tsx","../src/utils/appearanceProps.ts","../src/components/layout/MHeader/MHeader.tsx","../src/components/layout/MFooter/MFooter.tsx","../src/components/layout/MNavbar/MNavbar.tsx","../src/components/typography/Link/Link.tsx","../src/components/layout/MNavs/MNavs.tsx","../src/components/layout/MTabs/MTabs.tsx","../src/components/layout/Section/Section.tsx","../src/components/layout/Stack/Stack.tsx","../src/components/layout/Inline/Inline.tsx","../src/components/layout/Grid/Grid.tsx","../src/components/layout/MGrid/MGrid.tsx","../src/components/layout/Surface/Surface.tsx","../src/components/layout/Divider/Divider.tsx","../src/components/controls/Button/Button.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/display/Card/Card.tsx","../src/components/display/Badge/Badge.tsx","../src/components/display/Alert/Alert.tsx","../src/components/display/Table/Table.tsx","../src/components/display/Collapsible/Collapsible.tsx","../src/components/display/Spinner/Spinner.tsx","../src/components/typography/Text/Text.tsx","../src/components/display/Loader/Loader.tsx","../src/components/display/Avatar/Avatar.tsx","../src/components/display/Modal/Modal.tsx","../src/components/typography/Heading/Heading.tsx","../src/components/typography/Code/Code.tsx","../src/components/typography/List/List.tsx","../src/components/display/CalendarBoard/CalendarBoard.tsx","../src/utils/useControllableString.ts","../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/inputs/InputCreditCard/InputCreditCard.tsx","../src/components/inputs/InputGroup/InputGroup.tsx","../src/components/inputs/InputPostCode/InputPostCode.tsx","../src/components/dropdowns/Select/Select.tsx","../src/components/dropdowns/Autocomplete/Autocomplete.tsx","../src/components/dropdowns/DatePicker/DatePicker.tsx","../src/components/dropdowns/DateRangePicker/DateRangePicker.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, useMemo, useRef, type ReactNode} from 'react'\nimport type {MineralTheme, MineralMode} from './types'\n\ninterface ThemeContextValue {\n theme: MineralTheme\n mode: MineralMode\n}\n\nconst ThemeContext = createContext<ThemeContextValue>({theme: {}, mode: 'dark'})\n\n// Map JS theme keys to CSS custom properties used across the framework.\nconst themeToVarMap: Record<keyof MineralTheme, string> = {\n primaryRgb: '--mineral-primary-rgb',\n primary: '--mineral-primary',\n primaryDark: '--mineral-primary-dark',\n primaryLight: '--mineral-primary-light',\n neutralRgb: '--mineral-neutral-rgb',\n neutral: '--mineral-neutral',\n dark: '--mineral-dark',\n darkLight: '--mineral-dark-light',\n surface: '--mineral-surface',\n surfaceContrast: '--mineral-surface-contrast',\n pageBg: '--mineral-page-bg',\n pageText: '--mineral-page-text',\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 successRgb: '--mineral-success-rgb',\n success: '--mineral-success',\n errorRgb: '--mineral-error-rgb',\n error: '--mineral-error',\n warningRgb: '--mineral-warning-rgb',\n warning: '--mineral-warning',\n infoRgb: '--mineral-info-rgb',\n info: '--mineral-info',\n fontFamily: '--mineral-font-family-sans',\n fontFamilySans: '--mineral-font-family-sans',\n fontFamilyMono: '--mineral-font-family-mono',\n fontFamilyHeading: '--mineral-font-family-heading',\n fontColorDefault: '--mineral-fcolor-default',\n fontColorMuted: '--mineral-fcolor-muted',\n fontColorHeading: '--mineral-fcolor-heading',\n fontColorInverted: '--mineral-fcolor-inverted',\n fontColorPrimary: '--mineral-fcolor-primary',\n fontColorNeutral: '--mineral-fcolor-neutral',\n fontColorSuccess: '--mineral-fcolor-success',\n fontColorError: '--mineral-fcolor-error',\n fontColorWarning: '--mineral-fcolor-warning',\n fontColorInfo: '--mineral-fcolor-info',\n radiusSm: '--mineral-radius-sm',\n radiusMd: '--mineral-radius-md',\n radiusLg: '--mineral-radius-lg',\n}\n\nexport type MineralThemeScope = 'body' | 'wrapper'\n\ninterface MineralThemeProviderProps {\n theme?: MineralTheme\n mode?: MineralMode\n scope?: MineralThemeScope\n children: ReactNode\n}\n\n// Apply token overrides to either the body or a local wrapper and expose theme state via context.\nexport function MineralThemeProvider({theme, mode = 'dark', scope = 'body', children}: MineralThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null)\n const safeTheme = useMemo(() => theme ?? {}, [theme])\n\n useEffect(() => {\n const target = scope === 'body' ? document.body : ref.current\n if (!target) return\n\n for (const [key, value] of Object.entries(safeTheme)) {\n const varName = themeToVarMap[key as keyof MineralTheme]\n if (varName && value) {\n target.style.setProperty(varName, value)\n if (varName === '--mineral-font-family-sans') {\n target.style.setProperty('--mineral-font-family', value)\n }\n }\n }\n\n if (mode === 'light') {\n target.classList.add('mineral-light')\n } else {\n target.classList.remove('mineral-light')\n }\n\n return () => {\n for (const [key] of Object.entries(safeTheme)) {\n const varName = themeToVarMap[key as keyof MineralTheme]\n if (varName) {\n target.style.removeProperty(varName)\n if (varName === '--mineral-font-family-sans') {\n target.style.removeProperty('--mineral-font-family')\n }\n }\n }\n\n if (mode === 'light') {\n target.classList.remove('mineral-light')\n }\n }\n }, [mode, safeTheme, scope])\n\n return (\n <ThemeContext.Provider value={{theme: safeTheme, mode}}>\n {scope === 'wrapper' ? (\n <div ref={ref} className={mode === 'light' ? 'mineral-light' : undefined}>\n {children}\n </div>\n ) : (\n children\n )}\n </ThemeContext.Provider>\n )\n}\n\n// Read the nearest provider theme and mode inside framework-aware components.\nexport function useTheme(): ThemeContextValue {\n return useContext(ThemeContext)\n}\n","// Join optional class names without pulling a runtime dependency.\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ')\n}\n","import type {ValidationResult} from './validators'\n\nexport interface PostCodeRule {\n countryCode: string\n label: string\n placeholder: string\n example: string\n inputMode: 'text' | 'numeric'\n maxLength: number\n regex: RegExp\n sanitize: (value: string) => string\n format: (value: string) => string\n message: string\n}\n\nconst OK_RESULT: ValidationResult = {valid: true}\n\nfunction keepLettersAndDigits(value: string): string {\n return value.toUpperCase().replace(/[^A-Z0-9]/g, '')\n}\n\nfunction formatPlPostCode(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 5)\n\n if (digits.length <= 2) {\n return digits\n }\n\n return `${digits.slice(0, 2)}-${digits.slice(2)}`\n}\n\nfunction formatUsPostCode(value: string): string {\n const digits = value.replace(/\\D/g, '').slice(0, 9)\n\n if (digits.length <= 5) {\n return digits\n }\n\n return `${digits.slice(0, 5)}-${digits.slice(5)}`\n}\n\nfunction formatFixedDigits(value: string, maxLength: number): string {\n return value.replace(/\\D/g, '').slice(0, maxLength)\n}\n\nfunction formatCaPostCode(value: string): string {\n const clean = keepLettersAndDigits(value).slice(0, 6)\n const chars = clean.split('')\n\n return chars\n .map((char, index) => {\n if (index === 3) {\n return ` ${char}`\n }\n\n return char\n })\n .join('')\n}\n\nfunction formatGbPostCode(value: string): string {\n const clean = keepLettersAndDigits(value).slice(0, 7)\n\n if (clean.length <= 3) {\n return clean\n }\n\n return `${clean.slice(0, clean.length - 3)} ${clean.slice(-3)}`\n}\n\nfunction formatNlPostCode(value: string): string {\n const clean = keepLettersAndDigits(value).slice(0, 6)\n\n if (clean.length <= 4) {\n return clean\n }\n\n return `${clean.slice(0, 4)} ${clean.slice(4)}`\n}\n\nexport const postCodeRules: Record<string, PostCodeRule> = {\n PL: {\n countryCode: 'PL',\n label: 'Poland',\n placeholder: '12-345',\n example: '00-001',\n inputMode: 'numeric',\n maxLength: 6,\n regex: /^\\d{2}-\\d{3}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: formatPlPostCode,\n message: 'Use the Polish format XX-XXX',\n },\n DE: {\n countryCode: 'DE',\n label: 'Germany',\n placeholder: '12345',\n example: '10115',\n inputMode: 'numeric',\n maxLength: 5,\n regex: /^\\d{5}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: (value) => formatFixedDigits(value, 5),\n message: 'Use a 5-digit German postal code',\n },\n FR: {\n countryCode: 'FR',\n label: 'France',\n placeholder: '75001',\n example: '75001',\n inputMode: 'numeric',\n maxLength: 5,\n regex: /^\\d{5}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: (value) => formatFixedDigits(value, 5),\n message: 'Use a 5-digit French postal code',\n },\n ES: {\n countryCode: 'ES',\n label: 'Spain',\n placeholder: '28013',\n example: '28013',\n inputMode: 'numeric',\n maxLength: 5,\n regex: /^\\d{5}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: (value) => formatFixedDigits(value, 5),\n message: 'Use a 5-digit Spanish postal code',\n },\n IT: {\n countryCode: 'IT',\n label: 'Italy',\n placeholder: '00184',\n example: '00184',\n inputMode: 'numeric',\n maxLength: 5,\n regex: /^\\d{5}$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 5),\n format: (value) => formatFixedDigits(value, 5),\n message: 'Use a 5-digit Italian postal code',\n },\n US: {\n countryCode: 'US',\n label: 'United States',\n placeholder: '12345 or 12345-6789',\n example: '10001',\n inputMode: 'numeric',\n maxLength: 10,\n regex: /^\\d{5}(?:-\\d{4})?$/,\n sanitize: (value) => value.replace(/\\D/g, '').slice(0, 9),\n format: formatUsPostCode,\n message: 'Use ZIP or ZIP+4 format',\n },\n CA: {\n countryCode: 'CA',\n label: 'Canada',\n placeholder: 'A1A 1A1',\n example: 'M5V 3L9',\n inputMode: 'text',\n maxLength: 7,\n regex: /^[A-Z]\\d[A-Z] \\d[A-Z]\\d$/,\n sanitize: (value) => keepLettersAndDigits(value).slice(0, 6),\n format: formatCaPostCode,\n message: 'Use the Canadian format A1A 1A1',\n },\n GB: {\n countryCode: 'GB',\n label: 'United Kingdom',\n placeholder: 'SW1A 1AA',\n example: 'SW1A 1AA',\n inputMode: 'text',\n maxLength: 8,\n regex: /^[A-Z]{1,2}\\d[A-Z\\d]? \\d[A-Z]{2}$/,\n sanitize: (value) => keepLettersAndDigits(value).slice(0, 7),\n format: formatGbPostCode,\n message: 'Use a valid UK postcode',\n },\n NL: {\n countryCode: 'NL',\n label: 'Netherlands',\n placeholder: '1234 AB',\n example: '1012 AB',\n inputMode: 'text',\n maxLength: 7,\n regex: /^\\d{4} [A-Z]{2}$/,\n sanitize: (value) => keepLettersAndDigits(value).slice(0, 6),\n format: formatNlPostCode,\n message: 'Use the Dutch format 1234 AB',\n },\n}\n\nexport const postCodeCountries = Object.values(postCodeRules).map(({countryCode, label}) => ({\n value: countryCode,\n label,\n}))\n\n// Return the active postal rule or fall back to Poland for deterministic behavior.\nexport function getPostCodeRule(countryCode: string = 'PL'): PostCodeRule {\n return postCodeRules[countryCode.toUpperCase()] ?? postCodeRules.PL\n}\n\n// Keep postal input values aligned with the selected country format.\nexport function formatPostCode(value: string, countryCode: string = 'PL'): string {\n const rule = getPostCodeRule(countryCode)\n return rule.format(rule.sanitize(value))\n}\n\n// Validate the user-visible postal code against the selected country rule.\nexport function validatePostCode(value: string, countryCode: string = 'PL'): ValidationResult {\n if (!value) {\n return OK_RESULT\n }\n\n const rule = getPostCodeRule(countryCode)\n const formatted = rule.format(rule.sanitize(value))\n\n if (!rule.regex.test(formatted)) {\n return {valid: false, error: rule.message}\n }\n\n return OK_RESULT\n}\n","import type {ValidationResult} from './validators'\n\nexport type CreditCardBrand = 'visa' | 'mastercard' | 'amex' | 'discover' | 'maestro' | 'unknown'\n\nexport interface CreditCardBrandDetails {\n brand: CreditCardBrand\n label: string\n iconLabel: string\n maxLength: number\n formatGroups: number[]\n regex: RegExp\n}\n\nconst OK_RESULT: ValidationResult = {valid: true}\n\nconst creditCardBrands: CreditCardBrandDetails[] = [\n {\n brand: 'visa',\n label: 'Visa',\n iconLabel: 'VISA',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^4\\d{12}(?:\\d{3})?$/,\n },\n {\n brand: 'mastercard',\n label: 'Mastercard',\n iconLabel: 'MC',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^(5[1-5]\\d{14}|2(?:2[2-9]|[3-6]\\d|7[01])\\d{12}|2720\\d{12})$/,\n },\n {\n brand: 'amex',\n label: 'American Express',\n iconLabel: 'AMEX',\n maxLength: 15,\n formatGroups: [4, 6, 5],\n regex: /^3[47]\\d{13}$/,\n },\n {\n brand: 'discover',\n label: 'Discover',\n iconLabel: 'DISC',\n maxLength: 16,\n formatGroups: [4, 4, 4, 4],\n regex: /^(6011\\d{12}|65\\d{14}|64[4-9]\\d{13})$/,\n },\n {\n brand: 'maestro',\n label: 'Maestro',\n iconLabel: 'MAES',\n maxLength: 19,\n formatGroups: [4, 4, 4, 4, 3],\n regex: /^(5[06789]\\d{0,17}|6\\d{0,18})$/,\n },\n]\n\nfunction fallbackBrand(digits: string): CreditCardBrandDetails {\n return {\n brand: 'unknown',\n label: 'Card',\n iconLabel: 'CARD',\n maxLength: Math.min(Math.max(digits.length || 16, 16), 19),\n formatGroups: [4, 4, 4, 4, 3],\n regex: /^\\d{12,19}$/,\n }\n}\n\n// Remove every separator so card validation can work on raw digits.\nexport function stripCardNumber(value: string): string {\n return value.replace(/\\D/g, '')\n}\n\n// Detect the best matching payment brand from the visible card prefix.\nexport function detectCardBrand(value: string): CreditCardBrandDetails {\n const digits = stripCardNumber(value)\n return creditCardBrands.find((rule) => rule.regex.test(digits)) ?? fallbackBrand(digits)\n}\n\n// Group card digits according to the detected payment brand.\nexport function formatCardNumber(value: string): string {\n const digits = stripCardNumber(value)\n const rule = detectCardBrand(digits)\n const trimmedDigits = digits.slice(0, rule.maxLength)\n const parts: string[] = []\n let offset = 0\n\n for (const length of rule.formatGroups) {\n if (offset >= trimmedDigits.length) {\n break\n }\n\n parts.push(trimmedDigits.slice(offset, offset + length))\n offset += length\n }\n\n if (offset < trimmedDigits.length) {\n parts.push(trimmedDigits.slice(offset))\n }\n\n return parts.join(' ')\n}\n\nfunction passesLuhn(value: string): boolean {\n let sum = 0\n let shouldDouble = false\n\n for (let index = value.length - 1; index >= 0; index -= 1) {\n let digit = parseInt(value[index], 10)\n\n if (Number.isNaN(digit)) {\n return false\n }\n\n if (shouldDouble) {\n digit *= 2\n if (digit > 9) {\n digit -= 9\n }\n }\n\n sum += digit\n shouldDouble = !shouldDouble\n }\n\n return sum % 10 === 0\n}\n\n// Validate the detected card brand and Luhn checksum without third-party runtime dependencies.\nexport function validateCardNumber(value: string): ValidationResult {\n if (!value) {\n return OK_RESULT\n }\n\n const digits = stripCardNumber(value)\n const rule = detectCardBrand(digits)\n\n if (digits.length < 12) {\n return {valid: false, error: 'Card number is too short'}\n }\n\n if (digits.length > rule.maxLength) {\n return {valid: false, error: `${rule.label} card number is too long`}\n }\n\n if (rule.brand !== 'unknown' && !rule.regex.test(digits)) {\n return {valid: false, error: `Invalid ${rule.label} card number`}\n }\n\n if (!passesLuhn(digits)) {\n return {valid: false, error: 'Invalid card checksum'}\n }\n\n return OK_RESULT\n}\n\nexport {creditCardBrands}\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\n// Ensure the field is not empty after trimming user input.\nexport function validateRequired(value: string): ValidationResult {\n return value.trim().length > 0 ? ok : fail('This field is required')\n}\n\n// Build a validator that enforces a minimum string length.\nexport function validateMinLength(min: number): ValidatorFn {\n return (value: string) => (value.length >= min ? ok : fail(`Minimum ${min} characters`))\n}\n\n// Build a validator that enforces a maximum string length.\nexport function validateMaxLength(max: number): ValidatorFn {\n return (value: string) => (value.length <= max ? ok : fail(`Maximum ${max} characters`))\n}\n\n// Build a validator around a custom regular expression.\nexport function validatePattern(pattern: RegExp, message?: string): ValidatorFn {\n return (value: string) => (pattern.test(value) ? ok : fail(message ?? 'Invalid format'))\n}\n\n// Validate numeric input against optional min and max bounds.\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 =\n /^[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\n// Validate email format while allowing empty optional fields.\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,\n DE: 10,\n US: 10,\n GB: 10,\n FR: 9,\n CZ: 9,\n SK: 9,\n}\n\n// Validate a phone number with optional country-specific digit counts.\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,\n AD: 24,\n AT: 20,\n AZ: 28,\n BH: 22,\n BY: 28,\n BE: 16,\n BA: 20,\n BR: 29,\n BG: 22,\n CR: 22,\n HR: 21,\n CY: 28,\n CZ: 24,\n DK: 18,\n DO: 28,\n EG: 29,\n SV: 28,\n EE: 20,\n FO: 18,\n FI: 18,\n FR: 27,\n GE: 22,\n DE: 22,\n GI: 23,\n GR: 27,\n GL: 18,\n GT: 28,\n HU: 28,\n IS: 26,\n IQ: 23,\n IE: 22,\n IL: 23,\n IT: 27,\n JO: 30,\n KZ: 20,\n XK: 20,\n KW: 30,\n LV: 21,\n LB: 28,\n LI: 21,\n LT: 20,\n LU: 20,\n MT: 31,\n MR: 27,\n MU: 30,\n MD: 24,\n MC: 27,\n ME: 22,\n NL: 18,\n MK: 19,\n NO: 15,\n PK: 24,\n PS: 29,\n PL: 28,\n PT: 25,\n QA: 29,\n RO: 24,\n LC: 32,\n SM: 27,\n SA: 24,\n RS: 22,\n SC: 31,\n SK: 24,\n SI: 19,\n ES: 24,\n SE: 24,\n CH: 21,\n TL: 23,\n TN: 24,\n TR: 26,\n UA: 29,\n AE: 23,\n GB: 22,\n VA: 22,\n VG: 24,\n}\n\n// Run the MOD-97 remainder calculation on a numeric IBAN representation.\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\n// Validate a full IBAN using country length rules and the MOD-97 checksum.\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\n// Validate a Polish NIP number with its weighted checksum.\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\n// Validate a Polish PESEL number with its checksum algorithm.\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\n// Validate REGON numbers in both the 9-digit and 14-digit variants.\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\n// Run validators in order and stop at the first failure.\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\nexport {validatePostCode} from './postalCodes'\nexport {validateCardNumber} from './creditCards'\n","// Remove every non-digit character from the input.\nexport function stripNonDigits(value: string): string {\n return value.replace(/\\D/g, '')\n}\n\n// Keep only letters and digits for identifier-like inputs.\nexport function stripNonAlphanumeric(value: string): string {\n return value.replace(/[^a-zA-Z0-9]/g, '')\n}\n\n// Capitalize the first letter of every detected word.\nexport function capitalizeWords(value: string): string {\n return value.replace(/\\b\\w/g, (ch) => ch.toUpperCase())\n}\n\n// Group IBAN values into blocks of four characters.\nexport function formatIBAN(value: string): string {\n const clean = value.replace(/\\s/g, '').toUpperCase()\n return clean.replace(/(.{4})/g, '$1 ').trim()\n}\n\n// Return a raw IBAN string without grouping spaces.\nexport function unformatIBAN(value: string): string {\n return value.replace(/\\s/g, '').toUpperCase()\n}\n\nexport interface PhoneFormatOptions {\n countryCode?: string\n groupPattern?: number[]\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\n// Format a phone number using country-specific or custom digit groups.\nexport function formatPhone(value: string, options: PhoneFormatOptions = {}): string {\n const digits = stripNonDigits(value)\n if (!digits) return ''\n\n const groups =\n options.groupPattern ?? PHONE_GROUPS[options.countryCode?.toUpperCase() ?? ''] ?? 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// Format Polish NIP values with dash separators.\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\nexport interface CurrencyFormatOptions {\n decimalSeparator?: '.' | ','\n thousandSeparator?: ' ' | '.' | ',' | ''\n precision?: number\n}\n\n// Format a numeric string using configurable currency separators and precision.\nexport function formatCurrency(value: string, options: CurrencyFormatOptions = {}): string {\n const {decimalSeparator = ',', thousandSeparator = ' ', precision = 2} = options\n\n let clean = value.replace(/[^\\d.,-]/g, '')\n clean = clean.replace(',', '.')\n\n const parts = clean.split('.')\n let intPart = parts[0] || '0'\n let decPart = parts.length > 1 ? parts[1] : ''\n\n const isNegative = intPart.startsWith('-')\n if (isNegative) intPart = intPart.slice(1)\n\n intPart = intPart.replace(/^0+/, '') || '0'\n\n if (thousandSeparator) {\n intPart = intPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, thousandSeparator)\n }\n\n decPart = decPart.slice(0, precision)\n\n const result = decPart ? `${intPart}${decimalSeparator}${decPart}` : intPart\n\n return isNegative ? `-${result}` : result\n}\n\n// Parse a formatted currency string back into a number.\nexport function parseCurrencyToNumber(\n formatted: string,\n thousandSeparator: string = ' ',\n decimalSeparator: string = ','\n): number | null {\n let clean = formatted\n if (thousandSeparator) {\n clean = clean.split(thousandSeparator).join('')\n }\n clean = clean.replace(decimalSeparator, '.')\n clean = clean.replace(/[^\\d.-]/g, '')\n const num = parseFloat(clean)\n return isNaN(num) ? null : num\n}\n\n// Preserve the logical cursor position after inserting separators into the value.\nexport function adjustCursorAfterFormat(oldValue: string, newValue: string, oldCursor: number): number {\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 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\nexport {formatPostCode} from './postalCodes'\nexport {formatCardNumber} from './creditCards'\n","// Return the number of days for a month in a given year.\nexport function daysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate()\n}\n\n// Return the first weekday index for the given month.\nexport function firstDayOfMonth(year: number, month: number): number {\n return new Date(year, month, 1).getDay()\n}\n\n// Compare two dates using only the calendar day.\nexport function isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate()\n}\n\n// Check whether a date falls inside optional min and max boundaries.\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\n// Drop the time portion to make date comparisons predictable.\nexport function stripTime(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate())\n}\n\n// Shift a date by a number of whole months.\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\n// Shift a date by a number of whole years.\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// Pad numeric date parts to two digits.\nconst pad = (n: number): string => n.toString().padStart(2, '0')\n\n// Format a date with a lightweight token format.\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.replace('dd', day).replace('MM', month).replace('yyyy', year)\n}\n\n// Parse a date string according to the provided lightweight token format.\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\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ń',\n 'Luty',\n 'Marzec',\n 'Kwiecień',\n 'Maj',\n 'Czerwiec',\n 'Lipiec',\n 'Sierpień',\n 'Wrzesień',\n 'Październik',\n 'Listopad',\n 'Grudzień',\n]\nconst MONTH_NAMES_EN = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n]\n\n// Return localized short day names for calendar headers.\nexport function getDayNames(locale: 'pl' | 'en' = 'pl'): string[] {\n return locale === 'pl' ? DAY_NAMES_PL : DAY_NAMES_EN\n}\n\n// Return localized month names for pickers and headers.\nexport function getMonthNames(locale: 'pl' | 'en' = 'pl'): string[] {\n return locale === 'pl' ? MONTH_NAMES_PL : MONTH_NAMES_EN\n}\n\n// Parse a time string into numeric hour, minute and second parts.\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\n// Format time values with optional seconds output.\nexport function formatTime(hours: number, minutes: number, seconds?: number, showSeconds: boolean = false): 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\n// Expose a value only after it stays stable for the given delay.\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\n// Wrap a callback so repeated calls collapse into the latest invocation.\nexport function useDebouncedCallback<T extends (...args: any[]) => void>(callback: T, delay: number): 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\n// Trigger a callback when pointer interaction happens outside the referenced element.\nexport function useClickOutside(ref: RefObject<HTMLElement | null>, handler: () => void): 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\n// Provide arrow-key navigation and selection state for list-like widgets.\nexport function useKeyboardNav({itemCount, onSelect, onClose, isOpen, loop = true}: UseKeyboardNavOptions) {\n const [activeIndex, setActiveIndex] = useState(-1)\n\n // Reset highlight state when the owning widget closes or clears results.\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 {useCallback, useRef} from 'react'\nimport type {PointerEvent, ReactElement} from 'react'\n\nexport type MineralClickEffect = 'none' | 'ripple'\n\nexport interface UseInteractionEffectOptions {\n effect?: MineralClickEffect\n disabled?: boolean\n centered?: boolean\n color?: string\n}\n\nexport interface UseInteractionEffectResult<T extends HTMLElement> {\n effectClassName?: string\n effectLayer: ReactElement | null\n handlePointerDown: (event: PointerEvent<T>) => void\n triggerEffect: (target: T | null) => void\n}\n\ninterface RippleOptions {\n centered: boolean\n color?: string\n clientX?: number\n clientY?: number\n}\n\n// Render and position a ripple wave inside the dedicated effect layer.\nfunction appendRipple(layer: HTMLSpanElement, host: HTMLElement, options: RippleOptions) {\n const rect = host.getBoundingClientRect()\n const size = Math.max(rect.width, rect.height) * 1.75\n const radius = size / 2\n const wave = document.createElement('span')\n const x =\n options.centered || options.clientX === undefined\n ? rect.width / 2 - radius\n : options.clientX - rect.left - radius\n const y =\n options.centered || options.clientY === undefined\n ? rect.height / 2 - radius\n : options.clientY - rect.top - radius\n\n wave.className = 'click-effect-wave'\n wave.style.width = `${size}px`\n wave.style.height = `${size}px`\n wave.style.left = `${x}px`\n wave.style.top = `${y}px`\n\n if (options.color) {\n wave.style.setProperty('--click-effect-color', options.color)\n }\n\n layer.appendChild(wave)\n wave.addEventListener('animationend', () => wave.remove(), {once: true})\n}\n\n// Attach a lightweight click feedback effect without coupling it to a specific component.\nexport function useInteractionEffect<T extends HTMLElement = HTMLElement>({\n effect = 'ripple',\n disabled = false,\n centered = false,\n color,\n}: UseInteractionEffectOptions = {}): UseInteractionEffectResult<T> {\n const layerRef = useRef<HTMLSpanElement>(null)\n const enabled = effect === 'ripple' && !disabled\n\n // Trigger a centered ripple for keyboard-driven or programmatic actions.\n const triggerEffect = useCallback(\n (target: T | null) => {\n if (!enabled || !target || !layerRef.current) {\n return\n }\n\n appendRipple(layerRef.current, target, {centered: true, color})\n },\n [color, enabled]\n )\n\n // Start the ripple from the actual pointer position when possible.\n const handlePointerDown = useCallback(\n (event: PointerEvent<T>) => {\n if (!enabled || !layerRef.current) {\n return\n }\n\n if (event.pointerType === 'mouse' && event.button !== 0) {\n return\n }\n\n appendRipple(layerRef.current, event.currentTarget, {\n centered,\n color,\n clientX: event.clientX,\n clientY: event.clientY,\n })\n },\n [centered, color, enabled]\n )\n\n return {\n effectClassName: enabled ? 'click-effect-root' : undefined,\n effectLayer: enabled ? <span ref={layerRef} className=\"click-effect-layer\" aria-hidden=\"true\" /> : null,\n handlePointerDown,\n triggerEffect,\n }\n}\n","import {createPortal} from 'react-dom'\nimport type {PortalProps} from './Portal.types'\n\n// Mount children into a detached DOM target while defaulting to document.body.\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 './Popover.css'\n\n// Position floating content relative to an anchor with viewport-aware flipping.\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 // Recalculate popover position whenever layout or viewport constraints change.\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 // Wait one frame so the rendered popover can be measured accurately.\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 the popover with the standard Escape key interaction.\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 when the user interacts outside both the popover and its anchor.\n useEffect(() => {\n if (!open) return\n const handleClick = (e: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node) &&\n anchorRef.current &&\n !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('popover', flipped ? 'flipped' : 'normal', className)}\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 type {CSSProperties} from 'react'\nimport type {MineralFontColor} from '../theme'\n\n// Keep the utility scale in one place so props and CSS stay in sync.\nexport const mineralUtilityScaleValues = ['none', 'xs', 'sm', 'md', 'lg', 'xl', '2xl'] as const\n\nexport type MineralUtilityScale = (typeof mineralUtilityScaleValues)[number]\n\nexport interface LayoutUtilityProps {\n spacing?: MineralUtilityScale\n padding?: MineralUtilityScale\n fsize?: string | number\n fcolor?: MineralFontColor\n mt?: MineralUtilityScale\n mb?: MineralUtilityScale\n ml?: MineralUtilityScale\n mr?: MineralUtilityScale\n mx?: MineralUtilityScale\n my?: MineralUtilityScale\n pt?: MineralUtilityScale\n pb?: MineralUtilityScale\n pl?: MineralUtilityScale\n pr?: MineralUtilityScale\n px?: MineralUtilityScale\n py?: MineralUtilityScale\n fullWidth?: boolean\n}\n\n// Translate spacing and typography utility props into deterministic class names.\nexport function getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n}: LayoutUtilityProps): Array<string | false | undefined> {\n return [\n spacing !== undefined && `spacing-${spacing}`,\n padding !== undefined && `padding-${padding}`,\n fsize !== undefined && 'has-fsize',\n fcolor && `fcolor-${fcolor}`,\n mt !== undefined && `mt-${mt}`,\n mb !== undefined && `mb-${mb}`,\n ml !== undefined && `ml-${ml}`,\n mr !== undefined && `mr-${mr}`,\n mx !== undefined && `mx-${mx}`,\n my !== undefined && `my-${my}`,\n pt !== undefined && `pt-${pt}`,\n pb !== undefined && `pb-${pb}`,\n pl !== undefined && `pl-${pl}`,\n pr !== undefined && `pr-${pr}`,\n px !== undefined && `px-${px}`,\n py !== undefined && `py-${py}`,\n fullWidth && 'full-width',\n ]\n}\n\n// Keep dynamic font sizes in CSS variables so layout helpers can accept any valid CSS length.\nexport function getLayoutUtilityStyles({fsize}: Pick<LayoutUtilityProps, 'fsize'>): CSSProperties | undefined {\n if (fsize === undefined || fsize === null || fsize === '') {\n return undefined\n }\n\n return {\n '--mineral-layout-fsize': typeof fsize === 'number' ? `${fsize}px` : fsize,\n } as CSSProperties\n}\n","import type {ContainerProps} from './Container.types'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './Container.css'\n\n// Constrain page content widths and apply shared spacing utilities.\nexport function Container({\n size = 'content',\n padded = true,\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: ContainerProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'container',\n size,\n padded && 'padded',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type {MineralColor, MineralFontColor} from '../theme'\n\nexport interface AppearanceProps {\n color?: MineralColor\n fcolor?: MineralFontColor\n}\n\n// Translate semantic appearance props into shared utility classes.\nexport function getAppearanceClassNames({color, fcolor}: AppearanceProps): Array<string | false | undefined> {\n return [color && `fcolor-${color}`, fcolor && `fcolor-${fcolor}`]\n}\n","import type {MHeaderProps} from './MHeader.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {Container} from '../Container'\nimport './MHeader.css'\n\n// Render a reusable page header shell aligned to a shared container.\nexport function MHeader({\n container = 'wide',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n fcolor,\n className,\n children,\n ...rest\n}: MHeaderProps) {\n return (\n <header\n className={cn(\n 'header',\n tone,\n ...getAppearanceClassNames({fcolor}),\n bordered && 'bordered',\n sticky && 'sticky',\n className\n )}\n {...rest}\n >\n <Container size={container} padded={padded} className=\"inner\">\n {children}\n </Container>\n </header>\n )\n}\n","import type {MFooterProps} from './MFooter.types'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport {Container} from '../Container'\nimport './MFooter.css'\n\n// Render a reusable page footer shell with shared spacing utilities.\nexport function MFooter({\n container = 'wide',\n padded = true,\n bordered = true,\n tone = 'surface',\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MFooterProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <footer\n className={cn(\n 'footer',\n tone,\n bordered && 'bordered',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n <Container size={container} padded={padded} className=\"inner\" fullWidth>\n {children}\n </Container>\n </footer>\n )\n}\n","import type {MNavbarProps} from './MNavbar.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {Container} from '../Container'\nimport './MNavbar.css'\n\n// Render a horizontal app or site navigation shell with container alignment.\nexport function MNavbar({\n container = 'content',\n padded = true,\n bordered = true,\n sticky = false,\n tone = 'surface',\n fcolor,\n justify = 'between',\n align = 'center',\n wrap = false,\n className,\n children,\n ...rest\n}: MNavbarProps) {\n return (\n <nav\n className={cn(\n 'navbar',\n tone,\n ...getAppearanceClassNames({fcolor}),\n bordered && 'bordered',\n sticky && 'sticky',\n className\n )}\n {...rest}\n >\n <Container size={container} padded={padded} className=\"container\">\n <div className={cn('inner', justify, align, wrap && 'wrap')}>{children}</div>\n </Container>\n </nav>\n )\n}\n","import {forwardRef} from 'react'\nimport type {MouseEvent} from 'react'\nimport type {MLinkProps} from './Link.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './Link.css'\n\n// Render a semantic link that can target anchors or router link components.\nexport const MLink = forwardRef<HTMLElement, MLinkProps>(function MLink(\n {\n component,\n to,\n tone = 'default',\n underline = 'hover',\n fcolor,\n current = false,\n block = false,\n disabled = false,\n className,\n children,\n href,\n onClick,\n ...rest\n },\n ref\n) {\n const Component = component ?? 'a'\n\n // Prevent disabled links from navigating while still exposing their content.\n function handleClick(event: MouseEvent<HTMLAnchorElement>) {\n if (disabled) {\n event.preventDefault()\n return\n }\n\n onClick?.(event)\n }\n\n return (\n <Component\n ref={ref}\n href={component ? undefined : disabled ? undefined : href}\n to={component ? to : undefined}\n className={cn(\n 'link',\n tone,\n underline,\n ...getAppearanceClassNames({fcolor}),\n current && 'current',\n block && 'block',\n disabled && 'disabled',\n className\n )}\n aria-current={current ? 'page' : undefined}\n aria-disabled={disabled || undefined}\n onClick={handleClick}\n {...rest}\n >\n {children}\n </Component>\n )\n})\n","import type {MNavsProps} from './MNavs.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {MLink} from '../../typography/Link'\nimport './MNavs.css'\n\n// Render a lightweight navigation list from data or custom children.\nexport function MNavs({\n items,\n orientation = 'horizontal',\n gap = 'md',\n fcolor,\n wrap = false,\n className,\n children,\n ...rest\n}: MNavsProps) {\n const gapClassName = gap === '2xl' ? 'gap-2xl' : gap\n\n return (\n <div\n className={cn(\n 'navs',\n orientation,\n gapClassName,\n ...getAppearanceClassNames({fcolor}),\n wrap && 'wrap',\n className\n )}\n {...rest}\n >\n {items\n ? items.map((item) => (\n <MLink\n key={item.key ?? item.href ?? item.title?.toString() ?? item.label?.toString()}\n component={item.component}\n href={item.href}\n to={item.to}\n target={item.target}\n rel={item.rel}\n title={item.title}\n fcolor={fcolor}\n current={item.current}\n disabled={item.disabled}\n className={cn('link', item.className)}\n >\n {item.label}\n </MLink>\n ))\n : children}\n </div>\n )\n}\n","import {useId, useMemo, useState} from 'react'\nimport type {KeyboardEvent} from 'react'\nimport type {MTabsItem, MTabsProps} from './MTabs.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './MTabs.css'\n\ninterface MTabsTriggerProps {\n item: MTabsItem\n isActive: boolean\n tabId: string\n panelId: string\n clickEffect: MTabsProps['clickEffect']\n rippleColor: string | undefined\n onSelect: (value: string) => void\n}\n\n// Keep the tab trigger behavior isolated from the list and panel rendering.\nfunction MTabsTrigger({item, isActive, tabId, panelId, clickEffect, rippleColor, onSelect}: MTabsTriggerProps) {\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLButtonElement>({\n effect: clickEffect,\n disabled: item.disabled,\n centered: true,\n color: rippleColor,\n })\n\n return (\n <button\n type=\"button\"\n id={tabId}\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={panelId}\n tabIndex={isActive ? 0 : -1}\n disabled={item.disabled}\n className={cn('tabs-trigger', isActive && 'active', item.disabled && 'disabled', effectClassName)}\n onPointerDown={handlePointerDown}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget)\n }\n }}\n onClick={() => onSelect(item.value)}\n >\n {effectLayer}\n {item.icon && <span className=\"tabs-icon\">{item.icon}</span>}\n <span className=\"tabs-label\">{item.label}</span>\n </button>\n )\n}\n\nexport function MTabs({\n items,\n value,\n defaultValue,\n onValueChange,\n variant = 'underline',\n orientation = 'horizontal',\n size = 'md',\n fullWidth = false,\n fcolor,\n showPanels = true,\n panelClassName,\n clickEffect = 'ripple',\n rippleColor,\n className,\n ...rest\n}: MTabsProps) {\n // Pick the first enabled item when the caller does not control the active tab.\n const fallbackValue = useMemo(\n () => defaultValue ?? items.find((item) => !item.disabled)?.value ?? '',\n [defaultValue, items]\n )\n const [internalValue, setInternalValue] = useState(fallbackValue)\n const activeValue = value ?? internalValue\n const activeItem = items.find((item) => item.value === activeValue) ?? items[0]\n const baseId = useId()\n\n // Support both controlled and uncontrolled tab state.\n function selectTab(nextValue: string) {\n if (value === undefined) {\n setInternalValue(nextValue)\n }\n onValueChange?.(nextValue)\n }\n\n // Re-map keyboard navigation depending on the rendered orientation.\n function handleKeyDown(event: KeyboardEvent<HTMLDivElement>) {\n const enabledItems = items.filter((item) => !item.disabled)\n const currentIndex = enabledItems.findIndex((item) => item.value === activeItem?.value)\n\n if (currentIndex === -1) {\n return\n }\n\n const nextKeys = orientation === 'vertical' ? ['ArrowDown'] : ['ArrowRight', 'ArrowDown']\n const previousKeys = orientation === 'vertical' ? ['ArrowUp'] : ['ArrowLeft', 'ArrowUp']\n\n if (nextKeys.includes(event.key)) {\n event.preventDefault()\n const nextItem = enabledItems[(currentIndex + 1) % enabledItems.length]\n selectTab(nextItem.value)\n }\n\n if (previousKeys.includes(event.key)) {\n event.preventDefault()\n const nextItem = enabledItems[(currentIndex - 1 + enabledItems.length) % enabledItems.length]\n selectTab(nextItem.value)\n }\n }\n\n return (\n <div\n className={cn(\n 'tabs',\n variant,\n orientation,\n size,\n ...getAppearanceClassNames({fcolor}),\n fullWidth && 'full-width',\n className\n )}\n {...rest}\n >\n <div className=\"tabs-list\" role=\"tablist\" aria-orientation={orientation} onKeyDown={handleKeyDown}>\n {items.map((item) => {\n const isActive = item.value === activeItem?.value\n const tabId = `${baseId}-${item.value}-tab`\n const panelId = `${baseId}-${item.value}-panel`\n\n return (\n <MTabsTrigger\n key={item.value}\n item={item}\n isActive={isActive}\n tabId={tabId}\n panelId={panelId}\n clickEffect={clickEffect}\n rippleColor={rippleColor}\n onSelect={selectTab}\n />\n )\n })}\n </div>\n\n {showPanels && activeItem?.content !== undefined && (\n <div\n id={`${baseId}-${activeItem.value}-panel`}\n role=\"tabpanel\"\n aria-labelledby={`${baseId}-${activeItem.value}-tab`}\n className={cn('tabs-panel', panelClassName)}\n >\n {activeItem.content}\n </div>\n )}\n </div>\n )\n}\n","import type {SectionProps} from './Section.types'\nimport {cn} from '../../../utils/cn'\nimport './Section.css'\n\n// Render a semantic page section with predefined spacing and tone.\nexport function Section({\n as = 'section',\n spacing = 'lg',\n tone = 'default',\n className,\n style,\n children,\n ...rest\n}: SectionProps) {\n const Component = as\n\n return (\n <Component className={cn('section', spacing, tone, className)} style={style} {...rest}>\n {children}\n </Component>\n )\n}\n","import type {StackProps} from './Stack.types'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './Stack.css'\n\n// Stack children vertically with shared gap and utility props.\nexport function Stack({\n gap = 'md',\n align = 'stretch',\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: StackProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const gapClassName = gap === '2xl' ? 'gap-2xl' : gap\n\n return (\n <div\n className={cn(\n 'stack',\n gapClassName,\n align !== 'stretch' && align,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type {InlineProps} from './Inline.types'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './Inline.css'\n\n// Arrange children horizontally with configurable alignment and wrapping.\nexport function Inline({\n gap = 'md',\n align = 'center',\n justify = 'start',\n wrap = 'wrap',\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: InlineProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const gapClassName = gap === '2xl' ? 'gap-2xl' : gap\n\n return (\n <div\n className={cn(\n 'inline',\n gapClassName,\n align,\n `justify-${justify}`,\n wrap,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type {GridProps} from './Grid.types'\nimport {cn} from '../../../utils/cn'\nimport './Grid.css'\n\n// Render a simple equal-column grid with optional responsive min item width.\nexport function Grid({columns = 2, gap = 'lg', minItemWidth, className, style, children, ...rest}: GridProps) {\n const gapClassName = gap === '2xl' ? 'gap-2xl' : gap\n\n return (\n <div\n className={cn('grid', `columns-${columns}`, gapClassName, className)}\n style={{\n ...(minItemWidth ? {'--grid-min-item-width': minItemWidth} : {}),\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import {Children, isValidElement} from 'react'\nimport type {MGridItemProps, MGridProps} from './MGrid.types'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './MGrid.css'\n\n// Render either a responsive row or a responsive column using one shared grid API.\nexport function MGrid({\n type = 'row',\n gap = 'lg',\n span,\n sm,\n md,\n lg,\n xl,\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: MGridProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n const baseSpan = span ?? xl ?? lg\n const gapClassName = gap === '2xl' ? 'gap-2xl' : gap\n\n if (type === 'col') {\n return (\n <div\n className={cn(\n 'grid',\n 'col',\n baseSpan ? `span-${baseSpan}` : 'span-auto',\n xl && `xl-${xl}`,\n lg && `lg-${lg}`,\n md && `md-${md}`,\n sm && `sm-${sm}`,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n {children}\n </div>\n )\n }\n\n const childArray = Children.toArray(children)\n const autoColumns = Math.min(Math.max(childArray.length, 1), 12)\n const hasDesktopSizing = childArray.some((child) => {\n if (!isValidElement(child)) {\n return false\n }\n\n return Boolean(child.props?.span || child.props?.lg || child.props?.xl)\n })\n\n return (\n <div\n className={cn(\n 'grid',\n 'row',\n gapClassName,\n hasDesktopSizing ? 'tracked' : `auto-cols-${autoColumns}`,\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth: fullWidth ?? true,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n {children}\n </div>\n )\n}\n\n// Keep MGridItem as a compatibility alias for explicit column declarations.\nexport function MGridItem({span, sm, md, lg, xl, ...rest}: MGridItemProps) {\n return <MGrid type=\"col\" span={span} sm={sm} md={md} lg={lg} xl={xl} {...rest} />\n}\n","import type {SurfaceProps} from './Surface.types'\nimport {cn} from '../../../utils/cn'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './Surface.css'\n\n// Render a reusable surface primitive for cards, panels and preview blocks.\nexport function Surface({\n tone = 'default',\n outlined = true,\n padded = true,\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n style,\n children,\n ...rest\n}: SurfaceProps) {\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <div\n className={cn(\n 'surface',\n tone,\n outlined && 'outlined',\n padded && 'padded',\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={{...utilityStyle, ...style}}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","import type {DividerProps} from './Divider.types'\nimport {cn} from '../../../utils/cn'\n\n// Render a semantic divider line between related content blocks.\nexport function Divider({className, style, ...rest}: DividerProps) {\n return <hr className={cn('divider', className)} style={style} {...rest} />\n}\n","import {forwardRef} from 'react'\nimport type {ButtonProps} from './Button.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './Button.css'\n\n// Render the main action primitive with semantic variants and built-in click feedback.\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = 'primary',\n size = 'md',\n color = 'primary',\n fcolor,\n fullWidth = false,\n rounded = false,\n iconOnly = false,\n loading = false,\n startIcon,\n endIcon,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n children,\n disabled = false,\n type = 'button',\n onPointerDown,\n onKeyDown,\n ...rest\n },\n ref\n) {\n const isDisabled = disabled || loading\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLButtonElement>({\n effect: clickEffect,\n disabled: isDisabled,\n centered: iconOnly,\n color: rippleColor,\n })\n\n return (\n <button\n ref={ref}\n type={type}\n className={cn(\n 'button',\n variant,\n size,\n color,\n ...getAppearanceClassNames({fcolor}),\n fullWidth && 'full-width',\n rounded && 'rounded',\n iconOnly && 'icon-only',\n loading && 'loading',\n isDisabled && 'disabled',\n effectClassName,\n className\n )}\n style={style}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget)\n }\n\n onKeyDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {loading && <span className=\"spinner\" aria-hidden=\"true\" />}\n {startIcon && <span className=\"icon start\">{startIcon}</span>}\n {children && <span className=\"content\">{children}</span>}\n {endIcon && <span className=\"icon end\">{endIcon}</span>}\n </button>\n )\n})\n","import {forwardRef, useEffect, useRef} from 'react'\nimport type {CheckboxProps} from './Checkbox.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './Checkbox.css'\n\n// Render a styled checkbox while keeping the native input for accessibility.\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 fcolor,\n label,\n labelPosition = 'right',\n error = false,\n errorText,\n onChange,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n },\n ref\n) {\n const internalRef = useRef<HTMLInputElement>(null)\n const inputRef = (ref as React.RefObject<HTMLInputElement>) ?? internalRef\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect,\n disabled,\n centered: true,\n color: rippleColor,\n })\n\n // Keep the browser indeterminate flag in sync with React props.\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('checkbox', ...getAppearanceClassNames({fcolor}), className)} style={style}>\n <label className={cn('label', size, labelPosition === 'left' && 'label-left', disabled && 'disabled')}>\n <span\n className={cn('box', color, hasError && 'error', effectClassName)}\n onPointerDown={handlePointerDown}\n >\n {effectLayer}\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 onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget.parentElement as HTMLSpanElement | null)\n }\n }}\n className=\"input\"\n aria-invalid={hasError || undefined}\n />\n <svg className=\"checkmark\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n className=\"check-path\"\n d=\"M3.5 8L6.5 11L12.5 5\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span className=\"indeterminate-mark\" />\n </span>\n {label && <span className=\"label-text\">{label}</span>}\n </label>\n {errorText && (\n <span className=\"error-text\" role=\"alert\">\n {errorText}\n </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\n// Read the nearest radio-group context when a radio participates in grouped state.\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 {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './Radio.css'\n\n// Render a single radio that can work standalone or inside RadioGroup.\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 fcolor,\n label,\n labelPosition = 'right',\n onChange,\n clickEffect = 'ripple',\n rippleColor,\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 resolvedFontColor = group?.fcolor ?? fcolor\n const resolvedChecked = group ? group.value === value : checked\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect,\n disabled: resolvedDisabled,\n centered: true,\n color: rippleColor,\n })\n\n // Delegate selection back to the group when one is present.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event)\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 'radio',\n resolvedSize,\n ...getAppearanceClassNames({fcolor: resolvedFontColor}),\n labelPosition === 'left' && 'label-left',\n resolvedDisabled && 'disabled',\n className\n )}\n style={style}\n >\n <span className={cn('circle', resolvedColor, effectClassName)} onPointerDown={handlePointerDown}>\n {effectLayer}\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 onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget.parentElement as HTMLSpanElement | null)\n }\n }}\n className=\"input\"\n />\n <span className=\"dot\" />\n </span>\n {label && <span className=\"label-text\">{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 {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './Radio.css'\n\n// Coordinate multiple radio items through shared context and optional controlled state.\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 fcolor,\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 // Mirror controlled and uncontrolled usage with the same group API.\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 // Memoize context so nested radios only update when relevant inputs change.\n const ctx = useMemo(\n () => ({name, value: currentValue, disabled, size, color, fcolor, onChange: handleChange}),\n [name, currentValue, disabled, size, color, fcolor, handleChange]\n )\n\n return (\n <RadioContext.Provider value={ctx}>\n <fieldset\n className={cn('radio-group', direction, ...getAppearanceClassNames({fcolor}), className)}\n style={style}\n role=\"radiogroup\"\n >\n {label && <legend className={cn('label', error && 'error')}>{label}</legend>}\n {children}\n {errorText && (\n <span className=\"error-text\" role=\"alert\">\n {errorText}\n </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 {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './Toggle.css'\n\n// Render a switch-style boolean control with the same API shape as Checkbox.\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 fcolor,\n label,\n labelPosition = 'right',\n onChange,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n },\n ref\n) {\n const {effectClassName, effectLayer, handlePointerDown, triggerEffect} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect,\n disabled,\n centered: true,\n color: rippleColor,\n })\n\n return (\n <label\n className={cn(\n 'toggle',\n size,\n ...getAppearanceClassNames({fcolor}),\n labelPosition === 'left' && 'label-left',\n disabled && 'disabled',\n className\n )}\n style={style}\n >\n <span className={cn('track', color, effectClassName)} onPointerDown={handlePointerDown}>\n {effectLayer}\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 onKeyDown={(event) => {\n if (event.key === ' ' || event.key === 'Enter') {\n triggerEffect(event.currentTarget.parentElement as HTMLSpanElement | null)\n }\n }}\n className=\"input\"\n role=\"switch\"\n aria-checked={checked}\n />\n <span className=\"knob\" />\n </span>\n {label && <span className=\"label-text\">{label}</span>}\n </label>\n )\n})\n","import type {CardProps, CardSectionProps} from './Card.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport {Surface} from '../../layout/Surface'\nimport './Card.css'\n\n// Compose elevated content blocks that can optionally behave like an interactive surface.\nexport function Card({\n interactive = false,\n tone = 'raised',\n padded = false,\n color,\n fcolor,\n clickEffect,\n rippleColor,\n className,\n children,\n onPointerDown,\n ...rest\n}: CardProps) {\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: clickEffect ?? (interactive ? 'ripple' : 'none'),\n disabled: !interactive,\n color: rippleColor,\n })\n\n return (\n <Surface\n tone={tone}\n padded={padded}\n className={cn(\n 'card',\n color,\n ...getAppearanceClassNames({fcolor}),\n interactive && 'interactive',\n effectClassName,\n className\n )}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {children}\n </Surface>\n )\n}\n\n// Render the top section of a card.\nexport function CardHeader({className, children, ...rest}: CardSectionProps) {\n return (\n <div className={cn('header', className)} {...rest}>\n {children}\n </div>\n )\n}\n\n// Render the main content section of a card.\nexport function CardBody({className, children, ...rest}: CardSectionProps) {\n return (\n <div className={cn('body', className)} {...rest}>\n {children}\n </div>\n )\n}\n\n// Render the bottom section of a card.\nexport function CardFooter({className, children, ...rest}: CardSectionProps) {\n return (\n <div className={cn('footer', className)} {...rest}>\n {children}\n </div>\n )\n}\n","import type {BadgeProps} from './Badge.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './Badge.css'\n\n// Render a compact semantic label for status and metadata.\nexport function Badge({color = 'primary', size = 'md', fcolor, className, children, ...rest}: BadgeProps) {\n return (\n <span className={cn('badge', color, size, ...getAppearanceClassNames({fcolor}), className)} {...rest}>\n {children}\n </span>\n )\n}\n","import type {AlertProps} from './Alert.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './Alert.css'\n\n// Render inline status messaging with optional heading content.\nexport function Alert({color = 'info', fcolor, title, className, children, ...rest}: AlertProps) {\n return (\n <div className={cn('alert', color, ...getAppearanceClassNames({fcolor}), className)} role=\"status\" {...rest}>\n {title && <div className=\"title\">{title}</div>}\n {children && <div className=\"content\">{children}</div>}\n </div>\n )\n}\n","import type {HTMLAttributes} from 'react'\nimport type {TableCellProps, TableHeadCellProps, TableProps, TableRootProps} from './Table.types'\nimport {cn} from '../../../utils/cn'\nimport './Table.css'\n\n// Provide the scroll container and outer surface for semantic table markup.\nexport function Table({className, children, ...rest}: TableProps) {\n return (\n <div className={cn('table-wrapper', className)} {...rest}>\n {children}\n </div>\n )\n}\n\n// Render the actual table element so subcomponents stay semantic.\nexport function TableRoot({className, children, ...rest}: TableRootProps) {\n return (\n <table className={cn('table', className)} {...rest}>\n {children}\n </table>\n )\n}\n\n// Render the table head section.\nexport function TableHead({className, children, ...rest}: HTMLAttributes<HTMLTableSectionElement>) {\n return (\n <thead className={cn('head', className)} {...rest}>\n {children}\n </thead>\n )\n}\n\n// Render the table body section.\nexport function TableBody({className, children, ...rest}: HTMLAttributes<HTMLTableSectionElement>) {\n return (\n <tbody className={cn('body', className)} {...rest}>\n {children}\n </tbody>\n )\n}\n\n// Render a semantic table row.\nexport function TableRow({className, children, ...rest}: HTMLAttributes<HTMLTableRowElement>) {\n return (\n <tr className={cn('row', className)} {...rest}>\n {children}\n </tr>\n )\n}\n\n// Render a semantic header cell.\nexport function TableHeadCell({className, children, ...rest}: TableHeadCellProps) {\n return (\n <th className={cn('head-cell', className)} {...rest}>\n {children}\n </th>\n )\n}\n\n// Render a semantic table data cell.\nexport function TableCell({className, children, ...rest}: TableCellProps) {\n return (\n <td className={cn('cell', className)} {...rest}>\n {children}\n </td>\n )\n}\n","import {useState} from 'react'\nimport {Button} from '../../controls/Button'\nimport {Stack} from '../../layout/Stack'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport type {CollapsibleProps} from './Collapsible.types'\nimport './Collapsible.css'\n\n// Toggle a section of content with a built-in trigger and disclosure state.\nexport function Collapsible({\n title,\n defaultOpen = false,\n open: controlledOpen,\n onToggle,\n fcolor,\n className,\n children,\n ...rest\n}: CollapsibleProps) {\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const open = controlledOpen ?? internalOpen\n\n const handleToggle = () => {\n const nextOpen = !open\n\n if (controlledOpen === undefined) {\n setInternalOpen(nextOpen)\n }\n\n onToggle?.(nextOpen)\n }\n\n const chevronIcon = (\n <span className={cn('chevron', open && 'open')} aria-hidden=\"true\">\n <svg viewBox=\"0 0 16 16\">\n <path\n d=\"M4 6L8 10L12 6\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n )\n\n return (\n <div className={cn('collapsible', ...getAppearanceClassNames({fcolor}), className)} {...rest}>\n <Button\n variant=\"ghost\"\n className=\"trigger\"\n aria-expanded={open}\n onClick={handleToggle}\n endIcon={chevronIcon}\n >\n {title}\n </Button>\n <div className={cn('content-wrap', open && 'open')} aria-hidden={!open}>\n <Stack className=\"content\">{children}</Stack>\n </div>\n </div>\n )\n}\n","import type {CSSProperties} from 'react'\nimport type {SpinnerProps} from './Spinner.types'\nimport {cn} from '../../../utils/cn'\nimport './Spinner.css'\n\n// Render a minimal semantic loading indicator with token-aware sizing and color.\nexport function Spinner({color = 'primary', size = 'md', label = 'Loading', className, style, ...rest}: SpinnerProps) {\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n }\n : style || {}\n\n return (\n <span\n className={cn('spinner', typeof size === 'string' && size, color && `color-${color}`, className)}\n style={inlineStyle}\n role=\"status\"\n aria-label={label}\n {...rest}\n />\n )\n}\n","import type {TextProps} from './Text.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {getLayoutUtilityClassNames, getLayoutUtilityStyles} from '../../../utils/layoutProps'\nimport './Text.css'\n\n// Render body copy with shared tone, size and weight controls.\nexport function Text({\n as = 'p',\n tone = 'default',\n size = 'md',\n align = 'left',\n color,\n fcolor,\n weight = 'normal',\n spacing,\n padding,\n fsize,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n className,\n children,\n ...rest\n}: TextProps) {\n const Component = as\n const utilityStyle = getLayoutUtilityStyles({fsize})\n\n return (\n <Component\n className={cn(\n 'text',\n tone,\n size,\n align,\n weight,\n ...getAppearanceClassNames({color, fcolor}),\n ...getLayoutUtilityClassNames({\n spacing,\n padding,\n fsize,\n fcolor,\n mt,\n mb,\n ml,\n mr,\n mx,\n my,\n pt,\n pb,\n pl,\n pr,\n px,\n py,\n fullWidth,\n }),\n className\n )}\n style={utilityStyle}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n","import type {CSSProperties} from 'react'\nimport {Spinner} from '../Spinner'\nimport {Stack} from '../../layout/Stack'\nimport {Text} from '../../typography/Text'\nimport {cn} from '../../../utils/cn'\nimport type {LoaderProps} from './Loader.types'\nimport './Loader.css'\n\n// Keep loading feedback minimal so apps can reuse it without card or alert chrome.\nexport function Loader({\n color = 'primary',\n size = 'lg',\n label = 'Loading',\n center = true,\n minHeight = '40vh',\n className,\n style,\n ...rest\n}: LoaderProps) {\n const inlineStyle: CSSProperties = {\n minHeight: typeof minHeight === 'number' ? `${minHeight}px` : minHeight,\n ...style,\n }\n\n return (\n <div className={cn('loader', center && 'center', className)} style={inlineStyle} {...rest}>\n <Stack gap={'sm'} align={'center'}>\n <Spinner size={size} color={color} label={label} />\n <Text tone={'muted'} align={'center'}>\n {label}\n </Text>\n </Stack>\n </div>\n )\n}\n","import type {CSSProperties} from 'react'\nimport type {AvatarProps} from './Avatar.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './Avatar.css'\n\nfunction getFallbackInitials(name?: string, initials?: string) {\n if (initials) {\n return initials.slice(0, 2).toUpperCase()\n }\n\n if (!name) {\n return '?'\n }\n\n const parts = name.trim().split(/\\s+/).filter(Boolean)\n\n if (parts.length === 0) {\n return '?'\n }\n\n if (parts.length === 1) {\n return parts[0].slice(0, 2).toUpperCase()\n }\n\n return `${parts[0][0]}${parts[1][0]}`.toUpperCase()\n}\n\n// Render user or entity identity as an image with initials fallback.\nexport function Avatar({\n src,\n alt,\n name,\n initials,\n size = 'md',\n shape = 'circle',\n color,\n fcolor,\n backgroundColor,\n clickEffect,\n rippleColor,\n className,\n style,\n onPointerDown,\n ...rest\n}: AvatarProps) {\n const fallbackInitials = getFallbackInitials(name, initials)\n const isInteractive = typeof rest.onClick === 'function' || rest.role === 'button' || rest.tabIndex !== undefined\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLSpanElement>({\n effect: clickEffect ?? (isInteractive ? 'ripple' : 'none'),\n disabled: !isInteractive,\n color: rippleColor,\n })\n const inlineStyle: CSSProperties =\n typeof size === 'number'\n ? {\n width: `${size}px`,\n height: `${size}px`,\n ...style,\n ...(backgroundColor ? {backgroundColor} : {}),\n }\n : {\n ...style,\n ...(backgroundColor ? {backgroundColor} : {}),\n }\n\n return (\n <span\n className={cn(\n 'avatar',\n typeof size === 'string' && size,\n shape,\n isInteractive && 'interactive',\n effectClassName,\n ...getAppearanceClassNames({color, fcolor}),\n className\n )}\n style={inlineStyle}\n aria-label={alt ?? name ?? 'Avatar'}\n onPointerDown={(event) => {\n handlePointerDown(event)\n onPointerDown?.(event)\n }}\n {...rest}\n >\n {effectLayer}\n {src ? (\n <img src={src} alt={alt ?? name ?? ''} className={'image'} />\n ) : (\n <span className={'fallback'}>{fallbackInitials}</span>\n )}\n </span>\n )\n}\n","import {useEffect} from 'react'\nimport type {MouseEvent} from 'react'\nimport type {ModalProps} from './Modal.types'\nimport {Portal} from '../../primitives/Portal'\nimport {Card, CardBody, CardFooter, CardHeader} from '../Card'\nimport {cn} from '../../../utils/cn'\nimport './Modal.css'\n\n// Render blocking overlay content for dense details and mobile-friendly dialogs.\nexport function Modal({\n open,\n onClose,\n title,\n description,\n footer,\n size = 'md',\n closeOnBackdrop = true,\n closeOnEscape = true,\n className,\n children,\n ...rest\n}: ModalProps) {\n useEffect(() => {\n if (!open || !closeOnEscape) {\n return\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onClose()\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [closeOnEscape, onClose, open])\n\n useEffect(() => {\n if (!open) {\n return\n }\n\n const previousOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.body.style.overflow = previousOverflow\n }\n }, [open])\n\n if (!open) {\n return null\n }\n\n const handleBackdropClick = (event: MouseEvent<HTMLDivElement>) => {\n if (!closeOnBackdrop) {\n return\n }\n\n if (event.target === event.currentTarget) {\n onClose()\n }\n }\n\n return (\n <Portal>\n <div className={'modal-backdrop'} onMouseDown={handleBackdropClick}>\n <div className={'modal-shell'}>\n <Card\n className={cn('modal', size, className)}\n role={'dialog'}\n aria-modal={'true'}\n aria-labelledby={title ? 'mineral-modal-title' : undefined}\n {...rest}\n >\n {(title || description) && (\n <CardHeader>\n {title && (\n <div id={'mineral-modal-title'} className={'modal-title'}>\n {title}\n </div>\n )}\n {description && <div className={'modal-description'}>{description}</div>}\n </CardHeader>\n )}\n <CardBody>{children}</CardBody>\n {footer && <CardFooter>{footer}</CardFooter>}\n </Card>\n </div>\n </div>\n </Portal>\n )\n}\n","import {createElement} from 'react'\nimport type {HeadingProps} from './Heading.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './Heading.css'\n\n// Render semantic heading levels with shared MineralUI typography tokens.\nexport function Heading({level = 2, color, fcolor, className, children, ...rest}: HeadingProps) {\n return createElement(\n `h${level}`,\n {className: cn('heading', `h${level}`, ...getAppearanceClassNames({color, fcolor}), className), ...rest},\n children\n )\n}\n","import type {CodeProps} from './Code.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './Code.css'\n\n// Render inline code tokens with semantic color support.\nexport function Code({color, fcolor, className, children, ...rest}: CodeProps) {\n return (\n <code className={cn('code', ...getAppearanceClassNames({color, fcolor}), className)} {...rest}>\n {children}\n </code>\n )\n}\n","import type {HTMLAttributes} from 'react'\nimport type {ListProps} from './List.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport './List.css'\n\n// Render ordered or unordered lists with shared typography tokens.\nexport function List({ordered = false, color, fcolor, className, children, ...rest}: ListProps) {\n const Component = ordered ? 'ol' : 'ul'\n\n return (\n <Component\n className={cn('list', ordered && 'ordered', ...getAppearanceClassNames({color, fcolor}), className)}\n {...rest}\n >\n {children}\n </Component>\n )\n}\n\n// Render a list item that inherits the parent list styling.\nexport function ListItem({className, children, ...rest}: HTMLAttributes<HTMLLIElement>) {\n return (\n <li className={cn('item', className)} {...rest}>\n {children}\n </li>\n )\n}\n","import {useEffect, useMemo, useRef, useState} from 'react'\nimport type {ReactNode, RefObject} from 'react'\nimport type {\n CalendarBoardLocale,\n CalendarBoardProps,\n CalendarBoardView,\n CalendarDayCellProps,\n CalendarDetailsMode,\n CalendarEvent,\n CalendarEventItemProps,\n CalendarEventListProps,\n CalendarEventPopoverProps,\n CalendarFilterOption,\n CalendarTimelineProps,\n CalendarTimelineSlotState,\n} from './CalendarBoard.types'\nimport {cn} from '../../../utils/cn'\nimport {Badge} from '../Badge'\nimport {Button} from '../../controls/Button'\nimport {Avatar} from '../Avatar'\nimport {Card, CardBody} from '../Card'\nimport {Modal} from '../Modal'\nimport {Popover} from '../../primitives/Popover'\nimport {Heading, Text} from '../../typography'\nimport {Stack} from '../../layout/Stack'\nimport './CalendarBoard.css'\n\ninterface CalendarCopy {\n monthView: string\n weekView: string\n previousMonth: string\n nextMonth: string\n previousWeek: string\n nextWeek: string\n emptyStateText: string\n timelineTitle: string\n timelineEmptyState: string\n allDay: string\n itemsCount: (count: number) => string\n}\n\ninterface CalendarDetailsContentProps {\n date: Date | null\n events: CalendarEvent[]\n locale: CalendarBoardLocale\n timelineStartHour: number\n timelineEndHour: number\n showTimeline: boolean\n emptyStateText: string\n renderEventItem?: (event: CalendarEvent) => ReactNode\n}\n\ninterface CalendarWeekViewProps {\n days: Date[]\n eventsByDay: Map<string, CalendarEvent[]>\n selectedDate: Date | null\n activeDate: Date | null\n onDayInteract: (date: Date, target: HTMLElement, events: CalendarEvent[]) => void\n onDayHover: (date: Date, target: HTMLElement, events: CalendarEvent[]) => void\n onDayLeave: () => void\n dayBadge?: CalendarBoardProps['dayBadge']\n renderDayCell?: CalendarBoardProps['renderDayCell']\n locale: CalendarBoardLocale\n}\n\nfunction stripTime(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate())\n}\n\nfunction normalizeDate(value?: Date | string | null) {\n if (!value) {\n return null\n }\n\n if (value instanceof Date) {\n return stripTime(value)\n }\n\n const parsed = new Date(value)\n if (Number.isNaN(parsed.getTime())) {\n return null\n }\n\n return stripTime(parsed)\n}\n\nfunction getDateKey(date: Date) {\n const year = date.getFullYear()\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n\n return `${year}-${month}-${day}`\n}\n\nfunction getEventDate(event: CalendarEvent) {\n return normalizeDate(event.date)\n}\n\nfunction addDays(date: Date, amount: number) {\n const nextDate = new Date(date)\n nextDate.setDate(nextDate.getDate() + amount)\n return stripTime(nextDate)\n}\n\nfunction startOfWeek(date: Date, weekStartsOn: 0 | 1) {\n const safeDate = stripTime(date)\n const day = safeDate.getDay()\n const delta = (day - weekStartsOn + 7) % 7\n return addDays(safeDate, -delta)\n}\n\nfunction sortEventsByTime(events: CalendarEvent[]) {\n return [...events].sort((leftEvent, rightEvent) => {\n const leftTime = leftEvent.startTime ?? '99:99'\n const rightTime = rightEvent.startTime ?? '99:99'\n return leftTime.localeCompare(rightTime)\n })\n}\n\nfunction buildMonthGrid(month: Date, weekStartsOn: 0 | 1) {\n const monthStart = new Date(month.getFullYear(), month.getMonth(), 1)\n const gridStart = startOfWeek(monthStart, weekStartsOn)\n\n return Array.from({length: 42}, (_, index) => addDays(gridStart, index))\n}\n\nfunction getStatusColor(status?: CalendarEvent['status']) {\n switch (status) {\n case 'active':\n return 'rgba(14, 165, 233, 1)'\n case 'done':\n return 'rgba(34, 197, 94, 1)'\n case 'cancelled':\n return 'rgba(239, 68, 68, 1)'\n default:\n return 'rgba(245, 158, 11, 1)'\n }\n}\n\nfunction getCalendarCopy(locale: CalendarBoardLocale): CalendarCopy {\n if (locale === 'pl') {\n return {\n monthView: 'Miesiac',\n weekView: 'Tydzien',\n previousMonth: 'Poprzedni miesiac',\n nextMonth: 'Nastepny miesiac',\n previousWeek: 'Poprzedni tydzien',\n nextWeek: 'Nastepny tydzien',\n emptyStateText: 'Brak zdarzen dla wybranego dnia.',\n timelineTitle: 'Os czasu dnia',\n timelineEmptyState: 'Brak zdarzen w tej godzinie.',\n allDay: 'Caly dzien',\n itemsCount: (count) => `${count} zdarzen`,\n }\n }\n\n return {\n monthView: 'Month',\n weekView: 'Week',\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n previousWeek: 'Previous week',\n nextWeek: 'Next week',\n emptyStateText: 'No events for the selected day.',\n timelineTitle: 'Daily timeline',\n timelineEmptyState: 'No events in this hour.',\n allDay: 'All day',\n itemsCount: (count) => `${count} events`,\n }\n}\n\nfunction formatBoardDate(date: Date, locale: CalendarBoardLocale) {\n return new Intl.DateTimeFormat(locale === 'pl' ? 'pl-PL' : 'en-US', {\n weekday: 'long',\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n }).format(date)\n}\n\nfunction formatWeekRange(startDate: Date, locale: CalendarBoardLocale) {\n const endDate = addDays(startDate, 6)\n const formatter = new Intl.DateTimeFormat(locale === 'pl' ? 'pl-PL' : 'en-US', {\n day: 'numeric',\n month: 'short',\n })\n\n return `${formatter.format(startDate)} - ${formatter.format(endDate)}`\n}\n\nfunction formatEventTime(event: CalendarEvent, copy: CalendarCopy) {\n if (event.startTime && event.endTime) {\n return `${event.startTime} - ${event.endTime}`\n }\n\n if (event.startTime) {\n return event.startTime\n }\n\n return copy.allDay\n}\n\nfunction getTimelineSlotState(date: Date, hour: number): CalendarTimelineSlotState {\n const now = new Date()\n const slotStart = new Date(date)\n slotStart.setHours(hour, 0, 0, 0)\n const slotEnd = new Date(slotStart)\n slotEnd.setHours(hour + 1, 0, 0, 0)\n\n if (slotEnd <= now) {\n return 'past'\n }\n\n if (slotStart <= now && slotEnd > now) {\n return 'active'\n }\n\n return 'upcoming'\n}\n\nfunction buildDayMarkers(events: CalendarEvent[]) {\n return sortEventsByTime(events)\n .slice(0, 4)\n .map((event) => (\n <span\n key={event.id}\n className={'marker'}\n style={{background: event.color ?? getStatusColor(event.status)}}\n aria-hidden={'true'}\n />\n ))\n}\n\nfunction applyCalendarFilters(events: CalendarEvent[], filters: CalendarFilterOption[], activeFilterIds: string[]) {\n if (!filters.length || !activeFilterIds.length) {\n return events\n }\n\n const activeFilters = filters.filter((filterOption) => activeFilterIds.includes(filterOption.id))\n if (!activeFilters.length) {\n return events\n }\n\n return events.filter((event) => activeFilters.some((filterOption) => filterOption.predicate(event)))\n}\n\nfunction getViewTitle(month: Date, view: CalendarBoardView, locale: CalendarBoardLocale, weekStartsOn: 0 | 1) {\n if (view === 'week') {\n return formatWeekRange(startOfWeek(month, weekStartsOn), locale)\n }\n\n return new Intl.DateTimeFormat(locale === 'pl' ? 'pl-PL' : 'en-US', {\n month: 'long',\n year: 'numeric',\n }).format(month)\n}\n\nfunction getViewSubtitle(view: CalendarBoardView, copy: CalendarCopy) {\n return view === 'week' ? copy.weekView : copy.monthView\n}\n\nfunction CalendarDetailsContent({\n date,\n events,\n locale,\n timelineStartHour,\n timelineEndHour,\n showTimeline,\n emptyStateText,\n renderEventItem,\n}: CalendarDetailsContentProps) {\n if (!date) {\n return null\n }\n\n return (\n <Stack gap={'md'}>\n <Stack gap={'xs'}>\n <Heading level={4}>{formatBoardDate(date, locale)}</Heading>\n <Text tone={'muted'} size={'sm'}>\n {events.length > 0 ? `${events.length} items` : emptyStateText}\n </Text>\n </Stack>\n <CalendarEventList\n events={events}\n locale={locale}\n currentDate={date}\n emptyStateText={emptyStateText}\n renderEventItem={renderEventItem}\n />\n {showTimeline && (\n <CalendarTimeline\n date={date}\n events={events}\n locale={locale}\n startHour={timelineStartHour}\n endHour={timelineEndHour}\n />\n )}\n </Stack>\n )\n}\n\nfunction CalendarFilters({\n filters,\n activeFilterIds,\n onToggle,\n}: {\n filters: CalendarFilterOption[]\n activeFilterIds: string[]\n onToggle: (filterId: string) => void\n}) {\n if (!filters.length) {\n return null\n }\n\n return (\n <div className={'calendar-board__filters'}>\n {filters.map((filterOption) => {\n const isActive = activeFilterIds.includes(filterOption.id)\n\n return (\n <Button\n key={filterOption.id}\n type={'button'}\n size={'sm'}\n variant={isActive ? 'primary' : 'outlined'}\n color={isActive ? 'primary' : 'neutral'}\n className={'calendar-board__filter-btn'}\n onClick={() => onToggle(filterOption.id)}\n >\n {filterOption.label}\n </Button>\n )\n })}\n </div>\n )\n}\nfunction CalendarWeekView({\n days,\n eventsByDay,\n selectedDate,\n activeDate,\n onDayInteract,\n onDayHover,\n onDayLeave,\n dayBadge,\n renderDayCell,\n locale,\n}: CalendarWeekViewProps) {\n const todayKey = getDateKey(stripTime(new Date()))\n\n return (\n <div className={'calendar-board__week'}>\n {days.map((day) => {\n const dayKey = getDateKey(day)\n const dayEvents = eventsByDay.get(dayKey) ?? []\n const badge =\n dayBadge?.(day, dayEvents) ??\n (dayEvents.length > 0 ? <Badge size={'sm'}>{dayEvents.length}</Badge> : null)\n const markers = buildDayMarkers(dayEvents)\n const isSelected = Boolean(selectedDate && getDateKey(selectedDate) === dayKey)\n const context = {\n date: day,\n events: dayEvents,\n badge,\n isToday: dayKey === todayKey,\n isSelected,\n isOutsideMonth: false,\n }\n\n return (\n <div key={dayKey} className={'calendar-board__week-column'}>\n <CalendarDayCell\n date={day}\n events={dayEvents}\n badge={badge}\n markers={markers}\n isToday={context.isToday}\n isSelected={isSelected || Boolean(activeDate && getDateKey(activeDate) === dayKey)}\n isOutsideMonth={false}\n onClick={(event) => onDayInteract(day, event.currentTarget, dayEvents)}\n onMouseEnter={(event) => onDayHover(day, event.currentTarget, dayEvents)}\n onMouseLeave={onDayLeave}\n >\n {renderDayCell ? renderDayCell(day, context) : undefined}\n </CalendarDayCell>\n </div>\n )\n })}\n </div>\n )\n}\n\nexport function CalendarDayCell({\n date,\n events = [],\n badge,\n markers,\n isToday = false,\n isSelected = false,\n isOutsideMonth = false,\n className,\n children,\n ...rest\n}: CalendarDayCellProps) {\n return (\n <button\n type={'button'}\n className={cn(\n 'calendar-day-cell',\n isToday && 'today',\n isSelected && 'selected',\n isOutsideMonth && 'outside-month',\n className\n )}\n {...rest}\n >\n {children ?? (\n <>\n <div className={'day-cell__header'}>\n <span className={'day-cell__number'}>{date.getDate()}</span>\n <div className={'day-cell__meta'}>{badge}</div>\n </div>\n <div className={'markers'}>{markers ?? buildDayMarkers(events)}</div>\n </>\n )}\n </button>\n )\n}\n\nexport function CalendarEventItem({event, locale = 'en', className, currentDate, ...rest}: CalendarEventItemProps) {\n const copy = getCalendarCopy(locale)\n const statusColor =\n event.status === 'cancelled'\n ? 'error'\n : event.status === 'done'\n ? 'success'\n : event.status === 'active'\n ? 'info'\n : 'warning'\n\n return (\n <div className={cn('calendar-event-item', className)} {...rest}>\n <div className={'calendar-event-item__time'}>{formatEventTime(event, copy)}</div>\n <div className={'calendar-event-item__content'}>\n <div className={'calendar-event-item__title-row'}>\n <Heading level={5}>{event.title}</Heading>\n {event.status && (\n <Badge color={statusColor} size={'sm'}>\n {event.status}\n </Badge>\n )}\n </div>\n {event.description && (\n <Text size={'sm'} tone={'muted'}>\n {event.description}\n </Text>\n )}\n <div className={'calendar-event-item__details'}>\n {event.type && (\n <Badge color={'neutral'} size={'sm'}>\n {event.type}\n </Badge>\n )}\n {event.badgeLabel && <Badge size={'sm'}>{event.badgeLabel}</Badge>}\n {event.user && (\n <span className={'calendar-event-item__user'}>\n <Avatar\n size={'sm'}\n src={event.user.avatar}\n name={event.user.name}\n backgroundColor={event.user.color}\n />\n {event.user.name}\n </span>\n )}\n {!event.startTime && !event.endTime && currentDate && (\n <Text size={'sm'} tone={'muted'}>\n {formatBoardDate(currentDate, locale)}\n </Text>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport function CalendarEventList({\n events,\n locale = 'en',\n currentDate,\n emptyStateText,\n renderEventItem,\n className,\n ...rest\n}: CalendarEventListProps) {\n const copy = getCalendarCopy(locale)\n\n if (!events.length) {\n return (\n <Text size={'sm'} tone={'muted'} className={cn('calendar-event-list', className)} {...rest}>\n {emptyStateText ?? copy.emptyStateText}\n </Text>\n )\n }\n\n return (\n <div className={cn('calendar-event-list', className)} {...rest}>\n <Stack gap={'sm'}>\n {sortEventsByTime(events).map((event) =>\n renderEventItem ? (\n <div key={event.id}>{renderEventItem(event)}</div>\n ) : (\n <CalendarEventItem key={event.id} event={event} locale={locale} currentDate={currentDate} />\n )\n )}\n </Stack>\n </div>\n )\n}\nexport function CalendarTimeline({\n date,\n events,\n locale = 'en',\n startHour = 6,\n endHour = 22,\n emptyStateText,\n className,\n ...rest\n}: CalendarTimelineProps) {\n const copy = getCalendarCopy(locale)\n const hours = Array.from({length: Math.max(endHour - startHour + 1, 1)}, (_, index) => startHour + index)\n\n return (\n <div className={cn('calendar-timeline', className)} {...rest}>\n <Stack gap={'sm'}>\n <Heading level={5}>{copy.timelineTitle}</Heading>\n <div className={'calendar-timeline__slots'}>\n {hours.map((hour) => {\n const matchingEvents = events.filter((event) => {\n if (!event.startTime) {\n return false\n }\n\n return Number(event.startTime.split(':')[0]) === hour\n })\n const slotState = getTimelineSlotState(date, hour)\n\n return (\n <div key={hour} className={cn('timeline-slot', slotState)}>\n <div className={'timeline-slot__time'}>{`${String(hour).padStart(2, '0')}:00`}</div>\n <div className={'timeline-slot__line'} />\n <div className={'timeline-slot__content'}>\n {matchingEvents.length > 0 ? (\n <Stack gap={'xs'}>\n {matchingEvents.map((event) => (\n <div key={event.id} className={'timeline-slot__event'}>\n <span\n className={'timeline-slot__event-dot'}\n style={{\n background: event.color ?? getStatusColor(event.status),\n }}\n />\n <Text size={'sm'}>{event.title}</Text>\n </div>\n ))}\n </Stack>\n ) : (\n <Text size={'sm'} tone={'muted'}>\n {emptyStateText ?? copy.timelineEmptyState}\n </Text>\n )}\n </div>\n </div>\n )\n })}\n </div>\n </Stack>\n </div>\n )\n}\n\nexport function CalendarEventPopover({\n open,\n anchorRef,\n onClose,\n onPointerEnter,\n onPointerLeave,\n date,\n events,\n locale = 'en',\n timelineStartHour = 6,\n timelineEndHour = 22,\n showTimeline = true,\n emptyStateText,\n renderEventItem,\n className,\n style,\n}: CalendarEventPopoverProps) {\n return (\n <Popover\n open={open}\n anchorRef={anchorRef}\n onClose={onClose}\n placement={'bottom-start'}\n className={cn('calendar-board-popover', className)}\n style={style}\n >\n <Card className={'calendar-event-popover'} onPointerEnter={onPointerEnter} onPointerLeave={onPointerLeave}>\n <CardBody>\n <CalendarDetailsContent\n date={date}\n events={events}\n locale={locale}\n timelineStartHour={timelineStartHour}\n timelineEndHour={timelineEndHour}\n showTimeline={showTimeline}\n emptyStateText={emptyStateText ?? getCalendarCopy(locale).emptyStateText}\n renderEventItem={renderEventItem}\n />\n </CardBody>\n </Card>\n </Popover>\n )\n}\n\nexport function CalendarBoard({\n month,\n defaultMonth,\n onMonthChange,\n events = [],\n locale = 'en',\n weekStartsOn = 1,\n view,\n defaultView = 'month',\n views = ['month', 'week'],\n onViewChange,\n selectedDate,\n defaultSelectedDate,\n onDayClick,\n dayBadge,\n renderDayCell,\n renderEventItem,\n detailsTrigger = 'click',\n detailsMode = 'auto',\n showTimeline = true,\n timelineStartHour = 6,\n timelineEndHour = 22,\n emptyStateText,\n filters = [],\n activeFilters,\n defaultActiveFilters = [],\n onActiveFiltersChange,\n fullWidth = false,\n className,\n ...rest\n}: CalendarBoardProps) {\n const copy = getCalendarCopy(locale)\n const today = stripTime(new Date())\n const [internalMonth, setInternalMonth] = useState(stripTime(defaultMonth ?? month ?? today))\n const [internalView, setInternalView] = useState<CalendarBoardView>(defaultView)\n const [internalSelectedDate, setInternalSelectedDate] = useState<Date | null>(normalizeDate(defaultSelectedDate))\n const [internalActiveFilters, setInternalActiveFilters] = useState<string[]>(defaultActiveFilters)\n const [activeDate, setActiveDate] = useState<Date | null>(null)\n const [detailsOpen, setDetailsOpen] = useState(false)\n const [isCompact, setIsCompact] = useState(false)\n const activeAnchorRef = useRef<HTMLElement | null>(null)\n const closeTimeoutRef = useRef<number | null>(null)\n\n const isMonthControlled = month !== undefined && typeof onMonthChange === 'function'\n const visibleMonth = stripTime(isMonthControlled ? (month ?? internalMonth) : internalMonth)\n const currentView = view ?? internalView\n const resolvedSelectedDate = normalizeDate(selectedDate) ?? internalSelectedDate\n const resolvedActiveFilters = activeFilters ?? internalActiveFilters\n\n useEffect(() => {\n const mediaQuery = window.matchMedia('(max-width: 768px)')\n const updateCompactState = () => setIsCompact(mediaQuery.matches)\n\n updateCompactState()\n mediaQuery.addEventListener('change', updateCompactState)\n\n return () => mediaQuery.removeEventListener('change', updateCompactState)\n }, [])\n\n useEffect(() => {\n if (isMonthControlled && month) {\n setInternalMonth(stripTime(month))\n }\n }, [isMonthControlled, month])\n\n useEffect(() => {\n if (view) {\n setInternalView(view)\n }\n }, [view])\n\n useEffect(() => {\n if (selectedDate !== undefined) {\n setInternalSelectedDate(normalizeDate(selectedDate))\n }\n }, [selectedDate])\n\n useEffect(\n () => () => {\n if (closeTimeoutRef.current) {\n window.clearTimeout(closeTimeoutRef.current)\n }\n },\n []\n )\n\n const filteredEvents = useMemo(\n () => applyCalendarFilters(events, filters, resolvedActiveFilters),\n [events, filters, resolvedActiveFilters]\n )\n\n const eventsByDay = useMemo(() => {\n const nextMap = new Map<string, CalendarEvent[]>()\n\n filteredEvents.forEach((event) => {\n const eventDate = getEventDate(event)\n if (!eventDate) {\n return\n }\n\n const key = getDateKey(eventDate)\n const currentEvents = nextMap.get(key) ?? []\n currentEvents.push(event)\n nextMap.set(key, currentEvents)\n })\n\n return nextMap\n }, [filteredEvents])\n const calendarDays = useMemo(() => {\n if (currentView === 'week') {\n const baseDate = resolvedSelectedDate ?? visibleMonth\n const weekStart = startOfWeek(baseDate, weekStartsOn)\n return Array.from({length: 7}, (_, index) => addDays(weekStart, index))\n }\n\n return buildMonthGrid(visibleMonth, weekStartsOn)\n }, [currentView, resolvedSelectedDate, visibleMonth, weekStartsOn])\n\n const effectiveDetailsMode: CalendarDetailsMode =\n detailsMode === 'auto' ? (isCompact ? 'modal' : 'popover') : detailsMode\n const activeEvents = activeDate ? (eventsByDay.get(getDateKey(activeDate)) ?? []) : []\n const canShowMonthView = views.includes('month')\n const canShowWeekView = views.includes('week')\n\n const setMonthAndNotify = (nextMonth: Date) => {\n const normalizedMonth = stripTime(nextMonth)\n setInternalMonth(normalizedMonth)\n onMonthChange?.(normalizedMonth)\n }\n\n const navigateBy = (amount: number) => {\n if (currentView === 'week') {\n const nextAnchor = addDays(resolvedSelectedDate ?? visibleMonth, amount * 7)\n setMonthAndNotify(nextAnchor)\n setInternalSelectedDate(nextAnchor)\n setActiveDate(nextAnchor)\n setDetailsOpen(false)\n return\n }\n\n const nextMonth = new Date(visibleMonth.getFullYear(), visibleMonth.getMonth() + amount, 1)\n setMonthAndNotify(nextMonth)\n setDetailsOpen(false)\n setActiveDate(null)\n }\n\n const setViewAndNotify = (nextView: CalendarBoardView) => {\n setInternalView(nextView)\n onViewChange?.(nextView)\n }\n\n const setSelectedDateAndNotify = (nextDate: Date, dayEvents: CalendarEvent[]) => {\n const normalizedDate = stripTime(nextDate)\n setInternalSelectedDate(normalizedDate)\n onDayClick?.(normalizedDate, dayEvents)\n }\n\n const clearCloseTimeout = () => {\n if (closeTimeoutRef.current) {\n window.clearTimeout(closeTimeoutRef.current)\n closeTimeoutRef.current = null\n }\n }\n\n const scheduleClose = () => {\n clearCloseTimeout()\n closeTimeoutRef.current = window.setTimeout(() => {\n setDetailsOpen(false)\n }, 180)\n }\n\n const openDetails = (date: Date, target: HTMLElement, dayEvents: CalendarEvent[]) => {\n activeAnchorRef.current = target\n setActiveDate(date)\n setSelectedDateAndNotify(date, dayEvents)\n setDetailsOpen(true)\n }\n\n const handleDayInteract = (date: Date, target: HTMLElement, dayEvents: CalendarEvent[]) => {\n clearCloseTimeout()\n openDetails(date, target, dayEvents)\n\n if (currentView === 'month' && date.getMonth() !== visibleMonth.getMonth()) {\n setMonthAndNotify(new Date(date.getFullYear(), date.getMonth(), 1))\n }\n }\n\n const handleDayHover = (date: Date, target: HTMLElement, dayEvents: CalendarEvent[]) => {\n if (detailsTrigger !== 'hover' || effectiveDetailsMode !== 'popover') {\n return\n }\n\n clearCloseTimeout()\n openDetails(date, target, dayEvents)\n }\n\n const handleFilterToggle = (filterId: string) => {\n const nextFilters = resolvedActiveFilters.includes(filterId)\n ? resolvedActiveFilters.filter((id) => id !== filterId)\n : [...resolvedActiveFilters, filterId]\n\n setInternalActiveFilters(nextFilters)\n onActiveFiltersChange?.(nextFilters)\n }\n\n const dayNameBase = startOfWeek(\n currentView === 'week' ? (resolvedSelectedDate ?? visibleMonth) : visibleMonth,\n weekStartsOn\n )\n\n return (\n <div className={cn('calendar-board', fullWidth && 'full-width', className)} {...rest}>\n <div className={'calendar-board__header'}>\n <Stack gap={'xs'}>\n <Heading level={3}>{getViewTitle(visibleMonth, currentView, locale, weekStartsOn)}</Heading>\n <Text size={'sm'} tone={'muted'}>\n {getViewSubtitle(currentView, copy)}\n </Text>\n </Stack>\n <Stack gap={'sm'} align={'end'}>\n <div className={'calendar-board__actions'}>\n <Button\n type={'button'}\n size={'sm'}\n variant={'outlined'}\n color={'neutral'}\n onClick={() => navigateBy(-1)}\n >\n {currentView === 'week' ? copy.previousWeek : copy.previousMonth}\n </Button>\n <Button\n type={'button'}\n size={'sm'}\n variant={'outlined'}\n color={'neutral'}\n onClick={() => navigateBy(1)}\n >\n {currentView === 'week' ? copy.nextWeek : copy.nextMonth}\n </Button>\n </div>\n {(canShowMonthView || canShowWeekView) && (\n <div className={'calendar-board__view-switch'}>\n {canShowMonthView && (\n <Button\n type={'button'}\n size={'sm'}\n variant={currentView === 'month' ? 'primary' : 'outlined'}\n color={currentView === 'month' ? 'primary' : 'neutral'}\n onClick={() => setViewAndNotify('month')}\n >\n {copy.monthView}\n </Button>\n )}\n {canShowWeekView && (\n <Button\n type={'button'}\n size={'sm'}\n variant={currentView === 'week' ? 'primary' : 'outlined'}\n color={currentView === 'week' ? 'primary' : 'neutral'}\n onClick={() => setViewAndNotify('week')}\n >\n {copy.weekView}\n </Button>\n )}\n </div>\n )}\n </Stack>\n </div>\n\n <CalendarFilters filters={filters} activeFilterIds={resolvedActiveFilters} onToggle={handleFilterToggle} />\n\n <div className={'calendar-board__day-names'}>\n {Array.from({length: 7}, (_, index) => addDays(dayNameBase, index)).map((day) => (\n <div key={getDateKey(day)} className={'calendar-board__day-name'}>\n {new Intl.DateTimeFormat(locale === 'pl' ? 'pl-PL' : 'en-US', {weekday: 'short'}).format(day)}\n </div>\n ))}\n </div>\n\n {currentView === 'week' ? (\n <CalendarWeekView\n days={calendarDays}\n eventsByDay={eventsByDay}\n selectedDate={resolvedSelectedDate}\n activeDate={activeDate}\n onDayInteract={handleDayInteract}\n onDayHover={handleDayHover}\n onDayLeave={() => {\n if (detailsTrigger === 'hover' && effectiveDetailsMode === 'popover') {\n scheduleClose()\n }\n }}\n dayBadge={dayBadge}\n renderDayCell={renderDayCell}\n locale={locale}\n />\n ) : (\n <div className={'calendar-board__grid'}>\n {calendarDays.map((day) => {\n const dayKey = getDateKey(day)\n const dayEvents = eventsByDay.get(dayKey) ?? []\n const badge =\n dayBadge?.(day, dayEvents) ??\n (dayEvents.length > 0 ? <Badge size={'sm'}>{dayEvents.length}</Badge> : null)\n const isToday = dayKey === getDateKey(today)\n const isSelected = Boolean(resolvedSelectedDate && dayKey === getDateKey(resolvedSelectedDate))\n const isOutsideMonth = day.getMonth() !== visibleMonth.getMonth()\n const markers = buildDayMarkers(dayEvents)\n const context = {\n date: day,\n events: dayEvents,\n badge,\n isToday,\n isSelected,\n isOutsideMonth,\n }\n\n return (\n <CalendarDayCell\n key={dayKey}\n date={day}\n events={dayEvents}\n badge={badge}\n markers={markers}\n isToday={isToday}\n isSelected={isSelected || Boolean(activeDate && dayKey === getDateKey(activeDate))}\n isOutsideMonth={isOutsideMonth}\n onClick={(event) => handleDayInteract(day, event.currentTarget, dayEvents)}\n onMouseEnter={(event) => handleDayHover(day, event.currentTarget, dayEvents)}\n onMouseLeave={() => {\n if (detailsTrigger === 'hover' && effectiveDetailsMode === 'popover') {\n scheduleClose()\n }\n }}\n >\n {renderDayCell ? renderDayCell(day, context) : undefined}\n </CalendarDayCell>\n )\n })}\n </div>\n )}\n\n {effectiveDetailsMode === 'popover' ? (\n <CalendarEventPopover\n open={detailsOpen && Boolean(activeDate) && Boolean(activeAnchorRef.current)}\n anchorRef={activeAnchorRef as RefObject<HTMLElement | null>}\n onClose={() => setDetailsOpen(false)}\n onPointerEnter={() => clearCloseTimeout()}\n onPointerLeave={() => scheduleClose()}\n date={activeDate}\n events={activeEvents}\n locale={locale}\n timelineStartHour={timelineStartHour}\n timelineEndHour={timelineEndHour}\n showTimeline={showTimeline}\n emptyStateText={emptyStateText ?? copy.emptyStateText}\n renderEventItem={renderEventItem}\n />\n ) : (\n <Modal\n open={detailsOpen && Boolean(activeDate)}\n onClose={() => setDetailsOpen(false)}\n title={activeDate ? formatBoardDate(activeDate, locale) : undefined}\n description={activeDate ? copy.itemsCount(activeEvents.length) : undefined}\n size={'lg'}\n >\n <CalendarDetailsContent\n date={activeDate}\n events={activeEvents}\n locale={locale}\n timelineStartHour={timelineStartHour}\n timelineEndHour={timelineEndHour}\n showTimeline={showTimeline}\n emptyStateText={emptyStateText ?? copy.emptyStateText}\n renderEventItem={renderEventItem}\n />\n </Modal>\n )}\n </div>\n )\n}\n","import {useCallback, useState} from 'react'\n\ntype ControllableStringLike = string | number | readonly string[] | null | undefined\n\nfunction normalizeStringValue(value: ControllableStringLike) {\n if (value === null || value === undefined) {\n return ''\n }\n\n return value.toString()\n}\n\n// Share controlled and uncontrolled string state logic between text-like primitives.\nexport function useControllableString(value: ControllableStringLike, defaultValue?: ControllableStringLike) {\n const [internalValue, setInternalValue] = useState(() => normalizeStringValue(defaultValue))\n const isControlled = value !== undefined\n const currentValue = isControlled ? normalizeStringValue(value) : internalValue\n\n const setCurrentValue = useCallback(\n (nextValue: string) => {\n if (!isControlled) {\n setInternalValue(nextValue)\n }\n },\n [isControlled]\n )\n\n return {\n isControlled,\n currentValue,\n setCurrentValue,\n }\n}\n","import {forwardRef, useCallback, useRef, useState} from 'react'\nimport type {InputProps} from './Input.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {useControllableString} from '../../../utils/useControllableString'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './Input.css'\n\n// Render the base text input used by all specialized input wrappers.\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 fcolor,\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 clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n inputClassName,\n labelClassName,\n },\n ref\n) {\n const [focused, setFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: clickEffect,\n disabled: disabled || readOnly,\n color: rippleColor,\n })\n\n const {isControlled, currentValue, setCurrentValue} = useControllableString(value, defaultValue)\n const hasError = error || !!errorText\n const hasContent = currentValue.length > 0\n\n // Mirror focus state so the wrapper can style the input consistently.\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true)\n onFocus?.(event)\n },\n [onFocus]\n )\n\n // Clear focus styles before delegating to the caller.\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false)\n onBlur?.(event)\n },\n [onBlur]\n )\n\n // Keep uncontrolled usage working without blocking controlled integrations.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setCurrentValue(event.target.value)\n onChange?.(event)\n },\n [onChange, setCurrentValue]\n )\n\n // Reset the visible value while preserving focus for quick repeated input.\n const handleClear = useCallback(() => {\n setCurrentValue('')\n\n const input = (ref as React.RefObject<HTMLInputElement>)?.current ?? inputRef.current\n if (input && isControlled) {\n input.value = ''\n }\n\n onClear?.()\n input?.focus()\n }, [isControlled, onClear, ref, setCurrentValue])\n\n const containerClasses = cn(\n 'container',\n variant,\n size,\n focused && 'focused',\n hasError && 'input-error',\n success && !hasError && 'input-success',\n color === 'neutral' && 'color-neutral',\n color === 'success' && 'color-success',\n color === 'error' && 'color-error',\n color === 'warning' && 'color-warning',\n color === 'info' && 'color-info',\n disabled && 'disabled',\n rounded && 'rounded',\n effectClassName\n )\n\n return (\n <div\n className={cn('input', ...getAppearanceClassNames({fcolor}), fullWidth && 'full-width', className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn(\n 'label',\n focused && 'focused',\n hasError && 'error',\n success && !hasError && 'success',\n required && 'required',\n labelClassName\n )}\n >\n {label}\n </label>\n )}\n\n <div className={containerClasses} onPointerDown={handlePointerDown}>\n {effectLayer}\n {startIcon && <span className=\"start-icon\">{startIcon}</span>}\n\n <input\n ref={ref ?? inputRef}\n type={type}\n value={currentValue}\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('field', inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n\n {loading && <span className=\"spinner\" />}\n\n {clearable && hasContent && !loading && !disabled && (\n <button\n type=\"button\"\n className=\"clear-btn\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear input\"\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M4 4L12 12M12 4L4 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n )}\n\n {endIcon && !loading && <span className=\"end-icon\">{endIcon}</span>}\n </div>\n\n {(errorText || helperText || showCharCount) && (\n <div className=\"bottom-row\">\n <span>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className=\"error-text\" role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className=\"helper-text\">\n {helperText}\n </span>\n )}\n </span>\n {showCharCount && maxLength && (\n <span className={cn('char-count', currentValue.length > maxLength && 'over')}>\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 {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {useControllableString} from '../../../utils/useControllableString'\nimport './Textarea.css'\n\n// Render the multiline text input with optional auto-resize behavior.\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 fcolor,\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 textareaRef = useRef<HTMLTextAreaElement>(null)\n\n const {currentValue, setCurrentValue} = useControllableString(value, defaultValue)\n const hasError = error || !!errorText\n const resolvedRef = ref ?? textareaRef\n\n // Resize the textarea to fit content while respecting min and max row limits.\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 // Mirror focus state so wrapper styling stays consistent with Input.\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(true)\n onFocus?.(e)\n },\n [onFocus]\n )\n\n // Clear focus styling before delegating blur handling.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setFocused(false)\n onBlur?.(e)\n },\n [onBlur]\n )\n\n // Keep uncontrolled usage working without blocking controlled integrations.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setCurrentValue(e.target.value)\n onChange?.(e)\n },\n [onChange, setCurrentValue]\n )\n\n const containerClasses = cn(\n 'container',\n variant,\n size,\n focused && 'focused',\n hasError && 'error',\n success && !hasError && 'success',\n color === 'neutral' && 'color-neutral',\n color === 'success' && 'color-success',\n color === 'error' && 'color-error',\n color === 'warning' && 'color-warning',\n color === 'info' && 'color-info',\n disabled && 'disabled'\n )\n\n return (\n <div\n className={cn('textarea', ...getAppearanceClassNames({fcolor}), fullWidth && 'full-width', className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn(\n 'label',\n focused && 'focused',\n hasError && 'error',\n success && !hasError && 'success',\n required && '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={currentValue}\n className={cn('field', textareaClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n {loading && <span className=\"spinner\" />}\n </div>\n\n {(errorText || helperText || showCharCount) && (\n <div className=\"bottom-row\">\n <span>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className=\"error-text\" role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className=\"helper-text\">\n {helperText}\n </span>\n )}\n </span>\n {showCharCount && maxLength && (\n <span className={cn('char-count', currentValue.length > maxLength && 'over')}>\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 './InputPassword.css'\n\n// Approximate password strength with simple UI-focused heuristics.\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\n// Extend the base input with password visibility and optional strength feedback.\nexport const InputPassword = forwardRef<HTMLInputElement, InputPasswordProps>(function InputPassword(\n {showToggle = true, showStrength = false, onStrengthChange, value, defaultValue, onChange, className, ...rest},\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 // Keep uncontrolled usage working while reporting changes to the caller.\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=\"toggle-btn\"\n onClick={() => setVisible((v) => !v)}\n tabIndex={-1}\n aria-label={visible ? 'Hide password' : 'Show password'}\n >\n {visible ? '\\u25E0' : '\\u25C9'}\n </button>\n ) : undefined\n\n return (\n <div className={cn('input-password', className)}>\n <Input\n {...rest}\n ref={ref}\n type={visible ? 'text' : 'password'}\n value={currentValue}\n onChange={handleChange}\n endIcon={toggleIcon}\n />\n {showStrength && currentValue.length > 0 && (\n <div className=\"strength-row\">\n <div className=\"strength-bar\">\n {[0, 1, 2, 3].map((i) => (\n <div\n key={i}\n className={cn(\n 'strength-segment',\n i < ['weak', 'fair', 'good', 'strong'].indexOf(strength) + 1 &&\n `strength-${strength}`\n )}\n />\n ))}\n </div>\n <span className={cn('strength-label', `strength-${strength}`)}>{STRENGTH_LABELS[strength]}</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 {cn} from '../../../utils/cn'\nimport './InputNumber.css'\n\n// Keep numeric values inside optional min and max bounds.\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\n// Prevent floating-point drift when step values use decimal precision.\nfunction roundToPrecision(val: number, precision: number): number {\n const factor = Math.pow(10, precision)\n return Math.round(val * factor) / factor\n}\n\n// Extend the base input with stepping, clamping and keyboard increment support.\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 className,\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 // Keep the displayed string and numeric callback in sync.\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 // Move the current value by one step in the requested direction.\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 // Repeat stepping while the pointer is held on a stepper button.\n const startHold = useCallback(\n (direction: 1 | -1) => {\n increment(direction)\n intervalRef.current = setInterval(() => increment(direction), 150)\n },\n [increment]\n )\n\n // Clear the hold timer when the pointer is released.\n const stopHold = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current)\n intervalRef.current = undefined\n }\n }, [])\n\n useEffect(() => stopHold, [stopHold])\n\n // Filter user input down to numeric characters before storing it.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value\n const filtered = raw.replace(allowNegative ? /[^\\d.,-]/g : /[^\\d.,]/g, '')\n updateValue(filtered)\n onChange?.(e)\n },\n [onChange, allowNegative, updateValue]\n )\n\n // Snap the entered value back into range when the field loses focus.\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 // Support ArrowUp and ArrowDown as a keyboard stepper.\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 =\n showStepper && !disabled ? (\n <div className=\"stepper\">\n <button\n type=\"button\"\n className=\"step-btn\"\n onMouseDown={() => startHold(1)}\n onMouseUp={stopHold}\n onMouseLeave={stopHold}\n tabIndex={-1}\n aria-label=\"Increment\"\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M4 10L8 6L12 10\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n className=\"step-btn\"\n onMouseDown={() => startHold(-1)}\n onMouseUp={stopHold}\n onMouseLeave={stopHold}\n tabIndex={-1}\n aria-label=\"Decrement\"\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M4 6L8 10L12 6\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n ) : undefined\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n endIcon={stepper}\n disabled={disabled}\n className={cn('input-number', className)}\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\n// Extend the base input with debounced search callbacks and an inline clear action.\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((val: string) => onSearch?.(val), debounceMs)\n\n // Update local state and debounce search notifications while typing.\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 // Run search immediately when the user confirms with Enter.\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 // Clear both the visible field and the emitted search query.\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={currentValue}\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\n// Extend the base input with email validation and optional success feedback.\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 // Reuse the shared email validator and surface the latest result upstream.\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 // Validate while typing only when the component is configured to do so.\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 // Validate optional email input on blur once the user has interacted with it.\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 =\n !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 =\n 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={currentValue}\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 {cn} from '../../../utils/cn'\nimport {validatePhone} from '../../../utils/validators'\nimport {formatPhone, stripNonDigits} from '../../../utils/formatters'\nimport type {ValidationResult} from '../../../utils/validators'\nimport './InputPhone.css'\n\n// Extend the base input with country-aware phone formatting and validation.\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 className,\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 // Keep the emitted raw digits and the displayed formatted value aligned.\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 // Validate the raw number on blur using country-specific length rules.\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',\n DE: '+49',\n US: '+1',\n GB: '+44',\n FR: '+33',\n CZ: '+420',\n SK: '+421',\n }\n\n const prefix = showCountryCode ? (\n <span className=\"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={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n placeholder={placeholder}\n startIcon={showCountryCode ? prefix : phoneIcon}\n className={cn('input-phone', className)}\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\n// Extend the base input with name-friendly filtering and optional word-count validation.\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 // Normalize user input according to the configured name rules.\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 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 // Store the filtered value while still delegating the original change event.\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 // Validate the minimum word count after the user leaves the field.\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={currentValue}\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\n// Extend the base input with IBAN formatting and checksum validation.\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 // Keep raw and formatted IBAN values aligned for consumers and display.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\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 // Validate the normalized IBAN once the user leaves the field.\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 =\n !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 =\n 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={currentValue}\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}\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,\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\n// Extend the base input with NIP, PESEL and REGON formatting and validation.\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 // Normalize the visible value based on the selected identifier type.\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 // Validate the stripped numeric value against the active identifier rules.\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 =\n !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 =\n 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={currentValue}\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 {cn} from '../../../utils/cn'\nimport {formatCurrency, parseCurrencyToNumber} from '../../../utils/formatters'\nimport './InputCurrency.css'\n\n// Extend the base input with currency formatting and numeric callbacks.\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 className,\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 // Filter user input down to one decimal separator and an optional minus sign.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value\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 // Clamp the numeric value on blur and snap it to the configured precision.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\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 ? <span className=\"symbol\">{symbol}</span> : undefined\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"decimal\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n startIcon={currencyPosition === 'start' ? symbolEl : startIcon}\n endIcon={currencyPosition === 'end' ? symbolEl : endIcon}\n className={cn('input-currency', className)}\n />\n )\n})\n","import {forwardRef, useCallback, useMemo, useState} from 'react'\nimport type {InputCreditCardProps} from './InputCreditCard.types'\nimport {Input} from '../Input'\nimport {cn} from '../../../utils/cn'\nimport {detectCardBrand, formatCardNumber, stripCardNumber, validateCardNumber} from '../../../utils/creditCards'\nimport type {ValidationResult} from '../../../utils/validators'\nimport './InputCreditCard.css'\n\nfunction CardBrandBadge({value}: {value: string}) {\n const brand = detectCardBrand(value)\n\n return <span className={cn('card-brand', brand.brand)}>{brand.iconLabel}</span>\n}\n\n// Extend the base input with payment card detection, formatting and checksum validation.\nexport const InputCreditCard = forwardRef<HTMLInputElement, InputCreditCardProps>(function InputCreditCard(\n {\n validateOnBlur = true,\n validateOnChange = false,\n showBrandIcon = true,\n showValidIcon = true,\n onValidationChange,\n onCardBrandChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n success,\n placeholder = '4242 4242 4242 4242',\n className,\n ...rest\n },\n ref\n) {\n const [internalValue, setInternalValue] = useState(() => formatCardNumber(defaultValue?.toString() ?? ''))\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentValue = value !== undefined ? formatCardNumber(value.toString()) : internalValue\n const detectedBrand = useMemo(() => detectCardBrand(currentValue), [currentValue])\n\n const runValidation = useCallback(\n (formattedValue: string) => {\n const result = validateCardNumber(formattedValue)\n setValidation(result)\n onValidationChange?.(result)\n return result\n },\n [onValidationChange]\n )\n\n // Keep the visible card number grouped while exposing raw digits to the caller.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const formattedValue = formatCardNumber(event.target.value)\n const nextBrand = detectCardBrand(formattedValue)\n\n if (value === undefined) {\n setInternalValue(formattedValue)\n }\n\n onCardBrandChange?.(nextBrand.brand)\n onValueChange?.(stripCardNumber(formattedValue), formattedValue, nextBrand.brand)\n\n if (validateOnChange && touched) {\n runValidation(formattedValue)\n }\n\n onChange?.(event)\n },\n [onCardBrandChange, onChange, onValueChange, runValidation, touched, validateOnChange, value]\n )\n\n // Validate after the user leaves the field so checksum feedback stays predictable.\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n\n if (validateOnBlur && currentValue) {\n runValidation(currentValue)\n }\n\n onBlur?.(event)\n },\n [currentValue, onBlur, runValidation, validateOnBlur]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n const isSuccess =\n !isError && success !== undefined\n ? success\n : touched && validation.valid && stripCardNumber(currentValue).length > 0\n\n const validIcon =\n showValidIcon && isSuccess ? (\n <span className=\"valid-icon\" aria-hidden=\"true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M3 8L6.5 11.5L13 4.5\" />\n </svg>\n </span>\n ) : undefined\n\n return (\n <Input\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode=\"numeric\"\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n success={isSuccess}\n placeholder={placeholder}\n startIcon={showBrandIcon ? <CardBrandBadge value={currentValue} /> : undefined}\n endIcon={validIcon}\n className={cn('input-credit-card', className)}\n />\n )\n})\n","import {useState, useRef, useCallback, forwardRef, isValidElement} from 'react'\nimport type {InputGroupProps, InputGroupAddon, InputGroupSlot} from './InputGroup.types'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {useControllableString} from '../../../utils/useControllableString'\nimport {useInteractionEffect} from '../../../utils/useInteractionEffect'\nimport './InputGroup.css'\n\n// Detect structured addon configs while leaving raw React nodes untouched.\nfunction isAddonObject(slot: InputGroupSlot): slot is InputGroupAddon {\n return typeof slot === 'object' && slot !== null && !isValidElement(slot) && 'type' in slot\n}\n\n// Render one prepend or append slot based on its declared addon type.\nfunction renderSlot(slot: InputGroupSlot, position: 'prepend' | 'append', index: number) {\n if (!isAddonObject(slot)) {\n // Raw ReactNode — render as-is inside addon container\n return (\n <div key={`${position}-${index}`} className={cn('addon', 'custom', position)}>\n {slot}\n </div>\n )\n }\n\n const addon = slot\n\n if (addon.type === 'button') {\n return (\n <button\n key={`${position}-${index}`}\n type=\"button\"\n className={cn('addon', position, 'button')}\n onClick={addon.onClick}\n >\n {addon.content}\n </button>\n )\n }\n\n if (addon.type === 'checkbox') {\n return (\n <label key={`${position}-${index}`} className={cn('addon', position, 'checkbox')}>\n <input\n type=\"checkbox\"\n checked={addon.checked}\n onChange={(e) => addon.onCheckedChange?.(e.target.checked)}\n />\n </label>\n )\n }\n\n // text or icon\n return (\n <span key={`${position}-${index}`} className={cn('addon', position)}>\n {addon.content}\n </span>\n )\n}\n\n// Normalize the public slot API to a flat array for predictable rendering.\nfunction normalizeSlots(slots?: InputGroupSlot | InputGroupSlot[]): InputGroupSlot[] {\n if (slots === undefined || slots === null) return []\n if (Array.isArray(slots)) return slots\n return [slots]\n}\n\n// Render a grouped input with prepend and append content around a shared field.\nexport const InputGroup = forwardRef<HTMLInputElement, InputGroupProps>(function InputGroup(\n {\n prepend,\n append,\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 size = 'md',\n fcolor,\n fullWidth = false,\n label,\n helperText,\n errorText,\n color = 'primary',\n error = false,\n maxLength,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n loading = false,\n clickEffect = 'ripple',\n rippleColor,\n className,\n style,\n inputClassName,\n labelClassName,\n },\n ref\n) {\n const [focused, setFocused] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const {effectClassName, effectLayer, handlePointerDown} = useInteractionEffect<HTMLDivElement>({\n effect: clickEffect,\n disabled: disabled || readOnly,\n color: rippleColor,\n })\n\n const hasError = error || !!errorText\n const {currentValue, setCurrentValue} = useControllableString(value, defaultValue)\n\n // Mirror focus state so the wrapper can style the group consistently.\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true)\n onFocus?.(e)\n },\n [onFocus]\n )\n\n // Clear wrapper focus styling before delegating blur handling.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false)\n onBlur?.(e)\n },\n [onBlur]\n )\n\n // Keep uncontrolled usage working without blocking controlled integrations.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n setCurrentValue(e.target.value)\n onChange?.(e)\n },\n [onChange, setCurrentValue]\n )\n\n const prependSlots = normalizeSlots(prepend)\n const appendSlots = normalizeSlots(append)\n\n return (\n <div\n className={cn(\n 'input-group',\n color,\n ...getAppearanceClassNames({fcolor}),\n fullWidth && 'full-width',\n className\n )}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn(\n 'label',\n focused && 'focused',\n hasError && 'error',\n required && 'required',\n labelClassName\n )}\n >\n {label}\n </label>\n )}\n\n <div\n className={cn(\n 'container',\n size,\n focused && 'focused',\n hasError && 'has-error',\n disabled && 'disabled',\n effectClassName\n )}\n onPointerDown={handlePointerDown}\n >\n {effectLayer}\n {prependSlots.map((slot, i) => renderSlot(slot, 'prepend', i))}\n\n <input\n ref={ref ?? inputRef}\n type={type}\n value={currentValue}\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('field', inputClassName)}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n aria-invalid={hasError || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n />\n\n {loading && (\n <span className={'spinner-addon'}>\n <span className={'spinner'} />\n </span>\n )}\n\n {appendSlots.map((slot, i) => renderSlot(slot, 'append', i))}\n </div>\n\n {(errorText || helperText) && (\n <div className={'bottom'}>\n {errorText && (\n <span id={id ? `${id}-error` : undefined} className={'error-text'} role=\"alert\">\n {errorText}\n </span>\n )}\n {!errorText && helperText && (\n <span id={id ? `${id}-helper` : undefined} className={'helper'}>\n {helperText}\n </span>\n )}\n </div>\n )}\n </div>\n )\n})\n","import {forwardRef, useCallback, useMemo, useState} from 'react'\nimport type {InputPostCodeProps} from './InputPostCode.types'\nimport {InputGroup} from '../InputGroup'\nimport {cn} from '../../../utils/cn'\nimport {formatPostCode, getPostCodeRule, postCodeCountries, validatePostCode} from '../../../utils/postalCodes'\nimport type {ValidationResult} from '../../../utils/validators'\nimport './InputPostCode.css'\n\n// Extend the grouped input with country-aware postal code masking and validation.\nexport const InputPostCode = forwardRef<HTMLInputElement, InputPostCodeProps>(function InputPostCode(\n {\n country,\n defaultCountry = 'PL',\n selectableCountry = true,\n validateOnBlur = true,\n validateOnChange = false,\n onCountryChange,\n onValidationChange,\n onValueChange,\n value,\n defaultValue,\n onChange,\n onBlur,\n error,\n errorText,\n helperText,\n placeholder,\n className,\n disabled = false,\n ...rest\n },\n ref\n) {\n const [internalCountry, setInternalCountry] = useState(defaultCountry.toUpperCase())\n const [internalValue, setInternalValue] = useState(() =>\n formatPostCode(defaultValue?.toString() ?? '', country ?? defaultCountry)\n )\n const [validation, setValidation] = useState<ValidationResult>({valid: true})\n const [touched, setTouched] = useState(false)\n\n const currentCountry = (country ?? internalCountry).toUpperCase()\n const currentRule = useMemo(() => getPostCodeRule(currentCountry), [currentCountry])\n const currentValue = value !== undefined ? formatPostCode(value.toString(), currentCountry) : internalValue\n\n const runValidation = useCallback(\n (formattedValue: string, nextCountry: string) => {\n const result = validatePostCode(formattedValue, nextCountry)\n setValidation(result)\n onValidationChange?.(result)\n return result\n },\n [onValidationChange]\n )\n\n // Keep the visible postal code aligned with the selected country rule.\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const formattedValue = formatPostCode(event.target.value, currentCountry)\n\n if (value === undefined) {\n setInternalValue(formattedValue)\n }\n\n onValueChange?.(formattedValue.replace(/\\s|-/g, ''), formattedValue, currentCountry)\n\n if (validateOnChange && touched) {\n runValidation(formattedValue, currentCountry)\n }\n\n onChange?.(event)\n },\n [currentCountry, onChange, onValueChange, runValidation, touched, validateOnChange, value]\n )\n\n // Re-run validation after blur so the visible formatting and error state stay in sync.\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n setTouched(true)\n\n if (validateOnBlur && currentValue) {\n runValidation(currentValue, currentCountry)\n }\n\n onBlur?.(event)\n },\n [currentCountry, currentValue, onBlur, runValidation, validateOnBlur]\n )\n\n // Switch the formatter and validation rule whenever the selected country changes.\n const handleCountryChange = useCallback(\n (event: React.ChangeEvent<HTMLSelectElement>) => {\n const nextCountry = event.target.value.toUpperCase()\n const formattedValue = formatPostCode(currentValue, nextCountry)\n\n if (country === undefined) {\n setInternalCountry(nextCountry)\n }\n\n if (value === undefined) {\n setInternalValue(formattedValue)\n }\n\n onCountryChange?.(nextCountry)\n\n if (touched) {\n runValidation(formattedValue, nextCountry)\n }\n },\n [country, currentValue, onCountryChange, runValidation, touched, value]\n )\n\n const isError = error || (touched && !validation.valid)\n const resolvedErrorText = errorText || (touched && !validation.valid ? validation.error : undefined)\n\n return (\n <InputGroup\n {...rest}\n ref={ref}\n type=\"text\"\n inputMode={currentRule.inputMode}\n value={currentValue}\n onChange={handleChange}\n onBlur={handleBlur}\n error={isError}\n errorText={resolvedErrorText}\n helperText={resolvedErrorText ? undefined : (helperText ?? `Format: ${currentRule.example}`)}\n placeholder={placeholder ?? currentRule.placeholder}\n maxLength={currentRule.maxLength}\n disabled={disabled}\n prepend={\n selectableCountry ? (\n <div className=\"country-select-wrap\">\n <select\n className=\"country-select\"\n value={currentCountry}\n onChange={handleCountryChange}\n disabled={disabled}\n aria-label=\"Postal code country\"\n >\n {postCodeCountries.map((option) => (\n <option key={option.value} value={option.value}>\n {option.value}\n </option>\n ))}\n </select>\n </div>\n ) : (\n {type: 'text', content: currentCountry}\n )\n }\n className={cn('input-post-code', className)}\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 {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav'\nimport './Select.css'\n\n// Render a selectable list with optional search, grouping and multi-select tags.\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 fcolor,\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 // Normalize the public value into a string array for rendering and selection logic.\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 // Filter options locally when the searchable mode is active.\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 // Preserve group headers without changing the flat keyboard navigation index map.\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 // Toggle or replace the current selection depending on the mode.\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) ? arr.filter((v) => v !== opt.value) : [...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 // Open the popover and reset keyboard navigation when the trigger is used.\n const handleTriggerClick = useCallback(() => {\n if (disabled) return\n setOpen((v) => !v)\n resetIndex()\n }, [disabled, resetIndex])\n\n // Reset the current selection without closing the outer field wrapper.\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 // Render tags, labels or the placeholder based on the current selection state.\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=\"tags\">\n {selectedOptions.map((o) => (\n <span key={o.value} className=\"tag\">\n {o.label}\n </span>\n ))}\n </span>\n )\n }\n if (!multiple && selectedOptions.length > 0) {\n return selectedOptions[0].label\n }\n return <span className=\"placeholder\">{placeholder}</span>\n }, [selectedOptions, multiple, renderValue, placeholder])\n\n return (\n <div\n className={cn(\n 'select',\n color && `color-${color}`,\n ...getAppearanceClassNames({fcolor}),\n fullWidth && 'full-width',\n className\n )}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn('label', open && 'focused', hasError && 'error', required && 'required')}\n >\n {label}\n </label>\n )}\n\n <div\n ref={triggerRef}\n className={cn('trigger', variant, size, open && 'focused', hasError && 'error', disabled && 'disabled')}\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=\"value\">{displayValue}</span>\n\n {loading && <span className=\"spinner\" />}\n\n {clearable && selectedValues.length > 0 && !loading && !disabled && (\n <button\n type=\"button\"\n className=\"clear-btn\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear selection\"\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M4 4L12 12M12 4L4 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n )}\n\n <span className={cn('arrow', open && 'open')} aria-hidden=\"true\">\n <svg viewBox=\"0 0 16 16\">\n <path\n d=\"M4 6L8 10L12 6\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </div>\n\n {/* Hidden input for form submission */}\n {name && (\n <input\n type=\"hidden\"\n name={name}\n value={Array.isArray(currentValue) ? currentValue.join(',') : currentValue}\n />\n )}\n\n <Popover\n className={'select-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=\"dropdown\">\n {searchable && (\n <div className=\"search-box\">\n <input\n type=\"text\"\n className=\"search-input\"\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=\"no-options\">{noOptionsText}</div>\n ) : (\n <div className=\"options-list\" role=\"listbox\">\n {[...groupedOptions.entries()].map(([group, opts]) => (\n <div key={group}>\n {group && <div className=\"group-header\">{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 'option',\n isActive && 'active',\n isSelected && 'selected',\n opt.disabled && 'disabled'\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('checkbox', isSelected && 'checked')}>\n {isSelected && (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M3.5 8L6.5 11L12.5 5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </span>\n )}\n {renderOption ? renderOption(opt, isActive, isSelected) : opt.label}\n </div>\n )\n })}\n </div>\n ))}\n </div>\n )}\n </div>\n </Popover>\n\n {(errorText || helperText) && (\n <div className=\"bottom-row\">\n {errorText ? (\n <span className=\"error-text\" role=\"alert\">\n {errorText}\n </span>\n ) : (\n <span className=\"helper-text\">{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 {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {useKeyboardNav} from '../../../utils/useKeyboardNav'\nimport {useDebouncedCallback} from '../../../utils/useDebounce'\nimport './Autocomplete.css'\n\n// Resolve labels for primitive string options without extra configuration.\nfunction defaultGetLabel<T>(option: T): string {\n if (typeof option === 'string') return option\n return String(option)\n}\n\n// Resolve values for primitive string options without extra configuration.\nfunction defaultGetValue<T>(option: T): string {\n if (typeof option === 'string') return option\n return String(option)\n}\n\n// Apply a basic case-insensitive filter when the caller does not provide one.\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\n// Render a searchable suggestion list with optional free-solo and multi-tag behavior.\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 color,\n fcolor,\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 // Normalize the public value into an array for tag and selection rendering.\n const selectedValues = useMemo(() => {\n if (value == null) return []\n return Array.isArray(value) ? value.filter((item) => item != null) : [value]\n }, [value])\n\n // Filter suggestions locally unless the caller owns that logic.\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((val: string) => onInputChange?.(val), debounceMs)\n\n // Update the visible query and optionally notify async search logic.\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 // Apply a selected option to single or multiple value modes.\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 // Remove a selected tag by index in multiple mode.\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 {\n activeIndex,\n setActiveIndex,\n resetIndex,\n onKeyDown: navKeyDown,\n } = useKeyboardNav({\n itemCount: filtered.length,\n onSelect: handleSelect,\n onClose: () => setOpen(false),\n isOpen: open,\n })\n\n // Combine free-solo submission, tag removal and list navigation.\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 // Clear the input query and the selected value(s) together.\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(\n 'autocomplete',\n color && `color-${color}`,\n ...getAppearanceClassNames({fcolor}),\n fullWidth && 'full-width',\n className\n )}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn('label', open && 'focused', hasError && 'error', required && 'required')}\n >\n {label}\n </label>\n )}\n\n <div\n ref={wrapperRef}\n className={cn(\n 'input-wrapper',\n variant,\n size,\n open && 'focused',\n hasError && 'error',\n disabled && 'disabled'\n )}\n onClick={() => inputRef.current?.focus()}\n >\n {multiple &&\n selectedValues.length > 0 &&\n (renderTags ? (\n renderTags(selectedValues, handleRemoveTag)\n ) : (\n <span className=\"tags\">\n {selectedValues.map((v, i) => (\n <span key={getOptionValue(v)} className=\"tag\">\n {getOptionLabel(v)}\n <button\n type=\"button\"\n className=\"tag-remove\"\n onClick={(e) => {\n e.stopPropagation()\n handleRemoveTag(i)\n }}\n tabIndex={-1}\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M4 4L12 12M12 4L4 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </span>\n ))}\n </span>\n ))}\n\n <input\n ref={inputRef}\n type=\"text\"\n className=\"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=\"spinner\" />}\n\n {clearable && (selectedValues.length > 0 || inputValue) && !loading && !disabled && (\n <button type=\"button\" className=\"clear-btn\" onClick={handleClear} tabIndex={-1}>\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M4 4L12 12M12 4L4 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n )}\n </div>\n\n {name && <input type=\"hidden\" name={name} value={selectedValues.map(getOptionValue).join(',')} />}\n\n <Popover\n className={cn('autocomplete-popover', color && `color-${color}`)}\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=\"dropdown\">\n {loading ? (\n <div className=\"loading-msg\">{loadingText}</div>\n ) : filtered.length === 0 ? (\n <div className=\"no-options\">{noOptionsText}</div>\n ) : (\n <div className=\"options-list\" role=\"listbox\">\n {filtered.map((opt, i) => {\n const isActive = i === activeIndex\n const isSelected = selectedValues.some((v) => getOptionValue(v) === getOptionValue(opt))\n return (\n <div\n key={getOptionValue(opt)}\n className={cn('option', isActive && 'active', isSelected && 'selected')}\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=\"bottom-row\">\n {errorText ? (\n <span className=\"error-text\" role=\"alert\">\n {errorText}\n </span>\n ) : (\n <span className=\"helper-text\">{helperText}</span>\n )}\n </div>\n )}\n </div>\n )\n}\n","import {useState, useRef, useCallback, useMemo, useEffect} from 'react'\nimport type {DatePickerProps} from './DatePicker.types'\nimport {Popover} from '../../primitives/Popover'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {\n formatDate,\n parseDate,\n daysInMonth,\n firstDayOfMonth,\n isSameDay,\n isDateInRange,\n getDayNames,\n getMonthNames,\n addMonths,\n stripTime,\n} from '../../../utils/dateUtils'\nimport './DatePicker.css'\n\n// Normalize external date inputs into valid Date objects or null.\nfunction toDate(val: Date | string | undefined): Date | null {\n if (!val) return null\n if (val instanceof Date) return val\n const date = new Date(val)\n return isNaN(date.getTime()) ? null : date\n}\n\nconst ChevronLeftIcon = () => (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M9.5 3.5L5 8L9.5 12.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\nconst ChevronRightIcon = () => (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M6.5 3.5L11 8L6.5 12.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\nconst ClearIcon = () => (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M4 4L12 12M12 4L4 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n)\n\n// Render a date input with calendar navigation, parsing and optional inline mode.\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 fcolor,\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 selectedDate = toDate(value) ?? internalDate\n const [viewDate, setViewDate] = useState(() => {\n const date = selectedDate ?? new Date()\n return new Date(date.getFullYear(), date.getMonth(), 1)\n })\n const [viewMode, setViewMode] = useState<'days' | 'months'>('days')\n const triggerRef = useRef<HTMLDivElement>(null)\n\n const minDate = toDate(min)\n const maxDate = toDate(max)\n const hasError = error || !!errorText\n\n useEffect(() => {\n if (!selectedDate) return\n setViewDate(new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1))\n }, [selectedDate])\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 // Centralize date disabling so all calendar paths share the same logic.\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((disabledDate) => isSameDay(disabledDate, date))\n }\n if (typeof disabledDates === 'function') {\n return disabledDates(date)\n }\n return false\n },\n [minDate, maxDate, disabledDates]\n )\n\n // Apply the selected date and keep the calendar view aligned with it.\n const handleSelectDate = useCallback(\n (date: Date) => {\n if (isDisabled(date)) return\n if (value === undefined) setInternalDate(date)\n setInputText('')\n setViewDate(new Date(date.getFullYear(), date.getMonth(), 1))\n onChange?.(date)\n if (!inline) setOpen(false)\n },\n [inline, isDisabled, onChange, value]\n )\n\n const handleInputChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setInputText(event.target.value)\n }, [])\n\n // Parse manual input and commit it when it resolves to an allowed date.\n const handleInputBlur = useCallback(() => {\n if (!inputText) return\n const parsed = parseDate(inputText, format)\n if (parsed && !isDisabled(parsed)) {\n handleSelectDate(parsed)\n }\n setInputText('')\n }, [format, handleSelectDate, inputText, isDisabled])\n\n // Clear the current selection without toggling the popover state first.\n const handleClear = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation()\n if (value === undefined) setInternalDate(null)\n setInputText('')\n onChange?.(null)\n },\n [onChange, value]\n )\n\n // Jump directly to today's date through the same selection path.\n const handleToday = useCallback(() => {\n const today = stripTime(new Date())\n handleSelectDate(today)\n }, [handleSelectDate])\n\n // Build the six-week calendar grid including previous and next month fillers.\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)\n\n if (firstDayOfWeek === 1) {\n startDay = startDay === 0 ? 6 : startDay - 1\n }\n\n const days: Array<{date: Date; currentMonth: boolean}> = []\n\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 for (let day = 1; day <= totalDays; day++) {\n days.push({date: new Date(year, month, day), currentMonth: true})\n }\n\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 day = 1; day <= remaining; day++) {\n days.push({date: new Date(nextYear, nextMonth, day), currentMonth: false})\n }\n\n return days\n }, [firstDayOfWeek, viewDate])\n\n const today = stripTime(new Date())\n\n // Render the day or month view depending on the current picker mode.\n const renderCalendar = () => (\n <div className=\"calendar\">\n <div className=\"calendar-header\">\n <button\n type=\"button\"\n className=\"nav-btn\"\n onClick={() => setViewDate(addMonths(viewDate, -1))}\n aria-label=\"Previous month\"\n >\n <ChevronLeftIcon />\n </button>\n <button\n type=\"button\"\n className=\"header-title\"\n onClick={() => setViewMode((current) => (current === 'days' ? 'months' : 'days'))}\n >\n {monthNames[viewDate.getMonth()]} {viewDate.getFullYear()}\n </button>\n <button\n type=\"button\"\n className=\"nav-btn\"\n onClick={() => setViewDate(addMonths(viewDate, 1))}\n aria-label=\"Next month\"\n >\n <ChevronRightIcon />\n </button>\n </div>\n\n {viewMode === 'days' ? (\n <>\n <div className=\"day-names\">\n {dayNames.map((dayName) => (\n <span key={dayName} className=\"day-name\">\n {dayName}\n </span>\n ))}\n </div>\n\n <div className=\"day-grid\">\n {calendarDays.map(({date, currentMonth}, index) => {\n const isSelected = selectedDate ? isSameDay(date, selectedDate) : false\n const isToday = isSameDay(date, today)\n const disabledDay = isDisabled(date)\n\n return (\n <button\n key={`${date.toISOString()}-${index}`}\n type=\"button\"\n className={cn(\n 'day',\n !currentMonth && 'other-month',\n isToday && 'today',\n isSelected && 'selected',\n disabledDay && 'disabled'\n )}\n onClick={() => handleSelectDate(date)}\n disabled={disabledDay}\n tabIndex={-1}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n </>\n ) : (\n <div className=\"month-grid\">\n {monthNames.map((monthName, index) => (\n <button\n key={monthName}\n type=\"button\"\n className={cn('month-cell', viewDate.getMonth() === index && 'selected')}\n onClick={() => {\n setViewDate(new Date(viewDate.getFullYear(), index, 1))\n setViewMode('days')\n }}\n >\n {monthName.slice(0, 3)}\n </button>\n ))}\n </div>\n )}\n\n {showTodayButton && (\n <div className=\"footer\">\n <button type=\"button\" className=\"today-btn\" 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\n className={cn(\n 'date-picker',\n ...getAppearanceClassNames({fcolor}),\n fullWidth && 'full-width',\n className\n )}\n style={style}\n >\n {label && <label className={cn('label', hasError && 'error', required && 'required')}>{label}</label>}\n {renderCalendar()}\n </div>\n )\n }\n\n return (\n <div\n className={cn('date-picker', ...getAppearanceClassNames({fcolor}), fullWidth && 'full-width', className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn('label', open && 'focused', hasError && 'error', required && 'required')}\n >\n {label}\n </label>\n )}\n\n <div\n ref={triggerRef}\n className={cn('trigger', variant, size, open && 'focused', hasError && 'error', disabled && 'disabled')}\n onClick={() => !disabled && !readOnly && setOpen(true)}\n >\n <span className=\"icon\">{calendarIcon}</span>\n <input\n type=\"text\"\n className=\"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=\"clear-btn\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear date\"\n >\n <ClearIcon />\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 className={'date-picker-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=\"bottom-row\">\n {errorText ? (\n <span className=\"error-text\" role=\"alert\">\n {errorText}\n </span>\n ) : (\n <span className=\"helper-text\">{helperText}</span>\n )}\n </div>\n )}\n </div>\n )\n}\n","import {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {Popover} from '../../primitives/Popover'\nimport {cn} from '../../../utils/cn'\nimport {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {\n addMonths,\n daysInMonth,\n firstDayOfMonth,\n formatDate,\n getDayNames,\n getMonthNames,\n isDateInRange,\n isSameDay,\n stripTime,\n} from '../../../utils/dateUtils'\nimport type {DateRangePickerProps, DateRangePreset} from './DateRangePicker.types'\nimport './DateRangePicker.css'\n\nfunction toDate(value: Date | string | null | undefined): Date | null {\n if (!value) return null\n if (value instanceof Date) return stripTime(value)\n const date = new Date(value)\n return isNaN(date.getTime()) ? null : stripTime(date)\n}\n\nfunction sortRange(start: Date, end: Date) {\n return start.getTime() <= end.getTime() ? {start, end} : {start: end, end: start}\n}\n\nfunction isBetween(date: Date, start: Date | null, end: Date | null) {\n if (!start || !end) return false\n const time = date.getTime()\n return time > start.getTime() && time < end.getTime()\n}\n\nfunction formatRangeLabel(start: Date | null, end: Date | null, format: string) {\n if (start && end) {\n return `${formatDate(start, format)} - ${formatDate(end, format)}`\n }\n\n if (start) {\n return `${formatDate(start, format)} - ...`\n }\n\n return ''\n}\n\nfunction startOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), 1)\n}\n\nfunction endOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0)\n}\n\nfunction getDefaultPresets(locale: 'pl' | 'en'): DateRangePreset[] {\n const today = stripTime(new Date())\n const lastSevenDays = new Date(today)\n lastSevenDays.setDate(today.getDate() - 6)\n const lastThirtyDays = new Date(today)\n lastThirtyDays.setDate(today.getDate() - 29)\n const previousMonthDate = new Date(today.getFullYear(), today.getMonth() - 1, 1)\n\n return [\n {\n label: locale === 'pl' ? 'Dzisiaj' : 'Today',\n value: {start: today, end: today},\n },\n {\n label: locale === 'pl' ? 'Ostatnie 7 dni' : 'Last 7 days',\n value: {start: lastSevenDays, end: today},\n },\n {\n label: locale === 'pl' ? 'Ostatnie 30 dni' : 'Last 30 days',\n value: {start: lastThirtyDays, end: today},\n },\n {\n label: locale === 'pl' ? 'Ten miesiąc' : 'This month',\n value: {start: startOfMonth(today), end: endOfMonth(today)},\n },\n {\n label: locale === 'pl' ? 'Poprzedni miesiąc' : 'Previous month',\n value: {start: startOfMonth(previousMonthDate), end: endOfMonth(previousMonthDate)},\n },\n ]\n}\n\nconst 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\nconst ChevronLeftIcon = () => (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M9.5 3.5L5 8L9.5 12.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\nconst ChevronRightIcon = () => (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path\n d=\"M6.5 3.5L11 8L6.5 12.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n)\n\nconst ClearIcon = () => (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M4 4L12 12M12 4L4 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n)\n\nfunction buildCalendarDays(viewDate: Date, firstDayOfWeek: 0 | 1) {\n const year = viewDate.getFullYear()\n const month = viewDate.getMonth()\n const totalDays = daysInMonth(year, month)\n let startDay = firstDayOfMonth(year, month)\n\n if (firstDayOfWeek === 1) {\n startDay = startDay === 0 ? 6 : startDay - 1\n }\n\n const days = [] as Array<{date: Date; currentMonth: boolean}>\n\n const previousMonth = month === 0 ? 11 : month - 1\n const previousYear = month === 0 ? year - 1 : year\n const previousMonthDays = daysInMonth(previousYear, previousMonth)\n\n for (let index = startDay - 1; index >= 0; index -= 1) {\n days.push({date: new Date(previousYear, previousMonth, previousMonthDays - index), currentMonth: false})\n }\n\n for (let day = 1; day <= totalDays; day += 1) {\n days.push({date: new Date(year, month, day), currentMonth: true})\n }\n\n const remaining = 42 - days.length\n const nextMonth = month === 11 ? 0 : month + 1\n const nextYear = month === 11 ? year + 1 : year\n\n for (let day = 1; day <= remaining; day += 1) {\n days.push({date: new Date(nextYear, nextMonth, day), currentMonth: false})\n }\n\n return days\n}\n\n// Render a single control for start and end date selection inside one calendar popover.\nexport function DateRangePicker({\n value,\n defaultValue,\n onChange,\n format = 'dd.MM.yyyy',\n locale = 'pl',\n min,\n max,\n disabledDates,\n placeholder = 'Select date range...',\n disabled = false,\n readOnly = false,\n name,\n id,\n variant = 'outlined',\n size = 'md',\n fcolor,\n label,\n helperText,\n errorText,\n error = false,\n required = false,\n clearable = false,\n inline = false,\n showTodayButton = true,\n presets = false,\n firstDayOfWeek = 1,\n fullWidth = false,\n allowSameDay = true,\n className,\n style,\n}: DateRangePickerProps) {\n const controlledRange = value\n ? {\n start: toDate(value.start),\n end: toDate(value.end),\n }\n : null\n const [internalRange, setInternalRange] = useState(() => ({\n start: toDate(defaultValue?.start),\n end: toDate(defaultValue?.end),\n }))\n const [hoveredDate, setHoveredDate] = useState<Date | null>(null)\n const [open, setOpen] = useState(false)\n const triggerRef = useRef<HTMLDivElement>(null)\n\n const selectedRange = controlledRange ?? internalRange\n const startDate = selectedRange.start\n const endDate = selectedRange.end\n const minDate = toDate(min)\n const maxDate = toDate(max)\n const hasError = error || !!errorText\n const dayNames = getDayNames(locale)\n const monthNames = getMonthNames(locale)\n const availablePresets = useMemo(() => {\n if (presets === true) {\n return getDefaultPresets(locale)\n }\n\n if (Array.isArray(presets)) {\n return presets\n }\n\n return []\n }, [locale, presets])\n\n const [viewDate, setViewDate] = useState(() => {\n const baseDate = startDate ?? new Date()\n return new Date(baseDate.getFullYear(), baseDate.getMonth(), 1)\n })\n\n useEffect(() => {\n if (!startDate) return\n setViewDate(new Date(startDate.getFullYear(), startDate.getMonth(), 1))\n }, [startDate])\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((disabledDate) => isSameDay(disabledDate, date))\n }\n if (typeof disabledDates === 'function') {\n return disabledDates(date)\n }\n return false\n },\n [disabledDates, maxDate, minDate]\n )\n\n const commitRange = useCallback(\n (nextRange: {start: Date | null; end: Date | null}) => {\n if (value === undefined) {\n setInternalRange(nextRange)\n }\n onChange?.(nextRange)\n },\n [onChange, value]\n )\n\n const handleDayClick = useCallback(\n (date: Date) => {\n if (isDisabled(date)) return\n\n if (!startDate || (startDate && endDate)) {\n commitRange({start: date, end: null})\n setHoveredDate(null)\n return\n }\n\n if (!allowSameDay && isSameDay(date, startDate)) {\n return\n }\n\n const orderedRange = sortRange(startDate, date)\n commitRange(orderedRange)\n setHoveredDate(null)\n\n if (!inline) {\n setOpen(false)\n }\n },\n [allowSameDay, commitRange, endDate, inline, isDisabled, startDate]\n )\n\n const handleClear = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation()\n commitRange({start: null, end: null})\n setHoveredDate(null)\n },\n [commitRange]\n )\n\n const handleToday = useCallback(() => {\n const today = stripTime(new Date())\n if (isDisabled(today)) return\n commitRange({start: today, end: today})\n setViewDate(new Date(today.getFullYear(), today.getMonth(), 1))\n setHoveredDate(null)\n if (!inline) {\n setOpen(false)\n }\n }, [commitRange, inline, isDisabled])\n\n const handlePresetClick = useCallback(\n (preset: DateRangePreset) => {\n const start = toDate(preset.value.start)\n const end = toDate(preset.value.end)\n\n if (!start || !end) {\n return\n }\n\n const orderedRange = sortRange(start, end)\n\n if (isDisabled(orderedRange.start) || isDisabled(orderedRange.end)) {\n return\n }\n\n commitRange(orderedRange)\n setViewDate(new Date(orderedRange.start.getFullYear(), orderedRange.start.getMonth(), 1))\n setHoveredDate(null)\n\n if (!inline) {\n setOpen(false)\n }\n },\n [commitRange, inline, isDisabled]\n )\n\n const previewEnd = startDate && !endDate ? hoveredDate : null\n const firstMonth = viewDate\n const secondMonth = addMonths(viewDate, 1)\n const today = stripTime(new Date())\n\n const displayValue = useMemo(() => formatRangeLabel(startDate, endDate, format), [endDate, format, startDate])\n\n const calendarMonths = useMemo(\n () =>\n [firstMonth, secondMonth].map((monthDate) => ({\n monthDate,\n days: buildCalendarDays(monthDate, firstDayOfWeek),\n })),\n [firstDayOfWeek, firstMonth, secondMonth]\n )\n\n const summaryText =\n startDate && endDate\n ? `${formatDate(startDate, format)} - ${formatDate(endDate, format)}`\n : startDate\n ? `${formatDate(startDate, format)} - ...`\n : placeholder\n\n const renderCalendar = () => (\n <div className=\"date-range-calendar\">\n <div className=\"calendar-top\">\n <div className=\"calendar-caption\">\n <span className=\"caption-title\">\n {monthNames[firstMonth.getMonth()]} {firstMonth.getFullYear()}\n </span>\n <span className=\"caption-subtitle\">Select start and end dates in one panel.</span>\n </div>\n <div className=\"nav-actions\">\n <button\n type=\"button\"\n className=\"nav-btn\"\n onClick={() => setViewDate(addMonths(viewDate, -1))}\n aria-label=\"Previous month\"\n >\n <ChevronLeftIcon />\n </button>\n <button\n type=\"button\"\n className=\"nav-btn\"\n onClick={() => setViewDate(addMonths(viewDate, 1))}\n aria-label=\"Next month\"\n >\n <ChevronRightIcon />\n </button>\n </div>\n </div>\n\n {availablePresets.length > 0 && (\n <div className=\"presets\">\n {availablePresets.map((preset) => (\n <button\n key={preset.label}\n type=\"button\"\n className=\"preset-btn\"\n onClick={() => handlePresetClick(preset)}\n >\n {preset.label}\n </button>\n ))}\n </div>\n )}\n\n <div className=\"months\">\n {calendarMonths.map(({monthDate, days}) => (\n <div key={monthDate.toISOString()} className=\"month-panel\">\n <div className=\"month-title\">\n {monthNames[monthDate.getMonth()]} {monthDate.getFullYear()}\n </div>\n <div className=\"day-names\">\n {dayNames.map((dayName) => (\n <span key={`${monthDate.toISOString()}-${dayName}`} className=\"day-name\">\n {dayName}\n </span>\n ))}\n </div>\n <div className=\"day-grid\">\n {days.map(({date, currentMonth}, index) => {\n const disabledDay = isDisabled(date)\n const selectedStart = startDate ? isSameDay(date, startDate) : false\n const selectedEnd = endDate ? isSameDay(date, endDate) : false\n const inRange = isBetween(date, startDate, endDate)\n const previewRangeData =\n !endDate && startDate && previewEnd ? sortRange(startDate, previewEnd) : null\n const previewRange = previewRangeData\n ? isBetween(date, previewRangeData.start, previewRangeData.end)\n : false\n const previewEdge = previewRangeData\n ? isSameDay(date, previewRangeData.start) || isSameDay(date, previewRangeData.end)\n : false\n\n return (\n <button\n key={`${monthDate.toISOString()}-${index}`}\n type=\"button\"\n className={cn(\n 'day',\n !currentMonth && 'other-month',\n isSameDay(date, today) && 'today',\n selectedStart && 'range-start selected',\n selectedEnd && 'range-end selected',\n inRange && 'in-range',\n previewRange && !previewEdge && 'preview-range',\n disabledDay && 'disabled'\n )}\n onClick={() => handleDayClick(date)}\n onMouseEnter={() => startDate && !endDate && setHoveredDate(date)}\n onFocus={() => startDate && !endDate && setHoveredDate(date)}\n disabled={disabledDay}\n tabIndex={-1}\n >\n {date.getDate()}\n </button>\n )\n })}\n </div>\n </div>\n ))}\n </div>\n\n <div className=\"footer\">\n <span className=\"summary\">{summaryText}</span>\n <div className=\"footer-actions\">\n {clearable && (startDate || endDate) && (\n <button\n type=\"button\"\n className=\"footer-btn\"\n onClick={(event) => {\n event.preventDefault()\n commitRange({start: null, end: null})\n setHoveredDate(null)\n }}\n >\n Clear\n </button>\n )}\n {showTodayButton && (\n <button type=\"button\" className=\"footer-btn\" onClick={handleToday}>\n Today\n </button>\n )}\n </div>\n </div>\n </div>\n )\n\n if (inline) {\n return (\n <div\n className={cn(\n 'date-range-picker',\n ...getAppearanceClassNames({fcolor}),\n fullWidth && 'full-width',\n className\n )}\n style={style}\n >\n {label && <label className={cn('label', hasError && 'error', required && 'required')}>{label}</label>}\n {renderCalendar()}\n </div>\n )\n }\n\n return (\n <div\n className={cn(\n 'date-range-picker',\n ...getAppearanceClassNames({fcolor}),\n fullWidth && 'full-width',\n className\n )}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn('label', open && 'focused', hasError && 'error', required && 'required')}\n >\n {label}\n </label>\n )}\n\n <div\n ref={triggerRef}\n className={cn('trigger', variant, size, open && 'focused', hasError && 'error', disabled && 'disabled')}\n onClick={() => !disabled && !readOnly && setOpen(true)}\n >\n <span className=\"icon\">\n <CalendarIcon />\n </span>\n <input\n type=\"text\"\n className=\"input\"\n value={displayValue}\n placeholder={placeholder}\n disabled={disabled}\n readOnly\n id={id}\n aria-invalid={hasError || undefined}\n />\n {clearable && (startDate || endDate) && !disabled && (\n <button\n type=\"button\"\n className=\"clear-btn\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear date range\"\n >\n <ClearIcon />\n </button>\n )}\n </div>\n\n {name && startDate && endDate && (\n <input\n type=\"hidden\"\n name={name}\n value={`${startDate.toISOString().split('T')[0]}:${endDate.toISOString().split('T')[0]}`}\n />\n )}\n\n <Popover\n className={'date-range-picker-popover'}\n open={open}\n anchorRef={triggerRef}\n onClose={() => {\n setOpen(false)\n setHoveredDate(null)\n }}\n placement=\"bottom-start\"\n >\n {renderCalendar()}\n </Popover>\n\n {(errorText || helperText) && (\n <div className=\"bottom-row\">\n {errorText ? (\n <span className=\"error-text\" role=\"alert\">\n {errorText}\n </span>\n ) : (\n <span className=\"helper-text\">{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 {getAppearanceClassNames} from '../../../utils/appearanceProps'\nimport {formatTime, parseTime} from '../../../utils/dateUtils'\nimport './TimePicker.css'\n\n// Compare time tuples so min/max checks can stay string-format agnostic.\nfunction compareTimeParts(\n left: {hours: number; minutes: number; seconds: number},\n right: {hours: number; minutes: number; seconds: number}\n): number {\n if (left.hours !== right.hours) return left.hours - right.hours\n if (left.minutes !== right.minutes) return left.minutes - right.minutes\n return left.seconds - right.seconds\n}\n\n// Check whether a time falls within optional min and max boundaries.\nfunction isTimeInRange(\n value: {hours: number; minutes: number; seconds: number},\n min?: {hours: number; minutes: number; seconds: number} | null,\n max?: {hours: number; minutes: number; seconds: number} | null\n): boolean {\n if (min && compareTimeParts(value, min) < 0) return false\n if (max && compareTimeParts(value, max) > 0) return false\n return true\n}\n\nconst ClearIcon = () => (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <path d=\"M4 4L12 12M12 4L4 12\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" />\n </svg>\n)\n\n// Render a time input backed by scrollable hour, minute and second columns.\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 fcolor,\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 const minTime = parseTime(min ?? '')\n const maxTime = parseTime(max ?? '')\n\n // Build the visible hour list based on the selected time format.\n const hours = useMemo(() => {\n const items: number[] = []\n const maxHour = format === '12h' ? 12 : 23\n const startHour = format === '12h' ? 1 : 0\n for (let index = startHour; index <= maxHour; index++) {\n items.push(index)\n }\n return items\n }, [format])\n\n // Build the minute list using the configured step size.\n const minutes = useMemo(() => {\n const items: number[] = []\n for (let index = 0; index < 60; index += minuteStep) {\n items.push(index)\n }\n return items\n }, [minuteStep])\n\n // Build the seconds list only when the picker exposes seconds.\n const seconds = useMemo(() => {\n if (!showSeconds) return []\n const items: number[] = []\n for (let index = 0; index < 60; index++) {\n items.push(index)\n }\n return items\n }, [showSeconds])\n\n // Reuse range validation for list rendering and direct text input.\n const isSelectable = useCallback(\n (hoursValue: number, minutesValue: number, secondsValue: number = 0) => {\n return isTimeInRange({hours: hoursValue, minutes: minutesValue, seconds: secondsValue}, minTime, maxTime)\n },\n [maxTime, minTime]\n )\n\n // Apply the selected time and keep uncontrolled usage in sync.\n const handleSelect = useCallback(\n (hoursValue: number, minutesValue: number, secondsValue: number = 0) => {\n if (!isSelectable(hoursValue, minutesValue, secondsValue)) return\n const time = formatTime(hoursValue, minutesValue, secondsValue, showSeconds)\n if (value === undefined) setInternalValue(time)\n onChange?.(time)\n },\n [isSelectable, onChange, showSeconds, value]\n )\n\n const handleInputChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const raw = event.target.value\n if (value === undefined) setInternalValue(raw)\n },\n [value]\n )\n\n // Normalize manual input once the user leaves the field.\n const handleInputBlur = useCallback(() => {\n const nextValue = parseTime(currentValue)\n if (nextValue && isTimeInRange(nextValue, minTime, maxTime)) {\n const time = formatTime(nextValue.hours, nextValue.minutes, nextValue.seconds, showSeconds)\n if (value === undefined) setInternalValue(time)\n onChange?.(time)\n }\n }, [currentValue, maxTime, minTime, onChange, showSeconds, value])\n\n // Clear the current time without closing the trigger first.\n const handleClear = useCallback(\n (event: React.MouseEvent) => {\n event.stopPropagation()\n if (value === undefined) setInternalValue('')\n onChange?.('')\n },\n [onChange, value]\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 return (\n <div\n className={cn('time-picker', ...getAppearanceClassNames({fcolor}), fullWidth && 'full-width', className)}\n style={style}\n >\n {label && (\n <label\n htmlFor={id}\n className={cn('label', open && 'focused', hasError && 'error', required && 'required')}\n >\n {label}\n </label>\n )}\n\n <div\n ref={triggerRef}\n className={cn('trigger', variant, size, open && 'focused', hasError && 'error', disabled && 'disabled')}\n onClick={() => !disabled && !readOnly && setOpen(true)}\n >\n <span className=\"icon\">{clockIcon}</span>\n <input\n type=\"text\"\n className=\"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\n type=\"button\"\n className=\"clear-btn\"\n onClick={handleClear}\n tabIndex={-1}\n aria-label=\"Clear time\"\n >\n <ClearIcon />\n </button>\n )}\n </div>\n\n {name && <input type=\"hidden\" name={name} value={currentValue} />}\n\n <Popover open={open} anchorRef={triggerRef} onClose={() => setOpen(false)} placement=\"bottom-start\">\n <div className=\"columns\">\n <TimeColumn\n items={hours}\n selected={parsed?.hours}\n onSelect={(hoursValue) => handleSelect(hoursValue, parsed?.minutes ?? 0, parsed?.seconds ?? 0)}\n isDisabled={(hoursValue) =>\n !isSelectable(hoursValue, parsed?.minutes ?? 0, parsed?.seconds ?? 0)\n }\n label=\"Hr\"\n />\n <TimeColumn\n items={minutes}\n selected={parsed?.minutes}\n onSelect={(minutesValue) =>\n handleSelect(parsed?.hours ?? 0, minutesValue, parsed?.seconds ?? 0)\n }\n isDisabled={(minutesValue) =>\n !isSelectable(parsed?.hours ?? 0, minutesValue, parsed?.seconds ?? 0)\n }\n label=\"Min\"\n />\n {showSeconds && (\n <TimeColumn\n items={seconds}\n selected={parsed?.seconds}\n onSelect={(secondsValue) =>\n handleSelect(parsed?.hours ?? 0, parsed?.minutes ?? 0, secondsValue)\n }\n isDisabled={(secondsValue) =>\n !isSelectable(parsed?.hours ?? 0, parsed?.minutes ?? 0, secondsValue)\n }\n label=\"Sec\"\n />\n )}\n </div>\n </Popover>\n\n {(errorText || helperText) && (\n <div className=\"bottom-row\">\n {errorText ? (\n <span className=\"error-text\" role=\"alert\">\n {errorText}\n </span>\n ) : (\n <span className=\"helper-text\">{helperText}</span>\n )}\n </div>\n )}\n </div>\n )\n}\n\n// Render one scrollable time column and keep the selected value centered.\nfunction TimeColumn({\n items,\n selected,\n onSelect,\n isDisabled,\n label,\n}: {\n items: number[]\n selected?: number\n onSelect: (value: number) => void\n isDisabled?: (value: number) => boolean\n label: string\n}) {\n const listRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (selected === undefined || !listRef.current) return\n const element = listRef.current.querySelector(`[data-value=\"${selected}\"]`) as HTMLElement | null\n if (element) {\n element.scrollIntoView({block: 'center', behavior: 'instant'})\n }\n }, [selected])\n\n const pad = (value: number) => value.toString().padStart(2, '0')\n\n return (\n <div className=\"column\">\n <div className=\"column-label\">{label}</div>\n <div ref={listRef} className=\"column-list\">\n {items.map((item) => {\n const disabled = isDisabled?.(item) ?? false\n return (\n <button\n key={item}\n type=\"button\"\n data-value={item}\n className={cn('column-item', item === selected && 'selected', disabled && 'disabled')}\n onClick={() => onSelect(item)}\n disabled={disabled}\n >\n {pad(item)}\n </button>\n )\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\n// Read the nearest form context to integrate custom fields with shared state.\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\n// Coordinate form values, validation state and submit helpers through context.\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 // Track mounted fields so validation stays aligned with active inputs.\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 // Run required and custom validators without mutating visible error state yet.\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 // Persist the latest validation result for a single field.\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 // Validate every registered field before submit.\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 // Update field values and trigger onChange or validation according to mode.\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((name: string, error: string) => {\n setErrors((prev) => ({...prev, [name]: error}))\n }, [])\n\n // Mark fields as touched so blur validation can start surfacing errors.\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 // Guard submit flow with validation and a single in-flight submission state.\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 // Memoize the public form context to limit downstream re-renders.\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 [\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 )\n\n return (\n <FormContext.Provider value={ctx}>\n <form onSubmit={handleSubmit} noValidate={noValidate} className={className} style={style}>\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\n// Connect a field name to the nearest form context and expose field-level helpers.\nexport function useFormField(name: string, options?: UseFormFieldOptions): UseFormFieldReturn {\n const ctx = useFormContext()\n\n // Register the field definition so the form can validate and reset it centrally.\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 // Forward value updates into the form state.\n const onChange = useCallback(\n (val: unknown) => {\n ctx?.setFieldValue(name, val)\n },\n [ctx, name]\n )\n\n // Mark the field as touched when the control loses focus.\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","mode","scope","children","ref","useRef","safeTheme","useMemo","useEffect","target","key","value","varName","jsx","useTheme","useContext","cn","classes","OK_RESULT","keepLettersAndDigits","formatPlPostCode","digits","formatUsPostCode","formatFixedDigits","maxLength","formatCaPostCode","char","index","formatGbPostCode","clean","formatNlPostCode","postCodeRules","postCodeCountries","countryCode","label","getPostCodeRule","formatPostCode","rule","validatePostCode","formatted","creditCardBrands","fallbackBrand","stripCardNumber","detectCardBrand","formatCardNumber","trimmedDigits","parts","offset","length","passesLuhn","sum","shouldDouble","digit","validateCardNumber","ok","fail","error","validateRequired","validateMinLength","min","validateMaxLength","max","validatePattern","pattern","message","validateRange","num","EMAIL_RE","validateEmail","PHONE_LENGTH","validatePhone","expected","IBAN_LENGTHS","mod97","numStr","remainder","i","validateIBAN","iban","expectedLength","ch","NIP_WEIGHTS","validateNIP","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","pos","len","formatNIP","formatCurrency","decimalSeparator","thousandSeparator","precision","intPart","decPart","isNegative","parseCurrencyToNumber","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","appendRipple","layer","host","rect","size","radius","wave","x","y","useInteractionEffect","effect","disabled","centered","color","layerRef","enabled","triggerEffect","handlePointerDown","event","Portal","container","createPortal","Popover","open","anchorRef","placement","matchWidth","className","style","popoverRef","position","setPosition","flipped","setFlipped","updatePosition","anchor","popover","viewport","isTop","isEnd","spaceBelow","spaceAbove","shouldFlip","showOnTop","top","left","handleKey","handleClick","getLayoutUtilityClassNames","spacing","padding","fsize","fcolor","mt","mb","ml","mr","mx","my","pt","pb","pl","pr","px","py","fullWidth","getLayoutUtilityStyles","Container","padded","rest","utilityStyle","getAppearanceClassNames","MHeader","bordered","sticky","tone","MFooter","MNavbar","justify","align","wrap","MLink","forwardRef","component","to","underline","current","block","href","onClick","Component","MNavs","items","orientation","gap","item","_b","MTabsTrigger","isActive","tabId","panelId","clickEffect","rippleColor","effectClassName","effectLayer","jsxs","MTabs","defaultValue","onValueChange","variant","showPanels","panelClassName","fallbackValue","internalValue","setInternalValue","activeValue","activeItem","baseId","useId","selectTab","nextValue","handleKeyDown","enabledItems","currentIndex","nextKeys","previousKeys","nextItem","Section","as","Stack","Inline","Grid","columns","minItemWidth","gapClassName","MGrid","type","span","sm","md","lg","xl","baseSpan","childArray","Children","autoColumns","hasDesktopSizing","child","isValidElement","_c","MGridItem","Surface","outlined","Divider","Button","rounded","iconOnly","loading","startIcon","endIcon","onPointerDown","isDisabled","Checkbox","checked","defaultChecked","indeterminate","name","id","labelPosition","errorText","onChange","internalRef","inputRef","hasError","RadioContext","useRadioGroup","Radio","group","resolvedName","resolvedDisabled","resolvedSize","resolvedColor","resolvedFontColor","resolvedChecked","handleChange","RadioGroup","direction","currentValue","val","ctx","Toggle","Card","interactive","CardHeader","CardBody","CardFooter","Badge","Alert","title","Table","TableRoot","TableHead","TableBody","TableRow","TableHeadCell","TableCell","Collapsible","defaultOpen","controlledOpen","onToggle","internalOpen","setInternalOpen","handleToggle","nextOpen","chevronIcon","Spinner","inlineStyle","Text","weight","Loader","center","minHeight","getFallbackInitials","initials","Avatar","src","alt","shape","backgroundColor","fallbackInitials","isInteractive","Modal","description","footer","closeOnBackdrop","closeOnEscape","previousOverflow","Heading","level","createElement","Code","List","ordered","ListItem","normalizeDate","parsed","getDateKey","getEventDate","addDays","amount","nextDate","startOfWeek","weekStartsOn","safeDate","delta","sortEventsByTime","events","leftEvent","rightEvent","leftTime","rightTime","buildMonthGrid","monthStart","gridStart","_","getStatusColor","status","getCalendarCopy","formatBoardDate","formatWeekRange","startDate","endDate","formatter","formatEventTime","copy","getTimelineSlotState","hour","now","slotStart","slotEnd","buildDayMarkers","applyCalendarFilters","filters","activeFilterIds","activeFilters","filterOption","getViewTitle","view","getViewSubtitle","CalendarDetailsContent","timelineStartHour","timelineEndHour","showTimeline","emptyStateText","renderEventItem","CalendarEventList","CalendarTimeline","CalendarFilters","CalendarWeekView","days","eventsByDay","selectedDate","activeDate","onDayInteract","onDayHover","onDayLeave","dayBadge","renderDayCell","todayKey","dayKey","dayEvents","badge","markers","isSelected","context","CalendarDayCell","isToday","isOutsideMonth","Fragment","CalendarEventItem","currentDate","statusColor","startHour","endHour","matchingEvents","slotState","CalendarEventPopover","onPointerEnter","onPointerLeave","CalendarBoard","defaultMonth","onMonthChange","defaultView","views","onViewChange","defaultSelectedDate","onDayClick","detailsTrigger","detailsMode","defaultActiveFilters","onActiveFiltersChange","today","internalMonth","setInternalMonth","internalView","setInternalView","internalSelectedDate","setInternalSelectedDate","internalActiveFilters","setInternalActiveFilters","setActiveDate","detailsOpen","setDetailsOpen","isCompact","setIsCompact","activeAnchorRef","closeTimeoutRef","isMonthControlled","visibleMonth","currentView","resolvedSelectedDate","resolvedActiveFilters","mediaQuery","updateCompactState","filteredEvents","nextMap","eventDate","currentEvents","calendarDays","weekStart","effectiveDetailsMode","activeEvents","canShowMonthView","canShowWeekView","setMonthAndNotify","nextMonth","normalizedMonth","navigateBy","nextAnchor","setViewAndNotify","nextView","setSelectedDateAndNotify","normalizedDate","clearCloseTimeout","scheduleClose","openDetails","handleDayInteract","handleDayHover","handleFilterToggle","filterId","nextFilters","dayNameBase","normalizeStringValue","useControllableString","isControlled","setCurrentValue","Input","placeholder","readOnly","required","autoFocus","autoComplete","inputMode","helperText","clearable","success","showCharCount","onFocus","onBlur","onClear","inputClassName","labelClassName","focused","setFocused","hasContent","handleFocus","handleBlur","handleClear","input","containerClasses","Textarea","rows","autoResize","minRows","maxRows","textareaClassName","textareaRef","resolvedRef","adjustHeight","el","lineHeight","minH","maxH","newHeight","calcStrength","score","STRENGTH_LABELS","InputPassword","showToggle","showStrength","onStrengthChange","visible","setVisible","strength","toggleIcon","v","clampValue","roundToPrecision","factor","InputNumber","step","showStepper","allowNegative","intervalRef","updateValue","newVal","increment","startHold","stopHold","filtered","clamped","InputSearch","debounceMs","onSearch","debouncedSearch","InputEmail","validateOnBlur","validateOnChange","showValidIcon","onValidationChange","validation","setValidation","touched","setTouched","runValidation","isError","resolvedErrorText","isSuccess","InputPhone","showCountryCode","formatOnChange","prefix","phoneIcon","InputName","autoCapitalize","allowNumbers","allowSpecialChars","minWords","filterValue","raw","words","InputIBAN","VALIDATORS","MAX_LENGTHS","PLACEHOLDERS","InputTaxId","taxIdType","idIcon","validIcon","InputCurrency","currency","currencySymbol","currencyPosition","symbol","hasDecimal","fixed","symbolEl","CardBrandBadge","brand","InputCreditCard","showBrandIcon","onCardBrandChange","formattedValue","nextBrand","isAddonObject","slot","renderSlot","addon","normalizeSlots","slots","InputGroup","prepend","append","prependSlots","appendSlots","InputPostCode","country","defaultCountry","selectableCountry","onCountryChange","internalCountry","setInternalCountry","currentCountry","currentRule","nextCountry","handleCountryChange","option","Select","multiple","searchable","maxHeight","noOptionsText","renderOption","renderValue","setOpen","search","setSearch","triggerRef","selectedValues","selectedOptions","o","filteredOptions","lower","groupedOptions","opt","flatFiltered","handleSelect","arr","handleTriggerClick","empty","displayValue","opts","flatIndex","defaultGetLabel","defaultGetValue","defaultFilter","getLabel","Autocomplete","getOptionLabel","getOptionValue","filterOptions","freeSolo","onInputChange","loadingText","renderTags","inputValue","setInputValue","wrapperRef","debouncedInputChange","handleInputChange","existIdx","handleRemoveTag","navKeyDown","toDate","ChevronLeftIcon","ChevronRightIcon","ClearIcon","DatePicker","disabledDates","inline","showTodayButton","firstDayOfWeek","internalDate","setInternalDate","inputText","setInputText","viewDate","setViewDate","viewMode","setViewMode","minDate","maxDate","displayText","dayNames","monthNames","disabledDate","handleSelectDate","handleInputBlur","handleToday","totalDays","startDay","prevMonth","prevYear","prevDays","remaining","nextYear","renderCalendar","dayName","currentMonth","disabledDay","monthName","calendarIcon","sortRange","start","end","isBetween","time","formatRangeLabel","startOfMonth","endOfMonth","getDefaultPresets","lastSevenDays","lastThirtyDays","previousMonthDate","CalendarIcon","buildCalendarDays","previousMonth","previousYear","previousMonthDays","DateRangePicker","presets","allowSameDay","controlledRange","internalRange","setInternalRange","hoveredDate","setHoveredDate","selectedRange","availablePresets","baseDate","commitRange","nextRange","handleDayClick","orderedRange","handlePresetClick","preset","previewEnd","firstMonth","secondMonth","calendarMonths","monthDate","summaryText","selectedStart","selectedEnd","inRange","previewRangeData","previewRange","previewEdge","compareTimeParts","right","isTimeInRange","TimePicker","minuteStep","minTime","maxTime","maxHour","isSelectable","hoursValue","minutesValue","secondsValue","clockIcon","TimeColumn","selected","listRef","element","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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"}