diff --git a/.eslintrc.json b/.eslintrc.json index cf5ce63f0e..255bfcdf6d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -20,7 +20,7 @@ "plugins": ["typescript-sort-keys", "unused-imports"], "rules": { "react/prop-types": "off", - "prefer-rest-params": "off", + "prefer-rest-params": "off", "typescript-sort-keys/string-enum": [ "error", "asc", diff --git a/.github/workflows/check-and-deploy.yml b/.github/workflows/check-and-deploy.yml index c28c59e7c6..6cce21e7d1 100644 --- a/.github/workflows/check-and-deploy.yml +++ b/.github/workflows/check-and-deploy.yml @@ -5,6 +5,8 @@ env: on: push: +permissions: {} + jobs: check-uniswap-benchmarks: name: Check uniswap Benchmarks @@ -14,10 +16,12 @@ jobs: working-directory: ./ steps: - uses: actions/checkout@v3 + with: + persist-credentials: false - uses: actions/setup-node@v3 with: - node-version: 18.20.4 + node-version: 20 cache: 'yarn' cache-dependency-path: yarn.lock @@ -69,6 +73,8 @@ jobs: poll-interval: 15 - uses: actions/checkout@v3 + with: + persist-credentials: false - name: Audit preview URL with Lighthouse (mobile) id: lighthouse_audit_mobile uses: treosh/lighthouse-ci-action@v9 diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 6b973f2212..a641d69ac9 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -2,6 +2,8 @@ name: Lint on: push +permissions: {} + jobs: lint: name: Run linters @@ -10,11 +12,13 @@ jobs: steps: - name: Check out Git repository uses: actions/checkout@v3 + with: + persist-credentials: false - name: Set up node uses: actions/setup-node@v3 with: - node-version: 18.20.4 + node-version: 20 - name: Install dependencies run: yarn --frozen-lockfile diff --git a/.github/workflows/search.yaml b/.github/workflows/search.yaml index fcd8eca7ff..a15eee8e89 100644 --- a/.github/workflows/search.yaml +++ b/.github/workflows/search.yaml @@ -4,11 +4,15 @@ on: schedule: - cron: '0 10 * * *' +permissions: {} + jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + with: + persist-credentials: false - name: Set up Homebrew uses: Homebrew/actions/setup-homebrew@master - name: Run Scraper diff --git a/api/feedback.ts b/api/feedback.ts index f2a922f4f2..8decac6ebd 100644 --- a/api/feedback.ts +++ b/api/feedback.ts @@ -25,7 +25,6 @@ export default async function handler(req: any, res: any) { return res.status(405).json({ success: false, error: 'Method not allowed' }) } - try { const body = typeof req.body === 'string' ? JSON.parse(req.body) : req.body || {} @@ -40,7 +39,6 @@ export default async function handler(req: any, res: any) { const pageUrl = sanitizeText(body.pageUrl, MAX_PAGE_URL_LENGTH) const followUp = body.followUp - if (!email || !isValidEmail(email)) { return res.status(400).json({ success: false, error: 'Invalid email' }) } @@ -62,7 +60,14 @@ export default async function handler(req: any, res: any) { { name: 'type_of_feedback', value: feedbackType }, { name: 'whats_the_issue_idea_or_question', value: issue }, { name: 'can_we_follow_up_with_you_about_your_feedback', value: followUp ? 'Yes' : 'No' }, - ...(challenges ? [{ name: 'what_has_been_the_most_challenging_part_of_building_on_or_integrating_with_uniswap', value: challenges }] : []), + ...(challenges + ? [ + { + name: 'what_has_been_the_most_challenging_part_of_building_on_or_integrating_with_uniswap', + value: challenges, + }, + ] + : []), ...(docsUsefulness ? [{ name: 'have_you_found_uniswap_docs_to_be_useful', value: docsUsefulness }] : []), ] @@ -95,4 +100,4 @@ export default async function handler(req: any, res: any) { } catch { return res.status(500).json({ success: false, error: 'Internal server error' }) } -} \ No newline at end of file +} diff --git a/docs/contracts/protocol-fee/technical-reference/_category_.json b/docs/contracts/protocol-fee/technical-reference/_category_.json index 85146f6a97..1cd1bd5e62 100644 --- a/docs/contracts/protocol-fee/technical-reference/_category_.json +++ b/docs/contracts/protocol-fee/technical-reference/_category_.json @@ -2,4 +2,4 @@ "label": "Technical Reference", "position": 9, "collapsed": true -} \ No newline at end of file +} diff --git a/docs/contracts/smart-wallet/advanced-usage/_category_.json b/docs/contracts/smart-wallet/advanced-usage/_category_.json index ef845c8fa0..39d6f48bcd 100644 --- a/docs/contracts/smart-wallet/advanced-usage/_category_.json +++ b/docs/contracts/smart-wallet/advanced-usage/_category_.json @@ -1,5 +1,5 @@ { - "label": "Advanced Usage", - "position": 4, - "collapsed": true - } \ No newline at end of file + "label": "Advanced Usage", + "position": 4, + "collapsed": true +} diff --git a/docs/contracts/smart-wallet/concepts/_category_.json b/docs/contracts/smart-wallet/concepts/_category_.json index 6662c1af16..6e81e196df 100644 --- a/docs/contracts/smart-wallet/concepts/_category_.json +++ b/docs/contracts/smart-wallet/concepts/_category_.json @@ -1,5 +1,5 @@ { - "label": "Concepts", - "position": 3, - "collapsed": true - } \ No newline at end of file + "label": "Concepts", + "position": 3, + "collapsed": true +} diff --git a/docs/contracts/uniswapx/fillers/arbitrum/_category_.json b/docs/contracts/uniswapx/fillers/arbitrum/_category_.json index 9c41550098..ad8c268fa1 100644 --- a/docs/contracts/uniswapx/fillers/arbitrum/_category_.json +++ b/docs/contracts/uniswapx/fillers/arbitrum/_category_.json @@ -1,6 +1,5 @@ { - "label": "Arbitrum", - "position": 3, - "collapsed": true - } - \ No newline at end of file + "label": "Arbitrum", + "position": 3, + "collapsed": true +} diff --git a/docs/contracts/uniswapx/fillers/mainnet/_category_.json b/docs/contracts/uniswapx/fillers/mainnet/_category_.json index e917e34968..01b7939342 100644 --- a/docs/contracts/uniswapx/fillers/mainnet/_category_.json +++ b/docs/contracts/uniswapx/fillers/mainnet/_category_.json @@ -1,6 +1,5 @@ { - "label": "Mainnet", - "position": 2, - "collapsed": true - } - \ No newline at end of file + "label": "Mainnet", + "position": 2, + "collapsed": true +} diff --git a/docs/contracts/uniswapx/fillers/priority/_category_.json b/docs/contracts/uniswapx/fillers/priority/_category_.json index 3124c5649f..3f9be4f83c 100644 --- a/docs/contracts/uniswapx/fillers/priority/_category_.json +++ b/docs/contracts/uniswapx/fillers/priority/_category_.json @@ -1,6 +1,5 @@ { - "label": "Unichain, Base", - "position": 4, - "collapsed": true - } - \ No newline at end of file + "label": "Unichain, Base", + "position": 4, + "collapsed": true +} diff --git a/docs/contracts/v3/reference/deployments/_category_.json b/docs/contracts/v3/reference/deployments/_category_.json index db425d21ff..cadf4e2676 100644 --- a/docs/contracts/v3/reference/deployments/_category_.json +++ b/docs/contracts/v3/reference/deployments/_category_.json @@ -1,6 +1,5 @@ { - "label": "Deployments", - "position": 5, - "collapsed": true - } - \ No newline at end of file + "label": "Deployments", + "position": 5, + "collapsed": true +} diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 253b9bff14..2653a15a57 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -87,25 +87,25 @@ const config: Config = { label: 'LLMs', }, { - label: "Give Feedback", + label: 'Give Feedback', to: 'https://share.hsforms.com/1gMemq5uWQS-UaaorwU-qGAs8pgg', target: '_blank', rel: 'noreferrer', }, { - label: "Uniswap Labs", + label: 'Uniswap Labs', to: 'https://app.uniswap.org/', target: '_blank', rel: 'noreferrer', }, { - label: "Whitepaper", + label: 'Whitepaper', to: 'https://app.uniswap.org/whitepaper-v4.pdf', target: '_blank', rel: 'noreferrer', }, { - label: "GitHub", + label: 'GitHub', to: 'https://github.com/Uniswap/docs/', target: '_blank', rel: 'noreferrer', @@ -186,10 +186,10 @@ const config: Config = { { to: '/contracts/v4/guides/hooks/your-first-hook', from: [ - '/contracts/v4/first-hook/building-your-own-hook', - '/tutorials/', - '/contracts/v4/guides/hooks/setup' - ] + '/contracts/v4/first-hook/building-your-own-hook', + '/tutorials/', + '/contracts/v4/guides/hooks/setup', + ], }, { to: '/contracts/v2/guides/smart-contract-integration/using-flash-swaps', @@ -198,10 +198,10 @@ const config: Config = { { to: '/contracts/v4/guides/hooks/hook-deployment', from: [ - '/contracts/v4/concepts/hook-deployment', - '/contracts/v4/first-hook/hook-deployment', - '/contracts/v4/first-hook/testing-hooks' - ] + '/contracts/v4/concepts/hook-deployment', + '/contracts/v4/first-hook/hook-deployment', + '/contracts/v4/first-hook/testing-hooks', + ], }, { to: '/contracts/v3/guides/flash-integrations/flash-callback', @@ -209,17 +209,11 @@ const config: Config = { }, { to: '/contracts/v2/concepts/advanced-topics/fees', - from: [ - '/v2/advanced-topics/understanding-fees/', - '/v2/advanced-topics/fees' - ] + from: ['/v2/advanced-topics/understanding-fees/', '/v2/advanced-topics/fees'], }, { to: '/sdk/v1/overview', - from: [ - '/sdk/1.0.0/reference/format', - '/sdk/1.0.0/' - ] + from: ['/sdk/1.0.0/reference/format', '/sdk/1.0.0/'], }, { to: '/contracts/v4/quickstart/hooks/async-swap', @@ -228,38 +222,38 @@ const config: Config = { { to: '/concepts/glossary', from: [ - //'/contracts/V2/concepts/protocol-overview/glossary', - '/protocol/V2/concepts/protocol-overview/glossary', - '/v2/glossary' - ] + //'/contracts/V2/concepts/protocol-overview/glossary', + '/protocol/V2/concepts/protocol-overview/glossary', + '/v2/glossary', + ], }, { to: '/contracts/v4/overview', from: [ - '/contracts/v4/concepts/v4-architecture-overview', - '/contracts/v4/concepts/v4-', - '/contracts/v4/concepts/overview', - '/contracts/v4/concepts/intro-to-v4', - '/concepts/overview4', - '/contracts/v4/concepts/in-tro-to-v4', - '/protocol/reference/core', - '/protocol', - '/v4', - '/contracts/', - '/reference/smart-contracts' - ] + '/contracts/v4/concepts/v4-architecture-overview', + '/contracts/v4/concepts/v4-', + '/contracts/v4/concepts/overview', + '/contracts/v4/concepts/intro-to-v4', + '/concepts/overview4', + '/contracts/v4/concepts/in-tro-to-v4', + '/protocol/reference/core', + '/protocol', + '/v4', + '/contracts/', + '/reference/smart-contracts', + ], }, { to: '/contracts/v2/overview', from: [ - '/protocol/V2', - '/protocol/V2/concepts/protocol-', - '/v2/', - '/contracts/v2', - '/contracts/v2/overview.md', - '/contracts/v2/concepts/protocol-overview/how-', - '/protocol/v2/introduction' - ] + '/protocol/V2', + '/protocol/V2/concepts/protocol-', + '/v2/', + '/contracts/v2', + '/contracts/v2/overview.md', + '/contracts/v2/concepts/protocol-overview/how-', + '/protocol/v2/introduction', + ], }, { to: '/contracts/v4/guides/custom-accounting', @@ -304,11 +298,11 @@ const config: Config = { { to: '/concepts/protocol/concentrated-liquidity', from: [ - '/concepts/introduction/liquidity-user-guide', - '/concepts/V3-overview/oracle', - '/concepts/V3-overview/concentrated-liquidity', - '/protocol/concepts/V3-overview/concentrated-liquidity' - ] + '/concepts/introduction/liquidity-user-guide', + '/concepts/V3-overview/oracle', + '/concepts/V3-overview/concentrated-liquidity', + '/protocol/concepts/V3-overview/concentrated-liquidity', + ], }, { to: '/concepts/protocol/fees', @@ -336,10 +330,7 @@ const config: Config = { }, { to: '/sdk/v4/overview', - from: [ - '/sdk', - '/sdk/guides' - ] + from: ['/sdk', '/sdk/guides'], }, { to: '/sdk/v1/reference/computation', @@ -360,12 +351,12 @@ const config: Config = { { to: '/concepts/uniswap-protocol', from: [ - '/protocol/V2/concepts/protocol-overview/how-uniswap-works', - '/protocol/V2/concepts/core-', - '/contracts/v2/concepts/protocol-overview/how-uniswap-work', - '/V2/concepts/protocol-overview/01-how-uniswap-works', - '/protocol/V2/concepts/protocol' - ] + '/protocol/V2/concepts/protocol-overview/how-uniswap-works', + '/protocol/V2/concepts/core-', + '/contracts/v2/concepts/protocol-overview/how-uniswap-work', + '/V2/concepts/protocol-overview/01-how-uniswap-works', + '/protocol/V2/concepts/protocol', + ], }, { to: '/contracts/v2/concepts/protocol-overview/smart-contracts', @@ -382,12 +373,12 @@ const config: Config = { { to: '/concepts/governance/overview', from: [ - '/contracts/v3/reference/governance/overview.md', - '/protocol/V2/concepts/governance/governance-reference', - '/protocol/concepts/governance', - '/protocol/reference/Governance/governance-reference', - '/contracts/v2/reference/Governance/governance-' - ] + '/contracts/v3/reference/governance/overview.md', + '/protocol/V2/concepts/governance/governance-reference', + '/protocol/concepts/governance', + '/protocol/reference/Governance/governance-reference', + '/contracts/v2/reference/Governance/governance-', + ], }, { to: '/sdk/v3/guides/liquidity/minting', @@ -399,11 +390,7 @@ const config: Config = { }, { to: '/sdk/v2/overview', - from: [ - '/sdk/2.0.0/introduction', - '/sdk/2.0.0/reference/getting-started', - '/v2/SDK/getting-started' - ] + from: ['/sdk/2.0.0/introduction', '/sdk/2.0.0/reference/getting-started', '/v2/SDK/getting-started'], }, { to: '/concepts/overview', @@ -595,10 +582,7 @@ const config: Config = { }, { to: '/', - from: [ - '/developers/', - '/conce' - ] + from: ['/developers/', '/conce'], }, { to: '/contracts/v3/reference/core/interfaces/pool/IUniswapV3PoolActions', @@ -799,66 +783,66 @@ const config: Config = { }, }, ], - ['docusaurus-plugin-llms', - { - // Options here - generateLLMsTxt: true, - generateLLMsFullTxt: true, - docsDir: 'docs', - ignoreFiles: [ - 'examples/*', - 'plugins/*', - 'scripts/*', - 'src/*', - 'static/*', - 'submodules/*', - 'CONTRIBUTING.md', - '02-overview.mdx', - 'docs/api/subgraph/guides/v3-subgraph-example.md', - 'docs/archived', - 'docs/concepts', - 'docs/contracts/permit2', - 'docs/contracts/smart-wallet', - 'docs/contracts/uniswapx', - 'docs/contracts/universal-router', - 'docs/contracts/v1', - 'docs/contracts/v2', - 'docs/contracts/v3', - 'docs/sdk/core', - 'docs/sdk/swap-widget', - 'docs/sdk/v1', - 'docs/sdk/v2', - 'docs/sdk/v3', - 'docs/sdk/web3-react', - 'docs/universal-router-legacy', - ], - title: 'LLMs.txt for Uniswap v4 Documentation', - description: 'Complete reference documentation for Uniswap v4', - llmsTxtFilename: 'v4-llms.txt', - llmsFullTxtFilename: 'v4-llms-full.txt', - includeBlog: false, - // Content cleaning options - excludeImports: true, - removeDuplicateHeadings: true, - // Control documentation order - includeOrder: [ - // 'docs/contracts/v4/*', - // 'docs/sdk/v4/*', - // 'docs/api/*', - ], - includeUnmatchedLast: true, - // Path transformation options - pathTransformation: { - // Paths to ignore when constructing URLs (will be removed if found) - ignorePaths: ['docs'], - // Paths to add when constructing URLs (will be prepended if not already present) - addPaths: [], + [ + 'docusaurus-plugin-llms', + { + // Options here + generateLLMsTxt: true, + generateLLMsFullTxt: true, + docsDir: 'docs', + ignoreFiles: [ + 'examples/*', + 'plugins/*', + 'scripts/*', + 'src/*', + 'static/*', + 'submodules/*', + 'CONTRIBUTING.md', + '02-overview.mdx', + 'docs/api/subgraph/guides/v3-subgraph-example.md', + 'docs/archived', + 'docs/concepts', + 'docs/contracts/permit2', + 'docs/contracts/smart-wallet', + 'docs/contracts/uniswapx', + 'docs/contracts/universal-router', + 'docs/contracts/v1', + 'docs/contracts/v2', + 'docs/contracts/v3', + 'docs/sdk/core', + 'docs/sdk/swap-widget', + 'docs/sdk/v1', + 'docs/sdk/v2', + 'docs/sdk/v3', + 'docs/sdk/web3-react', + 'docs/universal-router-legacy', + ], + title: 'LLMs.txt for Uniswap v4 Documentation', + description: 'Complete reference documentation for Uniswap v4', + llmsTxtFilename: 'v4-llms.txt', + llmsFullTxtFilename: 'v4-llms-full.txt', + includeBlog: false, + // Content cleaning options + excludeImports: true, + removeDuplicateHeadings: true, + // Control documentation order + includeOrder: [ + // 'docs/contracts/v4/*', + // 'docs/sdk/v4/*', + // 'docs/api/*', + ], + includeUnmatchedLast: true, + // Path transformation options + pathTransformation: { + // Paths to ignore when constructing URLs (will be removed if found) + ignorePaths: ['docs'], + // Paths to add when constructing URLs (will be prepended if not already present) + addPaths: [], + }, + // Custom LLM files for specific documentation sections + customLLMFiles: [], }, - // Custom LLM files for specific documentation sections - customLLMFiles: [ - ], - } - ] + ], ], } export default config diff --git a/package.json b/package.json index 7c2188862e..c9571f539f 100644 --- a/package.json +++ b/package.json @@ -86,11 +86,14 @@ "postcss-import": "^16.1.0", "prettier": "3.3.3", "tailwindcss": "^3.4.13", - "typescript": "^4.8.4" + "typescript": "^5.0.0" }, "engines": { "npm": "please-use-yarn", "node": ">=18", "yarn": ">=1.22" + }, + "resolutions": { + "@types/react": "^18.2.0" } } diff --git a/src/components/Cards.tsx b/src/components/Cards.tsx index 8f80ceeb32..9ee26f3b8d 100644 --- a/src/components/Cards.tsx +++ b/src/components/Cards.tsx @@ -2,11 +2,7 @@ import React from 'react' import clsx from 'clsx' export function Cards({ children }) { - return ( -
- {children} -
- ) + return
{children}
} export function Card({ title, href, highlight }) { @@ -18,10 +14,8 @@ export function Card({ title, href, highlight }) { 'hover:-translate-y-[2px] hover:shadow-light-medium', 'dark:shadow-dark-short hover:dark:shadow-dark-medium', highlight - ? - 'bg-light-pink-fade text-light-accent-1 border-light-accent-1 hover:bg-light-accent-2-hovered hover:border-light-accent-1-hovered dark:bg-dark-pink-fade dark:text-dark-pink-vibrant dark:border-dark-pink-vibrant dark:hover:bg-dark-pink-fade-80' - : - 'bg-light-surface-1 border-light-surface-3 text-light-neutral-1 hover:border-light-accent-1 hover:text-light-accent-1 dark:bg-dark-surface-1 dark:border-dark-surface-3 dark:text-dark-neutral-1 dark:hover:border-dark-accent-1 dark:hover:text-dark-accent-1' + ? 'bg-light-pink-fade text-light-accent-1 border-light-accent-1 hover:bg-light-accent-2-hovered hover:border-light-accent-1-hovered dark:bg-dark-pink-fade dark:text-dark-pink-vibrant dark:border-dark-pink-vibrant dark:hover:bg-dark-pink-fade-80' + : 'bg-light-surface-1 border-light-surface-3 text-light-neutral-1 hover:border-light-accent-1 hover:text-light-accent-1 dark:bg-dark-surface-1 dark:border-dark-surface-3 dark:text-dark-neutral-1 dark:hover:border-dark-accent-1 dark:hover:text-dark-accent-1', )} > {title} diff --git a/src/components/CopyToAI.tsx b/src/components/CopyToAI.tsx index 41a9400b46..283a1547af 100644 --- a/src/components/CopyToAI.tsx +++ b/src/components/CopyToAI.tsx @@ -13,14 +13,13 @@ const CopyToAI: React.FC = ({ className = '' }) => { const getCurrentPageContent = (): string => { // Get the main content area const contentElement = document.querySelector('.markdown') || document.querySelector('main') - if (!contentElement) { return 'Content not available' } + if (!contentElement) { + return 'Content not available' + } // Extract text content and clean it up const textContent = contentElement.textContent || '' - const cleanedContent = textContent - .replace(/\s+/g, ' ') - .replace(/\n+/g, '\n') - .trim() + const cleanedContent = textContent.replace(/\s+/g, ' ').replace(/\n+/g, '\n').trim() const pageUrl = `https://docs.uniswap.org${location.pathname}` const pageTitle = document.title || 'Uniswap Documentation' @@ -46,8 +45,10 @@ ${cleanedContent}` const handleChatGPT = () => { const content = getCurrentPageContent() const encodedContent = encodeURIComponent(content) - const prompt = encodeURIComponent('Please help me understand this Uniswap documentation and answer any questions I have about it.') - + const prompt = encodeURIComponent( + 'Please help me understand this Uniswap documentation and answer any questions I have about it.', + ) + // ChatGPT URL with content const chatGPTUrl = `https://chatgpt.com/?q=${prompt}%0A%0A${encodedContent}` window.open(chatGPTUrl, '_blank') @@ -58,7 +59,7 @@ ${cleanedContent}` try { const content = getCurrentPageContent() await navigator.clipboard.writeText(content) - + // Open Claude and show user instructions window.open('https://claude.ai/chat', '_blank') alert('Content copied to clipboard! Paste it into Claude to get help with this documentation.') @@ -82,7 +83,12 @@ ${cleanedContent}` Ask AI - + @@ -95,7 +101,7 @@ ${cleanedContent}` className="flex items-center w-full px-4 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors" > - + Ask ChatGPT @@ -104,7 +110,7 @@ ${cleanedContent}` className="flex items-center w-full px-4 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors" > - + Ask Claude @@ -114,7 +120,12 @@ ${cleanedContent}` className="flex items-center w-full px-4 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors" > - + {copied ? 'Copied!' : 'Copy content'} @@ -123,15 +134,9 @@ ${cleanedContent}` )} {/* Click outside to close */} - {isOpen && ( -
setIsOpen(false)} - aria-hidden="true" - /> - )} + {isOpen &&
setIsOpen(false)} aria-hidden="true" />}
) } -export default CopyToAI \ No newline at end of file +export default CopyToAI diff --git a/src/components/FeedbackForm.tsx b/src/components/FeedbackForm.tsx index aa61fb3193..cbf5d42e67 100644 --- a/src/components/FeedbackForm.tsx +++ b/src/components/FeedbackForm.tsx @@ -38,7 +38,7 @@ export default function FeedbackForm() { challenges, docsUsefulness, pageUrl: typeof window !== 'undefined' ? window.location.href : '', - website: '', + website: '', }), }) @@ -67,17 +67,14 @@ export default function FeedbackForm() { if (status === 'success') { return (
- -

- Thanks for submitting your feedback -

+

Thanks for submitting your feedback

We really appreciate you taking the time to share your thoughts.

- If you left your contact info, we'll follow up with updates or questions as we make improvements. + If you left your contact info, we'll follow up with updates or questions as we make improvements.

- +