PageSourceSearch

https://rynda.io/_next/static/chunks/18638.c2b0182012bae38b.js

js rynda.io collected 2026-10-08 09:12:59 UTC 36,262 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[18638],{17054:(e,t,n)=>{n.d(t,{Po:()=>a,ko:()=>s});var l=n(70309),r=n(12115);function s(){return(0,l.U$)().map}function a(e){let t=s();return(0,r.useEffect)(function(){return t.on(e),function(){t.off(e)}},[t,e]),t}},18638:(e,t,n)=>{n.r(t),n.d(t,{default:()=>y});var l=n(95155),r=n(12115),s=n(61314),a=n(47650),i=n(18955),o=n(93342),c=n(29608),u=n(64292),d=n(42861);let p=new Map,f=null;var g=n(39307);let m={summary:null,updatedAt:null,stale:!1,sanctioned:!1,destination:null,etaText:null},h=new Map;async function v(e){if(h.has(e))return h.get(e);try{var t,n;let l=await fetch("/api/ports-map/live/vessel/".concat(e,"?peek=1"));if(!l.ok)return h.set(e,m),m;let r=await l.json(),s=null==r?void 0:r.staticData,a={summary:null!=(n=null==r?void 0:r.vesselFull)?n:null,updatedAt:"number"==typeof(null==r?void 0:r.updatedAt)&&Number.isFinite(r.updatedAt)?r.updatedAt:null,stale:!!(null==r?void 0:r.stale),sanctioned:!!((null==r?void 0:r.sanctioned)||(null==r||null==(t=r.sanctions)?void 0:t.sanctioned)),destination:"string"==typeof(null==s?void 0:s.destination)&&s.destination.trim()?s.destination.trim():null,etaText:function(e){var t,n;if(!e)return null;let l=null!=(t=e.etaMonth)?t:0,r=null!=(n=e.etaDay)?n:0;if(l<1||l>12||r<1||r>31)return null;let s=e=>String(e).padStart(2,"0"),a=e.etaHour,i=e.etaMinute,o=null!=a&&a>=0&&a<=23&&null!=i&&i>=0&&i<=59?" ".concat(s(a),":").concat(s(i)," UTC"):"";return"".concat(s(l),"-").concat(s(r)).concat(o)}(s)};if(h.size>=200){let e=h.keys().next().value;void 0!==e&&h.delete(e)}return h.set(e,a),a}catch(e){return m}}function x(e){if("number"==typeof e)return Number.isFinite(e)?e:null;if("string"==typeof e&&e.trim()){let t=Number(e);return Number.isFinite(t)?t:null}return null}function y(e){let{layers:t=["vessels-icon","vessels-live-icon","selected-vessel-icon"],isMobile:n,portContextOpen:m=!1}=e,{map:y,styleReady:b}=(0,c.V)(),k=(0,i.c)("portsMap"),{isAuthenticated:w}=(0,o.A)(),[j,N]=(0,r.useState)(null),[C,S]=(0,r.useState)(null),L=(0,r.useRef)(!1),T=e=>{L.current=!n&&(e>=9||m)},F=(0,r.useRef)(null),M=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(!(0,s.D)(y)||!b)return;T(y.getZoom());let e=()=>
1{M.current=null;let e=F.current;if(!e)return;if(!L.current||y.isMoving()||y.isZooming()){j&&N(null);return}if(!(0,s.D)(y))return;let n=t.filter(e=>y.getLayer(e));if(0===n.length){j&&N(null);return}let l=y.queryRenderedFeatures(e.point,{layers:n})[0];if(!l){j&&N(null);return}let r=l.properties,a=r?x(r.mmsi):null;if(!r||null==a){j&&N(null);return}let i=l.geometry.coordinates;N({mmsi:a,props:r,lngLat:{lng:i[0],lat:i[1]},point:{x:e.point.x,y:e.point.y}})},l=t=>{F.current=t,null==M.current&&(M.current=requestAnimationFrame(e))},r=()=>{F.current=null,N(null)},a=()=>T(y.getZoom()),i=()=>{if(n)return;let e=y.getBounds();!function(e,t){if(t<9)return;let n=function(e){let t=e=>Math.round(10*e)/10;return"".concat(t(e.south),",").concat(t(e.west),",").concat(t(e.north),",").concat(t(e.east))}(e);n!==f&&(f=n,(async()=>{try{let t=new URLSearchParams({south:String(e.south),west:String(e.west),north:String(e.north),east:String(e.east)}),n=await fetch("/api/ports-map/live/identity?".concat(t.toString()));if(!n.ok)return;let l=(await n.json()).id;if(!l)return;for(let e in l){let[t,n]=l[e];p.set(Number(e),{name:t,imo:n})}if(p.size>4e4){let e=p.size-4e4;for(let t of p.keys()){if(e--<=0)break;p.delete(t)}}}catch(e){}finally{f===n&&(f=null)}})())}({south:e.getSouth(),west:e.getWest(),north:e.getNorth(),east:e.getEast()},y.getZoom())};return y.on("mousemove",l),y.on("mouseout",r),y.on("zoomend",a),y.on("moveend",i),i(),()=>{y.off("mousemove",l),y.off("mouseout",r),y.off("zoomend",a),y.off("moveend",i),null!=M.current&&(cancelAnimationFrame(M.current),M.current=null)}},[y,b,t,n,m]),(0,r.useEffect)(()=>{if(!j)return void S(null);let{mmsi:e}=j;if(h.has(e))return void S({mmsi:e,entry:h.get(e)});S(null);let t=window.setTimeout(()=>{v(e).then(t=>{S(n=>(null==n?void 0:n.mmsi)===e?n:{mmsi:e,entry:t})})},300);return()=>window.clearTimeout(t)},[j]);let A=(0,r.useMemo)(()=>{var e;if(!j||!y)return null;let t=(null==C?void 0:C.mmsi)===j.mmsi?C.entry:null,n=function(e,t,n){var l,r,s,a,i,o,c;let u=null!=(r=x(e.mmsi))?r:0,d=p.get(u),f=null!=(s=x(e.shipType))?s:void 0,m=x(e.navStatus),h=null!=(a=x(e.sog))?a:0,v=null!=(i=x(e.rot))?i:0,y=x(e.t),b=null!=y&&y>0?1e3*y:null,k=null!=(o=null==n?void 0:n.summary)?o:null;return{mmsi:u,name:(null==k||null==(l=k.name)?void 0:l.trim())||(null==d?void 0:d.name)||(null!==(0,g.p)(u)?"MMSI ".concat(u):""),imo:(null==d?void 0:d.imo)&&d.imo>0?d.imo:null,lat:t.lat,lon:t.lng,sog:h,cog:v,heading:v,navStatus:null==m||m<0?null:m,navStatusLabel:"",updatedAt:null!=(c=null!=b?b:null==n?void 0:n.updatedAt)?c:Date.now(),stale:1===x(e.stale)||!!(null==n?void 0:n.stale),shipType:f,forOrders:1===x(e.forOrders),sanctioned:1===x(e.sanctioned)||!!(null==n?void 0:n.sanctioned),vesselFull:k}}(j.props,j.lngLat,t),r=(null==t||null==(e=t.summary)?void 0:e.matchCase)==="case2",s=(0,d.kZ)(n);return(0,l.jsx)("div",{className:r?"pointer-events-none absolute z-[500]":"pointer-events-none absolute z-[500] rounded-md border border-slate-200 bg-white/95 px-2.5 py-2 shadow-lg backdrop-blur-sm",style:{left:j.point.x+12,top:j.point.y+12,maxWidth:280},children:r&&n.vesselFull?(0,l.jsx)(u.$O,{v:n,vf:n.vesselFull,t:k,canViewDetails:w,destination:null==t?void 0:t.destination,etaText:null==t?void 0:t.etaText}):(0,l.jsx)(u.GK,{v:n,t:k,dotColor:s})})},[j,C,y,k,w]);return A&&y?(0,a.createPortal)(A,y.getContainer()):null}},26264:(e,t,n)=>{n.d(t,{p:()=>i});var l=n(70055),r=n(80514),s=n(70309),a=n(55027);let i=(0,l.Nq)(function({position:e,...t},n){let l=new a.Marker(e,t);return(0,r.Q)(l,(0,s.W4)(n,{overlayContainer:l}))},function(e,t,n){t.position!==n.position&&e.setLatLng(t.position),null!=t.icon&&t.icon!==n.icon&&e.setIcon(t.icon),null!=t.zIndexOffset&&t.zIndexOffset!==n.zIndexOffset&&e.setZIndexOffset(t.zIndexOffset),null!=t.opacity&&t.opacity!==n.opacity&&e.setOpacity(t.opacity),null!=e.dragging&&t.draggable!==n.draggable&&(!0===t.draggable?e.dragging.enable():e.dragging.disable())})},30525:(e,t,n)=>{n.d(t,{m:()=>i});var l=n(70055),r=n(80514),s=n(55027),a=n(12115);let i=(0,l.wk)(function(e,t){let n=new s.Tooltip(e,t.overlayContainer);return(0,r.Q)(n,t)},function(e,t,{position:n},l){(0,a.useEffect)(function(){let r=t.overlayContainer;if(null==r)return;let{instance:s}=e,a=e=>{e.tooltip===s&&(null!=n&&s.setLatLng(n),s.update(),l(!0))},i=e=>{e.tooltip===s&&l(!1)};return r.on({tooltipopen:a,tooltipclose:i}),r.bindTooltip(s),function(){r.off({tooltipopen:a,tooltipclose:i}),null!=r._map&&r.unbindTooltip()}},[e,t,l,n])})},42861:(e,t,n)=>{n.d(t,{MY:()=>r,_C:()=>a,kZ:()=>s});var l=n(96917);let r={tanker:"#dc2626",bulk:"#ca8a04",cargo:"#16a34a",container:"#0d9488",passenger:"#3b82f6",roro:"#c026d3",fishing:"#f97316",service:"#475569",other:"#6b7280",unknown:"#94a3b8"};function s(e){return r[(0,l.BW)(e.shipType,e.vesselType)]}function a(e){return!e.stale&&"number"==typeof e.sog&&Number.isFinite(e.sog)&&e.sog>.5?"triangle":5===e.navStatus?"square":"dot"}},64292:(e,t,n)=>{n.d(t,{GK:()=>L,$O:()=>T,Ay:()=>S});var l=n(95155),r=n(12115),s=n(76313),a=n(18955),i=n(51567),o=n(17054),c=n(65761),u=n(26264),d=n(30525),p=n(55027),f=n.n(p),g=n(78435),m=n(70125),h=n(64199),v=n(13217),x=n(49175),y=n(93342),b=n(42861),k=n(39307),w=n(95704);let j=new Map,N="1"===w.env.NEXT_PUBLIC_SHOW_AIS_SOURCE;function C(e){return(0,b.kZ)(e)}function S(e){let{vessels:t,trackedVessel:n,activeMmsi:s,onSelect:i,showTrails:p,isMobileView:g}=e,v=(0,a.c)("portsMap"),{isAuthenticated:x}=(0,y.A)(),k=(0,o.ko)(),[w,S]=(0,r.useState)(()=>k.getZoom()),F=(0,r.useMemo)(()=>{var e;return p&&(null==n||null==(e=n.trail)?void 0:e.length)?n.trail.map(e=>[e.lat,e.lon]):null},[p,n]),M=w<=7,A=w<=7?"medium":"full",O=w>=8&&!g,B=(0,r.useMemo)(()=>M?t.filter(e=>e.mmsi===s||null!==e.navStatus):t,[t,M,s]);return(0,r.useEffect)(()=>{let e=()=>S(k.getZoom());return k.on("zoomend",e),()=>{k.off("zoomend",e)}},[k]),(0,l.jsxs)(l.Fragment,{children:[F&&(0,l.jsx)(c.R,{positions:F,color:"#f97316",weight:2,opacity:.7,dashArray:"6 4"}),B.map(e=>{var t,n;let r=(0,b.kZ)(e),a=e.mmsi===s,o=(0,h.bT)(e.shipType),c=N&&null!=(n=e.kind)?n:null,p=(0,b._C)(e),g=function(e){var t;let n="dot"!==e.shape&&Number.isFinite(e.heading)?Math.round(e.heading):0,l="".concat(e.shape,":").concat(n,":").concat(e.color,":").concat(+!!e.selected,":").concat(e.classKind,":").concat(+!!e.isCargo,":").concat(e.density,":").concat(e.accentColor,":").concat(null!=(t=e.sourceBadge)?t:"-",":").concat(+!!e.stale),r=j.get(l);if(r)return r;let{html:s,size:a}=function(e){var t,n,l;let r,s=e.selected?32:"B"===e.classKind?17:"medium"===e.density?21:26,{color:a,width:i}=e.selected?{color:"#0f172a",width:2.35}:"B"===e.classKind?{color:"#475569",width:1}:{color:"#1c1917",width:1.55},o=e.isCargo&&!e.selected&&null!=(t=e.accentColor)?t:null,c=e.stale?.5:1;if("dot"===e.shape||"square"===e.shape){let t="dot"===e.shape?(n=e.fillColor,'<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" style="display:block" fill="none">\n<circle cx="12" cy="12" r="6" fill="'.concat(n,'" stroke="').concat(a,'" stroke-width="').concat(i,'" paint-order="stroke fill"/>\n</svg>')):(l=e.fillColor,'<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" style="display:block" fill="none">\n<rect x="6" y="6" width="12" height="12" rx="2.2" ry="2.2" fill="'.concat(l,'" stroke="').concat(a,'" stroke-width="').concat(i,'" paint-order="stroke fill"/>\n</svg>'));r='<div style="width:'.concat(s,"px;height:").concat(s,"px;display:flex;align-items:center;justify-content:center;filter:drop-shadow(0 1px 2px rgba(0,0,0,0.22));opacity:").concat(c,';">').concat(t,"</div>")}else{let t=e.headingDeg>=0&&e.headingDeg<360?e.headingDeg:0,n=function(e,t,n,l){let r=Math.max(1.15,.55*n),s=l?'<path\n  d="M12 3.1 Q12.35 2.85 12.7 3.15 L20.4 18.85 Q20.55 19.25 20.15 19.35 L12.15 18.15 Q12 18.1 11.85 18.15 L3.85 19.35 Q3.45 19.25 3.6 18.85 L11.3 3.15 Q11.65 2.85 12 3.1 Z"\n  fill="none"\n  stroke="'.concat(l,'"\n  stroke-width="').concat(n+1.6,'"\n  stroke-linejoin="round"\n  stroke-linecap="round"\n  opacity="0.85"\n/>'):"";return'<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" style="display:block" fill="none">\n'.concat(s,'\n<path\n  d="M12 3.1 Q12.35 2.85 12.7 3.15 L20.4 18.85 Q20.55 19.25 20.15 19.35 L12.15 18.15 Q12 18.1 11.85 18.15 L3.85 19.35 Q3.45 19.25 3.6 18.85 L11.3 3.15 Q11.65 2.85 12 3.1 Z"\n  fill="').concat(e,'"\n  stroke="').concat(t,'"\n  stroke-width="').concat(n,'"\n  stroke-linejoin="round"\n  stroke-linecap="round"\n  paint-order="stroke fill"\n/>\n<path\n  d="M12 17.9 C11.25 14.8 12.75 11.6 12 8.6 C11.35 6.1 12.55 4.2 12 2.95"\n  fill="none"\n  stroke="').concat(t,'"\n  stroke-width="').concat(r,'"\n  stroke-linecap="round"\n  stroke-linejoin="round"\n/>\n</svg>')}(e.fillColor,a,i,o);r='<div style="width:'.concat(s,"px;height:").concat(s,"px;display:flex;align-items:center;justify-content:center;transform:rotate(").concat(t,"deg);filter:drop-shadow(0 1px 2px rgba(0,0,0,0.28));opacity:").concat(c,';">').concat(n,"</div>")}let u=e.sourceBadge?'<div style="position:absolute;top:-4px;right:-4px;width:11px;height:11px;border-radius:50%;background:'.concat("S"===e.sourceBadge?"#14b8a6":"#0ea5e9",';color:#fff;font:700 8px/11px system-ui,sans-serif;text-align:center;border:1px solid #fff;box-shadow:0 1px 2px rgba(0,0,0,0.35);pointer-events:none;">').concat(e.sourceBadge,"</div>"):"";return{html:e.sourceBadge?'<div style="position:relative;width:'.concat(s,"px;height:").concat(s,'px;">').concat(r).concat(u,"</div>"):r,size:s}}({fillColor:e.color,selected:e.selected,headingDeg:n,classKind:e.classKind,isCargo:e.isCargo,density:e.density,accentColor:e.accentColor,sourceBadge:e.sourceBadge,shape:e.shape,stale:e.stale}),i=f().divIcon({className:"",iconSize:[a,a],iconAnchor:[a/2,a/2],html:s});
1return j.set(l,i),i}({heading:e.heading,color:r,selected:a,classKind:(0,m.BY)(e),isCargo:(0,h.xm)(e.shipType),density:A,accentColor:o.color,sourceBadge:c,shape:p,stale:!!e.stale}),y=(null==(t=e.vesselFull)?void 0:t.matchCase)==="case2",k=a?1e3:200*("triangle"===p);return(0,l.jsx)(u.p,{position:[e.lat,e.lon],icon:g,zIndexOffset:k,eventHandlers:{click:()=>i(e)},children:O&&y&&e.vesselFull?(0,l.jsx)(d.m,{direction:"top",offset:[0,-10],opacity:1,sticky:!0,className:"vessel-full-tooltip [&_.leaflet-tooltip-content]:!m-0",children:(0,l.jsx)(T,{v:e,vf:e.vesselFull,t:v,canViewDetails:x})}):O?(0,l.jsx)(d.m,{direction:"top",offset:[0,-10],opacity:1,sticky:!0,className:"!rounded-md !border !border-slate-200 !bg-white !px-2.5 !py-2 !text-slate-800 !shadow-md [&_.leaflet-tooltip-content]:!m-0",children:(0,l.jsx)(L,{v:e,t:v,dotColor:C(e)})}):null},e.mmsi)})]})}function L(e){var t,n,r,s,a,o,c;let{v:u,t:d,dotColor:p}=e,f=(0,i.Ym)(),g=null!=(c=null==(n=u.vesselFull)||null==(t=n.flagCountry)?void 0:t.trim())?c:"",h=(0,v.KR)(g);return(0,l.jsxs)("div",{className:"max-w-[220px] text-left text-xs leading-snug",children:[(0,l.jsxs)("p",{className:"flex items-center gap-1.5 font-semibold text-slate-900",children:[(0,l.jsx)("span",{className:"truncate",children:(null==(s=u.vesselFull)||null==(r=s.name)?void 0:r.trim())||u.name||(null!==(0,k.p)(u.mmsi)?"MMSI ".concat(u.mmsi):d("live.vesselFallbackTitle"))}),u.forOrders&&(0,l.jsx)("span",{className:"shrink-0 rounded bg-amber-500 px-1 py-px text-[9px] font-semibold uppercase leading-tight text-white",title:d("live.forOrdersHubsHint"),children:d("live.layerForOrders")}),u.sanctioned&&(0,l.jsx)("span",{className:"shrink-0 rounded bg-rose-600 px-1 py-px text-[9px] font-semibold uppercase leading-tight text-white",title:d("live.vesselFull.sanctionedTagTitle"),children:d("live.vesselFull.sanctionedTag")})]}),(0,l.jsxs)("p",{className:"mt-0.5 flex items-center gap-1 text-[11px] text-slate-600",children:[(0,l.jsx)("span",{className:"inline-block h-1.5 w-1.5 rounded-full",style:{backgroundColor:p}}),(0,m.Y5)(u,d),Number.isFinite(u.sog)?" \xb7 ".concat(u.sog.toFixed(1)," ").concat(d("knotsShort")):""]}),(0,l.jsx)("p",{className:"mt-0.5 text-[11px] text-slate-500",children:(0,m.j8)(u,d,f)}),u.imo||(null==(a=u.vesselFull)?void 0:a.imo)?(0,l.jsxs)("p",{className:"mt-0.5 text-[10px] text-slate-400",children:["IMO ",u.imo||(null==(o=u.vesselFull)?void 0:o.imo)]}):null===(0,k.p)(u.mmsi)&&(0,l.jsx)("p",{className:"mt-0.5 text-[10px] text-slate-400",children:d("live.identifiersAfterLogin")}),u.vesselFull&&(0,l.jsxs)("div",{className:"mt-1 space-y-0.5 border-t border-slate-100 pt-1 text-[10px] text-slate-500",children:[g&&(0,l.jsxs)("p",{children:[(0,l.jsx)("span",{className:"text-slate-400",children:"Flag:"})," ",h||d("live.flagUnknown")]}),u.vesselFull.yearBuilt&&(0,l.jsxs)("p",{children:[(0,l.jsx)("span",{className:"text-slate-400",children:"Built:"})," ",u.vesselFull.yearBuilt]}),u.vesselFull.grossTonnage&&(0,l.jsxs)("p",{children:[(0,l.jsx)("span",{className:"text-slate-400",children:"GT:"})," ",u.vesselFull.grossTonnage]})]}),(0,l.jsxs)("p",{className:"mt-1 text-[10px] text-slate-400",children:["AIS \xb7 ",(0,m.uW)(u.updatedAt,d)]}),u.stale&&(0,l.jsx)("p",{className:"mt-1 text-[10px] font-medium text-amber-600",children:d("live.staleWarning")})]})}function T(e){var t,n,r,a,i,o,c,u,d;let{v:p,vf:f,t:v,canViewDetails:y,destination:b,etaText:w}=e,j=(null==(t=f.name)?void 0:t.trim())||p.name||(null!==(0,k.p)(p.mmsi)?"MMSI ".concat(p.mmsi):v("live.vesselFallbackTitle")),N=null===(0,k.p)(p.mmsi),S=null!=(o=p.shipType)?o:0,L=(0,h.bT)(S),T=L.color,A=function(e,t,n){var l,r;let s=null!=(l=null==e?void 0:e.trim())?l:"";if(s&&!(0,h.oJ)(s))return s;let a=null!=(r=null==t?void 0:t.trim())?r:"";return a&&!(0,h.oJ)(a)?a:n}(f.shipType,p.vesselType,L.label),O=null!=(c=f.flagCode)?c:null,B=(0,m.Y5)(p,v),I=C(p),R=(null==(n=f.grossTonnage)?void 0:n.trim())||p.grossTonnage||"",E=(null==(r=f.deadweightTonnage)?void 0:r.trim())||"",z=(null==(a=f.yearBuilt)?void 0:a.trim())||p.yearBuilt||"",H=!!(R||E||z),U=null!=(u=(0,s.RF)(f.registeredOwner))?u:"",P=null!=(d=(0,s.RF)(f.managementCompany))?d:"",_=(null==(i=f.classificationSociety)?void 0:i.trim())||"",D=!!(U||P&&P!==U||_);return(0,l.jsxs)("div",{className:"w-[280px] overflow-hidden rounded-xl border border-slate-200 bg-white text-left font-sans",children:[(0,l.jsx)("div",{className:"h-1 w-full",style:{backgroundColor:T}}),(0,l.jsxs)("div",{className:"px-3 pb-2 pt-2.5",children:[(0,l.jsxs)("div",{className:"flex items-start justify-between gap-2",children:[(0,l.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,l.jsxs)("p",{className:"flex items-center gap-1.5 text-sm font-bold leading-tight text-slate-900",children:[(0,l.jsx)("span",{className:"truncate",children:j}),p.sanctioned&&(0,l.jsx)("span",{className:"shrink-0 rounded bg-rose-600 px-1 py-px text-[9px] font-semibold uppercase leading-tight text-white",title:v("live.vesselFull.sanctionedTagTitle"),children:v("live.vesselFull.sanctionedTag")})]}),(0,l.jsx)("p",{className:"mt-0.5 text-[10px] leading-tight text-slate-500",children:N?v("live.identifiersAfterLogin"):(0,l.jsxs)(l.Fragment,{children:["IMO ",f.imo,null!==(0,k.p)(f.mmsi)?" \xb7 MMSI ".concat(f.mmsi):""]})})]}),O&&(0,l.jsxs)("span",{className:"flex shrink-0 items-center gap-1 rounded-md border border-slate-200/80 bg-slate-50 px-1.5 py-0.5 text-[10px] font-medium text-slate-700",children:[(0,l.jsx)(x.i,{code:O,className:"inline-block h-3 w-[18px] rounded-[1px]"}),(0,l.jsx)("span",{children:O.toUpperCase()})]})]}),(0,l.jsxs)("div",{className:"mt-2 flex flex-wrap items-center gap-1.5",children:[A&&(0,l.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] font-semibold",style:{color:T,backgroundColor:"".concat(T,"1A")},children:[(0,l.jsx)("span",{className:"inline-block h-1.5 w-1.5 rounded-full",style:{backgroundColor:T}}),A]}),(0,l.jsxs)("span",{className:"inline-flex items-center gap-1 rounded-full bg-slate-100 px-2 py-0.5 text-[10px] font-medium text-slate-700",children:[(0,l.jsx)("span",{className:"inline-block h-1.5 w-1.5 rounded-full",style:{backgroundColor:I}}),B]})]})]}),(b||w)&&(0,l.jsxs)("div",{className:"space-y-0.5 border-t border-slate-100 px-3 py-1.5 text-[11px]",children:[b&&(0,l.jsxs)("div",{className:"flex gap-1.5",children:[(0,l.jsx)("span",{className:"shrink-0 text-[10px] uppercase tracking-wide text-slate-400",children:v("live.destination")}),(0,l.jsx)("span",{className:"truncate font-medium text-slate-700",children:b})]}),w&&(0,l.jsxs)("div",{className:"flex gap-1.5",children:[(0,l.jsx)("span",{className:"shrink-0 text-[10px] uppercase tracking-wide text-slate-400",children:v("voyageStrip.eta")}),(0,l.jsx)("span",{className:"font-medium text-slate-700",children:w})]})]}),H&&(0,l.jsxs)("div",{className:"grid grid-cols-3 gap-px border-t border-slate-100 bg-slate-100 text-center",children:[(0,l.jsx)(F,{label:"GT",value:R}),(0,l.jsx)(F,{label:"DWT",value:E}),(0,l.jsx)(F,{label:v("live.yearBuilt"),value:z})]}),D&&(0,l.jsxs)("div",{className:"space-y-1 border-t border-slate-100 px-3 py-2 text-[11px]",children:[U&&(0,l.jsxs)("div",{className:"flex gap-1.5",children:[(0,l.jsx)("span",{className:"shrink-0 text-[10px] uppercase tracking-wide text-slate-400",children:v("live.owner")}),(0,l.jsx)(M,{value:U,canView:y})]}),P&&P!==U&&(0,l.jsxs)("div",{className:"flex gap-1.5",children:[(0,l.jsx)("span",{className:"shrink-0 text-[10px] uppercase tracking-wide text-slate-400",children:v("live.manager")}),(0,l.jsx)(M,{value:P,canView:y})]}),_&&(0,l.jsxs)("div",{className:"flex gap-1.5",children:[(0,l.jsx)("span",{className:"shrink-0 text-[10px] uppercase tracking-wide text-slate-400",children:"Class"}),(0,l.jsx)(M,{value:_,canView:y})]})]}),(0,l.jsxs)("div",{className:"flex items-center justify-between gap-2 border-t border-slate-100 bg-slate-50/60 px-3 py-1.5",children:[(0,l.jsxs)("span",{className:"text-[10px] text-slate-400",children:["AIS \xb7 ",(0,m.uW)(p.updatedAt,v)]}),(0,l.jsxs)("span",{className:"inline-flex items-center gap-1 text-[9px] font-semibold uppercase tracking-wide text-emerald-600",children:[(0,l.jsx)(g.A,{className:"h-3 w-3"}),"Registry"]})]}),p.stale&&(0,l.jsx)("div",{className:"border-t border-amber-200 bg-amber-50 px-3 py-1 text-[10px] font-medium text-amber-700",children:v("live.staleWarning")})]})}function F(e){let{label:t,value:n}=e;return(0,l.jsxs)("div",{className:"bg-white px-2 py-1.5",children:[(0,l.jsx)("p",{className:"text-[9px] uppercase tracking-wider text-slate-400",children:t}),(0,l.jsx)("p",{className:"mt-0.5 truncate text-xs font-semibold text-slate-800",children:n||"—"})]})}function M(e){let{value:t,canView:n}=e;return n?(0,l.jsx)("span",{className:"min-w-0 flex-1 truncate text-slate-700",children:t}):(0,l.jsx)("span",{className:"min-w-0 flex-1 pt-0.5",children:(0,l.jsx)("span",{className:"block h-3.5 max-w-[150px] rounded bg-slate-300/80 blur-[4px]","aria-hidden":!0})})}},65761:(e,t,n)=>{n.d(t,{R:()=>i});var l=n(70055),r=n(80514),s=n(70309),a=n(55027);let i=(0,l.Lt)(function({positions:e,...t},n){let l=new a.Polyline(e,t);return(0,r.Q)(l,(0,s.W4)(n,{overlayContainer:l}))},function(e,t,n){t.positions!==n.positions&&e.setLatLngs(t.positions)})},70055:(e,t,n)=>{n.d(t,{Nq:()=>f,wk:()=>g,Lt:()=>m,X3:()=>h});var l=n(12115),r=n(47650),s=n(70309);function a(e){return(0,l.forwardRef)(function(t,n){let{instance:r,context:a}=e(t).current;(0,l.useImperativeHandle)(n,()=>r);let{children:i}=t;return null==i?null:l.createElement(s.dk,{value:a},i)})}function i(e,t){let n=(0,l.useRef)(t);(0,l.useEffect)(function(){t!==n.current&&null!=e.attributionControl&&(null!=n.current&&e.attributionControl.removeAttribution(n.current),null!=t&&e.attributionControl.addAttribution(t)),n.current=t},[e,t])}function o(e,t){let n=(0,l.useRef)(void 0);(0,l.useEffect)(function(){return null!=t&&e.instance.on(t),n.current=t,function(){null!=n.current&&e.
1instance.off(n.current),n.current=null}},[e,t])}var c=n(85452),u=n(80514);function d(e,t){(0,l.useEffect)(function(){return(t.layerContainer??t.map).addLayer(e.instance),function(){t.layerContainer?.removeLayer(e.instance),t.map.removeLayer(e.instance)}},[t,e])}function p(e){return function(t){let n=(0,s.U$)(),l=e((0,c.P)(t,n),n);return i(n.map,t.attribution),o(l.current,t.eventHandlers),d(l.current,n),l}}function f(e,t){return a(p((0,u.K)(e,t)))}function g(e,t){var n,a;return n=(0,u.K)(e),a=function(e,l){let r=(0,s.U$)(),a=n((0,c.P)(e,r),r);return i(r.map,e.attribution),o(a.current,e.eventHandlers),t(a.current,r,e,l),a},(0,l.forwardRef)(function(e,t){let[n,s]=(0,l.useState)(!1),{instance:i}=a(e,s).current;(0,l.useImperativeHandle)(t,()=>i),(0,l.useEffect)(function(){n&&i.update()},[i,n,e.children]);let o=i._contentNode;return o?(0,r.createPortal)(e.children,o):null})}function m(e,t){var n;return a((n=(0,u.K)(e,t),function(e){let t=(0,s.U$)(),r=n((0,c.P)(e,t),t);o(r.current,e.eventHandlers),d(r.current,t);var a=r.current;let i=(0,l.useRef)(void 0);return(0,l.useEffect)(function(){if(e.pathOptions!==i.current){let t=e.pathOptions??{};a.instance.setStyle(t),i.current=t}},[a,e]),r}))}function h(e,t){var n;return n=p((0,u.K)(e,t)),(0,l.forwardRef)(function(e,t){let{instance:r}=n(e).current;return(0,l.useImperativeHandle)(t,()=>r),null})}},70125:(e,t,n)=>{n.d(t,{BY:()=>s,Bv:()=>d,Tp:()=>a,Y5:()=>c,fc:()=>i,j8:()=>o,uW:()=>p});var l=n(64199),r=n(82033);function s(e){return null===e.navStatus?"B":"A"}function a(e){return null==e?"all":1===e?"anchored":5===e?"moored":0===e||8===e?"underway":"all"}function i(e,t){switch(e){case"WIG":return t("live.shipCategory.WIG");case"Special":return t("live.shipCategory.Special");case"HSC":return t("live.shipCategory.HSC");case"Passenger":return t("live.shipCategory.Passenger");case"Cargo":return t("live.shipCategory.Cargo");case"Tanker":return t("live.shipCategory.Tanker");case"Other":return t("live.shipCategory.Other");default:return t("live.shipCategory.Unknown")}}function o(e,t){var n,s,a,o,c,u,d;let p=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"en",f=null!=(o=null==(s=e.vesselFull)||null==(n=s.shipType)?void 0:n.trim())?o:"";if(f&&!(0,l.oJ)(f))return null!=(c=(0,r.V1)(f,p))?c:f;let g=(0,l.bT)(e.shipType),m=null!=(u=null==(a=e.vesselType)?void 0:a.trim())?u:"";
1return m&&!(0,l.oJ)(m)?null!=(d=(0,r.V1)(m,p))?d:m:i(g.category,t)}function c(e,t){let n=a(e.navStatus);return"anchored"===n?t("live.anchored"):"moored"===n?t("live.moored"):"underway"===n?t("live.underway"):null!=e.navStatus&&Number.isInteger(e.navStatus)&&e.navStatus>=0&&e.navStatus<=15?t("live.navStatusName.".concat(e.navStatus)):e.navStatusLabel}let u=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function d(e,t){var n,l,r,s;let a=null!=(n=null==e?void 0:e.month)?n:0,i=null!=(l=null==e?void 0:e.day)?l:0;if(a<1||a>12||i<1||i>31)return null;let o=String(i).padStart(2,"0"),c="ru"===t?"".concat(o,".").concat(String(a).padStart(2,"0")):"".concat(o," ").concat(u[a-1]),d=null!=(r=null==e?void 0:e.hour)?r:24,p=null!=(s=null==e?void 0:e.minute)?s:60;return d<0||d>23||p<0||p>59?c:"".concat(c," ").concat(String(d).padStart(2,"0"),":").concat(String(p).padStart(2,"0")," UTC")}function p(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Date.now(),l=Math.floor((n-e)/1e3);if(l<5)return t("live.positionAgeJustNow");{if(l<60)return t("live.positionAgeSeconds",{count:l});if(l<3600)return t("live.positionAgeMinutes",{count:Math.floor(l/60)});let e=Math.floor(l/3600),n=Math.floor(l%3600/60);return 0===n?t("live.positionAgeHours",{count:e}):t("live.positionAgeHoursMinutes",{hours:e,minutes:n})}}},70309:(e,t,n)=>{n.d(t,{U$:()=>i,W4:()=>s,dk:()=>a,fB:()=>r});var l=n(12115);function r(e){return Object.freeze({__version:1,map:e})}function s(e,t){return Object.freeze({...e,...t})}let a=(0,l.createContext)(null);function i(){let e=(0,l.use)(a);if(null==e)throw Error("No context provided: useLeafletContext() can only be used in a descendant of <MapContainer>");return e}},76313:(e,t,n)=>{n.d(t,{RF:()=>r});let l=/^(unknown|owner unknown|not applicable|n\/a|rptd sold|reported sold|various|no ism)/i;function r(e){var t;let n=(null!=e?e:"").trim();return!(!n||!(t=n)||l.test(t.trim()))?n:null}},78435:(e,t,n)=>{n.d(t,{A:()=>l});let l=(0,n(71847).A)("BadgeCheck",[["path",{d:"M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",key:"3c2336"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},80514:(e,t,n)=>{n.d(t,{K:()=>s,Q:()=>r});var l=n(12115);function r(e,t,n){return Object.freeze({instance:e,context:t,container:n})}function s(e,t){return null==t?function(t,n){let r=(0,l.useRef)(void 0);return r.current||(r.current=e(t,n)),r}:function(n,r){let s=(0,l.useRef)(void 0);s.current||(s.current=e(n,r));let a=(0,l.useRef)(n),{instance:i}=s.current;return(0,l.useEffect)(function(){a.current!==n&&(t(i,n,a.current),a.current=n)},[i,n,t]),s}}},82033:(e,t,n)=>{n.d(t,{V1:()=>i,nQ:()=>o});let l={"general cargo ship":"сухогруз","bulk carrier":"балкер",tug:"буксир","oil products tanker":"танкер-продуктовоз","container ship":"контейнеровоз","chemical/oil products tanker":"химовоз-продуктовоз","crude oil tanker":"танкер для сырой нефти","passenger ship":"пассажирское судно","offshore supply ship":"судно снабжения морских платформ","fishing vessel":"рыболовное судно","offshore tug/supply ship":"буксир-снабженец","patrol vessel":"патрульное судно","lpg tanker":"газовоз LPG","refrigerated cargo ship":"рефрижераторное судно","landing craft":"грузовое судно с носовой аппарелью","research vessel":"научно-исследовательское судно","fish carrier":"рыботранспортное судно","chemical tanker":"химовоз","vehicles carrier":"автомобилевоз",yacht:"яхта","passenger/ro-ro ship (vehicles)":"пассажирский паром","ro-ro cargo ship":"ролкер","hopper dredger":"самоотвозный земснаряд","offshore support vessel":"судно обеспечения морских платформ","lng tanker":"газовоз LNG","passenger (cruise) ship":"круизное судно","aggregates carrier":"судно для перевозки нерудных материалов","deck cargo ship":"судно для палубных грузов","pusher tug":"буксир-толкач","bunkering tanker":"бункеровщик","ore carrier":"рудовоз","cement carrier":"цементовоз","passenger/general cargo ship":"грузопассажирское судно","utility vessel":"вспомогательное судно","motor hopper":"самоходная шаланда","fish factory ship":"рыбоперерабатывающее судно","asphalt/bitumen tanker":"битумовоз","wood chips carrier":"щеповоз","livestock carrier":"скотовоз","self-discharging bulk carrier":"балкер-самовыгружатель","heavy load carrier":"тяжеловоз","offshore processing ship":"плавучая установка добычи и переработки","fso, oil":"плавучее нефтехранилище (FSO)","water tanker":"водоналивное судно","ore/oil carrier":"нефтерудовоз","bulk/oil carrier":"нефтенавалочное судно","passenger/ro-ro cargo ship":"грузопассажирский паром","work/repair vessel":"ремонтное судно","fishing support vessel":"судно обеспечения промысла","anchor hoy":"судно для постановки якорей","supply vessel":"судно снабжения","standby-safety vessel":"дежурно-спасательное судно","crane ship":"плавкран",dredger:"земснаряд","buoy/lighthouse vessel":"судно навигационного обеспечения","accommodation ship offshore support vessel":"жилое судно для морских платформ","pollution control vessel":"судно для ликвидации разливов нефти","limestone carrier":"судно для перевозки известняка","training ship":"учебное судно","search & rescue vessel":"поисково-спасательное судно","palletised cargo ship":"паллетовоз","drilling ship":"буровое судно","passenger/landing craft":"пассажирское судно с носовой аппарелью","vegetable oil tanker":"танкер для растительного масла","pipe-layer":"трубоукладчик","mooring vessel":"швартовное судно","vessel (function unknown)":"судно","pilot vessel":"лоцманское судно","cable-layer":"кабелеукладчик","salvage ship":"спасательное судно","barge carrier":"лихтеровоз","well-stimulation vessel":"судно для интенсификации скважин","wine tanker":"танкер для вина","bunkering tanker (lng)":"бункеровщик LNG","edible oil tanker":"танкер для пищевых масел","waste disposal vessel":"судно для сбора отходов",crewboat:"судно для перевозки персонала",icebreaker:"ледокол","fruit juice carrier- refrigerated":"соковоз","bulk dry storage ship":"плавучий склад сыпучих грузов","whale-catcher":"китобойное судно","power station vessel":"плавучая электростанция","container ro-ro cargo ship":"контейнеровоз-ролкер","production testing vessel":"судно для испытаний скважин","fire-fighting vessel":"пожарное судно","mining vessel":"добывающее судно","cable repair ship":"кабельное судно","exhibition vessel":"выставочное судно","tank-cleaning vessel":"судно для зачистки танков","combination gas tanker (lng/lpg)":"газовоз LNG/LPG","co2 tanker":"танкер для CO2","powder carrier":"судно для порошковых грузов","molasse
1s tanker":"танкер для мелассы","urea carrier":"судно для карбамида","water injection dredger":"водоструйный земснаряд","pipe burying vessel":"судно для заглубления трубопроводов","bulk/caustic soda carrier (cabu)":"балкер-танкер для каустической соды","passenger/container ship":"пассажирское судно-контейнеровоз","seal-catcher":"зверобойное судно","bunkering tanker (lng/oil)":"бункеровщик (LNG и нефтепродукты)","wind turbine installation vessel":"судно для установки ветрогенераторов","hospital vessel":"госпитальное судно","trans-shipment vessel":"судно-перегружатель","pulp carrier":"целлюлозовоз","nuclear fuel carrier":"судно для перевозки ядерного топлива","caprolactam tanker":"танкер для капролактама","sailing vessel":"парусное судно","beer tanker":"танкер для пива","refined sugar carrier":"сахаровоз","bulk/sulphuric acid carrier":"балкер-танкер для серной кислоты","fso, gas":"плавучее газохранилище (FSO)","bulk/oil/chemical carrier":"нефтерудохимовоз","general cargo":"сухогруз","sail training ship":"парусное учебное судно","trenching support vessel":"судно для траншейных работ","oil-sludge tanker":"танкер для нефтешлама","coal/oil mixture tanker":"танкер для водоугольной смеси","launch (unspecified)":"катер","kelp dredger":"судно для добычи водорослей","not otherwise specified":"не классифицировано","chemical/products tanker":"химовоз-продуктовоз","passenger/ro-ro ship":"пассажирский паром","general dry cargo ship":"сухогруз","cargo ship":"грузовое судно","oil tanker":"нефтяной танкер","tanker for oil":"нефтяной танкер","multi-purpose dry cargo ship":"многоцелевой сухогруз","general cargo (single deck)":"однопалубный сухогруз","tanker for chemicals and oil products":"химовоз-продуктовоз","tanker for oil and chemicals":"нефтехимовоз","oil/chemical tanker":"нефтехимовоз","liquefied gas carrier":"газовоз","liquefied gas carrier (lng)":"газовоз LNG","liquefied gas carrier (lpg)":"газовоз LPG","vehicle carrier":"автомобилевоз","multi purpose offshore vessel":"многоцелевое судно обеспечения платформ","high-speed craft":"скоростное судно","refrigerated cargo carrier":"рефрижераторное судно","tug boat":"буксир","roro ship":"ролкер","bitumen tanker":"битумовоз"};function r(e){return(null!=e?e:"").split("|")[0].trim().toLowerCase().replace(/\s+/g," ")}function s(e){var t;let n=r(e);return n&&null!=(t=l[n])?t:null}let a=e=>e.charAt(0).toUpperCase()+e.slice(1);function i(e,t){let n=(null!=e?e:"").split("|")[0].trim();if(!n)return null;if("ru"!==t)return n;let l=s(n);return l?a(l):n}function o(e,t,n){let i,o=!(!(i=(null!=e?e:"").trim())||!(i=(i=(i=i.replace(/^\d{2,4}\s*-\s*/,"")).replace(/\s*'[^']*'/g,"").replace(/\s*\((?:CSR|FBC|ESP|DOUBLE HULL|SINGLE HULL)\)/gi,"")).replace(/\s+/g," ").trim().toLowerCase())||/^standard type/.test(i))?i:null;if(!o||o===r(t))return null;if("ru"===n){let e=l[o];return e&&e!==s(t)?a(e):null}return a(o)}},85452:(e,t,n)=>{n.d(t,{P:()=>l});function l(e,t){let n=e.pane??t.pane;return n?{...e,pane:n}:e}}}]);

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.