PageSourceSearch

https://brandjitsu.com/assets/Reviews-yEs8rWYC.js

js brandjitsu.com collected 2026-10-04 06:19:02 UTC 19,493 bytes, 1 lines download raw bytes

1import{j as e,z as a,ab as s,ac as t,a1 as i,ad as r,ae as n,af as l,X as d,ag as c,r as o}from"./vendor-DKpN-gn6.js";import{c as h,d as m,C as p,b as u,a as x}from"./card-C0twyzQf.js";import{B as g,s as j,h as v}from"./index-CjqWG2Gu.js";import{I as w}from"./input-BczSeZo5.js";import{T as f,a as C,b as y,c as N,d as D,e as S}from"./table-DbVpf6SP.js";import{B as R}from"./badge-BupusfKi.js";import{T as b,a as F,b as O,c as I}from"./tooltip-FmFdmcE2.js";import{D as E,a as k,c as A,d as T,e as U,f as z}from"./dialog-vWJa2GV8.js";import{L as J}from"./label-D75N5ztj.js";import{T as L}from"./textarea-DfQUl5Gc.js";import{S as P}from"./switch-Du5qmcD4.js";import{I as V}from"./ImportCSVDialog-DDdn8rq6.js";import{m as q}from"./mailchimpService-BSr-9f18.js";import"./auth-D0Oxv0aP.js";import"./ui-DbiJ6HOd.js";import"./alert-CTiCasZu.js";const B=({searchTerm:i,setSearchTerm:r,onAddClick:n,onImportClick:l})=>e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center gap-4",children:[e.jsxs("div",{children:[e.jsx(h,{children:"Reviews Management"}),e.jsx(m,{children:"Manage all customer reviews for BrandJitsu™"})]}),e.jsxs("div",{className:"ml-auto flex flex-col sm:flex-row gap-3",children:[e.jsxs("div",{className:"relative",children:[e.jsx(a,{className:"absolute left-2 top-1/2 transform -translate-y-1/2 text-gray-400",size:18}),e.jsx(w,{className:"pl-8 w-full",placeholder:"Search reviews...",value:i,onChange:e=>r(e.target.value)})]}),e.jsxs(g,{variant:"outline",onClick:l,children:[e.jsx(s,{size:16,className:"mr-2"})," Import CSV"]}),e.jsxs(g,{onClick:n,children:[e.jsx(t,{size:16,className:"mr-2"})," Add Review"]})]})]}),M=({status:a})=>{switch(a){case"approved":return e.jsx(R,{className:"bg-green-500",children:"Approved"});case"pending":return e.jsx(R,{className:"bg-yellow-500",children:"Pending"});case"rejected":return e.jsx(R,{className:"bg-red-500",children:"Rejected"});default:return null}},$=({review:a,handleToggleFeatured:s,openEditDialog:t,openDeleteDialog:l})=>e.jsxs("div",{className:"flex space-x-2",children:[e.jsx(b,{children:e.jsxs(F,{children:[e.jsx(O,{asChild:!0,children:e.jsxs(g,{variant:"ghost",size:"icon",onClick:()=>s(a),children:[e.jsx(i,{className:"h-4 w-4 "+(a.featured?"fill-yellow-500 text-yellow-500":"")}),e.jsx("span",{className:"sr-only",children:a.featured?"Unfeature":"Feature"})]})}),e.jsx(I,{children:e.jsx("p",{children:a.featured?"Unfeature":"Feature"})})]})}),e.jsx(b,{children:e.jsxs(F,{children:[e.jsx(O,{asChild:!0,children:e.jsxs(g,{variant:"ghost",size:"icon",onClick:()=>t(a),children:[e.jsx(r,{className:"h-4 w-4"}),e.jsx("span",{className:"sr-only",children:"Edit"})]})}),e.jsx(I,{children:e.jsx("p",{children:"Edit"})})]})}),e.jsx(b,{children:e.jsxs(F,{children:[e.jsx(O,{asChild:!0,children:e.jsxs(g,{variant:"ghost",size:"icon",onClick:()=>l(a),children:[e.jsx(n,{className:"h-4 w-4"}),e.jsx("span",{className:"sr-only",children:"Delete"})]})}),e.jsx(I,{children:e.jsx("p",{children:"Delete"})})]})})]}),_=({review:a,handleUpdateStatus:s})=>"pending"!==a.status?null:e.jsxs(e.Fragment,{children:[e.jsx(g,{variant:"outline",size:"sm",className:"h-8 w-8 p-0 text-green-600 hover:border-green-600 hover:text-green-600 hover:bg-transparent",title:"Ap
1prove",onClick:()=>s(a,"approved"),children:e.jsx(l,{size:16})}),e.jsx(g,{variant:"outline",size:"sm",className:"h-8 w-8 p-0 text-red-600 hover:border-red-600 hover:text-red-600 hover:bg-transparent",title:"Reject",onClick:()=>s(a,"rejected"),children:e.jsx(d,{size:16})})]}),G=()=>e.jsx(f,{children:e.jsx(C,{colSpan:6,className:"text-center py-8 text-gray-500",children:"No reviews found. Add a new review or adjust your search."})}),Q=()=>e.jsxs("div",{className:"flex justify-center items-center py-8",children:[e.jsx(c,{className:"animate-spin mr-2",size:20}),e.jsx("span",{children:"Loading reviews..."})]}),H=({reviews:a,loading:s,searchTerm:t,handleUpdateStatus:r,handleToggleFeatured:n,openEditDialog:l,openDeleteDialog:d})=>{const c=a.filter((e=>e.author.toLowerCase().includes(t.toLowerCase())||e.company.toLowerCase().includes(t.toLowerCase())||e.review.toLowerCase().includes(t.toLowerCase())||e.email&&e.email.toLowerCase().includes(t.toLowerCase())));return s?e.jsx(Q,{}):e.jsxs(y,{children:[e.jsx(N,{children:e.jsxs(f,{children:[e.jsx(D,{children:"Author"}),e.jsx(D,{children:"Title/Company"}),e.jsx(D,{className:"hidden md:table-cell",children:"Email"}),e.jsx(D,{className:"hidden lg:table-cell",children:"Review"}),e.jsx(D,{className:"text-center",children:"Featured"}),e.jsx(D,{children:"Status"}),e.jsx(D,{className:"w-[150px]",children:"Actions"})]})}),e.jsx(S,{children:c.length>0?c.map((a=>e.jsxs(f,{children:[e.jsx(C,{className:"font-medium",children:a.author}),e.jsx(C,{children:e.jsxs("div",{children:[e.jsx("p",{children:a.title}),e.jsx("p",{className:"text-sm text-gray-500",children:a.company})]})}),e.jsx(C,{className:"hidden md:table-cell",children:a.email||"-"}),e.jsx(C,{className:"hidden lg:table-cell",children:e.jsx("p",{className:"truncate max-w-[300px]",children:a.review})}),e.jsx(C,{className:"text-center",children:a.featured?e.jsx(i,{className:"text-yellow-500 fill-yellow-500 mx-auto",size:18}):null}),e.jsx(C,{children:e.jsx(M,{status:a.status})}),e.jsx(C,{children:e.jsxs("div",{className:"flex gap-2",children:[e.jsx(_,{review:a,handleUpdateStatus:r}),n&&e.jsx($,{review:a,handleToggleFeatured:n,openEditDialog:l,openDeleteDialog:d})]})})]},a.id))):e.jsx(G,{})})]})},K=({reviews:a,loading:s,searchTerm:t,onAddClick:i,onImportClick:r,handleUpdateStatus:n,handleToggleFeatured:l,openEditDialog:d,openDeleteDialog:c,setSearchTerm:o})=>e.jsxs(p,{className:"mb-6",children:[e.jsx(u,{children:e.jsx(B,{searchTerm:t,setSearchTerm:o,onAddClick:i,onImportClick:r})}),e.jsx(x,{children:e.jsx(H,{reviews:a,loading:s,searchTerm:t,handleUpdateStatus:n,handleToggleFeatured:l,openEditDialog:d,openDeleteDialog:c})})]}),W=({open:a,onOpenChange:s,formData:t,handleInputChange:i,handleSwitchChange:r,handleStatusChange:n,handleAddReview:l,resetForm:d,loading:o})=>e.jsx(E,{open:a,onOpenChange:s,children:e.jsxs(k,{className:"sm:max-w-[550px]",children:[e.jsxs(A,{children:[e.jsx(T,{children:"Add New Review"}),e.jsx(U,{children:"Create a new customer review for BrandJitsu™."})]}),e.jsxs("div",{className:"grid gap-4 py-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(J,{htmlFor:"review",children:"Review Text"}),e.jsx(L,{id:"review",name:"review",value:t.review,onChange:i,placeholder:"Customer review text...",className:"min-h-[120px]"})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(J,{htmlFor:"author",children:"Author Name"}),e.jsx(w,{id:"author",name:"author",value:t.author,onChange:i,placeholder:"John Smith"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(J,{htmlFor:"email",children:"Email"}),e.jsx(w,{id:"email",name:"email",type:"email",value:t.email,onChange:i,placeholder:"[email protected]"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(J,{htmlFor:"title",children:"Job Title"}),e.jsx(w,{id:"title",name:"title",value:t.title,onChange:i,placeholder:"CEO"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(J,{htmlFor:"company",children:"Company"}),e.jsx(w,{id:"company",name:"company",value:t.company,onChange:i,placeholder:"Acme Inc."})]})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(P,{id:"featured",checked:t.featured,onCheckedChange:r}),e.jsx(J,{htmlFor:"featured",children:"Featured Review"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(J,{children:"Status"}),e.jsxs("div",{className:"flex space-x-4",children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx("input",{type:"radio",id:"status-approved",name:"status",checked:"approved"===t.status,onChange:()=>n("approved")}),e.jsx("label",{htmlFor:"status-approved",children:"Approved"})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx("input",{type:"radio",id:"status-pending",name:"status",checked:"pending"===t.status,onChange:()=>n("pending")}),e.jsx("label",{htmlFor:"status-pending",children:"Pending"})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx("input",{type:"radio",id:"status-rejected",name:"status",checked:"rejected"===t.status,onChange:()=>n("rejected")}),e.jsx("label",{htmlFor:"status-rejected",children:"Rejected"})]})]})]})]}),e.jsxs(z,{children:[e.jsx(g,{variant:"outline",onClick:()=>{s(!1),d()},disabled:o,children:"Cancel"}),e.jsxs(g,{onClick:l,disabled:o,children:[o&&e.jsx(c,{className:"mr-2 h-4 w-4 animate-spin"}),"Add Review"]})]})]})}),X=({open:a,onOpenChange:s,formData:t,handleInputChange:i,handleSwitchChange:r,handleStatusChange:n,handleEditReview:l,resetForm:d,loading:o})=>e.jsx(E,{open:a,onOpenChange:s,children:e.jsxs(k,{className:"sm:max-w-[550
1px]",children:[e.jsxs(A,{children:[e.jsx(T,{children:"Edit Review"}),e.jsx(U,{children:"Update the details of this customer review."})]}),e.jsxs("div",{className:"grid gap-4 py-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(J,{htmlFor:"review",children:"Review Text"}),e.jsx(L,{id:"review",name:"review",value:t.review,onChange:i,placeholder:"Customer review text...",className:"min-h-[120px]"})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(J,{htmlFor:"author",children:"Author Name"}),e.jsx(w,{id:"author",name:"author",value:t.author,onChange:i,placeholder:"John Smith"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(J,{htmlFor:"email",children:"Email"}),e.jsx(w,{id:"email",name:"email",type:"email",value:t.email,onChange:i,placeholder:"[email protected]"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(J,{htmlFor:"title",children:"Job Title"}),e.jsx(w,{id:"title",name:"title",value:t.title,onChange:i,placeholder:"CEO"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(J,{htmlFor:"company",children:"Company"}),e.jsx(w,{id:"company",name:"company",value:t.company,onChange:i,placeholder:"Acme Inc."})]})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(P,{id:"featured",checked:t.featured,onCheckedChange:r}),e.jsx(J,{htmlFor:"featured",children:"Featured Review"})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(J,{children:"Status"}),e.jsxs("div",{className:"flex space-x-4",children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx("input",{type:"radio",id:"status-approved",name:"status",checked:"approved"===t.status,onChange:()=>n("approved")}),e.jsx("label",{htmlFor:"status-approved",children:"Approved"})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx("input",{type:"radio",id:"status-pending",name:"status",checked:"pending"===t.status,onChange:()=>n("pending")}),e.jsx("label",{htmlFor:"status-pending",children:"Pending"})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx("input",{type:"radio",id:"status-rejected",name:"status",checked:"rejected"===t.status,onChange:()=>n("rejected")}),e.jsx("label",{htmlFor:"status-rejected",children:"Rejected"})]})]})]})]}),e.jsxs(z,{children:[e.jsx(g,{variant:"outline",onClick:()=>{s(!1),d()},disabled:o,children:"Cancel"}),e.jsxs(g,{onClick:l,disabled:o,children:[o&&e.jsx(c,{className:"mr-2 h-4 w-4 animate-spin"}),"Save Changes"]})]})]})}),Y=({open:a,onOpenChange:s,review:t,handleDeleteReview:i,loading:r})=>{if(!t)return null;return e.jsx(E,{open:a,onOpenChange:s,children:e.jsxs(k,{children:[e.jsxs(A,{children:[e.jsx(T,{children:"Delete Review"}),e.jsx(U,{children:"Are you sure you want to delete this review? This action cannot be undone."})]}),e.jsxs("div",{className:"py-4",children:[e.jsx("p",{className:"font-semibold",children:t.author}),e.jsxs("p",{className:"text-sm text-gray-500 mb-2",children:[t.title,", ",t.company]}),t.email&&e.jsx("p",{className:"text-sm text-gray-500 mb-2",children:t.email}),e.jsxs("p",{className:"italic text-sm",children:['"',t.review.substring(0,100),'..."']})]}),e.jsxs(z,{children:[e.jsx(g,{variant:"outline",onClick:()=>s(!1),disabled:r,children:"Cancel"}),e.jsxs(g,{variant:"destructive",onClick:async()=>{await i()&&s(!1)},disabled:r,children:[r&&e.jsx(c,{className:"mr-2 h-4 w-4 animate-spin"}),"Delete"]})]})]})})},Z=({isAddDialogOpen:a,isEditDialogOpen:s,isDeleteDialogOpen:t,isImportDialogOpen:i,setIsAddDialogOpen:r,setIsEditDialogOpen:n,setIsDeleteDialogOpen:l,setIsImportDialogOpen:d,formData:c,handleInputChange:o,handleSwitchChange:h,handleStatusChange:m,handleAddReview:p,handleEditReview:u,handleDeleteReview:x,handleImportCSV:g,resetForm:j,cleanupReviewState:v,currentReview:w,loading:f})=>e.jsxs(e.Fragment,{children:[e.jsx(W,{open:a,onOpenChange:e=>{e||j(),r(e)},formData:c,handleInputChange:o,handleSwitchChange:h,handleStatusChange:m,handleAddReview:p,resetForm:j,loading:f}),e.jsx(X,{open:s,onOpenChange:()=>{n(!1),v()},formData:c,handleInputChange:o,handleSwitchChange:h,handleStatusChange:m,handleEditReview:u,resetForm:j,loading:f}),e.jsx(Y,{open:t,onOpenChange:l,review:w,handleDeleteReview:x,loading:f}),e.jsx(V,{open:i,onOpenChange:e=>{d(e)},handleImportCSV:g})]}),ee=e=>({id:e.id,review:e.review,author:e.author,email:e.email,title:e.title,company:e.company,featured:e.featured||!1,status:ae(e.status),created_at:e.created_at}),ae=e=>"approved"===e||"rejected"===e?e:"pending",se=()=>
1{const[e,a]=o.useState([]),[s,t]=o.useState(!1),{showError:i}=v(),r=o.useCallback((async()=>{t(!0);try{const e=await(async()=>{const{data:e,error:a}=await j.from("reviews").select("*").order("created_at",{ascending:!1});if(a)throw a;return e?e.map(ee):[]})();a(e)}catch(e){i("Error","Failed to load reviews. Please try again.")}finally{setTimeout((()=>{t(!1)}),0)}}),[i]);return{reviews:e,loading:s,setReviews:a,fetchReviews:r}},te=e=>{const[a,s]=o.useState(!1),{showSuccess:t,showError:i}=v();return{loading:a,handleAddReview:o.useCallback((async a=>{s(!0);try{const s=await(async e=>{const{data:a,error:s}=await j.from("reviews").insert([e]).select();if(s)throw s;return a&&a.length>0?ee(a[0]):null})(a);if(s){e((e=>[s,...e]));try{const e=a.author.split(" "),s=e[0]||"",t=e.slice(1).join(" ")||"";await q.subscribe({firstName:s,lastName:t,email:a.email,tags:["New Review"]})}catch(r){}return t("Review Added","The review has been added successfully."),!0}return!1}catch(n){return i("Error","Failed to add review. Please try again."),!1}finally{setTimeout((()=>{s(!1)}),0)}}),[e,t,i])}},ie=(e,a)=>{const[s,t]=o.useState(!1),{showSuccess:i,showError:r}=v();return{loading:s,handleEditReview:o.useCallback((async s=>{if(!a)return!1;const n=a.id;t(!0);try{const t=await(async(e,a)=>{const{error:s}=await j.from("reviews").update(a).eq("id",e);if(s)throw s;return!0})(n,s);if(t){const t={...a,...s};return e((e=>e.map((e=>e.id===n?t:e)))),i("Review Updated","The review has been updated successfully."),!0}return!1}catch(l){return r("Error","Failed to update review. Please try again."),!1}finally{t(!1)}}),[a,e,i,r]),handleUpdateStatus:o.useCallback((async(a,s)=>{t(!0);try{const t=await(async(e,a)=>{const{error:s}=await j.from("reviews").update({status:a}).eq("id",e);if(s)throw s;return!0})(a.id,s);return!!t&&(e((e=>e.map((e=>e.id===a.id?{...e,status:s}:e)))),i("Review "+("approved"===s?"Approved":"Rejected"),`The review has been ${"approved"===s?"approved":"rejected"} successfully.`),!0)}catch(n){return r("Error",`Failed to ${"approved"===s?"approve":"reject"} review. Please try again.`),!1}finally{t(!1)}}),[e,i,r]),handleToggleFeatured:o.useCallback((async a=>{t(!0);try{const s=!a.featured,t=await(async(e,a)=>{const{error:s}=await j.from("reviews").update({featured:a}).eq("id",e);if(s)throw s;return!0})(a.id,s);return!!t&&(e((e=>e.map((e=>e.id===a.id?{...e,featured:s}:e)))),i(s?"Review Featured":"Review Unfeatured",`The review has been ${s?"featured":"unfeatured"} successfully.`),!0)}catch(s){return r("Error","Failed to update featured status. Please try again."),!1}finally{t(!1)}}),[e,i,r])}},re=(e,a)=>{const[s,t]=o.useState(!1),{showSuccess:i,showError:r}=v();return{loading:s,handleDeleteReview:o.useCallback((async()=>{if(!a)return!1;const s=a.id;t(!0);try{return!!(await(async e=>{const{error:a}=await j.from("reviews").delete().eq("id",e);if(a)throw a;return!0})(s))&&(e((e=>e.filter((e=>e.id!==s)))),i("Review Deleted","The review has been deleted successfully."),!0)}catch(n){return r("Error","Failed to delete review. Please try again."),!1}finally{t(!1)}}),[a,e,i,r])}},ne=()=>{const{reviews:e,loading:a,setReviews:s,fetchReviews:t}=se(),{currentReview:i,setCurrentReview:r}=(()=>{const[e,a]=o.useState(null);return{currentReview:e,setCurrentReview:o.useCallback((e=>{a(e)}),[])}})(),{loading:n,handleAddReview:l}=te(s),{loading:d,handleEditReview:c,handleUpdateStatus:h,handleToggleFeatured:m}=ie(s,i),{loading:p,handleDeleteReview:u}=re(s,i);return{reviews:e,loading:a||n||d||p,currentReview:i,setCurrentReview:r,fetchReviews:t,handleAddReview:o.useCallback((async e=>l(e)),[l]),handleEditReview:c,handleDeleteReview:u,handleUpdateStatus:h,handleToggleFeatured:m}},le=()=>{const[a,s]=o.useState(""),{reviews:t,loading:i,currentReview:r,setCurrentReview:n,fetchReviews:l,handleAddReview:d,handleEditReview:c,handleDeleteReview:h,handleUpdateStatus:m,handleToggleFeatured:p}=ne(),{formData:u,handleInputChange:x,handleSwitchChange:g,handleStatusChange:j,resetForm:v,setInitialFormData:w}=(()=>{const[e,a]=o.useState({review:"",author:"",email:"",title:"",company:"",featured:!1,status:"pending"});return{formData:e,handleInputChange:e=>{const{name:s,value:t}=e.target;a((e=>({...e,[s]:t})))},handleSwitchChange:e=>{a((a=>({...a,featured:e})))},handleStatusChange:e=>{a((a=>({...a,status:e})))},resetForm:()=>{a({review:"",author:"",email:"",title:"",company:"",featured:!1,status:"pending"})},setInitialFormData:e=>{a({...e})}}})(),{isAddDialogOpen:f,isEditDialogOpen:C,isDeleteDialogOpen:y,isImportDialogOpen:N,setIsAddDialogOpen:D,setIsEditDialogOpen:S,setIsDeleteDialogOpen:R,setIsImportDialogOpen:b}=(()=>
1{const[e,a]=o.useState(!1),[s,t]=o.useState(!1),[i,r]=o.useState(!1),[n,l]=o.useState(!1);return{isAddDialogOpen:e,isEditDialogOpen:s,isDeleteDialogOpen:i,isImportDialogOpen:n,setIsAddDialogOpen:a,setIsEditDialogOpen:t,setIsDeleteDialogOpen:r,setIsImportDialogOpen:l}})();o.useEffect((()=>{l()}),[l]);const F=()=>{n(null),v()};return e.jsxs("div",{children:[e.jsx(K,{reviews:t,loading:i,searchTerm:a,setSearchTerm:s,onAddClick:()=>{v(),D(!0)},onImportClick:()=>{b(!0)},handleUpdateStatus:(e,a)=>m(e,a),handleToggleFeatured:e=>p(e),openEditDialog:e=>{const a=JSON.parse(JSON.stringify(e));n(a),w({review:a.review,author:a.author,email:a.email,title:a.title,company:a.company,featured:a.featured,status:a.status}),S(!0)},openDeleteDialog:e=>{const a=JSON.parse(JSON.stringify(e));n(a),R(!0)}}),e.jsx(Z,{isAddDialogOpen:f,isEditDialogOpen:C,isDeleteDialogOpen:y,isImportDialogOpen:N,setIsAddDialogOpen:D,setIsEditDialogOpen:S,setIsDeleteDialogOpen:R,setIsImportDialogOpen:b,formData:u,handleInputChange:x,handleSwitchChange:g,handleStatusChange:j,handleAddReview:async()=>{await d(u)&&(D(!1),v())},handleEditReview:async()=>{if(!r)return;await c(u)&&(S(!1),F())},handleDeleteReview:h,handleImportCSV:async e=>{const a=e.target.files?.[0];a&&b(!1)},resetForm:v,cleanupReviewState:F,currentReview:r,loading:i})]})},de=()=>e.jsx(le,{});export{de as default};

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.