PageSourceSearch

https://repsshield.com/assets/team-BYOL3eP8.js

js repsshield.com collected 2026-10-02 02:02:07 UTC 33,389 bytes, 11 lines download raw bytes

1import{z as he,aa as I,dm as Oe,dn as se,dp as ae,dq as X,dr as Xe,ds as ze,as as $e,dt as re,at as te,aN as Q,am as ue,ar as He,j as e,av as ge,aw as P,ax as L,ay as U,az as T,N as le,du as R,aA as ne,a0 as Be,a1 as Ye,a2 as _e,a3 as We,a4 as ie,B as u,aL as v,R as qe,Y as Je,V as Ke,b7 as je,bX as be,b1 as pe,bM as Ge,b2 as fe,b3 as Ne,b4 as ye,b5 as ve,aP as we,bk as Ze,ao as Qe,ah as es,bx as p,aR as ss,e as y,b0 as as,aq as ke,b_ as Ce,cX as Te,bo as F,b$ as Re,c0 as Me,c1 as Se,c2 as De,c3 as Ee,c4 as Ae,c5 as Ie,au as ee,aI as Pe,C as J,b as rs,c as ts,aS as ls,d as K,dv as de,dw as ns,aT as is,aU as ds,aV as ce,aW as E,aX as cs,aY as A,G as os,I as xs,J as Y,U as z,K as _,p as ms,dx as hs}from"./index-DGo-vssZ.js";import{r as V,u as us}from"./vendor-Qgthw7N1.js";import{C as $}from"./checkbox-i5ygXx_L.js";import{P as gs}from"./schema-D6YQS4W0.js";import{U as Le}from"./user-plus-CP6I1wqA.js";import{c as js,d as bs}from"./differenceInMonths-Cb0HIyJb.js";import{K as ps}from"./key-BMkuqIiD.js";/**
2 * @license lucide-react v0.453.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 fs=he("Clock3",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16.5 12",key:"1aq6pp"}]]);/**
7 * @license lucide-react v0.453.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 Ue=he("Undo2",[["path",{d:"M9 14 4 9l5-5",key:"102s5s"}],["path",{d:"M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11",key:"f3b9sd"}]]);function Ns(s){return a=>{const m=(s?Math[s]:Math.trunc)(a);return m===0?0:m}}function ys(s,a){return+I(s)-+I(a)}function vs(s,a,r){const m=ys(s,a)/1e3;return Ns(r==null?void 0:r.roundingMethod)(m)}function ws(s,a,r){const m=Xe(),l=(r==null?void 0:r.locale)??m.locale??Oe,c=2520,o=js(s,a);if(isNaN(o))throw new RangeError("Invalid time value");const n=Object.assign({},r,{addSuffix:r==null?void 0:r.addSuffix,comparison:o});let t,i;o>0?(t=I(a),i=I(s)):(t=I(s),i=I(a));const x=vs(i,t),f=(se(i)-se(t))/1e3,h=Math.round((x-f)/60);let d;if(h<2)return r!=null&&r.includeSeconds?x<5?l.formatDistance("lessThanXSeconds",5,n):x<10?l.formatDistance("lessThanXSeconds",10,n):x<20?l.formatDistance("lessThanXSeconds",20,n):x<40?l.formatDistance("halfAMinute",0,n):x<60?l.formatDistance("lessThanXMinutes",1,n):l.formatDistance("xMinutes",1,n):h===0?l.formatDistance("lessThanXMinutes",1,n):l.formatDistance("xMinutes",h,n);if(h<45)return l.formatDistance("xMinutes",h,n);if(h<90)return l.formatDistance("aboutXHours",1,n);if(h<ae){const g=Math.round(h/60);return l.formatDistance("aboutXHours",g,n)}else{if(h<c)return l.formatDistance("xDays",1,n);if(h<X){const g=Math.round(h/ae);return l.formatDistance("xDays",g,n)}else if(h<X*2)return d=Math.round(h/X),l.formatDistance("aboutXMonths",d,n)}if(d=bs(i,t),d<12){const g=Math.round(h/X);return l.formatDistance("xMonths",g,n)}else{const g=d%12,N=Math.trunc(d/12);return g<3?l.formatDistance("aboutXYears",N,n):g<9?l.formatDistance("overXYears",N,n):l.formatDistance("almostXYears",N+1,n)}}function G(s,a){return ws(s,ze(s),a)}const ks=/^[a-zA-Z0-9\s\-\/&()]+$/,Cs=$e({email:te().email("Invalid email address"),teamMemberRole:te().min(1,"Role is required").max(100,"Role must be 100 characters or less").regex(ks,"Role contains invalid characters"),canCreateTimeEntries:re().default(!0),canViewAllTimeEntries:re().default(!1)});function Z({onInvite:s,isInviting:a,triggerLabel:r="Invite Team Member",triggerClassName:m}){const[l,c]=V.useState(!1),[o,n]=V.useState(!1),t=Q(),i=ue({resolver:He(Cs),defaultValues:{teamMemberRole:"",canCreateTimeEntries:!0,canViewAllTimeEntries:!1}}),x=d=>{c(d),d||(n(!1),i.reset())},f=e.jsxs(u,{className:m,onClick:()=>c(!0),children:[e.jsx(Le,{className:"w-4 h-4 mr-2"}),r]}),h=e.jsx(ge,{...i,children:e.jsxs("form",{onSubmit:i.handleSubmit(d=>{s(d),x(!1)}),className:v("space-y-6",t&&"px-4 pb-4 pt-2"),children:[e.jsx(P,{control:i.control,name:"email",render:({field:d})=>e.jsxs(L,{children:[e.jsx(U,{children:"Email Address *"}),e.jsx(T,{children:e.jsx(le,{className:t?"h-12 rounded-xl text-base":void 0,placeholder:"[email protected]",...d})}),e.jsx(R,{children:"The team member will receive an invitation email at this address"}),e.jsx(ne,{})]})}),e.jsx(P,{control:i.control,name:"teamMemberRole",render:({field:d})=>e.jsxs(L,{children:[e.jsx(U,{children:"Team Member Role *"}),o?e.jsxs(e.Fragment,{children:[e.jsx(T,{children:e.jsxs("div",{className:"flex gap-2",children:[e.jsx(le,{className:t?"h-12 rounded-xl text-base":void 0,placeholder:"e.g., Landscaper, Property Ins
11pector",...d,autoFocus:!0}),e.jsx(u,{type:"button",variant:"outline",className:t?"h-12 rounded-xl":void 0,onClick:()=>{n(!1),d.onChange("")},children:"Cancel"})]})}),e.jsx(R,{children:"Max 100 characters. Letters, numbers, spaces, hyphens, slashes, and parentheses only."})]}):e.jsxs(e.Fragment,{children:[e.jsxs(Be,{onValueChange:g=>{g==="custom"?(n(!0),d.onChange("")):d.onChange(g)},value:d.value,children:[e.jsx(T,{children:e.jsx(Ye,{className:t?"h-12 rounded-xl text-base":void 0,children:e.jsx(_e,{placeholder:"Select a role"})})}),e.jsxs(We,{className:t?"z-[120]":void 0,children:[gs.map(g=>e.jsx(ie,{value:g,children:g},g)),e.jsx(ie,{value:"custom",className:"text-blue-600 font-medium",children:"Create Custom Role"})]})]}),e.jsx(R,{children:"Choose a common role or create a custom one"})]}),e.jsx(ne,{})]})}),e.jsxs("div",{className:v("space-y-4 border bg-gray-50",t?"rounded-2xl p-4":"rounded-lg p-4"),children:[e.jsx("div",{className:"font-medium text-sm",children:"Permissions"}),e.jsx(P,{control:i.control,name:"canCreateTimeEntries",render:({field:d})=>e.jsxs(L,{className:"flex flex-row items-start space-x-3 space-y-0",children:[e.jsx(T,{children:e.jsx($,{checked:d.value,onCheckedChange:d.onChange})}),e.jsxs("div",{className:"space-y-1 leading-none",children:[e.jsx(U,{children:"Can Create Time Entries"}),e.jsx(R,{children:"Allow this team member to record their own time entries"})]})]})}),e.jsx(P,{control:i.control,name:"canViewAllTimeEntries",render:({field:d})=>e.jsxs(L,{className:"flex flex-row items-start space-x-3 space-y-0",children:[e.jsx(T,{children:e.jsx($,{checked:d.value,onCheckedChange:d.onChange})}),e.jsxs("div",{className:"space-y-1 leading-none",children:[e.jsx(U,{children:"Can View All Time Entries"}),e.jsx(R,{children:"Allow viewing all workspace time entries (not just their own)"})]})]})})]}),e.jsxs(qe,{className:t?"rounded-2xl":void 0,children:[e.jsx(Je,{className:"h-4 w-4"}),e.jsx(Ke,{children:"The invitation will expire in 7 days. Team members will receive an email with instructions to accept the invitation."})]}),t?e.jsxs("div",{className:"flex gap-2 pt-1",children:[e.jsx(u,{type:"button",variant:"outline",className:"h-11 flex-1 rounded-xl",onClick:()=>x(!1),children:"Cancel"}),e.jsx(u,{type:"submit",disabled:a,className:"h-11 flex-1 rounded-xl bg-emerald-600 hover:bg-emerald-700",children:a?"Sending...":"Send Invitation"})]}):e.jsxs(je,{children:[e.jsx(u,{type:"button",variant:"outline",onClick:()=>x(!1),children:"Cancel"}),e.jsx(u,{type:"submit",disabled:a,children:a?"Sending...":"Send Invitation"})]})]})});return t?e.jsxs(e.Fragment,{children:[f,e.jsxs(be,{open:l,onOpenChange:x,title:"Invite Team Member",className:"bg-gray-50 dark:bg-gray-950",children:[e.jsx("p",{className:"px-4 pt-3 text-sm text-muted-foreground",children:"Send an invitation to add a new member to your REPSShield workspace."}),h]})]}):e.jsxs(pe,{open:l,onOpenChange:x,children:[e.jsx(Ge,{asChild:!0,children:f}),e.jsxs(fe,{className:"max-w-2xl",children:[e.jsxs(Ne,{children:[e.jsx(ye,{children:"Invite Team Member"}),e.jsx(ve,{children:"Send an invitation to add a new member to your REPSShield workspace"})]}),h]})]})}function Ve({open:s,onOpenChange:a,member:r,onUpdate:m,isUpdating:l}){const c=Q(),o=ue({defaultValues:{canCreateTimeEntries:r.canCreateTimeEntries,canViewAllTimeEntries:r.canViewAllTimeEntries}});V.useEffect(()=>{o.reset({canCreateTimeEntries:r.canCreateTimeEntries,canViewAllTimeEntries:r.canViewAllTimeEntries})},[r,o]);const n=x=>{m(r.id,x),a(!1)},t=()=>r.firstName&&r.lastName?`${r.firstName} ${r.lastName}`:r.email,i=e.jsx(ge,{...o,children:e.jsxs("form",{onSubmit:o.handleSubmit(n),className:v("space-y-6",c&&"px-4 pb-4 pt-2"),children:[e.jsxs("div",{className:"space-y-4",children:[e.jsx(P,{control:o.control,name:"canCreateTimeEntries",render:({field:x})=>e.jsxs(L,{className:v("flex flex-row items-start space-x-3 space-y-0 border p-4",c?"rounded-2xl bg-white dark:bg-gray-900":"rounded-md"),children:[e.jsx(T,{children:e.jsx($,{checked:x.value,onCheckedChange:x.onChange})}),e.jsxs("div",{className:"space-y-1 leading-none",children:[e.jsx(U,{children:"Can Create Time Entries"}),e.jsx(R,{children:"Allow this team member to record their own time entries"})]})]})}),e.jsx(P,{control:o.control,name:"canViewAllTimeEntries",render:({field:x})=>e.jsxs(L,{className:v("flex flex-row items-start space-x-3 space-y-0 border p-4",c?"rounded-2xl bg-white dark:bg-gray-900":"rounded-md"),children:[e.jsx(T,{children:e.jsx($,{checked:x.value,onCheckedChange:x.onChange})}),e.jsxs("div",{className:"space-y-1 leading-none",children:[e.jsx(U,{children:"Can View All Time Entries"}),e.jsx(R,{children:"Allow viewing all workspace time entries (not just their own)"})]})]})})]}),c?e.jsxs("div",{className:"flex gap-2 pt-1",children:[e.jsx(u,{type:"button",variant:"outline",className:"h-11 flex-1 rounded-xl",onClick:()=>a(!1),children:"Cancel"}),e.jsx(u,{type:"submit",disabled:l,className:"h-11 flex-1 rounded-xl bg-emerald-600 hover:bg-emerald-700",children:l?"Saving...":"Save Changes"})]}):e.jsxs(je,{children:[e.jsx(u,{type:"button",variant:"outline",onClick:()=>a(!1),children:"Cancel"}),e.jsx(u,{type:"submit",disabled:l,children:l?"Saving...":"Save Changes"})]})]})});return c?e.jsxs(be,{open:s,onOpenChange:a,title:"Edit Permissions",className:"bg-gray-50 dark:bg-gray-950",children:[e.jsxs("p",{className:"px-4 pt-3 text-sm text-muted-foreground",children:["Update permissions for ",t(),"."]}),i]}):e.jsx(pe,{open:s,onOpenChange:a,children:e.jsxs(fe,{children:[e.jsxs(Ne,{children:[e.jsx(ye,{children:"Edit Permissions"}),e.jsxs(ve,{children:["Update permissions for ",t()]})]}),i]})})}function oe(s){return`${s.firstName||""} ${s.lastName||""}`.trim()||s.email}function Ts(s){var a,r;return(s.firstName||s.lastName)&&`${((a=s.firstName)==null?void 0:a[0])||""}${((r=s.lastName)==null?void 0:r[0])||""}`.toUpperCase()||s.email[0].toUpperCase()}function W({label:s,value:a,tone:r}){const m={green:"bg-emerald-50 text-emerald-700 dark:bg-emerald-950/40 dark:text-emerald-300",blue:"bg-blue-50 text-blue-700 dark:bg-blue-950/40 dark:text-blue-300",red:"bg-red-50 text-red-700 dark:bg-red-950/40 dark:text-red-300"};return e.jsxs("div",{className:"rounded-2xl border border-gray-100 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900",children:[e.jsx("div",{className:v("mb-3 inline-flex rounded-full px-2.5 py-1 text-xs font-bold",m[r]),children:s}),e.jsx("p",{className:"text-3xl font-black tracking-tight text-gray-950 dark:text-white",children:a})]})}function q({icon:s,title:a,description:r}){return e.jsxs("div",{className:"rounded-3xl border border-dashed border-gray-200 bg-white px-6 py-12 text-center shadow-sm dark:border-gray-800 dark:bg-gray-900",children:[e.jsx("div",{className:"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-2xl bg-gray-100 text-gray-400 dark:bg-gray-800 dark:text-gray-500",children:e.jsx(s,{className:"h-7 w-7"})}),e.jsx("h3",{className:"text-base font-bold text-gray-950 dark:text-white",children:a}),e.jsx("p",{className:"mt-2 text-sm leading-6 text-gray-500 dark:text-gray-400",children:r})]})}function Rs({onBack:s}){return e.jsx("div",{className:"min-h-screen bg-gray-50 pb-24 pt-3 dark:bg-background",children:e.jsxs("div",{className:"mx-auto flex w-full container-mobile flex-col gap-4",children:[e.jsx(we,{title:"Team",subtitle:"Workspace members and access",onBack:s}),e.jsx("section",{className:"rounded-3xl border border-gray-100 bg-white p-5 shadow-sm dark:border-gray-800 dark:bg-gray-900",children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex-1",children:[e.jsx(p,{className:"h-3 w-24 rounded-full"}),e.jsx(p,{className:"mt-3 h-7 w-44 rounded-xl"}),e.jsx(p,{className:"mt-3 h-4 w-full rounded-lg"}),e.jsx(p,{className:"mt-2 h-4 w-3/4 rounded-lg"})]}),e.jsx(p,{className:"h-12 w-12 rounded-2xl"})]})}),e.jsx("section",{className:"grid grid-cols-3 gap-2",children:[1,2,3].map(a=>e.jsxs("div",{className:"rounded-2xl border border-gray-100 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900",children:[e.jsx(p,{className:"h-6 w-14 roun
11ded-full"}),e.jsx(p,{className:"mt-4 h-8 w-10 rounded-xl"})]},a))}),e.jsx("div",{className:"rounded-2xl bg-gray-200/70 p-1 dark:bg-gray-800/80",children:e.jsx("div",{className:"grid grid-cols-3 gap-1",children:[1,2,3].map(a=>e.jsx(p,{className:"h-10 rounded-xl"},a))})}),e.jsx("div",{className:"space-y-3",children:[1,2,3].map(a=>e.jsxs("div",{className:"rounded-3xl border border-gray-100 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(p,{className:"h-12 w-12 rounded-2xl"}),e.jsxs("div",{className:"flex-1",children:[e.jsx(p,{className:"h-5 w-36 rounded-lg"}),e.jsx(p,{className:"mt-2 h-3 w-52 rounded-lg"}),e.jsxs("div",{className:"mt-4 flex gap-2",children:[e.jsx(p,{className:"h-6 w-20 rounded-full"}),e.jsx(p,{className:"h-6 w-16 rounded-full"})]})]})]}),e.jsxs("div",{className:"mt-4 grid grid-cols-2 gap-2",children:[e.jsx(p,{className:"h-11 rounded-2xl"}),e.jsx(p,{className:"h-11 rounded-2xl"})]})]},a))})]})})}function xe({member:s,suspended:a=!1,onRemove:r,isRemoving:m,onUpdatePermissions:l,isUpdatingPermissions:c,onRestore:o,isRestoring:n}){const[t,i]=V.useState(!1);return e.jsxs("article",{className:v("rounded-3xl border bg-white p-4 shadow-sm dark:bg-gray-900",a?"border-red-100 dark:border-red-900/70":"border-gray-100 dark:border-gray-800"),children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:v("flex h-12 w-12 shrink-0 items-center justify-center rounded-2xl text-sm font-black",a?"bg-red-50 text-red-700 dark:bg-red-950/40 dark:text-red-300":"bg-emerald-50 text-emerald-700 dark:bg-emerald-950/40 dark:text-emerald-300"),children:Ts(s)}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("h3",{className:"truncate text-base font-bold text-gray-950 dark:text-white",children:oe(s)}),e.jsx("p",{className:"truncate text-xs font-medium text-gray-500 dark:text-gray-400",children:s.email})]}),a&&e.jsx(y,{className:"shrink-0 bg-red-100 text-red-700 hover:bg-red-100 dark:bg-red-950/50 dark:text-red-300",children:"Suspended"})]}),e.jsxs("div",{className:"mt-3 flex flex-wrap gap-2",children:[e.jsx(y,{variant:"secondary",className:"rounded-full bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-200",children:s.teamMemberRole||"Team Member"}),s.canCreateTimeEntries&&e.jsxs(y,{variant:"outline",className:"rounded-full border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-900 dark:bg-emerald-950/30 dark:text-emerald-300",children:[e.jsx(as,{className:"mr-1 h-3 w-3"})," Create"]}),s.canViewAllTimeEntries&&e.jsxs(y,{variant:"outline",className:"rounded-full border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-900 dark:bg-blue-950/30 dark:text-blue-300",children:[e.jsx(ke,{className:"mr-1 h-3 w-3"})," View All"]})]}),e.jsxs("p",{className:"mt-3 text-xs text-gray-500 dark:text-gray-400",children:["Joined ",G(new Date(s.createdAt),{addSuffix:!0})]})]})]}),e.jsx("div",{className:"mt-4 grid grid-cols-2 gap-2",children:a?e.jsxs(u,{type:"button",className:"col-span-2 h-11 rounded-2xl bg-emerald-600 hover:bg-emerald-700",disabled:n,onClick:()=>
11o(s.id),children:[e.jsx(Ue,{className:"mr-2 h-4 w-4"}),n?"Restoring...":"Restore Member"]}):e.jsxs(e.Fragment,{children:[e.jsx(u,{type:"button",variant:"outline",className:"h-11 rounded-2xl",onClick:()=>i(!0),children:"Permissions"}),e.jsxs(Ce,{children:[e.jsx(Te,{asChild:!0,children:e.jsxs(u,{type:"button",variant:"outline",className:"h-11 rounded-2xl border-red-200 text-red-600 hover:bg-red-50 hover:text-red-700",disabled:m,children:[e.jsx(F,{className:"mr-2 h-4 w-4"})," Remove"]})}),e.jsxs(Re,{children:[e.jsxs(Me,{children:[e.jsx(Se,{children:"Remove Team Member?"}),e.jsxs(De,{children:["Remove ",oe(s)," from your workspace. This action cannot be undone."]})]}),e.jsxs(Ee,{children:[e.jsx(Ae,{children:"Cancel"}),e.jsx(Ie,{className:"bg-red-600 hover:bg-red-700",onClick:()=>r(s.id),children:"Remove"})]})]})]})]})}),e.jsx(Ve,{open:t,onOpenChange:i,member:s,onUpdate:l,isUpdating:c})]})}function Ms({invitation:s,onCancel:a,onRemove:r,onResend:m,isCancelling:l,isRemoving:c,isResending:o}){const n=new Date(s.expiresAt)<new Date;return e.jsxs("article",{className:"rounded-3xl border border-gray-100 bg-white p-4 shadow-sm dark:border-gray-800 dark:bg-gray-900",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"flex h-12 w-12 shrink-0 items-center justify-center rounded-2xl bg-blue-50 text-blue-700 dark:bg-blue-950/40 dark:text-blue-300",children:e.jsx(ee,{className:"h-5 w-5"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("h3",{className:"truncate text-base font-bold text-gray-950 dark:text-white",children:s.email}),e.jsx("p",{className:"mt-1 text-xs font-medium text-gray-500 dark:text-gray-400",children:s.teamMemberRole})]}),e.jsx(y,{className:v("shrink-0 rounded-full",n?"bg-red-100 text-red-700 hover:bg-red-100 dark:bg-red-950/40 dark:text-red-300":"bg-amber-100 text-amber-700 hover:bg-amber-100 dark:bg-amber-950/40 dark:text-amber-300"),children:n?"Expired":s.status})]}),e.jsxs("div",{className:"mt-3 grid grid-cols-2 gap-2 text-xs text-gray-500 dark:text-gray-400",children:[e.jsxs("div",{className:"rounded-2xl bg-gray-50 p-3 dark:bg-gray-800",children:[e.jsx("p",{className:"font-semibold text-gray-900 dark:text-white",children:"Sent"}),e.jsx("p",{className:"mt-1",children:G(new Date(s.createdAt),{addSuffix:!0})})]}),e.jsxs("div",{className:"rounded-2xl bg-gray-50 p-3 dark:bg-gray-800",children:[e.jsx("p",{className:"font-semibold text-gray-900 dark:text-white",children:"Expires"}),e.jsx("p",{className:"mt-1",children:G(new Date(s.expiresAt),{addSuffix:!0})})]})]})]})]}),e.jsxs("div",{className:"mt-4 flex gap-2",children:[n?e.jsxs(u,{type:"button",variant:"outline",className:"h-11 flex-1 rounded-2xl text-blue-600",disabled:o,onClick:()=>m(s),children:[e.jsx(Pe,{className:"mr-2 h-4 w-4"})," Resend"]}):s.status==="pending"?e.jsx(u,{type:"button",variant:"outline",className:"h-11 flex-1 rounded-2xl text-amber-700",disabled:l||c,onClick:()=>a(s.id),children:"Cancel"}):null,e.jsxs(u,{type:"button",variant:"outline",className:"h-11 flex-1 rounded-2xl border-red-200 text-red-600 hover:bg-red-50 hover:text-red-700",disabled:c||l,onClick:()=>r(s.id),children:[e.jsx(F,{className:"mr-2 h-4 w-4"})," Remove"]})]})]})}function Ss({members:s,membersLoading:a,invitations:r,invitationsLoading:m,isAccountOwner:l,inviteMember:c,isInviting:o,updatePermissions:n,isUpdatingPermissions:t,removeMember:i,isRemovingMember:x,cancelInvitation:f,isCancellingInvitation:h,removeInvitation:d,isRemovingInvitation:g,restoreMember:N,isRestoringMember:M,onResend:S}){const[,D]=us(),[b,O]=V.useState("members"),k=s.filter(j=>j.status!=="suspended"),C=s.filter(j=>j.status==="suspended"),w=()=>{D("/dashboard"),ss("/dashboard")},Fe=[{value:"members",label:"Active",count:k.length},{value:"invitations",label:"Invites",count:r.length},{value:"suspended",label:"Paused",count:C.length}];return a?e.jsx(Rs,{onBack:w}):e.jsx("div",{className:"min-h-screen bg-gray-50 pb-24 pt-3 dark:bg-background",children:e.jsxs("div",{className:"mx-auto flex w-full container-mobile flex-col gap-4",children:[e.jsx(we,{title:"Team",subtitle:"Workspace members and access",onBack:w,rightAction:l?e.jsx(Z,{onInvite:c,isInviting:o,triggerLabel:"Invite",triggerClassName:"h-10 rounded-2xl bg-emerald-600 px-4 hover:bg-emerald-700"}):null}),e.jsx("section",{className:"rounded-3xl bg-gradient-to-br from-emerald-600 to-green-700 p-5 text-white shadow-lg shadow-emerald-900/10",children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-bold uppercase tracking-[0.2em] text-emerald-100",children:"Worksp
11ace"}),e.jsx("h2",{className:"mt-2 text-2xl text-white tracking-tight",children:"Team Access"}),e.jsx("p",{className:"mt-2 max-w-[18rem] text-sm leading-6 text-emerald-50",children:"Invite helpers, assign permissions, and keep REPS time entries tied to the right person."})]}),e.jsx("div",{className:"rounded-2xl bg-white/15 p-3 backdrop-blur",children:e.jsx(Ze,{className:"h-6 w-6"})})]})}),e.jsxs("section",{className:"grid grid-cols-3 gap-2",children:[e.jsx(W,{label:"Active",value:k.length,tone:"green"}),e.jsx(W,{label:"Invites",value:r.length,tone:"blue"}),e.jsx(W,{label:"Paused",value:C.length,tone:"red"})]}),e.jsx("div",{className:"rounded-2xl bg-gray-200/70 p-1 dark:bg-gray-800/80",children:e.jsx("div",{className:"grid grid-cols-3 gap-1",children:Fe.map(j=>e.jsxs("button",{type:"button",onClick:()=>O(j.value),className:v("flex h-10 items-center justify-center gap-1.5 rounded-xl text-xs font-bold transition active:scale-[0.98]",b===j.value?"bg-white text-gray-950 shadow-sm dark:bg-gray-950 dark:text-white":"text-gray-500 dark:text-gray-400"),children:[j.label,e.jsx("span",{className:"rounded-full bg-gray-100 px-1.5 py-0.5 text-[10px] dark:bg-gray-800",children:j.count})]},j.value))})}),b==="members"?e.jsx("div",{className:"space-y-3",children:k.length>0?k.map(j=>e.jsx(xe,{member:j,onRemove:i,isRemoving:x,onUpdatePermissions:(H,B)=>n({id:H,data:B}),isUpdatingPermissions:t,onRestore:N,isRestoring:M},j.id)):e.jsx(q,{icon:Le,title:"No team members yet",description:"Invite your first teammate to start sharing workspace access."})}):b==="invitations"?e.jsx("div",{className:"space-y-3",children:m?e.jsx("div",{className:"rounded-3xl border border-gray-100 bg-white p-6 text-center text-sm text-gray-500 dark:border-gray-800 dark:bg-gray-900",children:"Loading invitations..."}):r.length>0?r.map(j=>e.jsx(Ms,{invitation:j,onCancel:f,onRemove:d,onResend:S,isCancelling:h,isRemoving:g,isResending:o},j.id)):e.jsx(q,{icon:fs,title:"No pending invitations",description:"Invitations you send will appear here until accepted or expired."})}):e.jsx("div",{className:"space-y-3",children:C.length>0?C.map(j=>e.jsx(xe,{member:j,suspended:!0,onRemove:i,isRemoving:x,onUpdatePermissions:(H,B)=>n({id:H,data:B}),isUpdatingPermissions:t,onRestore:N,isRestoring:M},j.id)):e.jsx(q,{icon:Qe,title:"No suspended users",description:"Paused or suspended members will be listed here for restoration."})}),e.jsxs("button",{type:"button",onClick:w,className:"mb-2 flex items-center justify-between rounded-2xl border border-gray-100 bg-white p-4 text-left shadow-sm active:scale-[0.99] dark:border-gray-800 dark:bg-gray-900",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-bold text-gray-950 dark:text-white",children:"Back to dashboard"}),e.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400",children:"Return to your REPS overview"})]}),e.jsx(es,{className:"h-5 w-5 text-gray-400"})]})]})})}function me({member:s,onRemove:a,isRemoving:r,onUpdatePermissions:m,isUpdatingPermissions:l,onRestore:c,isRestoring:o}){const[n,t]=V.useState(!1),i=()=>s.firstName&&s.lastName?`${s.firstName} ${s.lastName}`:s.email,x=()=>s.firstName&&s.lastName?`${s.firstName[0]}${s.lastName[0]}`.toUpperCase():s.email[0].toUpperCase();return e.jsxs(J,{children:[e.jsx(rs,{className:"pb-3",children:e.jsxs("div",{className:"flex items-center space-x-3",children:[e.jsx("div",{className:"w-10 h-10 bg-blue-100 rounded-full flex items-center justify-center",children:e.jsx("span",{className:"text-sm font-semibold text-blue-700",children:x()})}),e.jsxs("div",{children:[e.jsx(ts,{className:"text-base",children:i()}),e.jsx(ls,{className:"text-sm",children:s.email})]})]})}),e.jsx(K,{className:"pt-0",children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("span",{className:"text-gray-600",children:"Role:"}),e.jsx(y,{variant:"secondary",className:"font-medium",children:s.teamMemberRole||"Team Member"})]}),e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("span",{className:"text-gray-600",children:"Joined:"}),e.jsx("span",{className:"font-medium",children:new Date(s.createdAt).toLocaleDateString()})]}),e.jsxs("div",{className:"flex flex-wrap gap-2 mt-2",children:[s.canCreateTimeEntries&&e.jsxs(y,{variant:"outline",className:"text-xs",children:[e.jsx(de,{className:"w-3 h-3 mr-1"}),"Create Entries"]}),s.canViewAllTimeEntries&&e.jsxs(y,{variant:"outline",className:"text-xs",children:[e.jsx(ke,{className:"w-3 h-3 mr-1"}),"View All"]})]})]})}),e.jsx(ns,{className:"flex gap-2 pt-4 border-t",children:c?e.jsxs(u,{variant:"default",size:"sm",className:"w-full bg-green-600 hover:bg-green-700",onClick:()=>c(s.id),disabled:o,children:[e.jsx(Ue,{className:"w-4 h-4 mr-2"}),o?"Restoring...":"Restore Member"]}):e.jsxs(e.Fragment,{children:[e.jsxs(u,{variant:"outline",size:"sm",className:"flex-1",onClick:()=>t(!0),children:[e.jsx(de,{className:"w-4 h-4 mr-2"}),"Edit Permissions"]}),e.jsxs(Ce,{children:[e.jsx(Te,{asChild:!0,children:e.jsxs(u,{variant:"outline",size:"sm",className:"flex-1 text-red-600 hover:bg-red-50 hover:text-red-600",disabled:r,children:[e.jsx(F,{className:"w-4 h-4 mr-2"}),r?"Removing...":"Remove"]})}),e.jsxs(Re,{children:[e.jsxs(Me,{children:[e.jsx(Se,{children:"Remove Team Member?"}),e.jsxs(De,{children:["Are you sure you want to remove"," ",i()," from your team? This action cannot be undone."]})]}),e.jsxs(Ee,{children:[e.jsx(Ae,{children:"Cancel"}),e.jsx(Ie,{onClick:()=>
11a(s.id),className:"bg-red-600 hover:bg-red-700",children:"Remove"})]})]})]})]})}),e.jsx(Ve,{open:n,onOpenChange:t,member:s,onUpdate:m,isUpdating:l})]})}function Ds({invitations:s,isLoading:a,onCancel:r,onRemove:m,onResend:l,isCancelling:c,isRemoving:o,isResending:n}){return a?e.jsx("div",{className:"text-center py-4",children:"Loading invitations..."}):s.length===0?e.jsxs("div",{className:"text-center py-8 text-gray-500",children:[e.jsx(ee,{className:"w-12 h-12 mx-auto mb-4 text-gray-300"}),e.jsx("p",{children:"No pending invitations"})]}):e.jsxs(is,{children:[e.jsx(ds,{children:e.jsxs(ce,{children:[e.jsx(E,{children:"Email"}),e.jsx(E,{children:"Role"}),e.jsx(E,{children:"Status"}),e.jsx(E,{children:"Expires"}),e.jsx(E,{children:"Sent"}),e.jsx(E,{className:"text-right",children:"Actions"})]})}),e.jsx(cs,{children:s.map(t=>{const i=new Date(t.expiresAt)<new Date;return e.jsxs(ce,{children:[e.jsx(A,{className:"font-medium",children:t.email}),e.jsx(A,{children:e.jsx(y,{variant:"outline",children:t.teamMemberRole})}),e.jsx(A,{children:e.jsx(y,{variant:t.status==="pending"&&!i?"secondary":"destructive",className:t.status==="pending"&&!i?"bg-yellow-100 text-yellow-800":t.status==="accepted"?"bg-green-100 text-green-800":"bg-red-100 text-red-800",children:i?"Expired":t.status})}),e.jsx(A,{children:new Date(t.expiresAt).toLocaleDateString()}),e.jsx(A,{children:new Date(t.createdAt).toLocaleDateString()}),e.jsx(A,{className:"text-right",children:e.jsxs("div",{className:"flex gap-2 justify-end",children:[i?e.jsxs(u,{variant:"outline",size:"sm",onClick:()=>l(t),disabled:n,className:"text-blue-600 hover:text-blue-700",children:[e.jsx(Pe,{className:"w-3 h-3 mr-1"}),"Resend"]}):t.status==="pending"?e.jsxs(u,{variant:"outline",size:"sm",onClick:()=>{confirm("Cancel this invitation? The email will remain in the list with 'cancelled' status.")&&r(t.id)},disabled:c||o,className:"text-yellow-600 hover:text-yellow-700",children:[e.jsx(F,{className:"w-3 h-3 mr-1"}),"Cancel"]}):null,e.jsxs(u,{variant:"outline",size:"sm",onClick:()=>{confirm("Permanently remove this invitation? This cannot be undone.")&&m(t.id)},disabled:o||c,className:"text-red-600 hover:text-red-700",children:[e.jsx(F,{className:"w-3 h-3 mr-1"}),"Remove"]})]})})]},t.id)})})]})}function Es({members:s,invitations:a,invitationsLoading:r,isAccountOwner:m,inviteMember:l,isInviting:c,updatePermissions:o,isUpdatingPermissions:n,removeMember:t,isRemovingMember:i,cancelInvitation:x,isCancellingInvitation:f,removeInvitation:h,isRemovingInvitation:d,restoreMember:g,isRestoringMember:N,onResend:M}){const S=s.filter(b=>b.status!=="suspended"),D=s.filter(b=>b.status==="suspended");return e.jsxs("div",{className:"max-w-7xl mx-auto p-6 space-y-8",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold text-gray-900",children:"Team Management"}),e.jsx("p",{className:"text-gray-600 mt-1",children:"Manage your team members, roles, and permissions for your REPSShield workspace"})]}),m&&e.jsx(Z,{onInvite:l,isInviting:c})]}),e.jsxs(os,{defaultValue:"members",className:"space-y-6",children:[e.jsxs(xs,{children:[e.jsxs(Y,{value:"members",children:[e.jsx(z,{className:"w-4 h-4 mr-2"}),"Team Members"]}),e.jsxs(Y,{value:"suspended",children:[e.jsx(z,{className:"w-4 h-4 mr-2 text-red-500"}),"Suspended Users"]}),e.jsxs(Y,{value:"invitations",children:[e.jsx(ee,{className:"w-4 h-4 mr-2"}),"Pending Invitations"]})]}),e.jsx(_,{value:"members",className:"space-y-6",children:S.length===0?e.jsx(J,{className:"text-center py-12",children:e.jsxs(K,{children:[e.jsx(z,{className:"w-16 h-16 mx-auto mb-4 text-gray-300"}),e.jsx("h3",{className:"text-lg font-medium text-gray-900 mb-2",children:"No team members yet"}),e.jsx("p",{className:"text-gray-600 mb-4",children:"Start building your team by inviting members to collaborate on your properties and time tracking"}),m&&e.jsx(Z,{onInvite:l,isInviting:c})]})}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-4",children:e.jsxs("div",{className:"flex items-start space-x-3",children:[e.jsx(ps,{className:"w-5 h-5 text-blue-600 mt-0.5"}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium text-blue-900",children:"Multi-Tenant Worksp
11ace"}),e.jsx("p",{className:"text-sm text-blue-700 mt-1",children:"Team members share your workspace for free. They can record time entries under their own identity while you maintain full visibility and control over all workspace data."})]})]})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:S.map(b=>e.jsx(me,{member:b,onRemove:t,isRemoving:i,onUpdatePermissions:(O,k)=>o({id:O,data:k}),isUpdatingPermissions:n},b.id))})]})}),e.jsx(_,{value:"suspended",className:"space-y-6",children:D.length===0?e.jsx(J,{className:"text-center py-12",children:e.jsxs(K,{children:[e.jsx(z,{className:"w-16 h-16 mx-auto mb-4 text-gray-300"}),e.jsx("h3",{className:"text-lg font-medium text-gray-900 mb-2",children:"No suspended users"}),e.jsx("p",{className:"text-gray-600 mb-4",children:"Suspended users will appear here. They will not be able to login to your workspace."})]})}):e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6",children:D.map(b=>e.jsxs("div",{className:"relative grayscale opacity-75 hover:grayscale-0 hover:opacity-100 transition-all duration-200",children:[e.jsx(me,{member:b,onRemove:()=>{},isRemoving:!1,onUpdatePermissions:async()=>{},isUpdatingPermissions:!1,onRestore:g,isRestoring:N}),e.jsx("div",{className:"absolute top-2 right-2 bg-red-100 text-red-800 text-xs px-2 py-1 rounded font-bold border border-red-200 shadow-sm",children:"SUSPENDED"})]},b.id))})}),e.jsx(_,{value:"invitations",children:e.jsx(Ds,{invitations:a,isLoading:r,onCancel:x,isCancelling:f,onRemove:h,isRemoving:d,onResend:M,isResending:c})})]})]})}function Os(){const{user:s,isLoading:a,isAuthenticated:r}=ms(),m=Q(),{members:l,membersLoading:c,invitations:o,invitationsLoading:n,inviteMember:t,isInviting:i,updatePermissions:x,isUpdatingPermissions:f,removeMember:h,isRemovingMember:d,cancelInvitation:g,isCancellingInvitation:N,removeInvitation:M,isRemovingInvitation:S,restoreMember:D,isRestoringMember:b}=hs(),C={members:l,membersLoading:a||c,invitations:o,invitationsLoading:a||n,isAccountOwner:r&&!!s,inviteMember:t,isInviting:i,updatePermissions:x,isUpdatingPermissions:f,removeMember:h,isRemovingMember:d,cancelInvitation:g,isCancellingInvitation:N,removeInvitation:M,isRemovingInvitation:S,restoreMember:D,isRestoringMember:b,onResend:w=>{t({email:w.email,teamMemberRole:w.teamMemberRole,canCreateTimeEntries:w.canCreateTimeEntries,canViewAllTimeEntries:w.canViewAllTimeEntries})}};return m?e.jsx(Ss,{...C}):a||c?e.jsx("div",{className:"flex min-h-screen items-center justify-center bg-gray-50 dark:bg-gray-900",children:e.jsx("div",{className:"h-20 w-20 animate-spin rounded-full border-b-2 border-primary"})}):e.jsx(Es,{...C})}export{Os 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.