1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3974],{74954:(e,l,a)=>{a.d(l,{A:()=>r});var s=a(20387);let t={name:"x",size:24,node:[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]};t.node;let r=(0,s.A)(t)},83974:(e,l,a)=>{a.r(l),a.d(l,{ToolDirectory:()=>m});var s=a(56464),t=a(86012),r=a(71332),o=a(74954),n=a(20387);let c={name:"arrow-up-down",size:24,node:[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]};c.node;let i=(0,n.A)(c);var d=a(21777),h=a(26720);function m(){let[e,l]=(0,t.useState)(""),[a,n]=(0,t.useState)("All"),[c,m]=(0,t.useState)("az");function p(e,a){l(e),n(a);let s=new URLSearchParams;e&&s.set("q",e),"All"!==a&&s.set("category",a),history.replaceState(null,"","/tools"+(s.size?"?"+s.toString():"")+"#directory")}(0,t.useEffect)(()=>{let e=()=>{let e=new URLSearchParams(location.search);l(e.get("q")||"");let a=e.get("category")||"All";n(d.VN.includes(a)?a:"All")};return e(),window.addEventListener("popstate",e),()=>window.removeEventListener("popstate",e)},[]);let u=(0,d.f$)(e,a).sort((e,l)=>"az"===c?e.name.localeCompare(l.name):l.name.localeCompare(e.name));return(0,s.jsxs)("section",{className:"directory",id:"directory","aria-label":"Tool directory",children:[(0,s.jsxs)("div",{className:"directory-controls",children:[(0,s.jsxs)("label",{className:"directory-search",children:[(0,s.jsx)("span",{className:"sr-only",children:"Filter tools"}),(0,s.jsx)(r.A,{size:20}),(0,s.jsx)("input",{type:"search",value:e,onChange:e=>p(e.target.value,a),placeholder:"What do you need?",maxLength:100}),e&&(0,s.jsx)("button",{"aria-label":"Clear search",onClick:()=>p("",a),children:(0,s.jsx)(o.A,{size:18})})]}),(0,s.jsxs)("label",{className:"directory-sort",children:[(0,s.jsx)(i,{size:17}),(0,s.jsx)("span",{className:"sr-only",children:"Sort tools"}),(0,s.jsxs)("select",{value:c,onChange:e=>m(e.target.value),children:[(0,s.jsx)("option",{value:"az",children:"Name: AâZ"}),(0,s.jsx)("option",{value:"za",children:"Name: ZâA"})]})]})]}),(0,s.jsx)("div",{className:"category-filters","aria-label":"Filter by category",children:["All",...d.VN].map(l=>(0,s.jsxs)("button",{"aria-pressed":a===l,className:a===l?"active":"",onClick:()=>p(e,l),children:[l,"All"===l&&(0,s.jsx)("span",{children:(0,d.f$)("").length})]},l))}),(0,s.jsxs)("p",{className:"directory-count",role:"status",children:[u.length," ",1===u.length?"tool":"tools",e?" matching â"+e+"â":""]}),u.length?(0,s.jsx)("div",{className:"tools-grid",children:u.map(e=>(0,s.jsx)(h.J,{tool:e},e.slug))}):(0,s.jsxs)("div",{className:"empty-state panel",children:[(0,s.jsx)(r.A,{size:32}),(0,s.jsx)("h2",{children:"No tools found"}),(0,s.jsx)("p",{children:"Try a different keyword or explore all tools."}),(0,s.jsx)("button",{className:"button secondary",onClick:()=>p("","All"),children:"Clear filters"})]})]})}}}]);
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.