@hotelcard/ui 1.0.0-rc.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/README.md +74 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +1799 -0
- package/dist/index.js +1624 -0
- package/dist/index.js.map +1 -0
- package/dist/tokens.css +543 -0
- package/package.json +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/locales/index.ts","../src/context/UIContext.tsx","../src/hooks/useDebounce.ts","../src/hooks/useResponsive.ts","../src/components/Button/Button.tsx","../src/components/Badge/Badge.tsx","../src/components/Block/Block.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Chip/Chip.tsx","../src/components/Divider/Divider.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Input/variants/DefaultInput.tsx","../src/components/Input/variants/PhoneInput.tsx","../src/components/Input/variants/DropdownInput.tsx","../src/components/Input/Input.tsx","../src/components/Pin/Pin.tsx","../src/components/RadioButton/RadioButton.tsx","../src/components/Rating/Rating.tsx","../src/components/Card/Card.tsx","../src/components/HotelCardSkeleton/HotelCardSkeleton.tsx","../src/index.ts"],"sourcesContent":["import de from './de.json';\nimport en from './en.json';\nimport fr from './fr.json';\nimport it from './it.json';\n\nexport const translations = { de, en, fr, it } as const;\n\nexport type Locale = keyof typeof translations;\nexport type TranslationKeys = typeof en;\n","import React, { createContext, useContext, ReactNode, useMemo } from 'react';\nimport { translations, type Locale } from '../locales';\n\n/** Translation options for interpolation */\nexport interface TranslateOptions {\n [key: string]: string | number;\n}\n\n/** Translation function type */\nexport type TranslateFunction = (key: string, optionsOrFallback?: TranslateOptions | string, fallback?: string) => string;\n\nexport interface UIContextValue {\n /** Current locale (e.g., 'de', 'en', 'fr', 'it') */\n locale: Locale;\n /** Currency code (e.g., 'CHF', 'EUR') */\n currency: string;\n /** Whether the app is running on desktop (default: false for mobile-first) */\n isDesktop: boolean;\n /** Base URL for API calls (e.g., 'https://hotelcard.ch') */\n apiBaseUrl: string;\n /** Translation function - looks up keys from internal translations */\n t: TranslateFunction;\n}\n\n/**\n * Get nested value from object using dot notation\n * e.g., getNestedValue({ a: { b: 'value' } }, 'a.b') => 'value'\n */\nfunction getNestedValue(obj: Record<string, unknown>, path: string): string | undefined {\n const keys = path.split('.');\n let current: unknown = obj;\n\n for (const key of keys) {\n if (current === null || current === undefined || typeof current !== 'object') {\n return undefined;\n }\n current = (current as Record<string, unknown>)[key];\n }\n\n return typeof current === 'string' ? current : undefined;\n}\n\n/**\n * Interpolate variables in a translation string\n * Replaces {{variable}} with the value from options\n */\nfunction interpolate(str: string, options: TranslateOptions): string {\n return str.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => {\n const value = options[key];\n return value !== undefined ? String(value) : `{{${key}}}`;\n });\n}\n\n/**\n * Create translation function for a given locale\n */\nfunction createTranslateFunction(locale: Locale): TranslateFunction {\n const localeTranslations = translations[locale] || translations.en;\n\n return (key: string, optionsOrFallback?: TranslateOptions | string, fallback?: string): string => {\n const value = getNestedValue(localeTranslations as Record<string, unknown>, key);\n\n // Determine if second param is options object or fallback string\n const isOptions = optionsOrFallback && typeof optionsOrFallback === 'object';\n const options = isOptions ? optionsOrFallback : undefined;\n const fallbackStr = isOptions ? fallback : (optionsOrFallback as string | undefined);\n\n const result = value ?? fallbackStr ?? key;\n\n // Apply interpolation if options provided\n return options ? interpolate(result, options) : result;\n };\n}\n\nconst defaultT = createTranslateFunction('de');\n\nconst defaultValue: UIContextValue = {\n locale: 'de',\n currency: 'CHF',\n isDesktop: false,\n apiBaseUrl: '',\n t: defaultT,\n};\n\nconst UIContext = createContext<UIContextValue>(defaultValue);\n\nexport interface HotelCardUIProviderProps {\n /** Current locale */\n locale?: Locale;\n /** Currency code */\n currency?: string;\n /** Whether running on desktop */\n isDesktop?: boolean;\n /** Base URL for API calls (e.g., 'https://hotelcard.ch') */\n apiBaseUrl?: string;\n /** Optional custom translation function (overrides internal translations) */\n t?: TranslateFunction;\n children: ReactNode;\n}\n\n/**\n * HotelCardUIProvider - Configure shared UI components\n *\n * Wrap your app with this provider to configure locale, currency, and responsive mode\n * for all @hotelcard/ui components.\n *\n * @example\n * ```tsx\n * import { HotelCardUIProvider } from '@hotelcard/ui';\n *\n * <HotelCardUIProvider locale=\"de\" currency=\"CHF\">\n * <App />\n * </HotelCardUIProvider>\n * ```\n */\nexport const HotelCardUIProvider: React.FC<HotelCardUIProviderProps> = ({\n locale = 'de',\n currency = 'CHF',\n isDesktop = false,\n apiBaseUrl = '',\n t: customT,\n children,\n}) => {\n // Create translation function based on locale, or use custom one\n const t = useMemo(\n () => customT ?? createTranslateFunction(locale),\n [locale, customT]\n );\n\n const value: UIContextValue = useMemo(\n () => ({ locale, currency, isDesktop, apiBaseUrl, t }),\n [locale, currency, isDesktop, apiBaseUrl, t]\n );\n\n return (\n <UIContext.Provider value={value}>\n {children}\n </UIContext.Provider>\n );\n};\n\n/**\n * Hook to access UI context values\n * Returns locale, currency, and isDesktop\n */\nexport const useUIContext = (): UIContextValue => {\n return useContext(UIContext);\n};\n\nexport { UIContext };\n","// hooks/useDebounce.ts\nimport { useCallback, useRef } from 'react';\n\nexport function useDebounce<T extends (...args: any[]) => any>(\n callback: T,\n delay: number\n): (...args: Parameters<T>) => void {\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n return useCallback((...args: Parameters<T>) => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n callback(...args);\n }, delay);\n }, [callback, delay]);\n}\n","/**\n * Hook for detecting responsive breakpoints\n *\n * Automatically detects screen size and updates when window resizes.\n * Provides boolean flags for easy conditional rendering.\n *\n * ⚠️ IMPORTANT: Only use this hook for LOGIC, NOT styling!\n * - ✅ Good: Show/hide modals, enable/disable carousel swipe, change JS behavior\n * - ❌ Bad: Padding, margins, font sizes, display properties\n * - For styling: Use CSS with design tokens (tokens automatically handle responsive)\n *\n * Breakpoints align with Figma tokens:\n * - Mobile: 0-767px (02-dimensions-semantic/Mobile)\n * - Tablet: 768-1023px (02-dimensions-semantic/Tablet)\n * - Desktop: 1024px+ (02-dimensions-semantic/Desktop)\n */\n\nimport { useState, useEffect } from 'react';\n\n/**\n * Responsive breakpoint constants\n * These match the design token breakpoints in tokens.json\n */\nexport const BREAKPOINTS = {\n mobile: 767, // 0-767px: Mobile devices\n tablet: 1023, // 768-1023px: Tablets and small laptops\n desktop: 1024, // 1024px+: Desktop and large screens\n} as const;\n\nexport interface ResponsiveState {\n /** True when screen width >= 1024px (desktop only, excludes tablet) */\n isDesktop: boolean;\n /** True when screen width < 768px */\n isMobile: boolean;\n /** True when screen width is between 768px and 1023px */\n isTablet: boolean;\n /** True when screen width >= 1024px (same as isDesktop) */\n isLargeDesktop: boolean;\n /** Current window width in pixels */\n width: number;\n}\n\nexport const useResponsive = (): ResponsiveState => {\n // Always start with 1024 (desktop) for SSR consistency.\n // This prevents hydration mismatches: server renders desktop,\n // first client render also renders desktop, then useEffect\n // corrects to the real width after mount.\n const [width, setWidth] = useState<number>(1024);\n\n useEffect(() => {\n // Immediately set real width on mount (before paint via sync update)\n setWidth(window.innerWidth);\n\n const handleResize = () => {\n setWidth(window.innerWidth);\n };\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n // Calculate breakpoint flags based on current width\n return {\n isDesktop: width >= 1024, // Only true for desktop (>= 1024px)\n isMobile: width < 768, // Mobile devices (< 768px)\n isTablet: width >= 768 && width < 1024, // Tablet range (768-1023px)\n isLargeDesktop: width >= 1024, // Same as isDesktop\n width,\n };\n};\n","import { forwardRef } from 'react';\nimport { ButtonProps } from \"./Button.types\";\nimport styles from './Button.module.css';\n\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(({\n variant = 'primary',\n size = 'medium',\n leftIcon,\n rightIcon,\n children,\n className = '',\n disabled,\n iconOnly = false,\n style,\n ...props\n}, ref) => {\n\n // Build className based on variant, size, and state\n const getButtonClasses = () => {\n const classes: string[] = [styles.button];\n\n // Link variant\n if (variant === 'link') {\n classes.push(styles.link);\n classes.push(styles[size]);\n return classes.filter(Boolean).join(' ');\n }\n\n // Icon-only variant\n if (iconOnly) {\n classes.push(styles.iconOnly);\n classes.push(styles[size]);\n classes.push(styles[variant]);\n return classes.filter(Boolean).join(' ');\n }\n\n // Standard button\n classes.push(styles.standard);\n classes.push(styles[size]);\n classes.push(styles[variant]);\n\n return classes.filter(Boolean).join(' ');\n };\n\n return (\n <button\n ref={ref}\n style={style}\n className={`${getButtonClasses()} ${className}`}\n disabled={disabled}\n {...props}\n >\n {iconOnly ? (\n children\n ) : (\n <>\n {leftIcon && (\n <span className={styles.iconWrapper}>\n {leftIcon}\n </span>\n )}\n <span className={styles.textWrapper}>{children}</span>\n {rightIcon && (\n <span className={styles.iconWrapper}>\n {rightIcon}\n </span>\n )}\n </>\n )}\n </button>\n );\n});\n\nButton.displayName = 'Button';\n\nexport { Button };\n","import React from 'react';\nimport { BadgeProps } from './Badge.types';\nimport styles from './Badge.module.css';\n\nconst Badge: React.FC<BadgeProps> = ({\n color = 'primary',\n size = 'large',\n style = 'heavy',\n icon = false,\n children,\n className = ''\n}) => {\n // Build color-style variant class name\n const colorStyleKey = `${color}${style.charAt(0).toUpperCase()}${style.slice(1)}`;\n\n // Build badge classes\n const badgeClasses = [\n styles.badge,\n styles[`badge--${size}`],\n styles[`badge--${colorStyleKey}`],\n className\n ].filter(Boolean).join(' ');\n\n // Build icon classes\n const iconClasses = [\n styles.icon,\n styles[`icon--${size}`]\n ].join(' ');\n\n // Build text classes\n const textClasses = [\n styles.text,\n size === 'large' && icon && styles['text--largeWithIcon']\n ].filter(Boolean).join(' ');\n\n return (\n <div className={badgeClasses}>\n {/* Icon placeholder - not implemented yet */}\n {icon && (\n <div className={iconClasses}>\n {/* Icon implementation would go here */}\n </div>\n )}\n\n <div className={textClasses}>\n {children}\n </div>\n </div>\n );\n};\n\nBadge.displayName = 'Badge';\n\nexport { Badge };","import { BlockProps } from './Block.types';\nimport styles from './Block.module.css';\n\nconst Block: React.FC<BlockProps> = ({\n variant = 'icon',\n visual,\n label,\n description,\n style = 'primary',\n onClick,\n showArrow = true,\n className = ''\n}) => {\n if (variant === 'icon') {\n // Icon Block variant\n const containerClasses = [\n styles.blockIcon,\n onClick && styles['blockIcon--clickable'],\n className\n ].filter(Boolean).join(' ');\n\n const iconContainerClass = style === 'primary'\n ? styles['iconContainer--primary']\n : styles['iconContainer--secondary'];\n\n return (\n <div\n className={containerClasses}\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n >\n <div className={iconContainerClass}>\n {visual}\n </div>\n <div className={styles.textContainer}>\n <div className={styles.iconLabel}>{label}</div>\n {description && <div className={styles.iconDescription}>{description}</div>}\n </div>\n </div>\n );\n }\n\n // Image Block variant\n const containerClasses = [\n styles.blockImage,\n onClick && styles['blockImage--clickable'],\n className\n ].filter(Boolean).join(' ');\n\n return (\n <div\n className={containerClasses}\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n >\n <div className={styles.imageContainer}>\n {visual}\n </div>\n <div className={styles.footer}>\n <span className={styles.imageLabel}>{label}</span>\n {showArrow && (\n <span className={styles.arrow}>→</span>\n )}\n </div>\n </div>\n );\n};\n\nBlock.displayName = 'Block';\n\nexport { Block };","import { useState } from 'react';\nimport { CheckboxProps } from './Checkbox.types';\nimport styles from './Checkbox.module.css';\n\nconst Checkbox: React.FC<CheckboxProps> = ({\n label,\n checked,\n defaultChecked = false,\n onChange,\n disabled = false,\n error = false,\n name,\n id,\n className,\n size = 'medium'\n}) => {\n const [localChecked, setLocalChecked] = useState(defaultChecked);\n const [isFocused, setIsFocused] = useState(false);\n\n const actualChecked = checked !== undefined ? checked : localChecked;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newChecked = e.target.checked;\n if (checked === undefined) {\n setLocalChecked(newChecked);\n }\n onChange?.(newChecked);\n };\n\n // Build container classes\n const containerClasses = [\n styles.container,\n disabled && styles['container--disabled'],\n className\n ].filter(Boolean).join(' ');\n\n // Build checkbox wrapper classes\n const checkboxWrapperClasses = [\n styles.checkboxWrapper,\n styles[`checkboxWrapper--${size}`]\n ].filter(Boolean).join(' ');\n\n // Build checkbox box classes\n const checkboxBoxClasses = [\n styles.checkboxBox,\n styles[`checkboxBox--${size}`],\n actualChecked && styles['checkboxBox--checked'],\n disabled && styles['checkboxBox--disabled'],\n error && !actualChecked && styles['checkboxBox--error'],\n isFocused && styles['checkboxBox--focused']\n ].filter(Boolean).join(' ');\n\n // Build input classes\n const inputClasses = [\n styles.input,\n disabled && styles['input--disabled']\n ].filter(Boolean).join(' ');\n\n // Build checkmark classes\n const checkmarkClasses = [\n styles.checkmark,\n styles[`checkmark--${size}`],\n actualChecked && styles['checkmark--checked']\n ].filter(Boolean).join(' ');\n\n // Build label classes\n const labelClasses = [\n styles.label,\n disabled && styles['label--disabled'],\n error && !disabled && styles['label--error']\n ].filter(Boolean).join(' ');\n\n return (\n <label className={containerClasses}>\n <div className={checkboxWrapperClasses}>\n <div className={checkboxBoxClasses} />\n <input\n type=\"checkbox\"\n id={id}\n name={name}\n checked={actualChecked}\n onChange={handleChange}\n disabled={disabled}\n className={inputClasses}\n onFocus={() => setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n aria-invalid={error}\n />\n <svg\n className={checkmarkClasses}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.5 6L5 8.5L9.5 3.5\"\n stroke=\"var(--content-action-highlight-inverse-idle)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n {label && (\n <span className={labelClasses}>\n {label}\n </span>\n )}\n </label>\n );\n};\n\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox };","import React from 'react';\nimport { ChipProps } from './Chip.types';\nimport styles from './Chip.module.css';\n\n/**\n * Chip Component\n *\n * A removable filter chip component matching Figma specs (689-7141)\n *\n * Features:\n * - Two sizes: small (for filter rows), medium (default)\n * - Three states: idle, active, disabled\n * - Optional count badge\n * - Optional removable (X icon)\n */\nconst Chip: React.FC<ChipProps> = ({\n label,\n count,\n size = 'small',\n state = 'idle',\n removable = true,\n onClick,\n onRemove,\n className = '',\n disabled = false,\n}) => {\n // Determine effective state\n const effectiveState = disabled ? 'disabled' : state;\n\n // Build chip classes\n const chipClasses = [\n styles.chip,\n styles[`chip--${size}`],\n styles[`chip--${effectiveState}`],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Build label classes\n const labelClasses = [styles.label, styles[`label--${size}`]].join(' ');\n\n // Build count badge classes\n const countBadgeClasses = [styles.countBadge, styles[`countBadge--${size}`]].join(' ');\n\n const handleClick = (e: React.MouseEvent) => {\n if (disabled) return;\n\n // If removable and there's an onRemove handler, use that\n // Otherwise use onClick for toggle behavior\n if (removable && onRemove) {\n onRemove();\n } else if (onClick) {\n onClick();\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (removable && onRemove) {\n onRemove();\n } else if (onClick) {\n onClick();\n }\n }\n };\n\n return (\n <button\n type=\"button\"\n className={chipClasses}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n aria-label={removable ? `Remove filter: ${label}` : label}\n >\n <span className={labelClasses}>{label}</span>\n\n {count !== undefined && <span className={countBadgeClasses}>{count}</span>}\n\n {removable && (\n <span className={styles.closeIcon} aria-hidden=\"true\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <g clipPath=\"url(#clip0_1054_71341)\">\n <path d=\"M12 2.25C14.5859 2.25 17.0658 3.27723 18.8943 5.10571C20.7228 6.93419 21.75 9.41414 21.75 12C21.75 14.5859 20.7228 17.0658 18.8943 18.8943C17.0658 20.7228 14.5859 21.75 12 21.75C9.41414 21.75 6.93419 20.7228 5.10571 18.8943C3.27723 17.0658 2.25 14.5859 2.25 12C2.25 9.41414 3.27723 6.93419 5.10571 5.10571C6.93419 3.27723 9.41414 2.25 12 2.25ZM12 24C15.1826 24 18.2348 22.7357 20.4853 20.4853C22.7357 18.2348 24 15.1826 24 12C24 8.8174 22.7357 5.76516 20.4853 3.51472C18.2348 1.26428 15.1826 0 12 0C8.8174 0 5.76516 1.26428 3.51472 3.51472C1.26428 5.76516 0 8.8174 0 12C0 15.1826 1.26428 18.2348 3.51472 20.4853C5.76516 22.7357 8.8174 24 12 24ZM7.82812 7.82812C7.3875 8.26875 7.3875 8.98125 7.82812 9.41719L10.4062 11.9953L7.82812 14.5734C7.3875 15.0141 7.3875 15.7266 7.82812 16.1625C8.26875 16.5984 8.98125 16.6031 9.41719 16.1625L11.9953 13.5844L14.5734 16.1625C15.0141 16.6031 15.7266 16.6031 16.1625 16.1625C16.5984 15.7219 16.6031 15.0094 16.1625 14.5734L13.5844 11.9953L16.1625 9.41719C16.6031 8.97656 16.6031 8.26406 16.1625 7.82812C15.7219 7.39219 15.0094 7.3875 14.5734 7.82812L11.9953 10.4062L9.41719 7.82812C8.97656 7.3875 8.26406 7.3875 7.82812 7.82812Z\" fill=\"#4B5563\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_1054_71341\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n </span>\n )}\n </button>\n );\n};\n\nChip.displayName = 'Chip';\n\nexport { Chip };\n","import { DividerProps } from './Divider.types';\nimport styles from './Divider.module.css';\n\nconst Divider: React.FC<DividerProps> = ({\n label,\n orientation = 'horizontal',\n className = '',\n variant\n }) => {\n const isHorizontal = orientation === 'horizontal';\n\n if (!label) {\n // Clean variant - just the line\n const lineClass = isHorizontal\n ? styles['lineStandalone--horizontal']\n : styles['lineStandalone--vertical'];\n\n return (\n <div\n className={[lineClass, className].filter(Boolean).join(' ')}\n role=\"separator\"\n aria-orientation={orientation}\n />\n );\n }\n\n // Label variant - line with text in the middle\n const containerClass = isHorizontal\n ? styles['container--horizontal']\n : styles['container--vertical'];\n\n const lineClass = isHorizontal\n ? styles['line--horizontal']\n : styles['line--vertical'];\n\n const containerClasses = [\n styles.container,\n containerClass,\n className\n ].filter(Boolean).join(' ');\n\n return (\n <div\n className={containerClasses}\n role=\"separator\"\n aria-orientation={orientation}\n aria-label={typeof label === 'string' ? label : undefined}\n >\n <div className={lineClass} />\n <span className={styles.label}>{label}</span>\n <div className={lineClass} />\n </div>\n );\n};\n\nDivider.displayName = 'Divider';\n\nexport { Divider };\n","import React, { useState, useRef } from \"react\";\nimport styles from './Dropdown.module.css';\n\ninterface DateOption {\n value: string;\n label: string;\n}\n\ninterface DropdownProps {\n options?: DateOption[];\n disabled?: boolean;\n error?: boolean;\n defaultValue?: string;\n onChange?: (value: string) => void;\n className?: string;\n name?: string;\n id?: string;\n}\n\nconst Dropdown: React.FC<DropdownProps> = ({\n options = [\n { value: \"1\", label: \"Today\" },\n { value: \"2\", label: \"This weekend\" },\n { value: \"3\", label: \"Choose a date\" },\n ],\n disabled = false,\n error = false,\n defaultValue = options[0].value,\n onChange,\n className,\n name,\n id,\n}) => {\n const [selectedValue, setSelectedValue] = useState(defaultValue);\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const selectedLabel = options.find(o => o.value === selectedValue)?.label || \"\";\n\n const handleSelect = (value: string) => {\n setSelectedValue(value);\n onChange?.(value);\n setIsOpen(false);\n };\n\n // Build container classes\n const containerClasses = [\n styles.container,\n disabled && styles['container--disabled'],\n className\n ].filter(Boolean).join(' ');\n\n // Build button classes\n const buttonClasses = [\n styles.button,\n error && styles['button--error'],\n isFocused && !error && styles['button--focus'],\n disabled && styles['button--disabled']\n ].filter(Boolean).join(' ');\n\n // Build dropdown list classes\n const dropdownListClasses = [\n styles.dropdownList,\n isOpen && styles['dropdownList--open']\n ].filter(Boolean).join(' ');\n\n // Build option classes\n const getOptionClasses = (isSelected: boolean) => [\n styles.option,\n isSelected && styles['option--selected']\n ].filter(Boolean).join(' ');\n\n return (\n <div\n ref={dropdownRef}\n className={containerClasses}\n >\n <div\n className={buttonClasses}\n tabIndex={disabled ? -1 : 0}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onFocus={() => !disabled && setIsFocused(true)}\n onBlur={() => {\n setTimeout(() => setIsFocused(false), 100); // prevent premature close\n }}\n role=\"button\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-disabled={disabled}\n >\n <span>{selectedLabel}</span>\n <svg width=\"12\" height=\"8\" viewBox=\"0 0 12 8\" fill=\"none\">\n <path\n d=\"M1 1L6 6L11 1\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n\n <ul role=\"listbox\" className={dropdownListClasses}>\n {options.map((option) => (\n <li\n key={option.value}\n role=\"option\"\n aria-selected={selectedValue === option.value}\n onClick={() => handleSelect(option.value)}\n className={getOptionClasses(selectedValue === option.value)}\n >\n {option.label}\n </li>\n ))}\n </ul>\n\n {/* Hidden native select for form compatibility */}\n <select\n id={id}\n name={name}\n value={selectedValue}\n onChange={(e) => handleSelect(e.target.value)}\n disabled={disabled}\n className={styles.hiddenSelect}\n >\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n );\n};\n\nDropdown.displayName = \"Dropdown\";\n\nexport { Dropdown };","import React, { useState, useRef } from 'react';\nimport styles from '../Input.module.css';\n\ninterface DefaultInputProps {\n value: string;\n onChange: (value: string) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n type?: 'text' | 'email' | 'password' | 'tel' | 'number' | 'search' | 'url' | 'date';\n placeholder?: string;\n error?: boolean;\n disabled?: boolean;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n prefix?: string;\n inputClassName?: string;\n wrapperClassName?: string;\n name?: string;\n id?: string;\n required?: boolean;\n autoComplete?: string;\n autoFocus?: boolean;\n readOnly?: boolean;\n uniqueId: string;\n inputProps?: React.InputHTMLAttributes<HTMLInputElement>;\n}\n\nexport const DefaultInput: React.FC<DefaultInputProps> = ({\n value,\n onChange,\n onFocus,\n onBlur,\n type = 'text',\n placeholder = 'Placeholder',\n error = false,\n disabled = false,\n leftIcon,\n rightIcon,\n prefix,\n inputClassName,\n wrapperClassName,\n name,\n id,\n required = false,\n autoComplete,\n autoFocus = false,\n readOnly = false,\n uniqueId,\n inputProps,\n}) => {\n const [isFocused, setIsFocused] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.value);\n };\n\n const handleFocus = () => {\n setIsFocused(true);\n onFocus?.();\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n onBlur?.();\n };\n\n // Build wrapper classes\n const wrapperClasses = [\n styles.inputWrapper,\n isFocused && styles['inputWrapper--focus'],\n error && styles['inputWrapper--error'],\n (disabled || readOnly) && styles['inputWrapper--disabled'],\n wrapperClassName\n ].filter(Boolean).join(' ');\n\n // Build input classes\n const inputClasses = [\n styles.input,\n (disabled || readOnly) && styles['input--disabled'],\n inputClassName\n ].filter(Boolean).join(' ');\n\n return (\n <div\n className={wrapperClasses}\n onClick={() => !disabled && inputRef.current?.focus()}\n >\n {leftIcon && (\n <div className={styles.icon}>\n {leftIcon}\n </div>\n )}\n\n {prefix && (\n <div className={styles.prefix}>\n {prefix}\n </div>\n )}\n\n <input\n ref={inputRef}\n type={type}\n id={id}\n name={name}\n value={value}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n autoComplete={autoComplete}\n autoFocus={autoFocus}\n readOnly={readOnly}\n className={inputClasses}\n {...inputProps}\n />\n\n {rightIcon && rightIcon}\n </div>\n );\n};","import React, { useState, useRef } from 'react';\nimport styles from '../Input.module.css';\n\ninterface PhoneInputProps {\n value: string;\n onChange: (value: string) => void;\n phonePrefix: string;\n onPhonePrefixChange: (value: string) => void;\n onPhonePrefixBlur?: () => void;\n onFocus?: () => void;\n onBlur?: () => void;\n placeholder?: string;\n error?: boolean;\n disabled?: boolean;\n inputClassName?: string;\n name?: string;\n id?: string;\n required?: boolean;\n autoComplete?: string;\n autoFocus?: boolean;\n readOnly?: boolean;\n uniqueId: string;\n}\n\nexport const PhoneInput: React.FC<PhoneInputProps> = ({\n value,\n onChange,\n phonePrefix,\n onPhonePrefixChange,\n onPhonePrefixBlur,\n onFocus,\n onBlur,\n placeholder = 'Placeholder',\n error = false,\n disabled = false,\n inputClassName,\n name,\n id,\n required = false,\n autoComplete,\n autoFocus = false,\n readOnly = false,\n uniqueId\n}) => {\n const [isFocused, setIsFocused] = useState(false);\n const [isPrefixFocused, setIsPrefixFocused] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const prefixRef = useRef<HTMLInputElement>(null);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.value);\n };\n\n const handleFocus = () => {\n setIsFocused(true);\n onFocus?.();\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n onBlur?.();\n };\n\n const handlePrefixChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onPhonePrefixChange(e.target.value);\n };\n\n const handlePrefixFocus = () => {\n setIsPrefixFocused(true);\n };\n\n const handlePrefixBlur = () => {\n setIsPrefixFocused(false);\n onPhonePrefixBlur?.();\n };\n\n // Build prefix wrapper classes\n const prefixWrapperClasses = [\n styles.phonePrefixWrapper,\n isPrefixFocused && styles['phonePrefixWrapper--focus'],\n error && styles['phonePrefixWrapper--error'],\n disabled && styles['phonePrefixWrapper--disabled']\n ].filter(Boolean).join(' ');\n\n // Build prefix input classes\n const prefixInputClasses = [\n styles.phonePrefixInput,\n disabled && styles['phonePrefixInput--disabled']\n ].filter(Boolean).join(' ');\n\n // Build main wrapper classes\n const wrapperClasses = [\n styles.inputWrapper,\n styles['inputWrapper--phone'],\n isFocused && styles['inputWrapper--focus'],\n error && styles['inputWrapper--error'],\n disabled && styles['inputWrapper--disabled']\n ].filter(Boolean).join(' ');\n\n // Build main input classes\n const inputClasses = [\n styles.input,\n disabled && styles['input--disabled'],\n inputClassName\n ].filter(Boolean).join(' ');\n\n return (\n <div className={styles.phoneContainer + ' checkout-input-phone'}>\n {/* Prefix field */}\n <div\n className={prefixWrapperClasses + ' checkout-phone-code'}\n onClick={() => !disabled && prefixRef.current?.focus()}\n >\n <input\n ref={prefixRef}\n type=\"text\"\n name=\"country_code\"\n autoComplete=\"tel-country-code\"\n value={phonePrefix}\n onChange={handlePrefixChange}\n onFocus={handlePrefixFocus}\n onBlur={handlePrefixBlur}\n disabled={disabled}\n className={prefixInputClasses}\n />\n </div>\n\n {/* Number field */}\n <div\n className={wrapperClasses}\n onClick={() => !disabled && inputRef.current?.focus()}\n >\n <input\n ref={inputRef}\n type=\"tel\"\n id={id}\n name={name}\n value={value}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n autoComplete={autoComplete}\n autoFocus={autoFocus}\n readOnly={readOnly}\n className={inputClasses}\n />\n </div>\n </div>\n );\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport styles from '../Input.module.css';\n\ninterface DropdownOption {\n value: string;\n label: string;\n icon?: React.ReactNode;\n}\n\ninterface DropdownInputProps {\n value: string;\n onChange: (value: string) => void;\n options: DropdownOption[];\n onSelect?: (value: string) => void;\n dropdownOpen?: boolean;\n onDropdownToggle?: (open: boolean) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n placeholder?: string;\n error?: boolean;\n disabled?: boolean;\n inputClassName?: string;\n name?: string;\n id?: string;\n required?: boolean;\n autoFocus?: boolean;\n uniqueId: string;\n}\n\nexport const DropdownInput: React.FC<DropdownInputProps> = ({\n value,\n onChange,\n options = [],\n onSelect,\n dropdownOpen: controlledDropdownOpen,\n onDropdownToggle,\n onFocus,\n onBlur,\n placeholder = 'Placeholder',\n error = false,\n disabled = false,\n inputClassName,\n name,\n id,\n required = false,\n autoFocus = false,\n uniqueId\n}) => {\n const [isFocused, setIsFocused] = useState(false);\n const [localDropdownOpen, setLocalDropdownOpen] = useState(false);\n const [selectedLabel, setSelectedLabel] = useState<string>('');\n const [selectedIcon, setSelectedIcon] = useState<React.ReactNode | null>(null);\n const [searchValue, setSearchValue] = useState<string>('');\n const inputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const hasValue = value && value.length > 0;\n const isDropdownOpen = controlledDropdownOpen !== undefined ? controlledDropdownOpen : localDropdownOpen;\n\n const handleFocus = () => {\n setIsFocused(true);\n onFocus?.();\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n onBlur?.();\n // Close dropdown on blur\n setTimeout(() => {\n if (controlledDropdownOpen === undefined) {\n setLocalDropdownOpen(false);\n }\n onDropdownToggle?.(false);\n }, 200); // Small delay to allow click on dropdown items\n };\n\n const handleDropdownClick = () => {\n if (!disabled) {\n const newOpen = !isDropdownOpen;\n if (controlledDropdownOpen === undefined) {\n setLocalDropdownOpen(newOpen);\n }\n onDropdownToggle?.(newOpen);\n if (newOpen) {\n inputRef.current?.focus();\n // Clear search when opening\n setSearchValue('');\n }\n }\n };\n \n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setSearchValue(newValue);\n // Open dropdown when typing\n if (!isDropdownOpen && newValue) {\n if (controlledDropdownOpen === undefined) {\n setLocalDropdownOpen(true);\n }\n onDropdownToggle?.(true);\n }\n };\n\n const handleItemSelect = (option: DropdownOption) => {\n onChange(option.value);\n setSelectedLabel(option.label);\n setSelectedIcon(option.icon || null);\n setSearchValue(''); // Clear search after selection\n onSelect?.(option.value);\n \n // Close dropdown\n if (controlledDropdownOpen === undefined) {\n setLocalDropdownOpen(false);\n }\n onDropdownToggle?.(false);\n };\n\n // Initialize selected label and icon when value changes\n useEffect(() => {\n if (value && options.length > 0) {\n const selectedOption = options.find(opt => opt.value === value);\n if (selectedOption) {\n setSelectedLabel(selectedOption.label);\n setSelectedIcon(selectedOption.icon || null);\n }\n }\n }, [value, options]);\n\n // Handle click outside to close dropdown\n useEffect(() => {\n if (isDropdownOpen) {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n if (dropdownRef.current && !dropdownRef.current.contains(target)) {\n if (controlledDropdownOpen === undefined) {\n setLocalDropdownOpen(false);\n }\n onDropdownToggle?.(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }\n }, [isDropdownOpen, controlledDropdownOpen, onDropdownToggle]);\n\n // Build wrapper classes\n const wrapperClasses = [\n styles.inputWrapper,\n styles['inputWrapper--dropdown'],\n isFocused && styles['inputWrapper--focus'],\n error && styles['inputWrapper--error'],\n disabled && styles['inputWrapper--disabled']\n ].filter(Boolean).join(' ');\n\n // Build input classes\n const inputClasses = [\n styles.input,\n disabled && styles['input--disabled'],\n inputClassName\n ].filter(Boolean).join(' ');\n\n // Build dropdown icon classes\n const dropdownIconClasses = [\n styles.dropdownIcon,\n isDropdownOpen && styles['dropdownIcon--open']\n ].filter(Boolean).join(' ');\n\n // Build dropdown body classes\n const dropdownBodyClasses = [\n styles.dropdownBody,\n isDropdownOpen && styles['dropdownBody--open']\n ].filter(Boolean).join(' ');\n\n return (\n <div className={styles.dropdownContainer} ref={dropdownRef}>\n <div\n className={wrapperClasses}\n onClick={handleDropdownClick}\n >\n {/* Show selected icon if available */}\n {selectedIcon && (\n <div className={styles.icon}>\n {selectedIcon}\n </div>\n )}\n\n <input\n ref={inputRef}\n type=\"text\"\n id={id}\n name={name}\n value={isDropdownOpen ? searchValue : (selectedLabel || value || '')}\n onChange={handleInputChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n autoComplete=\"off\"\n readOnly={false}\n className={inputClasses}\n />\n\n <div className={dropdownIconClasses}>\n <svg\n width=\"16\"\n height=\"9\"\n viewBox=\"0 0 16 9\"\n fill=\"none\"\n className={styles.icon}\n >\n <path d=\"M1 1L8 8L15 1\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n {/* Dropdown menu */}\n <div className={dropdownBodyClasses}>\n {options\n .filter(option => {\n // Filter options based on search value\n if (!searchValue) return true;\n return option.label.toLowerCase().includes(searchValue.toLowerCase());\n })\n .map((option) => (\n <div\n key={option.value}\n className={styles.dropdownItem}\n onClick={() => handleItemSelect(option)}\n >\n {option.icon && (\n <div className={styles.icon}>\n {option.icon}\n </div>\n )}\n <span className={styles.dropdownItemText}>\n {option.label}\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n};","import React, { useState } from 'react';\nimport { InputProps } from './Input.types';\nimport { DefaultInput } from './variants/DefaultInput';\nimport { PhoneInput } from './variants/PhoneInput';\nimport { DropdownInput } from './variants/DropdownInput';\nimport styles from './Input.module.css';\n\n// Generate a unique ID for CSS\nlet inputIdCounter = 0;\n\nconst Input: React.FC<InputProps> = ({\n label,\n placeholder = 'Placeholder',\n helper,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n type = 'text',\n error = false,\n disabled = false,\n leftIcon,\n rightIcon,\n prefix,\n className,\n inputClassName,\n name,\n id,\n required = false,\n autoComplete,\n autoFocus = false,\n readOnly = false,\n variant = 'default',\n phonePrefix,\n onPhonePrefixChange,\n onPhonePrefixBlur,\n options = [],\n onSelect,\n dropdownOpen,\n onDropdownToggle,\n wrapperClassName,\n inputProps\n}) => {\n const [localValue, setLocalValue] = useState(defaultValue || '');\n const [localPhonePrefix, setLocalPhonePrefix] = useState(phonePrefix || '+000');\n const [uniqueId] = useState(() => `input-${++inputIdCounter}`);\n \n const actualValue = value !== undefined ? value : localValue;\n const actualPhonePrefix = phonePrefix !== undefined ? phonePrefix : localPhonePrefix;\n \n const handleChange = (newValue: string) => {\n if (value === undefined) {\n setLocalValue(newValue);\n }\n onChange?.(newValue);\n };\n \n const handlePrefixChange = (newValue: string) => {\n if (phonePrefix === undefined) {\n setLocalPhonePrefix(newValue);\n }\n onPhonePrefixChange?.(newValue);\n };\n\n // Build className for container\n const containerClasses = [styles.container, className].filter(Boolean).join(' ');\n\n // Build className for label\n const labelClasses = [\n styles.label,\n (disabled || readOnly) && styles['label--disabled']\n ].filter(Boolean).join(' ');\n\n // Build className for helper\n const helperClasses = [\n styles.helper,\n error && styles['helper--error'],\n (disabled || readOnly) && styles['helper--disabled']\n ].filter(Boolean).join(' ');\n\n\n return (\n <div className={containerClasses}>\n {label && (\n <label htmlFor={id} className={labelClasses}>\n {label}\n </label>\n )}\n\n {variant === 'phone' ? (\n <PhoneInput\n value={actualValue}\n onChange={handleChange}\n phonePrefix={actualPhonePrefix}\n onPhonePrefixChange={handlePrefixChange}\n onPhonePrefixBlur={onPhonePrefixBlur}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n error={error}\n disabled={disabled}\n inputClassName={inputClassName}\n name={name}\n id={id}\n required={required}\n autoComplete={autoComplete}\n autoFocus={autoFocus}\n readOnly={readOnly}\n uniqueId={uniqueId}\n />\n ) : variant === 'dropdown' ? (\n <DropdownInput\n value={actualValue}\n onChange={handleChange}\n options={options}\n onSelect={onSelect}\n dropdownOpen={dropdownOpen}\n onDropdownToggle={onDropdownToggle}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n error={error}\n disabled={disabled}\n inputClassName={inputClassName}\n name={name}\n id={id}\n required={required}\n autoFocus={autoFocus}\n uniqueId={uniqueId}\n />\n ) : (\n <DefaultInput\n value={actualValue}\n onChange={handleChange}\n onFocus={onFocus}\n onBlur={onBlur}\n type={type}\n placeholder={placeholder}\n error={error}\n disabled={disabled}\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n prefix={prefix}\n inputClassName={inputClassName}\n wrapperClassName={wrapperClassName}\n name={name}\n id={id}\n required={required}\n autoComplete={autoComplete}\n autoFocus={autoFocus}\n readOnly={readOnly}\n uniqueId={uniqueId}\n inputProps={inputProps}\n />\n )}\n\n {helper && (\n <div className={helperClasses}>\n {helper}\n </div>\n )}\n </div>\n );\n};\n\nInput.displayName = 'Input';\n\nexport default Input;\n","import React, { forwardRef } from 'react';\nimport { PinProps } from './Pin.types';\nimport styles from './Pin.module.css';\n\n// Heart filled icon for favorites\nconst HeartIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={className}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M8 14.2333L6.96667 13.2933C3.6 10.24 1.33333 8.18667 1.33333 5.66667C1.33333 3.61333 2.94667 2 5 2C6.16 2 7.27333 2.54 8 3.39333C8.72667 2.54 9.84 2 11 2C13.0533 2 14.6667 3.61333 14.6667 5.66667C14.6667 8.18667 12.4 10.24 9.03333 13.2933L8 14.2333Z\" />\n </svg>\n);\n\n// Home/Hotel icon for hotel variant\nconst HomeIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={className}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"currentColor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M6.66667 13.3333V9.33333H9.33333V13.3333H12.6667V8H14.6667L8 2L1.33333 8H3.33333V13.3333H6.66667Z\" />\n </svg>\n);\n\n/**\n * Pin Component\n *\n * Map marker pin with price or hotel icon variants.\n * Used for displaying hotel markers on maps.\n *\n * @example\n * // Price pin (default)\n * <Pin price={150} currency=\"CHF\" showFavorite />\n *\n * // Viewed price pin (secondary style)\n * <Pin price={150} viewed showFavorite />\n *\n * // Hotel pin (for clusters)\n * <Pin variant=\"hotel\" />\n */\nconst Pin = forwardRef<HTMLButtonElement, PinProps>(\n (\n {\n variant = 'price',\n viewed = false,\n currency = 'CHF',\n price = 0,\n showFavorite = false,\n disabled = false,\n onClick,\n className = '',\n },\n ref\n ) => {\n // Determine style variant based on viewed state\n const styleVariant = viewed ? 'secondary' : 'primary';\n\n // Build class names\n const pinClasses = [\n styles.pin,\n styles[styleVariant],\n variant === 'hotel' && styles.hotel,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Format price for display\n const formattedPrice =\n typeof price === 'number' ? Math.round(price).toString() : price;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={pinClasses}\n disabled={disabled}\n onClick={onClick}\n >\n {/* Main body pill */}\n <div className={styles.body}>\n {variant === 'price' ? (\n <>\n <span className={styles.currency}>{currency}</span>\n <span className={styles.price}>{formattedPrice}</span>\n {showFavorite && (\n <div className={styles.favoriteContainer}>\n <HeartIcon className={styles.favoriteIcon} />\n </div>\n )}\n </>\n ) : (\n <HomeIcon className={styles.hotelIcon} />\n )}\n </div>\n\n {/* Pointer arrow at bottom */}\n <div className={styles.pointer}>\n <div className={styles.pointerInner} />\n </div>\n </button>\n );\n }\n);\n\nPin.displayName = 'Pin';\n\nexport { Pin };\n","import React from 'react';\nimport { RadioButtonProps } from './RadioButton.types';\nimport styles from './RadioButton.module.css';\n\nconst RadioButton: React.FC<RadioButtonProps> = ({\n id,\n checked,\n onChange,\n name,\n value,\n disabled = false,\n className = '',\n label,\n autoComplete\n }) => {\n const handleClick = () => {\n if (!disabled && !checked) {\n onChange(true);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (!disabled && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n if (!checked) {\n onChange(true);\n }\n }\n };\n\n // Build container classes\n const containerClasses = [\n styles.container,\n disabled && styles['container--disabled'],\n className\n ].filter(Boolean).join(' ');\n\n // Build outer circle classes\n const outerCircleClasses = [\n styles.outerCircle,\n checked && styles['outerCircle--checked'],\n disabled && styles['outerCircle--disabled']\n ].filter(Boolean).join(' ');\n\n // Build inner dot classes\n const innerDotClasses = [\n styles.innerDot,\n checked && styles['innerDot--checked']\n ].filter(Boolean).join(' ');\n\n return (\n <div\n role=\"radio\"\n aria-checked={checked}\n tabIndex={disabled ? -1 : 0}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={containerClasses}\n aria-disabled={disabled}\n >\n {/* Radio button visual wrapper */}\n <div className={styles.radioWrapper}>\n {/* Hidden input for form submission */}\n <input\n id={id}\n type=\"radio\"\n name={name}\n value={value}\n checked={checked}\n disabled={disabled}\n autoComplete={autoComplete}\n onChange={() => {}} // Controlled by parent onClick\n className={styles.hiddenInput}\n />\n\n {/* Outer circle */}\n <div className={outerCircleClasses}/>\n\n {/* Inner dot - only visible when checked */}\n <div className={innerDotClasses}/>\n </div>\n\n {label && (<label htmlFor={id} className={styles.label}>{label}</label>)}\n </div>\n );\n};\n\nRadioButton.displayName = 'RadioButton';\n\nexport { RadioButton };\n","import { RatingProps } from './Rating.types';\nimport styles from './Rating.module.css';\n\nconst Rating: React.FC<RatingProps> = ({\n variant = 'stars',\n value,\n maxValue = 5,\n showValue = false,\n name,\n date,\n quote,\n size = 'medium',\n className = ''\n}) => {\n // Ensure value is between 0 and maxValue\n const clampedValue = Math.min(Math.max(0, value), maxValue);\n\n // Calculate full, half, and empty stars\n const fullStars = Math.floor(clampedValue);\n const hasHalfStar = clampedValue % 1 >= 0.5;\n const emptyStars = maxValue - fullStars - (hasHalfStar ? 1 : 0);\n\n // Full star icon (filled)\n const StarIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <g clipPath=\"url(#clip0_2938_4605)\">\n <g clipPath=\"url(#clip1_2938_4605)\">\n <path d=\"M12.0004 0.5C12.393 0.5 12.7551 0.723172 12.9339 1.07325L16.1402 7.38333L23.1155 8.49482C23.5037 8.55608 23.8265 8.83176 23.9487 9.20809C24.0708 9.58442 23.9705 9.99576 23.6957 10.2758L18.7008 15.2863L19.8045 22.2834C19.8656 22.6728 19.7042 23.0667 19.3857 23.2986C19.0673 23.5305 18.6441 23.5655 18.2951 23.3861L12.0004 20.1742L5.70561 23.3861C5.35663 23.5655 4.93349 23.5305 4.61504 23.2986C4.29659 23.0667 4.13519 22.6772 4.19626 22.2834L5.29555 15.2863L0.305106 10.2758C0.0259198 9.99576 -0.0700504 9.58442 0.0520935 9.20809C0.174237 8.83176 0.492684 8.55608 0.885289 8.49482L7.86058 7.38333L11.0712 1.07325C11.2501 0.723172 11.6121 0.5 12.0047 0.5H12.0004Z\" fill=\"#FBB041\"/>\n </g>\n <g clipPath=\"url(#clip2_2938_4605)\">\n <path d=\"M12.0004 0.5C12.393 0.5 12.7551 0.723172 12.9339 1.07325L16.1402 7.38333L23.1155 8.49482C23.5037 8.55608 23.8265 8.83176 23.9487 9.20809C24.0708 9.58442 23.9705 9.99576 23.6957 10.2758L18.7008 15.2863L19.8045 22.2834C19.8656 22.6728 19.7042 23.0667 19.3857 23.2986C19.0673 23.5305 18.6441 23.5655 18.2951 23.3861L12.0004 20.1742L5.70561 23.3861C5.35663 23.5655 4.93349 23.5305 4.61504 23.2986C4.29659 23.0667 4.13519 22.6772 4.19626 22.2834L5.29555 15.2863L0.305106 10.2758C0.0259198 9.99576 -0.0700504 9.58442 0.0520935 9.20809C0.174237 8.83176 0.492684 8.55608 0.885289 8.49482L7.86058 7.38333L11.0712 1.07325C11.2501 0.723172 11.6121 0.5 12.0047 0.5H12.0004ZM12.0004 3.86071L9.47898 8.81426C9.3263 9.11182 9.04275 9.32187 8.71122 9.37438L3.23656 10.2496L7.15389 14.1835C7.38945 14.4198 7.49851 14.7568 7.44616 15.0893L6.58243 20.5811L11.5249 18.0606C11.8215 17.9074 12.1749 17.9074 12.4759 18.0606L17.4183 20.5811L16.5546 15.0893C16.5023 14.7568 16.6113 14.4198 16.8469 14.1835L20.7642 10.2496L15.2895 9.37438C14.958 9.32187 14.6745 9.11182 14.5218 8.81426L12.0004 3.86071Z\" fill=\"#9A5A00\"/>\n </g>\n </g>\n <defs>\n <clipPath id=\"clip0_2938_4605\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n <clipPath id=\"clip1_2938_4605\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n <clipPath id=\"clip2_2938_4605\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n );\n\n // Half star icon (left half filled, right half empty)\n const HalfStarIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <defs>\n <clipPath id=\"half\">\n <rect x=\"0\" y=\"0\" width=\"12\" height=\"24\" />\n </clipPath>\n </defs>\n <path\n clipPath=\"url(#half)\"\n d=\"M12.0004 0.5C12.393 0.5 12.7551 0.723172 12.9339 1.07325L16.1402 7.38333L23.1155 8.49482C23.5037 8.55608 23.8265 8.83176 23.9487 9.20809C24.0708 9.58442 23.9705 9.99576 23.6957 10.2758L18.7008 15.2863L19.8045 22.2834C19.8656 22.6728 19.7042 23.0667 19.3857 23.2986C19.0673 23.5305 18.6441 23.5655 18.2951 23.3861L12.0004 20.1742L5.70561 23.3861C5.35663 23.5655 4.93349 23.5305 4.61504 23.2986C4.29659 23.0667 4.13519 22.6772 4.19626 22.2834L5.29555 15.2863L0.305106 10.2758C0.0259198 9.99576 -0.0700504 9.58442 0.0520935 9.20809C0.174237 8.83176 0.492684 8.55608 0.885289 8.49482L7.86058 7.38333L11.0712 1.07325C11.2501 0.723172 11.6121 0.5 12.0047 0.5H12.0004Z\"\n fill=\"#FBB041\"\n />\n <path\n d=\"M12.0004 0.5C12.393 0.5 12.7551 0.723172 12.9339 1.07325L16.1402 7.38333L23.1155 8.49482C23.5037 8.55608 23.8265 8.83176 23.9487 9.20809C24.0708 9.58442 23.9705 9.99576 23.6957 10.2758L18.7008 15.2863L19.8045 22.2834C19.8656 22.6728 19.7042 23.0667 19.3857 23.2986C19.0673 23.5305 18.6441 23.5655 18.2951 23.3861L12.0004 20.1742L5.70561 23.3861C5.35663 23.5655 4.93349 23.5305 4.61504 23.2986C4.29659 23.0667 4.13519 22.6772 4.19626 22.2834L5.29555 15.2863L0.305106 10.2758C0.0259198 9.99576 -0.0700504 9.58442 0.0520935 9.20809C0.174237 8.83176 0.492684 8.55608 0.885289 8.49482L7.86058 7.38333L11.0712 1.07325C11.2501 0.723172 11.6121 0.5 12.0047 0.5H12.0004ZM12.0004 3.86071L9.47898 8.81426C9.3263 9.11182 9.04275 9.32187 8.71122 9.37438L3.23656 10.2496L7.15389 14.1835C7.38945 14.4198 7.49851 14.7568 7.44616 15.0893L6.58243 20.5811L11.5249 18.0606C11.8215 17.9074 12.1749 17.9074 12.4759 18.0606L17.4183 20.5811L16.5546 15.0893C16.5023 14.7568 16.6113 14.4198 16.8469 14.1835L20.7642 10.2496L15.2895 9.37438C14.958 9.32187 14.6745 9.11182 14.5218 8.81426L12.0004 3.86071Z\"\n fill=\"#9A5A00\"\n />\n </svg>\n );\n\n\n // Empty star icon (outline only)\n const EmptyStarIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <g clipPath=\"url(#clip0_2938_4609)\">\n <path d=\"M12.0004 0.5C12.393 0.5 12.7551 0.723172 12.9339 1.07325L16.1402 7.38333L23.1155 8.49482C23.5037 8.55608 23.8265 8.83176 23.9487 9.20809C24.0708 9.58442 23.9705 9.99576 23.6957 10.2758L18.7008 15.2863L19.8045 22.2834C19.8656 22.6728 19.7042 23.0667 19.3857 23.2986C19.0673 23.5305 18.6441 23.5655 18.2951 23.3861L12.0004 20.1742L5.70561 23.3861C5.35663 23.5655 4.93349 23.5305 4.61504 23.2986C4.29659 23.0667 4.13519 22.6772 4.19626 22.2834L5.29555 15.2863L0.305106 10.2758C0.0259198 9.99576 -0.0700504 9.58442 0.0520935 9.20809C0.174237 8.83176 0.492684 8.55608 0.885289 8.49482L7.86058 7.38333L11.0712 1.07325C11.2501 0.723172 11.6121 0.5 12.0047 0.5H12.0004ZM12.0004 3.86071L9.47898 8.81426C9.3263 9.11182 9.04275 9.32187 8.71122 9.37438L3.23656 10.2496L7.15389 14.1835C7.38945 14.4198 7.49851 14.7568 7.44616 15.0893L6.58243 20.5811L11.5249 18.0606C11.8215 17.9074 12.1749 17.9074 12.4759 18.0606L17.4183 20.5811L16.5546 15.0893C16.5023 14.7568 16.6113 14.4198 16.8469 14.1835L20.7642 10.2496L15.2895 9.37438C14.958 9.32187 14.6745 9.11182 14.5218 8.81426L12.0004 3.86071Z\" fill=\"#9A5A00\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_2938_4609\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n );\n\n const renderStars = () => {\n const starClasses = [\n styles.star,\n styles[`star--${size}`]\n ].filter(Boolean).join(' ');\n\n const stars = [];\n\n // Full stars\n for (let i = 0; i < fullStars; i++) {\n stars.push(\n <span key={`full-${i}`} className={starClasses}>\n <StarIcon />\n </span>\n );\n }\n\n // Half star\n if (hasHalfStar) {\n stars.push(\n <span key=\"half\" className={starClasses}>\n <HalfStarIcon />\n </span>\n );\n }\n\n // Empty stars\n for (let i = 0; i < emptyStars; i++) {\n stars.push(\n <span key={`empty-${i}`} className={starClasses}>\n <EmptyStarIcon />\n </span>\n );\n }\n\n return stars;\n };\n\n // Stars only variant\n if (variant === 'stars') {\n const containerClasses = [styles.starsContainer, className].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n <div className={styles.starContainer}>\n {renderStars()}\n </div>\n {showValue && (\n <span className={styles.valueDisplay}>\n {clampedValue.toLocaleString('de-CH')}\n </span>\n )}\n </div>\n );\n }\n\n // Result variant - single character display\n if (variant === 'result') {\n const containerClasses = [styles.resultContainer, className].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n <span className={styles.resultChar}>N</span>\n <div>\n {renderStars()}\n </div>\n </div>\n );\n }\n\n // Block variant - full review block\n const containerClasses = [styles.blockContainer, className].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n <div className={styles.blockHeader}>\n <div className={styles.blockHeaderLeft}>\n {name && <span className={styles.blockName}>{name}</span>}\n <div>\n {renderStars()}\n </div>\n </div>\n {date && <span className={styles.blockDate}>{date}</span>}\n </div>\n {quote && <p className={styles.blockQuote}>{quote}</p>}\n </div>\n );\n};\n\nRating.displayName = 'Rating';\n\nexport { Rating };","import { CardProps } from './Card.types';\nimport { Badge } from '../Badge';\nimport { Rating } from '../Rating';\nimport { useUIContext } from '../../context';\nimport { useResponsive } from '../../hooks';\nimport styles from './Card.module.css';\n\nconst Card: React.FC<CardProps> = ({\n image,\n imageAlt = '',\n label,\n price,\n stars,\n isSuperior = false,\n badge,\n onClick,\n className,\n hasRating,\n variant = 'desktop', // 'desktop' | 'mobile'\n withPadding = false,\n withHeight = false,\n isRatingComments = false,\n context\n }) => {\n const { isDesktop } = useResponsive();\n const { t } = useUIContext();\n\n // Build dynamic class names\n const containerClasses = [\n styles.card,\n onClick && styles.cardClickable,\n withPadding && styles.cardWithPadding,\n withHeight && styles.cardWithHeight,\n className\n ].filter(Boolean).join(' ');\n\n const starsRowClasses = [\n styles.starsRow,\n context === 'hotel-deals' && styles.starsRowFixed\n ].filter(Boolean).join(' ');\n\n const labelClasses = [\n styles.label,\n isDesktop ? styles.labelDesktop : styles.labelMobile,\n context === 'hotel-deals' && styles.labelHotelDeals,\n !isDesktop && context !== 'hotel-deals' && styles.labelMobileOverflow,\n !hasRating && styles.labelNoRating\n ].filter(Boolean).join(' ');\n\n const priceClasses = [\n styles.price,\n context === 'hotel-deals' && hasRating && styles.priceHotelDealsWithRating,\n context === 'hotel-deals' && !hasRating && styles.priceHotelDealsNoRating,\n context !== 'hotel-deals' && !hasRating && styles.priceNoRating,\n context !== 'hotel-deals' && hasRating && styles.priceRegularWithRating\n ].filter(Boolean).join(' ');\n\n // Default placeholder if no image\n const displayImage = image || 'data:image/svg+xml,%3Csvg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"100\" fill=\"%23e5e7eb\"%3E%3Crect width=\"100\" height=\"100\" /%3E%3C/svg%3E';\n\n const StarIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\">\n <g clipPath=\"url(#clip0_1590_1299)\">\n <path d=\"M4.80018 0.366577C4.93104 0.366577 5.05173 0.440968 5.11135 0.557659L6.18011 2.66102L8.50521 3.03152C8.63462 3.05194 8.74222 3.14383 8.78294 3.26927C8.82365 3.39472 8.79021 3.53183 8.6986 3.62518L7.03366 5.29533L7.40155 7.6277C7.42191 7.75752 7.3681 7.88879 7.26195 7.9661C7.15581 8.04341 7.01476 8.05508 6.89843 7.99528L4.80018 6.92463L2.70192 7.99528C2.58559 8.05508 2.44454 8.04341 2.33839 7.9661C2.23225 7.88879 2.17844 7.75898 2.1988 7.6277L2.56523 5.29533L0.901751 3.62518C0.808689 3.53183 0.776699 3.39472 0.817413 3.26927C0.858128 3.14383 0.964277 3.05194 1.09515 3.03152L3.42024 2.66102L4.49045 0.557659C4.55007 0.440968 4.67076 0.366577 4.80163 0.366577H4.80018Z\" fill=\"#1F2937\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_1590_1299\">\n <rect width=\"8\" height=\"8\" fill=\"white\" transform=\"translate(0.800049 0.199951)\"/>\n </clipPath>\n </defs>\n </svg>\n );\n const repeat = (n: number, renderFn: (i: number) => React.ReactNode) => Array.from({ length: n }, (_, i) => renderFn(i));\n\n return (\n <div\n className={containerClasses}\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n >\n <div className={styles.imageContainer}>\n <img\n src={displayImage}\n alt={imageAlt}\n className={styles.image}\n />\n <div className={styles.shadowOverlay} />\n {badge && (\n <div className={styles.badgeWrapper}>\n <Badge\n variant={badge.variant || 'primary'}\n size={isDesktop ? 'large' : 'small'}\n >\n {badge.text}\n </Badge>\n </div>\n )}\n </div>\n\n <div className={styles.textContainer}>\n {/* Always render stars row to maintain alignment */}\n <div className={starsRowClasses}>\n {stars !== undefined && stars > 0 ? (\n <>\n {/* Check for Swiss Lodge (rating = 6) */}\n {stars === 6 ? (\n <span className={styles.swissLodge}>\n {t('star_rating.swiss_lodge', {}, 'Swiss Lodge')}\n </span>\n ) : (\n <>\n {isDesktop ? (\n <>\n <div className={styles.starsContainer}>\n {repeat(Math.floor(stars), (i) => (\n <StarIcon key={i} />\n ))}\n {isSuperior && (\n <span className={styles.superiorBadge}>\n (s)\n </span>\n )}\n </div>\n <div>\n {isRatingComments && (\n <span className={styles.ratingInfo}>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 36 38\" fill=\"#478EFA\" className={styles.ratingSvg}>\n <path d=\"M4 0C1.79086 0 0 1.79086 0 4V32V38L9 32H32C34.2091 32 36 30.2091 36 28V0H4Z\"></path>\n </svg>\n <span className={styles.ratingLabel}>Excellent</span>\n <span className={styles.ratingValue}>4.5</span>\n </span>\n )}\n </div>\n </>\n ) : (\n <>\n <div className={styles.starsContainer}>\n {repeat(Math.floor(stars), (i) => (\n <StarIcon key={i} />\n ))}\n </div>\n {isSuperior && (\n <span className={styles.superiorBadge}>\n (s)\n </span>\n )}\n {isRatingComments && (\n <span className={styles.ratingInfo}>\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 36 38\" fill=\"#478EFA\" className={styles.ratingSvg}>\n <path d=\"M4 0C1.79086 0 0 1.79086 0 4V32V38L9 32H32C34.2091 32 36 30.2091 36 28V0H4Z\"></path>\n </svg>\n <span className={styles.ratingLabel}>Excellent</span>\n <span className={styles.ratingValue}>4.5</span>\n </span>\n )}\n </>\n )}\n </>\n )}\n </>\n ) : (\n // Empty space to maintain alignment\n <div className={styles.starsPlaceholder}> </div>\n )}\n </div>\n {label && <div className={labelClasses}>{label}</div>}\n {price && <div className={priceClasses}>{price}</div>}\n </div>\n </div>\n );\n};\n\nCard.displayName = 'Card';\n\nexport { Card };\n","import React from 'react';\nimport styles from './HotelCardSkeleton.module.css';\n\n/**\n * HotelCardSkeleton - Loading placeholder for hotel cards\n *\n * Displays a shimmer animation while hotel data is loading.\n * Matches the layout of HotelCard component.\n */\nconst HotelCardSkeleton: React.FC = () => {\n return (\n <div className={styles.card}>\n {/* Image skeleton */}\n <div className={`${styles.imageSection} ${styles.skeleton}`} />\n\n {/* Content skeleton */}\n <div className={styles.content}>\n <div className={`${styles.ratingRow} ${styles.skeleton}`} />\n <div className={`${styles.hotelName} ${styles.skeleton}`} />\n <div className={`${styles.location} ${styles.skeleton}`} />\n <div className={`${styles.uspBadge} ${styles.skeleton}`} />\n <div className={styles.benefitsAndPricing}>\n <div className={styles.benefitsSection}>\n <div className={`${styles.benefit} ${styles.skeleton}`} />\n </div>\n <div className={styles.pricingSection}>\n <div className={`${styles.priceLabel} ${styles.skeleton}`} />\n <div className={`${styles.originalPrice} ${styles.skeleton}`} />\n <div className={styles.priceContainer}>\n <div className={`${styles.badge} ${styles.skeleton}`} />\n <div className={`${styles.currentPrice} ${styles.skeleton}`} />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default HotelCardSkeleton;\n","// @hotelcard/ui - Shared UI Components\n\n// Context\nexport { HotelCardUIProvider, useUIContext } from './context';\nexport type { UIContextValue, HotelCardUIProviderProps, TranslateFunction, TranslateOptions } from './context';\nexport type { Locale } from './locales';\n\n// Hooks\nexport { useDebounce, useResponsive, BREAKPOINTS } from './hooks';\nexport type { ResponsiveState } from './hooks';\n\n// Components\nexport { Button } from './components/Button';\nexport type { ButtonProps } from './components/Button';\nexport { Badge } from './components/Badge';\nexport type { BadgeProps } from './components/Badge';\nexport { Block } from './components/Block';\nexport type { BlockProps } from './components/Block';\nexport { Checkbox } from './components/Checkbox';\nexport type { CheckboxProps } from './components/Checkbox';\nexport { Chip } from './components/Chip';\nexport type { ChipProps } from './components/Chip';\nexport { Divider } from './components/Divider';\nexport type { DividerProps } from './components/Divider';\nexport { Dropdown } from './components/Dropdown';\nexport type { DropdownProps } from './components/Dropdown';\nexport { Input } from './components/Input';\nexport type { InputProps } from './components/Input';\nexport { Pin } from './components/Pin';\nexport type { PinProps } from './components/Pin';\nexport { RadioButton } from './components/RadioButton';\nexport type { RadioButtonProps } from './components/RadioButton';\nexport { Rating } from './components/Rating';\nexport type { RatingProps } from './components/Rating';\nexport { Card } from './components/Card';\nexport type { CardProps } from './components/Card';\nexport { HotelCardSkeleton } from './components/HotelCardSkeleton';\n\nexport const VERSION = '0.1.0';\n"],"names":["translations","de","en","fr","it","getNestedValue","obj","path","keys","current","key","interpolate","str","options","_","value","createTranslateFunction","locale","localeTranslations","optionsOrFallback","fallback","isOptions","result","defaultT","defaultValue","UIContext","createContext","HotelCardUIProvider","currency","isDesktop","apiBaseUrl","customT","children","t","useMemo","jsx","useUIContext","useContext","useDebounce","callback","delay","timeoutRef","useRef","useCallback","args","BREAKPOINTS","useResponsive","width","setWidth","useState","useEffect","handleResize","Button","forwardRef","variant","size","leftIcon","rightIcon","className","disabled","iconOnly","style","props","ref","classes","styles","jsxs","Fragment","Badge","color","icon","colorStyleKey","badgeClasses","iconClasses","textClasses","Block","visual","label","description","onClick","showArrow","containerClasses","iconContainerClass","Checkbox","checked","defaultChecked","onChange","error","name","id","localChecked","setLocalChecked","isFocused","setIsFocused","actualChecked","handleChange","e","newChecked","checkboxWrapperClasses","checkboxBoxClasses","inputClasses","checkmarkClasses","labelClasses","Chip","count","state","removable","onRemove","effectiveState","chipClasses","countBadgeClasses","Divider","orientation","isHorizontal","lineClass","containerClass","Dropdown","selectedValue","setSelectedValue","isOpen","setIsOpen","dropdownRef","selectedLabel","_a","o","handleSelect","buttonClasses","dropdownListClasses","getOptionClasses","isSelected","option","opt","DefaultInput","onFocus","onBlur","type","placeholder","prefix","inputClassName","wrapperClassName","required","autoComplete","autoFocus","readOnly","uniqueId","inputProps","inputRef","handleFocus","handleBlur","wrapperClasses","PhoneInput","phonePrefix","onPhonePrefixChange","onPhonePrefixBlur","isPrefixFocused","setIsPrefixFocused","prefixRef","handlePrefixChange","handlePrefixFocus","handlePrefixBlur","prefixWrapperClasses","prefixInputClasses","DropdownInput","onSelect","controlledDropdownOpen","onDropdownToggle","localDropdownOpen","setLocalDropdownOpen","setSelectedLabel","selectedIcon","setSelectedIcon","searchValue","setSearchValue","isDropdownOpen","handleDropdownClick","newOpen","handleInputChange","newValue","handleItemSelect","selectedOption","handleClickOutside","event","target","dropdownIconClasses","dropdownBodyClasses","inputIdCounter","Input","helper","dropdownOpen","localValue","setLocalValue","localPhonePrefix","setLocalPhonePrefix","actualValue","actualPhonePrefix","helperClasses","HeartIcon","HomeIcon","Pin","viewed","price","showFavorite","styleVariant","pinClasses","formattedPrice","RadioButton","handleClick","handleKeyDown","outerCircleClasses","innerDotClasses","Rating","maxValue","showValue","date","quote","clampedValue","fullStars","hasHalfStar","emptyStars","StarIcon","HalfStarIcon","EmptyStarIcon","renderStars","starClasses","stars","i","Card","image","imageAlt","isSuperior","badge","hasRating","withPadding","withHeight","isRatingComments","context","starsRowClasses","priceClasses","displayImage","repeat","n","renderFn","HotelCardSkeleton","VERSION"],"mappings":"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"}
|