1"use strict";(self.webpackChunksavedelete_react=self.webpackChunksavedelete_react||[]).push([[8313],{98313:(e,t,s)=>{s.r(t),s.d(t,{default:()=>u});var a=s(65043),l=s(49367),r=s(25352),o=s(48444),n=s(12433),d=s(70579);const c=[{key:"latest",label:"Latest"},{key:"trending",label:"Trending"},{key:"top",label:"Top"}],i=()=>(0,d.jsxs)("div",{className:"bg-white border border-slate-200 rounded-xl p-4",children:[(0,d.jsxs)("div",{className:"flex items-start gap-3",children:[(0,d.jsx)("div",{className:"w-11 h-11 rounded-lg bg-slate-200 animate-pulse flex-shrink-0"}),(0,d.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,d.jsx)("div",{className:"h-3.5 w-2/3 bg-slate-200 rounded animate-pulse"}),(0,d.jsx)("div",{className:"h-3 w-full bg-slate-100 rounded animate-pulse"}),(0,d.jsx)("div",{className:"h-3 w-1/2 bg-slate-100 rounded animate-pulse"})]})]}),(0,d.jsxs)("div",{className:"mt-4 flex gap-2",children:[(0,d.jsx)("div",{className:"h-4 w-16 bg-slate-100 rounded-full animate-pulse"}),(0,d.jsx)("div",{className:"h-4 w-12 bg-slate-100 rounded-full animate-pulse"})]})]}),u=()=>{const[e,t]=(0,r.ok)(),s=e.get("category")||"all",u="trending"===(m=e.get("sort"))||"top"===m?m:"latest";var m;const x=e.get("q")||"",[b,p]=(0,a.useState)(x),[g,h]=(0,a.useState)([]),[f,j]=(0,a.useState)([]),[v,y]=(0,a.useState)([]),[N,w]=(0,a.useState)(1),[k,S]=(0,a.useState)(!1),[A,I]=(0,a.useState)(!0),[D,T]=(0,a.useState)(!1),C=(0,a.useRef)(null);(0,a.useEffect)(()=>{p(x)},[x]),(0,a.useEffect)(()=>{o.a.categories().then(h).catch(()=>h([]))},[]),(0,a.useEffect)(()=>{let e=!0;return I(!0),o.a.list({category:s,sort:u,q:x||void 0,page:1}).then(t=>{var s;e&&(j(t.tools),y(null!==(s=t.featured)&&void 0!==s?s:[]),w(t.page),S(t.has_more),I(!1))}).catch(()=>{e&&(j([]),y([]),S(!1),I(!1))}),()=>{e=!1}},[s,u,x]);const _=s=>{const a=new URLSearchParams(e);s(a),t(a,{replace:!1})},q=e=>{_(t=>{"all"===e?t.delete("category"):t.set("category",e)})};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsxs)(l.mg,{children:[(0,d.jsx)("title",{children:"AI Tools Directory \u2014 SaveDelete"}),(0,d.jsx)("meta",{name:"description",content:"Discover and submit the best AI tools \u2014 curated, categorized, and updated."}),(0,d.jsx)("link",{rel:"canonical",href:"https://savedelete.com/ai-tools/"}),(0,d.jsx)("meta",{property:"og:title",content:"AI Tools Directory \u2014 SaveDelete"}),(0,d.jsx)("meta",{property:"og:description",content:"Discover and submit the best AI tools \u2014 curated, categorized, and updated."}),(0,d.jsx)("meta",{property:"og:type",content:"website"}),(0,d.jsx)("meta",{property:"og:url",content:"https://savedelete.com/ai-tools/"}),(0,d.jsx)("meta",{name:"twitter:card",content:"summary"})]}),(0,d.jsxs)("main",{className:"max-w-7xl mx-auto px-4 py-5 md:py-6",children:[(0,d.jsxs)("header",{className:"mb-6 pb-5 border-b border-slate-200",children:[(0,d.jsxs)("div",{className:"flex flex-col sm:flex-row sm:items-start sm:justify-between gap-4",children:[(0,d.jsxs)("div",{children:[(0,d.jsx)("h1",{className:"text-2xl md:text-3xl font-bold text-slate-900",children:"AI Tools Directory"}),(0,d.jsx)("p",{className:"mt-2 text-sm text-slate-600 max-w-2xl",children:"Discover and submit the best AI tools \u2014 curated, categorized, and updated."})]}),(0,d.jsx)(r.N_,{to:"/ai-tools/submit",className:"inline-flex items-center justify-center px-4 py-2.5 text-sm font-semibold text-white bg-blue-600 rounded-lg hover:bg-blue-700 transition-colors whitespace-nowrap flex-shrink-0",children:"+ Submit a tool"})]}),(0,d.jsxs)("div",{className:"mt-5 relative max-w-xl",children:[(0,d.jsx)("span",{className:"absolute left-3 top-1/2 -translate-y-1/2 text-slate-400","aria-hidden":"true",children:"\ud83d\udd0d"}),(0,d.jsx)("input",{type:"search",value:b,onChange:e=>{return t=e.target.value,p(t),C.current&&clearTimeout(C.current),void(C.current=setTimeout(()=>{_(e=>{t.trim()?e.set("q",t.trim()):e.delete("q")})},400));var t},placeholder:"Search AI tools\u2026","aria-label":"Search AI tools",className:"w-full pl-9 pr-4 py-2.5 text-sm border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"})]})]}),(0,d.jsxs)("div",{className:"flex flex-wrap gap-2 mb-4",children:[(0,d.jsx)("button",{type:"button",onClick:()=>q("all"),className:"px-3 py-1.5 text-xs font-medium rounded-full border transition-colors ".concat("all"===s?"bg-blue-600 text-white border-blue-600":"bg-white text-slate-600 border-slate-200 hover:border-blue-300"),children:"All"}),g.map(e=>(0,d.jsxs)("button",{type:"button",onClick:()=>q(e.slug),className:"px-3 py-1.5 text-xs font-medium rounded-full border transition-colors ".concat(s===e.slug?"bg-blue-600 text-white border-blue-600":"bg-white text-slate-600 border-slate-200 hover:border-blue-300"),children:[e.icon?"".concat(e.icon," "):"",e.name,(0,d.jsx)("span",{className:"ml-1 opacity-60",children:e.tool_count})]},e.slug))]}),(0,d.jsx)("div",{className:"flex items-center gap-1 mb-6 border-b border-slate-200",children:c.map(e=>(0,d.jsx)("button",{type:"button",onClick:()=>{return t=e.key,void _(e=>{"latest"===t?e.delete("sort"):e.set("sort",t)});var t},className:"px-4 py-2 text-sm font-medium border-b-2 -mb-px transition-colors ".concat(u===e.key?"border-blue-600 text-blue-600":"border-transparent text-slate-500 hover:text-slate-800"),children:e.label},e.key))}),!A&&v.length>0&&(0,d.jsxs)("section",{className:"mb-8",children:[(0,d.jsxs)("h2",{className:"flex items-center gap-1.5 text-sm font-bold text-slate-900 mb-3",children:[(0,d.jsx)("span",{"aria-hidden":"true",children:"\u2b50"})," Featured"]}),(0,d.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:v.map(e=>(0,d.jsx)(n.A,{tool:e},"featured-".concat(e.slug)))})]}),A?(0,d.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:[...Array(6)].map((e,t)=>(0,d.jsx)(i,{},t))}):f.length>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4",children:f.map(e=>(0,d.jsx)(n.A,{tool:e},e.slug))}
1),k&&(0,d.jsx)("button",{type:"button",onClick:async()=>{if(!D&&k){T(!0);try{const e=await o.a.list({category:s,sort:u,q:x||void 0,page:N+1});j(t=>{const s=new Set(t.map(e=>e.slug));return[...t,...e.tools.filter(e=>!s.has(e.slug))]}),w(e.page),S(e.has_more)}catch(e){S(!1)}finally{T(!1)}}},disabled:D,className:"mt-6 w-full px-4 py-2.5 text-sm font-medium text-blue-600 bg-blue-50 rounded-lg hover:bg-blue-100 transition-colors disabled:opacity-50",children:D?"Loading\u2026":"Load more"})]}):(0,d.jsxs)("div",{className:"py-12 text-center text-slate-500 text-sm border border-dashed border-slate-200 rounded-lg",children:["No AI tools found",x?" for \u201c".concat(x,"\u201d"):"",". Try a different search or category."]})]})]})}}}]); 2//# sourceMappingURL=8313.648c348a.chunk.js.map
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.