{"compiledCode":"\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _react = require('react'); var _react2 = _interopRequireDefault(_react);\n\nconst apps = [\n  {\n    slug: \"bitwarden\",\n    name: \"Bitwarden\",\n    category: \"security\",\n    categoryName: \"Security\",\n    summary:\n      \"Password manager for storing and sharing credentials across personal and business accounts.\",\n  },\n  {\n    slug: \"canva\",\n    name: \"Canva\",\n    category: \"design\",\n    categoryName: \"Design & creative\",\n    summary:\n      \"Visual design platform for creating presentations, social content, and other graphics.\",\n  },\n  {\n    slug: \"github\",\n    name: \"GitHub\",\n    category: \"developer-tools\",\n    categoryName: \"Developer tools\",\n    summary:\n      \"Software collaboration platform for code repositories, reviews, issues, and development workflows.\",\n  },\n  {\n    slug: \"grammarly\",\n    name: \"Grammarly\",\n    category: \"writing\",\n    categoryName: \"Writing & AI assistance\",\n    summary:\n      \"AI writing assistance for drafting, editing, and improving communication.\",\n  },\n  {\n    slug: \"hubspot\",\n    name: \"HubSpot CRM\",\n    category: \"sales\",\n    categoryName: \"Sales & CRM\",\n    summary:\n      \"Customer relationship management software for organizing contacts and sales activity.\",\n  },\n  {\n    slug: \"mailchimp\",\n    name: \"Mailchimp\",\n    category: \"marketing\",\n    categoryName: \"Marketing\",\n    summary:\n      \"Marketing platform for email campaigns, audience management, and automation.\",\n  },\n  {\n    slug: \"notion\",\n    name: \"Notion\",\n    category: \"productivity\",\n    categoryName: \"Productivity & notes\",\n    summary:\n      \"Workspace for notes, documents, knowledge, and collaborative work.\",\n  },\n  {\n    slug: \"shopify\",\n    name: \"Shopify\",\n    category: \"ecommerce\",\n    categoryName: \"Ecommerce\",\n    summary:\n      \"Commerce platform for building an online store and managing selling operations.\",\n  },\n  {\n    slug: \"slack\",\n    name: \"Slack\",\n    category: \"communication\",\n    categoryName: \"Communication\",\n    summary:\n      \"Team communication platform with channels, messaging, and app integrations.\",\n  },\n  {\n    slug: \"todoist\",\n    name: \"Todoist\",\n    category: \"productivity\",\n    categoryName: \"Productivity & notes\",\n    summary:\n      \"Task manager for personal to-dos, recurring work, and team tasks.\",\n  },\n  {\n    slug: \"trello\",\n    name: \"Trello\",\n    category: \"project-management\",\n    categoryName: \"Project management\",\n    summary: \"Visual work organizer built around boards, lists, and cards.\",\n  },\n  {\n    slug: \"wave\",\n    name: \"Wave\",\n    category: \"finance\",\n    categoryName: \"Finance & invoicing\",\n    summary:\n      \"Small-business software for bookkeeping, invoicing, and related money-management tasks.\",\n  },\n  {\n    slug: \"zapier\",\n    name: \"Zapier\",\n    category: \"automation\",\n    categoryName: \"Automation\",\n    summary: \"Automation platform for connecting apps and building workflows.\",\n  },\n  {\n    slug: \"zendesk\",\n    name: \"Zendesk\",\n    category: \"customer-support\",\n    categoryName: \"Customer support\",\n    summary:\n      \"Customer service software for managing support requests and conversations.\",\n  },\n];\nconst categories = [\n  {\n    slug: \"productivity\",\n    name: \"Productivity & notes\",\n  },\n  {\n    slug: \"project-management\",\n    name: \"Project management\",\n  },\n  {\n    slug: \"design\",\n    name: \"Design & creative\",\n  },\n  {\n    slug: \"writing\",\n    name: \"Writing & AI assistance\",\n  },\n  {\n    slug: \"sales\",\n    name: \"Sales & CRM\",\n  },\n  {\n    slug: \"marketing\",\n    name: \"Marketing\",\n  },\n  {\n    slug: \"finance\",\n    name: \"Finance & invoicing\",\n  },\n  {\n    slug: \"ecommerce\",\n    name: \"Ecommerce\",\n  },\n  {\n    slug: \"customer-support\",\n    name: \"Customer support\",\n  },\n  {\n    slug: \"security\",\n    name: \"Security\",\n  },\n  {\n    slug: \"automation\",\n    name: \"Automation\",\n  },\n  {\n    slug: \"communication\",\n    name: \"Communication\",\n  },\n  {\n    slug: \"developer-tools\",\n    name: \"Developer tools\",\n  },\n];\n\n function Page() {\n  const [query, setQuery] = _react.useState.call(void 0, \"\");\n  const [category, setCategory] = _react.useState.call(void 0, \"\");\n  const normalized = query.trim().toLocaleLowerCase();\n  const visible = apps.filter(\n    (app) =>\n      (!category || app.category === category) &&\n      `${app.name} ${app.summary} ${app.categoryName}`\n        .toLocaleLowerCase()\n        .includes(normalized),\n  );\n  return (\n    _react2.default.createElement('div', { className: \"rk-directory\",}\n      , _react2.default.createElement('style', null, \".rk-directory{--ground:var(--c14pttf5-runtime-bg,#202525);--ink:var(--c14pttf5-runtime-text,#eff0e7);--accent:var(--c14pttf5-runtime-accent,#cac7a6);--soft:var(--c14pttf5-runtime-panel,#323c39);background:var(--ground);color:var(--ink);font:16px/1.7 Arial,Helvetica,sans-serif;min-height:100vh;padding:28px clamp(20px,5vw,64px) 64px;overflow-wrap:anywhere}\\n.rk-directory,.rk-directory *{box-sizing:border-box;min-width:0}.rk-directory .frame{max-width:1120px;margin:auto}.rk-directory a{color:var(--accent);text-underline-offset:4px}.rk-directory a:hover{text-decoration-thickness:2px}.rk-directory :is(a,button,input,select):focus-visible{outline:3px solid var(--accent);outline-offset:4px}.rk-directory header{display:flex;align-items:center;justify-content:space-between;gap:20px;border-bottom:1px solid var(--soft);padding-bottom:24px;margin-bottom:54px}.rk-directory .brand{font:26px Georgia,serif;color:var(--ink);text-decoration:none}.rk-directory nav{display:flex;flex-wrap:wrap;gap:6px 22px}.rk-directory nav a{display:inline-flex;align-items:center;min-height:44px;font-size:14px}.rk-directory h1{font:clamp(36px,5.5vw,66px)/1.1 Georgia,serif;letter-spacing:-1.8px;max-width:23ch;margin:0 0 28px}.rk-directory h2{font:30px/1.25 Georgia,serif;margin:44px 0 20px}.rk-directory h3{font-size:21px;margin:0 0 12px}.rk-directory p{max-width:76ch;margin:0 0 20px}.rk-directory li{margin-bottom:12px;max-width:80ch}.rk-directory .hero{padding:20px 0 32px}.rk-directory .hero p:first-of-type{font-size:20px;max-width:60ch}.rk-directory .hero a{display:inline-flex;align-items:center;min-height:44px}.rk-directory .cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:18px;list-style:none;padding:0}.rk-directory .cards li{margin:0;padding:22px;background:var(--soft);border-radius:6px;border:1px solid #52605b}.rk-directory .cards a{font-size:18px}.rk-directory .cards p{margin:12px 0 0;font-size:15px}.rk-directory .catalog-controls{display:flex;flex-wrap:wrap;gap:20px;margin-bottom:18px}.rk-directory label{display:grid;gap:8px;flex:1 1 240px}.rk-directory :is(input,select,button){font:inherit;min-height:48px;border-radius:4px;border:1px solid var(--accent);padding:10px 14px;background:var(--ground);color:var(--ink);max-width:100%}.rk-directory button{cursor:pointer}.rk-directory .meta{font-size:13px;color:var(--accent)}.rk-directory .app-card{display:flex;flex-direction:column;gap:10px}.rk-directory .app-card p{margin:0}.rk-directory .app-card .profile{margin-top:auto;min-height:44px;display:inline-flex;align-items:center}.rk-directory .table-wrap{max-width:100%;overflow-x:auto}.rk-directory table{border-collapse:collapse;min-width:680px;width:100%}.rk-directory :is(th,td){text-align:left;padding:14px;border-bottom:1px solid var(--soft);vertical-align:top}.rk-directory footer{margin-top:60px;padding-top:24px;border-top:1px solid var(--soft);font-size:13px}.rk-directory footer nav{margin-top:18px}.rk-directory .empty{padding:28px;border:1px solid var(--accent);border-radius:6px}.rk-directory .eyebrow{font-size:12px;letter-spacing:2px;color:var(--accent);margin-bottom:20px}@media(max-width:640px){.rk-directory header{align-items:flex-start;flex-direction:column;margin-bottom:34px}.rk-directory nav{gap:4px 18px}.rk-directory h1{letter-spacing:-1px}.rk-directory h2{font-size:27px}.rk-directory .catalog-controls{gap:14px}.rk-directory .hero{padding-top:8px}}\")\n      , _react2.default.createElement('div', { className: \"frame\",}\n\n        , _react2.default.createElement('h1', null, \"Explore SaaS products & apps\"    )\n        , _react2.default.createElement('p', null, \"Browse software by what you need to do. Open a profile for its purpose, suggested trial task, and official source.\"\n\n\n        )\n        , _react2.default.createElement('section', { 'aria-labelledby': \"catalog-title\",}\n          , _react2.default.createElement('h2', { id: \"catalog-title\",}, \"App directory\" )\n          , _react2.default.createElement('div', { className: \"catalog-controls\",}\n            , _react2.default.createElement('label', null, \"Search apps\"\n\n              , _react2.default.createElement('input', {\n                type: \"search\",\n                value: query,\n                onChange: (event) => setQuery(event.target.value),\n                placeholder: \"Try notes, design, or customer support\"     ,}\n              )\n            )\n            , _react2.default.createElement('label', null, \"Category\"\n\n              , _react2.default.createElement('select', {\n                'aria-label': \"Category\",\n                value: category,\n                onChange: (event) => setCategory(event.target.value),}\n\n                , _react2.default.createElement('option', { value: \"\",}, \"All categories\" )\n                , categories.map((item) => (\n                  _react2.default.createElement('option', { key: item.slug, value: item.slug,}\n                    , item.name\n                  )\n                ))\n              )\n            )\n          )\n          , _react2.default.createElement('p', { role: \"status\", 'aria-live': \"polite\",}\n            , visible.length, \" \" , visible.length === 1 ? \"app\" : \"apps\", \" found · Alphabetical order\"\n\n          )\n          , visible.length > 0 ? (\n            _react2.default.createElement('ul', { className: \"cards\",}\n              , visible.map((app) => (\n                _react2.default.createElement('li', { className: \"app-card\", key: app.slug,}\n                  , _react2.default.createElement('span', { className: \"meta\",}, app.categoryName)\n                  , _react2.default.createElement('h3', null, app.name)\n                  , _react2.default.createElement('p', null, app.summary)\n                  , _react2.default.createElement('a', { className: \"profile\", href: \"/apps/\" + app.slug,}, \"Explore \"\n                     , app.name, \" →\"\n                  )\n                )\n              ))\n            )\n          ) : (\n            _react2.default.createElement('div', { className: \"empty\",}\n              , _react2.default.createElement('h3', null, \"No apps match those filters\"    )\n              , _react2.default.createElement('p', null, \"Try a different name or task, or clear the filters to explore the full catalog.\"\n\n\n              )\n              , _react2.default.createElement('button', {\n                type: \"button\",\n                onClick: () => {\n                  setQuery(\"\");\n                  setCategory(\"\");\n                },}\n, \"Clear filters\"\n\n              )\n            )\n          )\n        )\n        , _react2.default.createElement('h2', null, \"Before choosing\" )\n        , _react2.default.createElement('p', null, \"These are descriptions based on official documentation, not tested reviews. Prices, limits, and availability can change; check the vendor’s current information for your account and region. Apps appear alphabetically, without paid placement or implied popularity.\"\n\n\n\n\n        )\n        , _react2.default.createElement('p', null\n          , _react2.default.createElement('a', { href: \"/categories\",}, \"Browse categories\" ), \" ·\" , \" \"\n          , _react2.default.createElement('a', { href: \"/blog/choose-an-app\",}, \"How to choose an app\"    ), \" ·\" , \" \"\n          , _react2.default.createElement('a', { href: \"/methodology\",}, \"Our methodology\" )\n        )\n        , _react2.default.createElement('aside', null\n          , _react2.default.createElement('p', null, \"Discover software by the job you need done. Product descriptions are documentation-based; listing order is alphabetical.\"\n\n\n          )\n          , _react2.default.createElement('nav', { 'aria-label': \"Footer navigation\" ,}\n            , _react2.default.createElement('a', { href: \"/about\",}, \"About\")\n            , _react2.default.createElement('a', { href: \"/methodology\",}, \"Methodology\")\n            , _react2.default.createElement('a', { href: \"/disclosure\",}, \"Disclosure\")\n            , _react2.default.createElement('a', { href: \"/contact\",}, \"Suggest an app\"  )\n          )\n        , _react2.default.createElement('p', { className: \"meta\",}, \"Ranker.dev is an independent software directory and publication. It is not affiliated with Ranker, Inc. or ranker.com.\"                ))\n      )\n    )\n  );\n} exports.default = Page;"}