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