@anker-in/ui 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/demo-room.js +119 -101
- package/dist/demo-room.js.map +1 -1
- package/dist/demo-room.mjs +119 -101
- package/dist/demo-room.mjs.map +1 -1
- package/dist/index.d.mts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +299 -262
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +299 -262
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cn.ts","../src/components/DemoRoom/components/Title.tsx","../src/components/DemoRoom/components/StudioCard.tsx","../src/components/DemoRoom/components/StudioMap.tsx","../src/api/types.ts","../src/api/hooks.ts","../src/components/DemoRoom/components/AntdMobileIsolated.tsx","../src/components/DemoRoom/utils/addressParser.ts","../src/components/DemoRoom/components/RoomsList.module.css","../src/components/DemoRoom/components/LocationFilter.tsx","../src/components/DemoRoom/components/RoomsList.tsx","../src/api/client.ts","../src/components/DemoRoom/DemoRoom.tsx","../src/components/BookingForm/components/QuestionnaireForm.tsx","../src/components/BookingForm/components/DateTimePicker.tsx","../src/components/BookingForm/components/DemoRoomDetail.tsx","../src/components/BookingForm/BookingForm.tsx","../src/components/BookingForm/components/BookingSuccess.tsx","../src/theme-tokens/tokens.ts","../src/theme/ThemeProvider.tsx"],"names":["twMerge","clsx","jsx","React","jsxs","useState","useEffect","useCallback","useRef","items","useMemo","IndexBar","List","dayjs","dayLocaleData","weekday","weekOfYear","theme","ConfigProvider","Calendar","Select","Swiper","SwiperSlide","Fragment","createContext","useContext"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import React from 'react'\nimport { cn } from '@/utils/cn'\n\nexport interface TitleProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string\n subTitle?: string\n}\n\nexport const Title: React.FC<TitleProps> = ({\n title = '',\n ...props\n}) => {\n return (\n <div className={cn('w-full')} {...props}>\n {/* Section Title */}\n <h2 className=\"text-[32px] min-l:text-[48px] font-bold mb-12 text-[#080A0F]\">\n {title}\n </h2>\n </div>\n )\n}\n\nTitle.displayName = 'Title'\n","import React from 'react'\nimport { cn } from '@/utils/cn'\n\nexport interface StudioCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Demo room code (unique identifier)\n */\n code: string\n /**\n * Studio name\n */\n name: string\n /**\n * Available time\n */\n availableTime: string\n /**\n * Full address\n */\n address: string\n city: string\n state: string\n zipCode: string\n country?: string\n /**\n * Available euifyMake models\n */\n euifyMakeModel: string\n /**\n * Distance from user location (optional)\n */\n distance?: number\n /**\n * Callback when \"Schedule Now\" is clicked, receives demo room code\n */\n onSchedule?: (code: string) => void\n /**\n * 可配置的文案数据\n */\n pageData?: {\n scheduleNow?: string\n available?: string\n away?: string\n noAvailableTime?: string\n }\n}\n\nexport const StudioCard: React.FC<StudioCardProps> = ({\n code,\n name,\n availableTime,\n address,\n euifyMakeModel,\n distance,\n onSchedule,\n pageData = {\n scheduleNow: 'Schedule Now',\n available: 'Available',\n away: 'away',\n },\n className,\n style,\n ...props\n}) => {\n const [isHovered, setIsHovered] = React.useState(false)\n\n const handleScheduleClick = () => {\n onSchedule?.(code)\n }\n\n // 格式化距离显示\n const formatDistance = (dist: number) => {\n if (dist < 1) {\n return `${Math.round(dist * 1000)} m`\n }\n return `${dist.toFixed(1)} km`\n }\n\n return (\n <div\n {...props}\n className={cn(\n 'p-6 cursor-pointer transition-colors duration-200 border-b border-[#E4E5E6] last:border-b-0',\n className\n )}\n style={{\n backgroundColor: isHovered ? '#f3f4f6' : 'transparent',\n ...style,\n }}\n onMouseEnter={(e) => {\n setIsHovered(true)\n props.onMouseEnter?.(e)\n }}\n onMouseLeave={(e) => {\n setIsHovered(false)\n props.onMouseLeave?.(e)\n }}\n >\n {/* Studio Name and Distance */}\n <div className=\"flex items-start justify-between mb-4\">\n <h3 className=\"text-[24px] l:text-[20px] font-bold text-[#080A0F]\">\n {name}\n </h3>\n {distance !== undefined && (\n <span className=\"text-[16px] l:text-[14px] font-medium text-[#2E8B57] bg-[#E8F5E9] px-3 py-1 rounded-full whitespace-nowrap ml-2\">\n {formatDistance(distance)} {pageData.away}\n </span>\n )}\n </div>\n\n {/* Available Time */}\n {availableTime && (\n <div className=\"flex items-start gap-3 mb-3\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"flex-shrink-0 mt-0.5\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"14\"\n height=\"13\"\n rx=\"2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <path\n d=\"M3 8H17\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M6 2V4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M14 2V4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n <div>\n <p className=\"text-[16px] l:text-[12px] text-[#2A2C32]\">\n {availableTime === pageData.noAvailableTime\n ? ''\n : pageData.available}{' '}\n {availableTime}\n </p>\n </div>\n </div>\n )}\n\n {/* Address */}\n <div className=\"flex items-start gap-3 mb-3\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"flex-shrink-0 mt-0.5\"\n >\n <path\n d=\"M10 10C11.1046 10 12 9.10457 12 8C12 6.89543 11.1046 6 10 6C8.89543 6 8 6.89543 8 8C8 9.10457 8.89543 10 10 10Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <path\n d=\"M10 18C10 18 16 13 16 8C16 4.68629 13.3137 2 10 2C6.68629 2 4 4.68629 4 8C4 13 10 18 10 18Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n </svg>\n <div className=\"flex-1\">\n <p className=\"text-[16px] l:text-[14px] text-[#2A2C32] break-words\">\n {address}\n </p>\n </div>\n </div>\n\n {/* euifyMake Models */}\n <div className=\"flex items-start gap-3 mb-6\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"flex-shrink-0 mt-0.5\"\n >\n <path\n d=\"M14.4643 7.4929H9.65565M3.16391 18.7132H20.8171C22.0122 18.7132 22.981 17.7563 22.981 16.576L23 13.8348L22.981 6.42431C22.981 5.24396 22.0122 4.28711 20.8171 4.28711H3.16391C1.96882 4.28711 1 5.24396 1 6.42431V16.576C1 17.7563 1.96882 18.7132 3.16391 18.7132Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5.32812 18.2325V14.4238C5.32812 13.8715 5.77584 13.4238 6.32813 13.4238H17.7925C18.3447 13.4238 18.7925 13.8715 18.7925 14.4238V18.2325\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <div>\n <p className=\"text-[16px] l:text-[14px] text-[#2A2C32]\">\n {euifyMakeModel}\n </p>\n </div>\n </div>\n\n {/* Schedule Button */}\n <button\n onClick={handleScheduleClick}\n className={cn(\n 'w-fit px-[28px] l:px-[20px] l:py-[8px] py-3 rounded-full',\n 'bg-white text-gray-900 border-2 border-gray-900',\n 'font-bold text-[16px] l:text-[14px]',\n 'hover:bg-gray-900 hover:text-white',\n 'transition-all duration-200'\n )}\n >\n {pageData.scheduleNow}\n </button>\n </div>\n )\n}\n\nStudioCard.displayName = 'StudioCard'\n","import React, { useState } from 'react'\nimport { cn } from '@/utils/cn'\n\nexport interface StudioLocation {\n id: string\n name: string\n address: string\n city: string\n state: string\n zipCode: string\n country: string\n lat: number\n lng: number\n availableTime?: string\n euifyMakeModel?: string\n distance?: number\n}\n\nexport interface StudioMapProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * 谷歌地图 API Key\n */\n googleMapsApiKey: string\n /**\n * 工作室位置数据\n */\n locations?: StudioLocation[]\n /**\n * 当前 hover 的位置 ID\n */\n hoveredLocationId?: string | null\n /**\n * 默认中心点\n */\n defaultCenter?: { lat: number; lng: number }\n /**\n * 默认缩放级别\n */\n defaultZoom?: number\n /**\n * 地图高度\n */\n mapHeight?: string\n /**\n * 点击 Schedule Now 的回调\n */\n onSchedule?: (demoRoomCode: string) => void\n /**\n * 可配置的文案数据\n */\n pageData?: {\n apiKeyRequired?: string\n loadingMap?: string\n scheduleNow?: string\n available?: string\n noAvailableTime?: string\n }\n}\n\nconst defaultLocations: StudioLocation[] = [\n {\n id: '1',\n name: 'Design District Demo Room',\n address: '111 8th St',\n city: 'San Francisco',\n state: 'CA',\n zipCode: '94108',\n country: 'United States',\n lat: 37.7749,\n lng: -122.4194,\n availableTime: 'Oct 28, 2:00 PM',\n euifyMakeModel: 'euifyMake E1, euifyMake M5',\n },\n]\n\nexport const StudioMap: React.FC<StudioMapProps> = ({\n googleMapsApiKey,\n locations = defaultLocations,\n hoveredLocationId,\n defaultCenter = { lat: 39.8283, lng: -98.5795 }, // US center\n defaultZoom = 4,\n mapHeight = '600px',\n onSchedule,\n pageData = {\n apiKeyRequired: 'Google Maps API Key is required',\n loadingMap: 'Loading map...',\n scheduleNow: 'Schedule Now',\n available: 'Available',\n },\n className,\n ...props\n}) => {\n const [_selectedLocation, setSelectedLocation] =\n useState<StudioLocation | null>(null)\n const [isLoaded, setIsLoaded] = useState(false)\n const mapRef = React.useRef<HTMLDivElement>(null)\n const googleMapRef = React.useRef<google.maps.Map | null>(null)\n const markersRef = React.useRef<google.maps.Marker[]>([])\n const infoWindowRef = React.useRef<google.maps.InfoWindow | null>(null)\n\n // 加载谷歌地图脚本\n React.useEffect(() => {\n if (!googleMapsApiKey) {\n console.error('Google Maps API Key is required')\n return\n }\n\n // 检查脚本是否已加载\n if (window.google && window.google.maps) {\n setIsLoaded(true)\n return\n }\n\n const script = document.createElement('script')\n script.src = `https://maps.googleapis.com/maps/api/js?key=${googleMapsApiKey}&libraries=places`\n script.async = true\n script.defer = true\n script.onload = () => setIsLoaded(true)\n script.onerror = () => console.error('Failed to load Google Maps script')\n document.head.appendChild(script)\n\n return () => {\n // 清理脚本(可选)\n if (script.parentNode) {\n script.parentNode.removeChild(script)\n }\n }\n }, [googleMapsApiKey])\n\n // 初始化地图\n React.useEffect(() => {\n if (!isLoaded || !mapRef.current || googleMapRef.current) return\n\n // 创建地图\n const map = new google.maps.Map(mapRef.current, {\n center: defaultCenter,\n zoom: defaultZoom,\n styles: [\n {\n featureType: 'all',\n elementType: 'geometry',\n stylers: [{ color: '#E0F2F1' }],\n },\n {\n featureType: 'water',\n elementType: 'geometry',\n stylers: [{ color: '#B2EBF2' }],\n },\n {\n featureType: 'road',\n elementType: 'geometry',\n stylers: [{ color: '#ffffff' }],\n },\n ],\n mapTypeControl: false,\n streetViewControl: false,\n fullscreenControl: true,\n })\n\n googleMapRef.current = map\n\n // 创建信息窗口\n infoWindowRef.current = new google.maps.InfoWindow()\n }, [isLoaded, defaultCenter, defaultZoom])\n\n // 添加标记点\n React.useEffect(() => {\n if (!googleMapRef.current || !isLoaded) return\n\n // 清除旧标记\n markersRef.current.forEach((marker) => marker.setMap(null))\n markersRef.current = []\n\n // 过滤并验证有效的位置数据\n const validLocations = locations.filter((location) => {\n const lat = Number(location.lat)\n const lng = Number(location.lng)\n const isValid =\n !isNaN(lat) &&\n !isNaN(lng) &&\n isFinite(lat) &&\n isFinite(lng) &&\n lat >= -90 &&\n lat <= 90 &&\n lng >= -180 &&\n lng <= 180\n if (!isValid) {\n console.warn('Invalid location coordinates:', location)\n }\n return isValid\n })\n\n // 添加新标记\n validLocations.forEach((location) => {\n const lat = Number(location.lat)\n const lng = Number(location.lng)\n\n // 创建自定义SVG图标\n const svgIcon = {\n url: `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"34\" height=\"44\" viewBox=\"0 0 17 22\" fill=\"none\">\n <path d=\"M8.5 0C13.1944 0 17 3.80557 17 8.5C17 12.1044 14.94 15.4573 13.0264 17.8174C12.0543 19.0162 11.0847 20.0016 10.3584 20.6875C9.99466 21.031 9.69081 21.3018 9.47559 21.4873C9.36796 21.5801 9.28226 21.6518 9.22266 21.7012C9.19285 21.7259 9.16878 21.7444 9.15234 21.7578C9.14444 21.7642 9.13843 21.7697 9.13379 21.7734C9.13156 21.7752 9.12935 21.7772 9.12793 21.7783L9.12598 21.7803H9.125C9.12232 21.7774 9.08429 21.7304 8.5 21L9.125 21.7812C8.75978 22.0734 8.24022 22.0734 7.875 21.7812L8.5 21C7.91571 21.7304 7.87768 21.7774 7.875 21.7803H7.87402L7.87207 21.7783C7.87065 21.7772 7.86844 21.7752 7.86621 21.7734C7.86157 21.7697 7.85556 21.7642 7.84766 21.7578C7.83122 21.7444 7.80715 21.7259 7.77734 21.7012C7.71774 21.6518 7.63204 21.5801 7.52441 21.4873C7.30919 21.3018 7.00534 21.031 6.6416 20.6875C5.91533 20.0016 4.94566 19.0162 3.97363 17.8174C2.06001 15.4573 0 12.1044 0 8.5C0 3.80557 3.80557 0 8.5 0ZM8.5 2C4.91013 2 2 4.91013 2 8.5C2 11.3955 3.69006 14.2928 5.52637 16.5576C6.4292 17.6711 7.33473 18.5922 8.01465 19.2344C8.19381 19.4036 8.3573 19.5526 8.5 19.6807C8.6427 19.5526 8.80619 19.4036 8.98535 19.2344C9.66527 18.5922 10.5708 17.6711 11.4736 16.5576C13.3099 14.2928 15 11.3955 15 8.5C15 4.91013 12.0899 2 8.5 2ZM8.5 4.59961C10.6539 4.59961 12.4004 6.34609 12.4004 8.5C12.4004 10.6539 10.6539 12.4004 8.5 12.4004C6.34609 12.4004 4.59961 10.6539 4.59961 8.5C4.59961 6.34609 6.34609 4.59961 8.5 4.59961ZM8.5 6.40039C7.34021 6.40039 6.40039 7.34021 6.40039 8.5C6.40039 9.65979 7.34021 10.5996 8.5 10.5996C9.65979 10.5996 10.5996 9.65979 10.5996 8.5C10.5996 7.34021 9.65979 6.40039 8.5 6.40039Z\" fill=\"#3D3D3F\"/>\n </svg>\n `)}`,\n scaledSize: { width: 34, height: 44 },\n anchor: { x: 17, y: 44 },\n } as google.maps.Icon\n\n const marker = new google.maps.Marker({\n position: { lat, lng },\n map: googleMapRef.current,\n title: location.name,\n icon: svgIcon,\n })\n\n marker.addListener('click', () => {\n setSelectedLocation(location)\n\n // 创建信息窗口内容\n const content = `\n <div style=\"padding: 0 16px 16px 16px; font-weight: 700; font-family: 'MontForAnker'; max-width: 420px;\">\n <h3 style=\"margin: 0 0 16px 0; font-size: 24px; color: #080A0F;\">${location.name}</h3>\n ${\n location.availableTime\n ? `<div style=\"display: flex; align-items: flex-start; gap: 12px; margin-bottom: 12px;\">\n <svg style=\"flex-shrink: 0; margin-top: 2px;\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"3\" y=\"4\" width=\"14\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M3 8H17\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <path d=\"M6 2V4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <path d=\"M14 2V4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n <div>\n <p style=\"margin: 0; font-size: 16px; color: #2A2C32;\">${location.availableTime === pageData?.noAvailableTime ? '' : pageData.available} ${location.availableTime}</p>\n </div>\n </div>`\n : ''\n }\n <div style=\"display: flex; align-items: flex-start; gap: 12px; margin-bottom: 12px;\">\n <svg style=\"flex-shrink: 0; margin-top: 2px;\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 10C11.1046 10 12 9.10457 12 8C12 6.89543 11.1046 6 10 6C8.89543 6 8 6.89543 8 8C8 9.10457 8.89543 10 10 10Z\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M10 18C10 18 16 13 16 8C16 4.68629 13.3137 2 10 2C6.68629 2 4 4.68629 4 8C4 13 10 18 10 18Z\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n </svg>\n <div style=\"flex: 1;\">\n <p style=\"margin: 0; font-size: 16px; color: #2A2C32; word-wrap: break-word;\">${location.address}</p>\n </div>\n </div>\n ${\n location.euifyMakeModel\n ? `<div style=\"display: flex; align-items: flex-start; gap: 12px; margin-bottom: 24px;\">\n <svg style=\"flex-shrink: 0; margin-top: 2px;\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.4643 7.4929H9.65565M3.16391 18.7132H20.8171C22.0122 18.7132 22.981 17.7563 22.981 16.576L23 13.8348L22.981 6.42431C22.981 5.24396 22.0122 4.28711 20.8171 4.28711H3.16391C1.96882 4.28711 1 5.24396 1 6.42431V16.576C1 17.7563 1.96882 18.7132 3.16391 18.7132Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5.32812 18.2325V14.4238C5.32812 13.8715 5.77584 13.4238 6.32813 13.4238H17.7925C18.3447 13.4238 18.7925 13.8715 18.7925 14.4238V18.2325\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <div>\n <p style=\"margin: 0; font-size: 16px; color: #2A2C32;\">${location.euifyMakeModel}</p>\n </div>\n </div>`\n : ''\n }\n <button\n id=\"schedule-btn-${location.id}\"\n style=\"\n width: fit-content;\n padding: 12px 28px;\n background: #fff;\n color: #111827;\n border: 2px solid #111827;\n border-radius: 9999px;\n font-weight: 700;\n cursor: pointer;\n font-size: 16px;\n transition: all 0.2s;\n \"\n onmouseover=\"this.style.background='#111827'; this.style.color='#fff';\"\n onmouseout=\"this.style.background='#fff'; this.style.color='#111827';\"\n >\n ${pageData.scheduleNow}\n </button>\n </div>\n `\n\n if (infoWindowRef.current) {\n infoWindowRef.current.setContent(content)\n infoWindowRef.current.open(googleMapRef.current, marker)\n\n // 添加按钮点击事件监听\n google.maps.event.addListenerOnce(\n infoWindowRef.current,\n 'domready',\n () => {\n const btn = document.getElementById(`schedule-btn-${location.id}`)\n if (btn) {\n btn.addEventListener('click', () => {\n if (onSchedule) {\n onSchedule(location.id)\n }\n })\n }\n }\n )\n }\n\n // 移动地图中心到标记位置\n googleMapRef.current?.panTo({ lat: location.lat, lng: location.lng })\n })\n\n markersRef.current.push(marker)\n })\n\n // 自动调整地图视图以显示所有标记\n if (validLocations.length > 0 && googleMapRef.current) {\n const bounds = new google.maps.LatLngBounds()\n validLocations.forEach((location) => {\n const lat = Number(location.lat)\n const lng = Number(location.lng)\n bounds.extend({ lat, lng })\n })\n googleMapRef.current.fitBounds(bounds)\n }\n }, [isLoaded, locations, onSchedule])\n\n // 处理 hover 状态变化\n React.useEffect(() => {\n if (!isLoaded || !googleMapRef.current || !hoveredLocationId) {\n // 如果没有 hover,关闭信息窗口\n if (!hoveredLocationId && infoWindowRef.current) {\n infoWindowRef.current.close()\n }\n return\n }\n\n // 找到对应的位置和标记\n const location = locations.find((loc) => loc.id === hoveredLocationId)\n const markerIndex = locations.findIndex(\n (loc) => loc.id === hoveredLocationId\n )\n const marker = markersRef.current[markerIndex]\n\n if (location && marker) {\n // 创建信息窗口内容\n const content = `\n <div style=\"padding: 0 16px 16px 16px; font-weight: 700; font-family: 'MontForAnker'; max-width: 420px;\">\n <h3 style=\"margin: 0 0 16px 0; font-size: 24px; color: #080A0F;\">${location.name}</h3>\n ${\n location.availableTime\n ? `<div style=\"display: flex; align-items: flex-start; gap: 12px; margin-bottom: 12px;\">\n <svg style=\"flex-shrink: 0; margin-top: 2px;\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"3\" y=\"4\" width=\"14\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M3 8H17\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <path d=\"M6 2V4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <path d=\"M14 2V4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n <div>\n <p style=\"margin: 0;font-size: 16px; color: #2A2C32;\">${location.availableTime === pageData?.noAvailableTime ? '' : pageData.available} ${location.availableTime}</p>\n </div>\n </div>`\n : ''\n }\n <div style=\"display: flex; align-items: flex-start; gap: 12px; margin-bottom: 12px;\">\n <svg style=\"flex-shrink: 0; margin-top: 2px;\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 10C11.1046 10 12 9.10457 12 8C12 6.89543 11.1046 6 10 6C8.89543 6 8 6.89543 8 8C8 9.10457 8.89543 10 10 10Z\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M10 18C10 18 16 13 16 8C16 4.68629 13.3137 2 10 2C6.68629 2 4 4.68629 4 8C4 13 10 18 10 18Z\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n </svg>\n <div style=\"flex: 1;\">\n <p style=\"margin: 0; font-size: 16px; color: #2A2C32; word-wrap: break-word;\">${location.address}</p>\n </div>\n </div>\n ${\n location.euifyMakeModel\n ? `<div style=\"display: flex; align-items: flex-start; gap: 12px; margin-bottom: 24px;\">\n <svg style=\"flex-shrink: 0; margin-top: 2px;\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.4643 7.4929H9.65565M3.16391 18.7132H20.8171C22.0122 18.7132 22.981 17.7563 22.981 16.576L23 13.8348L22.981 6.42431C22.981 5.24396 22.0122 4.28711 20.8171 4.28711H3.16391C1.96882 4.28711 1 5.24396 1 6.42431V16.576C1 17.7563 1.96882 18.7132 3.16391 18.7132Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5.32812 18.2325V14.4238C5.32812 13.8715 5.77584 13.4238 6.32813 13.4238H17.7925C18.3447 13.4238 18.7925 13.8715 18.7925 14.4238V18.2325\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <div>\n <p style=\"margin: 0; font-size: 16px; color: #2A2C32;\">${location.euifyMakeModel}</p>\n </div>\n </div>`\n : ''\n }\n <button\n id=\"schedule-btn-hover-${location.id}\"\n style=\"\n width: fit-content;\n padding: 12px 28px;\n background: #fff;\n color: #111827;\n border: 2px solid #111827;\n border-radius: 9999px;\n font-weight: 700;\n cursor: pointer;\n font-size: 16px;\n transition: all 0.2s;\n \"\n onmouseover=\"this.style.background='#111827'; this.style.color='#fff';\"\n onmouseout=\"this.style.background='#fff'; this.style.color='#111827';\"\n >\n ${pageData.scheduleNow}\n </button>\n </div>\n `\n\n if (infoWindowRef.current) {\n infoWindowRef.current.setContent(content)\n infoWindowRef.current.open(googleMapRef.current, marker)\n\n // 添加按钮点击事件监听\n google.maps.event.addListenerOnce(\n infoWindowRef.current,\n 'domready',\n () => {\n const btn = document.getElementById(\n `schedule-btn-hover-${location.id}`\n )\n if (btn) {\n btn.addEventListener('click', () => {\n if (onSchedule) {\n onSchedule(location.id)\n }\n })\n }\n }\n )\n }\n\n // 移动地图中心到标记位置(可选)\n // googleMapRef.current?.panTo({ lat: location.lat, lng: location.lng })\n }\n }, [hoveredLocationId, isLoaded, locations, onSchedule])\n\n // const handleCloseInfo = useCallback(() => {\n // setSelectedLocation(null)\n // if (infoWindowRef.current) {\n // infoWindowRef.current.close()\n // }\n // }, [])\n\n if (!googleMapsApiKey) {\n return (\n <div\n className={cn(\n 'flex items-center justify-center bg-gray-100 rounded-lg',\n className\n )}\n style={{ height: mapHeight }}\n {...props}\n >\n <p className=\"text-gray-600\">{pageData.apiKeyRequired}</p>\n </div>\n )\n }\n\n return (\n <div\n className={cn('relative w-full rounded-lg overflow-hidden', className)}\n {...props}\n >\n <div ref={mapRef} style={{ height: mapHeight }} />\n {!isLoaded && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-gray-100\">\n <div className=\"text-center\">\n <div className=\"inline-block animate-spin rounded-full h-8 w-8 border-4 border-gray-300 border-t-gray-900 mb-2\"></div>\n <p className=\"text-gray-600\">{pageData.loadingMap}</p>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nStudioMap.displayName = 'StudioMap'\n","// API 基础类型\nexport interface ApiResponse<T = any> {\n code: number\n message: string\n data: T\n request_id: string\n}\n\n// 时段状态\nexport type TimeslotStatus = 'available' | 'full' | 'disabled'\n\n// 门店类型\nexport type DemoRoomType = 'flagship' | 'standard' | 'popup'\n\n// 门店状态\nexport type DemoRoomStatus = 'enabled' | 'disabled'\n\n// 预约状态\nexport type BookingStatus = 'pending' | 'checked_in' | 'completed' | 'cancelled'\n\n// 问题类型\nexport type QuestionType = 'text' | 'email' | 'tel' | 'phone' | 'radio' | 'checkbox' | 'textarea' | 'select'\n\n// 时段\nexport interface Timeslot {\n id: number\n start_time: string\n end_time: string\n capacity: number\n booked_count: number\n status: TimeslotStatus\n}\n\n// 门店位置信息\nexport interface DemoRoomLocation {\n country: string\n state: string\n city: string\n}\n\n// 门店\nexport interface DemoRoom {\n code: string\n name: string\n description: string\n equipment?: string[]\n address: string\n location?: DemoRoomLocation\n type: DemoRoomType\n capacity: number\n status: DemoRoomStatus\n timezone: string\n images: string[]\n latitude: number\n longitude: number\n questionnaire_id?: number\n timeslots: Timeslot[]\n}\n\n// 问卷选项\nexport interface QuestionOption {\n label: string\n value?: string\n}\n\n// 问卷问题\nexport interface Question {\n id?: string // 固定字段使用 id(如客户信息字段)\n key?: string // 自定义字段使用 key\n type: QuestionType\n label: string\n description?: string\n placeholder?: string\n hint?: string\n options?: QuestionOption[]\n required: boolean\n}\n\n// 问卷\nexport interface Questionnaire {\n id: number\n name: string\n description: string\n questions: Question[]\n}\n\n// 获取门店列表响应\nexport interface GetDemoRoomsResponse {\n demorooms: DemoRoom[]\n}\n\n// 查询时段响应\nexport interface GetTimeslotsResponse {\n timeslots: Timeslot[]\n timezone: string\n}\n\n// 提交预约请求\nexport interface CreateBookingRequest {\n demoroom_code: string\n timeslot_id: number\n questionnaire_id?: number\n questionnaire_response?: Record<string, any>\n customer_name: string\n customer_email: string\n customer_phone_code: string\n customer_phone_number: string\n}\n\n// 提交预约响应\nexport interface CreateBookingResponse {\n booking_id: string\n demoroom_code: string\n booking_date: string\n booking_time: string\n customer_name: string\n customer_email: string\n status: string\n cancel_token?: string\n created_at?: string\n}\n\n// 预约信息\nexport interface Booking {\n booking_id: number\n demoroom_code: string\n demoroom_name?: string // 门店名称(查询预约详情时返回)\n address?: string // 门店地址(查询预约详情时返回)\n equipment?: string[] // 设备列表(查询预约详情时返回)\n latitude?: number // 纬度(查询预约详情时返回)\n longitude?: number // 经度(查询预约详情时返回)\n timezone?: string // 门店时区(查询预约详情时返回)\n booking_date: string\n booking_time?: string // 预约开始时间(创建预约时返回)\n time_slot?: string // 时间段 HH:MM-HH:MM(查询预约详情时返回)\n customer_name: string\n customer_email: string\n phone_code?: string // 电话区号\n phone_number?: string // 电话号码\n status: BookingStatus\n cancel_token: string\n created_at: string\n}\n\n// 获取预约详情响应\nexport interface GetBookingResponse {\n booking: Booking\n}\n\n// 取消预约响应\nexport interface CancelBookingResponse {\n booking: Booking\n}\n\n// API 错误码\nexport enum ApiErrorCode {\n SUCCESS = 0,\n PARAM_ERROR = 1001,\n UNAUTHORIZED = 1002,\n FORBIDDEN = 1003,\n NOT_FOUND = 1004,\n CONFLICT = 1005,\n INTERNAL_ERROR = 1006,\n}\n\n// API 错误\nexport class ApiError extends Error {\n code: number\n request_id?: string\n\n constructor(code: number, message: string, request_id?: string) {\n super(message)\n this.code = code\n this.request_id = request_id\n this.name = 'ApiError'\n }\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport type { DemoRoomApiClient } from './client'\nimport type {\n DemoRoom,\n GetTimeslotsResponse,\n Questionnaire,\n CreateBookingRequest,\n Booking,\n} from './types'\nimport { ApiError } from './types'\n\ninterface UseApiState<T> {\n data: T | null\n loading: boolean\n error: ApiError | null\n}\n\n/**\n * 获取门店列表 Hook\n */\nexport function useDemoRooms(\n client: DemoRoomApiClient,\n params: {\n team_code?: string\n brand_website?: string\n locale?: string\n },\n options?: { enabled?: boolean }\n) {\n const [state, setState] = useState<UseApiState<DemoRoom[]>>({\n data: null,\n loading: true,\n error: null,\n })\n\n const enabled = options?.enabled !== false\n\n useEffect(() => {\n if (!enabled) return\n\n let cancelled = false\n\n const fetchData = async () => {\n setState((prev) => ({ ...prev, loading: true, error: null }))\n\n try {\n const data = await client.getDemoRooms(params)\n if (!cancelled) {\n setState({ data, loading: false, error: null })\n }\n } catch (error) {\n if (!cancelled) {\n setState({\n data: null,\n loading: false,\n error: error instanceof ApiError ? error : new ApiError(1006, 'Unknown error'),\n })\n }\n }\n }\n\n fetchData()\n\n return () => {\n cancelled = true\n }\n }, [client, params.team_code, params.brand_website, params.locale, enabled])\n\n return state\n}\n\n/**\n * 获取门店详情 Hook\n */\nexport function useDemoRoom(\n client: DemoRoomApiClient,\n code: string,\n locale?: string,\n options?: { enabled?: boolean }\n) {\n const [state, setState] = useState<UseApiState<DemoRoom>>({\n data: null,\n loading: true,\n error: null,\n })\n\n const enabled = options?.enabled !== false\n\n useEffect(() => {\n if (!enabled || !code) return\n\n let cancelled = false\n\n const fetchData = async () => {\n setState((prev) => ({ ...prev, loading: true, error: null }))\n\n try {\n const data = await client.getDemoRoom(code, locale)\n if (!cancelled) {\n setState({ data, loading: false, error: null })\n }\n } catch (error) {\n if (!cancelled) {\n setState({\n data: null,\n loading: false,\n error: error instanceof ApiError ? error : new ApiError(1006, 'Unknown error'),\n })\n }\n }\n }\n\n fetchData()\n\n return () => {\n cancelled = true\n }\n }, [client, code, locale, enabled])\n\n return state\n}\n\n/**\n * 查询门店时段 Hook\n */\nexport function useTimeslots(\n client: DemoRoomApiClient,\n code: string,\n params: {\n start_date: string\n end_date: string\n timezone?: string\n },\n options?: { enabled?: boolean }\n) {\n const [state, setState] = useState<UseApiState<GetTimeslotsResponse>>({\n data: null,\n loading: true,\n error: null,\n })\n\n const enabled = options?.enabled !== false\n\n useEffect(() => {\n if (!enabled || !code || !params.start_date || !params.end_date) return\n\n let cancelled = false\n\n const fetchData = async () => {\n setState((prev) => ({ ...prev, loading: true, error: null }))\n\n try {\n const data = await client.getTimeslots(code, params)\n if (!cancelled) {\n setState({ data, loading: false, error: null })\n }\n } catch (error) {\n if (!cancelled) {\n setState({\n data: null,\n loading: false,\n error: error instanceof ApiError ? error : new ApiError(1006, 'Unknown error'),\n })\n }\n }\n }\n\n fetchData()\n\n return () => {\n cancelled = true\n }\n }, [client, code, params.start_date, params.end_date, params.timezone, enabled])\n\n return state\n}\n\n/**\n * 查询门店问卷 Hook\n */\nexport function useQuestionnaire(\n client: DemoRoomApiClient,\n code: string,\n questionnaire_id: number | undefined,\n locale?: string,\n options?: { enabled?: boolean }\n) {\n const [state, setState] = useState<UseApiState<Questionnaire>>({\n data: null,\n loading: true,\n error: null,\n })\n\n const enabled = options?.enabled !== false\n\n useEffect(() => {\n if (!enabled || !code || !questionnaire_id) {\n setState({\n data: null,\n loading: false,\n error: null,\n })\n return\n }\n\n let cancelled = false\n\n const fetchData = async () => {\n setState((prev) => ({ ...prev, loading: true, error: null }))\n\n try {\n const data = await client.getQuestionnaire(code, questionnaire_id, locale)\n if (!cancelled) {\n setState({ data, loading: false, error: null })\n }\n } catch (error) {\n if (!cancelled) {\n setState({\n data: null,\n loading: false,\n error: error instanceof ApiError ? error : new ApiError(1006, 'Unknown error'),\n })\n }\n }\n }\n\n fetchData()\n\n return () => {\n cancelled = true\n }\n }, [client, code, questionnaire_id, locale, enabled])\n\n return state\n}\n\n/**\n * 提交预约 Hook\n */\nexport function useCreateBooking(client: DemoRoomApiClient) {\n const [state, setState] = useState<UseApiState<Booking>>({\n data: null,\n loading: false,\n error: null,\n })\n\n const createBooking = useCallback(\n async (data: CreateBookingRequest) => {\n setState({ data: null, loading: true, error: null })\n\n try {\n const result = await client.createBooking(data)\n setState({ data: result, loading: false, error: null })\n return result\n } catch (error) {\n const apiError = error instanceof ApiError ? error : new ApiError(1006, 'Unknown error')\n setState({ data: null, loading: false, error: apiError })\n throw apiError\n }\n },\n [client]\n )\n\n return {\n ...state,\n createBooking,\n }\n}\n\n/**\n * 获取预约详情 Hook\n */\nexport function useBooking(\n client: DemoRoomApiClient,\n token: string,\n locale?: string,\n options?: { enabled?: boolean }\n) {\n const [state, setState] = useState<UseApiState<Booking>>({\n data: null,\n loading: true,\n error: null,\n })\n\n const enabled = options?.enabled !== false\n\n useEffect(() => {\n if (!enabled || !token) return\n\n let cancelled = false\n\n const fetchData = async () => {\n setState((prev) => ({ ...prev, loading: true, error: null }))\n\n try {\n const data = await client.getBooking(token, locale)\n if (!cancelled) {\n setState({ data, loading: false, error: null })\n }\n } catch (error) {\n if (!cancelled) {\n setState({\n data: null,\n loading: false,\n error: error instanceof ApiError ? error : new ApiError(1006, 'Unknown error'),\n })\n }\n }\n }\n\n fetchData()\n\n return () => {\n cancelled = true\n }\n }, [client, token, locale, enabled])\n\n return state\n}\n\n/**\n * 取消预约 Hook\n */\nexport function useCancelBooking(client: DemoRoomApiClient) {\n const [state, setState] = useState<UseApiState<Booking>>({\n data: null,\n loading: false,\n error: null,\n })\n\n const cancelBooking = useCallback(\n async (token: string, locale?: string) => {\n setState({ data: null, loading: true, error: null })\n\n try {\n const result = await client.cancelBooking(token, locale)\n setState({ data: result, loading: false, error: null })\n return result\n } catch (error) {\n const apiError = error instanceof ApiError ? error : new ApiError(1006, 'Unknown error')\n setState({ data: null, loading: false, error: apiError })\n throw apiError\n }\n },\n [client]\n )\n\n return {\n ...state,\n cancelBooking,\n }\n}\n","import React, { useEffect, useRef } from 'react'\nimport { cn } from '@/utils/cn'\n\nexport interface AntdMobileIsolatedProps {\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\n/**\n * 隔离 antd-mobile 全局样式的包装组件\n * 通过创建一个独立的样式上下文来防止 antd-mobile 的全局样式影响应用其他部分\n */\nexport const AntdMobileIsolated: React.FC<AntdMobileIsolatedProps> = ({\n children,\n className,\n style,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!containerRef.current) return\n\n // 重置容器内可能受影响的全局样式\n const container = containerRef.current\n const originalStyles = {\n fontSize: container.style.fontSize,\n fontFamily: container.style.fontFamily,\n lineHeight: container.style.lineHeight,\n color: container.style.color,\n }\n\n // 应用隔离样式\n container.style.fontSize = '14px'\n container.style.fontFamily =\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif'\n container.style.lineHeight = '1.5'\n container.style.color = '#333'\n\n // 清理函数:恢复原始样式\n return () => {\n container.style.fontSize = originalStyles.fontSize\n container.style.fontFamily = originalStyles.fontFamily\n container.style.lineHeight = originalStyles.lineHeight\n container.style.color = originalStyles.color\n }\n }, [])\n\n return (\n <div\n ref={containerRef}\n className={cn('antd-mobile-isolated', className)}\n style={{\n // 使用 all: revert-layer 来隔离样式\n isolation: 'isolate',\n contain: 'layout style',\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n\nAntdMobileIsolated.displayName = 'AntdMobileIsolated'\n","/**\n * 地址解析工具\n * 将 room.address 解析为层级结构:Country > State > City\n */\n\nexport interface LocationHierarchy {\n country: string\n state: string\n city: string\n}\n\n/**\n * 已知国家列表(包含多词国家名)\n * 优先匹配多词国家名,避免误判\n */\nconst KNOWN_COUNTRIES = [\n 'United States',\n 'United Kingdom',\n 'American Samoa',\n 'United Arab Emirates',\n 'Bosnia and Herzegovina',\n 'Trinidad and Tobago',\n 'Saint Kitts and Nevis',\n 'Antigua and Barbuda',\n 'Saint Vincent and the Grenadines',\n 'São Tomé and Príncipe',\n 'United States Minor Outlying Islands',\n 'British Virgin Islands',\n 'United States Virgin Islands',\n 'Cayman Islands',\n 'Cook Islands',\n 'Falkland Islands',\n 'Faroe Islands',\n 'Marshall Islands',\n 'Northern Mariana Islands',\n 'Pitcairn Islands',\n 'Solomon Islands',\n 'Turks and Caicos Islands',\n 'Wallis and Futuna',\n]\n\n/**\n * 从地址字符串中提取国家、州、城市信息\n * 支持多种地址格式,从后往前解析\n *\n * 示例:\n * - \"building information, street test, city-test2, Ofu‑Olosega, American Samoa\"\n * => country: \"American Samoa\", state: \"Ofu‑Olosega\", city: \"city-test2\"\n * - \"111 8th St, San Francisco, CA 94108, United States\"\n * => country: \"United States\", state: \"CA\", city: \"San Francisco\"\n */\nexport function parseAddress(address: string): LocationHierarchy {\n // 按逗号分割地址\n const parts = address.split(',').map((part) => part.trim()).filter(Boolean)\n\n // 默认值\n let country = 'United States'\n let state = ''\n let city = ''\n\n if (parts.length === 0) {\n return { country, state, city }\n }\n\n // 从后往前解析\n // 最后一部分通常是国家\n const lastPart = parts[parts.length - 1]\n\n // 检查最后一部分是否是已知国家\n const matchedCountry = KNOWN_COUNTRIES.find(\n (knownCountry) => lastPart.toLowerCase() === knownCountry.toLowerCase()\n )\n\n if (matchedCountry) {\n country = matchedCountry\n\n // 倒数第二部分是州/省\n if (parts.length >= 2) {\n state = parts[parts.length - 2].split(' ')[0] // 去掉邮编\n }\n\n // 倒数第三部分是城市\n if (parts.length >= 3) {\n city = parts[parts.length - 3]\n }\n } else {\n // 如果最后一部分不是已知国家,尝试其他解析方式\n if (parts.length >= 2) {\n // 可能的格式: \"Street, City, State\"\n state = parts[parts.length - 1].split(' ')[0]\n city = parts[parts.length - 2]\n } else if (parts.length === 1) {\n // 只有一个部分,可能是城市\n city = parts[0]\n }\n }\n\n return {\n country: country.trim(),\n state: state.trim(),\n city: city.trim(),\n }\n}\n\n/**\n * 地理位置节点(用于树形结构)\n */\nexport interface LocationNode {\n id: string\n name: string\n type: 'country' | 'state' | 'city'\n count: number // 该位置的门店数量\n children?: LocationNode[]\n}\n\n/**\n * 从门店列表构建地理位置树\n */\nexport function buildLocationTree(\n locations: Array<{ address: string; id: string }>\n): LocationNode[] {\n const tree: Map<string, LocationNode> = new Map()\n\n locations.forEach((location) => {\n const { country, state, city } = parseAddress(location.address)\n\n // 构建国家节点\n const countryId = country\n if (!tree.has(countryId)) {\n tree.set(countryId, {\n id: countryId,\n name: country,\n type: 'country',\n count: 0,\n children: [],\n })\n }\n\n const countryNode = tree.get(countryId)!\n countryNode.count++\n\n // 构建州节点\n if (state) {\n const stateId = `${country}/${state}`\n let stateNode = countryNode.children?.find((n) => n.id === stateId)\n\n if (!stateNode) {\n stateNode = {\n id: stateId,\n name: state,\n type: 'state',\n count: 0,\n children: [],\n }\n countryNode.children?.push(stateNode)\n }\n\n stateNode.count++\n\n // 构建城市节点\n if (city) {\n const cityId = `${country}/${state}/${city}`\n let cityNode = stateNode.children?.find((n) => n.id === cityId)\n\n if (!cityNode) {\n cityNode = {\n id: cityId,\n name: city,\n type: 'city',\n count: 0,\n }\n stateNode.children?.push(cityNode)\n }\n\n cityNode.count++\n }\n }\n })\n\n return Array.from(tree.values())\n}\n\n/**\n * 按字母分组位置列表\n */\nexport function groupByAlphabet<T extends { name: string }>(\n items: T[]\n): Array<{ title: string; items: T[] }> {\n const groups: Map<string, T[]> = new Map()\n\n items.forEach((item) => {\n const firstChar = item.name.charAt(0).toUpperCase()\n const key = /[A-Z]/.test(firstChar) ? firstChar : '#'\n\n if (!groups.has(key)) {\n groups.set(key, [])\n }\n groups.get(key)!.push(item)\n })\n\n return Array.from(groups.entries())\n .sort(([a], [b]) => {\n if (a === '#') return 1\n if (b === '#') return -1\n return a.localeCompare(b)\n })\n .map(([title, items]) => ({\n title,\n items: items.sort((a, b) => a.name.localeCompare(b.name)),\n }))\n}\n","/* antd-mobile 样式隔离 - 使用更强的隔离策略 */\n.antdMobileScope {\n /* 重置所有继承样式,但保持布局相关属性 */\n all: unset;\n\n /* 恢复必要的属性 */\n display: block;\n position: absolute;\n box-sizing: border-box;\n\n /* 阻止继承字体样式 */\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: #333;\n\n /* 重置 CSS 变量影响 */\n --adm-color-primary: #1677ff;\n --adm-color-text: #333333;\n --adm-font-size-main: 14px;\n}\n\n/* 确保 antd-mobile 组件内部样式正常工作 */\n.antdMobileScope *,\n.antdMobileScope *::before,\n.antdMobileScope *::after {\n box-sizing: border-box;\n}\n\n/* 阻止全局样式继承 */\n.antd-mobile-isolated-container .antdMobileScope :not([class*=\"adm-\"]) {\n all: unset;\n}\n\n/* 保持 antd-mobile 组件样式 */\n.antd-mobile-isolated-container .antdMobileScope [class*=\"adm-\"] {\n all: revert;\n}\n\n/* 隐藏 List.Item 的右侧箭头 */\n.antd-mobile-isolated-container .antdMobileScope .adm-list-item-content-arrow {\n display: none !important;\n}\n","import React, { useState, useMemo } from 'react'\nimport { cn } from '@/utils/cn'\nimport IndexBar from 'antd-mobile/es/components/index-bar'\nimport List from 'antd-mobile/es/components/list'\nimport 'antd-mobile/es/components/index-bar/index-bar.css'\nimport 'antd-mobile/es/components/list/list.css'\nimport { AntdMobileIsolated } from './AntdMobileIsolated'\nimport { groupByAlphabet } from '../utils/addressParser'\nimport styles from './RoomsList.module.css'\n\nexport type LocationLevel = 'country' | 'state' | 'city'\n\nexport interface LocationFilterProps {\n locations: Array<{\n id: string\n country: string\n state: string\n city: string\n }>\n onSelect?: (selection: LocationSelection) => void\n visible?: boolean\n onClose?: () => void\n pageData?: {\n allLocations?: string\n clear?: string\n country?: string\n state?: string\n city?: string\n noStudiosFound?: string\n }\n}\n\nexport interface LocationSelection {\n level: LocationLevel\n country?: string\n state?: string\n city?: string\n}\n\ninterface LocationItem {\n name: string\n code: string\n count: number\n parentCode?: string\n}\n\nexport const LocationFilter: React.FC<LocationFilterProps> = ({\n locations,\n onSelect,\n visible = false,\n onClose,\n pageData = {\n allLocations: 'All Locations',\n clear: 'Clear',\n country: 'Country',\n state: 'State',\n city: 'City',\n noStudiosFound: 'No studios found in this location',\n },\n}) => {\n const [currentLevel, setCurrentLevel] = useState<LocationLevel>('country')\n const [selectedCountry, setSelectedCountry] = useState<string>()\n const [selectedState, setSelectedState] = useState<string>()\n const [searchQuery, setSearchQuery] = useState('')\n\n // 构建位置数据\n const locationData = useMemo(() => {\n const countries = new Map<string, LocationItem>()\n const states = new Map<string, LocationItem>()\n const cities = new Map<string, LocationItem>()\n\n locations.forEach((location) => {\n const { country, state, city } = location\n\n // 统计国家\n if (country) {\n const existing = countries.get(country)\n countries.set(country, {\n name: country,\n code: country,\n count: (existing?.count || 0) + 1,\n })\n }\n\n // 统计州\n if (state) {\n const stateKey = `${country}/${state}`\n const existing = states.get(stateKey)\n states.set(stateKey, {\n name: state,\n code: stateKey,\n count: (existing?.count || 0) + 1,\n parentCode: country,\n })\n }\n\n // 统计城市\n if (city) {\n const cityKey = `${country}/${state}/${city}`\n const existing = cities.get(cityKey)\n cities.set(cityKey, {\n name: city,\n code: cityKey,\n count: (existing?.count || 0) + 1,\n parentCode: `${country}/${state}`,\n })\n }\n })\n\n return {\n countries: Array.from(countries.values()),\n states: Array.from(states.values()),\n cities: Array.from(cities.values()),\n }\n }, [locations])\n\n // 根据当前层级和选择过滤数据\n const filteredItems = useMemo(() => {\n let items: LocationItem[] = []\n\n switch (currentLevel) {\n case 'country':\n items = locationData.countries\n break\n case 'state':\n items = selectedCountry\n ? locationData.states.filter((s) => s.parentCode === selectedCountry)\n : []\n break\n case 'city':\n items = selectedState\n ? locationData.cities.filter((c) => c.parentCode === selectedState)\n : []\n break\n }\n\n // 应用搜索过滤\n if (searchQuery) {\n items = items.filter((item) =>\n item.name.toLowerCase().includes(searchQuery.toLowerCase())\n )\n }\n\n return items\n }, [currentLevel, selectedCountry, selectedState, locationData, searchQuery])\n\n // 按字母分组\n const groupedItems = useMemo(\n () => groupByAlphabet(filteredItems),\n [filteredItems]\n )\n\n // 判断是否显示字母索引条(数据少于10条时不显示)\n const showIndexBar = filteredItems.length >= 10\n\n const handleItemClick = (item: LocationItem) => {\n if (currentLevel === 'country') {\n setSelectedCountry(item.code)\n setCurrentLevel('state')\n } else if (currentLevel === 'state') {\n setSelectedState(item.code)\n setCurrentLevel('city')\n } else if (currentLevel === 'city') {\n // 选择城市,触发回调\n const parts = item.code.split('/')\n onSelect?.({\n level: 'city',\n country: parts[0],\n state: parts[1],\n city: parts[2],\n })\n onClose?.()\n }\n }\n\n const handleTabClick = (level: LocationLevel) => {\n setCurrentLevel(level)\n if (level === 'country') {\n setSelectedCountry(undefined)\n setSelectedState(undefined)\n } else if (level === 'state') {\n setSelectedState(undefined)\n }\n }\n\n if (!visible) return null\n\n return (\n <div\n style={{ height: '794px' }}\n className={cn(\n 'w-full rounded-[12px] absolute z-10 top-0 left-0 bg-white border border-[#E4E5E6]',\n styles.antdMobileScope\n )}\n >\n {/* Header with tabs */}\n <div\n style={{ background: '#F8F8F8' }}\n className=\"rounded-[12px] rounded-b-none h-[108px] font-bold text-[14px] flex flex-col\"\n >\n {/* Close and Search Row */}\n <div className=\"flex items-center justify-end px-[24px] pt-[12px] pb-[8px]\">\n {/* <input\n type=\"text\"\n placeholder=\"Please enter the search city\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"flex-1 h-[32px] px-[12px] rounded-[6px] border border-[#E4E5E6] text-[14px] outline-none focus:border-[#2E8B57]\"\n /> */}\n <button\n onClick={onClose}\n className=\"ml-[12px] w-[24px] h-[24px] flex items-center justify-end\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M6.4 19L5 17.6L10.6 12L5 6.4L6.4 5L12 10.6L17.6 5L19 6.4L13.4 12L19 17.6L17.6 19L12 13.4L6.4 19Z\"\n fill=\"#1D1D1F\"\n />\n </svg>\n </button>\n </div>\n\n {/* Tabs */}\n <div className=\"flex items-center text-[16px] px-[20px] gap-[16px] py-[16px]\">\n <button\n onClick={() => handleTabClick('country')}\n className={cn(\n 'pb-[4px] transition-colors',\n currentLevel === 'country'\n ? 'text-[#080A0F] border-b-2 border-[#3ADB67]'\n : 'text-[#080A0F]'\n )}\n >\n {pageData.country}\n </button>\n <button\n onClick={() => handleTabClick('state')}\n disabled={!selectedCountry}\n className={cn(\n 'pb-[4px] transition-colors',\n currentLevel === 'state'\n ? 'text-[#080A0F] border-b-2 border-[#3ADB67]'\n : 'text-[#080A0F]',\n !selectedCountry && 'opacity-50 cursor-not-allowed'\n )}\n >\n {pageData.state}\n </button>\n <button\n onClick={() => handleTabClick('city')}\n disabled={!selectedState}\n className={cn(\n 'pb-[4px] transition-colors',\n currentLevel === 'city'\n ? 'text-[#080A0F] border-b-2 border-[#3ADB67]'\n : 'text-[#080A0F]',\n !selectedState && 'opacity-50 cursor-not-allowed'\n )}\n >\n {pageData.city}\n </button>\n </div>\n </div>\n\n {/* Content */}\n <AntdMobileIsolated style={{ height: 'calc(100% - 108px)' }}>\n {showIndexBar ? (\n <IndexBar style={{ height: '100%' }}>\n {groupedItems.map((group) => {\n const { title, items } = group\n return (\n <IndexBar.Panel index={title} title={title} key={title}>\n <List>\n {items.map((item) => (\n <List.Item\n onClick={() => handleItemClick(item)}\n key={item.code}\n className='text-[16px] !pl-[24px]'\n style={{ cursor: 'pointer' }}\n // extra={\n // <div className=\"flex items-center gap-[8px]\">\n // <span className=\"text-[#767880] text-[14px]\">\n // {item.count}\n // </span>\n // </div>\n // }\n >\n {item.name}\n </List.Item>\n ))}\n </List>\n </IndexBar.Panel>\n )\n })}\n </IndexBar>\n ) : (\n <div style={{ height: '100%', overflow: 'auto' }}>\n <List>\n {filteredItems.map((item) => (\n <List.Item\n onClick={() => handleItemClick(item)}\n key={item.code}\n className='text-[16px] !pl-[24px]'\n style={{ cursor: 'pointer' }}\n >\n {item.name}\n </List.Item>\n ))}\n </List>\n </div>\n )}\n </AntdMobileIsolated>\n </div>\n )\n}\n\nLocationFilter.displayName = 'LocationFilter'\n","import React, { useMemo, useState } from 'react'\nimport { cn } from '@/utils/cn'\nimport { Title } from './Title'\nimport { StudioCard } from './StudioCard'\nimport { StudioLocation, StudioMap } from './StudioMap'\nimport { useDemoRooms } from '@/api/hooks'\nimport type { DemoRoomApiClient } from '@/api/client'\nimport { LocationFilter, type LocationSelection } from './LocationFilter'\nimport type { DemoRoomPageData } from '../types/pageData'\n\nexport interface RoomsListProps extends React.HTMLAttributes<HTMLDivElement> {\n googleMapsApiKey?: string\n layoutClassName?: string\n apiClient: DemoRoomApiClient\n teamCode?: string\n brandWebsite?: string\n /**\n * Callback when user clicks \"Schedule Now\" button\n * @param demoRoomCode - The demo room code\n */\n onSchedule?: (demoRoomCode: string) => void\n /**\n * 页面可配置数据(文案、图标等)\n */\n pageData?: DemoRoomPageData\n}\n\n// 默认 pageData 配置\nconst defaultPageData: Required<DemoRoomPageData> = {\n title: 'Find a Studio Near You',\n loadingText: 'Loading demo rooms...',\n errorTitle: 'Failed to load demo rooms',\n machine: 'eufymake E1',\n locationFilter: {\n allLocations: 'All Locations',\n clear: 'Clear',\n country: 'Country',\n state: 'State',\n city: 'City',\n noStudiosFound: 'No studios found in this location',\n },\n studioCard: {\n scheduleNow: 'Schedule Now',\n available: 'Available',\n away: 'away',\n },\n map: {\n apiKeyRequired: 'Google Maps API Key is required',\n loadingMap: 'Loading map...',\n scheduleNow: 'Schedule Now',\n available: 'Available',\n },\n defaultCountry: 'United States',\n noAvailableTime: 'No available time',\n}\n\n// 默认测试数据 - 美国主要城市的工作室位置\nconst defaultStudioLocations: StudioLocation[] = [\n {\n id: '1',\n name: 'Design District Demo Room',\n address: '111 8th St, San Francisco, CA, United States',\n city: 'San Francisco',\n state: 'CA',\n zipCode: '94108',\n country: 'United States',\n lat: 37.7749,\n lng: -122.4194,\n availableTime: 'Oct 28, 2:00 PM',\n euifyMakeModel: 'euifyMake E1, euifyMake M5',\n },\n {\n id: '2',\n name: 'Brooklyn Creative Studio',\n address: '456 Broadway, Brooklyn, NY, United States',\n city: 'Brooklyn',\n state: 'NY',\n zipCode: '11211',\n country: 'United States',\n lat: 40.7128,\n lng: -74.006,\n availableTime: 'Oct 29, 3:00 PM',\n euifyMakeModel: 'euifyMake E1, euifyMake M5',\n },\n {\n id: '3',\n name: 'Austin Innovation Hub',\n address: '789 Tech Blvd, Austin, TX, United States',\n city: 'Austin',\n state: 'TX',\n zipCode: '78701',\n country: 'United States',\n lat: 30.2672,\n lng: -97.7431,\n availableTime: 'Oct 30, 1:00 PM',\n euifyMakeModel: 'euifyMake M5',\n },\n {\n id: '4',\n name: 'Seattle Maker Space',\n address: '321 Pine St, Seattle, WA, United States',\n city: 'Seattle',\n state: 'WA',\n zipCode: '98101',\n country: 'United States',\n lat: 47.6062,\n lng: -122.3321,\n availableTime: 'Oct 31, 11:00 AM',\n euifyMakeModel: 'euifyMake E1',\n },\n {\n id: '5',\n name: 'Chicago Design Center',\n address: '654 Michigan Ave, Chicago, IL, United States',\n city: 'Chicago',\n state: 'IL',\n zipCode: '60611',\n country: 'United States',\n lat: 41.8781,\n lng: -87.6298,\n availableTime: 'Nov 1, 2:30 PM',\n euifyMakeModel: 'euifyMake E1, euifyMake M5',\n },\n {\n id: '6',\n name: 'Miami Beach Studio',\n address: '987 Ocean Drive, Miami Beach, FL, United States',\n city: 'Miami Beach',\n state: 'FL',\n zipCode: '33139',\n country: 'United States',\n lat: 25.7617,\n lng: -80.1918,\n availableTime: 'Nov 2, 10:00 AM',\n euifyMakeModel: 'euifyMake M5',\n },\n {\n id: '7',\n name: 'Denver Mountain Studio',\n address: '147 16th St, Denver, CO, United States',\n city: 'Denver',\n state: 'CO',\n zipCode: '80202',\n country: 'United States',\n lat: 39.7392,\n lng: -104.9903,\n availableTime: 'Nov 3, 4:00 PM',\n euifyMakeModel: 'euifyMake E1',\n },\n {\n id: '8',\n name: 'Los Angeles Creative Lab',\n address: '258 Main St, Los Angeles, CA, United States',\n city: 'Los Angeles',\n state: 'CA',\n zipCode: '90012',\n country: 'United States',\n lat: 34.0522,\n lng: -118.2437,\n availableTime: 'Nov 4, 1:00 PM',\n euifyMakeModel: 'euifyMake E1, euifyMake M5',\n },\n]\n\nexport const RoomsList: React.FC<RoomsListProps> = ({\n googleMapsApiKey,\n className,\n apiClient,\n teamCode,\n brandWebsite,\n onSchedule,\n pageData,\n ...props\n}) => {\n // 合并用户提供的 pageData 和默认配置\n const mergedPageData = useMemo(\n () => ({\n ...defaultPageData,\n ...pageData,\n locationFilter: {\n ...defaultPageData.locationFilter,\n ...pageData?.locationFilter,\n },\n studioCard: { ...defaultPageData.studioCard, ...pageData?.studioCard },\n map: { ...defaultPageData.map, ...pageData?.map },\n }),\n [pageData]\n )\n\n // 状态管理\n const [showLocationFilter, setShowLocationFilter] = useState(false)\n const [selectedLocation, setSelectedLocation] = useState<LocationSelection>()\n const [hoveredRoomId, setHoveredRoomId] = useState<string | null>(null)\n\n // 使用 API 获取门店列表\n const {\n data: demoRooms,\n loading,\n error,\n } = useDemoRooms(apiClient, {\n team_code: teamCode,\n brand_website: brandWebsite,\n })\n console.log(demoRooms)\n\n // 将 API 返回的 DemoRoom 类型转换为 StudioLocation 类型\n const studioLocations = useMemo<StudioLocation[]>(() => {\n if (!demoRooms) return defaultStudioLocations\n\n return demoRooms.map((room) => {\n // 获取下一个可用时段\n const nextAvailableTimeslot = room?.timeslots?.find(\n (slot) => slot.status === 'available'\n )\n\n // 使用 API 返回的 location 数据,不再解析 address\n const country = room.location?.country || mergedPageData.defaultCountry\n const state = room.location?.state || ''\n const city = room.location?.city || ''\n\n // 拼接完整地址: room.address 可能只包含街道地址,需要加上 location 信息\n const addressParts = [room.address, city, state, country].filter(Boolean)\n const fullAddress = addressParts.join(', ')\n\n return {\n id: room.code,\n name: room.name,\n address: fullAddress,\n city,\n state,\n zipCode: '',\n country,\n lat: Number(room.latitude) || 0,\n lng: Number(room.longitude) || 0,\n availableTime: nextAvailableTimeslot\n ? `${nextAvailableTimeslot.start_time}`\n : mergedPageData.noAvailableTime,\n euifyMakeModel: room?.equipment?.join(', ') || '',\n }\n })\n }, [demoRooms, mergedPageData.defaultCountry, mergedPageData.noAvailableTime])\n\n // 根据选择的位置过滤门店\n const filteredStudioLocations = useMemo(() => {\n if (!selectedLocation) return studioLocations\n\n return studioLocations.filter((location) => {\n // 直接使用 location 对象中的 country, state, city 字段进行比较\n if (selectedLocation.city) {\n return (\n location.country === selectedLocation.country &&\n location.state === selectedLocation.state &&\n location.city === selectedLocation.city\n )\n }\n\n if (selectedLocation.state) {\n return (\n location.country === selectedLocation.country &&\n location.state === selectedLocation.state\n )\n }\n\n if (selectedLocation.country) {\n return location.country === selectedLocation.country\n }\n\n return true\n })\n }, [studioLocations, selectedLocation])\n\n // 获取当前选择的位置名称\n const getSelectedLocationName = () => {\n if (!selectedLocation) return mergedPageData.locationFilter.allLocations\n if (selectedLocation.city) return selectedLocation.city\n if (selectedLocation.state) return selectedLocation.state\n if (selectedLocation.country) return selectedLocation.country\n return mergedPageData.locationFilter.allLocations\n }\n\n // 处理位置选择\n const handleLocationSelect = (selection: LocationSelection) => {\n setSelectedLocation(selection)\n setShowLocationFilter(false)\n }\n\n // 清除位置过滤\n const handleClearFilter = () => {\n setSelectedLocation(undefined)\n }\n\n console.log(filteredStudioLocations)\n\n return (\n <div className={className} {...props}>\n {/* Section Title */}\n <Title title={mergedPageData.title}></Title>\n\n {/* Loading State */}\n {loading && (\n <div className=\"flex items-center justify-center h-[794px]\">\n <div className=\"text-center\">\n <div className=\"text-lg font-medium\">\n {mergedPageData.loadingText}\n </div>\n </div>\n </div>\n )}\n\n {/* Error State */}\n {error && (\n <div className=\"flex items-center justify-center h-[794px]\">\n <div className=\"text-center\" style={{ color: '#FF4D4D' }}>\n <div className=\"text-lg font-medium\">\n {mergedPageData.errorTitle}\n </div>\n <div className=\"text-sm mt-2\">{error.message}</div>\n </div>\n </div>\n )}\n\n {/* Content */}\n {!loading && !error && (\n <div className=\"flex h-[794px] gap-4\">\n <div\n className=\"flex-none relative w-[420px] l:!w-full\"\n style={{ height: '794px' }}\n >\n {/* Filter Header */}\n <div className=\"rounded-[12px] mb-4 bg-white border border-[#E4E5E6] px-[20px] py-[16px]\">\n {/* First Row */}\n <div className=\"h-[40px] font-bold text-[16px] gap-10 flex items-center\">\n <button\n className=\"flex cursor-pointer items-center hover:text-[#3ADB67] transition-colors\"\n onClick={() => setShowLocationFilter(true)}\n >\n <span className=\"mr-1\">{getSelectedLocationName()}</span>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M16.7661 9.23364C17.078 9.5455 17.0779 10.0516 16.7661 10.3635L12.5991 14.5305C12.2874 14.842 11.782 14.8418 11.4702 14.5305L7.30322 10.3635C6.99135 10.0516 6.99135 9.54552 7.30322 9.23364C7.615 8.9221 8.1203 8.92219 8.43213 9.23364L12.0347 12.8362L15.6362 9.23364C15.9481 8.92183 16.4543 8.92181 16.7661 9.23364Z\"\n fill=\"currentColor\"\n />\n </svg>\n </button>\n {selectedLocation && (\n <button\n onClick={handleClearFilter}\n className=\"ml-auto text-[14px] text-[#2E8B57] hover:underline\"\n >\n {mergedPageData.locationFilter.clear}\n </button>\n )}\n <div className=\"flex text-[#767880] cursor-not-allowed\">\n {mergedPageData.machine}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M16.7661 9.23364C17.078 9.5455 17.0779 10.0516 16.7661 10.3635L12.5991 14.5305C12.2874 14.842 11.782 14.8418 11.4702 14.5305L7.30322 10.3635C6.99135 10.0516 6.99135 9.54552 7.30322 9.23364C7.615 8.9221 8.1203 8.92219 8.43213 9.23364L12.0347 12.8362L15.6362 9.23364C15.9481 8.92183 16.4543 8.92181 16.7661 9.23364Z\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n </div>\n </div>\n\n {/* Room List */}\n <div\n style={{ maxHeight: '706px', overflow: 'auto' }}\n className=\"rounded-[12px] bg-white border h-[706px] border-[#E4E5E6]\"\n >\n {filteredStudioLocations.length === 0 ? (\n <div className=\"flex items-center justify-center h-[200px] text-[#767880]\">\n {mergedPageData.locationFilter.noStudiosFound}\n </div>\n ) : (\n filteredStudioLocations.map((item) => {\n return (\n <StudioCard\n key={item.id}\n code={item.id}\n name={item?.name}\n availableTime={item?.availableTime || ''}\n address={item?.address}\n city={item?.city}\n state={item?.state}\n zipCode={item?.zipCode}\n euifyMakeModel={item?.euifyMakeModel || ''}\n onSchedule={onSchedule}\n onMouseEnter={() => setHoveredRoomId(item.id)}\n onMouseLeave={() => setHoveredRoomId(null)}\n pageData={{\n ...mergedPageData.studioCard,\n noAvailableTime: mergedPageData?.noAvailableTime,\n }}\n />\n )\n })\n )}\n </div>\n\n {/* Location Filter Overlay */}\n <LocationFilter\n locations={studioLocations.map((loc) => ({\n id: loc.id,\n country: loc.country,\n state: loc.state,\n city: loc.city,\n }))}\n visible={showLocationFilter}\n onSelect={handleLocationSelect}\n onClose={() => setShowLocationFilter(false)}\n pageData={mergedPageData.locationFilter}\n />\n </div>\n {googleMapsApiKey && (\n <div className={cn('flex-1 l:!hidden')}>\n <StudioMap\n googleMapsApiKey={googleMapsApiKey}\n locations={filteredStudioLocations}\n hoveredLocationId={hoveredRoomId}\n onSchedule={onSchedule}\n mapHeight=\"794px\"\n pageData={{\n ...mergedPageData.map,\n noAvailableTime: pageData?.noAvailableTime,\n }}\n />\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n\nRoomsList.displayName = 'RoomsList'\n","import type {\n ApiResponse,\n DemoRoom,\n GetDemoRoomsResponse,\n GetTimeslotsResponse,\n Questionnaire,\n CreateBookingRequest,\n Booking,\n GetBookingResponse,\n CancelBookingResponse,\n} from './types'\nimport { ApiError, ApiErrorCode } from './types'\n\nexport interface DemoRoomApiConfig {\n baseUrl: string\n apiKey: string\n locale?: string\n timeout?: number\n}\n\nexport class DemoRoomApiClient {\n private config: DemoRoomApiConfig\n\n constructor(config: DemoRoomApiConfig) {\n this.config = {\n timeout: 30000,\n ...config,\n }\n }\n\n private async request<T>(\n endpoint: string,\n options: RequestInit = {}\n ): Promise<T> {\n const url = `${this.config.baseUrl}${endpoint}`\n\n const headers: Record<string, string> = {\n 'X-API-Key': this.config.apiKey,\n 'Content-Type': 'application/json',\n ...(options.headers as Record<string, string>),\n }\n\n // 添加语言偏好\n if (this.config.locale) {\n headers['Accept-Language'] = this.config.locale\n }\n\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout)\n\n const response = await fetch(url, {\n ...options,\n headers,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n const data: ApiResponse<T> = await response.json()\n\n if (data.code !== ApiErrorCode.SUCCESS) {\n throw new ApiError(data.code, data.message, data.request_id)\n }\n\n return data.data\n } catch (error) {\n if (error instanceof ApiError) {\n throw error\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new ApiError(ApiErrorCode.INTERNAL_ERROR, 'Request timeout')\n }\n throw new ApiError(ApiErrorCode.INTERNAL_ERROR, error.message)\n }\n\n throw new ApiError(ApiErrorCode.INTERNAL_ERROR, 'Unknown error')\n }\n }\n\n /**\n * 获取门店列表\n * @param params.team_code 团队编码\n * @param params.brand_website 品牌站点\n * @param params.locale 语言偏好(可选)\n */\n async getDemoRooms(params: {\n team_code?: string\n brand_website?: string\n locale?: string\n }): Promise<DemoRoom[]> {\n const searchParams = new URLSearchParams()\n\n if (params.team_code) {\n searchParams.append('team_code', params.team_code)\n }\n\n if (params.brand_website) {\n searchParams.append('brand_website', params.brand_website)\n }\n\n if (params.locale) {\n searchParams.append('locale', params.locale)\n }\n\n const response = await this.request<GetDemoRoomsResponse>(\n `/api/v1/store/demorooms?${searchParams.toString()}`\n )\n\n return response.demorooms\n }\n\n /**\n * 获取门店详情\n * @param code 门店编码\n * @param locale 语言偏好(可选)\n */\n async getDemoRoom(code: string, locale?: string): Promise<DemoRoom> {\n const searchParams = new URLSearchParams()\n if (locale) {\n searchParams.append('locale', locale)\n }\n\n const query = searchParams.toString()\n return this.request<DemoRoom>(\n `/api/v1/store/demorooms/${code}${query ? `?${query}` : ''}`\n )\n }\n\n /**\n * 查询门店时段\n * @param code 门店编码\n * @param params.start_date 开始日期 (YYYY-MM-DD)\n * @param params.end_date 结束日期 (YYYY-MM-DD)\n * @param params.timezone 时区(可选)\n */\n async getTimeslots(\n code: string,\n params: {\n start_date: string\n end_date: string\n timezone?: string\n }\n ): Promise<GetTimeslotsResponse> {\n const searchParams = new URLSearchParams({\n start_date: params.start_date,\n end_date: params.end_date,\n })\n\n if (params.timezone) {\n searchParams.append('timezone', params.timezone)\n }\n\n return this.request<GetTimeslotsResponse>(\n `/api/v1/store/demorooms/${code}/timeslots?${searchParams.toString()}`\n )\n }\n\n /**\n * 查询门店问卷\n * @param code 门店编码\n * @param questionnaire_id 问卷ID\n * @param locale 语言偏好(可选)\n */\n async getQuestionnaire(\n code: string,\n questionnaire_id: number,\n locale?: string\n ): Promise<Questionnaire> {\n const searchParams = new URLSearchParams()\n if (locale) {\n searchParams.append('locale', locale)\n }\n\n const query = searchParams.toString()\n return this.request<Questionnaire>(\n `/api/v1/store/demorooms/${code}/questionnaires/${questionnaire_id}${query ? `?${query}` : ''}`\n )\n }\n\n /**\n * 提交预约\n * @param data 预约数据\n */\n async createBooking(data: CreateBookingRequest): Promise<Booking> {\n return this.request<Booking>('/api/v1/store/bookings', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n }\n\n /**\n * 根据 token 获取预约详情(支持多语言)\n * @param token 预约凭证 (cancel_token)\n * @param locale 语言偏好(可选,也可以通过 Accept-Language Header)\n */\n async getBooking(token: string, locale?: string): Promise<Booking> {\n const headers: Record<string, string> = {}\n\n // 如果指定了 locale,通过 Accept-Language Header 传递\n if (locale) {\n headers['Accept-Language'] = locale\n }\n\n const response = await this.request<GetBookingResponse>(\n `/api/v1/store/bookings/${token}`,\n { headers }\n )\n return response.booking\n }\n\n /**\n * 取消预约(支持多语言邮件通知)\n * @param token 预约凭证 (cancel_token)\n * @param locale 语言偏好(可选,用于邮件通知)\n */\n async cancelBooking(token: string, locale?: string): Promise<Booking> {\n const headers: Record<string, string> = {}\n\n // 如果指定了 locale,通过 Accept-Language Header 传递\n if (locale) {\n headers['Accept-Language'] = locale\n }\n\n const response = await this.request<CancelBookingResponse>(\n `/api/v1/store/bookings/${token}/cancel`,\n {\n method: 'POST',\n headers,\n }\n )\n return response.booking\n }\n}\n\n// 创建默认客户端实例的辅助函数\nexport function createDemoRoomApi(config: DemoRoomApiConfig): DemoRoomApiClient {\n return new DemoRoomApiClient(config)\n}\n","import React, { useMemo } from 'react'\nimport { cn } from '@/utils/cn'\nimport { RoomsList } from './components/RoomsList'\nimport { createDemoRoomApi } from '@/api'\nimport type { DemoRoomApiClient } from '@/api'\nimport type { DemoRoomPageData } from './types/pageData'\n\nexport interface DemoRoomProps extends React.HTMLAttributes<HTMLDivElement> {\n layoutClassName?: string\n /**\n * 谷歌地图 API Key\n */\n googleMapsApiKey?: string\n /**\n * API 配置\n */\n apiConfig: {\n baseUrl: string\n apiKey: string\n locale?: string\n }\n /**\n * 团队编码或品牌站点(二选一)\n */\n teamCode?: string\n brandWebsite?: string\n /**\n * Callback when user clicks \"Schedule Now\" button\n * @param demoRoomCode - The demo room code\n */\n onSchedule?: (demoRoomCode: string) => void\n /**\n * 页面可配置数据(文案、图标等)\n */\n pageData?: DemoRoomPageData\n}\n\nexport const DemoRoom: React.FC<DemoRoomProps> = ({\n className,\n layoutClassName,\n googleMapsApiKey,\n apiConfig,\n teamCode,\n brandWebsite,\n onSchedule,\n pageData,\n ...props\n}) => {\n // 创建 API 客户端实例\n const apiClient = useMemo<DemoRoomApiClient>(\n () => createDemoRoomApi(apiConfig),\n [apiConfig]\n )\n\n return (\n <div className={cn(className)} {...props}>\n <RoomsList\n className={layoutClassName}\n googleMapsApiKey={googleMapsApiKey}\n apiClient={apiClient}\n teamCode={teamCode}\n brandWebsite={brandWebsite}\n onSchedule={onSchedule}\n pageData={pageData}\n ></RoomsList>\n </div>\n )\n}\n\nDemoRoom.displayName = 'DemoRoom'\n","import React, { useState } from 'react'\nimport { cn } from '@/utils/cn'\nimport type { Question } from '@/api/types'\n\nexport interface QuestionnaireFormProps {\n questions: Question[]\n pageData?: {\n submit?: string\n submitting?: string\n countryCodes?: Array<{ code?: string; country?: string }>\n agrees?: string[]\n emailDescription?: string\n }\n selectedTimeslotId?: number | null\n onSubmit?: (responses: Record<string, any>) => void\n loading?: boolean\n className?: string\n}\n\nexport const QuestionnaireForm: React.FC<QuestionnaireFormProps> = ({\n questions,\n onSubmit,\n pageData,\n selectedTimeslotId,\n loading = false,\n className,\n}) => {\n const [responses, setResponses] = useState<Record<string, any>>({})\n const [errors, setErrors] = useState<Record<string, string>>({})\n const [agreements, setAgreements] = useState<Record<number, boolean>>({})\n const [agreementError, setAgreementError] = useState<string>('')\n const [phoneCountryCodes, setPhoneCountryCodes] = useState<\n Record<string, string>\n >({})\n\n // 默认区号列表(如果 pageData 中没有提供)\n const defaultCountryCodes = [\n { code: '+1', country: 'US/CA' },\n { code: '+86', country: 'CN' },\n { code: '+44', country: 'UK' },\n { code: '+81', country: 'JP' },\n { code: '+82', country: 'KR' },\n { code: '+65', country: 'SG' },\n { code: '+852', country: 'HK' },\n { code: '+886', country: 'TW' },\n { code: '+61', country: 'AU' },\n { code: '+49', country: 'DE' },\n { code: '+33', country: 'FR' },\n ]\n\n const countryCodes = pageData?.countryCodes || defaultCountryCodes\n\n // 获取问题的唯一标识符,优先使用 id,没有则使用 key\n const getQuestionId = (question: Question): string => {\n return question.id || question.key || ''\n }\n\n const handleChange = (questionId: string, value: any) => {\n setResponses((prev) => ({\n ...prev,\n [questionId]: value,\n }))\n // Clear error when user starts typing\n if (errors[questionId]) {\n setErrors((prev) => {\n const newErrors = { ...prev }\n delete newErrors[questionId]\n return newErrors\n })\n }\n }\n\n const handleEmailBlur = (questionId: string, value: string) => {\n if (!value) return // Skip validation if empty (handled by required check)\n\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n if (!emailRegex.test(value)) {\n setErrors((prev) => ({\n ...prev,\n [questionId]: 'Please enter a valid email address',\n }))\n }\n }\n\n const handleCountryCodeChange = (questionId: string, code: string) => {\n setPhoneCountryCodes((prev) => ({\n ...prev,\n [questionId]: code,\n }))\n }\n\n const handleCheckboxChange = (\n questionId: string,\n optionValue: string,\n checked: boolean\n ) => {\n const currentValues = responses[questionId] || []\n const newValues = checked\n ? [...currentValues, optionValue]\n : currentValues.filter((v: string) => v !== optionValue)\n\n handleChange(questionId, newValues)\n }\n\n const handleAgreementChange = (index: number, checked: boolean) => {\n setAgreements((prev) => ({\n ...prev,\n [index]: checked,\n }))\n // Clear agreement error when user checks any agreement\n if (checked && agreementError) {\n setAgreementError('')\n }\n }\n\n const validateForm = (): boolean => {\n const newErrors: Record<string, string> = {}\n\n questions.forEach((question) => {\n if (question.required) {\n const questionId = getQuestionId(question)\n const value = responses[questionId]\n if (!value || (Array.isArray(value) && value.length === 0)) {\n newErrors[questionId] = 'This field is required'\n }\n }\n })\n\n // Validate agreements\n const agrees = pageData?.agrees || []\n if (agrees.length > 0) {\n const allAgreed = agrees.every(\n (_: any, index: number) => agreements[index]\n )\n if (!allAgreed) {\n setAgreementError(\n 'Please agree to all terms and conditions to continue'\n )\n setErrors(newErrors)\n return false\n }\n }\n\n setErrors(newErrors)\n setAgreementError('')\n return Object.keys(newErrors).length === 0\n }\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (validateForm()) {\n // Separate country code and phone number for tel/phone fields\n const finalResponses = { ...responses }\n questions.forEach((question) => {\n if (question.type === 'tel' || question.type === 'phone') {\n const questionId = getQuestionId(question)\n const countryCode = phoneCountryCodes[questionId] || '+1'\n const phoneNumber = responses[questionId]\n if (phoneNumber) {\n // Store phone number without country code\n finalResponses[questionId] = phoneNumber\n // Store country code in a separate field\n // Support both 'phone_code' and 'customer_phone_code' field names\n if (questionId === 'phone' || questionId === 'customer_phone_number') {\n finalResponses['phone_code'] = countryCode\n finalResponses['customer_phone_code'] = countryCode\n }\n }\n }\n })\n onSubmit?.(finalResponses)\n }\n }\n\n const renderQuestion = (question: Question) => {\n const questionId = getQuestionId(question)\n const hasError = !!errors[questionId]\n\n switch (question.type) {\n case 'text':\n return (\n <input\n type={question.type}\n value={responses[questionId] || ''}\n onChange={(e) => handleChange(questionId, e.target.value)}\n placeholder={question.placeholder}\n className={cn(\n 'w-full px-4 py-3 rounded-lg border text-base bg-white dark:bg-white dark:text-gray-900',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:border-transparent',\n hasError ? 'border-red-500' : 'border-[#E4E5E6]'\n )}\n />\n )\n\n case 'email':\n return (\n <input\n type=\"email\"\n value={responses[questionId] || ''}\n onChange={(e) => handleChange(questionId, e.target.value)}\n onBlur={(e) => handleEmailBlur(questionId, e.target.value)}\n placeholder={question.placeholder}\n className={cn(\n 'w-full px-4 py-3 rounded-lg border text-base bg-white dark:bg-white dark:text-gray-900',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:border-transparent',\n hasError ? 'border-red-500' : 'border-[#E4E5E6]'\n )}\n />\n )\n\n case 'tel':\n case 'phone':\n return (\n <div className=\"flex gap-2\">\n <div className=\"relative\">\n <select\n value={phoneCountryCodes[questionId] || '+1'}\n onChange={(e) =>\n handleCountryCodeChange(questionId, e.target.value)\n }\n className={cn(\n 'appearance-none pl-3 pr-8 py-3 rounded-lg border text-base',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:border-transparent',\n 'bg-white cursor-pointer w-[80px]',\n 'dark:bg-white dark:text-gray-900',\n hasError ? 'border-red-500' : 'border-[#E4E5E6]'\n )}\n >\n {countryCodes.map((item) => (\n <option key={item.code} value={item.code}>\n {item.code}\n </option>\n ))}\n </select>\n <div className=\"absolute right-2 top-1/2 -translate-y-1/2 pointer-events-none\">\n <svg\n width=\"12\"\n height=\"8\"\n viewBox=\"0 0 12 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 1.5L6 6.5L11 1.5\"\n stroke=\"#9CA3AF\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <input\n type=\"tel\"\n value={responses[questionId] || ''}\n onChange={(e) => handleChange(questionId, e.target.value)}\n placeholder={question.placeholder}\n className={cn(\n 'flex-1 px-4 py-3 rounded-lg border text-base bg-white dark:bg-white dark:text-gray-900',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:border-transparent',\n hasError ? 'border-red-500' : 'border-[#E4E5E6]'\n )}\n />\n </div>\n )\n\n case 'textarea':\n return (\n <textarea\n value={responses[questionId] || ''}\n onChange={(e) => handleChange(questionId, e.target.value)}\n placeholder={question.placeholder}\n rows={4}\n className={cn(\n 'w-full px-4 py-3 rounded-lg border text-base resize-none bg-white',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:border-transparent',\n 'dark:bg-white dark:text-gray-900',\n hasError ? 'border-red-500' : 'border-[#E4E5E6]'\n )}\n />\n )\n\n case 'radio':\n return (\n <div className=\"space-y-3\">\n {question?.options?.map((option) => (\n <label\n key={option.value || option.label}\n className=\"flex items-center gap-3 cursor-pointer group\"\n >\n <input\n type=\"radio\"\n name={questionId}\n value={option.value || option.label}\n checked={\n responses[questionId] === (option.value || option.label)\n }\n onChange={(e) => handleChange(questionId, e.target.value)}\n className=\"w-5 h-5 text-[#3ADB67] focus:ring-[#3ADB67] focus:ring-2\"\n style={{\n backgroundColor: 'white',\n borderColor: '#D1D5DB',\n colorScheme: 'light'\n }}\n />\n <span className=\"text-base text-gray-900 dark:text-gray-900 font-bold group-hover:text-[#3ADB67] transition-colors\">\n {option.label}\n </span>\n </label>\n ))}\n </div>\n )\n\n case 'checkbox':\n return (\n <div className=\"space-y-3\">\n {question?.options?.map((option) => {\n const optionValue = option.value || option.label\n const isChecked = (responses[questionId] || []).includes(\n optionValue\n )\n\n return (\n <label\n key={optionValue}\n className=\"flex items-center gap-3 cursor-pointer group\"\n >\n <input\n type=\"checkbox\"\n checked={isChecked}\n onChange={(e) =>\n handleCheckboxChange(\n questionId,\n optionValue,\n e.target.checked\n )\n }\n className=\"w-5 h-5 text-[#3ADB67] focus:ring-[#3ADB67] focus:ring-2 rounded\"\n style={{\n backgroundColor: 'white',\n borderColor: '#D1D5DB',\n colorScheme: 'light'\n }}\n />\n <span className=\"text-base text-gray-900 dark:text-gray-900 font-bold group-hover:text-[#3ADB67] transition-colors\">\n {option.label}\n </span>\n </label>\n )\n })}\n </div>\n )\n\n case 'select':\n return (\n <select\n value={responses[questionId] || ''}\n onChange={(e) => handleChange(questionId, e.target.value)}\n className={cn(\n 'w-full px-4 py-3 rounded-lg border text-base bg-white dark:bg-white dark:text-gray-900',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:border-transparent',\n 'cursor-pointer',\n hasError ? 'border-red-500' : 'border-[#E4E5E6]'\n )}\n >\n <option value=\"\">\n {question.placeholder || 'Please select...'}\n </option>\n {question.options?.map((option) => (\n <option\n key={option.value || option.label}\n value={option.value || option.label}\n >\n {option.label}\n </option>\n ))}\n </select>\n )\n\n default:\n return null\n }\n }\n\n return (\n <div className=\"pb-[80px] light\">\n {/* 仅在有问题时显示问卷表单区域 */}\n {questions && questions.length > 0 && (\n <div className=\"bg-white rounded-[12px] border border-[#E4E5E6] p-8 dark:bg-white dark:border-[#E4E5E6] l:p-4\">\n <form onSubmit={handleSubmit} className={cn('space-y-6', className)}>\n {questions.map((question) => {\n const questionId = getQuestionId(question)\n return (\n <div key={questionId} className=\"space-y-2\">\n <label className=\"block\">\n <span className=\"text-base font-bold text-gray-900 dark:text-gray-900\">\n {question.label}\n {question.required && (\n <span className=\"text-red-500 ml-1\">*</span>\n )}\n </span>\n {question.description && (\n <span className=\"block text-sm text-gray-600 dark:text-gray-600 font-bold mt-1\">\n {question.description}\n </span>\n )}\n {question.type === 'email' &&\n questionId === 'email' &&\n pageData?.emailDescription && (\n <span className=\"block text-sm text-gray-600 dark:text-gray-600 font-bold mt-1\">\n {pageData.emailDescription}\n </span>\n )}\n </label>\n\n {renderQuestion(question)}\n\n {question.hint && !errors[questionId] && (\n <p className=\"text-sm text-gray-500 dark:text-gray-500 font-bold\">{question.hint}</p>\n )}\n\n {errors[questionId] && (\n <p className=\"text-sm font-bold\" style={{ color: '#FF4D4D' }}>\n {errors[questionId]}\n </p>\n )}\n </div>\n )\n })}\n </form>\n </div>\n )}\n\n {!!selectedTimeslotId && (\n <div className=\"flex flex-col items-center justify-center\">\n {/* Agreements Section */}\n {pageData?.agrees && pageData.agrees.length > 0 && (\n <div className=\"space-y-4 mt-8\">\n {pageData.agrees.map((agreeContent: string, index: number) => (\n <div key={index} className=\"flex items-center gap-3\">\n <input\n type=\"checkbox\"\n id={`agreement-${index}`}\n checked={agreements[index] || false}\n onChange={(e) =>\n handleAgreementChange(index, e.target.checked)\n }\n className=\"w-5 h-5 rounded text-[#2FC257] focus:ring-[#2FC257] cursor-pointer flex-shrink-0\"\n style={{\n backgroundColor: 'white',\n borderColor: '#D1D5DB',\n colorScheme: 'light'\n }}\n />\n <label\n htmlFor={`agreement-${index}`}\n className=\"text-sm text-gray-700 dark:text-gray-700 font-bold cursor-pointer select-none flex-1 [&_a]:underline [&_a]:text-blue-600 [&_a:hover]:text-blue-700\"\n dangerouslySetInnerHTML={{ __html: agreeContent }}\n aria-label={`Agreement ${index + 1}`}\n />\n </div>\n ))}\n {agreementError && (\n <p className=\"text-sm font-bold mt-2\" style={{ color: '#FF4D4D' }}>\n {agreementError}\n </p>\n )}\n </div>\n )}\n <button\n type=\"submit\"\n disabled={loading}\n onClick={handleSubmit}\n className={cn(\n 'w-fit mt-6 px-6 py-4 rounded-full',\n 'bg-[#080A0F] text-white font-bold text-base',\n 'hover:bg-[#2FC257] transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:ring-offset-2',\n 'disabled:opacity-50 disabled:cursor-not-allowed'\n )}\n >\n {loading\n ? pageData?.submitting || 'Submitting...'\n : pageData?.submit || 'Submit Booking'}\n </button>\n </div>\n )}\n </div>\n )\n}\n","import React, { useState, useMemo, useEffect } from 'react'\nimport dayjs from 'dayjs'\n\nimport 'dayjs/locale/zh-cn'\n\nimport { Calendar, Select, theme, ConfigProvider } from 'antd'\nimport type { Dayjs } from 'dayjs'\nimport dayLocaleData from 'dayjs/plugin/localeData'\nimport weekday from 'dayjs/plugin/weekday'\nimport weekOfYear from 'dayjs/plugin/weekOfYear'\nimport {\n useTimeslots,\n useDemoRoom,\n useQuestionnaire,\n useCreateBooking,\n} from '@/api/hooks'\nimport type { DemoRoomApiClient } from '@/api/client'\nimport type { Timeslot } from '@/api/types'\nimport { QuestionnaireForm } from './QuestionnaireForm'\n\ndayjs.extend(dayLocaleData)\ndayjs.extend(weekday)\ndayjs.extend(weekOfYear)\n\nexport interface DateTimePickerProps {\n apiClient: DemoRoomApiClient\n demoRoomCode?: string\n timezone?: string\n pageData?: {\n scheduleYourVisit?: string\n timeSlot?: string\n loadingTimeSlots?: string\n failedToLoadTimeSlots?: string\n noAvailableTimeSlots?: string\n full?: string\n spotsLeft?: string\n fillOutForm?: string\n loadingQuestionnaire?: string\n bookingFailed?: string\n submit?: string\n submitting?: string\n agrees?: string[]\n timezone?: string\n }\n locale?: string\n onBookingSuccess?: (bookingData: string) => void\n}\n\nconst DateTimePicker: React.FC<DateTimePickerProps> = ({\n apiClient,\n demoRoomCode,\n timezone,\n pageData = {\n scheduleYourVisit: 'Schedule Your Visit',\n timeSlot: 'Time Slot',\n loadingTimeSlots: 'Loading time slots...',\n failedToLoadTimeSlots: 'Failed to load time slots',\n noAvailableTimeSlots: 'No available time slots for this date',\n full: 'Full',\n spotsLeft: 'spots left',\n fillOutForm: 'Fill out Form',\n loadingQuestionnaire: 'Loading questionnaire...',\n bookingFailed: 'Booking failed',\n },\n locale,\n onBookingSuccess,\n}) => {\n const { token } = theme.useToken()\n const [selectedDate, setSelectedDate] = useState<Dayjs | null>(null)\n const [calendarValue, setCalendarValue] = useState<Dayjs>(dayjs()) // 日历显示的月份\n const [selectedTimeslotId, setSelectedTimeslotId] = useState<number | null>(\n null\n )\n const [isInitialized, setIsInitialized] = useState(false)\n\n // Use booking creation hook\n const {\n createBooking,\n loading: bookingLoading,\n error: bookingError,\n } = useCreateBooking(apiClient)\n\n // Fetch demo room details to get questionnaire_id\n const { data: demoRoom } = useDemoRoom(\n apiClient,\n demoRoomCode || '',\n locale,\n { enabled: !!demoRoomCode }\n )\n\n // Fetch questionnaire if available\n const { data: questionnaire, loading: questionnaireLoading } =\n useQuestionnaire(\n apiClient,\n demoRoomCode || '',\n demoRoom?.questionnaire_id,\n locale,\n { enabled: !!demoRoomCode && !!demoRoom?.questionnaire_id }\n )\n\n // 查询当月时段 - 使用 calendarValue 作为查询基准\n const startDate = calendarValue.startOf('month').format('YYYY-MM-DD')\n const endDate = calendarValue.endOf('month').format('YYYY-MM-DD')\n\n const {\n data: timeslotsData,\n loading: timeslotsLoading,\n error: timeslotsError,\n } = useTimeslots(\n apiClient,\n demoRoomCode || '',\n {\n start_date: startDate,\n end_date: endDate,\n timezone,\n },\n { enabled: !!demoRoomCode }\n )\n\n // 过滤出选中日期的时段\n const dayTimeslots = useMemo<Timeslot[]>(() => {\n if (!timeslotsData?.timeslots || !selectedDate) return []\n\n const selectedDateStr = selectedDate.format('YYYY-MM-DD')\n return timeslotsData.timeslots.filter((slot) => {\n const slotDate = dayjs(slot.start_time).format('YYYY-MM-DD')\n return slotDate === selectedDateStr\n })\n }, [timeslotsData, selectedDate])\n\n // 获取所有有可用时段的日期\n const availableDates = useMemo(() => {\n if (!timeslotsData?.timeslots) return new Set<string>()\n\n const dates = new Set<string>()\n timeslotsData.timeslots.forEach((slot) => {\n if (slot.status === 'available') {\n const dateStr = dayjs(slot.start_time).format('YYYY-MM-DD')\n dates.add(dateStr)\n }\n })\n return dates\n }, [timeslotsData])\n\n // 自动选择最近的可用日期和时段(初始化时)\n useEffect(() => {\n if (!timeslotsData?.timeslots || isInitialized) return\n\n const now = dayjs()\n\n // 查找所有可用时段\n const availableTimeslots = timeslotsData.timeslots.filter(\n (slot) =>\n slot.status === 'available' && dayjs(slot.start_time).isAfter(now)\n )\n\n if (availableTimeslots.length > 0) {\n // 按时间排序,找到最近的时段\n const sortedSlots = [...availableTimeslots].sort(\n (a, b) => dayjs(a.start_time).unix() - dayjs(b.start_time).unix()\n )\n\n const nearestSlot = sortedSlots[0]\n const nearestDate = dayjs(nearestSlot.start_time)\n\n // 设置选中的日期和时段\n setSelectedDate(nearestDate)\n setCalendarValue(nearestDate) // 同时更新日历视图\n setSelectedTimeslotId(nearestSlot.id)\n setIsInitialized(true)\n } else if (!selectedDate) {\n // 如果没有可用时段,默认选择今天\n setSelectedDate(now)\n setCalendarValue(now) // 同时更新日历视图\n setIsInitialized(true)\n }\n }, [timeslotsData, isInitialized, selectedDate])\n\n // 切换月份时自动选择当月第一个可预约日期\n useEffect(() => {\n if (!timeslotsData?.timeslots || !isInitialized) return\n\n // 如果选中日期在当前查看的月份内,保持选中状态,不自动切换\n if (selectedDate && selectedDate.isSame(calendarValue, 'month')) {\n return\n }\n\n // 获取当前查看月份的所有可用时段\n const currentMonthStart = calendarValue.startOf('month')\n const currentMonthEnd = calendarValue.endOf('month')\n const now = dayjs()\n\n const availableTimeslots = timeslotsData.timeslots.filter((slot) => {\n const slotDate = dayjs(slot.start_time)\n return (\n slot.status === 'available' &&\n slotDate.isAfter(now) &&\n (slotDate.isAfter(currentMonthStart) ||\n slotDate.isSame(currentMonthStart, 'day')) &&\n (slotDate.isBefore(currentMonthEnd) ||\n slotDate.isSame(currentMonthEnd, 'day'))\n )\n })\n\n if (availableTimeslots.length > 0) {\n // 按时间排序,找到当月第一个可用时段\n const sortedSlots = [...availableTimeslots].sort(\n (a, b) => dayjs(a.start_time).unix() - dayjs(b.start_time).unix()\n )\n\n const firstSlot = sortedSlots[0]\n const firstDate = dayjs(firstSlot.start_time)\n\n // 选中日期不在当前月份时,自动切换到该月第一个可用日期\n setSelectedDate(firstDate)\n setSelectedTimeslotId(firstSlot.id)\n }\n }, [calendarValue, timeslotsData, isInitialized, selectedDate])\n\n // 格式化时段显示\n const formatTimeslot = (slot: Timeslot) => {\n const start = dayjs(slot.start_time).format('h:mm A')\n const end = dayjs(slot.end_time).format('h:mm A')\n return `${start} - ${end}`\n }\n\n const wrapperStyle: React.CSSProperties = {\n background: '#fff',\n border: `1px solid ${token.colorBorderSecondary}`,\n borderRadius: 16,\n }\n\n return (\n <div>\n <div className=\"text-[48px] l:text-[32px] py-[64px] l:py-[24px] l:pt-[64px] font-bold text-center\">\n {pageData.scheduleYourVisit}\n </div>\n <div className=\"flex gap-4 l:flex-col\">\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: '#3ADB67',\n },\n components: {\n Calendar: {\n fullBg: '#fff',\n fullPanelBg: '#fff',\n itemActiveBg: '#3ADB67',\n },\n },\n }}\n >\n <div\n style={wrapperStyle}\n className=\"calendar-custom-cell w-[calc(824/1920*100vw)] min-l:max-w-[824px] l:w-full\"\n >\n <style>{`\n .calendar-custom-cell {\n border-radius: 16px !important;\n overflow: hidden;\n padding: 0 24px 16px 24px !important;\n }\n .calendar-custom-cell,\n .calendar-custom-cell *,\n .calendar-custom-cell .ant-picker-panel,\n .calendar-custom-cell .ant-picker-calendar,\n .calendar-custom-cell .ant-picker-content,\n .calendar-custom-cell .ant-picker-cell,\n .calendar-custom-cell .ant-picker-calendar-date-value {\n font-family: 'MontForAnker' !important;\n }\n .calendar-custom-cell .ant-picker-cell {\n padding: 6px !important;\n text-align: center !important;\n }\n .calendar-custom-cell .ant-picker-cell .ant-picker-cell-inner {\n margin: 0 auto !important;\n }\n .calendar-custom-cell .ant-picker-cell-inner {\n width: 38px !important;\n height: 38px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n border-radius: 8px !important;\n border: 1px solid #E4E5E6 !important;\n aspect-ratio: 1 / 1 !important;\n }\n .calendar-custom-cell .ant-picker-calendar-date-value {\n line-height: 38px !important;\n font-weight: 700 !important;\n font-size: 14px !important;\n }\n @media (min-width: 1024px) and (max-width: 1919px) {\n .calendar-custom-cell .ant-picker-cell-inner {\n width: 54px !important;\n height: 54px !important;\n border-radius: 12px !important;\n }\n .calendar-custom-cell .ant-picker-calendar-date-value {\n line-height: 54px !important;\n font-weight: 700 !important;\n font-size: 20px !important;\n }\n }\n @media (min-width: 1920px) {\n .calendar-custom-cell .ant-picker-cell-inner {\n width: 100px !important;\n height: 100px !important;\n border-radius: 20px !important;\n }\n .calendar-custom-cell .ant-picker-calendar-date-value {\n line-height: 100px !important;\n font-weight: 700 !important;\n font-size: 20px !important;\n }\n }\n .calendar-custom-cell .ant-picker-cell-selected .ant-picker-cell-inner,\n .calendar-custom-cell .ant-picker-cell-selected:not(.ant-picker-cell-disabled) .ant-picker-cell-inner {\n background-color: #3ADB67 !important;\n color: #080A0F !important;\n border-color: #3ADB67 !important;\n }\n .calendar-custom-cell .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner {\n background-color: #3ADB67 !important;\n color: #080A0F !important;\n }\n .calendar-custom-cell .ant-picker-cell-today .ant-picker-cell-inner {\n border-color: #3ADB67 !important;\n border-radius: 8px !important;\n }\n @media (min-width: 1024px) and (max-width: 1919px) {\n .calendar-custom-cell .ant-picker-cell-today .ant-picker-cell-inner {\n border-radius: 12px !important;\n }\n }\n @media (min-width: 1920px) {\n .calendar-custom-cell .ant-picker-cell-today .ant-picker-cell-inner {\n border-radius: 20px !important;\n }\n }\n .calendar-custom-cell .ant-picker-cell-today .ant-picker-cell-inner::before {\n display: none !important;\n }\n .calendar-custom-cell .ant-picker-content {\n width: 100% !important;\n }\n .calendar-custom-cell .ant-picker-content thead tr th {\n line-height: 48px !important;\n font-weight: 700 !important;\n font-size: 18px !important;\n }\n .calendar-custom-cell .ant-picker-cell-disabled .ant-picker-cell-inner {\n background-color: #F5F5F5 !important;\n color: #2A2C32 !important;\n border: none !important;\n cursor: not-allowed !important;\n box-shadow: none !important;\n }\n .calendar-custom-cell .ant-picker-cell-disabled:hover .ant-picker-cell-inner {\n background-color: #F5F5F5 !important;\n border: none !important;\n box-shadow: none !important;\n }\n .calendar-custom-cell .ant-picker-cell-disabled::before {\n display: none !important;\n }\n .calendar-custom-cell .ant-picker-cell-disabled::after {\n display: none !important;\n }\n `}</style>\n <Calendar\n fullscreen={false}\n value={calendarValue}\n onSelect={(date) => {\n // 点击日期时更新选中的日期和日历视图\n setSelectedDate(date)\n setCalendarValue(date)\n }}\n onPanelChange={(date) => {\n // 切换月份/年份时只更新日历视图,不更新选中日期\n setCalendarValue(date)\n }}\n disabledDate={(current) => {\n if (!current) return false\n\n // 当天日期永远不禁用\n if (current.isSame(dayjs(), 'day')) return false\n\n // 禁用比今天早的日期\n if (current.isBefore(dayjs(), 'day')) return true\n\n // 禁用没有可用时段的日期\n const dateStr = current.format('YYYY-MM-DD')\n return !availableDates.has(dateStr)\n }}\n fullCellRender={(date) => {\n const isSelected =\n selectedDate && date.isSame(selectedDate, 'day')\n const isToday = date.isSame(dayjs(), 'day')\n const dateStr = date.format('YYYY-MM-DD')\n // 当天日期永远不禁用\n const isDisabled =\n !isToday &&\n (date.isBefore(dayjs(), 'day') ||\n !availableDates.has(dateStr))\n\n return (\n <div\n className={`ant-picker-cell-inner ${\n isSelected ? 'ant-picker-cell-inner-selected' : ''\n } ${isToday ? 'ant-picker-cell-inner-today' : ''}`}\n style={{\n backgroundColor: isSelected ? '#3ADB67' : undefined,\n color: isSelected\n ? '#080A0F'\n : isDisabled\n ? '#2A2C32'\n : undefined,\n borderColor: isSelected\n ? '#3ADB67'\n : isToday\n ? '#3ADB67'\n : undefined,\n }}\n >\n <div className=\"ant-picker-calendar-date-value\">\n {date.date()}\n </div>\n </div>\n )\n }}\n headerRender={({ value, onChange }) => {\n const year = value.year()\n const month = value.month()\n\n const yearOptions = Array.from({ length: 20 }, (_, i) => {\n const label = year - 10 + i\n return { label, value: label }\n })\n\n const monthOptions = value\n .localeData()\n .months()\n .map((label, index) => ({\n label,\n value: index,\n }))\n\n return (\n <div className=\"flex items-center justify-between py-3 l:pb-[0px]\">\n {/* Month and Year */}\n <div className=\"flex items-center gap-3\">\n <Select\n value={month}\n options={monthOptions}\n onChange={(newMonth) => {\n const now = value.clone().month(newMonth)\n onChange(now)\n }}\n variant=\"borderless\"\n className=\"text-[32px] l:text-[20px] font-bold\"\n popupMatchSelectWidth={false}\n suffixIcon={null}\n style={{\n fontWeight: 700,\n }}\n />\n <div className=\"text-[20px] text-[#E4E5E6]\">/</div>\n <Select\n value={year}\n options={yearOptions}\n onChange={(newYear) => {\n const now = value.clone().year(newYear)\n onChange(now)\n }}\n variant=\"borderless\"\n className=\"text-[32px] l:text-[20px] font-bold\"\n popupMatchSelectWidth={false}\n suffixIcon={null}\n style={{\n fontWeight: 700,\n }}\n />\n </div>\n\n {/* Navigation Buttons */}\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => {\n const newDate = value.subtract(1, 'month')\n onChange(newDate)\n }}\n className=\"w-10 h-10 flex items-center justify-center hover:bg-gray-100 rounded-lg transition-colors\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 16L6 10L12 4\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n <button\n onClick={() => {\n const newDate = value.add(1, 'month')\n onChange(newDate)\n }}\n className=\"w-10 h-10 flex items-center justify-center hover:bg-gray-100 rounded-lg transition-colors\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8 4L14 10L8 16\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n </div>\n )\n }}\n />\n </div>\n </ConfigProvider>\n <div className=\"bg-white p-[24px] rounded-[16px] flex-1\">\n <div className=\"flex justify-between items-center\">\n <div className=\"text-[24px] l:text-[16px]\">{pageData.timeSlot}</div>\n <div className=\"flex text-[18px] l:text-[14px] l:gap-1 gap-2\">\n <button\n onClick={() => {\n if (selectedDate) {\n const newDate = selectedDate.subtract(1, 'day')\n // 确保不会选择到过去的日期\n if (!newDate.isBefore(dayjs(), 'day')) {\n setSelectedDate(newDate)\n setCalendarValue(newDate) // 同时更新日历视图\n }\n }\n }}\n disabled={\n !selectedDate ||\n selectedDate.isSame(dayjs(), 'day') ||\n selectedDate.isBefore(dayjs(), 'day')\n }\n className=\"w-8 h-8 flex items-center justify-center hover:bg-gray-100 rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M14.2929 5.29289C14.6834 4.90237 15.3164 4.90237 15.707 5.29289C16.0975 5.68342 16.0975 6.31643 15.707 6.70696L10.414 11.9999L15.707 17.2929L15.7753 17.3691C16.0957 17.7618 16.0731 18.3408 15.707 18.707C15.3408 19.0731 14.7618 19.0957 14.3691 18.7753L14.2929 18.707L8.29289 12.707C7.90237 12.3164 7.90237 11.6834 8.29289 11.2929L14.2929 5.29289Z\"\n fill=\"#1D1D1F\"\n />\n </svg>\n </button>\n <div className=\"flex items-center justify-center\">\n {selectedDate ? selectedDate.format('MMMM D') : ''}\n </div>\n <button\n onClick={() => {\n if (selectedDate) {\n const newDate = selectedDate.add(1, 'day')\n setSelectedDate(newDate)\n setCalendarValue(newDate) // 同时更新日历视图\n }\n }}\n disabled={!selectedDate}\n className=\"w-8 h-8 flex items-center justify-center hover:bg-gray-100 rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M8.29289 5.29289C8.68342 4.90237 9.31643 4.90237 9.70696 5.29289L15.707 11.2929C16.0975 11.6834 16.0975 12.3164 15.707 12.707L9.70696 18.707C9.31643 19.0975 8.68342 19.0975 8.29289 18.707C7.90237 18.3164 7.90237 17.6834 8.29289 17.2929L13.5859 11.9999L8.29289 6.70696C7.90237 6.31643 7.90237 5.68342 8.29289 5.29289Z\"\n fill=\"#1D1D1F\"\n />\n </svg>\n </button>\n </div>\n </div>\n <div className=\"grid grid-cols-2 mt-[40px] gap-4 l:mt-[16px] l:flex l:flex-col l:gap-2\">\n {timeslotsLoading ? (\n <div className=\"col-span-2 text-center text-[#2A2C32] py-8\">\n {pageData.loadingTimeSlots}\n </div>\n ) : timeslotsError ? (\n <div className=\"col-span-2 text-center text-red-600 py-8\">\n {pageData.failedToLoadTimeSlots}\n </div>\n ) : dayTimeslots.length === 0 ? (\n <div className=\"col-span-2 text-center text-[#2A2C32] py-8\">\n {pageData.noAvailableTimeSlots}\n </div>\n ) : (\n dayTimeslots.map((slot) => {\n const isAvailable = slot.status === 'available'\n const isFull = slot.status === 'full'\n const isSelected = selectedTimeslotId === slot.id\n\n return (\n <button\n key={slot.id}\n disabled={!isAvailable}\n onClick={() => {\n if (isAvailable) {\n setSelectedTimeslotId(slot.id)\n }\n }}\n className={`\n rounded-[20px] w-full text-[18px] l:gap-2 l:text-[16px] flex items-center justify-center gap-4 h-[76px]\n border text-center transition-colors\n ${\n isSelected\n ? 'border-[#3ADB67] bg-[#3ADB67] cursor-pointer'\n : isAvailable\n ? 'border-[#E4E5E6] hover:border-[#3ADB67] hover:bg-[#3ADB67] cursor-pointer'\n : 'border-[#E4E5E6] bg-[#F5F5F5] text-[#2A2C32] cursor-not-allowed'\n }\n `}\n >\n <div className=\"flex flex-col items-center\">\n <div>{formatTimeslot(slot)}</div>\n {isFull && (\n <div className=\"text-[16px] l:text-[14px] text-[#2A2C32] mt-[2px]\">\n {pageData.full}\n </div>\n )}\n {isAvailable && !isSelected && (\n <div className=\"text-[16px] l:text-[14px] text-[#2A2C32] mt-1\">\n {slot.capacity - slot.booked_count}{' '}\n {pageData.spotsLeft}\n </div>\n )}\n {isAvailable && isSelected && (\n <div className=\"text-[16px] l:text-[14px] mt-1\">\n {slot.capacity - slot.booked_count}{' '}\n {pageData.spotsLeft}\n </div>\n )}\n </div>\n </button>\n )\n })\n )}\n </div>\n {!timeslotsLoading && dayTimeslots?.length > 0 && (\n <div className=\"pt-[24px] text-[#6d6d6F] text-center\">\n {pageData?.timezone?.replace(\n '{{timezone}}',\n demoRoom?.timezone || timezone || ''\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Questionnaire Section */}\n {true && (\n <div className=\"mt-12\">\n {!!questionnaire?.questions?.length && (\n <div className=\"text-[48px] font-bold text-center mb-8 l:mb-[24px] l:text-[32px] l:text-left\">\n {pageData.fillOutForm}\n </div>\n )}\n\n {questionnaireLoading ? (\n <div className=\"text-center text-[#2A2C32] py-8\">\n {pageData.loadingQuestionnaire}\n </div>\n ) : (\n <QuestionnaireForm\n questions={questionnaire?.questions || []}\n loading={bookingLoading}\n pageData={pageData}\n selectedTimeslotId={selectedTimeslotId}\n onSubmit={async (responses) => {\n // Create booking with questionnaire responses\n try {\n // Extract customer info from questionnaire responses\n // Support both 'name'/'email'/'phone' and 'customer_name'/'customer_email'/'customer_phone_number'\n const customerName =\n responses.name || responses.customer_name || ''\n const customerEmail =\n responses.email || responses.customer_email || ''\n const customerPhone =\n responses.phone || responses.customer_phone_number || ''\n const customerPhoneCode =\n responses.phone_code ||\n responses.customer_phone_code ||\n '+1'\n if (selectedTimeslotId) {\n const result = await createBooking({\n demoroom_code: demoRoomCode!,\n timeslot_id: selectedTimeslotId!,\n questionnaire_id: questionnaire?.id,\n questionnaire_response: responses,\n customer_name: customerName,\n customer_email: customerEmail,\n customer_phone_code: customerPhoneCode,\n customer_phone_number: customerPhone,\n })\n\n // Call onBookingSuccess callback if booking was successful\n if (result && onBookingSuccess) {\n onBookingSuccess(result?.cancel_token)\n }\n }\n } catch (error) {\n console.error('Booking creation failed:', error)\n }\n }}\n />\n )}\n </div>\n )}\n\n {/* Booking Error Section */}\n {/* {bookingError && (\n <div className=\"mt-8 p-4 bg-red-50 border border-red-200 rounded-lg text-red-600 max-w-2xl mx-auto\">\n <p className=\"font-medium\">{pageData.bookingFailed}</p>\n <p className=\"text-sm mt-1\">{bookingError.message}</p>\n </div>\n )} */}\n </div>\n )\n}\n\nexport default DateTimePicker\n","import React from 'react'\nimport { cn } from '@/utils/cn'\nimport { Swiper, SwiperSlide } from 'swiper/react'\nimport { useDemoRoom } from '@/api/hooks'\nimport type { DemoRoomApiClient } from '@/api/client'\n\n// 动态导入 swiper modules,兼容 v8 和 v11+\nlet Navigation: any\nlet Pagination: any\nlet Autoplay: any\nlet swiperVersion: '8' | '11+' = '11+'\n\ntry {\n // 尝试导入 swiper v11+ 的 modules\n const modules = require('swiper/modules')\n Navigation = modules.Navigation\n Pagination = modules.Pagination\n Autoplay = modules.Autoplay\n swiperVersion = '11+'\n} catch (e) {\n // 如果失败,使用 swiper v8 的导入方式\n try {\n // Swiper v8 需要通过 Swiper.use() 注册模块\n const SwiperCore = require('swiper')\n const SwiperNavigation = require('swiper/modules/navigation')\n const SwiperPagination = require('swiper/modules/pagination')\n const SwiperAutoplay = require('swiper/modules/autoplay')\n\n // 注册模块到 Swiper v8\n const SwiperClass = SwiperCore.default || SwiperCore\n if (SwiperClass && SwiperClass.use) {\n SwiperClass.use([\n SwiperNavigation.default || SwiperNavigation,\n SwiperPagination.default || SwiperPagination,\n SwiperAutoplay.default || SwiperAutoplay,\n ])\n }\n\n Navigation = SwiperNavigation.default || SwiperNavigation\n Pagination = SwiperPagination.default || SwiperPagination\n Autoplay = SwiperAutoplay.default || SwiperAutoplay\n swiperVersion = '8'\n } catch (e2) {\n console.warn('Failed to load swiper modules:', e2)\n }\n}\n\n// 动态导入样式\nif (typeof window !== 'undefined') {\n try {\n require('swiper/css')\n require('swiper/css/navigation')\n require('swiper/css/pagination')\n } catch (e) {\n // Swiper v8 样式\n try {\n require('swiper/swiper.min.css')\n require('swiper/modules/navigation/navigation.min.css')\n require('swiper/modules/pagination/pagination.min.css')\n } catch (e2) {\n console.warn('Failed to load swiper styles')\n }\n }\n}\n\nexport interface DemoRoomDetailProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * API client for fetching demo room details\n */\n apiClient?: DemoRoomApiClient\n /**\n * Demo room code to fetch details\n */\n demoRoomCode?: string\n /**\n * Locale for API request\n */\n locale?: string\n /**\n * Room title (fallback if not using API)\n */\n title?: string\n /**\n * Room description paragraphs (fallback if not using API)\n */\n descriptions?: string[]\n /**\n * Device models available (fallback if not using API)\n */\n devices?: string\n /**\n * Room address (fallback if not using API)\n */\n address?: string\n /**\n * Google Maps link\n */\n mapsLink?: string\n /**\n * Room images (fallback if not using API)\n */\n images?: string[]\n /**\n * Configurable page data\n */\n pageData?: {\n loadingText?: string\n errorTitle?: string\n openInGoogleMaps?: string\n demoRoomImages?: string\n }\n}\n\nconst defaultDescriptions = [\n 'Norem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vulputate libero et velit interdum, ac aliquet odio mattis.',\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vulputate libero et velit interdum, ac aliquet odio mattis. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.',\n]\n\nconst defaultImages = [\n 'https://cdn.shopify.com/s/files/1/0569/5147/2268/files/Component_3_1.png?v=1765274638',\n 'https://cdn.shopify.com/s/files/1/0569/5147/2268/files/Component_3_1.png?v=1765274638',\n]\n\nexport const DemoRoomDetail: React.FC<DemoRoomDetailProps> = ({\n apiClient,\n demoRoomCode,\n locale,\n title: titleProp,\n descriptions: descriptionsProp,\n devices: devicesProp,\n address: addressProp,\n mapsLink,\n images: imagesProp,\n pageData = {\n loadingText: 'Loading...',\n errorTitle: 'Failed to load demo room details',\n openInGoogleMaps: 'Open in Google Maps',\n demoRoomImages: 'Demo Room Images',\n },\n className,\n ...props\n}) => {\n // Fetch demo room details if apiClient and demoRoomCode are provided\n const {\n data: demoRoom,\n loading,\n error,\n } = useDemoRoom(apiClient!, demoRoomCode || '', locale, {\n enabled: !!apiClient && !!demoRoomCode,\n })\n\n // Use API data if available, otherwise fall back to props or defaults\n const title = demoRoom?.name || titleProp || 'Design District Demo Room'\n const descriptions = demoRoom?.description\n ? [demoRoom.description]\n : descriptionsProp || defaultDescriptions\n const devices =\n demoRoom?.equipment?.join(', ') || devicesProp || 'eufyMake E1, eufyMake M5'\n const address =\n demoRoom?.address ||\n addressProp ||\n '1111 8th St, San Francisco, CA United States 94108'\n const images =\n demoRoom?.images && demoRoom.images.length > 0\n ? demoRoom.images\n : imagesProp || defaultImages\n // Generate Google Maps link\n const googleMapsLink =\n mapsLink ||\n (() => {\n if (demoRoom?.latitude && demoRoom?.longitude) {\n // Use coordinates if available\n return `https://www.google.com/maps/search/?api=1&query=${demoRoom.latitude},${demoRoom.longitude}`\n } else if (address) {\n // Fallback to address search\n return `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(address)}`\n }\n return '#'\n })()\n\n // Loading state\n if (loading && apiClient && demoRoomCode) {\n return (\n <div className={cn('w-full', className)} {...props}>\n <div className=\"grid grid-cols-2 gap-8 items-start\">\n <div className=\"space-y-6\">\n <div className=\"h-12 bg-gray-200 rounded animate-pulse\" />\n <div className=\"h-24 bg-gray-200 rounded animate-pulse\" />\n <div className=\"h-8 bg-gray-200 rounded animate-pulse\" />\n </div>\n <div className=\"h-[400px] bg-gray-200 rounded-2xl animate-pulse\" />\n </div>\n </div>\n )\n }\n\n // Error state\n if (error && apiClient && demoRoomCode) {\n return (\n <div className={cn('w-full', className)} {...props}>\n <div className=\"text-center text-red-600 py-8\">\n <p className=\"text-lg font-medium\">{pageData.errorTitle}</p>\n <p className=\"text-sm mt-2\">{error.message}</p>\n </div>\n </div>\n )\n }\n\n return (\n <div className={cn('w-full', className)} {...props}>\n <div className=\"grid grid-cols-2 gap-[80px] l:gap-[40px] l:flex l:flex-col-reverse items-start py-[24px] l:pb-[64px]\">\n {/* Left Content */}\n <div className=\"space-y-6\">\n {/* Title */}\n <h1 className=\"text-[48px] l:text-[32px] font-bold text-gray-900 leading-tight\">\n {title}\n </h1>\n\n {/* Descriptions */}\n <div className=\"mt-[20px]\">\n {descriptions.map((desc, index) => (\n <p\n key={index}\n className=\"text-base text-gray-600 leading-relaxed\"\n >\n {desc}\n </p>\n ))}\n </div>\n\n {/* Devices */}\n <div className=\"flex items-start gap-3\">\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=\"flex-shrink-0 mt-0.5\"\n >\n <path\n d=\"M14.4643 7.4929H9.65565M3.16391 18.7132H20.8171C22.0122 18.7132 22.981 17.7563 22.981 16.576L23 13.8348L22.981 6.42431C22.981 5.24396 22.0122 4.28711 20.8171 4.28711H3.16391C1.96882 4.28711 1 5.24396 1 6.42431V16.576C1 17.7563 1.96882 18.7132 3.16391 18.7132Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5.32812 18.2325V14.4238C5.32812 13.8715 5.77584 13.4238 6.32813 13.4238H17.7925C18.3447 13.4238 18.7925 13.8715 18.7925 14.4238V18.2325\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span className=\"text-base text-gray-900\">{devices}</span>\n </div>\n\n {/* Address */}\n <div className=\"flex items-start gap-3\">\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=\"flex-shrink-0 mt-0.5\"\n >\n <path\n d=\"M12 2C8.13 2 5 5.13 5 9C5 14.25 12 22 12 22C12 22 19 14.25 19 9C19 5.13 15.87 2 12 2Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <circle\n cx=\"12\"\n cy=\"9\"\n r=\"2.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n </svg>\n <div className=\"flex-1\">\n <p className=\"text-base text-gray-900\">{address}</p>\n <a\n href={googleMapsLink}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 text-sm text-blue-600 hover:text-blue-700 mt-1 underline\"\n >\n {pageData.openInGoogleMaps}\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3 9L9 3M9 3H3M9 3V9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </a>\n </div>\n </div>\n </div>\n\n {/* Right Images - Swiper */}\n <div className=\"relative l:w-full min-l:h-[400px] rounded-2xl overflow-hidden\">\n {images.length > 0 ? (\n <Swiper\n {...(swiperVersion === '11+' &&\n Navigation &&\n Pagination &&\n Autoplay\n ? { modules: [Navigation, Pagination, Autoplay] }\n : {})}\n spaceBetween={0}\n slidesPerView={1}\n navigation\n pagination={{ clickable: true }}\n autoplay={{\n delay: 3000,\n disableOnInteraction: false,\n }}\n loop={true}\n className=\"h-full rounded-2xl\"\n >\n {images.map((img, index) => (\n <SwiperSlide key={index}>\n <div className=\"relative w-full h-full bg-gray-100\">\n <img\n src={img}\n alt={`Demo room view ${index + 1}`}\n className=\"w-full h-full object-cover\"\n />\n </div>\n </SwiperSlide>\n ))}\n </Swiper>\n ) : (\n <div className=\"w-full h-full bg-gradient-to-br from-gray-100 to-gray-200 flex items-center justify-center rounded-2xl\">\n <div className=\"text-center\">\n <div className=\"w-16 h-16 mx-auto mb-3 rounded-full bg-white flex items-center justify-center\">\n <svg\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 32 32\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"4\"\n y=\"8\"\n width=\"24\"\n height=\"16\"\n rx=\"2\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n <circle cx=\"12\" cy=\"14\" r=\"2\" fill=\"currentColor\" />\n <path\n d=\"M28 20L22 14L16 20\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <p className=\"text-gray-500 text-sm\">\n {pageData.demoRoomImages}\n </p>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nDemoRoomDetail.displayName = 'DemoRoomDetail'\n","import React, { useMemo } from 'react'\nimport { cn } from '@/utils/cn'\nimport DateTimePicker from './components/DateTimePicker'\nimport { createDemoRoomApi } from '@/api'\nimport type { DemoRoomApiClient } from '@/api'\nimport { DemoRoomDetail } from './components/DemoRoomDetail'\nimport type { BookingFormPageData } from './types/pageData'\n\nexport interface BookingFormProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onSubmit'\n> {\n layoutClassName?: string\n handleBookingSuccess?: (token?: string) => void\n /**\n * API 配置\n */\n apiConfig: {\n baseUrl: string\n apiKey: string\n locale?: string\n }\n /**\n * 门店代码(可选,可以从 URL 参数或 props 传入)\n */\n demoRoomCode?: string\n /**\n * 时区(可选)\n */\n timezone?: string\n /**\n * 页面可配置数据(文案、图标等)\n */\n pageData?: BookingFormPageData\n}\n\nexport const BookingForm: React.FC<BookingFormProps> = ({\n layoutClassName,\n className,\n apiConfig,\n demoRoomCode,\n pageData,\n timezone,\n handleBookingSuccess,\n ...props\n}) => {\n // 创建 API 客户端实例\n const apiClient = useMemo<DemoRoomApiClient>(\n () => createDemoRoomApi(apiConfig),\n [apiConfig]\n )\n\n // Merge dateTimePicker and questionnaireForm pageData for DateTimePicker\n const dateTimePickerPageData = useMemo(\n () => ({\n ...pageData?.dateTimePicker,\n ...pageData?.questionnaireForm,\n }),\n [pageData?.dateTimePicker, pageData?.questionnaireForm]\n )\n\n return (\n <div>\n <div className={cn('w-full', className)} {...props}>\n {/* <BreadCrumbs\n className={layoutClassName}\n items={[{ label: 'Home', link: '/' }, { label: 'Demo Room' }]}\n /> */}\n <DemoRoomDetail\n className={cn('min-l:mt-8', layoutClassName)}\n apiClient={apiClient}\n demoRoomCode={demoRoomCode}\n locale={apiConfig.locale}\n pageData={pageData?.demoRoomDetail}\n />\n </div>\n <div className=\"bg-[#f5f5f5]\">\n <div className={className}>\n <DateTimePicker\n apiClient={apiClient}\n demoRoomCode={demoRoomCode}\n timezone={timezone}\n locale={apiConfig.locale}\n onBookingSuccess={handleBookingSuccess}\n pageData={dateTimePickerPageData}\n />\n </div>\n </div>\n </div>\n )\n}\n\nBookingForm.displayName = 'BookingForm'\n","import React, { useEffect, useState } from 'react'\nimport type { Booking } from '@/api/types'\nimport { createDemoRoomApi, type DemoRoomApiConfig } from '@/api/client'\nimport type { BookingSuccessPageData } from '../types/pageData'\n\nexport interface BookingSuccessProps {\n // 方式1: 直接传入预约数据\n bookingData?: Booking\n // 方式2: 通过 token 查询预约数据\n token?: string\n apiConfig?: DemoRoomApiConfig\n // 其他 props\n onScheduleAgain?: (demoRoomCode: string) => void\n onCancelSuccess?: (booking: Booking) => void\n className?: string\n /**\n * 页面可配置数据(文案、图标等)\n */\n pageData?: BookingSuccessPageData\n}\n\nexport const BookingSuccess: React.FC<BookingSuccessProps> = ({\n bookingData: initialBookingData,\n token,\n apiConfig,\n onScheduleAgain,\n onCancelSuccess,\n className,\n pageData = {\n yourAppointment: 'Your Appointment',\n appointmentCanceled: 'This appointment has been canceled.',\n scheduleAgain: 'Schedule again',\n location: 'Location',\n openInGoogleMaps: 'Open in Google Maps ↗',\n dateAndTime: 'Date and Time',\n event: 'Event',\n demoRoom: 'Demo Room',\n visitorInfo: 'Visitor Info',\n noPhoneProvided: 'No phone provided',\n cancelAppointment: 'Cancel Appointment',\n cancelDialog: {\n title: 'Are you sure you want to cancel?',\n description: \"You won't be able to restore the schedule.\",\n backButton: 'Back',\n confirmButton: 'Cancel Appointment',\n canceling: 'Canceling...',\n },\n cancelError: 'Failed to cancel appointment. Please try again.',\n },\n}) => {\n const [bookingData, setBookingData] = useState<Booking | null>(\n initialBookingData || null\n )\n const [loading, setLoading] = useState(false)\n const [isCancelled, setIsCancelled] = useState(false)\n const [showCancelDialog, setShowCancelDialog] = useState(false)\n const [cancelLoading, setCancelLoading] = useState(false)\n const [cancelError, setCancelError] = useState<string | null>(null)\n\n // 如果传入了 token,则通过 API 查询预约信息\n useEffect(() => {\n if (token && apiConfig && !initialBookingData) {\n const fetchBookingData = async () => {\n setLoading(true)\n try {\n const apiClient = createDemoRoomApi(apiConfig)\n const booking = await apiClient.getBooking(token, apiConfig.locale)\n setBookingData(booking)\n setIsCancelled(booking.status === 'cancelled')\n } catch (err) {\n console.error('Failed to fetch booking data:', err)\n } finally {\n setLoading(false)\n }\n }\n\n fetchBookingData()\n }\n }, [token, apiConfig, initialBookingData])\n\n // 处理取消预约\n const handleCancelAppointment = async () => {\n if (!token || !apiConfig) {\n setCancelError(\n pageData.cancelError ||\n 'Unable to cancel: Missing token or API configuration'\n )\n return\n }\n\n setCancelLoading(true)\n setCancelError(null)\n\n try {\n const apiClient = createDemoRoomApi(apiConfig)\n const cancelledBooking = await apiClient.cancelBooking(\n token,\n apiConfig.locale\n )\n\n // 更新预约数据和取消状态\n if (cancelledBooking) {\n setBookingData(cancelledBooking)\n }\n setIsCancelled(true)\n setShowCancelDialog(false)\n\n // 调用回调函数\n if (onCancelSuccess && cancelledBooking) {\n onCancelSuccess(cancelledBooking)\n }\n } catch (err) {\n console.error('Failed to cancel booking:', err)\n setCancelError(\n pageData.cancelError ||\n 'Failed to cancel appointment. Please try again.'\n )\n } finally {\n setCancelLoading(false)\n }\n }\n\n if (loading) {\n return (\n <div className={`min-h-screen py-12 px-6 ${className || ''}`}>\n <div className=\"mx-auto\">\n <div className=\"animate-pulse space-y-6\">\n <div className=\"h-8 bg-gray-200 rounded w-1/3\" />\n <div className=\"h-24 bg-gray-200 rounded\" />\n <div className=\"space-y-4\">\n <div className=\"h-20 bg-gray-200 rounded\" />\n <div className=\"h-20 bg-gray-200 rounded\" />\n <div className=\"h-20 bg-gray-200 rounded\" />\n </div>\n </div>\n </div>\n </div>\n )\n }\n\n if (!bookingData) {\n return null\n }\n\n return (\n <div className={`min-h-screen l:py-0 l:px-0 py-12 px-6 ${className || ''}`}>\n <div className=\"mx-auto\">\n {/* Header */}\n <h1 className=\"text-[40px] font-bold text-gray-900 mb-8\">\n {pageData.yourAppointment}\n </h1>\n\n {/* Status Banner */}\n {isCancelled && (\n <div className=\"bg-white rounded-[16px] l:items-start p-6 mb-4 l:gap-2 flex l:flex-col items-center justify-between\">\n <p className=\"text-base text-gray-700\">\n {pageData.appointmentCanceled}\n </p>\n {onScheduleAgain && bookingData && (\n <button\n onClick={() => onScheduleAgain(bookingData.demoroom_code)}\n className=\"px-6 py-3 bg-black text-white rounded-full hover:bg-gray-800 transition-colors whitespace-nowrap\"\n >\n {pageData.scheduleAgain}\n </button>\n )}\n </div>\n )}\n\n {/* Appointment Details */}\n <div className=\"space-y-8 bg-white px-[48px] l:px-[16px] l:py-[16px] py-[32px] rounded-[16px]\">\n {/* Location */}\n <div>\n <h2 className=\"text-lg text-gray-900 mb-3\">{pageData.location}</h2>\n <div className=\"space-y-2\">\n {bookingData.demoroom_name && (\n <p className=\"text-base text-gray-900\">\n {bookingData.demoroom_name}\n </p>\n )}\n {bookingData.address && (\n <p className=\"text-base text-gray-600\">{bookingData.address}</p>\n )}\n {bookingData.latitude && bookingData.longitude && (\n <a\n href={`https://www.google.com/maps/search/?api=1&query=${bookingData.latitude},${bookingData.longitude}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 text-base text-blue-600 hover:text-blue-700 hover:underline\"\n >\n {pageData.openInGoogleMaps}\n </a>\n )}\n </div>\n </div>\n\n {/* Date and Time */}\n <div>\n <h2 className=\"text-lg text-gray-900 mb-3\">\n {pageData.dateAndTime}\n </h2>\n <p className=\"text-base text-gray-900\">\n {bookingData.booking_date}\n {bookingData.time_slot && `, ${bookingData.time_slot}`}\n {!bookingData.time_slot &&\n bookingData.booking_time &&\n `, ${bookingData.booking_time}`}\n </p>\n </div>\n\n {/* Event (if available) */}\n {bookingData.equipment && (\n <div>\n <h2 className=\"text-lg text-gray-900 mb-3\">{pageData.event}</h2>\n <p className=\"text-base text-gray-900\">\n {Array.isArray(bookingData.equipment)\n ? bookingData.equipment.join(', ')\n : bookingData.equipment}\n </p>\n </div>\n )}\n\n {/* Machine (Demo Room Code) */}\n <div>\n <h2 className=\"text-lg text-gray-900 mb-3\">{pageData.demoRoom}</h2>\n <p className=\"text-base text-gray-900\">\n {bookingData.demoroom_code}\n </p>\n </div>\n\n {/* Visitor Info */}\n <div>\n <h2 className=\"text-lg text-gray-900 mb-3\">\n {pageData.visitorInfo}\n </h2>\n <div className=\"space-y-2\">\n <p className=\"text-base text-gray-900\">\n {bookingData.customer_name}\n </p>\n <div className=\"flex items-center gap-2 text-base text-gray-600\">\n <svg\n className=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z\"\n />\n </svg>\n {bookingData.phone_code && bookingData.phone_number ? (\n <span>\n {bookingData.phone_code} {bookingData.phone_number}\n </span>\n ) : (\n <span>{pageData.noPhoneProvided}</span>\n )}\n </div>\n <div className=\"flex items-center gap-2 text-base text-gray-600\">\n <svg\n className=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n />\n </svg>\n <span>{bookingData.customer_email}</span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Cancel Button - 只在未取消时显示 */}\n {!isCancelled && (\n <div className=\"mt-[64px]\">\n <button\n onClick={() => setShowCancelDialog(true)}\n disabled={cancelLoading}\n className=\"text-[14px] cursor-pointer w-fit rounded-full text-[#080A0F] border-2 border-[#080A0F] px-[20px] py-[10px] leading-[1] hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {pageData.cancelAppointment}\n </button>\n {cancelError && (\n <p className=\"text-sm mt-2\" style={{ color: '#FF4D4D' }}>\n {cancelError}\n </p>\n )}\n </div>\n )}\n\n {/* Cancel Confirmation Dialog */}\n {showCancelDialog && (\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 px-4\">\n <div className=\"bg-white rounded-[24px] max-w-[600px] p-8 shadow-xl relative\">\n {/* Close Button */}\n <button\n onClick={() => setShowCancelDialog(false)}\n disabled={cancelLoading}\n className=\"absolute top-6 right-[30px] w-8 h-8 flex items-center justify-center text-gray-400 hover:text-gray-600 transition-colors disabled:opacity-50\"\n aria-label=\"Close\"\n >\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 >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n {/* Warning Icon */}\n <div className=\"flex justify-center mb-6\">\n <div className=\"w-16 h-16 rounded-full flex items-center justify-center\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 48 48\"\n fill=\"none\"\n >\n <circle cx=\"24\" cy=\"24\" r=\"21\" fill=\"#FFC24D\" />\n <path\n d=\"M23.9971 30.5703C25.4881 30.5704 26.6972 31.7795 26.6973 33.2705C26.6973 34.7616 25.4881 35.9706 23.9971 35.9707C22.5059 35.9707 21.2969 34.7617 21.2969 33.2705C21.297 31.7794 22.506 30.5703 23.9971 30.5703ZM23.9961 12.0176C25.2387 12.0176 26.2461 13.0249 26.2461 14.2676V26.2676C26.2461 27.5102 25.2387 28.5176 23.9961 28.5176C22.7535 28.5176 21.7461 27.5102 21.7461 26.2676V14.2676C21.7461 13.0249 22.7535 12.0176 23.9961 12.0176Z\"\n fill=\"white\"\n />\n </svg>\n </div>\n </div>\n\n {/* Title and Description */}\n <div className=\"text-center mb-8\">\n <h3 className=\"text-[18px] text-gray-900 mb-2\">\n {pageData.cancelDialog?.title}\n </h3>\n <p className=\"text-[14px] text-gray-600\">\n {pageData.cancelDialog?.description}\n </p>\n </div>\n\n {/* Action Buttons */}\n <div className=\"flex gap-3 justify-center\">\n <button\n onClick={() => setShowCancelDialog(false)}\n disabled={cancelLoading}\n className=\"px-8 py-3 border-2 border-black rounded-full text-black hover:bg-gray-50 transition-colors disabled:opacity-50 min-w-[120px]\"\n >\n {pageData.cancelDialog?.backButton}\n </button>\n <button\n onClick={handleCancelAppointment}\n disabled={cancelLoading}\n className=\"px-8 py-3 bg-black text-white rounded-full hover:bg-gray-800 transition-colors disabled:opacity-50 flex items-center gap-2 min-w-[180px] justify-center\"\n >\n {cancelLoading ? (\n <>\n <svg\n className=\"animate-spin h-5 w-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n {pageData.cancelDialog?.canceling}\n </>\n ) : (\n pageData.cancelDialog?.confirmButton\n )}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n}\n","export const defaultTheme = {\n colors: {\n primary: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#3b82f6',\n 600: '#2563eb',\n 700: '#1d4ed8',\n 800: '#1e40af',\n 900: '#1e3a8a',\n 950: '#172554',\n },\n secondary: {\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617',\n },\n success: {\n 50: '#f0fdf4',\n 500: '#22c55e',\n 900: '#14532d',\n },\n warning: {\n 50: '#fffbeb',\n 500: '#f59e0b',\n 900: '#78350f',\n },\n error: {\n 50: '#fef2f2',\n 500: '#ef4444',\n 900: '#7f1d1d',\n },\n },\n fontFamily: {\n sans: ['Inter', 'system-ui', 'sans-serif'],\n mono: ['Fira Code', 'monospace'],\n },\n fontSize: {\n xs: ['0.75rem', { lineHeight: '1rem' }] as const,\n sm: ['0.875rem', { lineHeight: '1.25rem' }] as const,\n base: ['1rem', { lineHeight: '1.5rem' }] as const,\n lg: ['1.125rem', { lineHeight: '1.75rem' }] as const,\n xl: ['1.25rem', { lineHeight: '1.75rem' }] as const,\n '2xl': ['1.5rem', { lineHeight: '2rem' }] as const,\n '3xl': ['1.875rem', { lineHeight: '2.25rem' }] as const,\n '4xl': ['2.25rem', { lineHeight: '2.5rem' }] as const,\n },\n spacing: {\n 0: '0',\n 1: '0.25rem',\n 2: '0.5rem',\n 3: '0.75rem',\n 4: '1rem',\n 5: '1.25rem',\n 6: '1.5rem',\n 8: '2rem',\n 10: '2.5rem',\n 12: '3rem',\n 16: '4rem',\n 20: '5rem',\n 24: '6rem',\n },\n borderRadius: {\n none: '0',\n sm: '0.125rem',\n base: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n full: '9999px',\n },\n boxShadow: {\n sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n base: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n },\n} as const\n\nexport type Theme = typeof defaultTheme\n\nexport type DeepPartial<T> = T extends object\n ? { [P in keyof T]?: DeepPartial<T[P]> }\n : T\n\nexport type ThemeConfig = DeepPartial<Theme>\n","import React, { createContext, useContext, useEffect, useMemo } from 'react'\nimport { defaultTheme } from '../theme-tokens'\nimport type { Theme, ThemeConfig } from '../theme-tokens'\n\ninterface ThemeContextValue {\n theme: Theme\n}\n\nconst ThemeContext = createContext<ThemeContextValue>({ theme: defaultTheme })\n\nexport const useTheme = () => useContext(ThemeContext)\n\ninterface ThemeProviderProps {\n theme?: ThemeConfig\n children: React.ReactNode\n}\n\nfunction deepMerge<T extends object>(target: T, source: Partial<T>): T {\n const result = { ...target }\n for (const key in source) {\n if (\n source[key] instanceof Object &&\n !Array.isArray(source[key]) &&\n key in target\n ) {\n result[key] = deepMerge(target[key] as any, source[key] as any)\n } else if (source[key] !== undefined) {\n result[key] = source[key] as any\n }\n }\n return result\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n theme: customTheme = {},\n children,\n}) => {\n const theme = useMemo(\n () => deepMerge(defaultTheme, customTheme as any),\n [customTheme]\n )\n\n useEffect(() => {\n const root = document.documentElement\n\n // Inject color variables\n Object.entries(theme.colors).forEach(([colorName, colorValues]) => {\n if (typeof colorValues === 'object') {\n Object.entries(colorValues).forEach(([shade, value]) => {\n root.style.setProperty(`--color-${colorName}-${shade}`, value)\n })\n } else {\n root.style.setProperty(`--color-${colorName}`, colorValues as string)\n }\n })\n\n // Inject font variables\n Object.entries(theme.fontFamily).forEach(([name, value]) => {\n const fontValue = Array.isArray(value) ? value.join(', ') : String(value)\n root.style.setProperty(`--font-${name}`, fontValue)\n })\n\n // Inject spacing variables\n Object.entries(theme.spacing).forEach(([key, value]) => {\n root.style.setProperty(`--spacing-${key}`, value)\n })\n\n // Inject border radius variables\n Object.entries(theme.borderRadius).forEach(([key, value]) => {\n root.style.setProperty(`--radius-${key}`, value)\n })\n }, [theme])\n\n return (\n <ThemeContext.Provider value={{ theme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/cn.ts","../src/components/DemoRoom/components/Title.tsx","../src/components/DemoRoom/components/StudioCard.tsx","../src/components/DemoRoom/components/StudioMap.tsx","../src/api/types.ts","../src/api/hooks.ts","../src/components/DemoRoom/components/AntdMobileIsolated.tsx","../src/components/DemoRoom/utils/addressParser.ts","../src/components/DemoRoom/components/RoomsList.module.css","../src/components/DemoRoom/components/LocationFilter.tsx","../src/components/DemoRoom/components/RoomsList.tsx","../src/api/client.ts","../src/components/DemoRoom/DemoRoom.tsx","../src/components/BookingForm/components/QuestionnaireForm.tsx","../src/components/BookingForm/components/DateTimePicker.tsx","../src/components/BookingForm/components/DemoRoomDetail.tsx","../src/components/BookingForm/BookingForm.tsx","../src/components/BookingForm/components/BookingSuccess.tsx","../src/theme-tokens/tokens.ts","../src/theme/ThemeProvider.tsx"],"names":["twMerge","clsx","jsx","React","jsxs","useState","useEffect","useCallback","useRef","items","useMemo","List","IndexBar","dayjs","dayLocaleData","weekday","weekOfYear","theme","ConfigProvider","Calendar","Select","Swiper","Navigation","Pagination","Autoplay","SwiperSlide","Fragment","createContext","useContext"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import React from 'react'\nimport { cn } from '@/utils/cn'\n\nexport interface TitleProps extends React.HTMLAttributes<HTMLDivElement> {\n title?: string\n subTitle?: string\n}\n\nexport const Title: React.FC<TitleProps> = ({\n title = '',\n ...props\n}) => {\n return (\n <div className={cn('w-full')} {...props}>\n {/* Section Title */}\n <h2 className=\"text-[32px] min-l:text-[48px] font-bold mb-12 text-[#080A0F]\">\n {title}\n </h2>\n </div>\n )\n}\n\nTitle.displayName = 'Title'\n","import React from 'react'\nimport { cn } from '@/utils/cn'\n\nexport interface StudioCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Demo room code (unique identifier)\n */\n code: string\n /**\n * Studio name\n */\n name: string\n /**\n * Available time\n */\n availableTime: string\n /**\n * Full address\n */\n address: string\n city: string\n state: string\n zipCode: string\n country?: string\n /**\n * Available euifyMake models\n */\n euifyMakeModel: string\n /**\n * Distance from user location (optional)\n */\n distance?: number\n /**\n * Callback when \"Schedule Now\" is clicked, receives demo room code\n */\n onSchedule?: (code: string) => void\n /**\n * 可配置的文案数据\n */\n pageData?: {\n scheduleNow?: string\n available?: string\n away?: string\n noAvailableTime?: string\n }\n}\n\nexport const StudioCard: React.FC<StudioCardProps> = ({\n code,\n name,\n availableTime,\n address,\n euifyMakeModel,\n distance,\n onSchedule,\n pageData = {\n scheduleNow: 'Schedule Now',\n available: 'Available',\n away: 'away',\n },\n className,\n style,\n ...props\n}) => {\n const [isHovered, setIsHovered] = React.useState(false)\n\n const handleScheduleClick = () => {\n onSchedule?.(code)\n }\n\n // 格式化距离显示\n const formatDistance = (dist: number) => {\n if (dist < 1) {\n return `${Math.round(dist * 1000)} m`\n }\n return `${dist.toFixed(1)} km`\n }\n\n return (\n <div\n {...props}\n className={cn(\n 'p-6 cursor-pointer transition-colors duration-200 border-b border-[#E4E5E6] last:border-b-0',\n className\n )}\n style={{\n backgroundColor: isHovered ? '#f3f4f6' : 'transparent',\n ...style,\n }}\n onMouseEnter={(e) => {\n setIsHovered(true)\n props.onMouseEnter?.(e)\n }}\n onMouseLeave={(e) => {\n setIsHovered(false)\n props.onMouseLeave?.(e)\n }}\n >\n {/* Studio Name and Distance */}\n <div className=\"flex items-start justify-between mb-4\">\n <h3 className=\"text-[24px] l:text-[20px] font-bold text-[#080A0F]\">\n {name}\n </h3>\n {distance !== undefined && (\n <span className=\"text-[16px] l:text-[14px] font-medium text-[#2E8B57] bg-[#E8F5E9] px-3 py-1 rounded-full whitespace-nowrap ml-2\">\n {formatDistance(distance)} {pageData.away}\n </span>\n )}\n </div>\n\n {/* Available Time */}\n {availableTime && (\n <div className=\"flex items-start gap-3 mb-3\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"flex-shrink-0 mt-0.5\"\n >\n <rect\n x=\"3\"\n y=\"4\"\n width=\"14\"\n height=\"13\"\n rx=\"2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <path\n d=\"M3 8H17\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M6 2V4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M14 2V4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n <div>\n <p className=\"text-[16px] l:text-[12px] text-[#2A2C32]\">\n {availableTime === pageData.noAvailableTime\n ? ''\n : pageData.available}{' '}\n {availableTime}\n </p>\n </div>\n </div>\n )}\n\n {/* Address */}\n <div className=\"flex items-start gap-3 mb-3\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"flex-shrink-0 mt-0.5\"\n >\n <path\n d=\"M10 10C11.1046 10 12 9.10457 12 8C12 6.89543 11.1046 6 10 6C8.89543 6 8 6.89543 8 8C8 9.10457 8.89543 10 10 10Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n <path\n d=\"M10 18C10 18 16 13 16 8C16 4.68629 13.3137 2 10 2C6.68629 2 4 4.68629 4 8C4 13 10 18 10 18Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n />\n </svg>\n <div className=\"flex-1\">\n <p className=\"text-[16px] l:text-[14px] text-[#2A2C32] break-words\">\n {address}\n </p>\n </div>\n </div>\n\n {/* euifyMake Models */}\n <div className=\"flex items-start gap-3 mb-6\">\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"flex-shrink-0 mt-0.5\"\n >\n <path\n d=\"M14.4643 7.4929H9.65565M3.16391 18.7132H20.8171C22.0122 18.7132 22.981 17.7563 22.981 16.576L23 13.8348L22.981 6.42431C22.981 5.24396 22.0122 4.28711 20.8171 4.28711H3.16391C1.96882 4.28711 1 5.24396 1 6.42431V16.576C1 17.7563 1.96882 18.7132 3.16391 18.7132Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5.32812 18.2325V14.4238C5.32812 13.8715 5.77584 13.4238 6.32813 13.4238H17.7925C18.3447 13.4238 18.7925 13.8715 18.7925 14.4238V18.2325\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <div>\n <p className=\"text-[16px] l:text-[14px] text-[#2A2C32]\">\n {euifyMakeModel}\n </p>\n </div>\n </div>\n\n {/* Schedule Button */}\n <button\n onClick={handleScheduleClick}\n className={cn(\n 'w-fit px-[28px] l:px-[20px] l:py-[8px] py-3 rounded-full',\n 'bg-white text-gray-900 border-2 border-gray-900',\n 'font-bold text-[16px] l:text-[14px]',\n 'hover:bg-gray-900 hover:text-white',\n 'transition-all duration-200'\n )}\n >\n {pageData.scheduleNow}\n </button>\n </div>\n )\n}\n\nStudioCard.displayName = 'StudioCard'\n","import React, { useState } from 'react'\nimport { cn } from '@/utils/cn'\n\nexport interface StudioLocation {\n id: string\n name: string\n address: string\n city: string\n state: string\n zipCode: string\n country: string\n lat: number\n lng: number\n availableTime?: string\n euifyMakeModel?: string\n distance?: number\n}\n\nexport interface StudioMapProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * 谷歌地图 API Key\n */\n googleMapsApiKey: string\n /**\n * 工作室位置数据\n */\n locations?: StudioLocation[]\n /**\n * 当前 hover 的位置 ID\n */\n hoveredLocationId?: string | null\n /**\n * 默认中心点\n */\n defaultCenter?: { lat: number; lng: number }\n /**\n * 默认缩放级别\n */\n defaultZoom?: number\n /**\n * 地图高度\n */\n mapHeight?: string\n /**\n * 点击 Schedule Now 的回调\n */\n onSchedule?: (demoRoomCode: string) => void\n /**\n * 可配置的文案数据\n */\n pageData?: {\n apiKeyRequired?: string\n loadingMap?: string\n scheduleNow?: string\n available?: string\n noAvailableTime?: string\n }\n}\n\nconst defaultLocations: StudioLocation[] = [\n {\n id: '1',\n name: 'Design District Demo Room',\n address: '111 8th St',\n city: 'San Francisco',\n state: 'CA',\n zipCode: '94108',\n country: 'United States',\n lat: 37.7749,\n lng: -122.4194,\n availableTime: 'Oct 28, 2:00 PM',\n euifyMakeModel: 'euifyMake E1, euifyMake M5',\n },\n]\n\nexport const StudioMap: React.FC<StudioMapProps> = ({\n googleMapsApiKey,\n locations = defaultLocations,\n hoveredLocationId,\n defaultCenter = { lat: 39.8283, lng: -98.5795 }, // US center\n defaultZoom = 4,\n mapHeight = '600px',\n onSchedule,\n pageData = {\n apiKeyRequired: 'Google Maps API Key is required',\n loadingMap: 'Loading map...',\n scheduleNow: 'Schedule Now',\n available: 'Available',\n },\n className,\n ...props\n}) => {\n const [_selectedLocation, setSelectedLocation] =\n useState<StudioLocation | null>(null)\n const [isLoaded, setIsLoaded] = useState(false)\n const mapRef = React.useRef<HTMLDivElement>(null)\n const googleMapRef = React.useRef<google.maps.Map | null>(null)\n const markersRef = React.useRef<google.maps.Marker[]>([])\n const infoWindowRef = React.useRef<google.maps.InfoWindow | null>(null)\n\n // 加载谷歌地图脚本\n React.useEffect(() => {\n if (!googleMapsApiKey) {\n console.error('Google Maps API Key is required')\n return\n }\n\n // 检查脚本是否已加载\n if (window.google && window.google.maps) {\n setIsLoaded(true)\n return\n }\n\n const script = document.createElement('script')\n script.src = `https://maps.googleapis.com/maps/api/js?key=${googleMapsApiKey}&libraries=places`\n script.async = true\n script.defer = true\n script.onload = () => setIsLoaded(true)\n script.onerror = () => console.error('Failed to load Google Maps script')\n document.head.appendChild(script)\n\n return () => {\n // 清理脚本(可选)\n if (script.parentNode) {\n script.parentNode.removeChild(script)\n }\n }\n }, [googleMapsApiKey])\n\n // 初始化地图\n React.useEffect(() => {\n if (!isLoaded || !mapRef.current || googleMapRef.current) return\n\n // 创建地图\n const map = new google.maps.Map(mapRef.current, {\n center: defaultCenter,\n zoom: defaultZoom,\n styles: [\n {\n featureType: 'all',\n elementType: 'geometry',\n stylers: [{ color: '#E0F2F1' }],\n },\n {\n featureType: 'water',\n elementType: 'geometry',\n stylers: [{ color: '#B2EBF2' }],\n },\n {\n featureType: 'road',\n elementType: 'geometry',\n stylers: [{ color: '#ffffff' }],\n },\n ],\n mapTypeControl: false,\n streetViewControl: false,\n fullscreenControl: true,\n })\n\n googleMapRef.current = map\n\n // 创建信息窗口\n infoWindowRef.current = new google.maps.InfoWindow()\n }, [isLoaded, defaultCenter, defaultZoom])\n\n // 添加标记点\n React.useEffect(() => {\n if (!googleMapRef.current || !isLoaded) return\n\n // 清除旧标记\n markersRef.current.forEach((marker) => marker.setMap(null))\n markersRef.current = []\n\n // 过滤并验证有效的位置数据\n const validLocations = locations.filter((location) => {\n const lat = Number(location.lat)\n const lng = Number(location.lng)\n const isValid =\n !isNaN(lat) &&\n !isNaN(lng) &&\n isFinite(lat) &&\n isFinite(lng) &&\n lat >= -90 &&\n lat <= 90 &&\n lng >= -180 &&\n lng <= 180\n if (!isValid) {\n console.warn('Invalid location coordinates:', location)\n }\n return isValid\n })\n\n // 添加新标记\n validLocations.forEach((location) => {\n const lat = Number(location.lat)\n const lng = Number(location.lng)\n\n // 创建自定义SVG图标\n const svgIcon = {\n url: `data:image/svg+xml;charset=UTF-8,${encodeURIComponent(`\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"24\" cy=\"24\" r=\"22\" fill=\"#00000010\"/>\n <circle cx=\"24\" cy=\"24\" r=\"10\" fill=\"#000000\"/>\n <circle cx=\"24\" cy=\"24\" r=\"5\" fill=\"#3ADB67\"/>\n </svg>\n `)}`,\n scaledSize: { width: 48, height: 48 },\n anchor: { x: 24, y: 24 },\n } as google.maps.Icon\n\n const marker = new google.maps.Marker({\n position: { lat, lng },\n map: googleMapRef.current,\n title: location.name,\n icon: svgIcon,\n })\n\n marker.addListener('click', () => {\n setSelectedLocation(location)\n\n // 创建信息窗口内容\n const content = `\n <div style=\"padding: 0 16px 16px 16px; font-weight: 700; font-family: 'MontForAnker'; max-width: 420px;\">\n <h3 style=\"margin: 0 0 16px 0; font-size: 24px; color: #080A0F;\">${location.name}</h3>\n ${\n location.availableTime\n ? `<div style=\"display: flex; align-items: flex-start; gap: 12px; margin-bottom: 12px;\">\n <svg style=\"flex-shrink: 0; margin-top: 2px;\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"3\" y=\"4\" width=\"14\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M3 8H17\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <path d=\"M6 2V4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <path d=\"M14 2V4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n <div>\n <p style=\"margin: 0; font-size: 16px; color: #2A2C32;\">${location.availableTime === pageData?.noAvailableTime ? '' : pageData.available} ${location.availableTime}</p>\n </div>\n </div>`\n : ''\n }\n <div style=\"display: flex; align-items: flex-start; gap: 12px; margin-bottom: 12px;\">\n <svg style=\"flex-shrink: 0; margin-top: 2px;\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 10C11.1046 10 12 9.10457 12 8C12 6.89543 11.1046 6 10 6C8.89543 6 8 6.89543 8 8C8 9.10457 8.89543 10 10 10Z\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M10 18C10 18 16 13 16 8C16 4.68629 13.3137 2 10 2C6.68629 2 4 4.68629 4 8C4 13 10 18 10 18Z\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n </svg>\n <div style=\"flex: 1;\">\n <p style=\"margin: 0; font-size: 16px; color: #2A2C32; word-wrap: break-word;\">${location.address}</p>\n </div>\n </div>\n ${\n location.euifyMakeModel\n ? `<div style=\"display: flex; align-items: flex-start; gap: 12px; margin-bottom: 24px;\">\n <svg style=\"flex-shrink: 0; margin-top: 2px;\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.4643 7.4929H9.65565M3.16391 18.7132H20.8171C22.0122 18.7132 22.981 17.7563 22.981 16.576L23 13.8348L22.981 6.42431C22.981 5.24396 22.0122 4.28711 20.8171 4.28711H3.16391C1.96882 4.28711 1 5.24396 1 6.42431V16.576C1 17.7563 1.96882 18.7132 3.16391 18.7132Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5.32812 18.2325V14.4238C5.32812 13.8715 5.77584 13.4238 6.32813 13.4238H17.7925C18.3447 13.4238 18.7925 13.8715 18.7925 14.4238V18.2325\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <div>\n <p style=\"margin: 0; font-size: 16px; color: #2A2C32;\">${location.euifyMakeModel}</p>\n </div>\n </div>`\n : ''\n }\n <button\n id=\"schedule-btn-${location.id}\"\n style=\"\n width: fit-content;\n padding: 12px 28px;\n background: #fff;\n color: #111827;\n border: 2px solid #111827;\n border-radius: 9999px;\n font-weight: 700;\n cursor: pointer;\n font-size: 16px;\n transition: all 0.2s;\n \"\n onmouseover=\"this.style.background='#111827'; this.style.color='#fff';\"\n onmouseout=\"this.style.background='#fff'; this.style.color='#111827';\"\n >\n ${pageData.scheduleNow}\n </button>\n </div>\n `\n\n if (infoWindowRef.current) {\n infoWindowRef.current.setContent(content)\n infoWindowRef.current.open(googleMapRef.current, marker)\n\n // 添加按钮点击事件监听\n google.maps.event.addListenerOnce(\n infoWindowRef.current,\n 'domready',\n () => {\n const btn = document.getElementById(`schedule-btn-${location.id}`)\n if (btn) {\n btn.addEventListener('click', () => {\n if (onSchedule) {\n onSchedule(location.id)\n }\n })\n }\n }\n )\n }\n\n // 移动地图中心到标记位置\n googleMapRef.current?.panTo({ lat: location.lat, lng: location.lng })\n })\n\n markersRef.current.push(marker)\n })\n\n // 自动调整地图视图以显示所有标记\n if (validLocations.length > 0 && googleMapRef.current) {\n const bounds = new google.maps.LatLngBounds()\n validLocations.forEach((location) => {\n const lat = Number(location.lat)\n const lng = Number(location.lng)\n bounds.extend({ lat, lng })\n })\n googleMapRef.current.fitBounds(bounds)\n }\n }, [isLoaded, locations, onSchedule])\n\n // 处理 hover 状态变化\n React.useEffect(() => {\n if (!isLoaded || !googleMapRef.current || !hoveredLocationId) {\n // 如果没有 hover,关闭信息窗口\n if (!hoveredLocationId && infoWindowRef.current) {\n infoWindowRef.current.close()\n }\n return\n }\n\n // 找到对应的位置和标记\n const location = locations.find((loc) => loc.id === hoveredLocationId)\n const markerIndex = locations.findIndex(\n (loc) => loc.id === hoveredLocationId\n )\n const marker = markersRef.current[markerIndex]\n\n if (location && marker) {\n // 创建信息窗口内容\n const content = `\n <div style=\"padding: 0 16px 16px 16px; font-weight: 700; font-family: 'MontForAnker'; max-width: 420px;\">\n <h3 style=\"margin: 0 0 16px 0; font-size: 24px; color: #080A0F;\">${location.name}</h3>\n ${\n location.availableTime\n ? `<div style=\"display: flex; align-items: flex-start; gap: 12px; margin-bottom: 12px;\">\n <svg style=\"flex-shrink: 0; margin-top: 2px;\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"3\" y=\"4\" width=\"14\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M3 8H17\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <path d=\"M6 2V4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <path d=\"M14 2V4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n <div>\n <p style=\"margin: 0;font-size: 16px; color: #2A2C32;\">${location.availableTime === pageData?.noAvailableTime ? '' : pageData.available} ${location.availableTime}</p>\n </div>\n </div>`\n : ''\n }\n <div style=\"display: flex; align-items: flex-start; gap: 12px; margin-bottom: 12px;\">\n <svg style=\"flex-shrink: 0; margin-top: 2px;\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 10C11.1046 10 12 9.10457 12 8C12 6.89543 11.1046 6 10 6C8.89543 6 8 6.89543 8 8C8 9.10457 8.89543 10 10 10Z\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M10 18C10 18 16 13 16 8C16 4.68629 13.3137 2 10 2C6.68629 2 4 4.68629 4 8C4 13 10 18 10 18Z\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n </svg>\n <div style=\"flex: 1;\">\n <p style=\"margin: 0; font-size: 16px; color: #2A2C32; word-wrap: break-word;\">${location.address}</p>\n </div>\n </div>\n ${\n location.euifyMakeModel\n ? `<div style=\"display: flex; align-items: flex-start; gap: 12px; margin-bottom: 24px;\">\n <svg style=\"flex-shrink: 0; margin-top: 2px;\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.4643 7.4929H9.65565M3.16391 18.7132H20.8171C22.0122 18.7132 22.981 17.7563 22.981 16.576L23 13.8348L22.981 6.42431C22.981 5.24396 22.0122 4.28711 20.8171 4.28711H3.16391C1.96882 4.28711 1 5.24396 1 6.42431V16.576C1 17.7563 1.96882 18.7132 3.16391 18.7132Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5.32812 18.2325V14.4238C5.32812 13.8715 5.77584 13.4238 6.32813 13.4238H17.7925C18.3447 13.4238 18.7925 13.8715 18.7925 14.4238V18.2325\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <div>\n <p style=\"margin: 0; font-size: 16px; color: #2A2C32;\">${location.euifyMakeModel}</p>\n </div>\n </div>`\n : ''\n }\n <button\n id=\"schedule-btn-hover-${location.id}\"\n style=\"\n width: fit-content;\n padding: 12px 28px;\n background: #fff;\n color: #111827;\n border: 2px solid #111827;\n border-radius: 9999px;\n font-weight: 700;\n cursor: pointer;\n font-size: 16px;\n transition: all 0.2s;\n \"\n onmouseover=\"this.style.background='#111827'; this.style.color='#fff';\"\n onmouseout=\"this.style.background='#fff'; this.style.color='#111827';\"\n >\n ${pageData.scheduleNow}\n </button>\n </div>\n `\n\n if (infoWindowRef.current) {\n infoWindowRef.current.setContent(content)\n infoWindowRef.current.open(googleMapRef.current, marker)\n\n // 添加按钮点击事件监听\n google.maps.event.addListenerOnce(\n infoWindowRef.current,\n 'domready',\n () => {\n const btn = document.getElementById(\n `schedule-btn-hover-${location.id}`\n )\n if (btn) {\n btn.addEventListener('click', () => {\n if (onSchedule) {\n onSchedule(location.id)\n }\n })\n }\n }\n )\n }\n\n // 移动地图中心到标记位置(可选)\n // googleMapRef.current?.panTo({ lat: location.lat, lng: location.lng })\n }\n }, [hoveredLocationId, isLoaded, locations, onSchedule])\n\n // const handleCloseInfo = useCallback(() => {\n // setSelectedLocation(null)\n // if (infoWindowRef.current) {\n // infoWindowRef.current.close()\n // }\n // }, [])\n\n if (!googleMapsApiKey) {\n return (\n <div\n className={cn(\n 'flex items-center overflow-hidden justify-center bg-gray-100 rounded-[16px]',\n className\n )}\n style={{ height: mapHeight }}\n {...props}\n >\n <p className=\"text-gray-600\">{pageData.apiKeyRequired}</p>\n </div>\n )\n }\n\n return (\n <div\n className={cn('relative w-full rounded-[16px] overflow-hidden', className)}\n {...props}\n >\n <div ref={mapRef} style={{ height: mapHeight }} />\n {!isLoaded && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-gray-100\">\n <div className=\"text-center\">\n <div className=\"inline-block animate-spin rounded-full h-8 w-8 border-4 border-gray-300 border-t-gray-900 mb-2\"></div>\n <p className=\"text-gray-600\">{pageData.loadingMap}</p>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nStudioMap.displayName = 'StudioMap'\n","// API 基础类型\nexport interface ApiResponse<T = any> {\n code: number\n message: string\n data: T\n request_id: string\n}\n\n// 时段状态\nexport type TimeslotStatus = 'available' | 'full' | 'disabled'\n\n// 门店类型\nexport type DemoRoomType = 'flagship' | 'standard' | 'popup'\n\n// 门店状态\nexport type DemoRoomStatus = 'enabled' | 'disabled'\n\n// 预约状态\nexport type BookingStatus = 'pending' | 'checked_in' | 'completed' | 'cancelled'\n\n// 问题类型\nexport type QuestionType = 'text' | 'email' | 'tel' | 'phone' | 'radio' | 'radio_with_other' | 'checkbox' | 'textarea' | 'select'\n\n// 时段\nexport interface Timeslot {\n id: number\n start_time: string\n end_time: string\n capacity: number\n booked_count: number\n status: TimeslotStatus\n}\n\n// 门店位置信息\nexport interface DemoRoomLocation {\n country: string\n state: string\n city: string\n}\n\n// 门店\nexport interface DemoRoom {\n code: string\n name: string\n description: string\n equipment?: string[]\n address: string\n location?: DemoRoomLocation\n type: DemoRoomType\n capacity: number\n status: DemoRoomStatus\n timezone: string\n images: string[]\n latitude: number\n longitude: number\n questionnaire_id?: number\n timeslots: Timeslot[]\n}\n\n// 问卷选项\nexport interface QuestionOption {\n label: string\n value?: string\n}\n\n// 问卷问题\nexport interface Question {\n id?: string // 固定字段使用 id(如客户信息字段)\n key?: string // 自定义字段使用 key\n type: QuestionType\n label: string\n description?: string\n placeholder?: string\n hint?: string\n options?: QuestionOption[]\n required: boolean\n}\n\n// 问卷\nexport interface Questionnaire {\n id: number\n name: string\n description: string\n questions: Question[]\n}\n\n// 获取门店列表响应\nexport interface GetDemoRoomsResponse {\n demorooms: DemoRoom[]\n}\n\n// 查询时段响应\nexport interface GetTimeslotsResponse {\n timeslots: Timeslot[]\n timezone: string\n}\n\n// 提交预约请求\nexport interface CreateBookingRequest {\n demoroom_code: string\n timeslot_id: number\n questionnaire_id?: number\n questionnaire_response?: Record<string, any>\n customer_name: string\n customer_email: string\n customer_phone_code: string\n customer_phone_number: string\n}\n\n// 提交预约响应\nexport interface CreateBookingResponse {\n booking_id: string\n demoroom_code: string\n booking_date: string\n booking_time: string\n customer_name: string\n customer_email: string\n status: string\n cancel_token?: string\n created_at?: string\n}\n\n// 预约信息\nexport interface Booking {\n booking_id: number\n demoroom_code: string\n demoroom_name?: string // 门店名称(查询预约详情时返回)\n address?: string // 门店地址(查询预约详情时返回)\n equipment?: string[] // 设备列表(查询预约详情时返回)\n latitude?: number // 纬度(查询预约详情时返回)\n longitude?: number // 经度(查询预约详情时返回)\n timezone?: string // 门店时区(查询预约详情时返回)\n booking_date: string\n booking_time?: string // 预约开始时间(创建预约时返回)\n time_slot?: string // 时间段 HH:MM-HH:MM(查询预约详情时返回)\n customer_name: string\n customer_email: string\n phone_code?: string // 电话区号\n phone_number?: string // 电话号码\n status: BookingStatus\n cancel_token: string\n created_at: string\n}\n\n// 获取预约详情响应\nexport interface GetBookingResponse {\n booking: Booking\n}\n\n// 取消预约响应\nexport interface CancelBookingResponse {\n booking: Booking\n}\n\n// API 错误码\nexport enum ApiErrorCode {\n SUCCESS = 0,\n PARAM_ERROR = 1001,\n UNAUTHORIZED = 1002,\n FORBIDDEN = 1003,\n NOT_FOUND = 1004,\n CONFLICT = 1005,\n INTERNAL_ERROR = 1006,\n}\n\n// API 错误\nexport class ApiError extends Error {\n code: number\n request_id?: string\n\n constructor(code: number, message: string, request_id?: string) {\n super(message)\n this.code = code\n this.request_id = request_id\n this.name = 'ApiError'\n }\n}\n","import { useState, useEffect, useCallback } from 'react'\nimport type { DemoRoomApiClient } from './client'\nimport type {\n DemoRoom,\n GetTimeslotsResponse,\n Questionnaire,\n CreateBookingRequest,\n Booking,\n} from './types'\nimport { ApiError } from './types'\n\ninterface UseApiState<T> {\n data: T | null\n loading: boolean\n error: ApiError | null\n}\n\n/**\n * 获取门店列表 Hook\n */\nexport function useDemoRooms(\n client: DemoRoomApiClient,\n params: {\n team_code?: string\n brand_website?: string\n locale?: string\n },\n options?: { enabled?: boolean }\n) {\n const [state, setState] = useState<UseApiState<DemoRoom[]>>({\n data: null,\n loading: true,\n error: null,\n })\n\n const enabled = options?.enabled !== false\n\n useEffect(() => {\n if (!enabled) return\n\n let cancelled = false\n\n const fetchData = async () => {\n setState((prev) => ({ ...prev, loading: true, error: null }))\n\n try {\n const data = await client.getDemoRooms(params)\n if (!cancelled) {\n setState({ data, loading: false, error: null })\n }\n } catch (error) {\n if (!cancelled) {\n setState({\n data: null,\n loading: false,\n error: error instanceof ApiError ? error : new ApiError(1006, 'Unknown error'),\n })\n }\n }\n }\n\n fetchData()\n\n return () => {\n cancelled = true\n }\n }, [client, params.team_code, params.brand_website, params.locale, enabled])\n\n return state\n}\n\n/**\n * 获取门店详情 Hook\n */\nexport function useDemoRoom(\n client: DemoRoomApiClient,\n code: string,\n locale?: string,\n options?: { enabled?: boolean }\n) {\n const [state, setState] = useState<UseApiState<DemoRoom>>({\n data: null,\n loading: true,\n error: null,\n })\n\n const enabled = options?.enabled !== false\n\n useEffect(() => {\n if (!enabled || !code) return\n\n let cancelled = false\n\n const fetchData = async () => {\n setState((prev) => ({ ...prev, loading: true, error: null }))\n\n try {\n const data = await client.getDemoRoom(code, locale)\n if (!cancelled) {\n setState({ data, loading: false, error: null })\n }\n } catch (error) {\n if (!cancelled) {\n setState({\n data: null,\n loading: false,\n error: error instanceof ApiError ? error : new ApiError(1006, 'Unknown error'),\n })\n }\n }\n }\n\n fetchData()\n\n return () => {\n cancelled = true\n }\n }, [client, code, locale, enabled])\n\n return state\n}\n\n/**\n * 查询门店时段 Hook\n */\nexport function useTimeslots(\n client: DemoRoomApiClient,\n code: string,\n params: {\n start_date: string\n end_date: string\n timezone?: string\n },\n options?: { enabled?: boolean }\n) {\n const [state, setState] = useState<UseApiState<GetTimeslotsResponse>>({\n data: null,\n loading: true,\n error: null,\n })\n\n const enabled = options?.enabled !== false\n\n useEffect(() => {\n if (!enabled || !code || !params.start_date || !params.end_date) return\n\n let cancelled = false\n\n const fetchData = async () => {\n setState((prev) => ({ ...prev, loading: true, error: null }))\n\n try {\n const data = await client.getTimeslots(code, params)\n if (!cancelled) {\n setState({ data, loading: false, error: null })\n }\n } catch (error) {\n if (!cancelled) {\n setState({\n data: null,\n loading: false,\n error: error instanceof ApiError ? error : new ApiError(1006, 'Unknown error'),\n })\n }\n }\n }\n\n fetchData()\n\n return () => {\n cancelled = true\n }\n }, [client, code, params.start_date, params.end_date, params.timezone, enabled])\n\n return state\n}\n\n/**\n * 查询门店问卷 Hook\n */\nexport function useQuestionnaire(\n client: DemoRoomApiClient,\n code: string,\n questionnaire_id: number | undefined,\n locale?: string,\n options?: { enabled?: boolean }\n) {\n const [state, setState] = useState<UseApiState<Questionnaire>>({\n data: null,\n loading: true,\n error: null,\n })\n\n const enabled = options?.enabled !== false\n\n useEffect(() => {\n if (!enabled || !code || !questionnaire_id) {\n setState({\n data: null,\n loading: false,\n error: null,\n })\n return\n }\n\n let cancelled = false\n\n const fetchData = async () => {\n setState((prev) => ({ ...prev, loading: true, error: null }))\n\n try {\n const data = await client.getQuestionnaire(code, questionnaire_id, locale)\n if (!cancelled) {\n setState({ data, loading: false, error: null })\n }\n } catch (error) {\n if (!cancelled) {\n setState({\n data: null,\n loading: false,\n error: error instanceof ApiError ? error : new ApiError(1006, 'Unknown error'),\n })\n }\n }\n }\n\n fetchData()\n\n return () => {\n cancelled = true\n }\n }, [client, code, questionnaire_id, locale, enabled])\n\n return state\n}\n\n/**\n * 提交预约 Hook\n */\nexport function useCreateBooking(client: DemoRoomApiClient) {\n const [state, setState] = useState<UseApiState<Booking>>({\n data: null,\n loading: false,\n error: null,\n })\n\n const createBooking = useCallback(\n async (data: CreateBookingRequest) => {\n setState({ data: null, loading: true, error: null })\n\n try {\n const result = await client.createBooking(data)\n setState({ data: result, loading: false, error: null })\n return result\n } catch (error) {\n const apiError = error instanceof ApiError ? error : new ApiError(1006, 'Unknown error')\n setState({ data: null, loading: false, error: apiError })\n throw apiError\n }\n },\n [client]\n )\n\n return {\n ...state,\n createBooking,\n }\n}\n\n/**\n * 获取预约详情 Hook\n */\nexport function useBooking(\n client: DemoRoomApiClient,\n token: string,\n locale?: string,\n options?: { enabled?: boolean }\n) {\n const [state, setState] = useState<UseApiState<Booking>>({\n data: null,\n loading: true,\n error: null,\n })\n\n const enabled = options?.enabled !== false\n\n useEffect(() => {\n if (!enabled || !token) return\n\n let cancelled = false\n\n const fetchData = async () => {\n setState((prev) => ({ ...prev, loading: true, error: null }))\n\n try {\n const data = await client.getBooking(token, locale)\n if (!cancelled) {\n setState({ data, loading: false, error: null })\n }\n } catch (error) {\n if (!cancelled) {\n setState({\n data: null,\n loading: false,\n error: error instanceof ApiError ? error : new ApiError(1006, 'Unknown error'),\n })\n }\n }\n }\n\n fetchData()\n\n return () => {\n cancelled = true\n }\n }, [client, token, locale, enabled])\n\n return state\n}\n\n/**\n * 取消预约 Hook\n */\nexport function useCancelBooking(client: DemoRoomApiClient) {\n const [state, setState] = useState<UseApiState<Booking>>({\n data: null,\n loading: false,\n error: null,\n })\n\n const cancelBooking = useCallback(\n async (token: string, locale?: string) => {\n setState({ data: null, loading: true, error: null })\n\n try {\n const result = await client.cancelBooking(token, locale)\n setState({ data: result, loading: false, error: null })\n return result\n } catch (error) {\n const apiError = error instanceof ApiError ? error : new ApiError(1006, 'Unknown error')\n setState({ data: null, loading: false, error: apiError })\n throw apiError\n }\n },\n [client]\n )\n\n return {\n ...state,\n cancelBooking,\n }\n}\n","import React, { useEffect, useRef } from 'react'\nimport { cn } from '@/utils/cn'\n\nexport interface AntdMobileIsolatedProps {\n children: React.ReactNode\n className?: string\n style?: React.CSSProperties\n}\n\n/**\n * 隔离 antd-mobile 全局样式的包装组件\n * 通过创建一个独立的样式上下文来防止 antd-mobile 的全局样式影响应用其他部分\n */\nexport const AntdMobileIsolated: React.FC<AntdMobileIsolatedProps> = ({\n children,\n className,\n style,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!containerRef.current) return\n\n // 重置容器内可能受影响的全局样式\n const container = containerRef.current\n const originalStyles = {\n fontSize: container.style.fontSize,\n fontFamily: container.style.fontFamily,\n lineHeight: container.style.lineHeight,\n color: container.style.color,\n }\n\n // 应用隔离样式\n container.style.fontSize = '14px'\n container.style.fontFamily =\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif'\n container.style.lineHeight = '1.5'\n container.style.color = '#333'\n\n // 清理函数:恢复原始样式\n return () => {\n container.style.fontSize = originalStyles.fontSize\n container.style.fontFamily = originalStyles.fontFamily\n container.style.lineHeight = originalStyles.lineHeight\n container.style.color = originalStyles.color\n }\n }, [])\n\n return (\n <div\n ref={containerRef}\n className={cn('antd-mobile-isolated', className)}\n style={{\n // 使用 all: revert-layer 来隔离样式\n isolation: 'isolate',\n contain: 'layout style',\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n\nAntdMobileIsolated.displayName = 'AntdMobileIsolated'\n","/**\n * 地址解析工具\n * 将 room.address 解析为层级结构:Country > State > City\n */\n\nexport interface LocationHierarchy {\n country: string\n state: string\n city: string\n}\n\n/**\n * 已知国家列表(包含多词国家名)\n * 优先匹配多词国家名,避免误判\n */\nconst KNOWN_COUNTRIES = [\n 'United States',\n 'United Kingdom',\n 'American Samoa',\n 'United Arab Emirates',\n 'Bosnia and Herzegovina',\n 'Trinidad and Tobago',\n 'Saint Kitts and Nevis',\n 'Antigua and Barbuda',\n 'Saint Vincent and the Grenadines',\n 'São Tomé and Príncipe',\n 'United States Minor Outlying Islands',\n 'British Virgin Islands',\n 'United States Virgin Islands',\n 'Cayman Islands',\n 'Cook Islands',\n 'Falkland Islands',\n 'Faroe Islands',\n 'Marshall Islands',\n 'Northern Mariana Islands',\n 'Pitcairn Islands',\n 'Solomon Islands',\n 'Turks and Caicos Islands',\n 'Wallis and Futuna',\n]\n\n/**\n * 从地址字符串中提取国家、州、城市信息\n * 支持多种地址格式,从后往前解析\n *\n * 示例:\n * - \"building information, street test, city-test2, Ofu‑Olosega, American Samoa\"\n * => country: \"American Samoa\", state: \"Ofu‑Olosega\", city: \"city-test2\"\n * - \"111 8th St, San Francisco, CA 94108, United States\"\n * => country: \"United States\", state: \"CA\", city: \"San Francisco\"\n */\nexport function parseAddress(address: string): LocationHierarchy {\n // 按逗号分割地址\n const parts = address.split(',').map((part) => part.trim()).filter(Boolean)\n\n // 默认值\n let country = 'United States'\n let state = ''\n let city = ''\n\n if (parts.length === 0) {\n return { country, state, city }\n }\n\n // 从后往前解析\n // 最后一部分通常是国家\n const lastPart = parts[parts.length - 1]\n\n // 检查最后一部分是否是已知国家\n const matchedCountry = KNOWN_COUNTRIES.find(\n (knownCountry) => lastPart.toLowerCase() === knownCountry.toLowerCase()\n )\n\n if (matchedCountry) {\n country = matchedCountry\n\n // 倒数第二部分是州/省\n if (parts.length >= 2) {\n state = parts[parts.length - 2].split(' ')[0] // 去掉邮编\n }\n\n // 倒数第三部分是城市\n if (parts.length >= 3) {\n city = parts[parts.length - 3]\n }\n } else {\n // 如果最后一部分不是已知国家,尝试其他解析方式\n if (parts.length >= 2) {\n // 可能的格式: \"Street, City, State\"\n state = parts[parts.length - 1].split(' ')[0]\n city = parts[parts.length - 2]\n } else if (parts.length === 1) {\n // 只有一个部分,可能是城市\n city = parts[0]\n }\n }\n\n return {\n country: country.trim(),\n state: state.trim(),\n city: city.trim(),\n }\n}\n\n/**\n * 地理位置节点(用于树形结构)\n */\nexport interface LocationNode {\n id: string\n name: string\n type: 'country' | 'state' | 'city'\n count: number // 该位置的门店数量\n children?: LocationNode[]\n}\n\n/**\n * 从门店列表构建地理位置树\n */\nexport function buildLocationTree(\n locations: Array<{ address: string; id: string }>\n): LocationNode[] {\n const tree: Map<string, LocationNode> = new Map()\n\n locations.forEach((location) => {\n const { country, state, city } = parseAddress(location.address)\n\n // 构建国家节点\n const countryId = country\n if (!tree.has(countryId)) {\n tree.set(countryId, {\n id: countryId,\n name: country,\n type: 'country',\n count: 0,\n children: [],\n })\n }\n\n const countryNode = tree.get(countryId)!\n countryNode.count++\n\n // 构建州节点\n if (state) {\n const stateId = `${country}/${state}`\n let stateNode = countryNode.children?.find((n) => n.id === stateId)\n\n if (!stateNode) {\n stateNode = {\n id: stateId,\n name: state,\n type: 'state',\n count: 0,\n children: [],\n }\n countryNode.children?.push(stateNode)\n }\n\n stateNode.count++\n\n // 构建城市节点\n if (city) {\n const cityId = `${country}/${state}/${city}`\n let cityNode = stateNode.children?.find((n) => n.id === cityId)\n\n if (!cityNode) {\n cityNode = {\n id: cityId,\n name: city,\n type: 'city',\n count: 0,\n }\n stateNode.children?.push(cityNode)\n }\n\n cityNode.count++\n }\n }\n })\n\n return Array.from(tree.values())\n}\n\n/**\n * 按字母分组位置列表\n */\nexport function groupByAlphabet<T extends { name: string }>(\n items: T[]\n): Array<{ title: string; items: T[] }> {\n const groups: Map<string, T[]> = new Map()\n\n items.forEach((item) => {\n const firstChar = item.name.charAt(0).toUpperCase()\n const key = /[A-Z]/.test(firstChar) ? firstChar : '#'\n\n if (!groups.has(key)) {\n groups.set(key, [])\n }\n groups.get(key)!.push(item)\n })\n\n return Array.from(groups.entries())\n .sort(([a], [b]) => {\n if (a === '#') return 1\n if (b === '#') return -1\n return a.localeCompare(b)\n })\n .map(([title, items]) => ({\n title,\n items: items.sort((a, b) => a.name.localeCompare(b.name)),\n }))\n}\n","/* antd-mobile 样式隔离 - 使用更强的隔离策略 */\n.antdMobileScope {\n /* 重置所有继承样式,但保持布局相关属性 */\n all: unset;\n\n /* 恢复必要的属性 */\n display: block;\n position: absolute;\n box-sizing: border-box;\n\n /* 阻止继承字体样式 */\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: #333;\n\n /* 重置 CSS 变量影响 */\n --adm-color-primary: #1677ff;\n --adm-color-text: #333333;\n --adm-font-size-main: 14px;\n}\n\n/* 确保 antd-mobile 组件内部样式正常工作 */\n.antdMobileScope *,\n.antdMobileScope *::before,\n.antdMobileScope *::after {\n box-sizing: border-box;\n}\n\n/* 阻止全局样式继承 */\n.antd-mobile-isolated-container .antdMobileScope :not([class*=\"adm-\"]) {\n all: unset;\n}\n\n/* 保持 antd-mobile 组件样式 */\n.antd-mobile-isolated-container .antdMobileScope [class*=\"adm-\"] {\n all: revert;\n}\n\n/* 隐藏 List.Item 的右侧箭头 */\n.antd-mobile-isolated-container .antdMobileScope .adm-list-item-content-arrow {\n display: none !important;\n}\n","import React, { useState, useMemo } from 'react'\nimport { cn } from '@/utils/cn'\nimport IndexBar from 'antd-mobile/es/components/index-bar'\nimport List from 'antd-mobile/es/components/list'\nimport 'antd-mobile/es/components/index-bar/index-bar.css'\nimport 'antd-mobile/es/components/list/list.css'\nimport { AntdMobileIsolated } from './AntdMobileIsolated'\nimport { groupByAlphabet } from '../utils/addressParser'\nimport styles from './RoomsList.module.css'\n\nexport type LocationLevel = 'country' | 'state' | 'city'\n\nexport interface LocationFilterProps {\n locations: Array<{\n id: string\n country: string\n state: string\n city: string\n }>\n onSelect?: (selection: LocationSelection) => void\n visible?: boolean\n onClose?: () => void\n pageData?: {\n allLocations?: string\n clear?: string\n country?: string\n state?: string\n city?: string\n noStudiosFound?: string\n }\n}\n\nexport interface LocationSelection {\n level: LocationLevel\n country?: string\n state?: string\n city?: string\n}\n\ninterface LocationItem {\n name: string\n code: string\n count: number\n parentCode?: string\n}\n\nexport const LocationFilter: React.FC<LocationFilterProps> = ({\n locations,\n onSelect,\n visible = false,\n onClose,\n pageData = {\n allLocations: 'All Locations',\n clear: 'Clear',\n country: 'Country',\n state: 'State',\n city: 'City',\n noStudiosFound: 'No studios found in this location',\n },\n}) => {\n const [currentLevel, setCurrentLevel] = useState<LocationLevel>('country')\n const [selectedCountry, setSelectedCountry] = useState<string>()\n const [selectedState, setSelectedState] = useState<string>()\n const [searchQuery, setSearchQuery] = useState('')\n\n // 构建位置数据\n const locationData = useMemo(() => {\n const countries = new Map<string, LocationItem>()\n const states = new Map<string, LocationItem>()\n const cities = new Map<string, LocationItem>()\n\n locations.forEach((location) => {\n const { country, state, city } = location\n\n // 统计国家\n if (country) {\n const existing = countries.get(country)\n countries.set(country, {\n name: country,\n code: country,\n count: (existing?.count || 0) + 1,\n })\n }\n\n // 统计州\n if (state) {\n const stateKey = `${country}/${state}`\n const existing = states.get(stateKey)\n states.set(stateKey, {\n name: state,\n code: stateKey,\n count: (existing?.count || 0) + 1,\n parentCode: country,\n })\n }\n\n // 统计城市\n if (city) {\n const cityKey = `${country}/${state}/${city}`\n const existing = cities.get(cityKey)\n cities.set(cityKey, {\n name: city,\n code: cityKey,\n count: (existing?.count || 0) + 1,\n parentCode: `${country}/${state}`,\n })\n }\n })\n\n return {\n countries: Array.from(countries.values()),\n states: Array.from(states.values()),\n cities: Array.from(cities.values()),\n }\n }, [locations])\n\n // 根据当前层级和选择过滤数据\n const filteredItems = useMemo(() => {\n let items: LocationItem[] = []\n\n switch (currentLevel) {\n case 'country':\n items = locationData.countries\n break\n case 'state':\n items = selectedCountry\n ? locationData.states.filter((s) => s.parentCode === selectedCountry)\n : []\n break\n case 'city':\n items = selectedState\n ? locationData.cities.filter((c) => c.parentCode === selectedState)\n : []\n break\n }\n\n // 应用搜索过滤\n if (searchQuery) {\n items = items.filter((item) =>\n item.name.toLowerCase().includes(searchQuery.toLowerCase())\n )\n }\n\n return items\n }, [currentLevel, selectedCountry, selectedState, locationData, searchQuery])\n\n // 按字母分组\n const groupedItems = useMemo(\n () => groupByAlphabet(filteredItems),\n [filteredItems]\n )\n\n // 判断是否显示字母索引条(数据少于10条时不显示)\n const showIndexBar = filteredItems.length >= 10\n\n const handleItemClick = (item: LocationItem) => {\n // 处理\"All\"选项\n if (item.code === '__all__') {\n if (currentLevel === 'country') {\n // 选择所有国家\n onSelect?.({\n level: 'country',\n })\n onClose?.()\n } else if (currentLevel === 'state') {\n // 选择该国家下的所有州\n onSelect?.({\n level: 'state',\n country: selectedCountry,\n })\n onClose?.()\n } else if (currentLevel === 'city') {\n // 选择该州下的所有城市\n const parts = selectedState?.split('/') || []\n onSelect?.({\n level: 'city',\n country: parts[0],\n state: parts[1],\n })\n onClose?.()\n }\n return\n }\n\n // 正常选择逻辑\n if (currentLevel === 'country') {\n setSelectedCountry(item.code)\n setCurrentLevel('state')\n } else if (currentLevel === 'state') {\n setSelectedState(item.code)\n setCurrentLevel('city')\n } else if (currentLevel === 'city') {\n // 选择城市,触发回调\n const parts = item.code.split('/')\n onSelect?.({\n level: 'city',\n country: parts[0],\n state: parts[1],\n city: parts[2],\n })\n onClose?.()\n }\n }\n\n const handleTabClick = (level: LocationLevel) => {\n setCurrentLevel(level)\n if (level === 'country') {\n setSelectedCountry(undefined)\n setSelectedState(undefined)\n } else if (level === 'state') {\n setSelectedState(undefined)\n }\n }\n\n if (!visible) return null\n\n return (\n <div\n style={{ height: '724px' }}\n className={cn(\n 'w-full rounded-b-[12px] absolute z-10 bottom-[-2px] left-0 bg-white border border-[#E4E5E6]',\n styles.antdMobileScope\n )}\n >\n {/* Header with tabs */}\n <div\n style={{ background: '#F8F8F8' }}\n className=\"h-[76px] font-bold text-[14px] flex flex-col\"\n >\n {/* Tabs */}\n <div className=\"flex items-center text-[16px] px-[20px] gap-[16px] py-[24px]\">\n <button\n onClick={() => handleTabClick('country')}\n className={cn(\n 'pb-[4px] transition-colors',\n currentLevel === 'country'\n ? 'text-[#080A0F] border-b-2 border-[#3ADB67]'\n : 'text-[#080A0F]'\n )}\n >\n {pageData.country}\n </button>\n <button\n onClick={() => handleTabClick('state')}\n disabled={!selectedCountry}\n className={cn(\n 'pb-[4px] transition-colors',\n currentLevel === 'state'\n ? 'text-[#080A0F] border-b-2 border-[#3ADB67]'\n : 'text-[#080A0F]',\n !selectedCountry && 'opacity-50 cursor-not-allowed'\n )}\n >\n {pageData.state}\n </button>\n <button\n onClick={() => handleTabClick('city')}\n disabled={!selectedState}\n className={cn(\n 'pb-[4px] transition-colors',\n currentLevel === 'city'\n ? 'text-[#080A0F] border-b-2 border-[#3ADB67]'\n : 'text-[#080A0F]',\n !selectedState && 'opacity-50 cursor-not-allowed'\n )}\n >\n {pageData.city}\n </button>\n </div>\n </div>\n\n {/* Content */}\n <AntdMobileIsolated style={{ height: 'calc(100% - 76px)' }}>\n {showIndexBar ? (\n <div style={{ height: '100%', display: 'flex', flexDirection: 'column' }}>\n {/* All option */}\n <List>\n <List.Item\n onClick={() => handleItemClick({ code: '__all__', name: pageData.allLocations || 'All', count: filteredItems.length })}\n key=\"__all__\"\n className='text-[16px] !pl-[24px] font-bold'\n style={{ cursor: 'pointer', borderBottom: '1px solid #E4E5E6' }}\n >\n {pageData.allLocations}\n </List.Item>\n </List>\n <IndexBar style={{ flex: 1 }}>\n {groupedItems.map((group) => {\n const { title, items } = group\n return (\n <IndexBar.Panel index={title} title={title} key={title}>\n <List>\n {items.map((item) => (\n <List.Item\n onClick={() => handleItemClick(item)}\n key={item.code}\n className='text-[16px] !pl-[24px]'\n style={{ cursor: 'pointer' }}\n >\n {item.name}\n </List.Item>\n ))}\n </List>\n </IndexBar.Panel>\n )\n })}\n </IndexBar>\n </div>\n ) : (\n <div style={{ height: '100%', overflow: 'auto' }}>\n <List>\n {/* All option */}\n <List.Item\n onClick={() => handleItemClick({ code: '__all__', name: pageData.allLocations || 'All', count: filteredItems.length })}\n key=\"__all__\"\n className='text-[16px] !pl-[24px] font-bold'\n style={{ cursor: 'pointer', borderBottom: '1px solid #E4E5E6' }}\n >\n {pageData.allLocations}\n </List.Item>\n {filteredItems.map((item) => (\n <List.Item\n onClick={() => handleItemClick(item)}\n key={item.code}\n className='text-[16px] !pl-[24px]'\n style={{ cursor: 'pointer' }}\n >\n {item.name}\n </List.Item>\n ))}\n </List>\n </div>\n )}\n </AntdMobileIsolated>\n </div>\n )\n}\n\nLocationFilter.displayName = 'LocationFilter'\n","import React, { useMemo, useState } from 'react'\nimport { cn } from '@/utils/cn'\nimport { Title } from './Title'\nimport { StudioCard } from './StudioCard'\nimport { StudioLocation, StudioMap } from './StudioMap'\nimport { useDemoRooms } from '@/api/hooks'\nimport type { DemoRoomApiClient } from '@/api/client'\nimport { LocationFilter, type LocationSelection } from './LocationFilter'\nimport type { DemoRoomPageData } from '../types/pageData'\n\nexport interface RoomsListProps extends React.HTMLAttributes<HTMLDivElement> {\n googleMapsApiKey?: string\n layoutClassName?: string\n apiClient: DemoRoomApiClient\n teamCode?: string\n brandWebsite?: string\n /**\n * Callback when user clicks \"Schedule Now\" button\n * @param demoRoomCode - The demo room code\n */\n onSchedule?: (demoRoomCode: string) => void\n /**\n * 页面可配置数据(文案、图标等)\n */\n pageData?: DemoRoomPageData\n}\n\n// 默认 pageData 配置\nconst defaultPageData: Required<DemoRoomPageData> = {\n title: 'Find a Studio Near You',\n loadingText: 'Loading demo rooms...',\n errorTitle: 'Failed to load demo rooms',\n machine: 'eufymake E1',\n locationFilter: {\n allLocations: 'All Locations',\n clear: 'Clear',\n country: 'Country',\n state: 'State',\n city: 'City',\n noStudiosFound: 'No studios found in this location',\n },\n studioCard: {\n scheduleNow: 'Schedule Now',\n available: 'Available',\n away: 'away',\n },\n map: {\n apiKeyRequired: 'Google Maps API Key is required',\n loadingMap: 'Loading map...',\n scheduleNow: 'Schedule Now',\n available: 'Available',\n },\n defaultCountry: 'United States',\n noAvailableTime: 'No available time',\n}\n\n// 默认测试数据 - 美国主要城市的工作室位置\nconst defaultStudioLocations: StudioLocation[] = [\n {\n id: '1',\n name: 'Design District Demo Room',\n address: '111 8th St, San Francisco, CA, United States',\n city: 'San Francisco',\n state: 'CA',\n zipCode: '94108',\n country: 'United States',\n lat: 37.7749,\n lng: -122.4194,\n availableTime: 'Oct 28, 2:00 PM',\n euifyMakeModel: 'euifyMake E1, euifyMake M5',\n },\n {\n id: '2',\n name: 'Brooklyn Creative Studio',\n address: '456 Broadway, Brooklyn, NY, United States',\n city: 'Brooklyn',\n state: 'NY',\n zipCode: '11211',\n country: 'United States',\n lat: 40.7128,\n lng: -74.006,\n availableTime: 'Oct 29, 3:00 PM',\n euifyMakeModel: 'euifyMake E1, euifyMake M5',\n },\n {\n id: '3',\n name: 'Austin Innovation Hub',\n address: '789 Tech Blvd, Austin, TX, United States',\n city: 'Austin',\n state: 'TX',\n zipCode: '78701',\n country: 'United States',\n lat: 30.2672,\n lng: -97.7431,\n availableTime: 'Oct 30, 1:00 PM',\n euifyMakeModel: 'euifyMake M5',\n },\n {\n id: '4',\n name: 'Seattle Maker Space',\n address: '321 Pine St, Seattle, WA, United States',\n city: 'Seattle',\n state: 'WA',\n zipCode: '98101',\n country: 'United States',\n lat: 47.6062,\n lng: -122.3321,\n availableTime: 'Oct 31, 11:00 AM',\n euifyMakeModel: 'euifyMake E1',\n },\n {\n id: '5',\n name: 'Chicago Design Center',\n address: '654 Michigan Ave, Chicago, IL, United States',\n city: 'Chicago',\n state: 'IL',\n zipCode: '60611',\n country: 'United States',\n lat: 41.8781,\n lng: -87.6298,\n availableTime: 'Nov 1, 2:30 PM',\n euifyMakeModel: 'euifyMake E1, euifyMake M5',\n },\n {\n id: '6',\n name: 'Miami Beach Studio',\n address: '987 Ocean Drive, Miami Beach, FL, United States',\n city: 'Miami Beach',\n state: 'FL',\n zipCode: '33139',\n country: 'United States',\n lat: 25.7617,\n lng: -80.1918,\n availableTime: 'Nov 2, 10:00 AM',\n euifyMakeModel: 'euifyMake M5',\n },\n {\n id: '7',\n name: 'Denver Mountain Studio',\n address: '147 16th St, Denver, CO, United States',\n city: 'Denver',\n state: 'CO',\n zipCode: '80202',\n country: 'United States',\n lat: 39.7392,\n lng: -104.9903,\n availableTime: 'Nov 3, 4:00 PM',\n euifyMakeModel: 'euifyMake E1',\n },\n {\n id: '8',\n name: 'Los Angeles Creative Lab',\n address: '258 Main St, Los Angeles, CA, United States',\n city: 'Los Angeles',\n state: 'CA',\n zipCode: '90012',\n country: 'United States',\n lat: 34.0522,\n lng: -118.2437,\n availableTime: 'Nov 4, 1:00 PM',\n euifyMakeModel: 'euifyMake E1, euifyMake M5',\n },\n]\n\nexport const RoomsList: React.FC<RoomsListProps> = ({\n googleMapsApiKey,\n className,\n apiClient,\n teamCode,\n brandWebsite,\n onSchedule,\n pageData,\n ...props\n}) => {\n // 合并用户提供的 pageData 和默认配置\n const mergedPageData = useMemo(\n () => ({\n ...defaultPageData,\n ...pageData,\n locationFilter: {\n ...defaultPageData.locationFilter,\n ...pageData?.locationFilter,\n },\n studioCard: { ...defaultPageData.studioCard, ...pageData?.studioCard },\n map: { ...defaultPageData.map, ...pageData?.map },\n }),\n [pageData]\n )\n\n // 状态管理\n const [showLocationFilter, setShowLocationFilter] = useState(false)\n const [selectedLocation, setSelectedLocation] = useState<LocationSelection>()\n const [hoveredRoomId, setHoveredRoomId] = useState<string | null>(null)\n\n // 使用 API 获取门店列表\n const {\n data: demoRooms,\n loading,\n error,\n } = useDemoRooms(apiClient, {\n team_code: teamCode,\n brand_website: brandWebsite,\n })\n console.log(demoRooms)\n\n // 将 API 返回的 DemoRoom 类型转换为 StudioLocation 类型\n const studioLocations = useMemo<StudioLocation[]>(() => {\n if (!demoRooms) return defaultStudioLocations\n\n return demoRooms.map((room) => {\n // 获取下一个可用时段\n const nextAvailableTimeslot = room?.timeslots?.find(\n (slot) => slot.status === 'available'\n )\n\n // 使用 API 返回的 location 数据,不再解析 address\n const country = room.location?.country || mergedPageData.defaultCountry\n const state = room.location?.state || ''\n const city = room.location?.city || ''\n\n // 拼接完整地址: room.address 可能只包含街道地址,需要加上 location 信息\n const addressParts = [room.address, city, state, country].filter(Boolean)\n const fullAddress = addressParts.join(', ')\n\n return {\n id: room.code,\n name: room.name,\n address: fullAddress,\n city,\n state,\n zipCode: '',\n country,\n lat: Number(room.latitude) || 0,\n lng: Number(room.longitude) || 0,\n availableTime: nextAvailableTimeslot\n ? `${nextAvailableTimeslot.start_time}`\n : mergedPageData.noAvailableTime,\n euifyMakeModel: room?.equipment?.join(', ') || '',\n }\n })\n }, [demoRooms, mergedPageData.defaultCountry, mergedPageData.noAvailableTime])\n\n // 根据选择的位置过滤门店\n const filteredStudioLocations = useMemo(() => {\n if (!selectedLocation) return studioLocations\n\n return studioLocations.filter((location) => {\n // 直接使用 location 对象中的 country, state, city 字段进行比较\n if (selectedLocation.city) {\n return (\n location.country === selectedLocation.country &&\n location.state === selectedLocation.state &&\n location.city === selectedLocation.city\n )\n }\n\n if (selectedLocation.state) {\n return (\n location.country === selectedLocation.country &&\n location.state === selectedLocation.state\n )\n }\n\n if (selectedLocation.country) {\n return location.country === selectedLocation.country\n }\n\n return true\n })\n }, [studioLocations, selectedLocation])\n\n // 获取当前选择的位置名称\n const getSelectedLocationName = () => {\n if (!selectedLocation) return mergedPageData.locationFilter.allLocations\n if (selectedLocation.city) return selectedLocation.city\n if (selectedLocation.state) return selectedLocation.state\n if (selectedLocation.country) return selectedLocation.country\n return mergedPageData.locationFilter.allLocations\n }\n\n // 处理位置选择\n const handleLocationSelect = (selection: LocationSelection) => {\n setSelectedLocation(selection)\n setShowLocationFilter(false)\n }\n\n // 清除位置过滤\n const handleClearFilter = () => {\n setSelectedLocation(undefined)\n }\n\n return (\n <div className={className} {...props}>\n {/* Section Title */}\n <Title title={mergedPageData.title}></Title>\n\n {/* Loading State */}\n {loading && (\n <div className=\"flex items-center justify-center h-[794px]\">\n <div className=\"text-center\">\n <div className=\"text-lg font-medium\">\n {mergedPageData.loadingText}\n </div>\n </div>\n </div>\n )}\n\n {/* Error State */}\n {error && (\n <div className=\"flex items-center justify-center h-[794px]\">\n <div className=\"text-center\" style={{ color: '#FF4D4D' }}>\n <div className=\"text-lg font-medium\">\n {mergedPageData.errorTitle}\n </div>\n <div className=\"text-sm mt-2\">{error.message}</div>\n </div>\n </div>\n )}\n\n {/* Content */}\n {!loading && !error && (\n <div className=\"flex h-[794px] gap-4\">\n <div\n className=\"flex-none relative w-[420px] l:!w-full\"\n style={{ height: '794px' }}\n >\n {/* Filter Header */}\n <div className={cn(\n \"mb-4 bg-white border border-[#E4E5E6] px-[20px] py-[16px]\",\n showLocationFilter ? \"rounded-t-[12px] rounded-b-none\" : \"rounded-[12px]\"\n )}>\n {/* First Row */}\n <div className=\"h-[40px] font-bold text-[16px] l:text-[14px] gap-10 l:gap-4 flex items-center\">\n <button\n className=\"flex cursor-pointer items-center hover:text-[#3ADB67] transition-colors\"\n onClick={() => setShowLocationFilter(!showLocationFilter)}\n >\n <span className=\"mr-1\">{getSelectedLocationName()}</span>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n className={cn(\n \"transition-transform duration-300\",\n showLocationFilter && \"rotate-180\"\n )}\n >\n <path\n d=\"M16.7661 9.23364C17.078 9.5455 17.0779 10.0516 16.7661 10.3635L12.5991 14.5305C12.2874 14.842 11.782 14.8418 11.4702 14.5305L7.30322 10.3635C6.99135 10.0516 6.99135 9.54552 7.30322 9.23364C7.615 8.9221 8.1203 8.92219 8.43213 9.23364L12.0347 12.8362L15.6362 9.23364C15.9481 8.92183 16.4543 8.92181 16.7661 9.23364Z\"\n fill=\"currentColor\"\n />\n </svg>\n </button>\n {selectedLocation && false && (\n <button\n onClick={handleClearFilter}\n className=\"ml-auto text-[14px] text-[#2E8B57] hover:underline\"\n >\n {mergedPageData.locationFilter.clear}\n </button>\n )}\n <div className=\"flex text-[#767880] cursor-not-allowed\">\n {mergedPageData.machine}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M16.7661 9.23364C17.078 9.5455 17.0779 10.0516 16.7661 10.3635L12.5991 14.5305C12.2874 14.842 11.782 14.8418 11.4702 14.5305L7.30322 10.3635C6.99135 10.0516 6.99135 9.54552 7.30322 9.23364C7.615 8.9221 8.1203 8.92219 8.43213 9.23364L12.0347 12.8362L15.6362 9.23364C15.9481 8.92183 16.4543 8.92181 16.7661 9.23364Z\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n </div>\n </div>\n\n {/* Room List */}\n <div\n style={{ maxHeight: '706px', overflow: 'auto' }}\n className=\"rounded-[12px] bg-white border h-[706px] border-[#E4E5E6]\"\n >\n {filteredStudioLocations.length === 0 ? (\n <div className=\"flex items-center justify-center h-[200px] text-[#767880]\">\n {mergedPageData.locationFilter.noStudiosFound}\n </div>\n ) : (\n filteredStudioLocations.map((item) => {\n return (\n <StudioCard\n key={item.id}\n code={item.id}\n name={item?.name}\n availableTime={item?.availableTime || ''}\n address={item?.address}\n city={item?.city}\n state={item?.state}\n zipCode={item?.zipCode}\n euifyMakeModel={item?.euifyMakeModel || ''}\n onSchedule={onSchedule}\n onMouseEnter={() => setHoveredRoomId(item.id)}\n pageData={{\n ...mergedPageData.studioCard,\n noAvailableTime: mergedPageData?.noAvailableTime,\n }}\n />\n )\n })\n )}\n </div>\n\n {/* Location Filter Overlay */}\n <LocationFilter\n locations={studioLocations.map((loc) => ({\n id: loc.id,\n country: loc.country,\n state: loc.state,\n city: loc.city,\n }))}\n visible={showLocationFilter}\n onSelect={handleLocationSelect}\n onClose={() => setShowLocationFilter(false)}\n pageData={mergedPageData.locationFilter}\n />\n </div>\n {googleMapsApiKey && (\n <div className={cn('flex-1 l:!hidden')}>\n <StudioMap\n googleMapsApiKey={googleMapsApiKey}\n locations={filteredStudioLocations}\n hoveredLocationId={hoveredRoomId}\n onSchedule={onSchedule}\n mapHeight=\"794px\"\n pageData={{\n ...mergedPageData.map,\n noAvailableTime: pageData?.noAvailableTime,\n }}\n />\n </div>\n )}\n </div>\n )}\n </div>\n )\n}\n\nRoomsList.displayName = 'RoomsList'\n","import type {\n ApiResponse,\n DemoRoom,\n GetDemoRoomsResponse,\n GetTimeslotsResponse,\n Questionnaire,\n CreateBookingRequest,\n Booking,\n GetBookingResponse,\n CancelBookingResponse,\n} from './types'\nimport { ApiError, ApiErrorCode } from './types'\n\nexport interface DemoRoomApiConfig {\n baseUrl: string\n apiKey: string\n locale?: string\n timeout?: number\n}\n\nexport class DemoRoomApiClient {\n private config: DemoRoomApiConfig\n\n constructor(config: DemoRoomApiConfig) {\n this.config = {\n timeout: 30000,\n ...config,\n }\n }\n\n private async request<T>(\n endpoint: string,\n options: RequestInit = {}\n ): Promise<T> {\n const url = `${this.config.baseUrl}${endpoint}`\n\n const headers: Record<string, string> = {\n 'X-API-Key': this.config.apiKey,\n 'Content-Type': 'application/json',\n ...(options.headers as Record<string, string>),\n }\n\n // 添加语言偏好\n if (this.config.locale) {\n headers['Accept-Language'] = this.config.locale\n }\n\n try {\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout)\n\n const response = await fetch(url, {\n ...options,\n headers,\n signal: controller.signal,\n })\n\n clearTimeout(timeoutId)\n\n const data: ApiResponse<T> = await response.json()\n\n if (data.code !== ApiErrorCode.SUCCESS) {\n throw new ApiError(data.code, data.message, data.request_id)\n }\n\n return data.data\n } catch (error) {\n if (error instanceof ApiError) {\n throw error\n }\n\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n throw new ApiError(ApiErrorCode.INTERNAL_ERROR, 'Request timeout')\n }\n throw new ApiError(ApiErrorCode.INTERNAL_ERROR, error.message)\n }\n\n throw new ApiError(ApiErrorCode.INTERNAL_ERROR, 'Unknown error')\n }\n }\n\n /**\n * 获取门店列表\n * @param params.team_code 团队编码\n * @param params.brand_website 品牌站点\n * @param params.locale 语言偏好(可选)\n */\n async getDemoRooms(params: {\n team_code?: string\n brand_website?: string\n locale?: string\n }): Promise<DemoRoom[]> {\n const searchParams = new URLSearchParams()\n\n if (params.team_code) {\n searchParams.append('team_code', params.team_code)\n }\n\n if (params.brand_website) {\n searchParams.append('brand_website', params.brand_website)\n }\n\n if (params.locale) {\n searchParams.append('locale', params.locale)\n }\n\n const response = await this.request<GetDemoRoomsResponse>(\n `/api/v1/store/demorooms?${searchParams.toString()}`\n )\n\n return response.demorooms\n }\n\n /**\n * 获取门店详情\n * @param code 门店编码\n * @param locale 语言偏好(可选)\n */\n async getDemoRoom(code: string, locale?: string): Promise<DemoRoom> {\n const searchParams = new URLSearchParams()\n if (locale) {\n searchParams.append('locale', locale)\n }\n\n const query = searchParams.toString()\n return this.request<DemoRoom>(\n `/api/v1/store/demorooms/${code}${query ? `?${query}` : ''}`\n )\n }\n\n /**\n * 查询门店时段\n * @param code 门店编码\n * @param params.start_date 开始日期 (YYYY-MM-DD)\n * @param params.end_date 结束日期 (YYYY-MM-DD)\n * @param params.timezone 时区(可选)\n */\n async getTimeslots(\n code: string,\n params: {\n start_date: string\n end_date: string\n timezone?: string\n }\n ): Promise<GetTimeslotsResponse> {\n const searchParams = new URLSearchParams({\n start_date: params.start_date,\n end_date: params.end_date,\n })\n\n if (params.timezone) {\n searchParams.append('timezone', params.timezone)\n }\n\n return this.request<GetTimeslotsResponse>(\n `/api/v1/store/demorooms/${code}/timeslots?${searchParams.toString()}`\n )\n }\n\n /**\n * 查询门店问卷\n * @param code 门店编码\n * @param questionnaire_id 问卷ID\n * @param locale 语言偏好(可选)\n */\n async getQuestionnaire(\n code: string,\n questionnaire_id: number,\n locale?: string\n ): Promise<Questionnaire> {\n const searchParams = new URLSearchParams()\n if (locale) {\n searchParams.append('locale', locale)\n }\n\n const query = searchParams.toString()\n return this.request<Questionnaire>(\n `/api/v1/store/demorooms/${code}/questionnaires/${questionnaire_id}${query ? `?${query}` : ''}`\n )\n }\n\n /**\n * 提交预约\n * @param data 预约数据\n */\n async createBooking(data: CreateBookingRequest): Promise<Booking> {\n return this.request<Booking>('/api/v1/store/bookings', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n }\n\n /**\n * 根据 token 获取预约详情(支持多语言)\n * @param token 预约凭证 (cancel_token)\n * @param locale 语言偏好(可选,也可以通过 Accept-Language Header)\n */\n async getBooking(token: string, locale?: string): Promise<Booking> {\n const headers: Record<string, string> = {}\n\n // 如果指定了 locale,通过 Accept-Language Header 传递\n if (locale) {\n headers['Accept-Language'] = locale\n }\n\n const response = await this.request<GetBookingResponse>(\n `/api/v1/store/bookings/${token}`,\n { headers }\n )\n return response.booking\n }\n\n /**\n * 取消预约(支持多语言邮件通知)\n * @param token 预约凭证 (cancel_token)\n * @param locale 语言偏好(可选,用于邮件通知)\n */\n async cancelBooking(token: string, locale?: string): Promise<Booking> {\n const headers: Record<string, string> = {}\n\n // 如果指定了 locale,通过 Accept-Language Header 传递\n if (locale) {\n headers['Accept-Language'] = locale\n }\n\n const response = await this.request<CancelBookingResponse>(\n `/api/v1/store/bookings/${token}/cancel`,\n {\n method: 'POST',\n headers,\n }\n )\n return response.booking\n }\n}\n\n// 创建默认客户端实例的辅助函数\nexport function createDemoRoomApi(config: DemoRoomApiConfig): DemoRoomApiClient {\n return new DemoRoomApiClient(config)\n}\n","import React, { useMemo } from 'react'\nimport { cn } from '@/utils/cn'\nimport { RoomsList } from './components/RoomsList'\nimport { createDemoRoomApi } from '@/api'\nimport type { DemoRoomApiClient } from '@/api'\nimport type { DemoRoomPageData } from './types/pageData'\n\nexport interface DemoRoomProps extends React.HTMLAttributes<HTMLDivElement> {\n layoutClassName?: string\n /**\n * 谷歌地图 API Key\n */\n googleMapsApiKey?: string\n /**\n * API 配置\n */\n apiConfig: {\n baseUrl: string\n apiKey: string\n locale?: string\n }\n /**\n * 团队编码或品牌站点(二选一)\n */\n teamCode?: string\n brandWebsite?: string\n /**\n * Callback when user clicks \"Schedule Now\" button\n * @param demoRoomCode - The demo room code\n */\n onSchedule?: (demoRoomCode: string) => void\n /**\n * 页面可配置数据(文案、图标等)\n */\n pageData?: DemoRoomPageData\n}\n\nexport const DemoRoom: React.FC<DemoRoomProps> = ({\n className,\n layoutClassName,\n googleMapsApiKey,\n apiConfig,\n teamCode,\n brandWebsite,\n onSchedule,\n pageData,\n ...props\n}) => {\n // 创建 API 客户端实例\n const apiClient = useMemo<DemoRoomApiClient>(\n () => createDemoRoomApi(apiConfig),\n [apiConfig]\n )\n\n return (\n <div className={cn(className)} {...props}>\n <RoomsList\n className={layoutClassName}\n googleMapsApiKey={googleMapsApiKey}\n apiClient={apiClient}\n teamCode={teamCode}\n brandWebsite={brandWebsite}\n onSchedule={onSchedule}\n pageData={pageData}\n ></RoomsList>\n </div>\n )\n}\n\nDemoRoom.displayName = 'DemoRoom'\n","import React, { useState } from 'react'\nimport { cn } from '@/utils/cn'\nimport type { Question } from '@/api/types'\n\nexport interface QuestionnaireFormProps {\n questions: Question[]\n pageData?: {\n submit?: string\n submitting?: string\n countryCodes?: Array<{ code?: string; country?: string }>\n agrees?: string[]\n emailDescription?: string\n }\n selectedTimeslotId?: number | null\n onSubmit?: (responses: Record<string, any>) => void\n loading?: boolean\n className?: string\n}\n\nexport const QuestionnaireForm: React.FC<QuestionnaireFormProps> = ({\n questions,\n onSubmit,\n pageData,\n selectedTimeslotId,\n loading = false,\n className,\n}) => {\n const [responses, setResponses] = useState<Record<string, any>>({})\n const [errors, setErrors] = useState<Record<string, string>>({})\n const [agreements, setAgreements] = useState<Record<number, boolean>>({})\n const [agreementError, setAgreementError] = useState<string>('')\n const [phoneCountryCodes, setPhoneCountryCodes] = useState<\n Record<string, string>\n >({})\n const [otherInputs, setOtherInputs] = useState<Record<string, string>>({})\n\n // 默认区号列表(如果 pageData 中没有提供)\n const defaultCountryCodes = [\n { code: '+1', country: 'US/CA' },\n { code: '+86', country: 'CN' },\n { code: '+44', country: 'UK' },\n { code: '+81', country: 'JP' },\n { code: '+82', country: 'KR' },\n { code: '+65', country: 'SG' },\n { code: '+852', country: 'HK' },\n { code: '+886', country: 'TW' },\n { code: '+61', country: 'AU' },\n { code: '+49', country: 'DE' },\n { code: '+33', country: 'FR' },\n ]\n\n const countryCodes = pageData?.countryCodes || defaultCountryCodes\n\n // 获取问题的唯一标识符,优先使用 id,没有则使用 key\n const getQuestionId = (question: Question): string => {\n return question.id || question.key || ''\n }\n\n const handleChange = (questionId: string, value: any) => {\n setResponses((prev) => ({\n ...prev,\n [questionId]: value,\n }))\n // Clear error when user starts typing\n if (errors[questionId]) {\n setErrors((prev) => {\n const newErrors = { ...prev }\n delete newErrors[questionId]\n return newErrors\n })\n }\n }\n\n const handleEmailBlur = (questionId: string, value: string) => {\n if (!value) return // Skip validation if empty (handled by required check)\n\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\n if (!emailRegex.test(value)) {\n setErrors((prev) => ({\n ...prev,\n [questionId]: 'Please enter a valid email address',\n }))\n }\n }\n\n const handleCountryCodeChange = (questionId: string, code: string) => {\n setPhoneCountryCodes((prev) => ({\n ...prev,\n [questionId]: code,\n }))\n }\n\n const handleCheckboxChange = (\n questionId: string,\n optionValue: string,\n checked: boolean\n ) => {\n const currentValues = responses[questionId] || []\n const newValues = checked\n ? [...currentValues, optionValue]\n : currentValues.filter((v: string) => v !== optionValue)\n\n handleChange(questionId, newValues)\n }\n\n const handleAgreementChange = (index: number, checked: boolean) => {\n setAgreements((prev) => ({\n ...prev,\n [index]: checked,\n }))\n // Clear agreement error when user checks any agreement\n if (checked && agreementError) {\n setAgreementError('')\n }\n }\n\n const handleOtherInputChange = (questionId: string, value: string) => {\n setOtherInputs((prev) => ({\n ...prev,\n [questionId]: value,\n }))\n // Update the response to use the \"other\" input value\n handleChange(questionId, value)\n }\n\n const validateForm = (): boolean => {\n const newErrors: Record<string, string> = {}\n\n questions.forEach((question) => {\n if (question.required) {\n const questionId = getQuestionId(question)\n const value = responses[questionId]\n if (!value || (Array.isArray(value) && value.length === 0)) {\n newErrors[questionId] = 'This field is required'\n }\n }\n })\n\n // Validate agreements\n const agrees = pageData?.agrees || []\n if (agrees.length > 0) {\n const allAgreed = agrees.every(\n (_: any, index: number) => agreements[index]\n )\n if (!allAgreed) {\n setAgreementError(\n 'Please agree to all terms and conditions to continue'\n )\n setErrors(newErrors)\n return false\n }\n }\n\n setErrors(newErrors)\n setAgreementError('')\n return Object.keys(newErrors).length === 0\n }\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n if (validateForm()) {\n // Separate country code and phone number for tel/phone fields\n const finalResponses = { ...responses }\n questions.forEach((question) => {\n if (question.type === 'tel' || question.type === 'phone') {\n const questionId = getQuestionId(question)\n const countryCode = phoneCountryCodes[questionId] || '+1'\n const phoneNumber = responses[questionId]\n if (phoneNumber) {\n // Store phone number without country code\n finalResponses[questionId] = phoneNumber\n // Store country code in a separate field\n // Support both 'phone_code' and 'customer_phone_code' field names\n if (\n questionId === 'phone' ||\n questionId === 'customer_phone_number'\n ) {\n finalResponses['phone_code'] = countryCode\n finalResponses['customer_phone_code'] = countryCode\n }\n }\n }\n })\n onSubmit?.(finalResponses)\n }\n }\n\n const renderQuestion = (question: Question) => {\n const questionId = getQuestionId(question)\n const hasError = !!errors[questionId]\n\n switch (question.type) {\n case 'text':\n return (\n <input\n type={question.type}\n value={responses[questionId] || ''}\n onChange={(e) => handleChange(questionId, e.target.value)}\n placeholder={question.placeholder}\n className={cn(\n 'w-full px-4 py-3 rounded-lg border text-base bg-white dark:bg-white dark:text-gray-900',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:border-transparent',\n hasError ? 'border-red-500' : 'border-[#E4E5E6]'\n )}\n />\n )\n\n case 'email':\n return (\n <input\n type=\"email\"\n value={responses[questionId] || ''}\n onChange={(e) => handleChange(questionId, e.target.value)}\n onBlur={(e) => handleEmailBlur(questionId, e.target.value)}\n placeholder={question.placeholder}\n className={cn(\n 'w-full px-4 py-3 rounded-lg border text-base bg-white dark:bg-white dark:text-gray-900',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:border-transparent',\n hasError ? 'border-red-500' : 'border-[#E4E5E6]'\n )}\n />\n )\n\n case 'tel':\n case 'phone':\n return (\n <div className=\"flex gap-2\">\n <div className=\"relative\">\n <select\n value={phoneCountryCodes[questionId] || '+1'}\n onChange={(e) =>\n handleCountryCodeChange(questionId, e.target.value)\n }\n className={cn(\n 'appearance-none pl-3 pr-8 py-3 rounded-lg border text-base',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:border-transparent',\n 'bg-white cursor-pointer w-[80px]',\n 'dark:bg-white dark:text-gray-900',\n hasError ? 'border-red-500' : 'border-[#E4E5E6]'\n )}\n >\n {countryCodes.map((item) => (\n <option key={item.code} value={item.code}>\n {item.code}\n </option>\n ))}\n </select>\n <div className=\"absolute right-2 top-1/2 -translate-y-1/2 pointer-events-none\">\n <svg\n width=\"12\"\n height=\"8\"\n viewBox=\"0 0 12 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 1.5L6 6.5L11 1.5\"\n stroke=\"#9CA3AF\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <input\n type=\"tel\"\n value={responses[questionId] || ''}\n onChange={(e) => handleChange(questionId, e.target.value)}\n placeholder={question.placeholder}\n className={cn(\n 'flex-1 px-4 py-3 rounded-lg border text-base bg-white dark:bg-white dark:text-gray-900',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:border-transparent',\n hasError ? 'border-red-500' : 'border-[#E4E5E6]'\n )}\n />\n </div>\n )\n\n case 'textarea':\n return (\n <textarea\n value={responses[questionId] || ''}\n onChange={(e) => handleChange(questionId, e.target.value)}\n placeholder={question.placeholder}\n rows={4}\n className={cn(\n 'w-full px-4 py-3 rounded-lg border text-base resize-none bg-white',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:border-transparent',\n 'dark:bg-white dark:text-gray-900',\n hasError ? 'border-red-500' : 'border-[#E4E5E6]'\n )}\n />\n )\n\n case 'radio':\n return (\n <div className=\"space-y-3\">\n {question?.options?.map((option) => (\n <label\n key={option.value || option.label}\n className=\"flex items-center gap-3 cursor-pointer group\"\n >\n <input\n type=\"radio\"\n name={questionId}\n value={option.value || option.label}\n checked={\n responses[questionId] === (option.value || option.label)\n }\n onChange={(e) => handleChange(questionId, e.target.value)}\n className=\"w-5 h-5 appearance-none cursor-pointer flex-shrink-0\"\n style={{\n backgroundImage: responses[questionId] === (option.value || option.label)\n ? 'url(https://cdn.shopify.com/s/files/1/0569/5147/2268/files/SelectBox.png?v=1769507941)'\n : 'url(https://cdn.shopify.com/s/files/1/0569/5147/2268/files/Frame_2121235232_2.png?v=1769507995)',\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n }}\n />\n <span className=\"text-base text-gray-900 dark:text-gray-900 font-bold group-hover:text-[#3ADB67] transition-colors\">\n {option.label}\n </span>\n </label>\n ))}\n </div>\n )\n\n case 'radio_with_other': {\n const isOtherSelected =\n responses[questionId] === '__other__' ||\n (responses[questionId] &&\n !question?.options?.find(\n (opt) => (opt.value || opt.label) === responses[questionId]\n ))\n\n return (\n <div className=\"space-y-3\">\n {question?.options?.map((option) => {\n const optionValue = option.value || option.label\n const isOtherOption = optionValue === '__other__'\n\n return (\n <div key={optionValue} className=\"space-y-2\">\n <label className=\"flex items-center gap-3 cursor-pointer group\">\n <input\n type=\"radio\"\n name={questionId}\n value={optionValue}\n checked={\n isOtherOption\n ? isOtherSelected\n : responses[questionId] === optionValue\n }\n onChange={(e) => {\n if (isOtherOption) {\n handleChange(questionId, '__other__')\n // Clear the other input when selecting the __other__ option\n setOtherInputs((prev) => ({\n ...prev,\n [questionId]: '',\n }))\n } else {\n handleChange(questionId, e.target.value)\n }\n }}\n className=\"w-5 h-5 appearance-none cursor-pointer flex-shrink-0\"\n style={{\n backgroundImage: (isOtherOption ? isOtherSelected : responses[questionId] === optionValue)\n ? 'url(https://cdn.shopify.com/s/files/1/0569/5147/2268/files/SelectBox.png?v=1769507941)'\n : 'url(https://cdn.shopify.com/s/files/1/0569/5147/2268/files/Frame_2121235232_2.png?v=1769507995)',\n backgroundSize: 'contain',\n backgroundRepeat: 'no-repeat',\n backgroundPosition: 'center',\n }}\n />\n <span className=\"text-base text-gray-900 dark:text-gray-900 font-bold group-hover:text-[#3ADB67] transition-colors\">\n {option.label}\n </span>\n </label>\n\n {/* Show input field when __other__ option is selected */}\n {isOtherOption && isOtherSelected && (\n <input\n type=\"text\"\n value={otherInputs[questionId] || ''}\n onChange={(e) =>\n handleOtherInputChange(questionId, e.target.value)\n }\n placeholder={question.placeholder || 'Please specify...'}\n className={cn(\n 'w-full ml-8 px-4 py-3 rounded-lg border text-base bg-white dark:bg-white dark:text-gray-900',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:border-transparent',\n hasError ? 'border-red-500' : 'border-[#E4E5E6]'\n )}\n />\n )}\n </div>\n )\n })}\n </div>\n )\n }\n\n case 'checkbox':\n return (\n <div className=\"space-y-3\">\n {question?.options?.map((option) => {\n const optionValue = option.value || option.label\n const isChecked = (responses[questionId] || []).includes(\n optionValue\n )\n\n return (\n <label\n key={optionValue}\n className=\"flex items-center gap-3 cursor-pointer group\"\n >\n <input\n type=\"checkbox\"\n checked={isChecked}\n onChange={(e) =>\n handleCheckboxChange(\n questionId,\n optionValue,\n e.target.checked\n )\n }\n className=\"w-5 h-5 text-[#3ADB67] focus:ring-[#3ADB67] focus:ring-2 rounded\"\n style={{\n accentColor: '#3ADB67',\n }}\n />\n <span className=\"text-base text-gray-900 dark:text-gray-900 font-bold group-hover:text-[#3ADB67] transition-colors\">\n {option.label}\n </span>\n </label>\n )\n })}\n </div>\n )\n\n case 'select':\n return (\n <select\n value={responses[questionId] || ''}\n onChange={(e) => handleChange(questionId, e.target.value)}\n className={cn(\n 'w-full px-4 py-3 rounded-lg border text-base bg-white dark:bg-white dark:text-gray-900',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:border-transparent',\n 'cursor-pointer',\n hasError ? 'border-red-500' : 'border-[#E4E5E6]'\n )}\n >\n {/* <option value=\"\">\n {question.placeholder || 'Please select...'}\n </option> */}\n {question.options?.map((option) => (\n <option\n key={option.value || option.label}\n value={option.value || option.label}\n >\n {option.label}\n </option>\n ))}\n </select>\n )\n\n default:\n return null\n }\n }\n\n return (\n <div className=\"pb-[80px] light\">\n {/* 仅在有问题时显示问卷表单区域 */}\n {questions && questions.length > 0 && (\n <div className=\"bg-white rounded-[12px] border border-[#E4E5E6] p-8 dark:bg-white dark:border-[#E4E5E6] l:p-4\">\n <form onSubmit={handleSubmit} className={cn('space-y-6', className)}>\n {questions.map((question) => {\n const questionId = getQuestionId(question)\n return (\n <div key={questionId} className=\"space-y-2\">\n <label className=\"block\">\n <span className=\"text-base font-bold text-gray-900 dark:text-gray-900\">\n {question.label}\n {question.required && (\n <span className=\"text-red-500 ml-1\">*</span>\n )}\n </span>\n {question.description && (\n <span className=\"block text-sm text-gray-600 dark:text-gray-600 font-bold mt-1\">\n {question.description}\n </span>\n )}\n {question.type === 'email' &&\n questionId === 'email' &&\n pageData?.emailDescription && (\n <span className=\"block text-sm text-gray-600 dark:text-gray-600 font-bold mt-1\">\n {pageData.emailDescription}\n </span>\n )}\n </label>\n\n {renderQuestion(question)}\n\n {question.hint && !errors[questionId] && (\n <p className=\"text-sm text-gray-500 dark:text-gray-500 font-bold\">\n {question.hint}\n </p>\n )}\n\n {errors[questionId] && (\n <p\n className=\"text-sm font-bold\"\n style={{ color: '#FF4D4D' }}\n >\n {errors[questionId]}\n </p>\n )}\n </div>\n )\n })}\n </form>\n </div>\n )}\n\n {!!selectedTimeslotId && (\n <div className=\"flex flex-col items-center justify-center\">\n {/* Agreements Section */}\n {pageData?.agrees && pageData.agrees.length > 0 && (\n <div className=\"space-y-4 mt-8\">\n {pageData.agrees.map((agreeContent: string, index: number) => (\n <div key={index} className=\"flex items-center gap-3\">\n <input\n type=\"checkbox\"\n id={`agreement-${index}`}\n checked={agreements[index] || false}\n onChange={(e) =>\n handleAgreementChange(index, e.target.checked)\n }\n className=\"w-5 h-5 rounded text-[#3ADB67] focus:ring-[#3ADB67] cursor-pointer flex-shrink-0\"\n style={{\n accentColor: '#3ADB67',\n }}\n />\n <label\n htmlFor={`agreement-${index}`}\n className=\"text-sm text-gray-700 dark:text-gray-700 font-bold cursor-pointer select-none flex-1 [&_a]:underline [&_a]:text-blue-600 [&_a:hover]:text-blue-700\"\n dangerouslySetInnerHTML={{ __html: agreeContent }}\n aria-label={`Agreement ${index + 1}`}\n />\n </div>\n ))}\n {agreementError && (\n <p\n className=\"text-sm font-bold mt-2\"\n style={{ color: '#FF4D4D' }}\n >\n {agreementError}\n </p>\n )}\n </div>\n )}\n <button\n type=\"submit\"\n disabled={loading}\n onClick={handleSubmit}\n className={cn(\n 'w-fit mt-6 px-6 py-4 rounded-full',\n 'bg-[#080A0F] text-white font-bold text-base',\n 'hover:bg-[#2FC257] transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-[#3ADB67] focus:ring-offset-2',\n 'disabled:opacity-50 disabled:cursor-not-allowed'\n )}\n >\n {loading\n ? pageData?.submitting || 'Submitting...'\n : pageData?.submit || 'Submit Booking'}\n </button>\n </div>\n )}\n </div>\n )\n}\n","import React, { useState, useMemo, useEffect } from 'react'\nimport dayjs from 'dayjs'\n\nimport 'dayjs/locale/zh-cn'\n\nimport { Calendar, Select, theme, ConfigProvider } from 'antd'\nimport type { Dayjs } from 'dayjs'\nimport dayLocaleData from 'dayjs/plugin/localeData'\nimport weekday from 'dayjs/plugin/weekday'\nimport weekOfYear from 'dayjs/plugin/weekOfYear'\nimport {\n useTimeslots,\n useDemoRoom,\n useQuestionnaire,\n useCreateBooking,\n} from '@/api/hooks'\nimport type { DemoRoomApiClient } from '@/api/client'\nimport type { Timeslot } from '@/api/types'\nimport { QuestionnaireForm } from './QuestionnaireForm'\n\ndayjs.extend(dayLocaleData)\ndayjs.extend(weekday)\ndayjs.extend(weekOfYear)\n\nexport interface DateTimePickerProps {\n apiClient: DemoRoomApiClient\n demoRoomCode?: string\n timezone?: string\n pageData?: {\n scheduleYourVisit?: string\n timeSlot?: string\n loadingTimeSlots?: string\n failedToLoadTimeSlots?: string\n noAvailableTimeSlots?: string\n full?: string\n spotsLeft?: string\n fillOutForm?: string\n loadingQuestionnaire?: string\n bookingFailed?: string\n submit?: string\n submitting?: string\n agrees?: string[]\n timezone?: string\n }\n locale?: string\n onBookingSuccess?: (bookingData: string) => void\n onQuestionnaireSubmit?: (responses: Record<string, any>) => void | Promise<void>\n}\n\nconst DateTimePicker: React.FC<DateTimePickerProps> = ({\n apiClient,\n demoRoomCode,\n timezone,\n pageData = {\n scheduleYourVisit: 'Schedule Your Visit',\n timeSlot: 'Time Slot',\n loadingTimeSlots: 'Loading time slots...',\n failedToLoadTimeSlots: 'Failed to load time slots',\n noAvailableTimeSlots: 'No available time slots for this date',\n full: 'Full',\n spotsLeft: 'spots left',\n fillOutForm: 'Fill out Form',\n loadingQuestionnaire: 'Loading questionnaire...',\n bookingFailed: 'Booking failed',\n },\n locale,\n onBookingSuccess,\n onQuestionnaireSubmit,\n}) => {\n const { token } = theme.useToken()\n const [selectedDate, setSelectedDate] = useState<Dayjs | null>(null)\n const [calendarValue, setCalendarValue] = useState<Dayjs>(dayjs()) // 日历显示的月份\n const [selectedTimeslotId, setSelectedTimeslotId] = useState<number | null>(\n null\n )\n const [isInitialized, setIsInitialized] = useState(false)\n\n // Use booking creation hook\n const {\n createBooking,\n loading: bookingLoading,\n error: bookingError,\n } = useCreateBooking(apiClient)\n\n // Fetch demo room details to get questionnaire_id\n const { data: demoRoom } = useDemoRoom(\n apiClient,\n demoRoomCode || '',\n locale,\n { enabled: !!demoRoomCode }\n )\n\n // Fetch questionnaire if available\n const { data: questionnaire, loading: questionnaireLoading } =\n useQuestionnaire(\n apiClient,\n demoRoomCode || '',\n demoRoom?.questionnaire_id,\n locale,\n { enabled: !!demoRoomCode && !!demoRoom?.questionnaire_id }\n )\n\n // 查询当月时段 - 使用 calendarValue 作为查询基准\n const startDate = calendarValue.startOf('month').format('YYYY-MM-DD')\n const endDate = calendarValue.endOf('month').format('YYYY-MM-DD')\n\n const {\n data: timeslotsData,\n loading: timeslotsLoading,\n error: timeslotsError,\n } = useTimeslots(\n apiClient,\n demoRoomCode || '',\n {\n start_date: startDate,\n end_date: endDate,\n timezone,\n },\n { enabled: !!demoRoomCode }\n )\n\n // 过滤出选中日期的时段\n const dayTimeslots = useMemo<Timeslot[]>(() => {\n if (!timeslotsData?.timeslots || !selectedDate) return []\n\n const selectedDateStr = selectedDate.format('YYYY-MM-DD')\n return timeslotsData.timeslots.filter((slot) => {\n const slotDate = dayjs(slot.start_time).format('YYYY-MM-DD')\n return slotDate === selectedDateStr\n })\n }, [timeslotsData, selectedDate])\n\n // 获取所有有可用时段的日期\n const availableDates = useMemo(() => {\n if (!timeslotsData?.timeslots) return new Set<string>()\n\n const dates = new Set<string>()\n timeslotsData.timeslots.forEach((slot) => {\n if (slot.status === 'available') {\n const dateStr = dayjs(slot.start_time).format('YYYY-MM-DD')\n dates.add(dateStr)\n }\n })\n return dates\n }, [timeslotsData])\n\n // 自动选择最近的可用日期和时段(初始化时)\n useEffect(() => {\n if (!timeslotsData?.timeslots || isInitialized) return\n\n const now = dayjs()\n\n // 查找所有可用时段\n const availableTimeslots = timeslotsData.timeslots.filter(\n (slot) =>\n slot.status === 'available' && dayjs(slot.start_time).isAfter(now)\n )\n\n if (availableTimeslots.length > 0) {\n // 按时间排序,找到最近的时段\n const sortedSlots = [...availableTimeslots].sort(\n (a, b) => dayjs(a.start_time).unix() - dayjs(b.start_time).unix()\n )\n\n const nearestSlot = sortedSlots[0]\n const nearestDate = dayjs(nearestSlot.start_time)\n\n // 设置选中的日期和时段\n setSelectedDate(nearestDate)\n setCalendarValue(nearestDate) // 同时更新日历视图\n setSelectedTimeslotId(nearestSlot.id)\n setIsInitialized(true)\n } else if (!selectedDate) {\n // 如果没有可用时段,默认选择今天\n setSelectedDate(now)\n setCalendarValue(now) // 同时更新日历视图\n setIsInitialized(true)\n }\n }, [timeslotsData, isInitialized, selectedDate])\n\n // 切换月份时自动选择当月第一个可预约日期\n useEffect(() => {\n if (!timeslotsData?.timeslots || !isInitialized) return\n\n // 如果选中日期在当前查看的月份内,保持选中状态,不自动切换\n if (selectedDate && selectedDate.isSame(calendarValue, 'month')) {\n return\n }\n\n // 获取当前查看月份的所有可用时段\n const currentMonthStart = calendarValue.startOf('month')\n const currentMonthEnd = calendarValue.endOf('month')\n const now = dayjs()\n\n const availableTimeslots = timeslotsData.timeslots.filter((slot) => {\n const slotDate = dayjs(slot.start_time)\n return (\n slot.status === 'available' &&\n slotDate.isAfter(now) &&\n (slotDate.isAfter(currentMonthStart) ||\n slotDate.isSame(currentMonthStart, 'day')) &&\n (slotDate.isBefore(currentMonthEnd) ||\n slotDate.isSame(currentMonthEnd, 'day'))\n )\n })\n\n if (availableTimeslots.length > 0) {\n // 按时间排序,找到当月第一个可用时段\n const sortedSlots = [...availableTimeslots].sort(\n (a, b) => dayjs(a.start_time).unix() - dayjs(b.start_time).unix()\n )\n\n const firstSlot = sortedSlots[0]\n const firstDate = dayjs(firstSlot.start_time)\n\n // 选中日期不在当前月份时,自动切换到该月第一个可用日期\n setSelectedDate(firstDate)\n setSelectedTimeslotId(firstSlot.id)\n }\n }, [calendarValue, timeslotsData, isInitialized, selectedDate])\n\n // 格式化时段显示\n const formatTimeslot = (slot: Timeslot) => {\n const start = dayjs(slot.start_time).format('h:mm A')\n const end = dayjs(slot.end_time).format('h:mm A')\n return `${start} - ${end}`\n }\n\n const wrapperStyle: React.CSSProperties = {\n background: '#fff',\n border: `1px solid ${token.colorBorderSecondary}`,\n borderRadius: 16,\n }\n\n return (\n <div>\n <div className=\"text-[48px] l:text-[32px] py-[64px] l:py-[24px] l:pt-[64px] font-bold text-center\">\n {pageData.scheduleYourVisit}\n </div>\n <div className=\"flex gap-4 l:flex-col\">\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: '#3ADB67',\n },\n components: {\n Calendar: {\n fullBg: '#fff',\n fullPanelBg: '#fff',\n itemActiveBg: '#3ADB67',\n },\n },\n }}\n >\n <div\n style={wrapperStyle}\n className=\"calendar-custom-cell w-[calc(824/1920*100vw)] min-l:max-w-[824px] l:w-full\"\n >\n <style>{`\n .calendar-custom-cell {\n border-radius: 16px !important;\n overflow: hidden;\n padding: 0 24px 16px 24px !important;\n }\n .calendar-custom-cell,\n .calendar-custom-cell *,\n .calendar-custom-cell .ant-picker-panel,\n .calendar-custom-cell .ant-picker-calendar,\n .calendar-custom-cell .ant-picker-content,\n .calendar-custom-cell .ant-picker-cell,\n .calendar-custom-cell .ant-picker-calendar-date-value {\n font-family: 'MontForAnker' !important;\n }\n .calendar-custom-cell .ant-picker-cell {\n padding: 6px !important;\n text-align: center !important;\n }\n .calendar-custom-cell .ant-picker-cell .ant-picker-cell-inner {\n margin: 0 auto !important;\n }\n .calendar-custom-cell .ant-picker-cell-inner {\n width: 38px !important;\n height: 38px !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n border-radius: 8px !important;\n border: 1px solid #E4E5E6 !important;\n aspect-ratio: 1 / 1 !important;\n }\n .calendar-custom-cell .ant-picker-calendar-date-value {\n line-height: 38px !important;\n font-weight: 700 !important;\n font-size: 14px !important;\n }\n @media (min-width: 1024px) and (max-width: 1919px) {\n .calendar-custom-cell .ant-picker-cell-inner {\n width: 54px !important;\n height: 54px !important;\n border-radius: 12px !important;\n }\n .calendar-custom-cell .ant-picker-calendar-date-value {\n line-height: 54px !important;\n font-weight: 700 !important;\n font-size: 20px !important;\n }\n }\n @media (min-width: 1920px) {\n .calendar-custom-cell .ant-picker-cell-inner {\n width: 100px !important;\n height: 100px !important;\n border-radius: 20px !important;\n }\n .calendar-custom-cell .ant-picker-calendar-date-value {\n line-height: 100px !important;\n font-weight: 700 !important;\n font-size: 20px !important;\n }\n }\n .calendar-custom-cell .ant-picker-cell-selected .ant-picker-cell-inner,\n .calendar-custom-cell .ant-picker-cell-selected:not(.ant-picker-cell-disabled) .ant-picker-cell-inner {\n background-color: #3ADB67 !important;\n color: #080A0F !important;\n border-color: #3ADB67 !important;\n }\n .calendar-custom-cell .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner {\n background-color: #3ADB67 !important;\n color: #080A0F !important;\n }\n .calendar-custom-cell .ant-picker-cell-today .ant-picker-cell-inner {\n border-color: #3ADB67 !important;\n border-radius: 8px !important;\n }\n @media (min-width: 1024px) and (max-width: 1919px) {\n .calendar-custom-cell .ant-picker-cell-today .ant-picker-cell-inner {\n border-radius: 12px !important;\n }\n }\n @media (min-width: 1920px) {\n .calendar-custom-cell .ant-picker-cell-today .ant-picker-cell-inner {\n border-radius: 20px !important;\n }\n }\n .calendar-custom-cell .ant-picker-cell-today .ant-picker-cell-inner::before {\n display: none !important;\n }\n .calendar-custom-cell .ant-picker-content {\n width: 100% !important;\n }\n .calendar-custom-cell .ant-picker-content thead tr th {\n line-height: 48px !important;\n font-weight: 700 !important;\n font-size: 18px !important;\n }\n .calendar-custom-cell .ant-picker-cell-disabled .ant-picker-cell-inner {\n background-color: #F5F5F5 !important;\n color: #767880 !important;\n border: none !important;\n cursor: not-allowed !important;\n box-shadow: none !important;\n }\n .calendar-custom-cell .ant-picker-cell-disabled:hover .ant-picker-cell-inner {\n background-color: #F5F5F5 !important;\n border: none !important;\n box-shadow: none !important;\n }\n .calendar-custom-cell .ant-picker-cell-disabled::before {\n display: none !important;\n }\n .calendar-custom-cell .ant-picker-cell-disabled::after {\n display: none !important;\n }\n `}</style>\n <Calendar\n fullscreen={false}\n value={calendarValue}\n onSelect={(date) => {\n // 点击日期时更新选中的日期和日历视图\n setSelectedDate(date)\n setCalendarValue(date)\n }}\n onPanelChange={(date) => {\n // 切换月份/年份时只更新日历视图,不更新选中日期\n setCalendarValue(date)\n }}\n disabledDate={(current) => {\n if (!current) return false\n\n // 当天日期永远不禁用\n if (current.isSame(dayjs(), 'day')) return false\n\n // 禁用比今天早的日期\n if (current.isBefore(dayjs(), 'day')) return true\n\n // 禁用没有可用时段的日期\n const dateStr = current.format('YYYY-MM-DD')\n return !availableDates.has(dateStr)\n }}\n fullCellRender={(date) => {\n const isSelected =\n selectedDate && date.isSame(selectedDate, 'day')\n const isToday = date.isSame(dayjs(), 'day')\n const dateStr = date.format('YYYY-MM-DD')\n // 当天日期永远不禁用\n const isDisabled =\n !isToday &&\n (date.isBefore(dayjs(), 'day') ||\n !availableDates.has(dateStr))\n\n return (\n <div\n className={`ant-picker-cell-inner ${\n isSelected ? 'ant-picker-cell-inner-selected' : ''\n } ${isToday ? 'ant-picker-cell-inner-today' : ''}`}\n style={{\n backgroundColor: isSelected ? '#3ADB67' : undefined,\n color: isSelected\n ? '#080A0F'\n : isDisabled\n ? '#767880'\n : undefined,\n borderColor: isSelected\n ? '#3ADB67'\n : isToday\n ? '#3ADB67'\n : undefined,\n }}\n >\n <div className=\"ant-picker-calendar-date-value\">\n {date.date()}\n </div>\n </div>\n )\n }}\n headerRender={({ value, onChange }) => {\n const year = value.year()\n const month = value.month()\n\n const yearOptions = Array.from({ length: 20 }, (_, i) => {\n const label = year - 10 + i\n return { label, value: label }\n })\n\n const monthOptions = value\n .localeData()\n .months()\n .map((label, index) => ({\n label,\n value: index,\n }))\n\n return (\n <div className=\"flex items-center justify-between py-3 l:pb-[0px]\">\n {/* Month and Year */}\n <div className=\"flex items-center gap-3\">\n <Select\n value={month}\n options={monthOptions}\n onChange={(newMonth) => {\n const now = value.clone().month(newMonth)\n onChange(now)\n }}\n variant=\"borderless\"\n className=\"text-[32px] l:text-[20px] font-bold\"\n popupMatchSelectWidth={false}\n suffixIcon={null}\n style={{\n fontWeight: 700,\n }}\n />\n <div className=\"text-[20px] text-[#E4E5E6]\">/</div>\n <Select\n value={year}\n options={yearOptions}\n onChange={(newYear) => {\n const now = value.clone().year(newYear)\n onChange(now)\n }}\n variant=\"borderless\"\n className=\"text-[32px] l:text-[20px] font-bold\"\n popupMatchSelectWidth={false}\n suffixIcon={null}\n style={{\n fontWeight: 700,\n }}\n />\n </div>\n\n {/* Navigation Buttons */}\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => {\n const newDate = value.subtract(1, 'month')\n onChange(newDate)\n }}\n className=\"w-10 h-10 flex items-center justify-center hover:bg-gray-100 rounded-lg transition-colors\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M12 16L6 10L12 4\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n <button\n onClick={() => {\n const newDate = value.add(1, 'month')\n onChange(newDate)\n }}\n className=\"w-10 h-10 flex items-center justify-center hover:bg-gray-100 rounded-lg transition-colors\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8 4L14 10L8 16\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n </div>\n )\n }}\n />\n </div>\n </ConfigProvider>\n <div className=\"bg-white p-[24px] rounded-[16px] flex-1\">\n <div className=\"flex justify-between items-center\">\n <div className=\"text-[24px] l:text-[16px]\">{pageData.timeSlot}</div>\n <div className=\"flex text-[18px] l:text-[14px] l:gap-1 gap-2\">\n <button\n onClick={() => {\n if (selectedDate) {\n const newDate = selectedDate.subtract(1, 'day')\n // 确保不会选择到过去的日期\n if (!newDate.isBefore(dayjs(), 'day')) {\n setSelectedDate(newDate)\n setCalendarValue(newDate) // 同时更新日历视图\n }\n }\n }}\n disabled={\n !selectedDate ||\n selectedDate.isSame(dayjs(), 'day') ||\n selectedDate.isBefore(dayjs(), 'day')\n }\n className=\"w-8 h-8 flex items-center justify-center hover:bg-gray-100 rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M14.2929 5.29289C14.6834 4.90237 15.3164 4.90237 15.707 5.29289C16.0975 5.68342 16.0975 6.31643 15.707 6.70696L10.414 11.9999L15.707 17.2929L15.7753 17.3691C16.0957 17.7618 16.0731 18.3408 15.707 18.707C15.3408 19.0731 14.7618 19.0957 14.3691 18.7753L14.2929 18.707L8.29289 12.707C7.90237 12.3164 7.90237 11.6834 8.29289 11.2929L14.2929 5.29289Z\"\n fill=\"#1D1D1F\"\n />\n </svg>\n </button>\n <div className=\"flex items-center justify-center\">\n {selectedDate ? selectedDate.format('MMMM D') : ''}\n </div>\n <button\n onClick={() => {\n if (selectedDate) {\n const newDate = selectedDate.add(1, 'day')\n setSelectedDate(newDate)\n setCalendarValue(newDate) // 同时更新日历视图\n }\n }}\n disabled={!selectedDate}\n className=\"w-8 h-8 flex items-center justify-center hover:bg-gray-100 rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <path\n d=\"M8.29289 5.29289C8.68342 4.90237 9.31643 4.90237 9.70696 5.29289L15.707 11.2929C16.0975 11.6834 16.0975 12.3164 15.707 12.707L9.70696 18.707C9.31643 19.0975 8.68342 19.0975 8.29289 18.707C7.90237 18.3164 7.90237 17.6834 8.29289 17.2929L13.5859 11.9999L8.29289 6.70696C7.90237 6.31643 7.90237 5.68342 8.29289 5.29289Z\"\n fill=\"#1D1D1F\"\n />\n </svg>\n </button>\n </div>\n </div>\n <div className=\"grid grid-cols-2 mt-[40px] gap-4 l:mt-[16px] l:flex l:flex-col l:gap-2\">\n {timeslotsLoading ? (\n <div className=\"col-span-2 text-center text-[#767880] py-8\">\n {pageData.loadingTimeSlots}\n </div>\n ) : timeslotsError ? (\n <div className=\"col-span-2 text-center text-red-600 py-8\">\n {pageData.failedToLoadTimeSlots}\n </div>\n ) : dayTimeslots.length === 0 ? (\n <div className=\"col-span-2 text-center text-[#767880] py-8\">\n {pageData.noAvailableTimeSlots}\n </div>\n ) : (\n dayTimeslots.map((slot) => {\n const isAvailable = slot.status === 'available'\n const isFull = slot.status === 'full'\n const isSelected = selectedTimeslotId === slot.id\n\n return (\n <button\n key={slot.id}\n disabled={!isAvailable}\n onClick={() => {\n if (isAvailable) {\n setSelectedTimeslotId(slot.id)\n }\n }}\n className={`\n rounded-[20px] w-full text-[18px] l:gap-2 l:text-[16px] flex items-center justify-center gap-4 h-[76px]\n border text-center transition-colors\n ${\n isSelected\n ? 'border-[#3ADB67] bg-[#3ADB67] cursor-pointer'\n : isAvailable\n ? 'border-[#E4E5E6] hover:border-[#3ADB67] hover:bg-[#3ADB67] cursor-pointer'\n : 'border-[#E4E5E6] bg-[#F5F5F5] text-[#767880] cursor-not-allowed'\n }\n `}\n >\n <div className=\"flex flex-col items-center\">\n <div>{formatTimeslot(slot)}</div>\n {isFull && (\n <div className=\"text-[16px] l:text-[14px] text-[#767880] mt-[2px]\">\n {pageData.full}\n </div>\n )}\n {isAvailable && !isSelected && (\n <div className=\"text-[16px] l:text-[14px] text-[#767880] mt-1\">\n {slot.capacity - slot.booked_count}{' '}\n {pageData.spotsLeft}\n </div>\n )}\n {isAvailable && isSelected && (\n <div className=\"text-[16px] l:text-[14px] mt-1\">\n {slot.capacity - slot.booked_count}{' '}\n {pageData.spotsLeft}\n </div>\n )}\n </div>\n </button>\n )\n })\n )}\n </div>\n {!timeslotsLoading && dayTimeslots?.length > 0 && (\n <div className=\"pt-[24px] text-[#6d6d6F] text-center\">\n {pageData?.timezone?.replace(\n '{{timezone}}',\n demoRoom?.timezone || timezone || ''\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Questionnaire Section */}\n {true && (\n <div className=\"mt-12\">\n {!!questionnaire?.questions?.length && (\n <div className=\"text-[48px] font-bold text-center mb-8 l:mb-[24px] l:text-[32px] l:text-left\">\n {pageData.fillOutForm}\n </div>\n )}\n\n {questionnaireLoading ? (\n <div className=\"text-center text-[#767880] py-8\">\n {pageData.loadingQuestionnaire}\n </div>\n ) : (\n <QuestionnaireForm\n questions={questionnaire?.questions || []}\n loading={bookingLoading}\n pageData={pageData}\n selectedTimeslotId={selectedTimeslotId}\n onSubmit={async (responses) => {\n // Call onQuestionnaireSubmit callback if provided (for subscription etc.)\n if (onQuestionnaireSubmit) {\n await onQuestionnaireSubmit(responses)\n }\n\n // Create booking with questionnaire responses\n try {\n // Extract customer info from questionnaire responses\n // Support both 'name'/'email'/'phone' and 'customer_name'/'customer_email'/'customer_phone_number'\n const customerName =\n responses.name || responses.customer_name || ''\n const customerEmail =\n responses.email || responses.customer_email || ''\n const customerPhone =\n responses.phone || responses.customer_phone_number || ''\n const customerPhoneCode =\n responses.phone_code ||\n responses.customer_phone_code ||\n '+1'\n if (selectedTimeslotId) {\n const result = await createBooking({\n demoroom_code: demoRoomCode!,\n timeslot_id: selectedTimeslotId!,\n questionnaire_id: questionnaire?.id,\n questionnaire_response: responses,\n customer_name: customerName,\n customer_email: customerEmail,\n customer_phone_code: customerPhoneCode,\n customer_phone_number: customerPhone,\n })\n\n // Call onBookingSuccess callback if booking was successful\n if (result && onBookingSuccess) {\n onBookingSuccess(result?.cancel_token)\n }\n }\n } catch (error) {\n console.error('Booking creation failed:', error)\n }\n }}\n />\n )}\n </div>\n )}\n\n {/* Booking Error Section */}\n {/* {bookingError && (\n <div className=\"mt-8 p-4 bg-red-50 border border-red-200 rounded-lg text-red-600 max-w-2xl mx-auto\">\n <p className=\"font-medium\">{pageData.bookingFailed}</p>\n <p className=\"text-sm mt-1\">{bookingError.message}</p>\n </div>\n )} */}\n </div>\n )\n}\n\nexport default DateTimePicker\n","import React from 'react'\nimport { cn } from '@/utils/cn'\nimport { Swiper, SwiperSlide } from 'swiper/react'\nimport { Navigation, Pagination, Autoplay } from 'swiper/modules'\nimport { useDemoRoom } from '@/api/hooks'\nimport type { DemoRoomApiClient } from '@/api/client'\n\nimport 'swiper/css'\nimport 'swiper/css/navigation'\nimport 'swiper/css/pagination'\n\nexport interface DemoRoomDetailProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * API client for fetching demo room details\n */\n apiClient?: DemoRoomApiClient\n /**\n * Demo room code to fetch details\n */\n demoRoomCode?: string\n /**\n * Locale for API request\n */\n locale?: string\n /**\n * Room title (fallback if not using API)\n */\n title?: string\n /**\n * Room description paragraphs (fallback if not using API)\n */\n descriptions?: string[]\n /**\n * Device models available (fallback if not using API)\n */\n devices?: string\n /**\n * Room address (fallback if not using API)\n */\n address?: string\n /**\n * Google Maps link\n */\n mapsLink?: string\n /**\n * Room images (fallback if not using API)\n */\n images?: string[]\n /**\n * Configurable page data\n */\n pageData?: {\n loadingText?: string\n errorTitle?: string\n openInGoogleMaps?: string\n demoRoomImages?: string\n }\n}\n\nexport const DemoRoomDetail: React.FC<DemoRoomDetailProps> = ({\n apiClient,\n demoRoomCode,\n locale,\n title: titleProp,\n descriptions: descriptionsProp,\n devices: devicesProp,\n address: addressProp,\n mapsLink,\n images: imagesProp,\n pageData = {\n loadingText: 'Loading...',\n errorTitle: 'Failed to load demo room details',\n openInGoogleMaps: 'Open in Google Maps',\n demoRoomImages: 'Demo Room Images',\n },\n className,\n ...props\n}) => {\n // Fetch demo room details if apiClient and demoRoomCode are provided\n const {\n data: demoRoom,\n loading,\n error,\n } = useDemoRoom(apiClient!, demoRoomCode || '', locale, {\n enabled: !!apiClient && !!demoRoomCode,\n })\n\n // Use API data if available, otherwise fall back to props or defaults\n const title = demoRoom?.name || titleProp || ''\n const descriptions = demoRoom?.description\n ? [demoRoom.description]\n : descriptionsProp\n const devices = demoRoom?.equipment?.join(', ') || devicesProp || ''\n const address = demoRoom?.address || addressProp || ''\n const images =\n demoRoom?.images && demoRoom.images.length > 0\n ? demoRoom.images\n : imagesProp || []\n // Generate Google Maps link\n const googleMapsLink =\n mapsLink ||\n (() => {\n if (demoRoom?.latitude && demoRoom?.longitude) {\n // Use coordinates if available\n return `https://www.google.com/maps/search/?api=1&query=${demoRoom.latitude},${demoRoom.longitude}`\n } else if (address) {\n // Fallback to address search\n return `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(address)}`\n }\n return '#'\n })()\n\n // Loading state\n if (loading && apiClient && demoRoomCode) {\n return (\n <div className={cn('w-full pb-4', className)} {...props}>\n <div className=\"grid grid-cols-2 gap-8 items-start\">\n <div className=\"space-y-6\">\n <div className=\"h-12 bg-gray-200 rounded animate-pulse\" />\n <div className=\"h-24 bg-gray-200 rounded animate-pulse\" />\n <div className=\"h-8 bg-gray-200 rounded animate-pulse\" />\n </div>\n <div className=\"h-[400px] bg-gray-200 rounded-2xl animate-pulse\" />\n </div>\n </div>\n )\n }\n\n // Error state\n if (error && apiClient && demoRoomCode) {\n return (\n <div className={cn('w-full', className)} {...props}>\n <div className=\"text-center text-red-600 py-8\">\n <p className=\"text-lg font-medium\">{pageData.errorTitle}</p>\n <p className=\"text-sm mt-2\">{error.message}</p>\n </div>\n </div>\n )\n }\n\n return (\n <div className={cn('w-full', className)} {...props}>\n <div className={cn(\n \"gap-[80px] l:gap-[40px] l:flex l:flex-col-reverse items-start py-[24px] l:pb-[64px]\",\n images.length > 0 ? \"grid grid-cols-2\" : \"flex\"\n )}>\n {/* Left Content */}\n <div className=\"space-y-6\">\n {/* Title */}\n <h1 className=\"text-[48px] l:text-[32px] font-bold text-gray-900 leading-tight\">\n {title}\n </h1>\n\n {/* Descriptions */}\n <div className=\"mt-[20px]\">\n {descriptions?.map((desc, index) => (\n <p\n key={index}\n className=\"text-base text-gray-600 leading-relaxed\"\n >\n {desc}\n </p>\n ))}\n </div>\n\n {/* Devices */}\n <div className=\"flex items-start gap-3\">\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=\"flex-shrink-0 mt-0.5\"\n >\n <path\n d=\"M14.4643 7.4929H9.65565M3.16391 18.7132H20.8171C22.0122 18.7132 22.981 17.7563 22.981 16.576L23 13.8348L22.981 6.42431C22.981 5.24396 22.0122 4.28711 20.8171 4.28711H3.16391C1.96882 4.28711 1 5.24396 1 6.42431V16.576C1 17.7563 1.96882 18.7132 3.16391 18.7132Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M5.32812 18.2325V14.4238C5.32812 13.8715 5.77584 13.4238 6.32813 13.4238H17.7925C18.3447 13.4238 18.7925 13.8715 18.7925 14.4238V18.2325\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n <span className=\"text-base text-gray-900\">{devices}</span>\n </div>\n\n {/* Address */}\n <div className=\"flex items-start gap-3\">\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=\"flex-shrink-0 mt-0.5\"\n >\n <path\n d=\"M12 2C8.13 2 5 5.13 5 9C5 14.25 12 22 12 22C12 22 19 14.25 19 9C19 5.13 15.87 2 12 2Z\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <circle\n cx=\"12\"\n cy=\"9\"\n r=\"2.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n />\n </svg>\n <div className=\"flex-1\">\n <p className=\"text-base text-gray-900\">{address}</p>\n <a\n href={googleMapsLink}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 text-sm text-blue-600 hover:text-blue-700 mt-1 underline\"\n >\n {pageData.openInGoogleMaps}\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M3 9L9 3M9 3H3M9 3V9\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </a>\n </div>\n </div>\n </div>\n\n {/* Right Images - Swiper */}\n {images.length > 0 && (\n <div className=\"relative l:w-full min-l:h-[400px] rounded-2xl overflow-hidden demo-room-swiper\">\n <style>{`\n .demo-room-swiper .swiper-pagination-bullet {\n background-color: rgba(255, 255, 255, 0.5);\n }\n .demo-room-swiper .swiper-pagination-bullet-active {\n background-color: #3ADB67 !important;\n }\n .demo-room-swiper .swiper-button-prev,\n .demo-room-swiper .swiper-button-next {\n width: 48px !important;\n height: 48px !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: center !important;\n color: transparent !important;\n }\n .demo-room-swiper .swiper-button-prev::after,\n .demo-room-swiper .swiper-button-next::after {\n display: none !important;\n content: '' !important;\n }\n .demo-room-swiper .swiper-button-prev {\n background-image: url('https://cdn.shopify.com/s/files/1/0569/5147/2268/files/Group_2121235586_572f0715-aa60-4188-9591-248f6ac53f40.svg?v=1736951731') !important;\n left: 16px !important;\n }\n .demo-room-swiper .swiper-button-next {\n background-image: url('https://cdn.shopify.com/s/files/1/0569/5147/2268/files/Group_2121235583_3071dda3-e1ee-4fb8-b488-2402c8ea8018.svg?v=1736951731') !important;\n right: 16px !important;\n }\n `}</style>\n <Swiper\n modules={[Navigation, Pagination, Autoplay]}\n spaceBetween={0}\n slidesPerView={1}\n navigation={images.length > 1}\n pagination={images.length > 1 ? { clickable: true } : false}\n autoplay={images.length > 1 ? {\n delay: 3000,\n disableOnInteraction: false,\n } : false}\n loop={images.length > 1}\n className=\"h-full rounded-2xl\"\n >\n {images.map((img, index) => (\n <SwiperSlide key={index}>\n <div className=\"relative w-full h-full bg-gray-100\">\n <img\n src={img}\n alt={`Demo room view ${index + 1}`}\n className=\"w-full h-full object-cover\"\n />\n </div>\n </SwiperSlide>\n ))}\n </Swiper>\n </div>\n )}\n </div>\n </div>\n )\n}\n\nDemoRoomDetail.displayName = 'DemoRoomDetail'\n","import React, { useMemo } from 'react'\nimport { cn } from '@/utils/cn'\nimport DateTimePicker from './components/DateTimePicker'\nimport { createDemoRoomApi } from '@/api'\nimport type { DemoRoomApiClient } from '@/api'\nimport { DemoRoomDetail } from './components/DemoRoomDetail'\nimport type { BookingFormPageData } from './types/pageData'\n\nexport interface BookingFormProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'onSubmit'\n> {\n layoutClassName?: string\n handleBookingSuccess?: (token?: string) => void\n /**\n * 问卷提交时的回调函数(可用于订阅操作等)\n */\n onQuestionnaireSubmit?: (responses: Record<string, any>) => void | Promise<void>\n /**\n * API 配置\n */\n apiConfig: {\n baseUrl: string\n apiKey: string\n locale?: string\n }\n /**\n * 门店代码(可选,可以从 URL 参数或 props 传入)\n */\n demoRoomCode?: string\n /**\n * 时区(可选)\n */\n timezone?: string\n /**\n * 页面可配置数据(文案、图标等)\n */\n pageData?: BookingFormPageData\n}\n\nexport const BookingForm: React.FC<BookingFormProps> = ({\n layoutClassName,\n className,\n apiConfig,\n demoRoomCode,\n pageData,\n timezone,\n handleBookingSuccess,\n onQuestionnaireSubmit,\n ...props\n}) => {\n // 创建 API 客户端实例\n const apiClient = useMemo<DemoRoomApiClient>(\n () => createDemoRoomApi(apiConfig),\n [apiConfig]\n )\n\n // Merge dateTimePicker and questionnaireForm pageData for DateTimePicker\n const dateTimePickerPageData = useMemo(\n () => ({\n ...pageData?.dateTimePicker,\n ...pageData?.questionnaireForm,\n }),\n [pageData?.dateTimePicker, pageData?.questionnaireForm]\n )\n\n return (\n <div>\n <div className={cn('w-full', className)} {...props}>\n {/* <BreadCrumbs\n className={layoutClassName}\n items={[{ label: 'Home', link: '/' }, { label: 'Demo Room' }]}\n /> */}\n <DemoRoomDetail\n className={cn('min-l:mt-8', layoutClassName)}\n apiClient={apiClient}\n demoRoomCode={demoRoomCode}\n locale={apiConfig.locale}\n pageData={pageData?.demoRoomDetail}\n />\n </div>\n <div className=\"bg-[#f5f5f5]\">\n <div className={className}>\n <DateTimePicker\n apiClient={apiClient}\n demoRoomCode={demoRoomCode}\n timezone={timezone}\n locale={apiConfig.locale}\n onBookingSuccess={handleBookingSuccess}\n onQuestionnaireSubmit={onQuestionnaireSubmit}\n pageData={dateTimePickerPageData}\n />\n </div>\n </div>\n </div>\n )\n}\n\nBookingForm.displayName = 'BookingForm'\n","import React, { useEffect, useState } from 'react'\nimport type { Booking } from '@/api/types'\nimport { createDemoRoomApi, type DemoRoomApiConfig } from '@/api/client'\nimport type { BookingSuccessPageData } from '../types/pageData'\n\nexport interface BookingSuccessProps {\n // 方式1: 直接传入预约数据\n bookingData?: Booking\n // 方式2: 通过 token 查询预约数据\n token?: string\n apiConfig?: DemoRoomApiConfig\n // 其他 props\n onScheduleAgain?: (demoRoomCode: string) => void\n onCancelSuccess?: (booking: Booking) => void\n className?: string\n /**\n * 页面可配置数据(文案、图标等)\n */\n pageData?: BookingSuccessPageData\n}\n\nexport const BookingSuccess: React.FC<BookingSuccessProps> = ({\n bookingData: initialBookingData,\n token,\n apiConfig,\n onScheduleAgain,\n onCancelSuccess,\n className,\n pageData = {\n yourAppointment: 'Your Appointment',\n appointmentCanceled: 'This appointment has been canceled.',\n scheduleAgain: 'Schedule again',\n location: 'Location',\n openInGoogleMaps: 'Open in Google Maps ↗',\n dateAndTime: 'Date and Time',\n event: 'Event',\n demoRoom: 'Demo Room',\n visitorInfo: 'Visitor Info',\n noPhoneProvided: 'No phone provided',\n cancelAppointment: 'Cancel Appointment',\n cancelDialog: {\n title: 'Are you sure you want to cancel?',\n description: \"You won't be able to restore the schedule.\",\n backButton: 'Back',\n confirmButton: 'Cancel Appointment',\n canceling: 'Canceling...',\n },\n cancelError: 'Failed to cancel appointment. Please try again.',\n },\n}) => {\n const [bookingData, setBookingData] = useState<Booking | null>(\n initialBookingData || null\n )\n const [loading, setLoading] = useState(false)\n const [isCancelled, setIsCancelled] = useState(false)\n const [showCancelDialog, setShowCancelDialog] = useState(false)\n const [cancelLoading, setCancelLoading] = useState(false)\n const [cancelError, setCancelError] = useState<string | null>(null)\n\n // 如果传入了 token,则通过 API 查询预约信息\n useEffect(() => {\n if (token && apiConfig && !initialBookingData) {\n const fetchBookingData = async () => {\n setLoading(true)\n try {\n const apiClient = createDemoRoomApi(apiConfig)\n const booking = await apiClient.getBooking(token, apiConfig.locale)\n setBookingData(booking)\n setIsCancelled(booking.status === 'cancelled')\n } catch (err) {\n console.error('Failed to fetch booking data:', err)\n } finally {\n setLoading(false)\n }\n }\n\n fetchBookingData()\n }\n }, [token, apiConfig, initialBookingData])\n\n // 处理取消预约\n const handleCancelAppointment = async () => {\n if (!token || !apiConfig) {\n setCancelError(\n pageData.cancelError ||\n 'Unable to cancel: Missing token or API configuration'\n )\n return\n }\n\n setCancelLoading(true)\n setCancelError(null)\n\n try {\n const apiClient = createDemoRoomApi(apiConfig)\n const cancelledBooking = await apiClient.cancelBooking(\n token,\n apiConfig.locale\n )\n\n // 更新预约数据和取消状态\n if (cancelledBooking) {\n setBookingData(cancelledBooking)\n }\n setIsCancelled(true)\n setShowCancelDialog(false)\n\n // 调用回调函数\n if (onCancelSuccess && cancelledBooking) {\n onCancelSuccess(cancelledBooking)\n }\n } catch (err) {\n console.error('Failed to cancel booking:', err)\n setCancelError(\n pageData.cancelError ||\n 'Failed to cancel appointment. Please try again.'\n )\n } finally {\n setCancelLoading(false)\n }\n }\n\n if (loading) {\n return (\n <div className={`min-h-screen py-12 px-6 ${className || ''}`}>\n <div className=\"mx-auto\">\n <div className=\"animate-pulse space-y-6\">\n <div className=\"h-8 bg-gray-200 rounded w-1/3\" />\n <div className=\"h-24 bg-gray-200 rounded\" />\n <div className=\"space-y-4\">\n <div className=\"h-20 bg-gray-200 rounded\" />\n <div className=\"h-20 bg-gray-200 rounded\" />\n <div className=\"h-20 bg-gray-200 rounded\" />\n </div>\n </div>\n </div>\n </div>\n )\n }\n\n if (!bookingData) {\n return null\n }\n\n return (\n <div className={`min-h-screen l:py-0 l:px-0 py-12 px-6 ${className || ''}`}>\n <div className=\"mx-auto\">\n {/* Header */}\n <h1 className=\"text-[40px] font-bold text-gray-900 mb-8\">\n {pageData.yourAppointment}\n </h1>\n\n {/* Status Banner */}\n {isCancelled && (\n <div className=\"bg-white rounded-[16px] l:items-start p-6 mb-4 l:gap-2 flex l:flex-col items-center justify-between\">\n <p className=\"text-base text-gray-700\">\n {pageData.appointmentCanceled}\n </p>\n {onScheduleAgain && bookingData && (\n <button\n onClick={() => onScheduleAgain(bookingData.demoroom_code)}\n className=\"px-6 py-3 bg-black text-white rounded-full hover:bg-gray-800 transition-colors whitespace-nowrap\"\n >\n {pageData.scheduleAgain}\n </button>\n )}\n </div>\n )}\n\n {/* Appointment Details */}\n <div className=\"space-y-8 bg-white px-[48px] l:px-[16px] l:py-[16px] py-[32px] rounded-[16px]\">\n {/* Location */}\n <div>\n <h2 className=\"text-lg text-gray-900 mb-3\">{pageData.location}</h2>\n <div className=\"space-y-2\">\n {bookingData.demoroom_name && (\n <p className=\"text-base text-gray-900\">\n {bookingData.demoroom_name}\n </p>\n )}\n {bookingData.address && (\n <p className=\"text-base text-gray-600\">{bookingData.address}</p>\n )}\n {bookingData.latitude && bookingData.longitude && (\n <a\n href={`https://www.google.com/maps/search/?api=1&query=${bookingData.latitude},${bookingData.longitude}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 text-base text-blue-600 hover:text-blue-700 hover:underline\"\n >\n {pageData.openInGoogleMaps}\n </a>\n )}\n </div>\n </div>\n\n {/* Date and Time */}\n <div>\n <h2 className=\"text-lg text-gray-900 mb-3\">\n {pageData.dateAndTime}\n </h2>\n <p className=\"text-base text-gray-900\">\n {bookingData.booking_date}\n {bookingData.time_slot && `, ${bookingData.time_slot}`}\n {!bookingData.time_slot &&\n bookingData.booking_time &&\n `, ${bookingData.booking_time}`}\n </p>\n </div>\n\n {/* Event (if available) */}\n {bookingData.equipment && (\n <div>\n <h2 className=\"text-lg text-gray-900 mb-3\">{pageData.event}</h2>\n <p className=\"text-base text-gray-900\">\n {Array.isArray(bookingData.equipment)\n ? bookingData.equipment.join(', ')\n : bookingData.equipment}\n </p>\n </div>\n )}\n\n {/* Machine (Demo Room Code) */}\n <div>\n <h2 className=\"text-lg text-gray-900 mb-3\">{pageData.demoRoom}</h2>\n <p className=\"text-base text-gray-900\">\n {bookingData.demoroom_code}\n </p>\n </div>\n\n {/* Visitor Info */}\n <div>\n <h2 className=\"text-lg text-gray-900 mb-3\">\n {pageData.visitorInfo}\n </h2>\n <div className=\"space-y-2\">\n <p className=\"text-base text-gray-900\">\n {bookingData.customer_name}\n </p>\n <div className=\"flex items-center gap-2 text-base text-gray-600\">\n <svg\n className=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z\"\n />\n </svg>\n {bookingData.phone_code && bookingData.phone_number ? (\n <span>\n {bookingData.phone_code} {bookingData.phone_number}\n </span>\n ) : (\n <span>{pageData.noPhoneProvided}</span>\n )}\n </div>\n <div className=\"flex items-center gap-2 text-base text-gray-600\">\n <svg\n className=\"w-5 h-5\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"\n />\n </svg>\n <span>{bookingData.customer_email}</span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Cancel Button - 只在未取消时显示 */}\n {!isCancelled && (\n <div className=\"mt-[64px]\">\n <button\n onClick={() => setShowCancelDialog(true)}\n disabled={cancelLoading}\n className=\"text-[14px] cursor-pointer w-fit rounded-full text-[#080A0F] border-2 border-[#080A0F] px-[20px] py-[10px] leading-[1] hover:bg-gray-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {pageData.cancelAppointment}\n </button>\n {cancelError && (\n <p className=\"text-sm mt-2\" style={{ color: '#FF4D4D' }}>\n {cancelError}\n </p>\n )}\n </div>\n )}\n\n {/* Cancel Confirmation Dialog */}\n {showCancelDialog && (\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 px-4\">\n <div className=\"bg-white rounded-[24px] max-w-[600px] p-8 shadow-xl relative\">\n {/* Close Button */}\n <button\n onClick={() => setShowCancelDialog(false)}\n disabled={cancelLoading}\n className=\"absolute top-6 right-[30px] w-8 h-8 flex items-center justify-center text-gray-400 hover:text-gray-600 transition-colors disabled:opacity-50\"\n aria-label=\"Close\"\n >\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 >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n\n {/* Warning Icon */}\n <div className=\"flex justify-center mb-6\">\n <div className=\"w-16 h-16 rounded-full flex items-center justify-center\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"48\"\n height=\"48\"\n viewBox=\"0 0 48 48\"\n fill=\"none\"\n >\n <circle cx=\"24\" cy=\"24\" r=\"21\" fill=\"#FFC24D\" />\n <path\n d=\"M23.9971 30.5703C25.4881 30.5704 26.6972 31.7795 26.6973 33.2705C26.6973 34.7616 25.4881 35.9706 23.9971 35.9707C22.5059 35.9707 21.2969 34.7617 21.2969 33.2705C21.297 31.7794 22.506 30.5703 23.9971 30.5703ZM23.9961 12.0176C25.2387 12.0176 26.2461 13.0249 26.2461 14.2676V26.2676C26.2461 27.5102 25.2387 28.5176 23.9961 28.5176C22.7535 28.5176 21.7461 27.5102 21.7461 26.2676V14.2676C21.7461 13.0249 22.7535 12.0176 23.9961 12.0176Z\"\n fill=\"white\"\n />\n </svg>\n </div>\n </div>\n\n {/* Title and Description */}\n <div className=\"text-center mb-8\">\n <h3 className=\"text-[18px] text-gray-900 mb-2\">\n {pageData.cancelDialog?.title}\n </h3>\n <p className=\"text-[14px] text-gray-600\">\n {pageData.cancelDialog?.description}\n </p>\n </div>\n\n {/* Action Buttons */}\n <div className=\"flex gap-3 justify-center\">\n <button\n onClick={() => setShowCancelDialog(false)}\n disabled={cancelLoading}\n className=\"px-8 py-3 border-2 border-black rounded-full text-black hover:bg-gray-50 transition-colors disabled:opacity-50 min-w-[120px]\"\n >\n {pageData.cancelDialog?.backButton}\n </button>\n <button\n onClick={handleCancelAppointment}\n disabled={cancelLoading}\n className=\"px-8 py-3 bg-black text-white rounded-full hover:bg-gray-800 transition-colors disabled:opacity-50 flex items-center gap-2 min-w-[180px] justify-center\"\n >\n {cancelLoading ? (\n <>\n <svg\n className=\"animate-spin h-5 w-5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n {pageData.cancelDialog?.canceling}\n </>\n ) : (\n pageData.cancelDialog?.confirmButton\n )}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n}\n","export const defaultTheme = {\n colors: {\n primary: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#3b82f6',\n 600: '#2563eb',\n 700: '#1d4ed8',\n 800: '#1e40af',\n 900: '#1e3a8a',\n 950: '#172554',\n },\n secondary: {\n 50: '#f8fafc',\n 100: '#f1f5f9',\n 200: '#e2e8f0',\n 300: '#cbd5e1',\n 400: '#94a3b8',\n 500: '#64748b',\n 600: '#475569',\n 700: '#334155',\n 800: '#1e293b',\n 900: '#0f172a',\n 950: '#020617',\n },\n success: {\n 50: '#f0fdf4',\n 500: '#22c55e',\n 900: '#14532d',\n },\n warning: {\n 50: '#fffbeb',\n 500: '#f59e0b',\n 900: '#78350f',\n },\n error: {\n 50: '#fef2f2',\n 500: '#ef4444',\n 900: '#7f1d1d',\n },\n },\n fontFamily: {\n sans: ['Inter', 'system-ui', 'sans-serif'],\n mono: ['Fira Code', 'monospace'],\n },\n fontSize: {\n xs: ['0.75rem', { lineHeight: '1rem' }] as const,\n sm: ['0.875rem', { lineHeight: '1.25rem' }] as const,\n base: ['1rem', { lineHeight: '1.5rem' }] as const,\n lg: ['1.125rem', { lineHeight: '1.75rem' }] as const,\n xl: ['1.25rem', { lineHeight: '1.75rem' }] as const,\n '2xl': ['1.5rem', { lineHeight: '2rem' }] as const,\n '3xl': ['1.875rem', { lineHeight: '2.25rem' }] as const,\n '4xl': ['2.25rem', { lineHeight: '2.5rem' }] as const,\n },\n spacing: {\n 0: '0',\n 1: '0.25rem',\n 2: '0.5rem',\n 3: '0.75rem',\n 4: '1rem',\n 5: '1.25rem',\n 6: '1.5rem',\n 8: '2rem',\n 10: '2.5rem',\n 12: '3rem',\n 16: '4rem',\n 20: '5rem',\n 24: '6rem',\n },\n borderRadius: {\n none: '0',\n sm: '0.125rem',\n base: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n '2xl': '1rem',\n full: '9999px',\n },\n boxShadow: {\n sm: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n base: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n },\n} as const\n\nexport type Theme = typeof defaultTheme\n\nexport type DeepPartial<T> = T extends object\n ? { [P in keyof T]?: DeepPartial<T[P]> }\n : T\n\nexport type ThemeConfig = DeepPartial<Theme>\n","import React, { createContext, useContext, useEffect, useMemo } from 'react'\nimport { defaultTheme } from '../theme-tokens'\nimport type { Theme, ThemeConfig } from '../theme-tokens'\n\ninterface ThemeContextValue {\n theme: Theme\n}\n\nconst ThemeContext = createContext<ThemeContextValue>({ theme: defaultTheme })\n\nexport const useTheme = () => useContext(ThemeContext)\n\ninterface ThemeProviderProps {\n theme?: ThemeConfig\n children: React.ReactNode\n}\n\nfunction deepMerge<T extends object>(target: T, source: Partial<T>): T {\n const result = { ...target }\n for (const key in source) {\n if (\n source[key] instanceof Object &&\n !Array.isArray(source[key]) &&\n key in target\n ) {\n result[key] = deepMerge(target[key] as any, source[key] as any)\n } else if (source[key] !== undefined) {\n result[key] = source[key] as any\n }\n }\n return result\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({\n theme: customTheme = {},\n children,\n}) => {\n const theme = useMemo(\n () => deepMerge(defaultTheme, customTheme as any),\n [customTheme]\n )\n\n useEffect(() => {\n const root = document.documentElement\n\n // Inject color variables\n Object.entries(theme.colors).forEach(([colorName, colorValues]) => {\n if (typeof colorValues === 'object') {\n Object.entries(colorValues).forEach(([shade, value]) => {\n root.style.setProperty(`--color-${colorName}-${shade}`, value)\n })\n } else {\n root.style.setProperty(`--color-${colorName}`, colorValues as string)\n }\n })\n\n // Inject font variables\n Object.entries(theme.fontFamily).forEach(([name, value]) => {\n const fontValue = Array.isArray(value) ? value.join(', ') : String(value)\n root.style.setProperty(`--font-${name}`, fontValue)\n })\n\n // Inject spacing variables\n Object.entries(theme.spacing).forEach(([key, value]) => {\n root.style.setProperty(`--spacing-${key}`, value)\n })\n\n // Inject border radius variables\n Object.entries(theme.borderRadius).forEach(([key, value]) => {\n root.style.setProperty(`--radius-${key}`, value)\n })\n }, [theme])\n\n return (\n <ThemeContext.Provider value={{ theme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n"]}
|