PageSourceSearch

https://taxease360.ai/assets/StaffTools-DlJjiuxh.js

js taxease360.ai collected 2026-10-05 14:26:01 UTC 22,598 bytes, 14 lines download raw bytes

1import{c as le,a4 as ve,r as i,p as d,j as e,q as j,F as je,ad as ke,ae as we,ah as ee,a1 as Ne,X as Se,i as Te,u as Ce,aU as _e,a7 as Ie,a9 as Ee,y as Ae}from"./index-CfXbMZ_V.js";import{P as Le}from"./PortalHeader-BREe-gcq.js";import{T as ze}from"./TaxEstimateCalculator-CvACzbJ0.js";import Re from"./StaffBankStatement-BJIxEwD1.js";import{M as Oe,R as Pe}from"./marketingTemplates-DWPd9N4P.js";import{L as Be}from"./link-2-DXbXr68V.js";import{S as te}from"./save-DxI-RWzE.js";import{S as ae}from"./square-check-big-CiiUU5TQ.js";import{S as Fe}from"./send-D6RIih1c.js";import{c as $e,b as De}from"./financialYear-CDAMHgs5.js";import{L as Me}from"./landmark-DwXwZzZr.js";import{G as qe}from"./gauge-BnShJZge.js";import{B as Ge}from"./book-open-check-IEbOlmhX.js";import"./chevron-left-BFeklwt6.js";import"./FYSelector-BOsOy1Xl.js";import"./select-BB6bDIs2.js";import"./index-BU0D2mz3.js";import"./trending-up-BFx2g5_7.js";import"./trending-down-_wkW26nB.js";import"./wand-sparkles-Ddi3JnTC.js";import"./user-Bu76TeJk.js";import"./filter-DGGByJCs.js";import"./circle-check-big-9H_erV8K.js";import"./flag-BXnP9JYZ.js";import"./download-oHmw96Dk.js";import"./pencil-DCKB3rA6.js";import"./isEqual-D7AQPiii.js";/**
2 * @license lucide-react v0.475.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 Ue=[["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"}]],Ye=le("Image",Ue);/**
7 * @license lucide-react v0.475.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 He=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]],se=le("Square",He),Ke=[{id:"builtin-tax-checklist",name:"Tax Return Checklist",category:"Tax Season",subject:"Your {{current_financial_year}} Tax Return — Documents Needed",body:"<p>Hi {{first_name}},</p><p><br></p><p>It's that time of year again! To prepare your {{current_financial_year}} tax return, I need the following documents:</p><p><br></p><ul><li>Payment summaries / income statements from all employers</li><li>Bank interest statements</li><li>Dividend and investment income statements</li><li>Private health insurance statement</li><li>Receipts for work-related deductions (vehicle, uniforms, self-education, home office)</li><li>Rental property income & expense records</li><li>Any other income or deduction records</li></ul><p><br></p><p>Please upload these through your client portal at your earliest convenience. If you have any questions, don't hesitate to reach out.</p><p><br></p><p>Kind regards,<br>{{sender_name}}</p>"},{id:"builtin-doc-request",name:"Document Request",category:"Documents",subject:"Documents Required — Please Upload",body:"<p>Hi {{first_name}},</p><p><br></p><p>I'm currently reviewing your file and need a few additional documents to finalise your tax return:</p><p><br></p><ul><li>Your most recent notice of assessment (if available)</li><li>Receipts for any claims you'd like to make</li><li>Bank statements covering the relevant period</li></ul><p><br></p><p>You can upload these securely through your client portal. Once received, I'll have your return completed within 2–3 business days.</p><p><br></p><p>Kind regards,<br>{{sender_name}}</p>"},{id:"builtin-tax-advice",name:"Tax Advice Follow-up",category:"Advisory",subject:"Following up on your tax questions",body:"<p>Hi {{first_name}},</p><p><br></p><p>Thank you for reaching out with your tax questions. I've reviewed your situation and wanted to share some guidance:</p><p><br></p><p>Based on what you've described, there are a few strategies we can consider to optimise your tax position for {{current_financial_year}}. I'd recommend we discuss these in a short appointment so I can tailor my advice to your specific circumstances.</p><p><br></p><p>You can book a time directly through your client portal, or simply reply to this email with a few options that suit you.</p><p><br></p><p>Kind regards,<br>{{sender_name}}</p>"},{id:"builtin-bas-reminder",name:"BAS Reminder",category:"Compliance",subject:"BAS Due So
11on — Action Required",body:"<p>Hi {{first_name}},</p><p><br></p><p>This is a friendly reminder that your BAS for the current quarter is due soon. To ensure we lodge on time and avoid any ATO penalties, please provide the following:</p><p><br></p><ul><li>Sales / income summary for the quarter</li><li>Bank statements for the period</li><li>Any large expense invoices (over $1,000)</li></ul><p><br></p><p>Please upload these through your client portal at your earliest convenience. If you need an extension, let me know before the due date.</p><p><br></p><p>Kind regards,<br>{{sender_name}}</p>"},{id:"builtin-appointment-followup",name:"Appointment Follow-up",category:"Appointment",subject:"Great meeting you — next steps",body:"<p>Hi {{first_name}},</p><p><br></p><p>Thank you for coming in to see me. As discussed, here's a summary of the next steps:</p><p><br></p><ul><li>Upload your outstanding documents through the client portal</li><li>Review the checklist I provided and let me know if anything is unclear</li><li>I'll prepare your return once all documents are received</li></ul><p><br></p><p>If you have any questions in the meantime, feel free to reply to this email or send a message through your portal.</p><p><br></p><p>Kind regards,<br>{{sender_name}}</p>"},{id:"builtin-refund-notice",name:"Refund Notice",category:"Refund",subject:"Your tax refund has been processed",body:"<p>Hi {{first_name}},</p><p><br></p><p>Great news! Your tax return has been lodged and the ATO has processed a refund. You should receive the funds in your nominated bank account within 7–14 business days.</p><p><br></p><p>If you don't receive the refund within two weeks, let me know and I'll follow up with the ATO on your behalf.</p><p><br></p><p>Kind regards,<br>{{sender_name}}</p>"}],ie="6a49be7c54c195694e7f8db9",re="6a49b3bae3c594f899d00e99",Qe={toolbar:[["bold","italic","underline"],[{list:"ordered"},{list:"bullet"}],[{color:[]}],["link"]]};function Je(){const{toast:n}=ve(),k=i.useRef(null),[w,E]=i.useState(!0),[N,S]=i.useState(!1),[A,g]=i.useState(null),[o,L]=i.useState([]),[h,$]=i.useState({gmail:!1,outlook:!1,gmailEmail:null,outlookEmail:null}),[f,b]=i.useState("outlook"),[y,z]=i.useState(""),[p,T]=i.useState(""),[oe,de]=i.useState(""),[c,C]=i.useState(new Set),[_,ce]=i.useState(""),[D,R]=i.useState([]),[O,M]=i.useState(!1),[q,G]=i.useState(!1),[P,U]=i.useState(""),[x,B]=i.useState(""),[m,I]=i.useState(""),[Y,H]=i.useState(!1),[K,Q]=i.useState(!1),[J,W]=i.useState(!1),X=i.useRef(null);i.useEffect(()=>{(async()=>{var u;const t=await d.auth.me();g(t),de((t==null?void 0:t.legal_name)||(t==null?void 0:t.full_name)||""),B((t==null?void 0:t.email_signature)||""),I((t==null?void 0:t.email_signature_image)||"");const[a,s,l]=await Promise.all([d.functions.invoke("loadStaffClients",{}),d.functions.invoke("marketingConnection",{}),d.entities.MarketingTemplate.list("-updated_date",100)]);L((((u=a==null?void 0:a.data)==null?void 0:u.clients)||[]).filter(F=>F.email));const r=(s==null?void 0:s.data)||s||{};$(r),r.outlook?b("outlook"):r.gmail&&b("gmail"),R((l||[]).filter(F=>!F.archived)),E(!1)})()},[]);const me=async t=>{const a=await d.connectors.connectAppUser(t),s=window.open(a,"_blank"),l=setInterval(()=>{(!s||s.closed)&&(clearInterval(l),d.functions.invoke("marketingConnection",{}).then(r=>{const u=(r==null?void 0:r.data)||r||{};$(u),t===re&&u.outlook&&b("outlook"),t===ie&&u.gmail&&b("gmail")}))},600)},ue=t=>{var s,l;const a=(l=(s=k.current)==null?void 0:s.getEditor)==null?void 0:l.call(s);if(a){const r=a.getSelection(),u=r?r.index:a.getLength();a.insertText(u,t,"user"),a.setSelection(u+t.length,0)}else T(r=>`${r||""}${t}`)},V=t=>{z(t.subject||""),T(t.body||""),M(!1),n({title:`Loaded "${t.name}" template`})},pe=async()=>{if(!P.trim()){n({title:"Enter a template name",variant:"destructive"});return}if(!y.trim()&&(!p.trim()||p==="<p><br></p>")){n({title:"Add a subject and message first",variant:"destructive"});return}G(!0);try{await d.entities.MarketingTemplate.create({owner_user_id:A.id,name:P.trim(),category:"Custom",subject:y,body:p});const t=await d.entities.MarketingTemplate.list("-updated_date",100);R((t||[]).filter(a=>!a.archived)),U(""),n({title:"Template saved"})}catch(t){n({title:"Save failed",description:t.message,variant:"destructive"})}finally{G(!1)}},xe=async t=>{if(confirm(`Delete template "${t.name}"?`))try{await d.entities.MarketingTemplate.update(t.id,{archived:!0}),R(a=>a.filter(s=>s.id!==t.id)),n({title:"Template deleted"})}catch(a){n({title:"Delete failed",description:a.message,variant:"destructive"})}},ge=async()=>{Q(!0);try{await d.auth.updateMe({email_signature:x,email_signature_image:m}),n({title:"Signature saved"}),H(!1)}catch(t){n({title:"Save failed",description:t.message,variant:"destructive"})}finally{Q(!1)}},he=async t=>{var a;if(t){if(!t.type.match(/image\/(jpeg|jpg|png|gif|webp)/)){n({title:"Please upload an image file (JPG, PNG, GIF)",variant:"destructive"});return}W(!0);try{const s=await d.integrations.Core.UploadPublicFile({file:t}),l=(s==null?void 0:s.file_url)||((a=s==null?void 0:s.data)==null?void 0:a.file_url);if(!l)throw new Error("Upload failed");I(l),n({title:"Signature image uploaded"})}catch(s){n({title:"Upload failed",description:s.message,variant:"destructive"})}finally{W(!1)}}},fe=t=>{C(a=>
11{const s=new Set(a);return s.has(t)?s.delete(t):s.add(t),s})},be=()=>{const t=v;t.every(a=>c.has(a.id))?C(a=>{const s=new Set(a);return t.forEach(l=>s.delete(l.id)),s}):C(a=>{const s=new Set(a);return t.forEach(l=>s.add(l.id)),s})},v=o.filter(t=>!_||(t.full_name||"").toLowerCase().includes(_.toLowerCase())||(t.email||"").toLowerCase().includes(_.toLowerCase())),ye=async()=>{if(!(f==="gmail"&&h.gmail||f==="outlook"&&h.outlook)){n({title:`Connect your ${f==="gmail"?"Google":"Microsoft"} account first`,variant:"destructive"});return}if(c.size===0){n({title:"Select at least one recipient",variant:"destructive"});return}if(!y.trim()){n({title:"Add a subject",variant:"destructive"});return}if(!p.trim()||p==="<p><br></p>"){n({title:"Add a message",variant:"destructive"});return}S(!0);try{let a="";m&&(a+=`<br><br><img src="${m}" alt="Signature" style="max-width:400px;width:100%;" />`),x&&(a+="<br><br>"+x);const s=a?`${p}${a}`:p,l=await d.functions.invoke("sendMarketingEmail",{provider:f,client_ids:[...c],subject:y,html_body:s,from_name:oe}),r=(l==null?void 0:l.data)||l;r!=null&&r.error?n({title:"Send failed",description:r.error,variant:"destructive"}):(n({title:`Sent to ${r.sent} recipient${r.sent===1?"":"s"}`,description:r.failed?`${r.failed} failed`:"All delivered"}),z(""),T(""),C(new Set))}catch(a){n({title:"Send failed",description:a.message,variant:"destructive"})}finally{S(!1)}};if(w)return e.jsx("div",{className:"flex justify-center py-16",children:e.jsx(j,{className:"w-6 h-6 text-gray-400 animate-spin"})});const Z=v.length>0&&v.every(t=>c.has(t.id));return e.jsxs("div",{className:"space-y-4 pb-6",children:[e.jsxs("div",{className:"bg-white border border-gray-100 rounded-2xl p-3",children:[e.jsx("p",{className:"text-xs font-medium text-gray-500 mb-2",children:"Send from"}),e.jsx("div",{className:"flex gap-2",children:[{key:"outlook",label:"Microsoft / Outlook",email:h.outlookEmail,connected:h.outlook,id:re},{key:"gmail",label:"Google / Gmail",email:h.gmailEmail,connected:h.gmail,id:ie}].map(t=>e.jsxs("button",{onClick:()=>t.connected?b(t.key):me(t.id),className:`flex-1 flex items-center gap-2 rounded-lg border p-2.5 text-left ${f===t.key&&t.connected?"border-emerald-500 bg-emerald-50":"border-gray-100"}`,children:[e.jsx("span",{className:`w-2 h-2 rounded-full ${t.connected?"bg-emerald-500":"bg-gray-300"}`}),e.jsxs("span",{className:"min-w-0",children:[e.jsx("span",{className:"block text-xs font-semibold text-gray-900",children:t.label}),e.jsx("span",{className:"block text-[11px] text-gray-500 truncate",children:t.connected?t.email||"Connected":"Tap to connect"})]}),t.connected?f===t.key?e.jsx("span",{className:"ml-auto text-[10px] font-bold text-emerald-700",children:"SELECTED"}):null:e.jsx(Be,{size:13,className:"ml-auto text-emerald-600"})]},t.key))})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("button",{onClick:()=>M(!O),className:"flex items-center gap-1.5 text-xs font-semibold text-emerald-700 bg-emerald-50 hover:bg-emerald-100 px-3 py-2 rounded-lg",children:[e.jsx(je,{size:14})," Templates ",O?e.jsx(ke,{size:13}):e.jsx(we,{size:13})]}),e.jsxs("button",{onClick:()=>H(!Y),className:`flex items-center gap-1.5 text-xs font-semibold px-3 py-2 rounded-lg ${x?"text-blue-700 bg-blue-50 hover:bg-blue-100":"text-gray-600 bg-gray-50 hover:bg-gray-100"}`,children:[e.jsx(ee,{size:14})," Signature ",x?"✓":""]})]}),O&&e.jsxs("div",{className:"bg-white border border-gray-100 rounded-2xl p-4 space-y-3",children:[e.jsx("p",{className:"text-xs font-semibold text-gray-500 uppercase tracking-wide",children:"Built-in templates"}),e.jsx("div",{className:"grid sm:grid-cols-2 gap-2",children:Ke.map(t=>e.jsxs("button",{onClick:()=>V(t),className:"text-left p-3 rounded-xl border border-gray-100 hover:border-emerald-300 hover:bg-emerald-50/50 transition-colors",children:[e.jsx("p",{className:"text-sm font-semibold text-gray-900",children:t.name}),e.jsx("p",{className:"text-[11px] text-gray-400 mt-0.5",children:t.category})]},t.id))}),D.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-xs font-semibold text-gray-500 uppercase tracking-wide pt-2",children:"Your saved templates"}),e.jsx("div",{className:"space-y-1.5",children:D.map(t=>e.jsxs("div",{className:"flex items-center gap-2 p-2.5 rounded-xl border border-gray-100",children:[e.jsxs("button",{onClick:()=>V(t),className:"flex-1 text-left min-w-0",children:[e.jsx("p",{className:"text-sm font-medium text-gray-900 truncate",children:t.name}),e.jsx("p",{className:"text-[11px] text-gray-400 truncate",children:t.subject||"No subject"})]}),e.jsx("button",{onClick:()=>xe(t),className:"w-8 h-8 flex items-center justify-center text-gray-400 hover:text-red-500 hover:bg-red-50 rounded-lg shrink-0",children:e.jsx(Ne,{size:14})})]},t.id))})]}),e.jsxs("div",{className:"border-t border-gray-100 pt-3",children:[e.jsx("p",{className:"text-xs font-semibold text-gray-500 uppercase tracking-wide mb-2",children:"Save current as template"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:P,onChange:t=>U(t.target.value),placeholder:"Template name…",className:"flex-1 h-9 rounded-lg border border-gray-200 px-3 text-sm"}),e.jsxs("button",{onClick:pe,disabled:q,className:"flex items-center gap-1.5 bg-emerald-600 text-white rounded-lg px-3 py-2 text-xs font-semibold disabled:opacity-50",children:[q?e.jsx(j,{size:13,className:"animate-spin"}):e.jsx(te,{size:13})," Save"]})]})]})]}),Y&&e.jsxs("div",{className:"bg-white border border-gray-100 rounded-2xl p-4 space-y-3",children:[e.jsx("p",{className:"text-xs font-medium text-gray-500",children:"Your email signature (appended to every email)"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-semibold text-gray-400 mb-1.5",children:"Signature image (JPG / PNG)"}),m?e.jsxs("div",{className:"relative inline-block",children:[e.jsx("img",{src:m,alt:"Signature",className:"max-w-full max-h-32 rounded-lg border border-gray-200"}),e.jsx("button",{onClick:()=>I(""),className:"absolute -top-2 -right-2 w-6 h-6 bg-red-500 text-white rounded-full flex items-center justify-center shadow",children:e.jsx(Se,{size:13})})]}):e.jsxs("button",{onClick:()=>{var t;return(t=X.current)==null?void 0:t.click()},disabled:J,className:"flex items-center gap-2 w-full border-2 border-dashed border-gray-200 rounded-lg p-4 text-sm text-gray-400 hover:border-emerald-300 hover:bg-emerald-50/30 disabled:opacity-50",children:[J?e.jsx(j,{size:16,className:"animate-spin"}):e.jsx(Ye,{size:16})," Upload signature image"]}),e.jsx("input",{ref:X,type:"file",accept:"image/jpeg,image/png,image/gif,image/webp",className:"hidden",onChange:t=>{var a;return he((a=t.target.files)==null?void 0:a[0])}})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-xs font-semibold text-gray-400 mb-1.5",children:"Text signature (optional, added below image)"}),e.jsx("textarea",{value:x,onChange:t=>B(t.target.value),placeholder:`e.g. Kind regards,
12John Smith
13Senior Accountant | R&K Taxation Experts
14P: 03 1234 5678 | E: [email protected]`,rows:4,className:"w-full rounded-lg border border-gray-200 p-3 text-sm font-mono"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("button",{onClick:ge,disabled:K,className:"flex items-center gap-1.5 bg-blue-600 text-white rounded-lg px-3 py-2 text-xs font-semibold disabled:opacity-50",children:[K?e.jsx(j,{size:13,className:"animate-spin"}):e.jsx(te,{size:13})," Save signature"]}),(x||m)&&e.jsx("button",{onClick:()=>{B(""),I("")},className:"text-xs font-semibold text-gray-500 hover:text-red-500 px-3 py-2",children:"Clear all"})]})]}),e.jsxs("div",{className:"bg-white border border-gray-100 rounded-2xl p-4",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsxs("p",{className:"text-xs font-medium text-gray-500",children:["Recipients (",c.size," selected)"]}),e.jsxs("button",{onClick:be,className:"text-xs font-semibold text-emerald-700 flex items-center gap-1 hover:bg-emerald-50 px-2 py-1 rounded",children:[Z?e.jsx(ae,{size:13}):e.jsx(se,{size:13})," ",Z?"Deselect all":"Select all"]})]}),e.jsxs("div",{className:"relative mb-2",children:[e.jsx(Te,{size:14,className:"absolute left-3 top-3 text-gray-400"}
14),e.jsx("input",{value:_,onChange:t=>ce(t.target.value),placeholder:"Search clients…",className:"w-full h-9 rounded-lg border border-gray-200 pl-9 pr-3 text-sm"})]}),e.jsx("div",{className:"max-h-56 overflow-y-auto space-y-1",children:v.length===0?e.jsx("p",{className:"text-sm text-gray-400 text-center py-4",children:"No clients with email addresses."}):v.map(t=>e.jsxs("button",{onClick:()=>fe(t.id),className:`w-full flex items-center gap-2.5 rounded-lg p-2 text-left ${c.has(t.id)?"bg-emerald-50":"hover:bg-gray-50"}`,children:[c.has(t.id)?e.jsx(ae,{size:15,className:"text-emerald-600 shrink-0"}):e.jsx(se,{size:15,className:"text-gray-300 shrink-0"}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block text-sm font-medium text-gray-900 truncate",children:t.full_name}),e.jsx("span",{className:"block text-[11px] text-gray-400 truncate",children:t.email})]})]},t.id))})]}),e.jsxs("div",{className:"bg-white border border-gray-100 rounded-2xl p-4 space-y-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-xs font-medium text-gray-500",children:"Subject"}),e.jsx("input",{value:y,onChange:t=>z(t.target.value),placeholder:"Email subject",className:"mt-1 flex h-9 w-full rounded-md border border-gray-200 px-3 text-sm focus:outline-none focus:ring-1 focus:ring-emerald-500"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsx("label",{className:"text-xs font-medium text-gray-500",children:"Message"}),e.jsx("span",{className:"text-[11px] text-gray-400",children:"Tap a field to insert"})]}),e.jsx("div",{className:"flex flex-wrap items-center gap-1.5 mb-2",children:Oe.map(t=>e.jsx("button",{onClick:()=>ue(t.token),className:"text-xs font-medium text-emerald-700 bg-emerald-50 hover:bg-emerald-100 px-2.5 py-1 rounded-full",children:t.label},t.token))}),e.jsx("div",{className:"rounded-md border border-gray-200 overflow-hidden",children:e.jsx(Pe,{ref:k,theme:"snow",value:p,onChange:T,modules:Qe,placeholder:"Write your message…",style:{minHeight:240}})}),(x||m)&&e.jsxs("p",{className:"text-[11px] text-blue-600 mt-1.5 flex items-center gap-1",children:[e.jsx(ee,{size:11})," Your ",m?"image ":"","signature will be appended automatically."]})]})]}),e.jsx("button",{onClick:ye,disabled:N,className:"w-full flex items-center justify-center gap-2 bg-emerald-600 text-white rounded-xl py-3 font-semibold text-sm disabled:opacity-50",children:N?e.jsxs(e.Fragment,{children:[e.jsx(j,{size:16,className:"animate-spin"})," Sending…"]}):e.jsxs(e.Fragment,{children:[e.jsx(Fe,{size:16})," Send to ",c.size," recipient",c.size===1?"":"s"]})})]})}const ne=[{key:"tax",label:"Tax Estimate",desc:"Quick income tax & refund estimator",icon:_e,tint:"bg-emerald-50 text-emerald-600"},{key:"bank",label:"Bank Statement Analyser",desc:"Parse & categorise bank transactions",icon:Me,tint:"bg-sky-50 text-sky-600"},{key:"benchmarking",label:"Benchmarking",desc:"Compare a client vs ATO industry ratios",icon:qe,tint:"bg-indigo-50 text-indigo-600",route:"/staff/benchmarking"},{key:"deduction-guide",label:"Deduction Guide",desc:"Live ATO deductions by occupation",icon:Ge,tint:"bg-violet-50 text-violet-600",route:"/staff/deduction-guide"},{key:"email",label:"Send Email",desc:"Mass or individual email via Outlook / Gmail",icon:Ie,tint:"bg-blue-50 text-blue-600"}];function wt(){const n=Ce(),[k,w]=i.useState(null),[E,N]=i.useState($e()),S=De([]),A=o=>{o.route?n(o.route):w(o.key)},g=ne.find(o=>o.key===k);return e.jsx("div",{className:"space-y-4 pb-10",children:g?e.jsxs(e.Fragment,{children:[e.jsxs("button",{onClick:()=>w(null),className:"flex items-center gap-1.5 text-sm font-medium text-gray-500 hover:text-gray-800",children:[e.jsx(Ee,{size:15})," Back to Tools"]}),g.key==="tax"&&e.jsx(ze,{totalDeductions:0,fyStart:E,fyList:S,onFYChange:N}),g.key==="bank"&&e.jsx(Re,{}),g.key==="email"&&e.jsx(Je,{})]}):e.jsxs(e.Fragment,{children:[e.jsx(Le,{title:"Tools",subtitle:"Calculators, benchmarking & deduction guidance",backTo:"/staff"}),e.jsx("div",{className:"grid sm:grid-cols-2 gap-3",children:ne.map(o=>{const L=o.icon;return e.jsxs("button",{onClick:()=>A(o),className:"group flex items-center gap-3.5 p-4 bg-white border border-gray-100 rounded-2xl text-left hover:border-emerald-200 hover:shadow-sm transition-all",children:[e.jsx("span",{className:`w-11 h-11 rounded-xl flex items-center justify-center shrink-0 ${o.tint}`,children:e.jsx(L,{size:20})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"text-sm font-semibold text-gray-900",children:o.label}),e.jsx("p",{className:"text-xs text-gray-500 mt-0.5",children:o.desc})]}),e.jsx(Ae,{size:18,className:"text-gray-300 group-hover:text-emerald-500 group-hover:translate-x-0.5 transition-all shrink-0"})]},o.key)})})]})})}export{wt 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.