@hotelcard/ui 0.0.8 → 0.0.11
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.
Potentially problematic release.
This version of @hotelcard/ui might be problematic. Click here for more details.
- package/README.md +96 -0
- package/dist/index.cjs +876 -243
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +457 -2
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +180 -2
- package/dist/index.d.ts +180 -2
- package/dist/index.js +803 -178
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/Button/Button.tsx","../src/components/Badge/Badge.tsx","../src/components/Rating/Rating.tsx","../src/components/Divider/Divider.tsx","../src/components/Chip/Chip.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/RadioButton/RadioButton.tsx","../src/components/SectionHeader/SectionHeader.tsx","../src/components/Modal/Modal.tsx","../src/components/Card/Card.tsx","../src/components/CompactCard/CompactCard.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Input/Input.tsx","../src/components/Block/Block.tsx","../src/components/ReviewCard/ReviewCard.tsx","../src/components/FAQ/FAQ.tsx","../src/components/Benefits/Benefits.tsx","../src/components/Pin/Pin.tsx","../src/components/icons/HeartIcon.tsx","../src/components/icons/StarIcon.tsx","../src/components/icons/ChevronLeftIcon.tsx","../src/components/icons/ChevronRightIcon.tsx","../src/components/icons/PinIcon.tsx","../src/hooks/useDebounce.ts","../src/utils/formatPrice.ts","../src/utils/formatDate.ts","../src/utils/calculateDiscount.ts"],"sourcesContent":["// @hotelcard/ui - Shared UI Components\n// Version: 0.0.7\n\n// =================================================================\n// COMPONENTS\n// =================================================================\n\n// Button\nexport { Button } from './components/Button';\nexport type { ButtonProps } from './components/Button';\n\n// Badge\nexport { Badge } from './components/Badge';\nexport type { BadgeProps } from './components/Badge';\n\n// Rating\nexport { Rating } from './components/Rating';\nexport type { RatingProps } from './components/Rating';\n\n// Divider\nexport { Divider } from './components/Divider';\nexport type { DividerProps } from './components/Divider';\n\n// Chip\nexport { Chip } from './components/Chip';\nexport type { ChipProps, ChipSize, ChipState } from './components/Chip';\n\n// Checkbox\nexport { Checkbox } from './components/Checkbox';\nexport type { CheckboxProps, CheckboxSize } from './components/Checkbox';\n\n// RadioButton\nexport { RadioButton } from './components/RadioButton';\nexport type { RadioButtonProps } from './components/RadioButton';\n\n// SectionHeader\nexport { SectionHeader } from './components/SectionHeader';\nexport type { SectionHeaderProps } from './components/SectionHeader';\n\n// Modal\nexport { Modal } from './components/Modal';\nexport type { ModalProps } from './components/Modal';\n\n// Card\nexport { Card } from './components/Card';\nexport type { CardProps, CardBadge, CardRatingInfo } from './components/Card';\n\n// CompactCard\nexport { CompactCard } from './components/CompactCard';\nexport type { CompactCardProps, CompactCardBadge } from './components/CompactCard';\n\n// Dropdown\nexport { Dropdown } from './components/Dropdown';\nexport type { DropdownProps, DropdownOption } from './components/Dropdown';\n\n// Input\nexport { Input } from './components/Input';\nexport type { InputProps, InputType } from './components/Input';\n\n// Block\nexport { Block } from './components/Block';\nexport type { BlockProps } from './components/Block';\n\n// ReviewCard\nexport { ReviewCard } from './components/ReviewCard';\nexport type { ReviewCardProps } from './components/ReviewCard';\n\n// FAQ\nexport { FAQ } from './components/FAQ';\nexport type { FAQProps, FAQItem } from './components/FAQ';\n\n// Benefits\nexport { Benefits } from './components/Benefits';\nexport type { BenefitsProps, BenefitItem } from './components/Benefits';\n\n// Pin\nexport { Pin } from './components/Pin';\nexport type { PinProps } from './components/Pin';\n\n// =================================================================\n// ICONS\n// =================================================================\n\nexport { HeartIcon, StarIcon, ChevronLeftIcon, ChevronRightIcon, PinIcon } from './components/icons';\n\n// =================================================================\n// HOOKS\n// =================================================================\n\nexport { useDebounce } from './hooks';\n\n// =================================================================\n// UTILS\n// =================================================================\n\nexport { formatPrice } from './utils';\nexport { formatDate, formatDateRange } from './utils';\nexport { calculateDiscount } from './utils';\n\n// =================================================================\n// TYPES\n// =================================================================\n\nexport type { Hotel } from './types';\nexport type { Booking } from './types';\nexport type { User, Address, Membership } from './types';\nexport type { SearchParams, SearchFilters } from './types';\n","import { forwardRef } from 'react';\nimport { ButtonProps } from \"./Button.types\";\nimport './Button.css';\n\n// CSS class prefix to avoid conflicts\nconst cx = (className: string) => `hc-btn-${className}`;\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[] = [cx('button')];\n\n // Link variant\n if (variant === 'link') {\n classes.push(cx('link'));\n classes.push(cx(size));\n return classes.join(' ');\n }\n\n // Icon-only variant\n if (iconOnly) {\n classes.push(cx('icon-only'));\n classes.push(cx(size));\n classes.push(cx(variant));\n return classes.join(' ');\n }\n\n // Standard button\n classes.push(cx('standard'));\n classes.push(cx(size));\n classes.push(cx(variant));\n\n return classes.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={cx('icon-wrapper')}>\n {leftIcon}\n </span>\n )}\n <span className={cx('text-wrapper')}>{children}</span>\n {rightIcon && (\n <span className={cx('icon-wrapper')}>\n {rightIcon}\n </span>\n )}\n </>\n )}\n </button>\n );\n});\n\nButton.displayName = 'Button';\n\nexport { Button };\n","import { BadgeProps } from './Badge.types';\nimport './Badge.css';\n\n// CSS class prefix to avoid conflicts\nconst cx = (className: string) => `hc-badge-${className}`;\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 cx('badge'),\n cx(`badge--${size}`),\n cx(`badge--${colorStyleKey}`),\n className\n ].filter(Boolean).join(' ');\n\n // Build icon classes\n const iconClasses = [\n cx('icon'),\n cx(`icon--${size}`)\n ].join(' ');\n\n // Build text classes\n const textClasses = [\n cx('text'),\n size === 'large' && icon ? cx('text--largeWithIcon') : ''\n ].filter(Boolean).join(' ');\n\n return (\n <div className={badgeClasses}>\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 };\n","import { RatingProps } from './Rating.types';\nimport './Rating.css';\n\n// CSS class prefix to avoid conflicts\nconst cx = (className: string) => `hc-rating-${className}`;\n\n// Full star icon (filled)\nconst 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_full)\">\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 <defs>\n <clipPath id=\"clip0_full\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n);\n\n// Half star icon\nconst 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// Empty star icon (outline only)\nconst 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_empty)\">\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_empty\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n);\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 const renderStars = () => {\n const starClasses = [\n cx('star'),\n cx(`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 = [cx('starsContainer'), className].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n <div className={cx('starContainer')}>\n {renderStars()}\n </div>\n {showValue && (\n <span className={cx('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 = [cx('resultContainer'), className].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n <span className={cx('resultChar')}>N</span>\n <div>\n {renderStars()}\n </div>\n </div>\n );\n }\n\n // Block variant - full review block\n const containerClasses = [cx('blockContainer'), className].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n <div className={cx('blockHeader')}>\n <div className={cx('blockHeaderLeft')}>\n {name && <span className={cx('blockName')}>{name}</span>}\n <div>\n {renderStars()}\n </div>\n </div>\n {date && <span className={cx('blockDate')}>{date}</span>}\n </div>\n {quote && <p className={cx('blockQuote')}>{quote}</p>}\n </div>\n );\n};\n\nRating.displayName = 'Rating';\n\nexport { Rating };\n","import { DividerProps } from './Divider.types';\nimport './Divider.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-divider-${className}`;\n\nconst Divider: React.FC<DividerProps> = ({\n label,\n orientation = 'horizontal',\n className = ''\n}) => {\n const isHorizontal = orientation === 'horizontal';\n\n if (!label) {\n // Clean variant - just the line\n const lineClass = isHorizontal\n ? cx('lineStandalone--horizontal')\n : cx('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 ? cx('container--horizontal')\n : cx('container--vertical');\n\n const lineClass = isHorizontal\n ? cx('line--horizontal')\n : cx('line--vertical');\n\n const containerClasses = [\n cx('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={cx('label')}>{label}</span>\n <div className={lineClass} />\n </div>\n );\n};\n\nDivider.displayName = 'Divider';\n\nexport { Divider };\n","import { ChipProps } from './Chip.types';\nimport './Chip.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-chip-${className}`;\n\n// Close icon SVG\nconst CloseIcon = () => (\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_chip_close)\">\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=\"currentColor\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_chip_close\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n);\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 cx('chip'),\n cx(`chip--${size}`),\n cx(`chip--${effectiveState}`),\n className,\n ].filter(Boolean).join(' ');\n\n // Build label classes\n const labelClasses = [cx('label'), cx(`label--${size}`)].join(' ');\n\n // Build count badge classes\n const countBadgeClasses = [cx('countBadge'), cx(`countBadge--${size}`)].join(' ');\n\n const handleClick = () => {\n if (disabled) return;\n\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={cx('closeIcon')} aria-hidden=\"true\">\n <CloseIcon />\n </span>\n )}\n </button>\n );\n};\n\nChip.displayName = 'Chip';\n\nexport { Chip };\n","import { useState } from 'react';\nimport { CheckboxProps } from './Checkbox.types';\nimport './Checkbox.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-checkbox-${className}`;\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 cx('container'),\n disabled && cx('container--disabled'),\n className,\n ].filter(Boolean).join(' ');\n\n // Build checkbox wrapper classes\n const wrapperClasses = [\n cx('wrapper'),\n cx(`wrapper--${size}`),\n ].filter(Boolean).join(' ');\n\n // Build checkbox box classes\n const boxClasses = [\n cx('box'),\n cx(`box--${size}`),\n actualChecked && cx('box--checked'),\n disabled && cx('box--disabled'),\n error && !actualChecked && cx('box--error'),\n isFocused && cx('box--focused'),\n ].filter(Boolean).join(' ');\n\n // Build input classes\n const inputClasses = [\n cx('input'),\n disabled && cx('input--disabled'),\n ].filter(Boolean).join(' ');\n\n // Build checkmark classes\n const checkmarkClasses = [\n cx('checkmark'),\n cx(`checkmark--${size}`),\n actualChecked && cx('checkmark--checked'),\n ].filter(Boolean).join(' ');\n\n // Build label classes\n const labelClasses = [\n cx('label'),\n disabled && cx('label--disabled'),\n error && !disabled && cx('label--error'),\n ].filter(Boolean).join(' ');\n\n return (\n <label className={containerClasses}>\n <div className={wrapperClasses}>\n <div className={boxClasses} />\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, #ffffff)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n {label && <span className={labelClasses}>{label}</span>}\n </label>\n );\n};\n\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox };\n","import React from 'react';\nimport { RadioButtonProps } from './RadioButton.types';\nimport './RadioButton.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-radio-${className}`;\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 cx('container'),\n disabled && cx('container--disabled'),\n className,\n ].filter(Boolean).join(' ');\n\n // Build outer circle classes\n const outerCircleClasses = [\n cx('outerCircle'),\n checked && cx('outerCircle--checked'),\n disabled && cx('outerCircle--disabled'),\n ].filter(Boolean).join(' ');\n\n // Build inner dot classes\n const innerDotClasses = [\n cx('innerDot'),\n checked && cx('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={cx('wrapper')}>\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={cx('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 && (\n <label htmlFor={id} className={cx('label')}>\n {label}\n </label>\n )}\n </div>\n );\n};\n\nRadioButton.displayName = 'RadioButton';\n\nexport { RadioButton };\n","import { SectionHeaderProps } from './SectionHeader.types';\nimport './SectionHeader.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-section-${className}`;\n\n// Chevron right icon\nconst ChevronRightIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n);\n\nconst SectionHeader: React.FC<SectionHeaderProps> = ({\n title,\n showAllLabel,\n onShowAllClick,\n className = '',\n}) => {\n const headerClasses = [cx('header'), className].filter(Boolean).join(' ');\n\n return (\n <div className={headerClasses}>\n <h2 className={cx('title')}>{title}</h2>\n {showAllLabel && onShowAllClick && (\n <button className={cx('showAllButton')} onClick={onShowAllClick}>\n <span>{showAllLabel}</span>\n <ChevronRightIcon />\n </button>\n )}\n </div>\n );\n};\n\nSectionHeader.displayName = 'SectionHeader';\n\nexport { SectionHeader };\n","import React, { useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ModalProps } from './Modal.types';\nimport './Modal.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-modal-${className}`;\n\n// Close icon SVG\nconst CloseIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path\n d=\"M0.330469 1.91953C-0.110156 1.47891 -0.110156 0.766406 0.330469 0.330469C0.771094 -0.105469 1.48359 -0.110156 1.91953 0.330469L8.99766 7.40859L16.0758 0.330469C16.5164 -0.110156 17.2289 -0.110156 17.6648 0.330469C18.1008 0.771094 18.1055 1.48359 17.6648 1.91953L10.5867 8.99766L17.6648 16.0758C18.1055 16.5164 18.1055 17.2289 17.6648 17.6648C17.2242 18.1008 16.5117 18.1055 16.0758 17.6648L8.99766 10.5867L1.91953 17.6648C1.47891 18.1055 0.766406 18.1055 0.330469 17.6648C-0.105469 17.2242 -0.110156 16.5117 0.330469 16.0758L7.40859 8.99766L0.330469 1.91953Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nconst Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n children,\n width = 'var(--grid-tablet-device-width, 600px)',\n className = '',\n showCloseButton = true,\n disableBackdropClick = false,\n}) => {\n const modalRef = useRef<HTMLDivElement>(null);\n\n // Handle escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = '';\n };\n }, [isOpen, onClose]);\n\n // Handle click outside\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && !disableBackdropClick) {\n onClose();\n }\n };\n\n if (!isOpen) return null;\n\n const modalClasses = [cx('content'), className].filter(Boolean).join(' ');\n\n const modalContent = (\n <div className={cx('backdrop')} onClick={handleBackdropClick}>\n <div\n ref={modalRef}\n className={modalClasses}\n style={{ maxWidth: width }}\n >\n {showCloseButton && (\n <button\n className={cx('closeButton')}\n onClick={onClose}\n aria-label=\"Close modal\"\n >\n <CloseIcon />\n </button>\n )}\n {children}\n </div>\n </div>\n );\n\n // Check if we're in a browser environment\n if (typeof document !== 'undefined') {\n return createPortal(modalContent, document.body);\n }\n\n return modalContent;\n};\n\nModal.displayName = 'Modal';\n\nexport { Modal };\n","import React from 'react';\nimport { CardProps } from './Card.types';\nimport { Badge } from '../Badge';\nimport './Card.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-card-${className}`;\n\n// Star icon - 9x9\nconst 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_card_star)\">\n <path\n 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\"\n fill=\"#1F2937\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_card_star\">\n <rect width=\"8\" height=\"8\" fill=\"white\" transform=\"translate(0.800049 0.199951)\" />\n </clipPath>\n </defs>\n </svg>\n);\n\n// Comment bubble icon for rating info\nconst CommentIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 36 38\" fill=\"#478EFA\" className={cx('ratingSvg')}>\n <path d=\"M4 0C1.79086 0 0 1.79086 0 4V32V38L9 32H32C34.2091 32 36 30.2091 36 28V0H4Z\" />\n </svg>\n);\n\n// Default placeholder image\nconst PLACEHOLDER =\n '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// Helper to repeat elements\nconst repeat = (n: number, renderFn: (i: number) => React.ReactNode) =>\n Array.from({ length: n }, (_, i) => renderFn(i));\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 variant = 'mobile',\n hasRating,\n withPadding = false,\n withHeight = false,\n ratingInfo,\n context,\n swissLodgeLabel = 'Swiss Lodge',\n}) => {\n const isDesktop = variant === 'desktop';\n\n // Build dynamic class names\n const containerClasses = [\n cx('card'),\n cx(`card--${variant}`),\n onClick && cx('card--clickable'),\n withPadding && cx('card--withPadding'),\n withHeight && cx('card--withHeight'),\n className,\n ].filter(Boolean).join(' ');\n\n const starsRowClasses = [\n cx('starsRow'),\n context === 'hotel-deals' && cx('starsRow--fixed'),\n ].filter(Boolean).join(' ');\n\n const labelClasses = [\n cx('label'),\n isDesktop ? cx('label--desktop') : cx('label--mobile'),\n context === 'hotel-deals' && cx('label--hotelDeals'),\n !isDesktop && context !== 'hotel-deals' && cx('label--mobileOverflow'),\n !hasRating && cx('label--noRating'),\n ].filter(Boolean).join(' ');\n\n const priceClasses = [\n cx('price'),\n context === 'hotel-deals' && hasRating && cx('price--hotelDealsWithRating'),\n context === 'hotel-deals' && !hasRating && cx('price--hotelDealsNoRating'),\n context !== 'hotel-deals' && !hasRating && cx('price--noRating'),\n context !== 'hotel-deals' && hasRating && cx('price--regularWithRating'),\n ].filter(Boolean).join(' ');\n\n const displayImage = image || PLACEHOLDER;\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n };\n\n // Render rating info section\n const renderRatingInfo = () => {\n if (!ratingInfo) return null;\n return (\n <span className={cx('ratingInfo')}>\n <CommentIcon />\n <span className={cx('ratingLabel')}>{ratingInfo.label}</span>\n <span className={cx('ratingValue')}>{ratingInfo.value}</span>\n </span>\n );\n };\n\n return (\n <div\n className={containerClasses}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n >\n <div className={cx('imageContainer')}>\n <img\n src={displayImage}\n alt={imageAlt}\n className={cx('image')}\n loading=\"lazy\"\n />\n <div className={cx('shadowOverlay')} />\n {badge && (\n <div className={cx('badgeWrapper')}>\n <Badge\n color={badge.variant || 'primary'}\n size={isDesktop ? 'large' : 'small'}\n >\n {badge.text}\n </Badge>\n </div>\n )}\n </div>\n\n <div className={cx('textContainer')}>\n {/* Stars row */}\n <div className={starsRowClasses}>\n {stars !== undefined && stars > 0 ? (\n <>\n {/* Swiss Lodge (rating = 6) */}\n {stars === 6 ? (\n <span className={cx('swissLodge')}>{swissLodgeLabel}</span>\n ) : (\n <>\n {isDesktop ? (\n <>\n <div className={cx('starsContainer')}>\n {repeat(Math.floor(stars), (i) => (\n <StarIcon key={i} />\n ))}\n {isSuperior && (\n <span className={cx('superiorBadge')}>(s)</span>\n )}\n </div>\n <div>{renderRatingInfo()}</div>\n </>\n ) : (\n <>\n <div className={cx('starsContainer')}>\n {repeat(Math.floor(stars), (i) => (\n <StarIcon key={i} />\n ))}\n </div>\n {isSuperior && (\n <span className={cx('superiorBadge')}>(s)</span>\n )}\n {renderRatingInfo()}\n </>\n )}\n </>\n )}\n </>\n ) : (\n <div className={cx('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 { CompactCardProps } from './CompactCard.types';\nimport './CompactCard.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-compact-${className}`;\n\n// Star icon - 9x9 matching hotelcard-ui exactly\nconst 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_compact_star)\">\n <path\n 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\"\n fill=\"#1F2937\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_compact_star\">\n <rect width=\"8\" height=\"8\" fill=\"white\" transform=\"translate(0.800049 0.199951)\" />\n </clipPath>\n </defs>\n </svg>\n);\n\n// Default placeholder if no image\nconst PLACEHOLDER =\n '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// Helper to repeat elements\nconst repeat = (n: number, renderFn: (i: number) => React.ReactNode) =>\n Array.from({ length: n }, (_, i) => renderFn(i));\n\nconst CompactCard: React.FC<CompactCardProps> = ({\n image,\n imageAlt = '',\n label,\n price,\n stars,\n isSuperior = false,\n badge,\n onClick,\n className = '',\n swissLodgeLabel = 'Swiss Lodge',\n}) => {\n // Determine if stars are present for layout adjustments\n const hasRating = stars !== undefined && stars > 0;\n\n // Build dynamic class names\n const containerClasses = [\n cx('card'),\n onClick && cx('card--clickable'),\n className,\n ].filter(Boolean).join(' ');\n\n const labelClasses = [\n cx('label'),\n !hasRating && cx('label--noRating'),\n ].filter(Boolean).join(' ');\n\n const priceClasses = [\n cx('price'),\n !hasRating && cx('price--noRating'),\n ].filter(Boolean).join(' ');\n\n // Display image or placeholder\n const displayImage = image || PLACEHOLDER;\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n };\n\n return (\n <div\n className={containerClasses}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n >\n <div className={cx('imageContainer')}>\n <img\n src={displayImage}\n alt={imageAlt}\n className={cx('image')}\n loading=\"lazy\"\n />\n <div className={cx('shadowOverlay')} />\n {badge && (\n <div className={cx('badgeWrapper')}>\n <span\n className={`${cx('badge')} ${\n badge.variant === 'secondary' ? cx('badge--secondary') : cx('badge--primary')\n }`}\n >\n {badge.text}\n </span>\n </div>\n )}\n </div>\n\n <div className={cx('textContainer')}>\n {/* Always render stars row to maintain alignment */}\n <div className={cx('starsRow')}>\n {stars !== undefined && stars > 0 ? (\n <>\n {/* Check for Swiss Lodge (rating = 6) */}\n {stars === 6 ? (\n <span className={cx('swissLodge')}>{swissLodgeLabel}</span>\n ) : (\n <>\n <div className={cx('starsContainer')}>\n {repeat(Math.floor(stars), (i) => (\n <StarIcon key={i} />\n ))}\n </div>\n {isSuperior && <span className={cx('superiorBadge')}>(s)</span>}\n </>\n )}\n </>\n ) : (\n // Empty space to maintain alignment\n <div className={cx('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\nCompactCard.displayName = 'CompactCard';\n\nexport { CompactCard };\n","import React, { useState, useRef, useEffect } from 'react';\nimport { DropdownProps } from './Dropdown.types';\nimport './Dropdown.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-dropdown-${className}`;\n\n// Chevron icon\nconst ChevronIcon = () => (\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);\n\nconst Dropdown: React.FC<DropdownProps> = ({\n options = [],\n disabled = false,\n error = false,\n defaultValue,\n value,\n onChange,\n className = '',\n name,\n id,\n placeholder = 'Select...',\n}) => {\n const [localValue, setLocalValue] = useState(defaultValue || '');\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const actualValue = value !== undefined ? value : localValue;\n const selectedLabel = options.find((o) => o.value === actualValue)?.label || placeholder;\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleSelect = (selectedValue: string) => {\n if (value === undefined) {\n setLocalValue(selectedValue);\n }\n onChange?.(selectedValue);\n setIsOpen(false);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n setIsOpen(!isOpen);\n } else if (event.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n // Build container classes\n const containerClasses = [\n cx('container'),\n disabled && cx('container--disabled'),\n className,\n ].filter(Boolean).join(' ');\n\n // Build button classes\n const buttonClasses = [\n cx('button'),\n error && cx('button--error'),\n isFocused && !error && cx('button--focus'),\n disabled && cx('button--disabled'),\n isOpen && cx('button--open'),\n ].filter(Boolean).join(' ');\n\n // Build chevron classes\n const chevronClasses = [\n cx('chevron'),\n isOpen && cx('chevron--open'),\n ].filter(Boolean).join(' ');\n\n // Build dropdown list classes\n const listClasses = [\n cx('list'),\n isOpen && cx('list--open'),\n ].filter(Boolean).join(' ');\n\n return (\n <div ref={dropdownRef} className={containerClasses}>\n <div\n className={buttonClasses}\n tabIndex={disabled ? -1 : 0}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n onFocus={() => !disabled && setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-disabled={disabled}\n >\n <span>{selectedLabel}</span>\n <span className={chevronClasses}>\n <ChevronIcon />\n </span>\n </div>\n\n <ul role=\"listbox\" className={listClasses}>\n {options.map((option) => (\n <li\n key={option.value}\n role=\"option\"\n aria-selected={actualValue === option.value}\n onClick={() => handleSelect(option.value)}\n className={`${cx('option')} ${\n actualValue === option.value ? cx('option--selected') : ''\n }`}\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={actualValue}\n onChange={(e) => handleSelect(e.target.value)}\n disabled={disabled}\n className={cx('hiddenSelect')}\n >\n {!actualValue && <option value=\"\">{placeholder}</option>}\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 };\n","import React, { useState, useRef } from 'react';\nimport { InputProps } from './Input.types';\nimport './Input.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-input-${className}`;\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 wrapperClassName = '',\n name,\n id,\n required = false,\n autoComplete,\n autoFocus = false,\n readOnly = false,\n inputProps,\n}) => {\n const [localValue, setLocalValue] = useState(defaultValue);\n const [isFocused, setIsFocused] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const actualValue = value !== undefined ? value : localValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n if (value === undefined) {\n setLocalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const handleFocus = () => {\n setIsFocused(true);\n onFocus?.();\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n onBlur?.();\n };\n\n // Build container classes\n const containerClasses = [cx('container'), className].filter(Boolean).join(' ');\n\n // Build label classes\n const labelClasses = [\n cx('label'),\n (disabled || readOnly) && cx('label--disabled'),\n ].filter(Boolean).join(' ');\n\n // Build wrapper classes\n const wrapperClasses = [\n cx('wrapper'),\n isFocused && cx('wrapper--focus'),\n error && cx('wrapper--error'),\n (disabled || readOnly) && cx('wrapper--disabled'),\n wrapperClassName,\n ].filter(Boolean).join(' ');\n\n // Build input classes\n const inputClasses = [\n cx('input'),\n (disabled || readOnly) && cx('input--disabled'),\n inputClassName,\n ].filter(Boolean).join(' ');\n\n // Build helper classes\n const helperClasses = [\n cx('helper'),\n error && cx('helper--error'),\n (disabled || readOnly) && cx('helper--disabled'),\n ].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n {label && (\n <label htmlFor={id} className={labelClasses}>\n {label}\n </label>\n )}\n\n <div\n className={wrapperClasses}\n onClick={() => !disabled && !readOnly && inputRef.current?.focus()}\n >\n {leftIcon && <div className={cx('icon')}>{leftIcon}</div>}\n\n {prefix && <div className={cx('prefix')}>{prefix}</div>}\n\n <input\n ref={inputRef}\n type={type}\n id={id}\n name={name}\n value={actualValue}\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 {helper && <div className={helperClasses}>{helper}</div>}\n </div>\n );\n};\n\nInput.displayName = 'Input';\n\nexport { Input };\n","import { ReactNode } from 'react';\nimport './Block.css';\n\nconst cx = (className: string) => `hc-block-${className}`;\n\nexport interface BlockProps {\n /** Type of block to render */\n variant?: 'icon' | 'image';\n /** Icon or image to display */\n visual?: ReactNode;\n /** Label/title text */\n label: string;\n /** Description text (for icon variant) */\n description?: string;\n /** Style variant for icon blocks */\n style?: 'primary' | 'secondary';\n /** Click handler */\n onClick?: () => void;\n /** Whether to show arrow (for image variant) */\n showArrow?: boolean;\n /** Additional CSS class names */\n className?: string;\n}\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 const containerClasses = [\n cx('icon'),\n onClick && cx('icon--clickable'),\n className\n ].filter(Boolean).join(' ');\n\n const iconContainerClass = style === 'primary'\n ? cx('icon-container--primary')\n : cx('icon-container--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={cx('text-container')}>\n <div className={cx('icon-label')}>{label}</div>\n {description && <div className={cx('icon-description')}>{description}</div>}\n </div>\n </div>\n );\n }\n\n // Image Block variant\n const containerClasses = [\n cx('image'),\n onClick && cx('image--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={cx('image-container')}>\n {visual}\n </div>\n <div className={cx('footer')}>\n <span className={cx('image-label')}>{label}</span>\n {showArrow && (\n <span className={cx('arrow')}>→</span>\n )}\n </div>\n </div>\n );\n};\n\nBlock.displayName = 'Block';\n\nexport { Block };\n","import { Rating } from '../Rating';\nimport './ReviewCard.css';\n\nconst cx = (className: string) => `hc-review-${className}`;\n\nexport interface ReviewCardProps {\n /** Reviewer's name */\n name: string;\n /** Review date */\n date: string;\n /** Rating value (1-5) */\n rating: number;\n /** Review text/quote */\n quote: string;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst ReviewCard: React.FC<ReviewCardProps> = ({\n name,\n date,\n rating,\n quote,\n className\n}) => {\n const containerClasses = [cx('container'), className].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n <div className={cx('name')}>{name}</div>\n <div className={cx('frame')}>\n <div className={cx('stars')}>\n <Rating variant=\"stars\" value={rating} size=\"medium\" />\n </div>\n <div className={cx('quote')}>{quote}</div>\n </div>\n <div className={cx('date')}>{date}</div>\n </div>\n );\n};\n\nReviewCard.displayName = 'ReviewCard';\n\nexport { ReviewCard };\n","import { useState } from 'react';\nimport { Button } from '../Button';\nimport './FAQ.css';\n\nconst cx = (className: string) => `hc-faq-${className}`;\n\nexport interface FAQItem {\n question: string;\n answer: string;\n}\n\nexport interface FAQProps {\n items: FAQItem[];\n defaultOpenIndex?: number | null;\n allowMultiple?: boolean;\n className?: string;\n}\n\nconst ChevronIcon = ({ isOpen }: { isOpen: boolean }) => {\n const iconClasses = [\n cx('chevron'),\n isOpen && cx('chevron--open')\n ].filter(Boolean).join(' ');\n\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={iconClasses}\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nconst FAQ: React.FC<FAQProps> = ({\n items,\n defaultOpenIndex = null,\n allowMultiple = false,\n className\n}) => {\n const [openIndices, setOpenIndices] = useState<Set<number>>(\n defaultOpenIndex !== null ? new Set([defaultOpenIndex]) : new Set()\n );\n\n const toggleItem = (index: number) => {\n setOpenIndices(prev => {\n const newSet = new Set(prev);\n if (newSet.has(index)) {\n newSet.delete(index);\n } else {\n if (!allowMultiple) {\n newSet.clear();\n }\n newSet.add(index);\n }\n return newSet;\n });\n };\n\n const containerClasses = [cx('container'), className].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n {items.map((item, index) => {\n const isOpen = openIndices.has(index);\n const answerClasses = isOpen\n ? cx('answer--open')\n : cx('answer');\n\n return (\n <div key={index} className={cx('item')}>\n <Button\n variant=\"link\"\n size=\"medium\"\n className={cx('question-btn')}\n onClick={() => toggleItem(index)}\n aria-expanded={isOpen}\n aria-controls={`faq-answer-${index}`}\n rightIcon={\n <div className={cx('icon-container')}>\n <ChevronIcon isOpen={isOpen} />\n </div>\n }\n >\n <span className={cx('question-text')}>{item.question}</span>\n </Button>\n <div id={`faq-answer-${index}`} className={answerClasses}>\n <p className={cx('answer-text')}>{item.answer}</p>\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nFAQ.displayName = 'FAQ';\n\nexport { FAQ };\n","import { Button } from '../Button';\nimport './Benefits.css';\n\nconst cx = (className: string) => `hc-benefits-${className}`;\n\nexport interface BenefitItem {\n icon?: string;\n title: string;\n description?: string;\n}\n\nexport interface BenefitsProps {\n title?: string;\n subtitle?: string;\n benefits?: BenefitItem[];\n contactTitle?: string;\n contactDescription?: string;\n contactButtonText?: string;\n onContactClick?: () => void;\n className?: string;\n}\n\nconst Benefits: React.FC<BenefitsProps> = ({\n title = 'Ihre Vorteile mit HotelCard',\n subtitle = 'Mit HotelCard sparen Sie bei jedem Aufenthalt',\n benefits = [\n {\n title: 'Über 500 Hotels',\n description: 'Grosse Auswahl in der ganzen Schweiz'\n },\n {\n title: 'Bis zu 50% Rabatt',\n description: 'Exklusive Mitglieder-Preise'\n },\n {\n title: 'Kein Buchungszwang',\n description: 'Buchen Sie, wann Sie möchten'\n },\n {\n title: 'Kostenlose Stornierung',\n description: 'Flexible Buchungsbedingungen'\n }\n ],\n contactTitle = 'Haben Sie Fragen?',\n contactDescription = 'Unser Kundenservice hilft Ihnen gerne weiter',\n contactButtonText = 'Kontakt aufnehmen',\n onContactClick,\n className\n}) => {\n const sectionClasses = [cx('section'), className].filter(Boolean).join(' ');\n\n return (\n <section className={sectionClasses}>\n <div className={cx('container')}>\n <div className={cx('header')}>\n <h2 className={cx('title')}>{title}</h2>\n {subtitle && <p className={cx('subtitle')}>{subtitle}</p>}\n </div>\n\n <div className={cx('grid')}>\n {benefits.map((benefit, index) => (\n <div key={index} className={cx('item')}>\n <h3 className={cx('item-title')}>{benefit.title}</h3>\n {benefit.description && (\n <p className={cx('item-description')}>{benefit.description}</p>\n )}\n </div>\n ))}\n </div>\n\n {contactTitle && (\n <div className={cx('contact-card')}>\n <h3 className={cx('contact-title')}>{contactTitle}</h3>\n {contactDescription && (\n <p className={cx('contact-description')}>{contactDescription}</p>\n )}\n {contactButtonText && (\n <Button\n variant=\"secondary\"\n size=\"medium\"\n onClick={onContactClick}\n className={cx('contact-btn')}\n >\n {contactButtonText}\n </Button>\n )}\n </div>\n )}\n </div>\n </section>\n );\n};\n\nBenefits.displayName = 'Benefits';\n\nexport { Benefits };\n","import React, { forwardRef } from 'react';\nimport './Pin.css';\n\nconst cx = (className: string) => `hc-pin-${className}`;\n\nexport interface PinProps {\n /** Pin variant - 'price' shows currency/price, 'hotel' shows house icon */\n variant?: 'price' | 'hotel';\n /** Whether the hotel has been viewed (secondary style) */\n viewed?: boolean;\n /** Currency code to display */\n currency?: string;\n /** Price to display */\n price?: number | string;\n /** Whether to show the favorite (heart) icon */\n showFavorite?: boolean;\n /** Whether the pin is disabled */\n disabled?: boolean;\n /** Click handler */\n onClick?: () => void;\n /** Additional class name */\n className?: string;\n}\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 cx('pin'),\n cx(styleVariant),\n variant === 'hotel' && cx('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={cx('body')}>\n {variant === 'price' ? (\n <>\n <span className={cx('currency')}>{currency}</span>\n <span className={cx('price')}>{formattedPrice}</span>\n {showFavorite && (\n <div className={cx('favorite-container')}>\n <HeartIcon className={cx('favorite-icon')} />\n </div>\n )}\n </>\n ) : (\n <HomeIcon className={cx('hotel-icon')} />\n )}\n </div>\n\n {/* Pointer arrow at bottom */}\n <div className={cx('pointer')}>\n <div className={cx('pointer-inner')} />\n </div>\n </button>\n );\n }\n);\n\nPin.displayName = 'Pin';\n\nexport { Pin };\n","interface HeartIconProps {\n filled?: boolean;\n className?: string;\n size?: number;\n}\n\nexport const HeartIcon = ({ filled = false, className = '', size = 24 }: HeartIconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n className={className}\n fill={filled ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\" />\n </svg>\n);\n\nHeartIcon.displayName = 'HeartIcon';\n","interface StarIconProps {\n filled?: boolean;\n className?: string;\n size?: number;\n}\n\n// Small filled star for hotel category display\nexport const StarIcon = ({ filled = true, className = '', size = 9 }: StarIconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n className={className}\n >\n <g clipPath=\"url(#clip0_star_icon)\">\n <path\n 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\"\n fill={filled ? '#1F2937' : '#D1D5DB'}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_star_icon\">\n <rect width=\"8\" height=\"8\" fill=\"white\" transform=\"translate(0.800049 0.199951)\" />\n </clipPath>\n </defs>\n </svg>\n);\n\nStarIcon.displayName = 'StarIcon';\n","interface ChevronLeftIconProps {\n className?: string;\n size?: number;\n}\n\nexport const ChevronLeftIcon = ({ className = '', size = 20 }: ChevronLeftIconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n);\n\nChevronLeftIcon.displayName = 'ChevronLeftIcon';\n","interface ChevronRightIconProps {\n className?: string;\n size?: number;\n}\n\nexport const ChevronRightIcon = ({ className = '', size = 20 }: ChevronRightIconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n);\n\nChevronRightIcon.displayName = 'ChevronRightIcon';\n","interface PinIconProps {\n className?: string;\n size?: number;\n}\n\nexport const PinIcon = ({ className = '', size = 16 }: PinIconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 1.5C5.51472 1.5 3.5 3.51472 3.5 6C3.5 7.52671 4.48181 9.28285 5.83073 10.8739C6.48993 11.6504 7.18485 12.3259 7.73205 12.8316C7.8331 12.9249 7.92519 13.0096 8.00599 13.0857C8.08539 13.0108 8.17547 12.9276 8.27398 12.8362C8.81849 12.3312 9.51007 11.656 10.1655 10.8792C11.5093 9.28692 12.5 7.52773 12.5 6C12.5 3.51472 10.4853 1.5 8 1.5ZM8 14C7.57347 14.4982 7.57321 14.498 7.57291 14.4977L7.57178 14.4967L7.56899 14.4942L7.56002 14.4864C7.5525 14.4798 7.54197 14.4706 7.52861 14.4588C7.5019 14.4353 7.46403 14.4016 7.41618 14.3584C7.3205 14.272 7.18745 14.1481 7.02576 13.9917C6.70282 13.6792 6.26632 13.238 5.81302 12.7042C4.89319 11.6202 3 9.61329 3 6C3 3.23858 5.23858 1 8 1C10.7614 1 13 3.23858 13 6C13 9.61229 11.0969 11.6169 10.1732 12.6989C9.71743 13.2324 9.27901 13.6735 8.95477 13.9862C8.79239 14.1428 8.65889 14.267 8.56288 14.3537C8.51486 14.3971 8.47683 14.4309 8.45001 14.4545C8.43659 14.4664 8.42601 14.4757 8.41845 14.4823L8.40942 14.4902L8.40661 14.4927L8.40546 14.4937C8.40517 14.494 8.40492 14.4942 8 14ZM8 14L8.40492 14.4942C8.17766 14.6895 7.84451 14.6919 7.57291 14.4977L8 14Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 4.5C7.17157 4.5 6.5 5.17157 6.5 6C6.5 6.82843 7.17157 7.5 8 7.5C8.82843 7.5 9.5 6.82843 9.5 6C9.5 5.17157 8.82843 4.5 8 4.5ZM6 6C6 4.89543 6.89543 4 8 4C9.10457 4 10 4.89543 10 6C10 7.10457 9.10457 8 8 8C6.89543 8 6 7.10457 6 6Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nPinIcon.displayName = 'PinIcon';\n","import { useState, useEffect } from 'react';\n\nexport const useDebounce = <T>(value: T, delay: number): T => {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n};\n","export const formatPrice = (\n amount: number,\n currency: string = 'CHF',\n locale: string = 'de-CH'\n): string => {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(amount);\n};\n","import { format, parseISO, type Locale } from 'date-fns';\nimport { de, enUS, fr, it } from 'date-fns/locale';\n\nconst locales: Record<string, Locale> = { de, en: enUS, fr, it };\n\nexport const formatDate = (\n date: string | Date,\n formatStr: string = 'dd. MMM yyyy',\n locale: string = 'de'\n): string => {\n const d = typeof date === 'string' ? parseISO(date) : date;\n return format(d, formatStr, { locale: locales[locale] || de });\n};\n\nexport const formatDateRange = (\n checkIn: string | Date,\n checkOut: string | Date,\n locale: string = 'de'\n): string => {\n const start = formatDate(checkIn, 'dd.', locale);\n const end = formatDate(checkOut, 'dd. MMM yyyy', locale);\n return `${start} - ${end}`;\n};\n","export const calculateDiscount = (\n originalPrice: number,\n discountedPrice: number\n): number => {\n if (originalPrice <= 0) return 0;\n return Math.round(((originalPrice - discountedPrice) / originalPrice) * 100);\n};\n"],"mappings":"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","names":["ChevronRightIcon","HeartIcon","StarIcon","import_jsx_runtime","cx","import_jsx_runtime","cx","containerClasses","import_jsx_runtime","cx","lineClass","import_jsx_runtime","cx","import_react","import_jsx_runtime","cx","import_jsx_runtime","cx","import_jsx_runtime","cx","import_react","import_jsx_runtime","cx","CloseIcon","import_jsx_runtime","cx","StarIcon","import_jsx_runtime","cx","StarIcon","PLACEHOLDER","repeat","import_react","import_jsx_runtime","cx","import_react","import_jsx_runtime","cx","import_jsx_runtime","cx","containerClasses","import_jsx_runtime","cx","import_react","import_jsx_runtime","cx","ChevronIcon","import_jsx_runtime","cx","import_react","import_jsx_runtime","cx","import_jsx_runtime","HeartIcon","import_jsx_runtime","StarIcon","import_jsx_runtime","import_jsx_runtime","ChevronRightIcon","import_jsx_runtime","import_react"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/context/UIContext.tsx","../src/components/Button/Button.tsx","../src/components/Badge/Badge.tsx","../src/components/Rating/Rating.tsx","../src/components/Divider/Divider.tsx","../src/components/Chip/Chip.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/RadioButton/RadioButton.tsx","../src/components/SectionHeader/SectionHeader.tsx","../src/components/Modal/Modal.tsx","../src/components/Card/Card.tsx","../src/components/CompactCard/CompactCard.tsx","../src/components/Dropdown/Dropdown.tsx","../src/components/Input/Input.tsx","../src/components/Block/Block.tsx","../src/components/ReviewCard/ReviewCard.tsx","../src/components/FAQ/FAQ.tsx","../src/components/Benefits/Benefits.tsx","../src/components/Pin/Pin.tsx","../src/components/DateSelector/DateSelector.tsx","../src/hooks/useDebounce.ts","../src/hooks/useResponsive.ts","../src/hooks/useWindowData.ts","../src/hooks/useTranslation.ts","../src/components/DateSelector/WhenContent.tsx","../src/components/DateSelector/DualCalendar.tsx","../src/components/icons/HeartIcon.tsx","../src/components/icons/StarIcon.tsx","../src/components/icons/ChevronLeftIcon.tsx","../src/components/icons/ChevronRightIcon.tsx","../src/components/icons/PinIcon.tsx","../src/utils/formatPrice.ts","../src/utils/formatDate.ts","../src/utils/calculateDiscount.ts"],"sourcesContent":["// @hotelcard/ui - Shared UI Components\n// Version: 0.0.11\n\n// =================================================================\n// CONTEXT / PROVIDER\n// =================================================================\n\nexport {\n HotelCardUIProvider,\n useUIContext,\n type UIContextValue,\n type HotelCardUIProviderProps,\n} from './context';\n\n// =================================================================\n// COMPONENTS\n// =================================================================\n\n// Button\nexport { Button } from './components/Button';\nexport type { ButtonProps } from './components/Button';\n\n// Badge\nexport { Badge } from './components/Badge';\nexport type { BadgeProps } from './components/Badge';\n\n// Rating\nexport { Rating } from './components/Rating';\nexport type { RatingProps } from './components/Rating';\n\n// Divider\nexport { Divider } from './components/Divider';\nexport type { DividerProps } from './components/Divider';\n\n// Chip\nexport { Chip } from './components/Chip';\nexport type { ChipProps, ChipSize, ChipState } from './components/Chip';\n\n// Checkbox\nexport { Checkbox } from './components/Checkbox';\nexport type { CheckboxProps, CheckboxSize } from './components/Checkbox';\n\n// RadioButton\nexport { RadioButton } from './components/RadioButton';\nexport type { RadioButtonProps } from './components/RadioButton';\n\n// SectionHeader\nexport { SectionHeader } from './components/SectionHeader';\nexport type { SectionHeaderProps } from './components/SectionHeader';\n\n// Modal\nexport { Modal } from './components/Modal';\nexport type { ModalProps } from './components/Modal';\n\n// Card\nexport { Card } from './components/Card';\nexport type { CardProps, CardBadge, CardRatingInfo } from './components/Card';\n\n// CompactCard\nexport { CompactCard } from './components/CompactCard';\nexport type { CompactCardProps, CompactCardBadge } from './components/CompactCard';\n\n// Dropdown\nexport { Dropdown } from './components/Dropdown';\nexport type { DropdownProps, DropdownOption } from './components/Dropdown';\n\n// Input\nexport { Input } from './components/Input';\nexport type { InputProps, InputType } from './components/Input';\n\n// Block\nexport { Block } from './components/Block';\nexport type { BlockProps } from './components/Block';\n\n// ReviewCard\nexport { ReviewCard } from './components/ReviewCard';\nexport type { ReviewCardProps } from './components/ReviewCard';\n\n// FAQ\nexport { FAQ } from './components/FAQ';\nexport type { FAQProps, FAQItem } from './components/FAQ';\n\n// Benefits\nexport { Benefits } from './components/Benefits';\nexport type { BenefitsProps, BenefitItem } from './components/Benefits';\n\n// Pin\nexport { Pin } from './components/Pin';\nexport type { PinProps } from './components/Pin';\n\n// DateSelector\nexport { DateSelector, WhenContent, DualCalendar } from './components/DateSelector';\nexport type { DateSelectorProps, DateRange, WhenContentProps } from './components/DateSelector';\n\n// =================================================================\n// ICONS\n// =================================================================\n\nexport { HeartIcon, StarIcon, ChevronLeftIcon, ChevronRightIcon, PinIcon } from './components/icons';\n\n// =================================================================\n// HOOKS\n// =================================================================\n\nexport { useDebounce, useResponsive, useWindowData, useTranslation } from './hooks';\n\n// =================================================================\n// UTILS\n// =================================================================\n\nexport { formatPrice } from './utils';\nexport { formatDate, formatDateRange } from './utils';\nexport { calculateDiscount } from './utils';\n\n// =================================================================\n// TYPES\n// =================================================================\n\nexport type { Hotel } from './types';\nexport type { Booking } from './types';\nexport type { User, Address, Membership } from './types';\nexport type { SearchParams, SearchFilters } from './types';\n","import React, { createContext, useContext, ReactNode } from 'react';\n\nexport interface UIContextValue {\n /** Current locale (e.g., 'de', 'en', 'fr', 'it') */\n locale: string;\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}\n\nconst defaultValue: UIContextValue = {\n locale: 'de',\n currency: 'CHF',\n isDesktop: false,\n};\n\nconst UIContext = createContext<UIContextValue>(defaultValue);\n\nexport interface HotelCardUIProviderProps {\n /** Current locale */\n locale?: string;\n /** Currency code */\n currency?: string;\n /** Whether running on desktop */\n isDesktop?: boolean;\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 children,\n}) => {\n const value: UIContextValue = { locale, currency, isDesktop };\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","import { forwardRef } from 'react';\nimport { ButtonProps } from \"./Button.types\";\nimport './Button.css';\n\n// CSS class prefix to avoid conflicts\nconst cx = (className: string) => `hc-btn-${className}`;\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[] = [cx('button')];\n\n // Link variant\n if (variant === 'link') {\n classes.push(cx('link'));\n classes.push(cx(size));\n return classes.join(' ');\n }\n\n // Icon-only variant\n if (iconOnly) {\n classes.push(cx('icon-only'));\n classes.push(cx(size));\n classes.push(cx(variant));\n return classes.join(' ');\n }\n\n // Standard button\n classes.push(cx('standard'));\n classes.push(cx(size));\n classes.push(cx(variant));\n\n return classes.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={cx('icon-wrapper')}>\n {leftIcon}\n </span>\n )}\n <span className={cx('text-wrapper')}>{children}</span>\n {rightIcon && (\n <span className={cx('icon-wrapper')}>\n {rightIcon}\n </span>\n )}\n </>\n )}\n </button>\n );\n});\n\nButton.displayName = 'Button';\n\nexport { Button };\n","import { BadgeProps } from './Badge.types';\nimport './Badge.css';\n\n// CSS class prefix to avoid conflicts\nconst cx = (className: string) => `hc-badge-${className}`;\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 cx('badge'),\n cx(`badge--${size}`),\n cx(`badge--${colorStyleKey}`),\n className\n ].filter(Boolean).join(' ');\n\n // Build icon classes\n const iconClasses = [\n cx('icon'),\n cx(`icon--${size}`)\n ].join(' ');\n\n // Build text classes\n const textClasses = [\n cx('text'),\n size === 'large' && icon ? cx('text--largeWithIcon') : ''\n ].filter(Boolean).join(' ');\n\n return (\n <div className={badgeClasses}>\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 };\n","import { RatingProps } from './Rating.types';\nimport './Rating.css';\n\n// CSS class prefix to avoid conflicts\nconst cx = (className: string) => `hc-rating-${className}`;\n\n// Full star icon (filled)\nconst 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_full)\">\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 <defs>\n <clipPath id=\"clip0_full\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n);\n\n// Half star icon\nconst 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// Empty star icon (outline only)\nconst 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_empty)\">\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_empty\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n);\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 const renderStars = () => {\n const starClasses = [\n cx('star'),\n cx(`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 = [cx('starsContainer'), className].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n <div className={cx('starContainer')}>\n {renderStars()}\n </div>\n {showValue && (\n <span className={cx('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 = [cx('resultContainer'), className].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n <span className={cx('resultChar')}>N</span>\n <div>\n {renderStars()}\n </div>\n </div>\n );\n }\n\n // Block variant - full review block\n const containerClasses = [cx('blockContainer'), className].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n <div className={cx('blockHeader')}>\n <div className={cx('blockHeaderLeft')}>\n {name && <span className={cx('blockName')}>{name}</span>}\n <div>\n {renderStars()}\n </div>\n </div>\n {date && <span className={cx('blockDate')}>{date}</span>}\n </div>\n {quote && <p className={cx('blockQuote')}>{quote}</p>}\n </div>\n );\n};\n\nRating.displayName = 'Rating';\n\nexport { Rating };\n","import { DividerProps } from './Divider.types';\nimport './Divider.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-divider-${className}`;\n\nconst Divider: React.FC<DividerProps> = ({\n label,\n orientation = 'horizontal',\n className = ''\n}) => {\n const isHorizontal = orientation === 'horizontal';\n\n if (!label) {\n // Clean variant - just the line\n const lineClass = isHorizontal\n ? cx('lineStandalone--horizontal')\n : cx('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 ? cx('container--horizontal')\n : cx('container--vertical');\n\n const lineClass = isHorizontal\n ? cx('line--horizontal')\n : cx('line--vertical');\n\n const containerClasses = [\n cx('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={cx('label')}>{label}</span>\n <div className={lineClass} />\n </div>\n );\n};\n\nDivider.displayName = 'Divider';\n\nexport { Divider };\n","import { ChipProps } from './Chip.types';\nimport './Chip.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-chip-${className}`;\n\n// Close icon SVG\nconst CloseIcon = () => (\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_chip_close)\">\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=\"currentColor\"/>\n </g>\n <defs>\n <clipPath id=\"clip0_chip_close\">\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\n </clipPath>\n </defs>\n </svg>\n);\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 cx('chip'),\n cx(`chip--${size}`),\n cx(`chip--${effectiveState}`),\n className,\n ].filter(Boolean).join(' ');\n\n // Build label classes\n const labelClasses = [cx('label'), cx(`label--${size}`)].join(' ');\n\n // Build count badge classes\n const countBadgeClasses = [cx('countBadge'), cx(`countBadge--${size}`)].join(' ');\n\n const handleClick = () => {\n if (disabled) return;\n\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={cx('closeIcon')} aria-hidden=\"true\">\n <CloseIcon />\n </span>\n )}\n </button>\n );\n};\n\nChip.displayName = 'Chip';\n\nexport { Chip };\n","import { useState } from 'react';\nimport { CheckboxProps } from './Checkbox.types';\nimport './Checkbox.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-checkbox-${className}`;\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 cx('container'),\n disabled && cx('container--disabled'),\n className,\n ].filter(Boolean).join(' ');\n\n // Build checkbox wrapper classes\n const wrapperClasses = [\n cx('wrapper'),\n cx(`wrapper--${size}`),\n ].filter(Boolean).join(' ');\n\n // Build checkbox box classes\n const boxClasses = [\n cx('box'),\n cx(`box--${size}`),\n actualChecked && cx('box--checked'),\n disabled && cx('box--disabled'),\n error && !actualChecked && cx('box--error'),\n isFocused && cx('box--focused'),\n ].filter(Boolean).join(' ');\n\n // Build input classes\n const inputClasses = [\n cx('input'),\n disabled && cx('input--disabled'),\n ].filter(Boolean).join(' ');\n\n // Build checkmark classes\n const checkmarkClasses = [\n cx('checkmark'),\n cx(`checkmark--${size}`),\n actualChecked && cx('checkmark--checked'),\n ].filter(Boolean).join(' ');\n\n // Build label classes\n const labelClasses = [\n cx('label'),\n disabled && cx('label--disabled'),\n error && !disabled && cx('label--error'),\n ].filter(Boolean).join(' ');\n\n return (\n <label className={containerClasses}>\n <div className={wrapperClasses}>\n <div className={boxClasses} />\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, #ffffff)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n {label && <span className={labelClasses}>{label}</span>}\n </label>\n );\n};\n\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox };\n","import React from 'react';\nimport { RadioButtonProps } from './RadioButton.types';\nimport './RadioButton.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-radio-${className}`;\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 cx('container'),\n disabled && cx('container--disabled'),\n className,\n ].filter(Boolean).join(' ');\n\n // Build outer circle classes\n const outerCircleClasses = [\n cx('outerCircle'),\n checked && cx('outerCircle--checked'),\n disabled && cx('outerCircle--disabled'),\n ].filter(Boolean).join(' ');\n\n // Build inner dot classes\n const innerDotClasses = [\n cx('innerDot'),\n checked && cx('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={cx('wrapper')}>\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={cx('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 && (\n <label htmlFor={id} className={cx('label')}>\n {label}\n </label>\n )}\n </div>\n );\n};\n\nRadioButton.displayName = 'RadioButton';\n\nexport { RadioButton };\n","import { SectionHeaderProps } from './SectionHeader.types';\nimport './SectionHeader.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-section-${className}`;\n\n// Chevron right icon\nconst ChevronRightIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n);\n\nconst SectionHeader: React.FC<SectionHeaderProps> = ({\n title,\n showAllLabel,\n onShowAllClick,\n className = '',\n}) => {\n const headerClasses = [cx('header'), className].filter(Boolean).join(' ');\n\n return (\n <div className={headerClasses}>\n <h2 className={cx('title')}>{title}</h2>\n {showAllLabel && onShowAllClick && (\n <button className={cx('showAllButton')} onClick={onShowAllClick}>\n <span>{showAllLabel}</span>\n <ChevronRightIcon />\n </button>\n )}\n </div>\n );\n};\n\nSectionHeader.displayName = 'SectionHeader';\n\nexport { SectionHeader };\n","import React, { useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ModalProps } from './Modal.types';\nimport './Modal.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-modal-${className}`;\n\n// Close icon SVG\nconst CloseIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n <path\n d=\"M0.330469 1.91953C-0.110156 1.47891 -0.110156 0.766406 0.330469 0.330469C0.771094 -0.105469 1.48359 -0.110156 1.91953 0.330469L8.99766 7.40859L16.0758 0.330469C16.5164 -0.110156 17.2289 -0.110156 17.6648 0.330469C18.1008 0.771094 18.1055 1.48359 17.6648 1.91953L10.5867 8.99766L17.6648 16.0758C18.1055 16.5164 18.1055 17.2289 17.6648 17.6648C17.2242 18.1008 16.5117 18.1055 16.0758 17.6648L8.99766 10.5867L1.91953 17.6648C1.47891 18.1055 0.766406 18.1055 0.330469 17.6648C-0.105469 17.2242 -0.110156 16.5117 0.330469 16.0758L7.40859 8.99766L0.330469 1.91953Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nconst Modal: React.FC<ModalProps> = ({\n isOpen,\n onClose,\n children,\n width = 'var(--grid-tablet-device-width, 600px)',\n className = '',\n showCloseButton = true,\n disableBackdropClick = false,\n}) => {\n const modalRef = useRef<HTMLDivElement>(null);\n\n // Handle escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = '';\n };\n }, [isOpen, onClose]);\n\n // Handle click outside\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget && !disableBackdropClick) {\n onClose();\n }\n };\n\n if (!isOpen) return null;\n\n const modalClasses = [cx('content'), className].filter(Boolean).join(' ');\n\n const modalContent = (\n <div className={cx('backdrop')} onClick={handleBackdropClick}>\n <div\n ref={modalRef}\n className={modalClasses}\n style={{ maxWidth: width }}\n >\n {showCloseButton && (\n <button\n className={cx('closeButton')}\n onClick={onClose}\n aria-label=\"Close modal\"\n >\n <CloseIcon />\n </button>\n )}\n {children}\n </div>\n </div>\n );\n\n // Check if we're in a browser environment\n if (typeof document !== 'undefined') {\n return createPortal(modalContent, document.body);\n }\n\n return modalContent;\n};\n\nModal.displayName = 'Modal';\n\nexport { Modal };\n","import React from 'react';\nimport { CardProps } from './Card.types';\nimport { Badge } from '../Badge';\nimport './Card.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-card-${className}`;\n\n// Star icon - 9x9\nconst 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_card_star)\">\n <path\n 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\"\n fill=\"#1F2937\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_card_star\">\n <rect width=\"8\" height=\"8\" fill=\"white\" transform=\"translate(0.800049 0.199951)\" />\n </clipPath>\n </defs>\n </svg>\n);\n\n// Comment bubble icon for rating info\nconst CommentIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 36 38\" fill=\"#478EFA\" className={cx('ratingSvg')}>\n <path d=\"M4 0C1.79086 0 0 1.79086 0 4V32V38L9 32H32C34.2091 32 36 30.2091 36 28V0H4Z\" />\n </svg>\n);\n\n// Default placeholder image\nconst PLACEHOLDER =\n '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// Helper to repeat elements\nconst repeat = (n: number, renderFn: (i: number) => React.ReactNode) =>\n Array.from({ length: n }, (_, i) => renderFn(i));\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 variant = 'mobile',\n hasRating,\n withPadding = false,\n withHeight = false,\n ratingInfo,\n context,\n swissLodgeLabel = 'Swiss Lodge',\n}) => {\n const isDesktop = variant === 'desktop';\n\n // Build dynamic class names\n const containerClasses = [\n cx('card'),\n cx(`card--${variant}`),\n onClick && cx('card--clickable'),\n withPadding && cx('card--withPadding'),\n withHeight && cx('card--withHeight'),\n className,\n ].filter(Boolean).join(' ');\n\n const starsRowClasses = [\n cx('starsRow'),\n context === 'hotel-deals' && cx('starsRow--fixed'),\n ].filter(Boolean).join(' ');\n\n const labelClasses = [\n cx('label'),\n isDesktop ? cx('label--desktop') : cx('label--mobile'),\n context === 'hotel-deals' && cx('label--hotelDeals'),\n !isDesktop && context !== 'hotel-deals' && cx('label--mobileOverflow'),\n !hasRating && cx('label--noRating'),\n ].filter(Boolean).join(' ');\n\n const priceClasses = [\n cx('price'),\n context === 'hotel-deals' && hasRating && cx('price--hotelDealsWithRating'),\n context === 'hotel-deals' && !hasRating && cx('price--hotelDealsNoRating'),\n context !== 'hotel-deals' && !hasRating && cx('price--noRating'),\n context !== 'hotel-deals' && hasRating && cx('price--regularWithRating'),\n ].filter(Boolean).join(' ');\n\n const displayImage = image || PLACEHOLDER;\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n };\n\n // Render rating info section\n const renderRatingInfo = () => {\n if (!ratingInfo) return null;\n return (\n <span className={cx('ratingInfo')}>\n <CommentIcon />\n <span className={cx('ratingLabel')}>{ratingInfo.label}</span>\n <span className={cx('ratingValue')}>{ratingInfo.value}</span>\n </span>\n );\n };\n\n return (\n <div\n className={containerClasses}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n >\n <div className={cx('imageContainer')}>\n <img\n src={displayImage}\n alt={imageAlt}\n className={cx('image')}\n loading=\"lazy\"\n />\n <div className={cx('shadowOverlay')} />\n {badge && (\n <div className={cx('badgeWrapper')}>\n <Badge\n color={badge.variant || 'primary'}\n size={isDesktop ? 'large' : 'small'}\n >\n {badge.text}\n </Badge>\n </div>\n )}\n </div>\n\n <div className={cx('textContainer')}>\n {/* Stars row */}\n <div className={starsRowClasses}>\n {stars !== undefined && stars > 0 ? (\n <>\n {/* Swiss Lodge (rating = 6) */}\n {stars === 6 ? (\n <span className={cx('swissLodge')}>{swissLodgeLabel}</span>\n ) : (\n <>\n {isDesktop ? (\n <>\n <div className={cx('starsContainer')}>\n {repeat(Math.floor(stars), (i) => (\n <StarIcon key={i} />\n ))}\n {isSuperior && (\n <span className={cx('superiorBadge')}>(s)</span>\n )}\n </div>\n <div>{renderRatingInfo()}</div>\n </>\n ) : (\n <>\n <div className={cx('starsContainer')}>\n {repeat(Math.floor(stars), (i) => (\n <StarIcon key={i} />\n ))}\n </div>\n {isSuperior && (\n <span className={cx('superiorBadge')}>(s)</span>\n )}\n {renderRatingInfo()}\n </>\n )}\n </>\n )}\n </>\n ) : (\n <div className={cx('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 { CompactCardProps } from './CompactCard.types';\nimport './CompactCard.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-compact-${className}`;\n\n// Star icon - 9x9 matching hotelcard-ui exactly\nconst 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_compact_star)\">\n <path\n 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\"\n fill=\"#1F2937\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_compact_star\">\n <rect width=\"8\" height=\"8\" fill=\"white\" transform=\"translate(0.800049 0.199951)\" />\n </clipPath>\n </defs>\n </svg>\n);\n\n// Default placeholder if no image\nconst PLACEHOLDER =\n '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// Helper to repeat elements\nconst repeat = (n: number, renderFn: (i: number) => React.ReactNode) =>\n Array.from({ length: n }, (_, i) => renderFn(i));\n\nconst CompactCard: React.FC<CompactCardProps> = ({\n image,\n imageAlt = '',\n label,\n price,\n stars,\n isSuperior = false,\n badge,\n onClick,\n className = '',\n swissLodgeLabel = 'Swiss Lodge',\n}) => {\n // Determine if stars are present for layout adjustments\n const hasRating = stars !== undefined && stars > 0;\n\n // Build dynamic class names\n const containerClasses = [\n cx('card'),\n onClick && cx('card--clickable'),\n className,\n ].filter(Boolean).join(' ');\n\n const labelClasses = [\n cx('label'),\n !hasRating && cx('label--noRating'),\n ].filter(Boolean).join(' ');\n\n const priceClasses = [\n cx('price'),\n !hasRating && cx('price--noRating'),\n ].filter(Boolean).join(' ');\n\n // Display image or placeholder\n const displayImage = image || PLACEHOLDER;\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (onClick && (e.key === 'Enter' || e.key === ' ')) {\n e.preventDefault();\n onClick();\n }\n };\n\n return (\n <div\n className={containerClasses}\n onClick={onClick}\n onKeyDown={handleKeyDown}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n >\n <div className={cx('imageContainer')}>\n <img\n src={displayImage}\n alt={imageAlt}\n className={cx('image')}\n loading=\"lazy\"\n />\n <div className={cx('shadowOverlay')} />\n {badge && (\n <div className={cx('badgeWrapper')}>\n <span\n className={`${cx('badge')} ${\n badge.variant === 'secondary' ? cx('badge--secondary') : cx('badge--primary')\n }`}\n >\n {badge.text}\n </span>\n </div>\n )}\n </div>\n\n <div className={cx('textContainer')}>\n {/* Always render stars row to maintain alignment */}\n <div className={cx('starsRow')}>\n {stars !== undefined && stars > 0 ? (\n <>\n {/* Check for Swiss Lodge (rating = 6) */}\n {stars === 6 ? (\n <span className={cx('swissLodge')}>{swissLodgeLabel}</span>\n ) : (\n <>\n <div className={cx('starsContainer')}>\n {repeat(Math.floor(stars), (i) => (\n <StarIcon key={i} />\n ))}\n </div>\n {isSuperior && <span className={cx('superiorBadge')}>(s)</span>}\n </>\n )}\n </>\n ) : (\n // Empty space to maintain alignment\n <div className={cx('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\nCompactCard.displayName = 'CompactCard';\n\nexport { CompactCard };\n","import React, { useState, useRef, useEffect } from 'react';\nimport { DropdownProps } from './Dropdown.types';\nimport './Dropdown.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-dropdown-${className}`;\n\n// Chevron icon\nconst ChevronIcon = () => (\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);\n\nconst Dropdown: React.FC<DropdownProps> = ({\n options = [],\n disabled = false,\n error = false,\n defaultValue,\n value,\n onChange,\n className = '',\n name,\n id,\n placeholder = 'Select...',\n}) => {\n const [localValue, setLocalValue] = useState(defaultValue || '');\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const actualValue = value !== undefined ? value : localValue;\n const selectedLabel = options.find((o) => o.value === actualValue)?.label || placeholder;\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleSelect = (selectedValue: string) => {\n if (value === undefined) {\n setLocalValue(selectedValue);\n }\n onChange?.(selectedValue);\n setIsOpen(false);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n setIsOpen(!isOpen);\n } else if (event.key === 'Escape') {\n setIsOpen(false);\n }\n };\n\n // Build container classes\n const containerClasses = [\n cx('container'),\n disabled && cx('container--disabled'),\n className,\n ].filter(Boolean).join(' ');\n\n // Build button classes\n const buttonClasses = [\n cx('button'),\n error && cx('button--error'),\n isFocused && !error && cx('button--focus'),\n disabled && cx('button--disabled'),\n isOpen && cx('button--open'),\n ].filter(Boolean).join(' ');\n\n // Build chevron classes\n const chevronClasses = [\n cx('chevron'),\n isOpen && cx('chevron--open'),\n ].filter(Boolean).join(' ');\n\n // Build dropdown list classes\n const listClasses = [\n cx('list'),\n isOpen && cx('list--open'),\n ].filter(Boolean).join(' ');\n\n return (\n <div ref={dropdownRef} className={containerClasses}>\n <div\n className={buttonClasses}\n tabIndex={disabled ? -1 : 0}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n onFocus={() => !disabled && setIsFocused(true)}\n onBlur={() => setIsFocused(false)}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n aria-disabled={disabled}\n >\n <span>{selectedLabel}</span>\n <span className={chevronClasses}>\n <ChevronIcon />\n </span>\n </div>\n\n <ul role=\"listbox\" className={listClasses}>\n {options.map((option) => (\n <li\n key={option.value}\n role=\"option\"\n aria-selected={actualValue === option.value}\n onClick={() => handleSelect(option.value)}\n className={`${cx('option')} ${\n actualValue === option.value ? cx('option--selected') : ''\n }`}\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={actualValue}\n onChange={(e) => handleSelect(e.target.value)}\n disabled={disabled}\n className={cx('hiddenSelect')}\n >\n {!actualValue && <option value=\"\">{placeholder}</option>}\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 };\n","import React, { useState, useRef } from 'react';\nimport { InputProps } from './Input.types';\nimport './Input.css';\n\n// CSS class prefix\nconst cx = (className: string) => `hc-input-${className}`;\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 wrapperClassName = '',\n name,\n id,\n required = false,\n autoComplete,\n autoFocus = false,\n readOnly = false,\n inputProps,\n}) => {\n const [localValue, setLocalValue] = useState(defaultValue);\n const [isFocused, setIsFocused] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const actualValue = value !== undefined ? value : localValue;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n if (value === undefined) {\n setLocalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n const handleFocus = () => {\n setIsFocused(true);\n onFocus?.();\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n onBlur?.();\n };\n\n // Build container classes\n const containerClasses = [cx('container'), className].filter(Boolean).join(' ');\n\n // Build label classes\n const labelClasses = [\n cx('label'),\n (disabled || readOnly) && cx('label--disabled'),\n ].filter(Boolean).join(' ');\n\n // Build wrapper classes\n const wrapperClasses = [\n cx('wrapper'),\n isFocused && cx('wrapper--focus'),\n error && cx('wrapper--error'),\n (disabled || readOnly) && cx('wrapper--disabled'),\n wrapperClassName,\n ].filter(Boolean).join(' ');\n\n // Build input classes\n const inputClasses = [\n cx('input'),\n (disabled || readOnly) && cx('input--disabled'),\n inputClassName,\n ].filter(Boolean).join(' ');\n\n // Build helper classes\n const helperClasses = [\n cx('helper'),\n error && cx('helper--error'),\n (disabled || readOnly) && cx('helper--disabled'),\n ].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n {label && (\n <label htmlFor={id} className={labelClasses}>\n {label}\n </label>\n )}\n\n <div\n className={wrapperClasses}\n onClick={() => !disabled && !readOnly && inputRef.current?.focus()}\n >\n {leftIcon && <div className={cx('icon')}>{leftIcon}</div>}\n\n {prefix && <div className={cx('prefix')}>{prefix}</div>}\n\n <input\n ref={inputRef}\n type={type}\n id={id}\n name={name}\n value={actualValue}\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 {helper && <div className={helperClasses}>{helper}</div>}\n </div>\n );\n};\n\nInput.displayName = 'Input';\n\nexport { Input };\n","import { ReactNode } from 'react';\nimport './Block.css';\n\nconst cx = (className: string) => `hc-block-${className}`;\n\nexport interface BlockProps {\n /** Type of block to render */\n variant?: 'icon' | 'image';\n /** Icon or image to display */\n visual?: ReactNode;\n /** Label/title text */\n label: string;\n /** Description text (for icon variant) */\n description?: string;\n /** Style variant for icon blocks */\n style?: 'primary' | 'secondary';\n /** Click handler */\n onClick?: () => void;\n /** Whether to show arrow (for image variant) */\n showArrow?: boolean;\n /** Additional CSS class names */\n className?: string;\n}\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 const containerClasses = [\n cx('icon'),\n onClick && cx('icon--clickable'),\n className\n ].filter(Boolean).join(' ');\n\n const iconContainerClass = style === 'primary'\n ? cx('icon-container--primary')\n : cx('icon-container--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={cx('text-container')}>\n <div className={cx('icon-label')}>{label}</div>\n {description && <div className={cx('icon-description')}>{description}</div>}\n </div>\n </div>\n );\n }\n\n // Image Block variant\n const containerClasses = [\n cx('image'),\n onClick && cx('image--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={cx('image-container')}>\n {visual}\n </div>\n <div className={cx('footer')}>\n <span className={cx('image-label')}>{label}</span>\n {showArrow && (\n <span className={cx('arrow')}>→</span>\n )}\n </div>\n </div>\n );\n};\n\nBlock.displayName = 'Block';\n\nexport { Block };\n","import { Rating } from '../Rating';\nimport './ReviewCard.css';\n\nconst cx = (className: string) => `hc-review-${className}`;\n\nexport interface ReviewCardProps {\n /** Reviewer's name */\n name: string;\n /** Review date */\n date: string;\n /** Rating value (1-5) */\n rating: number;\n /** Review text/quote */\n quote: string;\n /** Additional CSS classes */\n className?: string;\n}\n\nconst ReviewCard: React.FC<ReviewCardProps> = ({\n name,\n date,\n rating,\n quote,\n className\n}) => {\n const containerClasses = [cx('container'), className].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n <div className={cx('name')}>{name}</div>\n <div className={cx('frame')}>\n <div className={cx('stars')}>\n <Rating variant=\"stars\" value={rating} size=\"medium\" />\n </div>\n <div className={cx('quote')}>{quote}</div>\n </div>\n <div className={cx('date')}>{date}</div>\n </div>\n );\n};\n\nReviewCard.displayName = 'ReviewCard';\n\nexport { ReviewCard };\n","import { useState } from 'react';\nimport { Button } from '../Button';\nimport './FAQ.css';\n\nconst cx = (className: string) => `hc-faq-${className}`;\n\nexport interface FAQItem {\n question: string;\n answer: string;\n}\n\nexport interface FAQProps {\n items: FAQItem[];\n defaultOpenIndex?: number | null;\n allowMultiple?: boolean;\n className?: string;\n}\n\nconst ChevronIcon = ({ isOpen }: { isOpen: boolean }) => {\n const iconClasses = [\n cx('chevron'),\n isOpen && cx('chevron--open')\n ].filter(Boolean).join(' ');\n\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={iconClasses}\n >\n <path\n d=\"M6 9L12 15L18 9\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n};\n\nconst FAQ: React.FC<FAQProps> = ({\n items,\n defaultOpenIndex = null,\n allowMultiple = false,\n className\n}) => {\n const [openIndices, setOpenIndices] = useState<Set<number>>(\n defaultOpenIndex !== null ? new Set([defaultOpenIndex]) : new Set()\n );\n\n const toggleItem = (index: number) => {\n setOpenIndices(prev => {\n const newSet = new Set(prev);\n if (newSet.has(index)) {\n newSet.delete(index);\n } else {\n if (!allowMultiple) {\n newSet.clear();\n }\n newSet.add(index);\n }\n return newSet;\n });\n };\n\n const containerClasses = [cx('container'), className].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n {items.map((item, index) => {\n const isOpen = openIndices.has(index);\n const answerClasses = isOpen\n ? cx('answer--open')\n : cx('answer');\n\n return (\n <div key={index} className={cx('item')}>\n <Button\n variant=\"link\"\n size=\"medium\"\n className={cx('question-btn')}\n onClick={() => toggleItem(index)}\n aria-expanded={isOpen}\n aria-controls={`faq-answer-${index}`}\n rightIcon={\n <div className={cx('icon-container')}>\n <ChevronIcon isOpen={isOpen} />\n </div>\n }\n >\n <span className={cx('question-text')}>{item.question}</span>\n </Button>\n <div id={`faq-answer-${index}`} className={answerClasses}>\n <p className={cx('answer-text')}>{item.answer}</p>\n </div>\n </div>\n );\n })}\n </div>\n );\n};\n\nFAQ.displayName = 'FAQ';\n\nexport { FAQ };\n","import { Button } from '../Button';\nimport './Benefits.css';\n\nconst cx = (className: string) => `hc-benefits-${className}`;\n\nexport interface BenefitItem {\n icon?: string;\n title: string;\n description?: string;\n}\n\nexport interface BenefitsProps {\n title?: string;\n subtitle?: string;\n benefits?: BenefitItem[];\n contactTitle?: string;\n contactDescription?: string;\n contactButtonText?: string;\n onContactClick?: () => void;\n className?: string;\n}\n\nconst Benefits: React.FC<BenefitsProps> = ({\n title = 'Ihre Vorteile mit HotelCard',\n subtitle = 'Mit HotelCard sparen Sie bei jedem Aufenthalt',\n benefits = [\n {\n title: 'Über 500 Hotels',\n description: 'Grosse Auswahl in der ganzen Schweiz'\n },\n {\n title: 'Bis zu 50% Rabatt',\n description: 'Exklusive Mitglieder-Preise'\n },\n {\n title: 'Kein Buchungszwang',\n description: 'Buchen Sie, wann Sie möchten'\n },\n {\n title: 'Kostenlose Stornierung',\n description: 'Flexible Buchungsbedingungen'\n }\n ],\n contactTitle = 'Haben Sie Fragen?',\n contactDescription = 'Unser Kundenservice hilft Ihnen gerne weiter',\n contactButtonText = 'Kontakt aufnehmen',\n onContactClick,\n className\n}) => {\n const sectionClasses = [cx('section'), className].filter(Boolean).join(' ');\n\n return (\n <section className={sectionClasses}>\n <div className={cx('container')}>\n <div className={cx('header')}>\n <h2 className={cx('title')}>{title}</h2>\n {subtitle && <p className={cx('subtitle')}>{subtitle}</p>}\n </div>\n\n <div className={cx('grid')}>\n {benefits.map((benefit, index) => (\n <div key={index} className={cx('item')}>\n <h3 className={cx('item-title')}>{benefit.title}</h3>\n {benefit.description && (\n <p className={cx('item-description')}>{benefit.description}</p>\n )}\n </div>\n ))}\n </div>\n\n {contactTitle && (\n <div className={cx('contact-card')}>\n <h3 className={cx('contact-title')}>{contactTitle}</h3>\n {contactDescription && (\n <p className={cx('contact-description')}>{contactDescription}</p>\n )}\n {contactButtonText && (\n <Button\n variant=\"secondary\"\n size=\"medium\"\n onClick={onContactClick}\n className={cx('contact-btn')}\n >\n {contactButtonText}\n </Button>\n )}\n </div>\n )}\n </div>\n </section>\n );\n};\n\nBenefits.displayName = 'Benefits';\n\nexport { Benefits };\n","import React, { forwardRef } from 'react';\nimport './Pin.css';\n\nconst cx = (className: string) => `hc-pin-${className}`;\n\nexport interface PinProps {\n /** Pin variant - 'price' shows currency/price, 'hotel' shows house icon */\n variant?: 'price' | 'hotel';\n /** Whether the hotel has been viewed (secondary style) */\n viewed?: boolean;\n /** Currency code to display */\n currency?: string;\n /** Price to display */\n price?: number | string;\n /** Whether to show the favorite (heart) icon */\n showFavorite?: boolean;\n /** Whether the pin is disabled */\n disabled?: boolean;\n /** Click handler */\n onClick?: () => void;\n /** Additional class name */\n className?: string;\n}\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 cx('pin'),\n cx(styleVariant),\n variant === 'hotel' && cx('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={cx('body')}>\n {variant === 'price' ? (\n <>\n <span className={cx('currency')}>{currency}</span>\n <span className={cx('price')}>{formattedPrice}</span>\n {showFavorite && (\n <div className={cx('favorite-container')}>\n <HeartIcon className={cx('favorite-icon')} />\n </div>\n )}\n </>\n ) : (\n <HomeIcon className={cx('hotel-icon')} />\n )}\n </div>\n\n {/* Pointer arrow at bottom */}\n <div className={cx('pointer')}>\n <div className={cx('pointer-inner')} />\n </div>\n </button>\n );\n }\n);\n\nPin.displayName = 'Pin';\n\nexport { Pin };\n","import React, { useState, useRef, useEffect, useMemo } from 'react';\nimport { useTranslation, useWindowData, useResponsive } from '../../hooks';\nimport { WhenContent, type DateRange } from './WhenContent';\nimport './DateSelector.css';\n\n// CSS class prefix\nconst cx = (name: string) => `hc-date-selector${name ? `__${name}` : ''}`;\nconst cxMod = (base: string, mod: string) => `hc-date-selector__${base}--${mod}`;\n\n// Map app locale to BCP 47 locale tag\nconst getDateLocale = (locale: string): string => {\n const localeMap: Record<string, string> = {\n de: 'de-CH',\n en: 'en-GB',\n fr: 'fr-CH',\n it: 'it-CH',\n };\n return localeMap[locale] || 'de-CH';\n};\n\n// Default calendar icon\nconst CalendarIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path\n d=\"M19 4H18V2H16V4H8V2H6V4H5C3.9 4 3 4.9 3 6V20C3 21.1 3.9 22 5 22H19C20.1 22 21 21.1 21 20V6C21 4.9 20.1 4 19 4ZM19 20H5V9H19V20Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport interface DateSelectorProps {\n initialDateRange?: DateRange;\n initialMonthFilter?: string[] | null;\n onChange?: (dateRange: DateRange | null) => void;\n onMonthFilterChange?: (months: string[] | null) => void;\n /** Called when dropdown closes - receives current values */\n onClose?: (dateRange: DateRange | null, monthFilter: string[] | null) => void;\n disabled?: boolean;\n className?: string;\n icon?: React.ReactNode;\n}\n\n/**\n * DateSelector - Date range and flexible month picker\n *\n * Features:\n * - Calendar for specific date range\n * - Month chips for flexible dates\n * - \"Anytime\" option\n * - Desktop: centered dropdown\n * - Mobile: bottom sheet\n */\nconst DateSelector: React.FC<DateSelectorProps> = ({\n initialDateRange = { start: null, end: null },\n initialMonthFilter = null,\n onChange,\n onMonthFilterChange,\n onClose,\n disabled = false,\n className,\n icon,\n}) => {\n const { t } = useTranslation();\n const { locale } = useWindowData();\n const { isDesktop } = useResponsive();\n const dateLocale = getDateLocale(locale);\n\n const [dateRange, setDateRange] = useState<DateRange>(initialDateRange);\n const [isOpen, setIsOpen] = useState(false);\n const [selectedMonths, setSelectedMonths] = useState<string[]>(initialMonthFilter || []);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Sync state when parent changes\n useEffect(() => {\n setDateRange((prev) => {\n if (prev.start === initialDateRange.start && prev.end === initialDateRange.end) {\n return prev;\n }\n return initialDateRange;\n });\n\n setSelectedMonths((prev) => {\n const next = initialMonthFilter || [];\n if (prev.length === next.length && prev.every((m, i) => m === next[i])) {\n return prev;\n }\n return next;\n });\n }, [initialDateRange.start, initialDateRange.end, initialMonthFilter]);\n\n // Close dropdown on outside click\n useEffect(() => {\n if (!isOpen) return;\n\n const handlePointerDown = (event: PointerEvent) => {\n if (!dropdownRef.current) return;\n\n if (!dropdownRef.current.contains(event.target as Node)) {\n const newDateRange = (dateRange.start && dateRange.end) ? dateRange : null;\n const newMonthFilter = selectedMonths.length ? selectedMonths : null;\n\n onChange?.(newDateRange);\n onMonthFilterChange?.(newMonthFilter);\n setIsOpen(false);\n onClose?.(newDateRange, newMonthFilter);\n }\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n return () => document.removeEventListener('pointerdown', handlePointerDown);\n }, [isOpen, dateRange, selectedMonths, onChange, onMonthFilterChange, onClose]);\n\n // Generate months for display\n const months = useMemo(() => {\n const now = new Date();\n return Array.from({ length: 12 }, (_, i) => {\n const date = new Date(now.getFullYear(), now.getMonth() + i, 1);\n return {\n label: date.toLocaleDateString(dateLocale, { month: 'long' }),\n year: date.getFullYear(),\n value: `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}`,\n };\n });\n }, [dateLocale]);\n\n // Display label\n const formatDateDisplay = () => {\n if (dateRange.start && dateRange.end) {\n const format = (d: string) =>\n new Date(d).toLocaleDateString(dateLocale, { month: 'short', day: 'numeric' });\n return `${format(dateRange.start)} - ${format(dateRange.end)}`;\n }\n\n if (selectedMonths.length === 1) {\n const month = months.find((m) => m.value === selectedMonths[0]);\n return month ? `${month.label} ${month.year}` : t('search:label.flexible', {}, 'Flexible');\n }\n\n if (selectedMonths.length > 1) {\n return t('search:date_selector.months_selected', { count: selectedMonths.length }, `${selectedMonths.length} months`);\n }\n\n return t('search:label.flexible', {}, 'Flexible');\n };\n\n const handleDateRangeChange = (range: DateRange | null) => {\n setDateRange(range ?? { start: null, end: null });\n };\n\n const handleMonthFilterChange = (months: string[] | null) => {\n setSelectedMonths(months || []);\n };\n\n const handleApply = () => {\n if (dateRange.start && dateRange.end) {\n onChange?.(dateRange);\n } else {\n onChange?.(null);\n }\n onMonthFilterChange?.(selectedMonths.length ? selectedMonths : null);\n setIsOpen(false);\n };\n\n const handleBackdropClick = () => {\n const newDateRange = (dateRange.start && dateRange.end) ? dateRange : null;\n const newMonthFilter = selectedMonths.length ? selectedMonths : null;\n\n onChange?.(newDateRange);\n onMonthFilterChange?.(newMonthFilter);\n setIsOpen(false);\n onClose?.(newDateRange, newMonthFilter);\n };\n\n const buttonClasses = [\n cx('button'),\n disabled && cxMod('button', 'disabled'),\n className,\n ].filter(Boolean).join(' ');\n\n const dropdownClasses = [\n cx('dropdown'),\n isOpen && cxMod('dropdown', 'open'),\n !isDesktop && cxMod('dropdown', 'mobile'),\n ].filter(Boolean).join(' ');\n\n return (\n <div ref={dropdownRef} className={cx('')}>\n <button\n type=\"button\"\n className={buttonClasses}\n onClick={() => !disabled && setIsOpen((v) => !v)}\n disabled={disabled}\n >\n <span className={cx('icon')}>{icon || <CalendarIcon />}</span>\n <span className={cx('label')}>{formatDateDisplay()}</span>\n </button>\n\n {/* Backdrop */}\n {isOpen && (\n <div className={cx('backdrop')} onClick={handleBackdropClick} aria-hidden=\"true\" />\n )}\n\n <div className={dropdownClasses}>\n <WhenContent\n initialDateRange={dateRange}\n initialMonthFilter={selectedMonths.length ? selectedMonths : null}\n onChange={handleDateRangeChange}\n onMonthFilterChange={handleMonthFilterChange}\n variant=\"dropdown\"\n showApplyButton\n onApply={handleApply}\n />\n </div>\n </div>\n );\n};\n\nDateSelector.displayName = 'DateSelector';\n\nexport { DateSelector };\nexport type { DateRange };\n","import { useState, useEffect } from 'react';\n\nexport const useDebounce = <T>(value: T, delay: number): T => {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n};\n","import { useState, useEffect } from 'react';\n\n/**\n * useResponsive - Detect responsive breakpoints\n *\n * Automatically detects screen size and updates when window resizes.\n * Works without HotelCardUIProvider - uses window.innerWidth detection.\n *\n * Breakpoints:\n * - Desktop: >= 1024px\n * - Mobile: < 1024px\n *\n * @example\n * ```tsx\n * const { isDesktop } = useResponsive();\n *\n * return isDesktop ? <DesktopView /> : <MobileView />;\n * ```\n */\nexport const useResponsive = () => {\n const [width, setWidth] = useState<number>(\n typeof window !== 'undefined' ? window.innerWidth : 1024\n );\n\n useEffect(() => {\n const handleResize = () => {\n setWidth(window.innerWidth);\n };\n\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return {\n isDesktop: width >= 1024,\n };\n};\n","import { useUIContext } from '../context';\n\n/**\n * useWindowData - Get locale and currency from UI context\n *\n * Returns locale and currency from the HotelCardUIProvider context.\n * Defaults: locale='de', currency='CHF'\n *\n * @example\n * ```tsx\n * const { locale, currency } = useWindowData();\n * ```\n */\nexport const useWindowData = () => {\n const { locale, currency } = useUIContext();\n return { locale, currency };\n};\n","import { useTranslation as useI18nTranslation } from 'react-i18next';\n\ntype TranslateFunction = (key: string, options?: Record<string, unknown>, fallback?: string) => string;\n\n/**\n * useTranslation - Wrapper around react-i18next useTranslation\n *\n * Provides translation function for UI components.\n * Consuming apps must have react-i18next configured.\n *\n * @example\n * ```tsx\n * const { t } = useTranslation();\n * return <span>{t('search:label.dates')}</span>;\n * ```\n */\nexport const useTranslation = (namespace?: string | string[]) => {\n const { t: i18nT, i18n } = useI18nTranslation(namespace);\n\n // Simple wrapper that converts to string and supports fallback\n // Using 'as unknown as string' to work around react-i18next's complex type signature\n const t: TranslateFunction = (key, options, fallback) => {\n const result = (i18nT as (k: string, opts?: object) => unknown)(key, options ?? {});\n const resultStr = String(result);\n\n // If translation returns the key itself, use fallback if provided\n if (resultStr === key && fallback !== undefined) {\n return fallback;\n }\n return resultStr;\n };\n\n return { t, i18n };\n};\n","import React, { useState, useEffect } from 'react';\nimport { useWindowData, useResponsive } from '../../hooks';\nimport { Button } from '../Button';\nimport { DualCalendar } from './DualCalendar';\nimport './WhenContent.css';\n\n// CSS class prefix\nconst cx = (name: string) => `hc-when-content${name ? `__${name}` : ''}`;\nconst cxMod = (base: string, mod: string) => `hc-when-content__${base}--${mod}`;\n\n// Map app locale to BCP 47 locale tag\nconst getDateLocale = (locale: string): string => {\n const localeMap: Record<string, string> = {\n de: 'de-CH',\n en: 'en-GB',\n fr: 'fr-CH',\n it: 'it-CH',\n };\n return localeMap[locale] || 'de-CH';\n};\n\nexport interface DateRange {\n start: string | null;\n end: string | null;\n}\n\nexport interface WhenContentLabels {\n /** \"When\" section title (expanded variant only) */\n when?: string;\n /** \"Dates\" tab label */\n dates?: string;\n /** \"Flexible\" tab label */\n flexible?: string;\n /** \"Apply\" button label */\n apply?: string;\n /** \"Select months\" heading */\n selectMonths?: string;\n /** \"Anytime\" button label */\n anytime?: string;\n}\n\nexport interface WhenContentProps {\n /** Initial date range */\n initialDateRange?: DateRange;\n /** Initial month filter selection */\n initialMonthFilter?: string[] | null;\n /** Called when date range changes */\n onChange?: (dateRange: DateRange | null) => void;\n /** Called when month filter changes */\n onMonthFilterChange?: (months: string[] | null) => void;\n /** Display variant: 'dropdown' for desktop, 'expanded' for mobile modal */\n variant?: 'dropdown' | 'expanded';\n /** Show apply button (desktop dropdown) */\n showApplyButton?: boolean;\n /** Called when apply is clicked */\n onApply?: () => void;\n /** Additional class name */\n className?: string;\n /** Labels for all text content - consuming app provides translations */\n labels?: WhenContentLabels;\n /** Override locale for date formatting (defaults to context locale) */\n locale?: string;\n}\n\nconst defaultLabels: Required<WhenContentLabels> = {\n when: 'When',\n dates: 'Dates',\n flexible: 'Flexible',\n apply: 'Apply',\n selectMonths: 'Select months',\n anytime: 'Anytime',\n};\n\n/**\n * WhenContent - Shared date/time selection UI\n *\n * Features:\n * - Segmented control (Dates/Flexible tabs)\n * - Calendar view for specific date range selection\n * - Month chips grid for flexible month selection\n * - \"Anytime\" option for no date filter\n */\nexport const WhenContent: React.FC<WhenContentProps> = ({\n initialDateRange = { start: null, end: null },\n initialMonthFilter = null,\n onChange,\n onMonthFilterChange,\n variant = 'dropdown',\n showApplyButton = true,\n onApply,\n className = '',\n labels: labelsProp,\n locale: localeProp,\n}) => {\n const { locale: contextLocale } = useWindowData();\n const { isDesktop } = useResponsive();\n\n const locale = localeProp || contextLocale;\n const dateLocale = getDateLocale(locale);\n const labels = { ...defaultLabels, ...labelsProp };\n\n const [dateRange, setDateRange] = useState<DateRange>(initialDateRange);\n const [mode, setMode] = useState<'anytime' | 'dates'>(\n initialDateRange.start ? 'dates' : 'anytime'\n );\n\n const selectedMonths = initialMonthFilter || [];\n const isAnytimeSelected = selectedMonths.length === 0;\n\n // Sync when parent changes filters\n useEffect(() => {\n if (initialDateRange.start || initialDateRange.end) {\n setDateRange(initialDateRange);\n setMode('dates');\n } else {\n setDateRange(initialDateRange);\n if (initialMonthFilter && initialMonthFilter.length > 0) {\n setMode('anytime');\n }\n }\n }, [initialDateRange, initialMonthFilter]);\n\n // Generate 12 months starting from current month\n const generateMonths = () => {\n const months = [];\n const now = new Date();\n\n for (let i = 0; i < 12; i++) {\n const date = new Date(now.getFullYear(), now.getMonth() + i, 1);\n months.push({\n label: date.toLocaleDateString(dateLocale, { month: 'long' }),\n year: date.getFullYear(),\n value: `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}`,\n disabled: false,\n });\n }\n\n return months;\n };\n\n const months = generateMonths();\n\n const handleAnytimeClick = () => {\n setDateRange({ start: null, end: null });\n onChange?.(null);\n onMonthFilterChange?.(null);\n };\n\n const handleMonthToggle = (monthValue: string) => {\n const newSelectedMonths = selectedMonths.includes(monthValue)\n ? selectedMonths.filter((m) => m !== monthValue)\n : [...selectedMonths, monthValue];\n\n setDateRange({ start: null, end: null });\n onChange?.(null);\n\n if (newSelectedMonths.length === 0) {\n onMonthFilterChange?.(null);\n } else {\n onMonthFilterChange?.(newSelectedMonths);\n }\n };\n\n const handleApply = () => {\n if (mode === 'anytime') {\n if (selectedMonths.length === 0) {\n onChange?.(null);\n }\n } else {\n if (dateRange.start && dateRange.end) {\n onChange?.(dateRange);\n }\n }\n onApply?.();\n };\n\n const handleModeSwitch = (newMode: 'anytime' | 'dates') => {\n setMode(newMode);\n if (newMode === 'anytime') {\n setDateRange({ start: null, end: null });\n onChange?.(null);\n onMonthFilterChange?.(null);\n } else {\n onMonthFilterChange?.(null);\n }\n };\n\n const getTodayDate = () => {\n return new Date().toISOString().split('T')[0];\n };\n\n const getNextDate = (dateString: string): string => {\n const date = new Date(dateString);\n date.setDate(date.getDate() + 1);\n return date.toISOString().split('T')[0];\n };\n\n const handleDateSelect = (date: string) => {\n if (!dateRange.start || (dateRange.start && dateRange.end)) {\n const newRange = { start: date, end: null };\n setDateRange(newRange);\n onChange?.(newRange);\n } else if (date === dateRange.start) {\n const nextDate = getNextDate(date);\n const newRange = { start: dateRange.start, end: nextDate };\n setDateRange(newRange);\n onChange?.(newRange);\n } else if (date > dateRange.start) {\n const newRange = { start: dateRange.start, end: date };\n setDateRange(newRange);\n onChange?.(newRange);\n } else {\n const newRange = { start: date, end: null };\n setDateRange(newRange);\n onChange?.(newRange);\n }\n };\n\n const containerClasses = [\n cx(''),\n variant === 'expanded' && cxMod('', 'expanded'),\n className,\n ].filter(Boolean).join(' ');\n\n const monthGridClasses = [\n cx('month-grid'),\n !isDesktop && cxMod('month-grid', 'mobile'),\n ].filter(Boolean).join(' ');\n\n const contentClasses = [\n cx('content'),\n mode === 'dates' && cxMod('content', 'dates'),\n ].filter(Boolean).join(' ');\n\n return (\n <div className={containerClasses}>\n {/* Section title - only in expanded variant */}\n {variant === 'expanded' && (\n <h2 className={cx('section-title')}>{labels.when}</h2>\n )}\n\n {/* Header with tabs and apply button */}\n <div className={cx('header')}>\n <div className={cx('tabs')}>\n <button\n type=\"button\"\n className={`${cx('tab')} ${mode === 'dates' ? cxMod('tab', 'active') : ''}`}\n onClick={() => handleModeSwitch('dates')}\n >\n {labels.dates}\n </button>\n <button\n type=\"button\"\n className={`${cx('tab')} ${mode === 'anytime' ? cxMod('tab', 'active') : ''}`}\n onClick={() => handleModeSwitch('anytime')}\n >\n {labels.flexible}\n </button>\n </div>\n {showApplyButton && (\n <div className={cx('apply')}>\n <Button variant=\"secondary\" size=\"medium\" onClick={handleApply}>\n {labels.apply}\n </Button>\n </div>\n )}\n </div>\n\n {/* Content */}\n <div className={contentClasses}>\n {mode === 'anytime' ? (\n <div className={cx('flexible')}>\n <h3 className={cx('heading')}>{labels.selectMonths}</h3>\n <div className={monthGridClasses}>\n {/* Anytime button */}\n <button\n type=\"button\"\n className={`${cx('month-button')} ${cx('anytime-button')} ${\n isAnytimeSelected ? cxMod('month-button', 'selected') : ''\n }`}\n onClick={handleAnytimeClick}\n >\n <span className={cx('month-label')}>{labels.anytime}</span>\n </button>\n {/* Month buttons */}\n {months.map((month) => (\n <button\n key={month.value}\n type=\"button\"\n className={`${cx('month-button')} ${\n selectedMonths.includes(month.value) ? cxMod('month-button', 'selected') : ''\n } ${month.disabled ? cxMod('month-button', 'disabled') : ''}`}\n onClick={() => !month.disabled && handleMonthToggle(month.value)}\n disabled={month.disabled}\n >\n <span className={cx('month-label')}>{month.label}</span>\n <span className={cx('month-year')}>{month.year}</span>\n </button>\n ))}\n </div>\n </div>\n ) : (\n <div className={cx('dates')}>\n <DualCalendar\n startDate={dateRange.start}\n endDate={dateRange.end}\n locale={dateLocale}\n onDateSelect={handleDateSelect}\n minDate={getTodayDate()}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default WhenContent;\n","import React, { useState } from 'react';\nimport { useResponsive } from '../../hooks';\nimport './DualCalendar.css';\n\n// CSS class prefix\nconst cx = (name: string) => `hc-dual-calendar${name ? `__${name}` : ''}`;\nconst cxMod = (base: string, mod: string) => `hc-dual-calendar__${base}--${mod}`;\n\ninterface DualCalendarProps {\n startDate: string | null;\n endDate: string | null;\n onDateSelect: (date: string) => void;\n minDate?: string;\n locale?: string;\n}\n\nconst DualCalendar: React.FC<DualCalendarProps> = ({\n startDate,\n endDate,\n onDateSelect,\n minDate,\n locale = 'de-CH',\n}) => {\n const { isDesktop } = useResponsive();\n const [currentMonth, setCurrentMonth] = useState(new Date());\n\n const isStartDate = (dateStr: string) => startDate === dateStr;\n const isEndDate = (dateStr: string) => endDate === dateStr;\n const isMidDate = (dateStr: string) => {\n if (!startDate || !endDate) return false;\n return dateStr > startDate && dateStr < endDate;\n };\n\n const endOfMonth = (date: Date) => new Date(date.getFullYear(), date.getMonth() + 1, 0);\n\n const getDaysInMonth = (date: Date) => {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n };\n\n const getFirstDayOfMonth = (date: Date) => {\n const day = new Date(date.getFullYear(), date.getMonth(), 1).getDay();\n return day === 0 ? 6 : day - 1; // Monday = 0\n };\n\n const formatMonthYear = (date: Date) => {\n return date.toLocaleDateString(locale, { month: 'long', year: 'numeric' });\n };\n\n const getWeekDays = () => {\n const days = [];\n const baseDate = new Date(2020, 0, 6); // Monday\n for (let i = 0; i < 7; i++) {\n const date = new Date(baseDate);\n date.setDate(baseDate.getDate() + i);\n days.push(date.toLocaleDateString(locale, { weekday: 'short' }).slice(0, 2));\n }\n return days;\n };\n\n const weekDays = getWeekDays();\n\n const isDateDisabled = (dateStr: string) => {\n const today = new Date();\n const oneYearFromToday = new Date(today.getFullYear() + 1, today.getMonth(), today.getDate());\n const dateParts = dateStr.split('-').map(Number);\n const date = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);\n\n if (minDate) {\n const minParts = minDate.split('-').map(Number);\n const min = new Date(minParts[0], minParts[1] - 1, minParts[2]);\n if (date < min) return true;\n }\n\n if (date > oneYearFromToday) return true;\n return false;\n };\n\n const generateCalendar = (monthOffset: number) => {\n const date = new Date(currentMonth.getFullYear(), currentMonth.getMonth() + monthOffset, 1);\n const daysInMonth = getDaysInMonth(date);\n const firstDay = getFirstDayOfMonth(date);\n const days = [];\n\n for (let i = 0; i < firstDay; i++) {\n days.push(<div key={`empty-${i}`} className={cx('day')} />);\n }\n\n for (let day = 1; day <= daysInMonth; day++) {\n const dateStr = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n const disabled = isDateDisabled(dateStr);\n const start = isStartDate(dateStr);\n const end = isEndDate(dateStr);\n const inRange = isMidDate(dateStr);\n\n const classes = [\n cx('day'),\n cx('day-button'),\n disabled && cxMod('day-button', 'disabled'),\n start && cxMod('day-button', 'start'),\n end && cxMod('day-button', 'end'),\n inRange && cxMod('day-button', 'in-range'),\n ].filter(Boolean).join(' ');\n\n days.push(\n <button\n key={day}\n type=\"button\"\n className={classes}\n onClick={() => !disabled && onDateSelect(dateStr)}\n disabled={disabled}\n >\n {day}\n </button>\n );\n }\n\n return days;\n };\n\n const handlePrevMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1, 1));\n };\n\n const handleNextMonth = () => {\n setCurrentMonth(new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1, 1));\n };\n\n const prevMonth = new Date(currentMonth.getFullYear(), currentMonth.getMonth() - 1, 1);\n const isPrevDisabled = minDate ? endOfMonth(prevMonth) < new Date(minDate) : false;\n const today = new Date();\n const maxMonth = new Date(today.getFullYear() + 1, today.getMonth(), 1);\n const nextMonth = new Date(currentMonth.getFullYear(), currentMonth.getMonth() + 1, 1);\n const isNextDisabled = nextMonth >= maxMonth;\n\n const PrevArrow = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M6.09652 9.36666C5.74908 9.71647 5.74908 10.2821 6.09652 10.6282L11.8223 16.4043C12.1698 16.7541 12.7316 16.7541 13.0754 16.4043C13.4191 16.0545 13.4228 15.4888 13.0754 15.1428L7.97791 9.9993L13.0754 4.85584C13.4228 4.50603 13.4228 3.94038 13.0754 3.59429C12.7279 3.2482 12.1661 3.24448 11.8223 3.59429L6.09652 9.36666Z\" fill=\"#1F2937\"/>\n </svg>\n );\n\n const NextArrow = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M13.9035 9.36666C14.2509 9.71647 14.2509 10.2821 13.9035 10.6282L8.17767 16.4043C7.83023 16.7541 7.2684 16.7541 6.92465 16.4043C6.5809 16.0545 6.5772 15.4888 6.92465 15.1428L12.0221 9.9993L6.92465 4.85584C6.5772 4.50603 6.5772 3.94038 6.92465 3.59429C7.27209 3.2482 7.83392 3.24448 8.17767 3.59429L13.9035 9.37039V9.36666Z\" fill=\"#1F2937\"/>\n </svg>\n );\n\n const navButtonClasses = (disabled: boolean) => [\n cx('nav-button'),\n disabled && cxMod('nav-button', 'disabled'),\n ].filter(Boolean).join(' ');\n\n return (\n <div className={`${cx('')} ${!isDesktop ? cxMod('', 'mobile') : ''}`}>\n {/* Mobile: Navigation row at top */}\n {!isDesktop && (\n <div className={cx('navigation')}>\n <button\n type=\"button\"\n className={navButtonClasses(isPrevDisabled)}\n onClick={handlePrevMonth}\n disabled={isPrevDisabled}\n >\n <PrevArrow />\n </button>\n <h3 className={`${cx('month-title')} ${cx('month-title--mobile')}`}>\n {formatMonthYear(currentMonth)}\n </h3>\n <button\n type=\"button\"\n className={navButtonClasses(isNextDisabled)}\n onClick={handleNextMonth}\n disabled={isNextDisabled}\n >\n <NextArrow />\n </button>\n </div>\n )}\n\n {/* Desktop: Dual calendar with nav on sides */}\n {isDesktop ? (\n <div className={cx('desktop-layout')}>\n <button\n type=\"button\"\n className={navButtonClasses(isPrevDisabled)}\n onClick={handlePrevMonth}\n disabled={isPrevDisabled}\n >\n <PrevArrow />\n </button>\n\n <div className={cx('calendars')}>\n {/* First Calendar */}\n <div className={cx('calendar')}>\n <h3 className={cx('month-title')}>{formatMonthYear(currentMonth)}</h3>\n <div className={cx('weekdays')}>\n {weekDays.map((day, i) => (\n <div key={day} className={`${cx('weekday')} ${i >= 5 ? cxMod('weekday', 'weekend') : ''}`}>\n {day}\n </div>\n ))}\n </div>\n <div className={cx('days')}>{generateCalendar(0)}</div>\n </div>\n\n {/* Second Calendar */}\n <div className={cx('calendar')}>\n <h3 className={cx('month-title')}>{formatMonthYear(nextMonth)}</h3>\n <div className={cx('weekdays')}>\n {weekDays.map((day, i) => (\n <div key={day} className={`${cx('weekday')} ${i >= 5 ? cxMod('weekday', 'weekend') : ''}`}>\n {day}\n </div>\n ))}\n </div>\n <div className={cx('days')}>{generateCalendar(1)}</div>\n </div>\n </div>\n\n <button\n type=\"button\"\n className={navButtonClasses(isNextDisabled)}\n onClick={handleNextMonth}\n disabled={isNextDisabled}\n >\n <NextArrow />\n </button>\n </div>\n ) : (\n /* Mobile: Single calendar */\n <div className={`${cx('calendars')} ${cxMod('calendars', 'mobile')}`}>\n <div className={cx('calendar')}>\n <div className={cx('weekdays')}>\n {weekDays.map((day, i) => (\n <div key={day} className={`${cx('weekday')} ${i >= 5 ? cxMod('weekday', 'weekend') : ''}`}>\n {day}\n </div>\n ))}\n </div>\n <div className={cx('days')}>{generateCalendar(0)}</div>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport { DualCalendar };\nexport default DualCalendar;\n","interface HeartIconProps {\n filled?: boolean;\n className?: string;\n size?: number;\n}\n\nexport const HeartIcon = ({ filled = false, className = '', size = 24 }: HeartIconProps) => (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n className={className}\n fill={filled ? 'currentColor' : 'none'}\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\" />\n </svg>\n);\n\nHeartIcon.displayName = 'HeartIcon';\n","interface StarIconProps {\n filled?: boolean;\n className?: string;\n size?: number;\n}\n\n// Small filled star for hotel category display\nexport const StarIcon = ({ filled = true, className = '', size = 9 }: StarIconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n className={className}\n >\n <g clipPath=\"url(#clip0_star_icon)\">\n <path\n 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\"\n fill={filled ? '#1F2937' : '#D1D5DB'}\n />\n </g>\n <defs>\n <clipPath id=\"clip0_star_icon\">\n <rect width=\"8\" height=\"8\" fill=\"white\" transform=\"translate(0.800049 0.199951)\" />\n </clipPath>\n </defs>\n </svg>\n);\n\nStarIcon.displayName = 'StarIcon';\n","interface ChevronLeftIconProps {\n className?: string;\n size?: number;\n}\n\nexport const ChevronLeftIcon = ({ className = '', size = 20 }: ChevronLeftIconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n);\n\nChevronLeftIcon.displayName = 'ChevronLeftIcon';\n","interface ChevronRightIconProps {\n className?: string;\n size?: number;\n}\n\nexport const ChevronRightIcon = ({ className = '', size = 20 }: ChevronRightIconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n);\n\nChevronRightIcon.displayName = 'ChevronRightIcon';\n","interface PinIconProps {\n className?: string;\n size?: number;\n}\n\nexport const PinIcon = ({ className = '', size = 16 }: PinIconProps) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className={className}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 1.5C5.51472 1.5 3.5 3.51472 3.5 6C3.5 7.52671 4.48181 9.28285 5.83073 10.8739C6.48993 11.6504 7.18485 12.3259 7.73205 12.8316C7.8331 12.9249 7.92519 13.0096 8.00599 13.0857C8.08539 13.0108 8.17547 12.9276 8.27398 12.8362C8.81849 12.3312 9.51007 11.656 10.1655 10.8792C11.5093 9.28692 12.5 7.52773 12.5 6C12.5 3.51472 10.4853 1.5 8 1.5ZM8 14C7.57347 14.4982 7.57321 14.498 7.57291 14.4977L7.57178 14.4967L7.56899 14.4942L7.56002 14.4864C7.5525 14.4798 7.54197 14.4706 7.52861 14.4588C7.5019 14.4353 7.46403 14.4016 7.41618 14.3584C7.3205 14.272 7.18745 14.1481 7.02576 13.9917C6.70282 13.6792 6.26632 13.238 5.81302 12.7042C4.89319 11.6202 3 9.61329 3 6C3 3.23858 5.23858 1 8 1C10.7614 1 13 3.23858 13 6C13 9.61229 11.0969 11.6169 10.1732 12.6989C9.71743 13.2324 9.27901 13.6735 8.95477 13.9862C8.79239 14.1428 8.65889 14.267 8.56288 14.3537C8.51486 14.3971 8.47683 14.4309 8.45001 14.4545C8.43659 14.4664 8.42601 14.4757 8.41845 14.4823L8.40942 14.4902L8.40661 14.4927L8.40546 14.4937C8.40517 14.494 8.40492 14.4942 8 14ZM8 14L8.40492 14.4942C8.17766 14.6895 7.84451 14.6919 7.57291 14.4977L8 14Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M8 4.5C7.17157 4.5 6.5 5.17157 6.5 6C6.5 6.82843 7.17157 7.5 8 7.5C8.82843 7.5 9.5 6.82843 9.5 6C9.5 5.17157 8.82843 4.5 8 4.5ZM6 6C6 4.89543 6.89543 4 8 4C9.10457 4 10 4.89543 10 6C10 7.10457 9.10457 8 8 8C6.89543 8 6 7.10457 6 6Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nPinIcon.displayName = 'PinIcon';\n","export const formatPrice = (\n amount: number,\n currency: string = 'CHF',\n locale: string = 'de-CH'\n): string => {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }).format(amount);\n};\n","import { format, parseISO, type Locale } from 'date-fns';\nimport { de, enUS, fr, it } from 'date-fns/locale';\n\nconst locales: Record<string, Locale> = { de, en: enUS, fr, it };\n\nexport const formatDate = (\n date: string | Date,\n formatStr: string = 'dd. MMM yyyy',\n locale: string = 'de'\n): string => {\n const d = typeof date === 'string' ? parseISO(date) : date;\n return format(d, formatStr, { locale: locales[locale] || de });\n};\n\nexport const formatDateRange = (\n checkIn: string | Date,\n checkOut: string | Date,\n locale: string = 'de'\n): string => {\n const start = formatDate(checkIn, 'dd.', locale);\n const end = formatDate(checkOut, 'dd. MMM yyyy', locale);\n return `${start} - ${end}`;\n};\n","export const calculateDiscount = (\n originalPrice: number,\n discountedPrice: number\n): number => {\n if (originalPrice <= 0) return 0;\n return Math.round(((originalPrice - discountedPrice) / originalPrice) * 100);\n};\n"],"mappings":"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","names":["ChevronRightIcon","HeartIcon","StarIcon","import_react","import_jsx_runtime","import_jsx_runtime","cx","import_jsx_runtime","cx","containerClasses","import_jsx_runtime","cx","lineClass","import_jsx_runtime","cx","import_react","import_jsx_runtime","cx","import_jsx_runtime","cx","import_jsx_runtime","cx","import_react","import_jsx_runtime","cx","CloseIcon","import_jsx_runtime","cx","StarIcon","import_jsx_runtime","cx","StarIcon","PLACEHOLDER","repeat","import_react","import_jsx_runtime","cx","defaultValue","import_react","import_jsx_runtime","cx","defaultValue","import_jsx_runtime","cx","containerClasses","import_jsx_runtime","cx","import_react","import_jsx_runtime","cx","ChevronIcon","import_jsx_runtime","cx","import_react","import_jsx_runtime","cx","import_react","import_react","import_react","useI18nTranslation","import_react","import_react","import_jsx_runtime","cx","today","import_jsx_runtime","cx","cxMod","months","import_jsx_runtime","cx","cxMod","getDateLocale","format","months","import_jsx_runtime","HeartIcon","import_jsx_runtime","StarIcon","import_jsx_runtime","import_jsx_runtime","ChevronRightIcon","import_jsx_runtime"]}
|