PageSourceSearch

https://remoterobotic.com/assets/portal.assets-L5WanCI2.js

js remoterobotic.com collected 2026-10-10 02:29:48 UTC 13,571 bytes, 1 lines download raw bytes

1import{r as i,j as e}from"./document-pdf-owziZWSN.js";import{X as L,ab as u,ac as b,a8 as m,L as O,ae as C,b9 as g,bt as y,aa as z}from"./index-RIU-bIUQ.js";import{A as G}from"./arrow-left-hrXcXpOs.js";const _=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]],M=L("image",_);const $=[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]],q=L("upload",$),Q=u({method:"GET"}).handler(b("fdcf7aab3b40b6760d9aa39f80a9bbf85ff72cf3ec095f32440c0b10d7f57ff5")),J=u({method:"POST"}).handler(b("4a9758ed2a99dcd88421f6bfbe0af22f8c95ab218436d1270075014b5c8543ab")),V=u({method:"POST"}).handler(b("f4e7c5a10d90bafc1cea8bdddb58ce7b46bee8697c90c4ff0715a06f17961374")),W=u({method:"POST"}).handler(b("61e6d65d65b3fa9288f569b41066ad82a7cb5012050c829bc6acb6b394cc4574")),S=[{id:"business-cards",label:"Business cards"},{id:"decks",label:"Presentations"},{id:"brochures",label:"Brochures"},{id:"logos",label:"Logos"},{id:"other",label:"Other"}];function K(a){return a<1024?`${a} B`:a<1024*1024?`${(a/1024).toFixed(1)} KB`:`${(a/(1024*1024)).toFixed(1)} MB`}function re(){const a=m(Q),p=m(J),x=m(V),r=m(W),[v,P]=i.useState([]),[E,j]=i.useState(!0),[o,N]=i.useState("all"),[l,w]=i.useState(!1),[k,f]=i.useState(null),d=i.useCallback(async()=>{j(!0);try{const t=await a();P(t.assets)}finally{j(!1)}},[a]);i.useEffect(()=>{d()},[d]);async function I(t){if(t.preventDefault(),l)return;const s=new FormData(t.currentTarget),n=s.get("file");if(!n||n.size===0){f("Pick a file.");return}w(!0),f(null);try{const c=await n.arrayBuffer(),R=new Uint8Array(c);let A="";for(let h=0;h<R.length;h++)A+=String.fromCharCode(R[h]);const U=btoa(A);await p({data:{title:String(s.get("title")||n.name),description:String(s.get("description")||""),category:s.get("category"),filename:n.name,mimeType:n.type||"application/octet-stream",fileBase64:U}}),t.target.reset(),await d()}catch(c){f(c instanceof Error?c.message:"Upload failed.")}finally{w(!1)}}async function F(t){try{const{url:s}=await r({data:{id:t}});window.open(s,"_blank","noopener,noreferrer")}catch(s){alert(s instanceof Error?s.message:"Could not generate download link.")}}async function T(t,s){if(confirm(`Delete "${s}"? This cannot be undone.`))try{await x({data:{id:t}}),await d()}catch(n){alert(n instanceof Error?n.message:"Delete failed.")}}const D=o==="all"?v:v.filter(t=>t.category===o);return e.jsxs("div",{className:"mx-auto max-w-6xl px-6 py-10",children:[e.jsxs(O,{to:"/portal",className:"inline-flex items-center gap-1.5 font-mono text-[10px] uppercase tracking-[0.18em] text-muted-foreground hover:text-brand-navy",children:[e.jsx(G,{className:"size-3"})," Portal"]}),e.jsx("h1",{className:"mt-3 text-3xl font-black uppercase tracking-tight text-brand-navy",children:"Asset library"}),e.jsx(Y,{}),e.jsx(Z,{}),e.jsxs("div",{className:"mt-8 border border-border bg-white p-6",children:[e.jsx("h2",{className:"text-sm font-bold uppercase tracking-[0.16em] text-brand-navy",children:"Upload new asset"}),e.jsxs("form",{onSubmit:I,className:"mt-4 grid gap-3 sm:grid-cols-2",children:[e.jsx("input",{name:"title",required:!0,maxLength:200,placeholder:"Title",className:"border-2 border-brand-navy/15 px-3 py-2 text-sm focus:border-brand-teal focus:outline-none"}),e.jsx("select",{name:"category",required:!0,defaultValue:"brochures",className:"border-2 border-brand-navy/15 bg-white px-3 py-2 text-sm focus:border-brand-teal focus:outline-none",children:S.map(t=>e.jsx("option",{value:t.id,children:t.label},t.id))}),e.jsx("input",{name:"description",maxLength:1e3,placeholder:"Description (optional)",className:"border-2 border-brand-navy/15 px-3 py-2 text-sm focus:border-brand-teal focus:outline-none sm:col-span-2"}),e.jsx("input",{name:"file",type:"file",required:!0,className:"border-2 border-brand-navy/15 bg-white px-3 py-2 text-sm file:mr-3 file:border-0 file:bg-brand-navy file:px-3 file:py-1.5 file:text-xs file:font-bold file:uppercase file:tracking-[0.14em] file:text-white sm:col-span-2"}),k&&e.jsx("p",{className:"text-xs text-destructive sm:col-span-2",children:k}),e.jsxs("button",{type:"submit",disabled:l,className:"inline-flex h-10 items-center justify-center gap-2 bg-brand-navy px-4 text-[11px] font-bold uppercase tracking-[0.16em] text-white hover:bg-brand-teal disabled:opacity-50 sm:col-span-2 sm:justify-self-start sm:px-6",children:[l?e.jsx(C,{className:"size-4 animate-spin"}):e.jsx(q,{className:"size-4"}),l?"Uploading…":"Upload"]})]})]}),e.jsxs("div",{className:"mt-10 flex flex-wrap items-center gap-2 border-b border-border pb-2",children:[e.jsx("button",{onClick:()=>N("all"),className:`px-3 py-1.5 text-[11px] font-bold uppercase tracking-[0.14em] ${o==="all"?"bg-brand-navy text-white":"text-muted-foreground hover:text-brand-navy"}`,children:"All"}),S.map(t=>e.jsx("button",{onClick:()=>N(t.id),className:`px-3 py-1.5 text-[11px] font-bold uppercase tracking-[0.14em] ${o===t.id?"bg-brand-navy text-white":"text-muted-foreground hover:text-brand-navy"}`,children:t.label},t.id))]}),e.jsx("div",{className:"mt-6 grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:E?e.
1jsx("div",{className:"col-span-full flex justify-center py-12",children:e.jsx(C,{className:"size-6 animate-spin text-brand-teal"})}):D.length===0?e.jsx("p",{className:"col-span-full py-12 text-center text-sm text-muted-foreground",children:"No assets yet. Upload one above."}):D.map(t=>e.jsxs("div",{className:"flex flex-col border border-border bg-white p-4",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"flex size-10 shrink-0 items-center justify-center bg-brand-navy/5 text-brand-navy",children:t.mime_type.startsWith("image/")?e.jsx(M,{className:"size-5"}):e.jsx(g,{className:"size-5"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"truncate text-sm font-bold text-brand-navy",children:t.title}),e.jsxs("p",{className:"font-mono text-[10px] uppercase tracking-[0.14em] text-muted-foreground",children:[t.category.replace("-"," ")," · ",K(t.size_bytes)]}),t.description&&e.jsx("p",{className:"mt-1 line-clamp-2 text-xs text-muted-foreground",children:t.description})]})]}),e.jsxs("div",{className:"mt-4 flex items-center gap-2",children:[e.jsxs("button",{onClick:()=>F(t.id),className:"inline-flex flex-1 items-center justify-center gap-1.5 bg-brand-navy px-3 py-2 text-[11px] font-bold uppercase tracking-[0.14em] text-white hover:bg-brand-teal",children:[e.jsx(y,{className:"size-3.5"})," Download"]}),e.jsx("button",{onClick:()=>T(t.id,t.title),className:"inline-flex items-center justify-center border border-border bg-white p-2 text-muted-foreground hover:border-destructive hover:text-destructive","aria-label":"Delete",children:e.jsx(z,{className:"size-3.5"})})]})]},t.id))})]})}const B=[{id:"dfr-canada-2026",title:"Drone as First Responder — Canadian Public Safety Buyer's Guide",category:"Public Safety",edition:"2026",filename:"DFR-Canada-Buyers-Guide-RemoteRobotic.pdf",url:"/downloads/dfr-canad
1a-buyers-guide-2026.pdf",blurb:"DJI Dock 3 + Matrice 4D/4TD, Hextronics docks, Parrot ANAFI UKR, SFOC / Advanced RPAS pathways, six-step program design."},{id:"ndaa-blue-uas-canada-2026",title:"NDAA & Blue UAS — Canadian Procurement Buyer's Guide",category:"Sovereign / NDAA",edition:"2026",filename:"NDAA-BlueUAS-Canada-Buyers-Guide-RemoteRobotic.pdf",url:"/downloads/ndaa-blue-uas-canada-buyers-guide-2026.pdf",blurb:"Section 848, Blue UAS vs. Green UAS, Parrot / Teal / FreeFly / Inspired Flight / Ascent / Vantage / DeltaQuad / Kraken / ClearPath."},{id:"lidar-canada-2026",title:"LiDAR Systems — Canadian Buyer's Guide",category:"Industrial",edition:"2026",filename:"LiDAR-Canada-Buyers-Guide-RemoteRobotic.pdf",url:"/downloads/lidar-buyers-guide-canada-2026.pdf",blurb:"Aerial, handheld, and mobile LiDAR for mining, energy, survey, and construction — DJI Zenmuse L3, GreenValley, YellowScan, LiDAR360."},{id:"lidar-vs-photogrammetry-canada-2026",title:"LiDAR vs Photogrammetry — Canadian Decision Guide",category:"Industrial",edition:"2026",filename:"LiDAR-vs-Photogrammetry-Canada-RemoteRobotic.pdf",url:"/downloads/lidar-vs-photogrammetry-canada-2026.pdf",blurb:"When LiDAR wins, when photogrammetry wins, and how to spec a hybrid program by site and deliverable."}],H=["All","Public Safety","Industrial","Sovereign / NDAA"];function Y(){const[a,p]=i.useState("All"),x=a==="All"?B:B.filter(r=>r.category===a);return e.jsxs("div",{className:"mt-8 border border-border bg-white p-6",children:[e.jsxs("div",{className:"flex flex-wrap items-end justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-sm font-bold uppercase tracking-[0.16em] text-brand-navy",children:"Buyer's guides"}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Branded sales PDFs for prospects. Filter, download, and forward."})]}),e.jsx("div",{className:"flex flex-wrap gap-1",children:H.map(r=>e.jsx("button",{type:"button",onClick:()=>p(r),className:`px-3 py-1.5 text-[11px] font-bold uppercase tracking-[0.14em] ${a===r?"bg-brand-navy text-white":"text-muted-foreground hover:text-brand-navy"}`,children:r},r))})]}),e.jsx("div",{className:"mt-5 grid gap-3 sm:grid-cols-2",children:x.map(r=>e.jsxs("div",{className:"flex flex-col border border-border bg-white p-4",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"flex size-10 shrink-0 items-center justify-center bg-brand-navy/5 text-brand-navy",children:e.jsx(g,{className:"size-5"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("p",{className:"font-mono text-[10px] uppercase tracking-[0.14em] text-brand-teal",children:[r.category," · ",r.edition]}),e.jsx("p",{className:"mt-1 text-sm font-bold leading-tight text-brand-navy",children:r.title}),e.jsx("p",{className:"mt-2 text-xs text-muted-foreground",children:r.blurb})]})]}),e.jsxs("a",{href:r.url,download:r.filename,target:"_blank",rel:"noopener noreferrer",className:"mt-4 inline-flex items-center justify-center gap-1.5 bg-brand-navy px-3 py-2 text-[11px] font-bold uppercase tracking-[0.14em] text-white hover:bg-brand-teal",children:[e.jsx(y,{className:"size-3.5"})," Download PDF"]})]},r.id))})]})}const X=[{id:"roc-dock3-m4td-2026",title:"Remote Operations Centre + DJI Dock 3 / Matrice 4TD — One Pager",audience:"Security · Critical Infrastructure",filename:"RemoteRobotic-ROC-Dock3-Matrice4TD-OnePager.pdf",url:"/downloads/remote-robotic-roc-dock3-matrice4td-onepager.pdf",blurb:"What the ROC is, how it works with Dock 3 / Matrice 4TD, key capabilities, and use cases: remote site monitoring, alarm response, perimeter patrols, critical infrastructure."},{id:"roc-dock3-construction-2026",title:"Remote Operations Centre + DJI Dock 3 / Matrice 4D or 4TD — Construction One Pager",audience:"Construction · Infrastructure",filename:"RemoteRobotic-ROC-Dock3-Construction-OnePager.pdf",url:"/downloads/remote-robotic-roc-dock3-construction-onepager.pdf",blurb:"ROC + Dock 3 / Matrice 4D or 4TD for construction: autonomous progress capture, after-hours site security, thermal night flight, safety records, and multi-site GC programs."},{id:"events-flyer-2026",title:"Remote Robotic — Industrial Events Flyer (EN)",audience:"Industrial · Events",filename:"RemoteRobotic-Industrial-Events-Flyer-2026.pdf",url:"/downloads/remote-robotic-events-flyer-2026.pdf",blurb:"Single-page handout for mining, energy, surveying, and construction events. Who we are, what we deliver, partners, and QR codes for quote + website."},{id:"brochure-industrielle-2026-fr",title:"Remote Robotic — Brochure Industrielle (FR)",audience:"Industriel · Événements",filename:"RemoteRobotic-Brochure-Industrielle-2026.pdf",url:"/downloads/remote-robotic-brochure-industrielle-2026-fr.pdf",blurb:"Version française de la brochure industrielle — pour le Québec et l'Est du Canada. Équipe francophone au Québec, intégrateur canadien, QR codes vers soumission et site web."}];function Z(){return e.jsxs("div",{className:"mt-8 border border-border bg-white p-6",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-sm font-bold uppercase tracking-[0.16em] text-brand-navy",children:"Sales collateral"}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Branded flyers and handouts for events and in-person meetings."})]}),e.jsx("div",{className:"mt-5 grid gap-3 sm:grid-cols-2",children:X.map(a=>e.jsxs("div",{className:"flex flex-col border border-border bg-white p-4",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"flex size-10 shrink-0 items-center justify-center bg-brand-navy
1/5 text-brand-navy",children:e.jsx(g,{className:"size-5"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"font-mono text-[10px] uppercase tracking-[0.14em] text-brand-teal",children:a.audience}),e.jsx("p",{className:"mt-1 text-sm font-bold leading-tight text-brand-navy",children:a.title}),e.jsx("p",{className:"mt-2 text-xs text-muted-foreground",children:a.blurb})]})]}),e.jsxs("a",{href:a.url,download:a.filename,target:"_blank",rel:"noopener noreferrer",className:"mt-4 inline-flex items-center justify-center gap-1.5 bg-brand-navy px-3 py-2 text-[11px] font-bold uppercase tracking-[0.14em] text-white hover:bg-brand-teal",children:[e.jsx(y,{className:"size-3.5"})," Download PDF"]})]},a.id))})]})}export{re as component};

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.