PageSourceSearch

https://lesvacances.co.kr/assets/NearbyPage-DR6WyERo.js

js lesvacances.co.kr collected 2026-09-25 11:26:00 UTC 48,962 bytes, 34 lines download raw bytes

vendor: 6,993 bytes, lines 1-31
1import{G as le,r as s,aS as qt,j as e,aR as oe,aQ as ve,aO as ce,bH as Yt,aN as Gt,ba as Qt,T as He,ax as pt,M as ie,m as ne,n as ae,o as re,K as Me,L as ut,O as Pe,t as V,S as Xt,D as Zt,X as mt,B as We,E as ye,bI as Jt}from"./index-DJGi9kSq.js";import{c as gt}from"./index-BdQq_4o_.js";import{c as es,u as ts}from"./index-CK27tsy9.js";import{L as B}from"./label-CFwQvD8h.js";import{g as ss}from"./nativeBridge-CGcMJpxz.js";import{u as ns,G as as,O as xt}from"./esm-Cr9d0-kM.js";import{C as yt}from"./camera-3OkfBeGR.js";import{U as Xe}from"./utensils-CVKlgSbZ.js";import{P as bt}from"./palette-BXsDHQC6.js";import{S as J}from"./shopping-bag-DG8YBACK.js";import{S as Ze}from"./sparkles-CpU9FJFO.js";import{u as rs,M as os}from"./useWeather-BcrnLq9M.js";import{R as is}from"./RestaurantDetailDialog-CBpEidaA.js";import{P as ls}from"./PlaceDetailDialog-D7sxnsq1.js";import{LandmarkDetailPage as cs}from"./LandmarkDetailPage-BqxgEWPp.js";import{A as ds}from"./arrow-left-CXrnAMCI.js";import{C as us}from"./chevron-down-UqThDaHh.js";import{S as ft}from"./star-DYHkTPu0.js";import{S as ms}from"./sliders-horizontal-BvDoYMLP.js";import{W as fs}from"./wifi-DFdWRoz3.js";import{C as hs}from"./car-CQmoWcNq.js";import{C as ps}from"./credit-card-BUwOPktO.js";import{C as qe}from"./coffee-Cd7zuqAF.js";import{U as gs}from"./users-ne_5I1JZ.js";import"./card-DF6l2gY8.js";import"./badge-h2NhMvjt.js";import"./PlaceLocationMap-CXzKCmzt.js";import"./myAccountService-C8qNArhK.js";import"./firebaseAuth-D21EO0Hc.js";import"./index.esm-BQEAOfp1.js";import"./landmarkUtils-fjXv1N19.js";import"./map-vrY30_6Z.js";import"./globe-DD3QCV97.js";import"./external-link-CfkJZ4lA.js";import"./navigation-BMhCu2F4.js";import"./clock-CkT6v99f.js";import"./wine-CRNwrUS4.js";import"./museumCityMatch-CqHbrQXn.js";import"./LandmarkMap-BIk-dzJK.js";import"./tag-rwLrxy0x.js";import"./landmark-DVIIG0WO.js";import"./ticket-1Qtj9KJ-.js";/**
2 * @license lucide-react v0.487.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const xs=[["path",{d:"M9 12h.01",key:"157uk2"}],["path",{d:"M15 12h.01",key:"1k8ypt"}],["path",{d:"M10 16c.5.3 1.2.5 2 .5s1.5-.2 2-.5",key:"1u7htd"}],["path",{d:"M19 6.3a9 9 0 0 1 1.8 3.9 2 2 0 0 1 0 3.6 9 9 0 0 1-17.6 0 2 2 0 0 1 0-3.6A9 9 0 0 1 12 3c2 0 3.5 1.1 3.5 2.5s-.9 2.5-2 2.5c-.8 0-1.5-.4-1.5-1",key:"5yv0yz"}]],ys=le("baby",xs);/**
7 * @license lucide-react v0.487.0 - ISC
8 *
9 * This source code is licensed under the ISC license.
10 * See the LICENSE file in the root directory of this source tree.
11 */const bs=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"22",x2:"18",y1:"12",y2:"12",key:"l9bcsi"}],["line",{x1:"6",x2:"2",y1:"12",y2:"12",key:"13hhkx"}],["line",{x1:"12",x2:"12",y1:"6",y2:"2",key:"10w3f3"}],["line",{x1:"12",x2:"12",y1:"22",y2:"18",key:"15g9kq"}]],vs=le("crosshair",bs);/**
12 * @license lucide-react v0.487.0 - ISC
13 *
14 * This source code is licensed under the ISC license.
15 * See the LICENSE file in the root directory of this source tree.
16 */const ws=[["path",{d:"M11.25 16.25h1.5L12 17z",key:"w7jh35"}],["path",{d:"M16 14v.5",key:"1lajdz"}],["path",{d:"M4.42 11.247A13.152 13.152 0 0 0 4 14.556C4 18.728 7.582 21 12 21s8-2.272 8-6.444a11.702 11.702 0 0 0-.493-3.309",key:"u7s9ue"}],["path",{d:"M8 14v.5",key:"1nzgdb"}],["path",{d:"M8.5 8.5c-.384 1.05-1.083 2.028-2.344 2.5-1.931.722-3.576-.297-3.656-1-.113-.994 1.177-6.53 4-7 1.923-.321 3.651.845 3.651 2.235A7.497 7.497 0 0 1 14 5.277c0-1.39 1.844-2.598 3.767-2.277 2.823.47 4.113 6.006 4 7-.08.703-1.725 1.722-3.656 1-1.261-.472-1.855-1.45-2.239-2.5",key:"v8hric"}]],js=le("dog",ws);/**
17 * @license lucide-react v0.487.0 - ISC
18 *
19 * This source code is licensed under the ISC license.
20 * See the LICENSE file in the root directory of this source tree.
21 */const Ns=[["line",{x1:"2",x2:"5",y1:"12",y2:"12",key:"bvdh0s"}],["line",{x1:"19",x2:"22",y1:"12",y2:"12",key:"1tbv5k"}],["line",{x1:"12",x2:"12",y1:"2",y2:"5",key:"11lu5j"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}],["circle",{cx:"12",cy:"12",r:"7",key:"fim9np"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],ks=le("locate-fixed",Ns);/**
22 * @license lucide-react v0.487.0 - ISC
23 *
24 * This source code is licensed under the ISC license.
25 * See the LICENSE file in the root directory of this source tree.
26 */const Ss=[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]],Cs=le("package",Ss);/**
27 * @license lucide-react v0.487.0 - ISC
28 *
29 * This source code is licensed under the ISC license.
30 * See the LICENSE file in the root directory of this source tree.
31 */const Ms=[["circle",{cx:"12",cy:"12",r:"4",key:"4exip2"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"m4.93 4.93 1.41 1.41",key:"149t6j"}],["path",{d:"m17.66 17.66 1.41 1.41",key:"ptbguv"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"m6.34 17.66-1.41 1.41",key:"1m8zz5"}],["path",{d:"m19.07 4.93-1.41 1.41",key:"1shlcs"}]],Ps=le("sun",Ms);var vt=["PageUp","PageDown"],wt=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],jt={"from-left":["Home","PageDown","ArrowDown","ArrowLeft"],"from-right":["Home","PageDown","ArrowDown","ArrowRight"],"from-bottom":["Home","PageDown","ArrowDown","ArrowLeft"],"from-top":["Home","PageDown","ArrowUp","ArrowLeft"]},de="Slider",[Ye,Ds,Is]=es(de),[Nt]=Gt(de,[Is]),[Rs,Ie]=Nt(de),kt=s.forwardRef((n,r)=>{const{name:i,min:o=0,max:c=100,step:p=1,orientation:f="horizontal",disabled:u=!1,minStepsBetweenThumbs:N=0,defaultValue:P=[o],value:b,onValueChange:d=()=>{},onValueCommit:y=()=>{},inverted:w=!1,form:D,...S}=n,k=s.useRef(new Set),j=s.useRef(0),g=f==="horizontal"?Es:$s,[x=[],M]=qt({prop:b,defaultProp:P,onChange:E=>{[...k.current][j.current]?.focus(),d(E)}}),C=s.useRef(x);function m(E){const _=Ls(x,E);R(E,_)}function h(E){R(E,j.current)}function z(){const E=C.current[j.current];x[j.current]!==E&&y(x)}function R(E,_,{commit:Q}={commit:!1}){const we=Bs(p),A=Us(Math.round((E-o)/p)*p+o,we),O=gt(A,[o,c]);M((U=[])=>{const K=zs(U,O,_);if(Fs(K,N*p)){j.current=K.indexOf(O);const X=String(K)!==String(U);return X&&Q&&y(K),X?K:U}else return U})}return e.jsx(Rs,{scope:n.__scopeSlider,name:i,disabled:u,min:o,max:c,valueIndexToChangeRef:j,thumbs:k.current,values:x,orientation:f,form:D,children:e.jsx(Ye.Provider,{scope:n.__scopeSlider,children:e.jsx(Ye.Slot,{scope:n.__scopeSlider,children:e.jsx(g,{"aria-disabled":u,"data-disabled":u?"":void 0,...S,ref:r,onPointerDown:oe(S.onPointerDown,()=>{u||(C.current=x)}),min:o,max:c,inverted:w,onSlideStart:u?void 0:m,onSlideMove:u?void 0:h,onSlideEnd:u?void 0:z,onHomeKeyDown:()=>!u&&R(o,0,{commit:!0}),onEndKeyDown:()=>!u&&R(c,x.length-1,{commit:!0}),onStepKeyDown:({event:E,direction:_})=>
31{if(!u){const A=vt.includes(E.key)||E.shiftKey&&wt.includes(E.key)?10:1,O=j.current,U=x[O],K=p*A*_;R(U+K,O,{commit:!0})}}})})})})});kt.displayName=de;var[St,Ct]=Nt(de,{startEdge:"left",endEdge:"right",size:"width",direction:1}),Es=s.forwardRef((n,r)=>{const{min:i,max:o,dir:c,inverted:p,onSlideStart:f,onSlideMove:u,onSlideEnd:N,onStepKeyDown:P,...b}=n,[d,y]=s.useState(null),w=ce(r,g=>y(g)),D=s.useRef(void 0),S=ts(c),k=S==="ltr",j=k&&!p||!k&&p;function v(g){const x=D.current||d.getBoundingClientRect(),M=[0,x.width],m=Je(M,j?[i,o]:[o,i]);return D.current=x,m(g-x.left)}return e.jsx(St,{scope:n.__scopeSlider,startEdge:j?"left":"right",endEdge:j?"right":"left",direction:j?1:-1,size:"width",children:e.jsx(Mt,{dir:S,"data-orientation":"horizontal",...b,ref:w,style:{...b.style,"--radix-slider-thumb-transform":"translateX(-50%)"},onSlideStart:g=>{const x=v(g.clientX);f?.(x)},onSlideMove:g=>{const x=v(g.clientX);u?.(x)},onSlideEnd:()=>{D.current=void 0,N?.()},onStepKeyDown:g=>{const M=jt[j?"from-left":"from-right"].includes(g.key);P?.({event:g,direction:M?-1:1})}})})}),$s=s.forwardRef((n,r)=>{const{min:i,max:o,inverted:c,onSlideStart:p,onSlideMove:f,onSlideEnd:u,onStepKeyDown:N,...P}=n,b=s.useRef(null),d=ce(r,b),y=s.useRef(void 0),w=!c;function D(S){const k=y.current||b.current.getBoundingClientRect(),j=[0,k.height],g=Je(j,w?[o,i]:[i,o]);return y.current=k,g(S-k.top)}return e.jsx(St,{scope:n.__scopeSlider,startEdge:w?"bottom":"top",endEdge:w?"top":"bottom",size:"height",direction:w?1:-1,children:e.jsx(Mt,{"data-orientation":"vertical",...P,ref:d,style:{...P.style,"--radix-slider-thumb-transform":"translateY(50%)"},onSlideStart:S=>{const k=D(S.clientY);p?.(k)},onSlideMove:S=>{const k=D(S.clientY);f?.(k)},onSlideEnd:()=>{y.current=void 0,u?.()},onStepKeyDown:S=>{const j=jt[w?"from-bottom":"from-top"].includes(S.key);N?.({event:S,direction:j?-1:1})}})})}),Mt=s.forwardRef((n,r)=>{const{__scopeSlider:i,onSlideStart:o,onSlideMove:c,onSlideEnd:p,onHomeKeyDown:f,onEndKeyDown:u,onStepKeyDown:N,...P}=n,b=Ie(de,i);return e.jsx(ve.span,{...P,ref:r,onKeyDown:oe(n.onKeyDown,d=>{d.key==="Home"?(f(d),d.preventDefault()):d.key==="End"?(u(d),d.preventDefault()):vt.concat(wt).includes(d.key)&&(N(d),d.preventDefault())}),onPointerDown:oe(n.onPointerDown,d=>{const y=d.target;y.setPointerCapture(d.pointerId),d.preventDefault(),b.thumbs.has(y)?y.focus():o(d)}),onPointerMove:oe(n.onPointerMove,d=>{d.target.hasPointerCapture(d.pointerId)&&c(d)}),onPointerUp:oe(n.onPointerUp,d=>{const y=d.target;y.hasPointerCapture(d.pointerId)&&(y.releasePointerCapture(d.pointerId),p(d))})})}),Pt="SliderTrack",Dt=s.forwardRef((n,r)=>{const{__scopeSlider:i,...o}=n,c=Ie(Pt,i);return e.jsx(ve.span,{"data-disabled":c.disabled?"":void 0,"data-orientation":c.orientation,...o,ref:r})});Dt.displayName=Pt;var Ge="SliderRange",It=s.forwardRef((n,r)=>{const{__scopeSlider:i,...o}=n,c=Ie(Ge,i),p=Ct(Ge,i),f=s.useRef(null),u=ce(r,f),N=c.values.length,P=c.values.map(y=>$t(y,c.min,c.max)),b=N>1?Math.min(...P):0,d=100-Math.max(...P);return e.jsx(ve.span,{"data-orientation":c.orientation,"data-disabled":c.disabled?"":void 0,...o,ref:u,style:{...n.style,[p.startEdge]:b+"%",[p.endEdge]:d+"%"}})});It.displayName=Ge;var Qe="SliderThumb",Rt=s.forwardRef((n,r)=>{const i=Ds(n.__scopeSlider),[o,c]=s.useState(null),p=ce(r,u=>c(u)),f=s.useMemo(()=>o?i().findIndex(u=>u.ref.current===o):-1,[i,o]);return e.jsx(_s,{...n,ref:p,index:f})}),_s=s.forwardRef((n,r)=>{const{__scopeSlider:i,index:o,name:c,...p}=n,f=Ie(Qe,i),u=Ct(Qe,i),[N,P]=s.useState(null),b=ce(r,v=>P(v)),d=N?f.form||!!N.closest("form"):!0,y=Yt(N),w=f.values[o],D=w===void 0?0:$t(w,f.min,f.max),S=A
31s(o,f.values.length),k=y?.[u.size],j=k?Os(k,D,u.direction):0;return s.useEffect(()=>{if(N)return f.thumbs.add(N),()=>{f.thumbs.delete(N)}},[N,f.thumbs]),e.jsxs("span",{style:{transform:"var(--radix-slider-thumb-transform)",position:"absolute",[u.startEdge]:`calc(${D}% + ${j}px)`},children:[e.jsx(Ye.ItemSlot,{scope:n.__scopeSlider,children:e.jsx(ve.span,{role:"slider","aria-label":n["aria-label"]||S,"aria-valuemin":f.min,"aria-valuenow":w,"aria-valuemax":f.max,"aria-orientation":f.orientation,"data-orientation":f.orientation,"data-disabled":f.disabled?"":void 0,tabIndex:f.disabled?void 0:0,...p,ref:b,style:w===void 0?{display:"none"}:n.style,onFocus:oe(n.onFocus,()=>{f.valueIndexToChangeRef.current=o})})}),d&&e.jsx(Et,{name:c??(f.name?f.name+(f.values.length>1?"[]":""):void 0),form:f.form,value:w},o)]})});Rt.displayName=Qe;var Ts="RadioBubbleInput",Et=s.forwardRef(({__scopeSlider:n,value:r,...i},o)=>{const c=s.useRef(null),p=ce(c,o),f=Qt(r);return s.useEffect(()=>{const u=c.current;if(!u)return;const N=window.HTMLInputElement.prototype,b=Object.getOwnPropertyDescriptor(N,"value").set;if(f!==r&&b){const d=new Event("input",{bubbles:!0});b.call(u,r),u.dispatchEvent(d)}},[f,r]),e.jsx(ve.input,{style:{display:"none"},...i,ref:p,defaultValue:r})});Et.displayName=Ts;function zs(n=[],r,i){const o=[...n];return o[i]=r,o.sort((c,p)=>c-p)}function $t(n,r,i){const p=100/(i-r)*(n-r);return gt(p,[0,100])}function As(n,r){return r>2?`Value ${n+1} of ${r}`:r===2?["Minimum","Maximum"][n]:void 0}function Ls(n,r){if(n.length===1)return 0;const i=n.map(c=>Math.abs(c-r)),o=Math.min(...i);return i.indexOf(o)}function Os(n,r,i){const o=n/2,p=Je([0,50],[0,o]);return(o-p(r)*i)*i}function Ks(n){return n.slice(0,-1).map((r,i)=>n[i+1]-r)}function Fs(n,r){if(r>0){const i=Ks(n);return Math.min(...i)>=r}return!0}function Je(n,r){return i=>{if(n[0]===n[1]||r[0]===r[1])return r[0];const o=(r[1]-r[0])/(n[1]-n[0]);return r[0]+o*(i-n[0])}}function Bs(n){return(String(n).split(".")[1]||"").length}function Us(n,r){const i=Math.pow(10,r);return Math.round(n*i)/i}var Vs=kt,Hs=Dt,Ws=It,qs=Rt;function Ys({className:n,defaultValue:r,value:i,min:o=0,max:c=100,...p}){const f=s.useMemo(()=>Array.isArray(i)?i:Array.isArray(r)?r:[o,c],[i,r,o,c]);return e.jsxs(Vs,{"data-slot":"slider",defaultValue:r,value:i,min:o,max:c,className:He("relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",n),...p,children:[e.jsx(Hs,{"data-slot":"slider-track",className:He("bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-4 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5"),children:e.jsx(Ws,{"data-slot":"slider-range",className:He("bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full")})}),Array.from({length:f.length},(u,N)=>e.jsx(qs,{"data-slot":"slider-thumb",className:"border-primary bg-background ring-ring/50 block size-4 shrink-0 rounded-full border shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50"},N))]})}const Gs={width:"100%",height:"100%"},Qs={lat:48.8584,lng:2.2945},Xs="AIzaSyBUF3DqYiYLr0RxO1uu3xzdvh4wlcpwU84",Zs=["places"],Js=[{id:"all",label:"전체",icon:ie,color:"gray"},{id:"landmark",label:"명소",icon:yt,color:"red"},{id:"restaurant",label:"음식점",icon:Xe,color:"amber"},{id:"museum",label:"박물관",icon:bt,color:"blue"},{id:"shopping",label:"쇼핑",icon:J,color:"pink"},{id:"service",label:"서비스",icon:Ze,color:"teal"}],en=n=>{switch(n){case"red":return"#ef4444";case"amber":return"#f59e0b";case"blue":return"#3b82f6";case"purple":return"#a855f7";case"pink":return"#ec4899";case"teal":return"#14b8a6";default:return"#6b7280"}},_t=pt.memo(({place:n,isSelected:r,onSelect:i})=>{const o=Js.find(u=>u.id===n.category),c=en(o?.color||"gray"),p=o?.icon||ie,f=s.useCallback(u=>{u.preventDefault(),u.stopPropagation(),i(n)},[i,n]);return e.jsx(xt,{position:{lat:n.lat,lng:n.lng},mapPaneName:"overlayMouseTarget",children:e.jsx("div",{className:"group absolute -translate-x-1/2 -translate-y-1/2 flex items-center justify-center",style:{width:"70px",height:"70px",zIndex:r?1e3:10,cursor:"pointer",pointerEvents:"auto",touchAction:"none"},onPointerDown:u=>u.stopPropagation(),onPointerUp:f,onMouseDown:f,onClick:f,children:e.jsx("div",{className:"relative transition-transform duration-200 group-hover:scale-110 will-change-transform",children:e.jsx("div",{className:`flex items-center justify-center rounded-full border-2 border-white shadow-lg transition-all ${r?"w-12 h-12":"w-10 h-10"}`,style:{backgroundColor:c},children:e.jsx(p,{className:`text-white ${r?"w-6 h-6":"w-5 h-5"}`})})})})})});_t.displayName="MapMarker";const Tt=pt.memo(({onPlaceSelect:n,onBoundsChanged:r,onCenterChanged:i,selectedCategory:o="all",places:c=[],center:p,selectedPlaceId:f,renderInfoCard:u})=>{const{isLoaded:N,loadError:P}=ns({id:"google-map-script",googleMapsApiKey:Xs,libraries:Zs}),[b,d]=s.useState(null),y=s.useRef(p||null),w=s.useRef(!1);s.useEffect(()=>{if(b&&p){const v=Math.abs((y.current?.lat||0)-p.lat),g=Math.abs((y.current?.lng||0)-p.lng);(v>1e-4||g>1e-4)&&(w.current||b.panTo(p),y.current=p)}w.current=!1},[b,p]);const D=s.useCallback(function(g){d(g)},[]),S=s.useCallback(function(){d(null)},[]),k=s.useCallback(()=>
31{if(!b)return;const v=b.getBounds(),g=b.getCenter();if(v&&r&&r(v),g&&i){const x={lat:g.lat(),lng:g.lng()},M=Math.abs((y.current?.lat||0)-x.lat),C=Math.abs((y.current?.lng||0)-x.lng);(M>1e-4||C>1e-4)&&(y.current=x,w.current=!0,i(x))}},[b,r,i]),j=s.useMemo(()=>o==="all"?c:c.filter(v=>v.category===o),[c,o]);return P?e.jsx("div",{className:"flex items-center justify-center p-4 bg-red-50 text-red-500 rounded-lg",children:"지도 로드 중 오류가 발생했습니다."}):N?e.jsxs("div",{className:"w-full h-full relative",style:{touchAction:"none"},children:[e.jsxs(as,{mapContainerStyle:Gs,center:p||Qs,zoom:15,onLoad:D,onUnmount:S,onIdle:k,options:{zoomControl:!1,streetViewControl:!1,mapTypeControl:!1,fullscreenControl:!1,gestureHandling:"greedy",clickableIcons:!1,keyboardShortcuts:!1,styles:[{featureType:"poi",elementType:"all",stylers:[{visibility:"off"}]}]},onClick:v=>{n&&n({id:""})},children:[j.map(v=>e.jsx(_t,{place:v,isSelected:f===v.id,onSelect:g=>{n&&n(g)}},v.id)),u&&f&&(()=>{const v=j.find(g=>g.id===f);return v?e.jsx(xt,{position:{lat:v.lat,lng:v.lng},mapPaneName:"floatPane",children:e.jsx("div",{style:{transform:"translate(-50%, -110%)",position:"relative",zIndex:2e3},onMouseDown:g=>g.stopPropagation(),onPointerDown:g=>g.stopPropagation(),onClick:g=>g.stopPropagation(),children:u(v)})}):null})()]}),e.jsx("div",{className:"pointer-events-none absolute left-1/2 top-1/2 z-20 -translate-x-1/2 -translate-y-full",children:e.jsx("div",{className:"relative flex flex-col items-center",children:e.jsx("div",{className:"flex h-6 w-6 items-center justify-center rounded-full border border-white shadow-lg",style:{backgroundColor:"#f97316"},children:e.jsx(ks,{className:"h-3 w-3 text-white"})})})})]}):e.jsx("div",{className:"flex items-center justify-center p-4",children:"지도를 불러오는 중..."})});Tt.displayName="GoogleMapInteractive";const ht=[{name:"restaurants",category:"restaurant"},{name:"museums",category:"museum"},{name:"services",category:"service"},{name:"shopping",category:"shopping"},{name:"landmarks",category:"landmark"}];function tn(){const[n,r]=s.useState([]),[i,o]=s.useState(!1),[c,p]=s.useState(null),[f,u]=s.useState(null),N=s.useCallback(async(b,d)=>{try{o(!0),p(null);const y=await ne(ae(re,"cities"));let w=null,D=1/0;if(y.forEach(x=>{const M=x.data(),C=be(b.lat,b.lng,M.lat,M.lng);C<D&&C<5e4&&(D=C,w={id:x.id,...M})}),!w){console.warn("No nearby city found within 50km"),r([]),o(!1);return}u(w);const S=w.cityCode;console.log(`Nearest city found: ${w.nameKr} (${S})`);const k=ht.map(async x=>{try{const M=Me(ae(re,x.name),ut("cityId","==",S),Pe(100));let C;try{C=await ne(M)}catch{console.warn(`Firestore Index required for ${x.name}. Falling back to client-side filtering.`);const h=Me(ae(re,x.name),Pe(300));C=await ne(h)}return C.docs.map(m=>{const h=m.data();if(h.status!=="active")return null;const z=Number(h.gpsLatitude||h.location?.gpsLat||h.latitude||h.lat||h.location?.coordinates?.lat||0),R=Number(h.gpsLongitude||h.location?.gpsLng||h.longitude||h.lng||h.location?.coordinates?.lng||0);return C.metadata.fromCache===!1&&h.cityId!==S&&h.cityKr!==w.nameKr&&be(w.lat,w.lng,z,R)>3e4?null:{...h,id:m.id,placeId:h.placeId||h.google_place_id||m.id,lat:z,lng:R,category:x.category,subCategory:typeof h.category=="string"?h.category:void 0,name:h.nameKr||h.name||"이름 없음",image:h.thumbnailUrl||h.media?.thumbnailUrl||h.thumbnailresizedUrl||h.media?.thumbnailresizedUrl||h.thumbnail_url||h.images&&h.images[0]||"https://images.unsplash.com/photo-1502602898657-3e91760cbb34?w=400",isOpen:!0,distance:be(b.lat,b.lng,z,R),address:h.address||h.location?.address,phone:h.phoneNumber||h.location?.phoneNumber||h.phone,website:h.websiteUrl||h.location?.websiteUrl||h.website,description:h.coreInfo||h.summary||h.description||h.guide?.overview}}).filter(m=>m!==null)}catch(M){return console.warn(`Collection ${x.name} fetch failed:`,M),[]}});let v=(await Promise.all(k)).flat();const g=new Set;v=v.filter(x=>g.has(x.placeId)?!1:(g.add(x.placeId),!0)),d&&(v=v.filter(x=>{const M=new google.maps.LatLng(x.lat,x.lng);return d.contains(M)})),v.sort((x,M)=>(x.distance||0)-(M.distance||0)),r(v),console.log(`Total ${v.length} places loaded for city: ${w.nameKr}`)}catch(y){console.error("Failed to fetch nearby places:",y),p(y instanceof Error?y:new Error("Unknown error"))}finally{o(!1)}},[]),P=s.useCallback(async b=>{try{o(!0),p(null);const d=await ne(ae(re,"cities"));let y=null;
31if(d.forEach(g=>{const x=g.data();x.nameKr===b&&(y={id:g.id,...x})}),!y)return console.warn(`City not found: ${b}`),r([]),o(!1),null;u(y);const w=y.cityCode,D={lat:y.lat,lng:y.lng},S=ht.map(async g=>{try{const x=Me(ae(re,g.name),ut("cityId","==",w),Pe(100));let M;try{M=await ne(x)}catch{console.warn(`Firestore Index required for ${g.name}. Falling back.`);const m=Me(ae(re,g.name),Pe(300));M=await ne(m)}return M.docs.map(C=>{const m=C.data();if(m.status!=="active")return null;const h=Number(m.gpsLatitude||m.location?.gpsLat||m.latitude||m.lat||m.location?.coordinates?.lat||0),z=Number(m.gpsLongitude||m.location?.gpsLng||m.longitude||m.lng||m.location?.coordinates?.lng||0);return m.cityId!==w&&m.cityKr!==b&&be(y.lat,y.lng,h,z)>3e4?null:{...m,id:C.id,placeId:m.placeId||m.google_place_id||C.id,lat:h,lng:z,category:g.category,subCategory:typeof m.category=="string"?m.category:void 0,name:m.nameKr||m.name||"이름 없음",image:m.thumbnailUrl||m.media?.thumbnailUrl||m.thumbnailresizedUrl||m.media?.thumbnailresizedUrl||m.thumbnail_url||m.images&&m.images[0]||"https://images.unsplash.com/photo-1502602898657-3e91760cbb34?w=400",isOpen:!0,distance:be(D.lat,D.lng,h,z),address:m.address||m.location?.address,phone:m.phoneNumber||m.location?.phoneNumber||m.phone,website:m.websiteUrl||m.location?.websiteUrl||m.website,description:m.coreInfo||m.summary||m.description||m.guide?.overview}}).filter(C=>C!==null)}catch(x){return console.warn(`Collection ${g.name} fetch failed:`,x),[]}});let j=(await Promise.all(S)).flat();const v=new Set;return j=j.filter(g=>v.has(g.placeId)?!1:(v.add(g.placeId),!0)),j.sort((g,x)=>(g.distance||0)-(x.distance||0)),r(j),console.log(`Total ${j.length} places loaded for city: ${b}`),D}catch(d){return console.error("Failed to fetch places by city:",d),p(d instanceof Error?d:new Error("Unknown error")),null}finally{o(!1)}},[]);return{places:n,loading:i,error:c,fetchNearby:N,fetchByCity:P,currentCity:f}}function be(n,r,i,o){if(!n||!r||!i||!o)return 1/0;const c=6371e3,p=(i-n)*Math.PI/180,f=(o-r)*Math.PI/180,u=Math.sin(p/2)*Math.sin(p/2)+Math.cos(n*Math.PI/180)*Math.cos(i*Math.PI/180)*Math.sin(f/2)*Math.sin(f/2),N=2*Math.atan2(Math.sqrt(u),Math.sqrt(1-u));return Math.round(c*N)}const De=[{id:"all",label:"전체",icon:ie,color:"gray"},{id:"landmark",label:"명소",icon:yt,color:"red"},{id:"restaurant",label:"음식점",icon:Xe,color:"amber"},{id:"museum",label:"박물관",icon:bt,color:"blue"},{id:"shopping",label:"쇼핑",icon:J,color:"pink"},{id:"service",label:"서비스",icon:Ze,color:"teal"}],sn=["2025-01-01","2025-04-21","2025-05-01","2025-05-08","2025-05-29","2025-06-09","2025-07-14","2025-08-15","2025-11-01","2025-11-11","2025-12-25"],nn=[{id:"1",name:"에펠탑",category:"landmark",rating:4.8,distance:1200,image:"https://images.unsplash.com/photo-1506744038136-46273834b3fb?w=400",operatingDays:["월","화","수","목","금","토","일"],closedOnHolidays:!1,isOpen:!0},{id:"2",name:"루브르 박물관",category:"museum",rating:4.7,distance:1800,image:"https://images.unsplash.com/photo-1464983953574-0892a716854b?w=400",operatingDays:["월","수","목","금","토","일"],closedOnHolidays:!0,isOpen:!1}];function Yn({onPageChange:n,previousPage:r,initialCity:i,overlayHistory:o,cityLocked:c}){const[p,f]=s.useState(i||"내 주변"),[u,N]=s.useState("all"),[P,b]=s.useState(i||""),[d,y]=s.useState("map"),[w,D]=s.useState("distance"),[S,k]=s.useState(null),[j,v]=s.useState(null),[g,x]=s.useState(!1),[M,C]=s.useTransition(),m=t=>st&&t.closedOnHolidays?!1:t.operatingDays.includes($.dayOfWeek),{places:h,loading:z,fetchNearby:R,fetchByCity:E,currentCity:_}=tn(),[Q,we]=s.useState(null),[A,O]=s.useState({lat:48.8584,lng:2.2945}),[U,K]=s.useState(!1),[X,zt]=s.useState(()=>new Date),{weatherData:T}=rs(A?.lat,A?.lng),Re=s.useRef(null),Ee=s.useRef({lat:48.8584,lng:2.2945}),[$e,At]=s.useState([]),[et,Z]=s.useState(!1),[je,_e]=s.useState(null),[tt,H]=s.useState(-1),W=je||_,ue=W&&(W.nameKr||W.name)||p,Te=s.useMemo(()=>[W?.ianaTimezone,W?.ianaTz,W?.timeZone,W?.timezone].find(a=>{if(typeof a!="string"||!a.includes("/"))return!1;try{return new Intl.DateTimeFormat("ko-KR",{timeZone:a}).format(new Date),!0}catch{return!1}}),[W]),$=s.useMemo(()=>{const a=new Intl.DateTimeFormat("ko-KR",{timeZone:Te,year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"}).formatToParts(X),l=I=>a.find(L=>L.type===I)?.value??"";return{year:l("year"),month:l("month"),day:l("day"),dayOfWeek:l("weekday").replace("요일",""),hour:Number(l("hour")||X.getHours()),minute:l("minute")||Str
31ing(X.getMinutes()).padStart(2,"0")}},[X,Te]),Lt=`${$.year}-${$.month}-${$.day}`,st=sn.includes(Lt),ee=$.hour>=3&&$.hour<12?"오전":$.hour>=12&&$.hour<19?"오후":"야간",Ot=`${ee} ${String($.hour%12||12).padStart(2,"0")}:${$.minute}`;nn.map(t=>({...t,isOpen:m(t)}));const[ze,me]=s.useState(!1),[fe,nt]=s.useState([2e3]),[te,Ae]=s.useState([]),[Ne,Le]=s.useState(0),[at,Oe]=s.useState(!0),[Ke,Fe]=s.useState([]),[ke,Se]=s.useState(!1),[q,he]=s.useState(null),[se,Kt]=s.useState(()=>{if(typeof window<"u"){const t=localStorage.getItem("nearbyPage_likedPlaces");return t?JSON.parse(t):[]}return[]});s.useEffect(()=>{const t=setInterval(()=>{zt(new Date)},6e4);return()=>clearInterval(t)},[]),s.useEffect(()=>{if(!ze)return;const t=a=>{a.key==="Escape"&&me(!1)};return document.addEventListener("keydown",t),document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",t),document.body.style.overflow=""}},[ze]),s.useEffect(()=>{(async()=>{try{const a=await Jt();At(a)}catch(a){console.error("Failed to fetch map city options:",a)}})()},[]),s.useEffect(()=>{if(!je||!_)return;(_.nameKr||_.name||"")===je.name&&_e(null)},[_,je]),s.useEffect(()=>{U||(i?(E(i).then(t=>{t&&(O(t),f(i))}),K(!0)):j?(O(j),R(j,Q),K(!0)):A&&(R(A,Q),K(!0)))},[j,R,E,Q,U,A,i]);const Be=t=>{t==="list"?(A&&R(A,null),y("list"),o?.open(()=>y("map"))):o?o.close():y("map")},rt=s.useRef(null);s.useEffect(()=>{ke&&o?.open(()=>{Se(!1),he(null)})},[ke]);const Ue=()=>{o?o.close():(Se(!1),he(null))},ot=T?.condition?.includes("비")||T?.condition?.includes("소나기")||T?.condition?.includes("천둥"),pe=$.hour,it=$.dayOfWeek,lt=pe>=3&&pe<12,ge=s.useMemo(()=>{const a={월:"monday",화:"tuesday",수:"wednesday",목:"thursday",금:"friday",토:"saturday",일:"sunday"}[it]||"";return h.filter(l=>u==="all"||l.category===u).filter(l=>{if(d==="list"||l.category!=="landmark")return!0;const I=l.grade;return I==="A"||I==="B"}).filter(l=>d==="list"?!0:(l.distance||0)<=fe[0]).filter(l=>te.length===0||l.priceRange&&te.includes(l.priceRange)).filter(l=>Ne===0||l.rating&&l.rating>=Ne).filter(l=>!ot||l.category!=="landmark"?!0:l.environment!=="outdoor").filter(l=>lt?l.subCategory!=="bar":!0).filter(l=>{const L=l.operatingHoursMap;if(!L||!a)return!0;const G=L[a];if(!G)return!0;if(G.isClosed)return!1;const xe=parseInt(G.openTime?.split(":")[0]||"0",10),dt=parseInt(G.closeTime?.split(":")[0]||"24",10);return dt<=xe?!0:pe>=xe&&pe<dt}).sort((l,I)=>w==="distance"?(l.distance||0)-(I.distance||0):(I.rating||0)-(l.rating||0))},[h,u,d,fe,te,Ne,w,ot,pe,it,lt]),F=s.useMemo(()=>{const t=P.trim().toLowerCase();return t?$e.filter(a=>a.name.toLowerCase().includes(t)||a.country.toLowerCase().includes(t)).slice(0,8):$e.slice(0,8)},[$e,P]);s.useEffect(()=>{H(-1)},[P,et]);const Ve=t=>t<1e3?`${t}m`:`${(t/1e3).toFixed(1)}km`,Ft=t=>{const a=Math.round(t/100);if(a<60)return`도보 ${a}분`;const l=Math.floor(a/60),I=a%60;return I===0?`도보 ${l}시간`:`도보 ${l}시간 ${I}분`};s.useCallback(t=>{t.target===t.currentTarget&&C(()=>{k(null)})},[]);const Bt=()=>{V.info("위치 변경 기능은 준비 중입니다")},ct=s.useCallback(t=>{const a={lat:t.lat,lng:t.lng};b(t.name),f(t.name),_e(t),Z(!1),H(-1),k(null),Ee.current=a,Re.current=null,O(a),R(a,null),V.success(`${t.name} 지도로 이동했습니다`)},[R]),Ce=s.useCallback(async()=>{try{const t=await ss({enableHighAccuracy:!1,timeout:1e4}),a={lat:t.coords.latitude,lng:t.coords.longitude};v(a),O({...a}),_e(null),Ee.current=a,V.success("현재 위치로 이동합니다"),R(a,Re.current)}catch(t){console.error("Geolocation error:",t?.code,t?.message),t?.code===1?V.error("위치 권한이 거부되었습니다. 설정에서 위치 권한을 허용해주세요."):t?.code===2||t?.message==="geolocation_unavailable"?V.error("이 기기에서 위치 서비스가 지원되지 않습니다."):V.error("현재 위치 정보를 가져올 수 없습니다.")}finally{x(!0)}},[R]);s.useEffect(()=>{i||Ce()},[Ce,i]);const Ut=t=>{const a=se.includes(t)?se.filter(l=>l!==t):[...se,t];Kt(a),localStorage.setItem("nearbyPage_likedPlaces",JSON.stringify(a)),V.success(se.includes(t)?"찜 취소되었습니다":"찜 목록에 추가되었습니다")},Vt=s.useCallback(t=>{C(()=>{k(t.id);const a=h.find(l=>l.id===t.id);a&&he(a)})},[h]),Y=s.useRef(null),Ht=s.useCallback(t=>{Re.current=t,Y.current&&clearTimeout(Y.current),Y.current=setTimeout(()=>{we(t)},200)},[]),Wt=s.useCallback(t=>{Ee.current=t,Y.current&&clearTimeout(Y.current),Y.current=setTimeout(()=>{O(t)},200)},[]);return s.useEffect(()=>()=>{Y.current&&clearTimeout(Y.current)},[]),(()=>{const t=[],a=$.dayOfWeek==="토"||$.dayOfWeek==="일";return ee==="오전"?a?t.push({id:"morning-weekend",title:"지금 여유롭게 즐길 수 있는 브런치 & 베이커리",icon:qe,color:"#f59e0b",filter:{category:"cafe",distance:1e3}}):t.push({id:"morning-weekday",title:"활기찬 아침을 시작하는 베이커리 카페",icon:qe,color:"#3b82f6",filter:{category:"cafe",distance:500}}):ee==="오후"?t.push({id:"afternoon-cafe",title:"현재 위치에서 1km 이내 인기 카페",icon:qe,color:"#3b82f6",filter:{category:"cafe",distance:1e3,minRating:4.5}}):t.push({id:"night-rooftop",title:"야경을 즐길 수 있는 루프탑 바",icon:Ze,color:"#8b5cf6",filter:{category:"restaurant",minRating:4.5}}),ee==="오전"?a?t.push({id:"morning-shopping",title:"여유로운 주말에 방문하기 좋은 핫한 플리마켓 & 편집숍",icon:J,color:"#ec4899",filter:{category:"shopping",distance:2e3}}
31):t.push({id:"morning-shopping-weekday",title:"아침 일찍 여는 빈티지샵 & 편집숍",icon:J,color:"#ec4899",filter:{category:"shopping",distance:1500}}):ee==="오후"?t.push({id:"afternoon-shopping",title:"현재 위치에서 1km 이내 트렌디한 로드숍 & 복합 쇼핑몰",icon:J,color:"#ec4899",filter:{category:"shopping",distance:1e3}}):ee==="야간"&&t.push({id:"night-shopping",title:"밤의 낭만을 즐기는 활기 넘치는 야시장 & 심야 쇼핑 스팟",icon:J,color:"#ec4899",filter:{category:"shopping",distance:1500}}),t.push({id:"outdoor-sunny",title:"오늘의 날씨(☀️)와 어울리는 야외 명소",icon:Ps,color:"#f59e0b",filter:{category:"tourist",distance:2e3}}),t.push({id:"hidden-gems",title:"도보 10분 거리의 숨겨진 지역 맛집",icon:Xe,color:"#ef4444",filter:{category:"restaurant",distance:1e3,minRating:4.3}}),t.push({id:"family-friendly",title:"가족 여행객을 위한 주변 공원 및 체험 공간",icon:gs,color:"#14b8a6",filter:{category:"tourist",distance:1500}}),t})(),e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"fixed inset-0 bg-white flex flex-col overflow-hidden lg:pb-0",children:[e.jsxs("div",{className:"z-30 bg-white border-b border-gray-200 shadow-sm flex-shrink-0",children:[e.jsxs("div",{className:`flex items-center ${c?"relative justify-start":"justify-between"} px-4 py-3 border-b border-gray-100`,children:[e.jsx("button",{onMouseDown:t=>{t.preventDefault(),t.stopPropagation(),c?window.history.back():n?.("home")},className:"p-2 hover:bg-gray-100 rounded-full transition-colors duration-200","aria-label":"뒤로가기",children:e.jsx(ds,{className:"w-5 h-5 text-gray-700"})}),c?e.jsxs("div",{className:"absolute left-1/2 -translate-x-1/2 flex items-center gap-2 px-4 py-2 pointer-events-none",children:[e.jsx(ie,{className:"w-5 h-5 text-blue-500"}),e.jsx("span",{className:"text-gray-900",children:ue})]}):e.jsxs("button",{onMouseDown:t=>{t.preventDefault(),t.stopPropagation(),Bt()},className:"flex items-center gap-2 px-4 py-2 hover:bg-gray-100 rounded-lg transition-colors duration-200",children:[e.jsx(ie,{className:"w-5 h-5 text-blue-500"}),e.jsx("span",{className:"text-gray-900",children:ue}),e.jsx(us,{className:"w-4 h-4 text-gray-500"})]}),!c&&e.jsx("div",{className:"w-9"})]}),e.jsx("div",{className:"px-4 py-2 bg-blue-50 border-b border-blue-100",children:e.jsxs("div",{className:"flex items-center justify-center gap-2 text-sm text-gray-700",children:[T&&e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 bg-white rounded-full text-xs font-medium text-gray-800 border border-gray-200",children:[T.condition==="맑음"||T.condition==="대체로 맑음"?"☀️":T.condition==="흐림"||T.condition==="구름 조금"?"☁️":T.condition?.includes("비")||T.condition?.includes("소나기")?"🌧️":T.condition?.includes("눈")?"❄️":"⛅",T.condition," ",T.temp,"°"]}),e.jsxs("span",{children:[$.month,"월 ",$.day,"일 (",$.dayOfWeek,") ",Ot]}),st&&e.jsx("span",{className:"px-2 py-0.5 bg-red-100 text-red-600 rounded text-xs",children:"공휴일"})]})}),!c&&e.jsx("div",{className:"px-4 py-3",children:e.jsxs("div",{className:"relative",children:[e.jsx(Xt,{className:"absolute left-3 top-1/2 -translate-y-1/2 w-5 h-5 text-gray-400"}),e.jsx(Zt,{type:"text",value:P,onChange:t=>{b(t.target.value),Z(!0),H(0)},onFocus:()=>{Z(!0),H(0)},onBlur:()=>{window.setTimeout(()=>Z(!1),120)},onKeyDown:t=>{if(t.key==="ArrowDown"&&F.length>0){t.preventDefault(),Z(!0),H(a=>a<0?0:(a+1)%F.length);return}if(t.key==="ArrowUp"&&F.length>0){t.preventDefault(),Z(!0),H(a=>a<0?F.length-1:(a-1+F.length)%F.length);return}if(t.key==="Escape"){Z(!1),H(-1);return}t.key==="Enter"&&F.length>0&&(t.preventDefault(),ct(F[tt]||F[0]))},placeholder:ue?`${ue} · 다른 도시 검색`:"도시 검색",className:"pl-10 bg-gray-50 border-gray-200"}),et&&F.length>0&&e.jsx("div",{className:"absolute top-full left-0 right-0 mt-2 bg-white border border-gray-200 rounded-xl shadow-lg overflow-hidden z-30",children:F.map((t,a)=>e.jsx("button",{type:"button",onMouseDown:l=>{l.preventDefault(),ct(t)},onMouseEnter:()=>H(a),className:`w-full px-3 py-2 text-left transition-colors border-b border-gray-50 last:border-b-0 ${tt===a?"bg-blue-50":"hover:bg-gray-50"}`,children:e.jsx("span",{className:"text-sm text-gray-900",children:t.name})},`${t.id}-${t.cityCode}`))})]})}),!c&&!z&&g&&ge.length===0&&e.jsxs("div",{className:"mx-4 mb-3 px-3 py-2.5 rounded-xl bg-amber-50 border border-amber-200",children:[e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-base leading-none mt-0.5",children:"✈️"}),e.jsxs("p",{className:"text-xs text-amber-800 leading-relaxed",children:["레바캉스는 ",e.jsx("b",{children:"해외 여행 도시"}),"를 안내한다. 현재 위치(",ue,")는 서비스 지역이 아니다."]})]}),e.jsx("button",{type:"button",onClick:()=>n?.("home"),className:"mt-2.5 w-full py-2 rounded-lg bg-white border border-amber-300 text-amber-800 text-xs font-medium hover:bg-amber-100 transition-colors",children:"홈으로 돌아가기"})]}),e.jsx("div",{className:`px-4 pb-3 overflow-x-auto ${c?"pt-3":""}`,children:e.jsx("div",{className:"flex gap-2 pb-2",children:De.map(t=>{const a=t.icon,l=u===t.id;return e.jsxs("button",{onMouseDown:I=>{I.preventDefault(),I.stopPropagation(),N(t.id)},className:`
32                    flex items-center gap-2 px-4 py-2 rounded-full whitespace-nowrap transition-all duration-200
33                    ${l?`bg-${t.color}-500 text-white shadow-md`:"bg-gray-100 text-gray-700 hover:bg-gray-200"}
34                  `,style:l?{backgroundColor:t.color==="gray"?"#6b7280":t.color==="red"?"#ef4444":t.color==="amber"?"#f59e0b":t.color==="blue"?"#3b82f6":t.color==="purple"?"#a855f7":t.color==="pink"?"#ec4899":t.color==="teal"?"#14b8a6":"#6b7280"}:void 0,children:[a&&e.jsx(a,{className:"w-4 h-4"}),e.jsx("span",{className:"text-sm",children:t.label})]},t.id)})})}),e.jsx("div",{className:"px-4 pb-2",children:e.jsx("p",{className:"text-xs text-blue-600",children:"💡 실시간 지능형 추천"})})]}),d==="map"&&e.jsxs("div",{className:"flex-1 relative bg-gray-50 z-0",style:{paddingBottom:"58px"},children:[z&&e.jsx("div",{className:"absolute inset-0 flex flex-col items-center justify-center gap-3 bg-white/50 backdrop-blur-sm z-10",children:e.jsx("div",{className:"w-10 h-10 border-4 border-blue-500 border-t-transparent roun
34ded-full animate-spin"})}),e.jsxs("div",{className:"w-full h-full relative",onMouseDown:t=>{t.target===t.currentTarget&&k(null)},children:[e.jsx(Tt,{places:ge,selectedCategory:u,onPlaceSelect:Vt,onBoundsChanged:Ht,onCenterChanged:Wt,center:A||void 0,selectedPlaceId:S,renderInfoCard:t=>{const a=De.find(L=>L.id===t.category),l=h.find(L=>L.id===t.id),I=l?.image||l?.images?.[0]||"https://images.unsplash.com/photo-1414235077428-338989a2e8c0?w=400";return e.jsxs("div",{className:"bg-white rounded-lg shadow-xl border border-gray-100 w-48 overflow-hidden cursor-pointer",onClick:L=>{L.stopPropagation(),l&&(he(l),Se(!0)),C(()=>k(null))},children:[e.jsxs("div",{className:"relative w-full h-20 overflow-hidden",children:[e.jsx("img",{src:I,alt:t.name,className:"w-full h-full object-cover"}),e.jsx("div",{className:"absolute top-1.5 left-1.5 px-1.5 py-0.5 rounded-full text-[10px] text-white font-medium",style:{backgroundColor:a?.color==="red"?"#ef4444":a?.color==="amber"?"#f59e0b":a?.color==="blue"?"#3b82f6":a?.color==="pink"?"#ec4899":a?.color==="teal"?"#14b8a6":"#6b7280"},children:a?.label})]}),e.jsxs("div",{className:"px-2 py-1.5",children:[e.jsx("h4",{className:"text-xs font-semibold text-gray-900 truncate",children:t.name}),e.jsxs("div",{className:"flex items-center gap-1.5 text-[11px] mt-0.5",children:[t.rating?e.jsxs("div",{className:"flex items-center gap-0.5",children:[e.jsx(ft,{className:"w-2.5 h-2.5 text-yellow-500 fill-yellow-500"}),e.jsx("span",{children:t.rating})]}):null,l?.distance?e.jsx("span",{className:"text-gray-500",children:Ve(l.distance)}):null]})]})]})}}),e.jsxs("button",{onClick:t=>{t.stopPropagation(),Ce()},onTouchEnd:t=>{t.preventDefault(),t.stopPropagation(),Ce()},className:"absolute top-4 right-4 px-3 py-2 bg-white rounded-full shadow-lg flex items-center gap-2 hover:bg-gray-50 z-20 border border-gray-100",style:{pointerEvents:"auto",touchAction:"manipulation"},children:[e.jsx(vs,{className:"w-4 h-4 text-blue-500"}),e.jsx("span",{className:"text-sm font-medium text-gray-900",children:"현재 위치"})]})]})]}),d==="list"&&e.jsxs("div",{className:"fixed inset-0 bg-white z-50 flex flex-col",children:[e.jsx("div",{className:"bg-white border-b border-gray-200 px-4 py-4",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h1",{className:"text-lg",children:"주변 장소"}),e.jsx("button",{onClick:()=>Be("map"),className:"p-2 hover:bg-gray-100 rounded-lg transition-colors",children:e.jsx(mt,{className:"w-5 h-5 text-gray-700"})})]})}),e.jsx("div",{className:"px-4 py-3 border-b border-gray-100 bg-white overflow-x-auto",children:e.jsx("div",{className:"flex gap-2",children:De.filter(t=>t.id!=="museum").map(t=>{const a=t.icon,l=u===t.id;return e.jsxs("button",{onClick:()=>N(t.id),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-full whitespace-nowrap text-sm transition-all duration-200 ${l?"text-white shadow-md":"bg-gray-100 text-gray-700 hover:bg-gray-200"}`,style:l?{backgroundColor:t.color==="gray"?"#6b7280":t.color==="red"?"#ef4444":t.color==="amber"?"#f59e0b":t.color==="blue"?"#3b82f6":t.color==="pink"?"#ec4899":t.color==="teal"?"#14b8a6":"#6b7280"}:void 0,children:[a&&e.jsx(a,{className:"w-4 h-4"}),t.label]},t.id)})})}),e.jsx("div",{className:"px-4 py-3 border-b border-gray-100 bg-white",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:"text-sm text-gray-600",children:["총 ",e.jsxs("span",{className:"text-blue-500",children:[ge.length,"개"]})]}),e.jsx("div",{className:"flex gap-2",children:e.jsx("button",{onClick:()=>D("distance"),className:`px-3 py-1 rounded-full text-sm transition-all duration-200 ${w==="distance"?"bg-blue-500 text-white":"bg-gray-100 text-gray-700 hover:bg-gray-200"}`,children:"거리 순"})})]}),e.jsx("button",{onClick:()=>me(!0),className:"p-2 hover:bg-gray-100 rounded-lg transition-colors",children:e.jsx(ms,{className:"w-5 h-5 text-gray-600"})})]})}),e.jsx("div",{className:"flex-1 overflow-y-auto px-4 pb-32",style:{touchAction:"pan-y"},children:e.jsxs("div",{className:"space-y-3 pt-4",children:[ge.map(t=>{const a=De.find(l=>l.id===t.category);return se.includes(t.id),e.jsx("div",{onClick:()=>{k(t.id),he(t),Se(!0)},className:"bg-white rounded-lg border-2 border-gray-200 p-4 hover:border-gray-300 hover:shadow-sm transition-all cursor-pointer",children:e.jsxs("div",{className:"flex gap-4 items-center",children:[e.jsx("div",{className:"flex-shrink-0 w-20 h-20 rounded-lg overflow-hidden",children:e.jsx("img",{src:t.images?.[0]||t.image||"https://images.unsplash.com/photo-1414235077428-338989a2e8c0?w=400",alt:t.name||t.nameKr,className:"w-full h-full object-cover"})}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("h3",{className:"font-semibold text-gray-900 mb-1 truncate",children:t.name||t.nameKr}),e.jsxs("div",{className:"flex items-center gap-3 text-sm mb-1",children:[e.jsx("span",{className:"text-gray-600",children:Ve(t.distance||1500)}),e.jsx("span",{className:"text-gray-400",children:"•"}),e.jsx("span",{className:"text-gray-500 text-xs",children:a?.label})]})]})]})},t.id)}),ge.length===0&&e.jsxs("div",{className:"text-center py-12",children:[e.jsx("p",{className:"text-gray-500",children:"검색 ê²°ê
34³¼ê°€ 없습니다"}),e.jsx(We,{variant:"outline",className:"mt-4",onClick:()=>{N("all"),b("")},children:"필터 초기화"})]})]})})]}),ze&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 bg-black/50 z-[9998]",onClick:()=>me(!1)}),e.jsxs("div",{className:"fixed bottom-0 left-0 right-0 bg-white rounded-t-3xl shadow-2xl z-[9999] flex flex-col max-h-[85vh]",children:[e.jsx("div",{className:"flex-shrink-0 flex justify-center pt-3 pb-1",children:e.jsx("div",{className:"w-12 h-1 bg-gray-300 rounded-full"})}),e.jsxs("div",{className:"flex-shrink-0 flex items-start justify-between px-8 pt-3 pb-4",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-gray-900 font-semibold",children:"필터 설정"}),e.jsx("p",{className:"text-sm text-gray-500 mt-1",children:"원하는 조건으로 장소를 필터링하세요."})]}),e.jsx("button",{onClick:()=>me(!1),className:"p-2 -m-2 hover:bg-gray-100 rounded-full transition-colors","aria-label":"닫기",children:e.jsx(mt,{className:"w-5 h-5 text-gray-700"})})]}),e.jsx("div",{className:"flex-1 overflow-y-auto px-8",style:{touchAction:"pan-y"},children:e.jsxs("div",{className:"space-y-8 pb-4",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsx(B,{className:"text-gray-900",children:"거리 범위"}),e.jsx(Ys,{value:fe,onValueChange:nt,min:100,max:5e3,step:100,className:"w-full"}),e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsxs("div",{className:"text-gray-600 text-center",children:[e.jsx("div",{children:"100m"}),e.jsx("div",{className:"text-xs mt-0.5",children:"도보 1분"})]}),e.jsxs("div",{className:"text-blue-600 text-center",children:[e.jsx("div",{children:Ve(fe[0])}),e.jsx("div",{className:"text-xs mt-0.5",children:Ft(fe[0])})]}),e.jsxs("div",{className:"text-gray-600 text-center",children:[e.jsx("div",{children:"5km"}),e.jsx("div",{className:"text-xs mt-0.5",children:"도보 50분"})]})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsx(B,{className:"text-gray-900",children:"가격대"}),e.jsx("div",{className:"grid grid-cols-2 gap-4",children:["$","$$","$$$"].map(t=>e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(ye,{id:`price-${t}`,checked:te.includes(t),onCheckedChange:a=>{Ae(a?[...te,t]:te.filter(l=>l!==t))}}),e.jsxs(B,{htmlFor:`price-${t}`,className:"cursor-pointer",children:[t," ",t==="$"&&"(저렴)",t==="$$"&&"(보통)",t==="$$$"&&"(비쌈)"]})]},t))})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(B,{className:"text-gray-900",children:"최소 평점"}),e.jsx("div",{className:"space-y-4",children:[3.5,4,4.5].map(t=>e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(ye,{id:`rating-${t}`,checked:Ne===t,onCheckedChange:a=>{Le(a?t:0)}}),e.jsxs(B,{htmlFor:`rating-${t}`,className:"cursor-pointer flex items-center gap-2",children:[e.jsx(ft,{className:"w-4 h-4 text-yellow-500 fill-yellow-500"}),t.toFixed(1)," 이상"]})]},t))})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(B,{className:"text-gray-900",children:"영업 상태"}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(ye,{id:"status-all",checked:!at,onCheckedChange:t=>{t&&Oe(!1)}}),e.jsx(B,{htmlFor:"status-all",className:"cursor-pointer",children:"전체 보기"})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(ye,{id:"status-open",checked:at,onCheckedChange:t=>{t&&Oe(!0)}}),e.jsx(B,{htmlFor:"status-open",className:"cursor-pointer",children:"영업 중인 장소만 보기"})]})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsx(B,{className:"text-gray-900",children:"편의시설"}),e.jsx("div",{className:"grid grid-cols-2 gap-4",children:[{id:"wifi",label:"Wi-Fi",icon:fs},{id:"parking",label:"주차",icon:hs},{id:"card",label:"카드결제",icon:ps},{id:"quiet",label:"조용함",icon:os},{id:"pet",label:"반려동물 동반",icon:js},{id:"baby",label:"유아시설",icon:ys},{id:"luggage",label:"짐 보관 서비스",icon:Cs}].map(t=>{const a=t.icon;return e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(ye,{id:`amenity-${t.id}`,checked:Ke.includes(t.id),onCheckedChange:l=>{Fe(l?[...Ke,t.id]:Ke.filter(I=>I!==t.id))}}),e.jsxs(B,{htmlFor:`amenity-${t.id}`,className:"cursor-pointer flex items-center gap-2",children:[e.jsx(a,{className:"w-4 h-4 text-gray-600"}),t.label]})]},t.id)})})]})]})}),e.jsxs("div",{className:"flex-shrink-0 bg-white border-t border-gray-200 p-4 flex gap-3",style:{paddingBottom:"max(1rem, env(safe-area-inset-bottom))"},children:[e.jsx(We,{variant:"outline",className:"flex-1",onClick:()=>{nt([2e3]),Ae([]),Le(0),Oe(!0),Fe([]),V.success("필터가 초기화되었습니다")},children:"초기화"}),e.jsx(We,{className:"flex-1 bg-blue-500 hover:bg-blue-600",onClick:()=>{me(!1),V.success("필터가 적용되었습니다")},children:"적용"})]})]})]}),ke&&q&&(()=>{const t=q.category,a=G=>Ut(G),l=se.includes(q.id);if(t==="landmark"||t==="museum")return e.jsx("div",{ref:rt,className:"fixed inset-0 bg-white overflow-y-auto overscroll-contain",style:{paddingBottom:"max(160px, env(safe-area-inset-bottom))",zIndex:9e3},children:e.jsx(cs,{landmark:{...q,ianaTz:Te},onPageChange:(G,xe)=>{if(G==="museum-detail"&&xe){n?.("museum-detail",xe);return}Ue()}
34,previousPage:"back",displayMode:"page",scrollContainerRef:rt})});if(t==="restaurant")return e.jsx(is,{fullScreen:!0,restaurant:q,onClose:Ue,onWishlist:a,isWishlisted:l});const L={...q,placeType:{museum:"restaurant",shopping:"shopping",service:"service"}[t]||"cafe",title_ko:q.nameKr||q.name||""};return e.jsx(ls,{fullScreen:!0,place:L,onClose:Ue,onWishlist:a,isWishlisted:l})})()]}),d==="map"&&!ke&&e.jsxs("button",{onMouseDown:t=>{t.preventDefault(),t.stopPropagation(),Be("list")},className:"fixed left-1/2 -translate-x-1/2 px-6 py-3 bg-gray-900 text-white rounded-full shadow-xl flex items-center gap-2 hover:bg-gray-800 transition-all duration-200 z-[40]",style:{bottom:"calc(env(safe-area-inset-bottom, 0px) + 24px)"},children:[e.jsx(J,{className:"w-5 h-5"}),e.jsx("span",{className:"font-medium",children:"목록 보기"})]}),d==="list"&&e.jsxs("button",{onMouseDown:t=>{t.preventDefault(),t.stopPropagation(),Be("map")},className:"fixed left-1/2 -translate-x-1/2 px-6 py-3 bg-gray-900 text-white rounded-full shadow-xl flex items-center gap-2 hover:bg-gray-800 transition-all duration-200 z-[40]",style:{bottom:"calc(env(safe-area-inset-bottom, 0px) + 24px)"},children:[e.jsx(ie,{className:"w-5 h-5"}),e.jsx("span",{className:"font-medium",children:"지도 보기"})]})]})}export{Yn as NearbyPage};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.