PageSourceSearch

https://www.slate360.ai/_next/static/chunks/90910-c6af3c78e70a7cc8.js

js slate360.ai collected 2026-10-05 15:07:12 UTC 22,604 bytes, 1 lines download raw bytes

1!function(){try{var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},e=(new t.Error).stack;e&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[e]="08152383-5a7a-4805-b151-06aa31ed3c95",t._sentryDebugIdIdentifier="sentry-dbid-08152383-5a7a-4805-b151-06aa31ed3c95")}catch(t){}}();"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[90910],{5619:(t,e,n)=>{n.d(e,{EJ:()=>s,T3:()=>r,Yr:()=>u,pm:()=>a,tl:()=>d});var i=n(88254);let a="site-walk-offline-queue-changed",l=(0,i.y$)("slate360-site-walk-offline","offline_mutations"),o=(0,i.y$)("slate360-site-walk-offline","offline_blobs");function r(t){let e="undefined"!=typeof globalThis?globalThis.crypto:void 0;return e&&"function"==typeof e.randomUUID?"".concat(t,"-").concat(e.randomUUID()):"".concat(t,"-").concat(Date.now(),"-").concat(Math.random().toString(36).slice(2,10))}async function u(t){await (0,i.hZ)(t.id,{...t,createdAt:Date.now()},o),c()}async function d(t){var e;let n=Date.now(),a={...t,id:null!=(e=t.id)?e:r("mutation"),createdAt:n,updatedAt:n,retries:0,status:"pending"};return await (0,i.hZ)(a.id,a,l),c(),a}async function s(){let t=await (0,i.HP)(l),e=[];for(let n of t){let t=await (0,i.Jt)(n,l);t&&e.push(t)}return e.sort((t,e)=>t.createdAt-e.createdAt)}function c(){window.dispatchEvent(new CustomEvent(a))}},6470:(t,e,n)=>{n.d(e,{GO:()=>r,q7:()=>u,xE:()=>d});let i=null,a=!1;function l(t){return"number"==typeof t&&Number.isFinite(t)?Math.round(10*t)/10:null}function o(t){var e;let n="number"==typeof t.webkitCompassHeading&&null!=(e=t.webkitCompassHeading)?e:null;(null!==t.alpha||null!==t.beta||null!==t.gamma||null!==n)&&(i={alpha:t.alpha,beta:t.beta,gamma:t.gamma,compass:n,absolute:!!t.absolute,ts:Date.now()})}function r(){if(!a){a=!0;try{window.addEventListener("deviceorientationabsolute",o,{passive:!0}),window.addEventListener("deviceorientation",o,{passive:!0})}catch(t){}}}async function u(){if("undefined"==typeof DeviceOrientationEvent)return"unavailable";let t=DeviceOrientationEvent;if("function"!=typeof t.requestPermission)return r(),"granted";try{let e=await t.requestPermission();if("granted"===e)return r(),"granted";return"denied"}catch(t){return"denied"}}function d(){return!i||Date.now()-i.ts>5e3?null:{alpha:l(i.alpha),beta:l(i.beta),gamma:l(i.gamma),compass_heading:l(i.compass),absolute:i.absolute,updated_at:new Date(i.ts).toISOString()}}},23421:(t,e,n)=>{n.d(e,{B:()=>l,t:()=>o});var i=n(12115);let a="site-walk-capture-item-focus";function l(t){window.dispatchEvent(new CustomEvent(a,{detail:t}))}function o(t){(0,i.useEffect)(()=>{function e(e){var n,i;let a=e instanceof CustomEvent?e.detail:null;(n=a)&&"object"==typeof n&&(i=n.item)&&"object"==typeof i&&"string"==typeof i.id&&"string"==typeof i.session_id&&("captured"===n.reason||"pin"===n.reason||"selected"===n.reason)&&t(a)}return window.addEventListener(a,e),()=>window.removeEventListener(a,e)},[t])}},27542:(t,e,n)=>{n.d(e,{ue:()=>r});var i=n(6470);async function a(){return"undefined"!=typeof navigator&&navigator.geolocation?new Promise(t=>{navigator.geolocation.getCurrentPosition(e=>{var n,i;return t({latitude:e.coords.latitude,longitude:e.coords.longitude,accuracy_m:e.coords.accuracy,altitude_m:null!=(n=e.coords.altitude)?n:null,heading_deg:null!=(i=e.coords.heading)?i:null})},()=>t(null),{enableHighAccuracy:!0,timeout:8e3,maximumAge:3e4})}):null}let l=new Map;async function o(t,e){var n;let i="".concat(t.toFixed(2),":").concat(e.toFixed(2)),a=l.get(i);if(a&&Date.now()-a.fetchedAt<6e5)return a.weather;try{let a="https://api.open-meteo.com/v1/forecast?latitude=".concat(t,"&longitude=").concat(e,"&current=temperature_2m,relative_humidity_2m,weather_code,wind_speed_10m&temperature_unit=fahrenheit&wind_speed_unit=mph"),o=await fetch(a,{cache:"no-store"});if(!o.ok)throw Error("open-meteo ".concat(o.status));let r=null!=(n=(await o.json()).current)?n:{},u={temperature_f:r.temperature_2m,temperature_c:"number"==typeof r.temperature_2m?Math.round((r.temperature_2m-32)*5/9*10)/10:void 0,conditions:function(t){if("number"==typeof t){if(0===t)return"Clear";if(t<=3)return"Partly cloudy";if(t<=48)return"Fog";if(t<=57)return"Drizzle";if(t<=67)return"Rain";if(t<=77)return"Snow";if(t<=82)return"Rain showers";if(t<=86)return"Snow showers";if(t<=99)return"Thunderstorm"}}(r.weather_code),wind_mph:r.wind_speed_10m,humidity_pct:r.relative_humidity_2m,source:"open-meteo",fetched_at:new Date().toISOString()};return l.set(i,{fetchedAt:Date.now(),weather:u}),u}catch(t){return{source:"unavailable",fetched_at:new Date().toISOString()}}}async function r(){let t=await a(),e=t?await o(t.latitude,t.longitude):void 0,n={captured_at:new Date().toISOString(),device:{user_agent:"undefined"!=typeof navigator?navigator.userAgent:"unknown",platform:"undefined"!=typeof navigator?navigator.platform:"unknown",screen:{width:window.screen.width,height:window.screen.height}}};t&&(n.gps=t);let l=(0,i.xE)();return l&&(n.orientation=l),e&&(n.weather=e),n}},34873:(t,e,n)=>{n.d(e,{Hl:()=>r,Uo:()=>o,jI:()=>l});var i=n(66749),a=n(5619);async function l(t){var e,n,l,o;let r=null!=(e=t.clientItemId)?e:(0,a.T3)("item"),s=null!=(n=t.clientMutationId)?n:(0,a.T3)("mutation"),c=t.file?(0,a.T3)("blob"):void 0,f=t.file?{filename:t.file.name,contentType:t.file.type||"image/jpeg",fileSizeBytes:t.file.size}:void 0;t.file&&c&&await (0,a.Yr)({id:c,blob:t.file,filename:t.file.name,contentType:null!=(l=null==f?void 0:f.contentType)?l:"application/octet-stream",size:t.file.size});let p=(0,i.AL)({...t,clientItemId:r,clientMutationId:s,uploadState:t.file?"queued":"none"});return await (0,a.tl)({kind:"item_create",url:"/api/site-walk/items",method:"POST",body:p,sessionId:t.sessionId,localClientItemId:r,blobId:c,upload:f}),t.planTarget&&await u(t.sessionId,r,t.planTarget),d(p,r,s,null!=(o=t.previewUrl)?o:null)}async function o(t,e,n){var i;let l=null!=(i=e.client_item_id)?i:e.id.startsWith("item-")?e.id:void 0,o=(0,a.T3)("mutation"),r=new Date().toISOString();await (0,a.tl)({kind:"item_patch",url:"/api/site-walk/items/".concat(encodeURIComponent(e.id)),method:"PATCH",body:{...n,sync_state:"synced",client_mutation_id:o,local_updated_at:r},sessionId:t,localClientItemId:l})}async function r(t){return(await (0,a.EJ)()).filter(e=>"item_create"===e.kind&&e.sessionId===t&&e.body).map(t=>{var e,n,i;return d(t.body,null!=(n=t.localClientItemId)?n:t.id,String(null!=(i=null==(e=t.body)?void 0:e.client_mutation_id)?i:t.id),null)})}async function u(t,e,n){var i;let l=n.pinId?{item_id:"__client:".concat(e),pin_status:"active"}:{plan_sheet_id:n.planSheetId,item_id:"__client:".concat(e),x_pct:n.xPct,y_pct:n.yPct,pin_status:"active",pin_color:"blue",client_pin_id:null!=(i=n.clientPinId)?i:null};await (0,a.tl)({kind:"pin_mutation",url:n.pinId?"/api/site-walk/pins/".concat(encodeURIComponent(n.pinId)):"/api/site-walk/pins",method:n.pinId?"PATCH":"POST",body:l,sessionId:t,localClientItemId:e})}function d(t,e,n,i){var a,l;let o=new Date().toISOString(),r="string"==typeof t.local_created_at?t.local_created_at:o;return{id:e,session_id:String(null!=(a=t.session_id)?a:""),client_item_id:e,client_mutation_id:n,item_type:t.item_type,title:String(null!=(l=t.title)?l:""),description:"string"==typeof t.description?t.description:null,category:"string"==typeof t.category?t.category:null,priority:"medium",item_status:"open",assigned_to:null,due_date:"string"==typeof t.due_date?t.due_date:null,capture_mode:t.capture_mode,sync_state:"pending",upload_state:"queued"===t.upload_state?"queued":"none",markup_data:null,local_preview_url:i,created_at:r,updated_at:"string"==typeof t.local_updated_at?t.local_updated_at:o}}},49080:(t,e,n)=>{n.d(e,{G8:()=>a,I3:()=>d,Qd:()=>o,Y8:()=>u,ml:()=>r});var i=n(72055);let a="photo_angles";function l(t){if(!t||"object"!=typeof t)return[];let e=t[a];return Array.isArray(e)?e.map(s).filter(t=>!!t).slice(0,8):[]}function o(t){return l(null==t?void 0:t.metadata)}function r(t,e){var n,a;if(!t)return null;if(!e)return(0,i.$)(t);let o=(n=t.metadata,null!=(a=l(n).find(t=>
1t.id===e))?a:null);return o?o.previewUrl?o.previewUrl:!o.s3Key||t.id.startsWith("item-")?null:"/api/site-walk/items/".concat(encodeURIComponent(t.id),"/image?angle_id=").concat(encodeURIComponent(o.id)):null}function u(t,e){let n=t&&"object"==typeof t?{...t}:{},i=l(n).filter(t=>t.id!==e.id);return n[a]=[...i,e].slice(0,8),n}function d(t){let{previewUrl:e,...n}=t;return n}function s(t){var e;return t&&"object"==typeof t?"string"!=typeof t.id||"string"!=typeof t.createdAt?null:{id:t.id,label:"string"==typeof t.label&&t.label.trim()?t.label:"Angle",fileId:"string"==typeof t.fileId?t.fileId:null,s3Key:"string"==typeof t.s3Key?t.s3Key:null,fileName:"string"==typeof t.fileName?t.fileName:void 0,fileSize:"number"==typeof t.fileSize?t.fileSize:void 0,mimeType:"string"==typeof t.mimeType?t.mimeType:void 0,captureMode:"upload"===t.captureMode?"upload":"camera",uploadState:"queued"===(e=t.uploadState)||"uploading"===e||"uploaded"===e||"failed"===e?e:"uploaded",createdAt:t.createdAt,previewUrl:"string"==typeof t.previewUrl?t.previewUrl:void 0}:null}},66722:(t,e,n)=>{n.d(e,{Nw:()=>o,OB:()=>r,mG:()=>a,rG:()=>l});let i="photo_attachment_pins",a=4,l=0x1900000;function o(t){let e=function(t){if(!t||"object"!=typeof t)return[];let e=t[i];return Array.isArray(e)?e.filter(u).slice(0,20):[]}(null==t?void 0:t.metadata);return e.length>0?e:Array.isArray(null==t?void 0:t.photo_attachment_pins)?t.photo_attachment_pins.filter(u).slice(0,20):[]}function r(t,e){let n=t&&"object"==typeof t?{...t}:{};return n[i]=e,n}function u(t){return!!t&&"object"==typeof t&&"string"==typeof t.id&&"number"==typeof t.xPct&&"number"==typeof t.yPct&&"string"==typeof t.label&&"string"==typeof t.note&&"string"==typeof t.createdAt&&Array.isArray(t.files)&&t.files.every(d)}function d(t){return!!t&&"object"==typeof t&&"string"==typeof t.id&&"string"==typeof t.name&&"number"==typeof t.size&&"string"==typeof t.type}},66749:(t,e,n)=>{async function i(t){let e=t instanceof Blob?await t.arrayBuffer():t;return Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",e))).map(t=>t.toString(16).padStart(2,"0")).join("")}async function a(t,e){let n=await fetch("/api/site-walk/upload",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filename:e.name,contentType:e.type||"image/jpeg",sessionId:t,fileSizeBytes:e.size})}),i=await n.json().catch(()=>null);if(!n.ok||!(null==i?void 0:i.uploadUrl)||!i.s3Key){var a;throw Error(null!=(a=null==i?void 0:i.error)?a:"Upload preflight failed")}return{uploadUrl:i.uploadUrl,s3Key:i.s3Key,fileId:i.fileId}}async function l(t){let e=t.metadata;if(!t.file||e.content_sha256)return t;try{return{...t,metadata:{...t.metadata,content_sha256:await i(t.file)}}}catch(e){return t}}async function o(t){var e;let n=r(await l(t)),i=await fetch("/api/site-walk/items",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)}),a=await i.json().catch(()=>null);if(!i.ok||!(null==a?void 0:a.item))throw Error(null!=(e=null==a?void 0:a.error)?e:"Could not save item");let o=a.item.id;return t.file&&o&&!String(o).startsWith("item-")&&fetch("/api/site-walk/items/".concat(encodeURIComponent(o),"/verify-hash"),{method:"POST"}).catch(()=>void 0),a.item}function r(t){var e,n,i,a,l,o,r,u,d,s,c;let f=t.metadata,p=(c=f.gps)&&"object"==typeof c&&"number"==typeof c.latitude&&"number"==typeof c.longitude?f.gps:null;return{session_id:t.sessionId,item_type:t.itemType,title:t.title,description:t.description,file_id:null!=(i=t.fileId)?i:null,s3_key:null!=(a=t.s3Key)?a:null,latitude:null!=(l=null==p?void 0:p.latitude)?l:null,longitude:null!=(o=null==p?void 0:p.longitude)?o:null,weather:null!=(r=f.weather)?r:null,metadata:{...t.metadata,file_size:null==(e=t.file)?void 0:e.size,mime_type:null==(n=t.file)?void 0:n.type},capture_mode:t.captureMode,client_item_id:null!=(u=t.clientItemId)?u:null,client_mutation_id:null!=(d=t.clientMutationId)?d:null,sync_state:"queued"===t.uploadState?"pending":"synced",local_created_at:new Date().toISOString(),local_updated_at:new Date().toISOString(),upload_state:null!=(s=t.uploadState)?s:"none",upload_progress:"queued"===t.uploadState?0:100*!!t.s3Key}}n.d(e,{AL:()=>r,KR:()=>o,a$:()=>a}),n(27542)},71015:(t,e,n)=>{n.d(e,{Il:()=>l,Ms:()=>i,RK:()=>r,cs:()=>u,rA:()=>o,ym:()=>a});let i=["low","medium","high","critical"],a=["open","in_progress","resolved","verified","closed","na"],l=["Safety","Quality","Progress","Defect"],o=["Safety","Quality","Schedule","RFI","Observation","Punch List","Coordination","Progress","Other"],r=["General","Electrical","Plumbing","HVAC","Framing","Concrete","Painting","Flooring","Drywall","Roofing","Fire Protection","Steel","Site Work","Millwork","Low Voltage","Other"];function u(t){var e,n,i,a,l,r;let u=o.includes(t.category)?t.category:"Observation";return{title:t.title,classification:u,trade:null!=(e=t.trade)?e:"",tags:function(t){var e;let n=null==(e=t.category)?void 0:e.trim(),i=Array.isArray(t.tags)?t.tags:[];return Array.from(new Set((i.length>0?i:n?[n]:[]).map(t=>
1t.trim()).filter(Boolean)))}(t),itemRelationship:null!=(n=t.item_relationship)?n:"standalone",beforeItemId:null!=(i=t.before_item_id)?i:"",costImpact:null===t.cost_estimate?"":String(t.cost_estimate),priority:t.priority,status:t.item_status,assignedTo:null!=(a=t.assigned_to)?a:"",dueDate:null!=(l=t.due_date)?l:"",notes:null!=(r=t.description)?r:""}}},72055:(t,e,n)=>{n.d(e,{$:()=>a});let i=new Set(["photo","photo_360"]);function a(t){return t&&i.has(t.item_type)?t.local_preview_url?t.local_preview_url:t.id.startsWith("item-")?null:"/api/site-walk/items/".concat(encodeURIComponent(t.id),"/image"):null}},78921:(t,e,n)=>{function i(t){return{title:t.title,description:t.notes,category:t.classification||null,trade:t.trade||null,tags:l(t.tags),before_item_id:t.beforeItemId||null,item_relationship:t.itemRelationship||"standalone",priority:t.priority,item_status:t.status,assigned_to:t.assignedTo||null,due_date:t.dueDate||null,cost_estimate:o(t.costImpact),sync_state:"synced"}}function a(t,e){return{...t,title:e.title,description:e.notes,category:e.classification||null,trade:e.trade||null,tags:l(e.tags),before_item_id:e.beforeItemId||null,item_relationship:e.itemRelationship||"standalone",priority:e.priority,item_status:e.status,assigned_to:e.assignedTo||null,due_date:e.dueDate||null,cost_estimate:o(e.costImpact),sync_state:"pending",updated_at:new Date().toISOString()}}function l(t){return Array.isArray(t)?t.filter(t=>"string"==typeof t).map(t=>t.trim()).filter(Boolean):[]}function o(t){if(!t.trim())return null;let e=Number(t.replace(/[$,]/g,""));return Number.isFinite(e)&&e>=0?e:null}n.d(e,{Si:()=>i,Z5:()=>a})},90910:(t,e,n)=>{n.d(e,{i:()=>h});var i=n(12115),a=n(34873);function l(){return"undefined"!=typeof navigator&&!navigator.onLine}async function o(t,e,n){try{if(l()||e.id.startsWith("item-"))return void await (0,a.Uo)(t,e,n);if(!(await fetch("/api/site-walk/items/".concat(encodeURIComponent(e.id)),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)})).ok)throw Error("Item patch failed")}catch(i){await (0,a.Uo)(t,e,n)}}var r=n(66722),u=n(23421),d=n(66749),s=n(5619),c=n(49080);async function f(t){let{sessionId:e,item:n,file:i,previewUrl:a,captureMode:l,onLocalItem:o}=t,r=new Date().toISOString(),u={id:(0,s.T3)("angle"),label:"Angle ".concat((0,c.Qd)(n).length+2),fileName:i.name,fileSize:i.size,mimeType:i.type||"image/jpeg",captureMode:l,uploadState:_()?"queued":"uploading",createdAt:r,previewUrl:a};if(o({...n,metadata:(0,c.Y8)(n.metadata,u),sync_state:"pending",updated_at:r}),_()||n.id.startsWith("item-")){let t={...u,uploadState:"queued"};return await m(e,n,t),o({...n,metadata:(0,c.Y8)(n.metadata,t),sync_state:"pending",updated_at:new Date().toISOString()}),t}try{var f;let t=await (0,d.a$)(e,i);if(!(await fetch(t.uploadUrl,{method:"PUT",headers:{"Content-Type":i.type||"image/jpeg"},body:i})).ok)throw Error("Angle upload failed");await y(t.fileId);let a={...u,fileId:null!=(f=t.fileId)?f:null,s3Key:t.s3Key,uploadState:"uploaded"},l=(0,c.Y8)(n.metadata,(0,c.I3)(a)),r=await p(n.id,l);return o({...r,metadata:(0,c.Y8)(r.metadata,a),sync_state:"synced",updated_at:new Date().toISOString()}),a}catch(i){let t={...u,uploadState:"failed"};return await m(e,n,t),o({...n,metadata:(0,c.Y8)(n.metadata,t),sync_state:"pending",updated_at:new Date().toISOString()}),t}}async function p(t,e){var n;let i=await fetch("/api/site-walk/items/".concat(encodeURIComponent(t)),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({metadata:e,sync_state:"synced"})}),a=await i.json().catch(()=>null);if(!i.ok||!(null==a?void 0:a.item))throw Error(null!=(n=null==a?void 0:a.error)?n:"Angle metadata save failed");return a.item}async function m(t,e,n){let i=(0,c.Y8)(e.metadata,(0,c.I3)(n));await (0,a.Uo)(t,e,{metadata:i,sync_state:"synced"})}async function y(t){t&&await fetch("/api/slatedrop/complete",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fileId:t})}).catch(()=>void 0)}function _(){return"undefined"!=typeof navigator&&!navigator.onLine}var g=n(78921),w=n(71015);function h(t){let{sessionId:e,projectId:n}=t,[d,s]=(0,i.useState)([]),[c,p]=(0,i.useState)([]),[m,y]=(0,i.useState)(null),[_,h]=(0,i.useState)(null),[I,k]=(0,i.useState)("idle"),[T,A]=(0,i.useState)("idle"),[C,O]=(0,i.useState)(null),D=(0,i.useRef)(!1),U=(0,i.useRef)(null),j=(0,i.useMemo)(()=>b(d,m),[m,d]),P=(0,i.useCallback)(t=>{D.current=!1,y(t.id),h((0,w.cs)(t)),k("idle"),A("idle"),O(null)},[]);function E(t){h(e=>e?{...e,...t}:e),"string"==typeof t.title&&t.title.trim()&&sessionStorage.setItem("site-walk:last-title:".concat(e),t.title.trim()),D.current=!0}async function R(){U.current&&(clearTimeout(U.current),U.current=null),j&&_&&D.current&&await N(j.id,_)}async function N(t,n){if(!j)return;k("saving");let i=(0,g.Si)(n);try{var o;if(l()||t.startsWith("item-")){await (0,a.Uo)(e,j,i);let t=(0,g.Z5)(j,n);D.current=!1,s(e=>S(e,t)),k("saved");return}let r=await fetch("/api/site-walk/items/".concat(encodeURIComponent(t)),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)}),u=await r.json().catch(()=>null);if(!r.ok||!(null==u?void 0:u.item))throw Error(null!=(o=null==u?void 0:u.error)?o:"Autosave failed");D.current=!1,s(t=>S(t,u.item)),k("saved")}catch(l){await (0,a.Uo)(e,j,i);let t=(0,g.Z5)(j,n);D.current=!1,s(e=>S(e,t)),k("saved")}}async function z(){var t,i,a,l;if(!j||!(null==_?void 0:_.notes.trim()))return;let o=_.notes;A("formatting"),O(null);let r=await fetch("/api/site-walk/notes/format",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({rawText:_.notes,item_id:j.id,session_id:e,project_id:n})}),u=await r.json().catch(()=>null);if(402===r.status){A("blocked");let e=null==u||null==(t=u.metering)?void 0:t.limit;O(e?"AI credits exhausted for this month (".concat(e," credit cap)."):null!=(i=null==u?void 0:u.error)?i:"AI credits exhausted.");return}let d=null!=(a=null==u?void 0:u.cleanedNotes)?a:null==u?void 0:u.formattedText;if(!r.ok||!d){A("error"),O(null!=(l=null==u?void 0:u.error)?l:"AI formatting failed.");return}let s=function(t){if(!t)return;let e=t.toLowerCase();return"safety"===e?"Safety":"progress"===e?"Progress":"issue"===e?"Punch List":"question"===e?"RFI":"observation"===e?"Observation":"qual
1ity"===e?"Quality":"schedule"===e?"Schedule":"Other"}(null==u?void 0:u.suggestedClassification);E({notes:d,tags:function(t,e){let n=null==e?void 0:e.trim();return n?Array.from(new Set([...t,n])):t}(_.tags,null==u?void 0:u.suggestedClassification),priority:function(t){let e=null==t?void 0:t.toLowerCase();return"low"===e||"medium"===e||"high"===e||"critical"===e?e:"medium"}(null==u?void 0:u.suggestedPriority),...s?{classification:s}:{}}),await q(j,o,null==u?void 0:u.provenance),A("idle"),O("AI cleaned the notes and suggested tags. Autosave will run next.")}async function q(t,n,i){var a;let l={...null!=(a=t.metadata)?a:{},note_raw:n,ai_formatted:!0,ai_provenance:null!=i?i:{provider:"unknown",policy:"format_only_no_new_facts"}};s(e=>S(e,{...t,metadata:l,sync_state:"pending",updated_at:new Date().toISOString()})),await o(e,t,{metadata:l,sync_state:"synced"})}async function x(t,n){let i=d.find(e=>e.id===t||e.client_item_id===t);if(!i)return;let a=Date.now();s(t=>S(t,{...i,markup_data:n,sync_state:"pending",updated_at:new Date().toISOString()})),await o(e,i,{markup_data:n,markup_revision:a,sync_state:"synced"})}async function L(t,n){let i=d.find(e=>e.id===t||e.client_item_id===t);if(!i)return;let a=(0,r.OB)(i.metadata,n),l={...i,metadata:a,photo_attachment_pins:n,sync_state:"pending",updated_at:new Date().toISOString()};s(t=>S(t,l)),await o(e,i,{metadata:a,sync_state:"synced"})}async function H(t,n,i,a){let l=b(d,t);return l?f({sessionId:e,item:l,file:n,previewUrl:i,captureMode:a,onLocalItem:t=>s(e=>S(e,t))}):null}return(0,u.t)((0,i.useCallback)(t=>{if(s(e=>S(e,t.item)),!1===t.focus)return void y(e=>{if(e!==t.item.id&&t.item.client_item_id){let n=d.find(t=>t.id===e);if((null==n?void 0:n.client_item_id)===t.item.client_item_id)return t.item.id}return e});P(t.item)},[d,P])),(0,i.useEffect)(()=>{let t=!1;return fetch("/api/site-walk/items?session_id=".concat(encodeURIComponent(e)),{cache:"no-store"}).then(t=>t.json()).then(e=>{t||s(t=>{var n;return v(t,null!=(n=e.items)?n:[])})}).catch(()=>{t||s(t=>t)}),(0,a.Hl)(e).then(e=>{!t&&e.length>0&&s(t=>v(t,e))}),()=>{t=!0}},[e]),(0,i.useEffect)(()=>{if(!n)return void p([]);let t=!1;return fetch("/api/projects/".concat(encodeURIComponent(n),"/site-walk/assignees"),{cache:"no-store"}).then(t=>t.json()).then(e=>{var n;t||p(null!=(n=e.assignees)?n:[])}).catch(()=>{t||p([])}),()=>{t=!0}},[n]),(0,i.useEffect)(()=>{if(_&&j&&D.current)return U.current&&clearTimeout(U.current),k("dirty"),U.current=setTimeout(()=>{N(j.id,_)},1600),()=>{U.current&&clearTimeout(U.current)}},[j,_]),{items:d,assignees:c,activeItem:j,draft:_,saveState:I,aiState:T,aiMessage:C,selectItem:P,deselectItem:function(){y(null)},patchDraft:E,flushCurrentDraft:R,saveMarkupData:x,savePhotoAttachmentPins:L,savePhotoAngle:H,formatNotesWithAi:z}}function v(t,e){return e.reduce((t,e)=>S(t,e),t)}function b(t,e){var n;return e&&null!=(n=t.find(t=>t.id===e||t.client_item_id===e))?n:null}function S(t,e){let n=t=>t.id===e.id||!!t.client_item_id&&t.client_item_id===e.client_item_id;return(t.some(n)?t.map(t=>{var i;return n(t)?{...t,...e,local_preview_url:null!=(i=e.local_preview_url)?i:t.local_preview_url}:t}):[e,...t]).sort((t,e)=>Date.parse(e.created_at)-Date.parse(t.created_at))}}}]);

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.