diff --git a/.cta.json b/.cta.json
deleted file mode 100644
index d96f1b7..0000000
--- a/.cta.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "projectName": "linearmouse-website",
- "mode": "file-router",
- "typescript": true,
- "tailwind": true,
- "packageManager": "pnpm",
- "git": false,
- "install": true,
- "addOnOptions": {},
- "includeExamples": true,
- "envVarValues": {},
- "routerOnly": false,
- "version": 1,
- "framework": "react-cra",
- "chosenAddOns": [
- "cloudflare"
- ]
-}
\ No newline at end of file
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..c550055
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,7 @@
+Dockerfile
+.dockerignore
+node_modules
+npm-debug.log
+README.md
+.next
+.git
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100755
index 0000000..f0f3abe
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,6 @@
+{
+ "extends": "next/core-web-vitals",
+ "rules": {
+ "@next/next/no-img-element": "off"
+ }
+}
diff --git a/.github/workflows/create-and-publish-docker-image.yml b/.github/workflows/create-and-publish-docker-image.yml
new file mode 100644
index 0000000..27df2b6
--- /dev/null
+++ b/.github/workflows/create-and-publish-docker-image.yml
@@ -0,0 +1,49 @@
+name: Create and publish Docker image
+
+on:
+ push:
+ branches:
+ - main
+
+env:
+ REGISTRY: ghcr.io
+ IMAGE_NAME: ${{ github.repository }}
+
+jobs:
+ build-and-push-image:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ packages: write
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Log in to the Container registry
+ uses: docker/login-action@v2
+ with:
+ registry: ${{ env.REGISTRY }}
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+
+ - name: Extract metadata (tags, labels) for Docker
+ id: meta
+ uses: docker/metadata-action@v4
+ with:
+ images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
+
+ - name: Build and push Docker image
+ uses: docker/build-push-action@v4
+ with:
+ context: .
+ platforms: linux/amd64,linux/arm64
+ push: true
+ tags: ${{ steps.meta.outputs.tags }}
+ labels: ${{ steps.meta.outputs.labels }}
diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
index c150577..737d872
--- a/.gitignore
+++ b/.gitignore
@@ -1,17 +1,35 @@
-node_modules
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
.DS_Store
-dist
-dist-ssr
-*.local
-.env
-.nitro
-.tanstack
-.wrangler
-.output
-.vinxi
-__unconfig*
-todos.json
-
-.dev.vars*
-!.dev.vars.example
-!.env.example
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.pnpm-debug.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000..9f5de3d
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,2 @@
+.next
+.swc
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..ef2a84e
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,8 @@
+{
+ "printWidth": 120,
+ "singleQuote": true,
+ "semi": false,
+ "trailingComma": "none",
+ "importOrder": ["", "^components/", "^./"],
+ "importOrderSeparation": true
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 00b5278..ad92582 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,11 +1,3 @@
{
- "files.watcherExclude": {
- "**/routeTree.gen.ts": true
- },
- "search.exclude": {
- "**/routeTree.gen.ts": true
- },
- "files.readonlyInclude": {
- "**/routeTree.gen.ts": true
- }
+ "editor.formatOnSave": true
}
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..50a7455
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,48 @@
+FROM node:24-slim AS deps
+ENV PNPM_HOME="/pnpm"
+ENV PATH="$PNPM_HOME:$PATH"
+RUN corepack enable
+WORKDIR /app
+
+COPY pnpm-lock.yaml package.json ./
+RUN pnpm install --frozen-lockfile
+
+FROM node:24-slim AS builder
+ENV PNPM_HOME="/pnpm"
+ENV PATH="$PNPM_HOME:$PATH"
+RUN corepack enable
+WORKDIR /app
+COPY --from=deps /app/node_modules ./node_modules
+COPY . .
+
+ENV NEXT_TELEMETRY_DISABLED=1
+
+RUN pnpm run build
+
+FROM node:24-slim AS runner
+WORKDIR /app
+
+RUN apt update && apt install -y wget
+
+ENV NODE_ENV=production
+ENV NEXT_TELEMETRY_DISABLED=1
+
+RUN addgroup --system --gid 1001 nodejs
+RUN adduser --system --uid 1001 nextjs
+
+COPY --from=builder /app/public ./public
+
+COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
+COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
+
+USER nextjs
+
+EXPOSE 3000
+
+ENV HOSTNAME="0.0.0.0"
+ENV PORT=3000
+
+HEALTHCHECK --timeout=3s --start-period=10s \
+ CMD wget -nv -t1 --spider http://localhost:3000/ || exit 1
+
+CMD ["node", "server.js"]
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
index 4aaad03..ecee56a
--- a/README.md
+++ b/README.md
@@ -1,193 +1,5 @@
-Welcome to your new TanStack Start app!
+# [linearmouse.app](https://linearmouse.app)
-# Getting Started
+The LinearMouse website.
-To run this application:
-
-```bash
-pnpm install
-pnpm dev
-```
-
-# Building For Production
-
-To build this application for production:
-
-```bash
-pnpm build
-```
-
-## Testing
-
-This project uses [Vitest](https://vitest.dev/) for testing. You can run the tests with:
-
-```bash
-pnpm test
-```
-
-## Styling
-
-This project uses [Tailwind CSS](https://tailwindcss.com/) for styling.
-
-### Removing Tailwind CSS
-
-If you prefer not to use Tailwind CSS:
-
-1. Remove the demo pages in `src/routes/demo/`
-2. Replace the Tailwind import in `src/styles.css` with your own styles
-3. Remove `tailwindcss()` from the plugins array in `vite.config.ts`
-4. Uninstall the packages: `pnpm add @tailwindcss/vite tailwindcss --dev`
-
-
-
-## Routing
-
-This project uses [TanStack Router](https://tanstack.com/router) with file-based routing. Routes are managed as files in `src/routes`.
-
-### Adding A Route
-
-To add a new route to your application just add a new file in the `./src/routes` directory.
-
-TanStack will automatically generate the content of the route file for you.
-
-Now that you have two routes you can use a `Link` component to navigate between them.
-
-### Adding Links
-
-To use SPA (Single Page Application) navigation you will need to import the `Link` component from `@tanstack/react-router`.
-
-```tsx
-import { Link } from "@tanstack/react-router";
-```
-
-Then anywhere in your JSX you can use it like so:
-
-```tsx
- About
-```
-
-This will create a link that will navigate to the `/about` route.
-
-More information on the `Link` component can be found in the [Link documentation](https://tanstack.com/router/v1/docs/framework/react/api/router/linkComponent).
-
-### Using A Layout
-
-In the File Based Routing setup the layout is located in `src/routes/__root.tsx`. Anything you add to the root route will appear in all the routes. The route content will appear in the JSX where you render `{children}` in the `shellComponent`.
-
-Here is an example layout that includes a header:
-
-```tsx
-import { HeadContent, Scripts, createRootRoute } from '@tanstack/react-router'
-
-export const Route = createRootRoute({
- head: () => ({
- meta: [
- { charSet: 'utf-8' },
- { name: 'viewport', content: 'width=device-width, initial-scale=1' },
- { title: 'My App' },
- ],
- }),
- shellComponent: ({ children }) => (
-
-
-
-
-
-
- {children}
-
-
-
- ),
-})
-```
-
-More information on layouts can be found in the [Layouts documentation](https://tanstack.com/router/latest/docs/framework/react/guide/routing-concepts#layouts).
-
-## Server Functions
-
-TanStack Start provides server functions that allow you to write server-side code that seamlessly integrates with your client components.
-
-```tsx
-import { createServerFn } from '@tanstack/react-start'
-
-const getServerTime = createServerFn({
- method: 'GET',
-}).handler(async () => {
- return new Date().toISOString()
-})
-
-// Use in a component
-function MyComponent() {
- const [time, setTime] = useState('')
-
- useEffect(() => {
- getServerTime().then(setTime)
- }, [])
-
- return Server time: {time}
-}
-```
-
-## API Routes
-
-You can create API routes by using the `server` property in your route definitions:
-
-```tsx
-import { createFileRoute } from '@tanstack/react-router'
-import { json } from '@tanstack/react-start'
-
-export const Route = createFileRoute('/api/hello')({
- server: {
- handlers: {
- GET: () => json({ message: 'Hello, World!' }),
- },
- },
-})
-```
-
-## Data Fetching
-
-There are multiple ways to fetch data in your application. You can use TanStack Query to fetch data from a server. But you can also use the `loader` functionality built into TanStack Router to load the data for a route before it's rendered.
-
-For example:
-
-```tsx
-import { createFileRoute } from '@tanstack/react-router'
-
-export const Route = createFileRoute('/people')({
- loader: async () => {
- const response = await fetch('https://swapi.dev/api/people')
- return response.json()
- },
- component: PeopleComponent,
-})
-
-function PeopleComponent() {
- const data = Route.useLoaderData()
- return (
-
- {data.results.map((person) => (
- {person.name}
- ))}
-
- )
-}
-```
-
-Loaders simplify your data fetching logic dramatically. Check out more information in the [Loader documentation](https://tanstack.com/router/latest/docs/framework/react/guide/data-loading#loader-parameters).
-
-# Demo files
-
-Files prefixed with `demo` can be safely deleted. They are there to provide a starting point for you to play around with the features you've installed.
-
-# Learn More
-
-You can learn more about all of the offerings from TanStack in the [TanStack documentation](https://tanstack.com).
-
-For TanStack Start specific documentation, visit [TanStack Start](https://tanstack.com/start).
+[Help translate](https://crowdin.com/project/linearmouse)
diff --git a/app/[locale]/layout.tsx b/app/[locale]/layout.tsx
new file mode 100644
index 0000000..a030edd
--- /dev/null
+++ b/app/[locale]/layout.tsx
@@ -0,0 +1,42 @@
+import GlobalStyle from 'components/GlobalStyle'
+import StyledComponentsRegistry from 'components/styled-components-regsitry'
+import { NextIntlClientProvider } from 'next-intl'
+import { hasLocale } from 'next-intl'
+import { setRequestLocale } from 'next-intl/server'
+import { notFound } from 'next/navigation'
+
+import { routing } from 'i18n/routing'
+
+export function generateStaticParams() {
+ return routing.locales.map((locale) => ({ locale }))
+}
+
+export default async function Layout({
+ children,
+ params
+}: {
+ children: React.ReactNode
+ params: Promise<{ locale: string }>
+}) {
+ const { locale } = await params
+ if (!hasLocale(routing.locales, locale)) {
+ notFound()
+ }
+ setRequestLocale(locale)
+
+ return (
+
+
+
+
+
+
+
+
+
+ {children}
+
+
+
+ )
+}
diff --git a/app/[locale]/page.tsx b/app/[locale]/page.tsx
new file mode 100755
index 0000000..1186fa6
--- /dev/null
+++ b/app/[locale]/page.tsx
@@ -0,0 +1,33 @@
+import { getTranslations, setRequestLocale } from 'next-intl/server'
+
+import Features from 'components/features'
+import Footer from 'components/footer'
+import Header from 'components/header'
+import Hero from 'components/hero'
+
+export const generateMetadata = async ({ params }: { params: Promise<{ locale: string }> }) => {
+ const { locale } = await params
+ const t = await getTranslations({ locale, namespace: 'index' })
+
+ return {
+ title: t('title'),
+ description: t('description')
+ }
+}
+
+export default async function Home({ params }: { params: Promise<{ locale: string }> }) {
+ const { locale } = await params
+ setRequestLocale(locale)
+
+ return (
+ <>
+
+
+
+
+
+
+
+ >
+ )
+}
diff --git a/components/GlobalStyle.ts b/components/GlobalStyle.ts
new file mode 100644
index 0000000..bd7e3f4
--- /dev/null
+++ b/components/GlobalStyle.ts
@@ -0,0 +1,101 @@
+'use client'
+
+import { PT_Sans } from 'next/font/google'
+import { createGlobalStyle, css } from 'styled-components'
+
+const ptSans = PT_Sans({
+ subsets: ['latin'],
+ weight: ['400', '700'],
+ fallback: []
+})
+
+const GlobalStyle = createGlobalStyle`${css`
+ :root {
+ --color-background-hsl: 217 20% 98%;
+ --color-background: hsl(var(--color-background-hsl));
+ --color-circle: hsl(217deg 40% 95%);
+ --color-text: hsl(217deg 20% 19%);
+ --color-primary: hsl(217deg 90% 50%);
+ --color-primary-darker: hsl(217deg 90% 42%);
+ --color-primary-dark: hsl(217deg 90% 25%);
+ --color-white: #fff;
+ --color-shadow-hsl: 210deg 5% 62%;
+
+ --max-width: 1400px;
+
+ --font-family:
+ -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue',
+ sans-serif;
+ --font-family-title:
+ ${ptSans.style.fontFamily}, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell,
+ 'Open Sans', 'Helvetica Neue', sans-serif;
+
+ --border-radius-sm: 0.25rem;
+ --border-radius-md: 0.375rem;
+ --border-radius-lg: 0.625rem;
+
+ --shadow-md:
+ 0.3px 0.5px 0.7px hsl(var(--color-shadow-hsl) / 0.21),
+ 0.8px 1.6px 2.1px -0.7px hsl(var(--color-shadow-hsl) / 0.23),
+ 1.9px 3.7px 5px -1.3px hsl(var(--color-shadow-hsl) / 0.26),
+ 4.3px 8.7px 11.6px -2px hsl(var(--color-shadow-hsl) / 0.29);
+ }
+
+ @media (prefers-color-scheme: dark) {
+ :root {
+ color-scheme: dark;
+
+ --color-background-hsl: 217 20% 8%;
+ --color-circle: hsl(217deg 40% 5%);
+ --color-text: hsl(217deg 20% 85%);
+ --color-primary: hsl(217deg 90% 53%);
+ --color-primary-darker: hsl(217deg 90% 60%);
+ --color-primary-dark: hsl(217deg 90% 65%);
+ --color-white: hsl(217deg 20% 2%);
+ --color-shadow-hsl: 218 33% 1%;
+ }
+ }
+
+ html {
+ font-family: var(--font-family);
+ line-height: 1.5;
+ background-color: var(--color-background);
+ color: var(--color-text);
+ }
+
+ html:lang(ar),
+ html:lang(he) {
+ direction: rtl;
+ }
+
+ @media (max-width: 768px) {
+ html {
+ font-size: 0.875em;
+ }
+ }
+
+ body {
+ margin: 0;
+ }
+
+ #__next {
+ isolation: isolate;
+ }
+
+ .dark-only {
+ display: none;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ .dark-only {
+ display: block;
+ }
+
+ .light-only {
+ display: none;
+ }
+ }
+`}
+`
+
+export default GlobalStyle
diff --git a/components/circle-background/index.tsx b/components/circle-background/index.tsx
new file mode 100644
index 0000000..2d759b4
--- /dev/null
+++ b/components/circle-background/index.tsx
@@ -0,0 +1,37 @@
+'use client'
+
+import styled from 'styled-components'
+
+const Wrapper = styled.div`
+ position: absolute;
+ right: 0;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ overflow: hidden;
+ z-index: -1000;
+ pointer-events: none;
+
+ @media (max-width: 1190px) {
+ display: none;
+ }
+`
+
+const Circle = styled.div`
+ position: absolute;
+ left: 52vw;
+ top: 0;
+ width: 1000px;
+ height: 1000px;
+ transform: translate(10%, -60%);
+ background-color: var(--color-circle);
+ border-radius: 50%;
+`
+
+const CircleBackground = () => (
+
+
+
+)
+
+export default CircleBackground
diff --git a/components/content/index.tsx b/components/content/index.tsx
new file mode 100644
index 0000000..45ccbf6
--- /dev/null
+++ b/components/content/index.tsx
@@ -0,0 +1,29 @@
+import { PropsWithChildren } from 'react'
+import styled from 'styled-components'
+
+import MaxWidthWrapper from 'components/max-width-wrapper'
+import Spacer from 'components/spacer'
+
+const Wrapper = styled.div`
+ h1 {
+ margin: 2rem 0 1rem;
+ font-size: 1.875rem;
+ }
+
+ h2 {
+ margin: 1rem 0;
+ font-size: 1.5rem;
+ }
+`
+
+export type ContentProps = PropsWithChildren<{}>
+
+const Content = ({ children }: ContentProps) => (
+
+
+
+ {children}
+
+)
+
+export default Content
diff --git a/components/cookie-consent/index.tsx b/components/cookie-consent/index.tsx
new file mode 100644
index 0000000..f264076
--- /dev/null
+++ b/components/cookie-consent/index.tsx
@@ -0,0 +1,84 @@
+'use client'
+
+import { useTranslations } from 'next-intl'
+import { useEffect, useState } from 'react'
+import styled from 'styled-components'
+
+import MaxWidthWrapper from 'components/max-width-wrapper'
+
+const Wrapper = styled.div`
+ position: sticky;
+ bottom: 0;
+ z-index: 10;
+ padding: 1rem 0;
+ background-color: hsl(var(--color-background-hsl) / 0.8);
+ backdrop-filter: saturate(180%) blur(20px);
+
+ & > ${MaxWidthWrapper} {
+ display: flex;
+ align-items: center;
+ gap: 2rem;
+ }
+
+ button {
+ appearance: none;
+ margin: 0 0 0 auto;
+ padding: 0.4rem 1.5rem;
+ border: 0 none;
+ border-radius: var(--border-radius-sm);
+ font: inherit;
+ font-weight: bold;
+ color: #fff;
+ background-color: var(--color-primary);
+ cursor: pointer;
+ transition: background-color 0.15s ease;
+
+ &:active {
+ background-color: var(--color-primary-darker);
+ }
+ }
+
+ @media (max-width: 512px) {
+ & > ${MaxWidthWrapper} {
+ flex-direction: column;
+ align-items: flex-start;
+ gap: 1rem;
+ }
+
+ button {
+ margin: 0;
+ width: 100%;
+ }
+ }
+`
+
+const storageKey = 'cookie_consent_informed'
+
+const CookieConsent = () => {
+ const t = useTranslations('common')
+ const [visible, setVisible] = useState(false)
+
+ useEffect(() => {
+ if (!localStorage.getItem(storageKey)) setVisible(true)
+ }, [])
+
+ const updateCookieConsentInformed = () => {
+ localStorage.setItem(storageKey, '1')
+ setVisible(false)
+ }
+
+ if (!visible) return null
+
+ return (
+
+
+ {t('cookie_consent.description')}
+
+ {t('ok')}
+
+
+
+ )
+}
+
+export default CookieConsent
diff --git a/public/features/feature-1-dark.png b/components/features/feature-1-dark.png
similarity index 100%
rename from public/features/feature-1-dark.png
rename to components/features/feature-1-dark.png
diff --git a/public/features/feature-1.png b/components/features/feature-1.png
similarity index 100%
rename from public/features/feature-1.png
rename to components/features/feature-1.png
diff --git a/public/features/feature-2-dark.png b/components/features/feature-2-dark.png
similarity index 100%
rename from public/features/feature-2-dark.png
rename to components/features/feature-2-dark.png
diff --git a/public/features/feature-2.png b/components/features/feature-2.png
similarity index 100%
rename from public/features/feature-2.png
rename to components/features/feature-2.png
diff --git a/public/features/feature-3-dark.png b/components/features/feature-3-dark.png
similarity index 100%
rename from public/features/feature-3-dark.png
rename to components/features/feature-3-dark.png
diff --git a/public/features/feature-3.png b/components/features/feature-3.png
similarity index 100%
rename from public/features/feature-3.png
rename to components/features/feature-3.png
diff --git a/components/features/index.tsx b/components/features/index.tsx
new file mode 100644
index 0000000..f5b2dd9
--- /dev/null
+++ b/components/features/index.tsx
@@ -0,0 +1,61 @@
+import { RichTagsFunction, useTranslations } from 'next-intl'
+import Image from 'next/image'
+
+import MaxWidthWrapper from 'components/max-width-wrapper'
+
+import feature1Dark from './feature-1-dark.png'
+import feature1 from './feature-1.png'
+import feature2Dark from './feature-2-dark.png'
+import feature2 from './feature-2.png'
+import feature3Dark from './feature-3-dark.png'
+import feature3 from './feature-3.png'
+import { Description, FeatureImageWrapper, FeatureWrapper, Heading, Wrapper } from './styles'
+
+const Features = () => {
+ const images = [
+ {
+ light: feature1,
+ dark: feature1Dark
+ },
+ {
+ light: feature2,
+ dark: feature2Dark
+ },
+ {
+ light: feature3,
+ dark: feature3Dark
+ }
+ ]
+
+ const t = useTranslations('index')
+
+ const componentElements: Record = {
+ p: (chunks) => {chunks}
,
+ q: (chunks) => {chunks} ,
+ strong: (chunks) => {chunks}
+ }
+
+ return (
+
+ {images.map(({ light, dark }, index) => (
+
+
+ {t.rich(`features.${index}.title`, componentElements)}
+ {t.rich(`features.${index}.description`, componentElements)}
+
+
+
+
+
+
+
+
+
+
+
+ ))}
+
+ )
+}
+
+export default Features
diff --git a/components/features/styles.tsx b/components/features/styles.tsx
new file mode 100644
index 0000000..23aa947
--- /dev/null
+++ b/components/features/styles.tsx
@@ -0,0 +1,122 @@
+'use client'
+
+import { styled } from 'styled-components'
+import MaxWidthWrapper from '../max-width-wrapper'
+
+export const Wrapper = styled.div``
+
+export const FeatureWrapper = styled.div`
+ position: relative;
+ padding: 6.25rem 0;
+ box-sizing: border-box;
+ min-height: 600px;
+ display: flex;
+ align-items: center;
+ overflow: hidden;
+
+ &:nth-child(odd) {
+ background-color: var(--color-white);
+ }
+
+ ${MaxWidthWrapper} {
+ margin-inline-start: 52vw;
+ margin-inline-end: auto;
+ }
+
+ &:nth-child(even) {
+ ${MaxWidthWrapper} {
+ margin-inline-end: 52vw;
+ margin-inline-start: auto;
+ }
+ }
+
+ &:nth-child(odd) ${MaxWidthWrapper} {
+ padding-inline-start: 0;
+ }
+
+ &:nth-child(even) ${MaxWidthWrapper} {
+ padding-inline-end: 0;
+ }
+
+ @media (max-width: 960px) {
+ flex-direction: column;
+
+ &:nth-child(odd) ${MaxWidthWrapper}, &:nth-child(even) ${MaxWidthWrapper} {
+ margin: 0;
+ padding: 0 2rem;
+ box-sizing: border-box;
+ width: 100%;
+ }
+ }
+`
+
+export const FeatureImageWrapper = styled.div`
+ position: absolute;
+ right: 50vw;
+ top: 3.75rem;
+
+ &:lang(ar),
+ &:lang(he) {
+ right: revert;
+ left: 50vw;
+ }
+
+ ${FeatureWrapper}:nth-child(even) > & {
+ right: revert;
+ left: 50vw;
+
+ &:lang(ar),
+ &:lang(he) {
+ right: 50vw;
+ left: revert;
+ }
+ }
+
+ @media (max-width: 960px) {
+ position: static;
+ margin-bottom: -20rem;
+ }
+`
+
+export const Heading = styled.div`
+ margin-bottom: 1.5rem;
+ font-size: 2.25rem;
+ line-height: 1.3;
+ font-family: var(--font-family-title);
+ font-weight: bold;
+ white-space: pre-wrap;
+
+ strong {
+ position: relative;
+ color: var(--color-primary-dark);
+ line-height: 1.3;
+ width: fit-content;
+ transition: opacity 0.5s 0.2s ease;
+ will-change: opacity;
+ white-space: nowrap;
+
+ &::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ right: 0;
+ bottom: 0.2em;
+ height: 0.3em;
+ background-color: var(--color-primary);
+ opacity: 0.2;
+ }
+ }
+
+ @media (max-width: 960px) {
+ text-align: center;
+ }
+`
+
+export const Description = styled.div`
+ opacity: 0.8;
+ white-space: pre-wrap;
+
+ p:not(:last-child) {
+ margin: 0 0 0.5rem;
+ }
+`
diff --git a/components/footer/index.tsx b/components/footer/index.tsx
new file mode 100644
index 0000000..578bb67
--- /dev/null
+++ b/components/footer/index.tsx
@@ -0,0 +1,29 @@
+import { useTranslations } from 'next-intl'
+
+import CookieConsent from 'components/cookie-consent'
+import MaxWidthWrapper from 'components/max-width-wrapper'
+import { Wrapper, Copyright, Links } from './styles'
+
+const Footer = () => {
+ const t = useTranslations('common')
+
+ return (
+ <>
+
+
+ © 2021-{new Date().getFullYear()} LinearMouse
+
+
+
+ {t('footer.help_translate')}
+
+ {t('footer.privacy_policy')}
+
+
+
+
+ >
+ )
+}
+
+export default Footer
diff --git a/components/footer/styles.tsx b/components/footer/styles.tsx
new file mode 100644
index 0000000..9c0f952
--- /dev/null
+++ b/components/footer/styles.tsx
@@ -0,0 +1,41 @@
+'use client'
+
+import MaxWidthWrapper from 'components/max-width-wrapper'
+import { styled } from 'styled-components'
+
+export const Wrapper = styled.div`
+ padding: 2rem 0;
+ font-size: 0.875rem;
+
+ & > ${MaxWidthWrapper} {
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 2rem;
+ }
+`
+
+export const Copyright = styled.div`
+ opacity: 0.8;
+`
+
+export const Links = styled.ol`
+ display: flex;
+ gap: 1rem;
+
+ &,
+ li {
+ margin: 0;
+ padding: 0;
+ }
+
+ & {
+ margin-inline-start: auto;
+ }
+
+ a {
+ color: var(--color-text);
+ text-decoration: none;
+ font-weight: 500;
+ }
+`
diff --git a/components/header/index.tsx b/components/header/index.tsx
new file mode 100644
index 0000000..e9cf2b3
--- /dev/null
+++ b/components/header/index.tsx
@@ -0,0 +1,77 @@
+'use client'
+
+import { useEffect, useState } from 'react'
+import styled from 'styled-components'
+
+import MaxWidthWrapper from 'components/max-width-wrapper'
+
+import Logo from './logo'
+import Navigation from './navigation'
+
+type WrapperProps = {
+ $scrollTop: number
+}
+
+const Wrapper = styled.div.attrs((props) => ({}))`
+ position: fixed;
+ left: 0;
+ right: 0;
+ top: 0;
+ z-index: 1000;
+ margin: 0 auto;
+ padding: 3.4375rem 0;
+ --progress: ${({ $scrollTop }) => Math.min($scrollTop / 100, 1)};
+
+ @media (max-width: 960px) {
+ position: absolute;
+ }
+
+ & > ${MaxWidthWrapper} {
+ display: flex;
+ align-items: center;
+
+ @media (max-width: 512px) {
+ flex-direction: column;
+ }
+ }
+
+ &::after {
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ content: '';
+ background-color: hsl(var(--color-background-hsl) / calc(var(--progress) * 0.8));
+ z-index: -1;
+ pointer-events: none;
+ backdrop-filter: saturate(calc(100% + var(--progress) * 80%)) blur(calc(var(--progress) * 20px));
+ }
+`
+
+const Header = () => {
+ const [scrollTop, setScrollTop] = useState(0)
+
+ useEffect(() => {
+ const update = () => {
+ setScrollTop(document.documentElement.scrollTop)
+ }
+
+ update()
+
+ addEventListener('scroll', update)
+
+ return () => removeEventListener('scroll', update)
+ }, [])
+
+ return (
+
+
+
+
+
+
+ )
+}
+
+export default Header
diff --git a/components/header/logo/index.tsx b/components/header/logo/index.tsx
new file mode 100644
index 0000000..e445e9c
--- /dev/null
+++ b/components/header/logo/index.tsx
@@ -0,0 +1,53 @@
+import Link from 'next/link'
+import styled from 'styled-components'
+
+const Wrapper = styled(Link)`
+ padding: 0.3125rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+
+ svg {
+ fill: var(--color-primary-dark);
+ }
+`
+
+const Logo = () => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+)
+
+export default Logo
diff --git a/components/header/navigation/index.tsx b/components/header/navigation/index.tsx
new file mode 100644
index 0000000..c016f57
--- /dev/null
+++ b/components/header/navigation/index.tsx
@@ -0,0 +1,44 @@
+import { useTranslations } from 'next-intl'
+import styled from 'styled-components'
+
+import LanguageSelect from 'components/language-select'
+
+const Wrapper = styled.div`
+ margin-inline-start: auto;
+ display: flex;
+ gap: 1.875rem;
+ font-family: var(--font-family-title);
+
+ a,
+ button {
+ font-weight: bold;
+ text-decoration: none;
+ color: var(--color-text);
+ transition: color 0.15s ease;
+ line-height: 2.5rem;
+
+ &:hover {
+ color: var(--color-primary);
+ }
+ }
+
+ @media (max-width: 512px) {
+ margin-top: 1.5rem;
+ margin-right: auto;
+ }
+`
+
+const Navigation = () => {
+ const t = useTranslations('common')
+
+ return (
+
+ {t('navigation.github')}
+ {t('navigation.discussions')}
+
+
+
+ )
+}
+
+export default Navigation
diff --git a/components/hero/download/index.tsx b/components/hero/download/index.tsx
new file mode 100644
index 0000000..ea7ffcc
--- /dev/null
+++ b/components/hero/download/index.tsx
@@ -0,0 +1,119 @@
+'use client'
+
+import { useTranslations } from 'next-intl'
+import { useCallback, useState } from 'react'
+import styled from 'styled-components'
+
+const Wrapper = styled.div`
+ contain: content;
+`
+
+const Buttons = styled.div`
+ display: flex;
+ align-items: center;
+ gap: 1.875rem;
+
+ @media (max-width: 1190px) {
+ justify-content: center;
+ }
+`
+
+const DownloadButton = styled.a`
+ display: flex;
+ align-items: center;
+ padding: 1rem 1.75rem;
+ background: var(--color-primary);
+ border-radius: var(--border-radius-lg);
+ color: #fff;
+ text-decoration: none;
+ font-weight: 500;
+ line-height: 1.0416;
+ transition: background-color 0.1s ease;
+
+ &::before {
+ margin-inline-end: 0.625rem;
+ content: '';
+ font-size: 1.2rem;
+ }
+
+ &:active {
+ background-color: var(--color-primary-darker);
+ }
+`
+
+const InstallViaHomebrewButton = styled.button`
+ position: relative;
+ margin: 0;
+ padding: 1rem 0;
+ appearance: none;
+ border: 0 none;
+ background: none;
+ color: var(--color-primary);
+ font-size: 1rem;
+ font-weight: 500;
+ cursor: pointer;
+ transition: color 0.1s ease;
+
+ &:active {
+ color: var(--color-primary-darker);
+ }
+`
+
+const Copied = styled.span`
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: var(--color-background);
+ transition: opacity 0.1s ease;
+ will-change: opacity;
+
+ &::before {
+ content: '✓';
+ margin-right: 3px;
+ }
+`
+
+const Download = () => {
+ const t = useTranslations('index')
+
+ const [copied, setCopied] = useState(false)
+
+ const copyHomebrewInstallCommand = useCallback(() => {
+ const command = 'brew install --cask linearmouse'
+ if (typeof navigator.clipboard?.writeText === 'function') {
+ navigator.clipboard.writeText(command)
+ } else {
+ const input = document.createElement('input')
+ input.style.position = 'absolute'
+ input.style.left = '-1000px'
+ document.body.appendChild(input)
+ input.value = command
+ input.select()
+ document.execCommand('copy')
+ input.remove()
+ }
+ setCopied(true)
+ setTimeout(() => void setCopied(false), 1000)
+ }, [])
+
+ return (
+
+
+
+ {t('install.download')}
+
+
+ {t('install.install_via_homebrew')}
+ {t('install.copied')}
+
+
+
+ )
+}
+
+export default Download
diff --git a/components/hero/index.tsx b/components/hero/index.tsx
new file mode 100644
index 0000000..02dc580
--- /dev/null
+++ b/components/hero/index.tsx
@@ -0,0 +1,24 @@
+import CircleBackground from 'components/circle-background'
+import MaxWidthWrapper from 'components/max-width-wrapper'
+import Spacer from 'components/spacer'
+
+import Download from './download'
+import Screenshots from './screenshots'
+import Slogan from './slogan'
+import { Wrapper } from './styles'
+
+const Hero = () => (
+
+
+
+
+
+
+
+
+
+
+
+)
+
+export default Hero
diff --git a/public/hero/screenshots/buttons-dark.png b/components/hero/screenshots/buttons-dark.png
similarity index 100%
rename from public/hero/screenshots/buttons-dark.png
rename to components/hero/screenshots/buttons-dark.png
diff --git a/public/hero/screenshots/buttons.png b/components/hero/screenshots/buttons.png
similarity index 100%
rename from public/hero/screenshots/buttons.png
rename to components/hero/screenshots/buttons.png
diff --git a/components/hero/screenshots/index.tsx b/components/hero/screenshots/index.tsx
new file mode 100644
index 0000000..393486b
--- /dev/null
+++ b/components/hero/screenshots/index.tsx
@@ -0,0 +1,89 @@
+'use client'
+
+import Image from 'next/image'
+import { useEffect, useState } from 'react'
+import styled, { createGlobalStyle, css } from 'styled-components'
+
+import buttonsDark from './buttons-dark.png'
+import buttons from './buttons.png'
+import modifierKeysDark from './modifier-keys-dark.png'
+import modifierKeys from './modifier-keys.png'
+import pointerDark from './pointer-dark.png'
+import pointer from './pointer.png'
+import scrollingDark from './scrolling-dark.png'
+import scrolling from './scrolling.png'
+
+const Wrapper = styled.div`
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ z-index: -1;
+ overflow: hidden;
+ contain: strict;
+ pointer-events: none;
+
+ @media (max-width: 1190px) {
+ display: none;
+ }
+`
+
+const ImageWrapper = styled.div`
+ position: absolute;
+ left: 52vw;
+ top: 6.75rem;
+ bottom: 0;
+ max-width: 50vw;
+ overflow: hidden;
+ transition: opacity 1s;
+ will-change: opacity;
+
+ &:lang(ar),
+ &:lang(he) {
+ left: revert;
+ right: 52vw;
+ }
+`
+
+const screenshots = [
+ { light: scrolling, dark: scrollingDark, alt: 'Screenshots - Scrolling', width: 962, height: 740 },
+ { light: pointer, dark: pointerDark, alt: 'Screenshots - Pointer', width: 962, height: 740 },
+ { light: buttons, dark: buttonsDark, alt: 'Screenshots - Buttons', width: 962, height: 740 },
+ { light: modifierKeys, dark: modifierKeysDark, alt: 'Screenshots - Modifier Keys', width: 962, height: 740 }
+]
+
+const Screenshots = () => {
+ const [currentIndex, setCurrentIndex] = useState(0)
+
+ useEffect(() => {
+ const next = () => {
+ setCurrentIndex((index) => (index + 1) % screenshots.length)
+ }
+
+ const timer = setInterval(next, 5000)
+
+ return () => void clearInterval(timer)
+ }, [])
+
+ return (
+
+ {screenshots.map(({ light, dark, alt, width, height }, index) => (
+
+
+
+
+
+
+
+
+ ))}
+
+ )
+}
+
+export default Screenshots
diff --git a/public/hero/screenshots/modifier-keys-dark.png b/components/hero/screenshots/modifier-keys-dark.png
similarity index 100%
rename from public/hero/screenshots/modifier-keys-dark.png
rename to components/hero/screenshots/modifier-keys-dark.png
diff --git a/public/hero/screenshots/modifier-keys.png b/components/hero/screenshots/modifier-keys.png
similarity index 100%
rename from public/hero/screenshots/modifier-keys.png
rename to components/hero/screenshots/modifier-keys.png
diff --git a/public/hero/screenshots/pointer-dark.png b/components/hero/screenshots/pointer-dark.png
similarity index 100%
rename from public/hero/screenshots/pointer-dark.png
rename to components/hero/screenshots/pointer-dark.png
diff --git a/public/hero/screenshots/pointer.png b/components/hero/screenshots/pointer.png
similarity index 100%
rename from public/hero/screenshots/pointer.png
rename to components/hero/screenshots/pointer.png
diff --git a/public/hero/screenshots/scrolling-dark.png b/components/hero/screenshots/scrolling-dark.png
similarity index 100%
rename from public/hero/screenshots/scrolling-dark.png
rename to components/hero/screenshots/scrolling-dark.png
diff --git a/public/hero/screenshots/scrolling.png b/components/hero/screenshots/scrolling.png
similarity index 100%
rename from public/hero/screenshots/scrolling.png
rename to components/hero/screenshots/scrolling.png
diff --git a/components/hero/slogan/index.tsx b/components/hero/slogan/index.tsx
new file mode 100644
index 0000000..f724ab4
--- /dev/null
+++ b/components/hero/slogan/index.tsx
@@ -0,0 +1,68 @@
+'use client'
+
+import { useTranslations } from 'next-intl'
+import styled from 'styled-components'
+
+import Marquee from './marquee'
+
+const Wrapper = styled.div`
+ margin-top: 6.3125rem;
+ font-family: var(--font-family-title);
+ font-size: 2.5625rem;
+ font-weight: bold;
+ white-space: pre;
+ line-height: 1.3;
+ overflow: hidden;
+ contain: content;
+
+ @media (max-width: 1190px) {
+ max-width: fit-content;
+ margin-left: auto;
+ margin-right: auto;
+ }
+
+ @media (max-width: 512px) {
+ font-size: 2rem;
+ }
+`
+
+const GradientText = styled.span`
+ @supports (-webkit-text-fill-color: transparent) {
+ & {
+ background-image: linear-gradient(
+ 110deg,
+ hsl(29deg 100% 55%) 0%,
+ hsl(327deg 100% 50%) 50%,
+ hsl(223deg 100% 54%) 100%
+ );
+ background-clip: text;
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ }
+ }
+`
+
+const Slogan = () => {
+ const t = useTranslations('index')
+
+ return (
+
+ {t.rich('slogan', {
+ Marquee: () => (
+
+ ),
+ GradientText: (chunks) => {chunks}
+ })}
+
+ )
+}
+
+export default Slogan
diff --git a/components/hero/slogan/marquee/index.tsx b/components/hero/slogan/marquee/index.tsx
new file mode 100644
index 0000000..770d988
--- /dev/null
+++ b/components/hero/slogan/marquee/index.tsx
@@ -0,0 +1,80 @@
+'use client'
+
+import { useEffect, useMemo, useState } from 'react'
+import styled from 'styled-components'
+
+export type MarqueeProps = {
+ lines: string[]
+}
+
+const Wrapper = styled.div`
+ display: inline-block;
+ vertical-align: top;
+ height: 1.3em;
+ overflow: hidden;
+ contain: content;
+`
+
+const Scrollable = styled.div`
+ transition: transform 1s ease;
+ will-change: transform;
+`
+
+const Line = styled.div`
+ position: relative;
+ color: var(--color-primary-dark);
+ line-height: 1.3;
+ width: fit-content;
+ transition: opacity 0.5s 0.2s ease;
+ will-change: opacity;
+ white-space: nowrap;
+
+ &::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ right: 0;
+ bottom: 0.2em;
+ height: 0.3em;
+ background-color: var(--color-primary);
+ opacity: 0.2;
+ }
+`
+
+const Marquee = ({ lines }: MarqueeProps) => {
+ const [currentIndex, setCurrentIndex] = useState(0)
+
+ useEffect(() => {
+ const next = () => {
+ setCurrentIndex((index) => (index + 1) % lines.length)
+ }
+
+ const timer = setInterval(next, 3000)
+
+ return () => void clearInterval(timer)
+ }, [lines])
+
+ const translateY = useMemo(() => -currentIndex * 1.3 + 'em', [currentIndex])
+
+ return (
+
+
+ {lines.map((line, index) => (
+
+ {line}
+
+ ))}
+
+
+ )
+}
+
+export default Marquee
diff --git a/components/hero/styles.tsx b/components/hero/styles.tsx
new file mode 100644
index 0000000..8f33aaf
--- /dev/null
+++ b/components/hero/styles.tsx
@@ -0,0 +1,9 @@
+'use client'
+
+import { styled } from 'styled-components'
+
+export const Wrapper = styled.div`
+ position: relative;
+ padding-top: 6.75rem;
+ padding-bottom: 5rem;
+`
diff --git a/components/language-select/index.tsx b/components/language-select/index.tsx
new file mode 100644
index 0000000..a5fa7a3
--- /dev/null
+++ b/components/language-select/index.tsx
@@ -0,0 +1,131 @@
+import { useTranslations } from 'next-intl'
+import styled from 'styled-components'
+
+import { Link } from 'i18n/navigation'
+
+const localesToShow = {
+ 'af-ZA': 'Afrikaans',
+ 'ar-SA': 'العربية',
+ 'ca-ES': 'Català',
+ 'cs-CZ': 'Čeština',
+ 'da-DK': 'Dansk',
+ 'de-DE': 'Deutsch',
+ 'el-GR': 'Ελληνικά',
+ en: 'English',
+ 'es-ES': 'Español',
+ 'fi-FI': 'Suomi',
+ 'fr-FR': 'Français',
+ 'he-IL': 'עברית',
+ 'hu-HU': 'Magyar',
+ 'it-IT': 'Italiano',
+ 'ja-JP': '日本語',
+ 'ko-KR': '한국어',
+ 'my-MM': 'မြန်မာ',
+ 'nb-NO': 'Norsk bokmål',
+ 'nl-NL': 'Nederlands',
+ 'no-NO': 'Norsk',
+ 'pl-PL': 'Polski',
+ 'pt-BR': 'Português (Brasil)',
+ 'pt-PT': 'Português (Portugal)',
+ 'ro-RO': 'Română',
+ 'ru-RU': 'Русский',
+ 'sk-SK': 'Slovenčina',
+ 'sr-SP': 'Српски',
+ 'sv-SE': 'Svenska',
+ 'tr-TR': 'Türkçe',
+ 'uk-UA': 'Українська',
+ 'vi-VN': 'Tiếng Việt',
+ 'zh-CN': '简体中文',
+ 'zh-TW': '繁體中文',
+ 'zh-HK': '繁體中文 (香港)'
+}
+
+const Wrapper = styled.button`
+ margin: 0;
+ padding: 0;
+ position: relative;
+ appearance: none;
+ border: 0;
+ background-color: transparent;
+ font: inherit;
+ font-weight: bold;
+ cursor: pointer;
+ text-align: start;
+
+ span {
+ transition: color 0.15s ease;
+
+ &:hover {
+ color: var(--color-primary);
+ }
+ }
+
+ menu {
+ margin: 0;
+ padding: 0.625rem;
+ border: var(--border-dropdown);
+ position: absolute;
+ left: 50%;
+ top: 100%;
+ width: max-content;
+ transform: translateX(-50%);
+ opacity: 0;
+ pointer-events: none;
+ cursor: initial;
+ background-color: var(--color-white);
+ border-radius: var(--border-radius-md);
+ transition: opacity 0.15s ease;
+ box-shadow: var(--shadow-md);
+
+ max-height: min(600px, 100vh - 150px);
+ overflow-y: auto;
+ overscroll-behavior: contain;
+
+ & > div {
+ column-count: 2;
+ }
+
+ a {
+ display: block;
+ padding: 0.1em 1em;
+ }
+ }
+
+ @media (max-width: 1840px) {
+ menu {
+ left: auto;
+ right: -20px;
+ transform: none;
+ }
+ }
+
+ &:hover {
+ menu {
+ opacity: 1;
+ pointer-events: initial;
+ }
+ }
+`
+
+const LanguageSelect = () => {
+ const t = useTranslations('common')
+
+ return (
+
+ {t('navigation.language')}
+
+
+ {Object.entries(localesToShow).map(([locale, language]) => {
+ return (
+
+ {language}
+
+ )
+ })}
+
+
+
+ )
+}
+
+export default LanguageSelect
diff --git a/components/max-width-wrapper/index.tsx b/components/max-width-wrapper/index.tsx
new file mode 100644
index 0000000..0770f92
--- /dev/null
+++ b/components/max-width-wrapper/index.tsx
@@ -0,0 +1,18 @@
+'use client'
+
+import styled from 'styled-components'
+
+export type MaxWidthWrapperProps = {
+ $maxWidth?: number | string
+}
+
+const MaxWidthWrapper = styled.div`
+ margin-inline-start: auto;
+ margin-inline-end: auto;
+ padding-left: 4rem;
+ padding-right: 4rem;
+ max-width: ${({ $maxWidth }) =>
+ typeof $maxWidth === 'number' ? `${$maxWidth}px` : ($maxWidth ?? `var(--max-width)`)};
+`
+
+export default MaxWidthWrapper
diff --git a/components/spacer/index.tsx b/components/spacer/index.tsx
new file mode 100644
index 0000000..f1bf944
--- /dev/null
+++ b/components/spacer/index.tsx
@@ -0,0 +1,16 @@
+'use client'
+
+import styled from 'styled-components'
+
+export type SpacerProps = {
+ size: number | string
+}
+
+const Spacer = styled.span`
+ display: inline-block;
+ --size: ${({ size }) => `${typeof size === 'number' ? `${size}px` : size}`};
+ min-width: var(--size);
+ min-height: var(--size);
+`
+
+export default Spacer
diff --git a/components/styled-components-regsitry.tsx b/components/styled-components-regsitry.tsx
new file mode 100644
index 0000000..28cf576
--- /dev/null
+++ b/components/styled-components-regsitry.tsx
@@ -0,0 +1,25 @@
+"use client";
+
+import React, { useState } from "react";
+import { useServerInsertedHTML } from "next/navigation";
+import { ServerStyleSheet, StyleSheetManager } from "styled-components";
+
+type StyledComponentsRegistryProps = {
+ children: React.ReactNode;
+};
+
+export default function StyledComponentsRegistry({ children }: StyledComponentsRegistryProps) {
+ const [styledComponentsStyleSheet] = useState(() => new ServerStyleSheet());
+
+ useServerInsertedHTML(() => {
+ const styles = styledComponentsStyleSheet.getStyleElement();
+ styledComponentsStyleSheet.instance.clearTag();
+ return <>{styles}>;
+ });
+
+ if (typeof window !== "undefined") return <>{children}>;
+
+ return (
+ {children}
+ );
+}
diff --git a/crowdin.yml b/crowdin.yml
new file mode 100644
index 0000000..d9800c0
--- /dev/null
+++ b/crowdin.yml
@@ -0,0 +1,8 @@
+project_id_env: CROWDIN_PROJECT_ID
+api_token_env: CROWDIN_PERSONAL_TOKEN
+pull_request_title: Update translations
+commit_message: Update translations (%language%)
+append_commit_message:
+files:
+ - source: /locales/en/*.json
+ translation: /locales/%locale%/%original_file_name%
diff --git a/i18n/navigation.ts b/i18n/navigation.ts
new file mode 100644
index 0000000..5024e59
--- /dev/null
+++ b/i18n/navigation.ts
@@ -0,0 +1,4 @@
+import { createNavigation } from 'next-intl/navigation'
+import { routing } from './routing'
+
+export const { Link, redirect, usePathname, useRouter, getPathname } = createNavigation(routing)
diff --git a/i18n/request.ts b/i18n/request.ts
new file mode 100644
index 0000000..84d67b4
--- /dev/null
+++ b/i18n/request.ts
@@ -0,0 +1,16 @@
+import { getRequestConfig } from 'next-intl/server'
+import { hasLocale } from 'next-intl'
+import { routing } from './routing'
+
+export default getRequestConfig(async ({ requestLocale }) => {
+ const requested = await requestLocale
+ const locale = hasLocale(routing.locales, requested) ? requested : routing.defaultLocale
+
+ return {
+ locale,
+ messages: {
+ common: (await import(`../locales/${locale}/common.json`)).default,
+ index: (await import(`../locales/${locale}/index.json`)).default
+ }
+ }
+})
diff --git a/i18n/routing.ts b/i18n/routing.ts
new file mode 100644
index 0000000..c9327a3
--- /dev/null
+++ b/i18n/routing.ts
@@ -0,0 +1,58 @@
+import { defineRouting } from 'next-intl/routing'
+
+const locales = [
+ 'af-ZA',
+ 'ar-SA',
+ 'ca-ES',
+ 'cs-CZ',
+ 'da-DK',
+ 'de-DE',
+ 'el-GR',
+ 'en',
+ 'es-ES',
+ 'fi-FI',
+ 'fr-FR',
+ 'he-IL',
+ 'hu-HU',
+ 'it-IT',
+ 'ja-JP',
+ 'ko-KR',
+ 'my-MM',
+ 'nb-NO',
+ 'nl-NL',
+ 'no-NO',
+ 'pl-PL',
+ 'pt-BR',
+ 'pt-PT',
+ 'ro-RO',
+ 'ru-RU',
+ 'sk-SK',
+ 'sr-SP',
+ 'sv-SE',
+ 'tr-TR',
+ 'uk-UA',
+ 'vi-VN',
+ 'zh-CN',
+ 'zh-HK',
+ 'zh-TW'
+]
+
+const defaultLocale = 'en'
+
+export const routing = defineRouting({
+ locales: locales,
+ defaultLocale: defaultLocale,
+ localePrefix: 'as-needed',
+ domains: [
+ {
+ domain: 'linearmouse.app',
+ defaultLocale: 'en',
+ locales: locales.filter((locale) => locale !== 'zh-CN')
+ },
+ {
+ domain: 'linearmouse.cn',
+ defaultLocale: 'zh-CN',
+ locales: ['zh-CN']
+ }
+ ]
+})
diff --git a/locales/af-ZA/common.json b/locales/af-ZA/common.json
new file mode 100644
index 0000000..11bac1e
--- /dev/null
+++ b/locales/af-ZA/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussions",
+ "language": "Language"
+ },
+ "footer": {
+ "help_translate": "Help translate",
+ "privacy_policy": "Privacy Policy"
+ },
+ "cookie_consent": {
+ "description": "This website uses cookies to enhance the user experience."
+ },
+ "ok": "OK"
+}
diff --git a/locales/af-ZA/index.json b/locales/af-ZA/index.json
new file mode 100644
index 0000000..05cb947
--- /dev/null
+++ b/locales/af-ZA/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | The mouse and trackpad utility for Mac.",
+ "description": "Customize mouse and trackpad's scrolling direction, pointer acceleration, pointer speed and so on...",
+ "slogan": "Customize \nLike a Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse and Trackpad",
+ "scrolling_direction": "Scrolling Direction",
+ "pointer_acceleration": "Pointer Acceleration",
+ "pointer_speed": "Pointer Speed",
+ "modifier_keys": "Modifier Keys"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Install via Homebrew",
+ "copied": "Copied"
+ },
+ "features": [
+ {
+ "title": "For Each Pointing Device.",
+ "description": "LinearMouse supports per-device settings.
You can apply different settings to your mice and trackpads.
"
+ },
+ {
+ "title": "More Natural \nThan Natural .",
+ "description": "If you are uncomfortable with the natural scrolling when using a mouse, LinearMouse can help you reverse the scrolling direction.
As each device can be configured independently, there is no need to be concerned about the trackpad's scrolling direction being affected.
"
+ },
+ {
+ "title": "Move the Pointer\nFast and Accurately. ",
+ "description": "LinearMouse allows you to find a comfortable pointer acceleration and speed and helps you to move the pointer faster and more accurately.
You can even disable pointer acceleration if you are a gamer or designer to get the best pointer accuracy.
"
+ }
+ ]
+}
diff --git a/locales/ar-SA/common.json b/locales/ar-SA/common.json
new file mode 100644
index 0000000..4710a63
--- /dev/null
+++ b/locales/ar-SA/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "مُناقشات",
+ "language": "اللغة"
+ },
+ "footer": {
+ "help_translate": "ساعد في الترجمة",
+ "privacy_policy": "Privacy Policy"
+ },
+ "cookie_consent": {
+ "description": "هذا الموقع يستخدم ملفات تعريف الارتباط من أجل تحسين تجرِبة المستخدم."
+ },
+ "ok": "حسنا"
+}
diff --git a/locales/ar-SA/index.json b/locales/ar-SA/index.json
new file mode 100644
index 0000000..05cb947
--- /dev/null
+++ b/locales/ar-SA/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | The mouse and trackpad utility for Mac.",
+ "description": "Customize mouse and trackpad's scrolling direction, pointer acceleration, pointer speed and so on...",
+ "slogan": "Customize \nLike a Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse and Trackpad",
+ "scrolling_direction": "Scrolling Direction",
+ "pointer_acceleration": "Pointer Acceleration",
+ "pointer_speed": "Pointer Speed",
+ "modifier_keys": "Modifier Keys"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Install via Homebrew",
+ "copied": "Copied"
+ },
+ "features": [
+ {
+ "title": "For Each Pointing Device.",
+ "description": "LinearMouse supports per-device settings.
You can apply different settings to your mice and trackpads.
"
+ },
+ {
+ "title": "More Natural \nThan Natural .",
+ "description": "If you are uncomfortable with the natural scrolling when using a mouse, LinearMouse can help you reverse the scrolling direction.
As each device can be configured independently, there is no need to be concerned about the trackpad's scrolling direction being affected.
"
+ },
+ {
+ "title": "Move the Pointer\nFast and Accurately. ",
+ "description": "LinearMouse allows you to find a comfortable pointer acceleration and speed and helps you to move the pointer faster and more accurately.
You can even disable pointer acceleration if you are a gamer or designer to get the best pointer accuracy.
"
+ }
+ ]
+}
diff --git a/locales/bs-BA/common.json b/locales/bs-BA/common.json
new file mode 100644
index 0000000..354a36a
--- /dev/null
+++ b/locales/bs-BA/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Diskusije",
+ "language": "Jezik"
+ },
+ "footer": {
+ "help_translate": "Dodaj prijevod",
+ "privacy_policy": "Politika privatnosti"
+ },
+ "cookie_consent": {
+ "description": "Ova stranica koristi kolačiće za bolje korisničko iskustvo."
+ },
+ "ok": "OK"
+}
diff --git a/locales/bs-BA/index.json b/locales/bs-BA/index.json
new file mode 100644
index 0000000..f035113
--- /dev/null
+++ b/locales/bs-BA/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Mac aplikacija za miš i trekped.",
+ "description": "Podesite smijer skrolanja, ubrzanje i brzinu pokazivača miša i trekpeda, te još mnogo toga...",
+ "slogan": "Prilagodi \nKao Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Miš i trekped",
+ "scrolling_direction": "Smjer skrolanja",
+ "pointer_acceleration": "Ubrzanje pokazivača",
+ "pointer_speed": "Brzina pokazivača",
+ "modifier_keys": "Modifikatorske tipke"
+ },
+ "install": {
+ "download": "Preuzmi",
+ "install_via_homebrew": "Instaliraj koristeći Homebrew",
+ "copied": "Kopirano"
+ },
+ "features": [
+ {
+ "title": "Za Svaki Miš.",
+ "description": "LinearMouse podržava postavke za svaki uređaj zasebno.
Možeš primjeniti posebne postavke za tvoj miš i trekped.
"
+ },
+ {
+ "title": "Prirodnije \nod prirodnog .",
+ "description": "Ako ti ne odgovara \"prirodni\" mod skrolanja, LinearMouse ti može pomoći da se vratiš na normalni način skrolanja.
Postavke za svaki uređaj se spašavaju odvojeno, pa se ne moraš brinuti da poremetiš trenutne postavke svog trekpeda.
"
+ },
+ {
+ "title": "Pomjeraj pokazivač\nbrzo i precizno ",
+ "description": "LinearMouse ti omogućava da nađeš najbolju postavku brzine i ubrzanja pokazivača za veći komfor.
Također možeš i ugasiti postavku ubrzanja pokazivača pogotovo ako si gejmer ili dizajner, za još preciznije pokrete.
"
+ }
+ ]
+}
diff --git a/locales/ca-ES/common.json b/locales/ca-ES/common.json
new file mode 100644
index 0000000..11bac1e
--- /dev/null
+++ b/locales/ca-ES/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussions",
+ "language": "Language"
+ },
+ "footer": {
+ "help_translate": "Help translate",
+ "privacy_policy": "Privacy Policy"
+ },
+ "cookie_consent": {
+ "description": "This website uses cookies to enhance the user experience."
+ },
+ "ok": "OK"
+}
diff --git a/locales/ca-ES/index.json b/locales/ca-ES/index.json
new file mode 100644
index 0000000..05cb947
--- /dev/null
+++ b/locales/ca-ES/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | The mouse and trackpad utility for Mac.",
+ "description": "Customize mouse and trackpad's scrolling direction, pointer acceleration, pointer speed and so on...",
+ "slogan": "Customize \nLike a Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse and Trackpad",
+ "scrolling_direction": "Scrolling Direction",
+ "pointer_acceleration": "Pointer Acceleration",
+ "pointer_speed": "Pointer Speed",
+ "modifier_keys": "Modifier Keys"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Install via Homebrew",
+ "copied": "Copied"
+ },
+ "features": [
+ {
+ "title": "For Each Pointing Device.",
+ "description": "LinearMouse supports per-device settings.
You can apply different settings to your mice and trackpads.
"
+ },
+ {
+ "title": "More Natural \nThan Natural .",
+ "description": "If you are uncomfortable with the natural scrolling when using a mouse, LinearMouse can help you reverse the scrolling direction.
As each device can be configured independently, there is no need to be concerned about the trackpad's scrolling direction being affected.
"
+ },
+ {
+ "title": "Move the Pointer\nFast and Accurately. ",
+ "description": "LinearMouse allows you to find a comfortable pointer acceleration and speed and helps you to move the pointer faster and more accurately.
You can even disable pointer acceleration if you are a gamer or designer to get the best pointer accuracy.
"
+ }
+ ]
+}
diff --git a/locales/cs-CZ/common.json b/locales/cs-CZ/common.json
new file mode 100644
index 0000000..159701a
--- /dev/null
+++ b/locales/cs-CZ/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Komunita",
+ "language": "Jazyk"
+ },
+ "footer": {
+ "help_translate": "Pomozte s překlady aplikace",
+ "privacy_policy": "Zásady soukromí"
+ },
+ "cookie_consent": {
+ "description": "Tento web používá cookies pro zlepšení uživatelského zážitku."
+ },
+ "ok": "OK"
+}
diff --git a/locales/cs-CZ/index.json b/locales/cs-CZ/index.json
new file mode 100644
index 0000000..27b7dee
--- /dev/null
+++ b/locales/cs-CZ/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Myš a trackpad na steroidech pro Váš Mac.",
+ "description": "Přizpůsobte směr posouvání myši a trackpadu, zrychlení kurzoru, rychlost kurzoru a další.",
+ "slogan": "Nastavte si to po svém \nJako profesionálové. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Myš a Trackpad",
+ "scrolling_direction": "Směr posouvání",
+ "pointer_acceleration": "Zrychlení kurzoru",
+ "pointer_speed": "Rychlost kurzoru",
+ "modifier_keys": "Modifikační klávesy"
+ },
+ "install": {
+ "download": "Stáhnout",
+ "install_via_homebrew": "Instalovat pomocí Homebrew",
+ "copied": "Zkopírováno"
+ },
+ "features": [
+ {
+ "title": "Pro každou myš i trackpad.",
+ "description": "LinearMouse podporuje vlastní nastavení pro každé zařízení.
Můžete použít jiná nastavení pro myš a jiná pro trackpad.
"
+ },
+ {
+ "title": "Přirozenější \nnež Přirozené .",
+ "description": "Pokud jste nespokojeni se stávajícím režimem posouváním při použití myši nebo trackpadu, LinearMouse vám může pomoci obrátit směr posouvání.
Vzhledem k tomu, že každé zařízení může být nastaveno samostatně, je snadné si obrácené posouvání nastavit pouze pro myš tak, aby trackpad fungoval jako doposud.
"
+ },
+ {
+ "title": "Buďte\nrychlí a přesní. ",
+ "description": "LinearMouse umožňuje vyladit zrychlení a rychlost kurzoru dle vašich preferencí a pomůže Vám tak k vyšší rychlosti a přesnosti při používání.
Pokud na svém Macu hrajete hry nebo tvoříte, můžete, pro zvýšení přesnosti, zrychlení kurzoru zcela zakázat.
"
+ }
+ ]
+}
diff --git a/locales/da-DK/common.json b/locales/da-DK/common.json
new file mode 100644
index 0000000..dbf2c3d
--- /dev/null
+++ b/locales/da-DK/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Diskussioner",
+ "language": "Sprog"
+ },
+ "footer": {
+ "help_translate": "Hjælp med at oversætte",
+ "privacy_policy": "Privatlivspolitik"
+ },
+ "cookie_consent": {
+ "description": "Denne hjemmeside bruger cookies for at forbedre brugeroplevelsen."
+ },
+ "ok": "Ok"
+}
diff --git a/locales/da-DK/index.json b/locales/da-DK/index.json
new file mode 100644
index 0000000..4d37847
--- /dev/null
+++ b/locales/da-DK/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Hjælpeværktøjet for mus og pegefelt til Mac.",
+ "description": "Tilpas mus og pegefelts rulleretning, markøracceleration, markørhastighed og så videre...",
+ "slogan": "Tilpas \nSom en Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mus og Pegefelt",
+ "scrolling_direction": "Rulleretning",
+ "pointer_acceleration": "Markøracceleration",
+ "pointer_speed": "Markørhastighed",
+ "modifier_keys": "Kombitaster"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Installer via Homebrew",
+ "copied": "Kopieret"
+ },
+ "features": [
+ {
+ "title": "For Hver Pegeenhed.",
+ "description": "LinearMouse understøtter indstillinger for hver enhed.
Du kan anvende forskellige indstillinger til dine mus og pegefelter.
"
+ },
+ {
+ "title": "Mere Naturligt \nEnd Naturlig .",
+ "description": "Hvis du er utilpas med naturlig rulning når du bruger en mus, kan LinearMouse hjælpe dig med omvendt rulning.
Da hver enhed kan indstilles individuelt er der ingen grund til at bekymre sig om, at pegefeltets rulleretning påvirkes.
"
+ },
+ {
+ "title": "Flyt Markøren\nHurtigt og Præcist. ",
+ "description": "LinearMouse giver dig mulighed for at finde en komfortabel markøracceleration og hastighed og hjælper dig med at flytte markøren hurtigere og mere præcist.
Du kan endda deaktivere markøracceleration, hvis du er gamer eller designer for at få den bedste markørnøjagtighed.
"
+ }
+ ]
+}
diff --git a/locales/de-DE/common.json b/locales/de-DE/common.json
new file mode 100644
index 0000000..52173b6
--- /dev/null
+++ b/locales/de-DE/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Diskussionen",
+ "language": "Sprache"
+ },
+ "footer": {
+ "help_translate": "Beim Übersetzen helfen",
+ "privacy_policy": "Datenschutzerklärung"
+ },
+ "cookie_consent": {
+ "description": "Diese Website nutzt Cookies, um die Nutzererfahrung zu verbessern."
+ },
+ "ok": "OK"
+}
diff --git a/locales/de-DE/index.json b/locales/de-DE/index.json
new file mode 100644
index 0000000..3c25ced
--- /dev/null
+++ b/locales/de-DE/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Die Maus- und Trackpad-Dienstprogramm für Mac.",
+ "description": "Individualisiere Maus- und Trackpad-Scrollrichtung, Zeigerbeschleunigung, Zeigergeschwindigkeit, usw. ...",
+ "slogan": "Individualisiere \nWie ein Profi. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Maus und Trackpad",
+ "scrolling_direction": "Scrollrichtungen",
+ "pointer_acceleration": "Zeigerbeschleunigung",
+ "pointer_speed": "Zeigergeschwindigkeit",
+ "modifier_keys": "Tastenkürzel"
+ },
+ "install": {
+ "download": "Herunterladen",
+ "install_via_homebrew": "Installation über Homebrew",
+ "copied": "Kopiert"
+ },
+ "features": [
+ {
+ "title": "Für jedes Eingabegerät.",
+ "description": "LinearMouse unterstützt Einstellungen pro Gerät.
Verwende unterschiedliche Einstellungen für jede Maus und jedes Trackpad, das du nutzt.
"
+ },
+ {
+ "title": "Natürlicher \nAls Natürlich .",
+ "description": "Wenn du dich mit der natürlichen Scrollrichtung unwohl fühlst, während du eine Maus verwendest, kann dir LinearMouse dabei helfen, die Scrollrichtung umzukehren.
Da jedes Gerät unabhängig konfiguriert werden kann, musst du dir keine Sorgen machen, dass die Scrollrichtung des Trackpads beeinflusst wird.
"
+ },
+ {
+ "title": "Bewege den Zeiger\nSchnell und präzise. ",
+ "description": "LinearMouse ermöglicht es dir, eine angenehme Zeigerbeschleunigung & -geschwindigkeit zu finden und hilft, den Zeiger schneller und präziser zu bewegen.
Du kannst die Zeigerbeschleunigung sogar deaktivieren, wenn du beispielsweise als Gamer oder Designer die höchste Zeigergenauigkeit benötigst.
"
+ }
+ ]
+}
diff --git a/locales/el-GR/common.json b/locales/el-GR/common.json
new file mode 100644
index 0000000..c1b7e7c
--- /dev/null
+++ b/locales/el-GR/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Συζητήσεις",
+ "language": "Γλώσσα"
+ },
+ "footer": {
+ "help_translate": "Βοηθήστε στη μετάφραση",
+ "privacy_policy": "Πολιτική Απορρήτου"
+ },
+ "cookie_consent": {
+ "description": "Αυτή η ιστοσελίδα χρησιμοποιεί cookies για να βελτιώσει την εμπειρία του χρήστη."
+ },
+ "ok": "Εντάξει"
+}
diff --git a/locales/el-GR/index.json b/locales/el-GR/index.json
new file mode 100644
index 0000000..c0532b4
--- /dev/null
+++ b/locales/el-GR/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Το εργαλείο διαχείρισης ποντικιού και επιφάνειας αφής για Mac.",
+ "description": "Προσαρμόστε την κατεύθυνση κύλισης του ποντικιού και της επιφάνειας αφής, την επιτάχυνση του δείκτη και ούτω καθεξής...",
+ "slogan": "Προσαρμόστε \nΌπως οι Επαγγελματίες. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Ποντίκι και Επιφάνεια Αφής",
+ "scrolling_direction": "Κατεύθυνση Κύλισης",
+ "pointer_acceleration": "Επιτάχυνση Δείκτη",
+ "pointer_speed": "Ταχύτητα Δείκτη",
+ "modifier_keys": "Τροποποιητικά Πλήκτρα"
+ },
+ "install": {
+ "download": "Λήψη",
+ "install_via_homebrew": "Εγκατάσταση μέσω Homebrew",
+ "copied": "Αντιγράφηκε"
+ },
+ "features": [
+ {
+ "title": "Για Κάθε Συσκευή Δείκτη.",
+ "description": "Το LinearMouse υποστηρίζει ρυθμίσεις ανά συσκευή.
Μπορείτε να εφαρμόσετε διαφορετικές ρυθμίσεις στα ποντίκια και τις επιφάνειες αφής σας.
"
+ },
+ {
+ "title": "Πιο Φυσικό \nΚαι από το Φυσικό .",
+ "description": "Εάν δεν νιώθετε άνετοι με τη φυσική κύλιση όταν χρησιμοποιείτε ένα ποντίκι, το LinearMouse μπορεί να σας βοηθήσει να αντιστρέψετε την κατεύθυνση κύλισης.
Καθώς κάθε συσκευή μπορεί να ρυθμιστεί ανεξάρτητα, δεν χρειάζεται να ανησυχείτε για το αν θα επηρεαστεί η κατεύθυνση κύλησης της επιφάνειας αφής σας.
"
+ },
+ {
+ "title": "Μετακινήστε τον Δείκτη\nΓρήγορα και με Ακρίβεια. ",
+ "description": "Το LinearMouse σας επιτρέπει να βρείτε μια επιτάχυνση και ταχύτητα δείκτη που να σας βολεύει και σας βοηθά να μετακινήσετε τον δείκτη πιο γρήγορα και με μεγαλύτερη ακρίβεια.
Μπορείτε ακόμη και να απενεργοποιήσετε την επιτάχυνση εάν είστε gamer ή σχεδιαστής για μεγαλύτερη ακρίβεια.
"
+ }
+ ]
+}
diff --git a/locales/en/common.json b/locales/en/common.json
new file mode 100644
index 0000000..11bac1e
--- /dev/null
+++ b/locales/en/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussions",
+ "language": "Language"
+ },
+ "footer": {
+ "help_translate": "Help translate",
+ "privacy_policy": "Privacy Policy"
+ },
+ "cookie_consent": {
+ "description": "This website uses cookies to enhance the user experience."
+ },
+ "ok": "OK"
+}
diff --git a/locales/en/index.json b/locales/en/index.json
new file mode 100644
index 0000000..05cb947
--- /dev/null
+++ b/locales/en/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | The mouse and trackpad utility for Mac.",
+ "description": "Customize mouse and trackpad's scrolling direction, pointer acceleration, pointer speed and so on...",
+ "slogan": "Customize \nLike a Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse and Trackpad",
+ "scrolling_direction": "Scrolling Direction",
+ "pointer_acceleration": "Pointer Acceleration",
+ "pointer_speed": "Pointer Speed",
+ "modifier_keys": "Modifier Keys"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Install via Homebrew",
+ "copied": "Copied"
+ },
+ "features": [
+ {
+ "title": "For Each Pointing Device.",
+ "description": "LinearMouse supports per-device settings.
You can apply different settings to your mice and trackpads.
"
+ },
+ {
+ "title": "More Natural \nThan Natural .",
+ "description": "If you are uncomfortable with the natural scrolling when using a mouse, LinearMouse can help you reverse the scrolling direction.
As each device can be configured independently, there is no need to be concerned about the trackpad's scrolling direction being affected.
"
+ },
+ {
+ "title": "Move the Pointer\nFast and Accurately. ",
+ "description": "LinearMouse allows you to find a comfortable pointer acceleration and speed and helps you to move the pointer faster and more accurately.
You can even disable pointer acceleration if you are a gamer or designer to get the best pointer accuracy.
"
+ }
+ ]
+}
diff --git a/locales/es-ES/common.json b/locales/es-ES/common.json
new file mode 100644
index 0000000..444f51e
--- /dev/null
+++ b/locales/es-ES/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Foro",
+ "language": "Idioma"
+ },
+ "footer": {
+ "help_translate": "Ayudar a traducir",
+ "privacy_policy": "Política de privacidad"
+ },
+ "cookie_consent": {
+ "description": "Esta página web usa cookies que mejoran la experiencia del usuario."
+ },
+ "ok": "Aceptar"
+}
diff --git a/locales/es-ES/index.json b/locales/es-ES/index.json
new file mode 100644
index 0000000..fe59ab4
--- /dev/null
+++ b/locales/es-ES/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | La utilidad de ratón y trackpad para Mac.",
+ "description": "Personaliza la dirección de desplazamiento del ratón y del trackpad, la aceleración y velocidad del cursor, etc...",
+ "slogan": "Personaliza \nComo un Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Ratón y Trackpad",
+ "scrolling_direction": "Dirección de desplazamiento",
+ "pointer_acceleration": "Aceleración del cursor",
+ "pointer_speed": "Velocidad del cursor",
+ "modifier_keys": "Teclas modificadoras"
+ },
+ "install": {
+ "download": "Descargar",
+ "install_via_homebrew": "Instalar mediante Homebrew",
+ "copied": "Copiado"
+ },
+ "features": [
+ {
+ "title": "Para Cada Dispositivo.",
+ "description": "LinearMouse soporta ajustes por dispositivo.
Puede aplicar diferentes ajustes a sus ratones y trackpads.
"
+ },
+ {
+ "title": "Más Natural \nQue lo Natural .",
+ "description": "Si no te sientes cómodo con el desplazamiento natural al usar un ratón, LinearMouse puede ayudarte a invertir la dirección de desplazamiento.
Como cada dispositivo puede configurarse de forma independiente, no es necesario preocuparse por que la dirección de desplazamiento del trackpad se vea afectada.
"
+ },
+ {
+ "title": "Mueve el Cursor\nRápido y Preciso. ",
+ "description": "LinearMouse te permite encontrar una velocidad y aceleración cómodas del cursor y te ayuda a mover el puntero más rápido y de forma precisa.
Incluso puedes desactivar la aceleración del cursor si eres jugador o diseñador, para obtener la mejor precisión del puntero.
"
+ }
+ ]
+}
diff --git a/locales/fi-FI/common.json b/locales/fi-FI/common.json
new file mode 100644
index 0000000..11bac1e
--- /dev/null
+++ b/locales/fi-FI/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussions",
+ "language": "Language"
+ },
+ "footer": {
+ "help_translate": "Help translate",
+ "privacy_policy": "Privacy Policy"
+ },
+ "cookie_consent": {
+ "description": "This website uses cookies to enhance the user experience."
+ },
+ "ok": "OK"
+}
diff --git a/locales/fi-FI/index.json b/locales/fi-FI/index.json
new file mode 100644
index 0000000..05cb947
--- /dev/null
+++ b/locales/fi-FI/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | The mouse and trackpad utility for Mac.",
+ "description": "Customize mouse and trackpad's scrolling direction, pointer acceleration, pointer speed and so on...",
+ "slogan": "Customize \nLike a Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse and Trackpad",
+ "scrolling_direction": "Scrolling Direction",
+ "pointer_acceleration": "Pointer Acceleration",
+ "pointer_speed": "Pointer Speed",
+ "modifier_keys": "Modifier Keys"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Install via Homebrew",
+ "copied": "Copied"
+ },
+ "features": [
+ {
+ "title": "For Each Pointing Device.",
+ "description": "LinearMouse supports per-device settings.
You can apply different settings to your mice and trackpads.
"
+ },
+ {
+ "title": "More Natural \nThan Natural .",
+ "description": "If you are uncomfortable with the natural scrolling when using a mouse, LinearMouse can help you reverse the scrolling direction.
As each device can be configured independently, there is no need to be concerned about the trackpad's scrolling direction being affected.
"
+ },
+ {
+ "title": "Move the Pointer\nFast and Accurately. ",
+ "description": "LinearMouse allows you to find a comfortable pointer acceleration and speed and helps you to move the pointer faster and more accurately.
You can even disable pointer acceleration if you are a gamer or designer to get the best pointer accuracy.
"
+ }
+ ]
+}
diff --git a/locales/fr-FR/common.json b/locales/fr-FR/common.json
new file mode 100644
index 0000000..0cfe4e8
--- /dev/null
+++ b/locales/fr-FR/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussions",
+ "language": "Langage"
+ },
+ "footer": {
+ "help_translate": "Contribuer à la traduction",
+ "privacy_policy": "Politique de confidentialité"
+ },
+ "cookie_consent": {
+ "description": "Ce site web utilise des cookies pour améliorer l'expérience utilisateur."
+ },
+ "ok": "Ok"
+}
diff --git a/locales/fr-FR/index.json b/locales/fr-FR/index.json
new file mode 100644
index 0000000..c9cd013
--- /dev/null
+++ b/locales/fr-FR/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | L'utilitaire de souris et de pavé tactile pour Mac.",
+ "description": "Personnalisez le sens de défilement de votre souris et de votre pavé tactile, l'accélération du pointeur, sa vitesse et bien plus...",
+ "slogan": "Personnaliser \nComme un Pro ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Souris et pavé tactile",
+ "scrolling_direction": "Sens de défilement",
+ "pointer_acceleration": "Accélération du pointeur",
+ "pointer_speed": "Vitesse du pointeur",
+ "modifier_keys": "Modificateur de touches"
+ },
+ "install": {
+ "download": "Télécharger",
+ "install_via_homebrew": "Installer avec Homebrew",
+ "copied": "Copié"
+ },
+ "features": [
+ {
+ "title": "Pour chacun des appareils de pointage.",
+ "description": "LinearMouse prend en charge les paramètres par appareils.
Vous pouvez appliquer des paramètres différents pour chacune de vos souris et pavés tactiles.
"
+ },
+ {
+ "title": "Plus naturel \nQue \"Naturel\" .",
+ "description": "Si vous êtes mal à l'aise avec le défilement naturel lors de l'utilisation d'une souris, LinearMouse peut vous aider à inverser la direction du défilement.
Comme chaque dispositif peut être configuré indépendamment, pas besoin de s'inquiéter de l'effet sur la direction de défilement du trackpad.
"
+ },
+ {
+ "title": "Bouger le curseur\nDe manière rapide et précise. ",
+ "description": "LinearMouse vous permet de trouver une vitesse de pointeur confortable qui vous aide à bouger votre curseur rapidement et de manière plus précise.
Vous pouvez même désactiver l'accélération du pointeur si vous êtes un joueur ou un designer pour avec la meilleure précision de pointage.
"
+ }
+ ]
+}
diff --git a/locales/he-IL/common.json b/locales/he-IL/common.json
new file mode 100644
index 0000000..0704c6a
--- /dev/null
+++ b/locales/he-IL/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "גיטהאב",
+ "discussions": "דיונים",
+ "language": "שפה"
+ },
+ "footer": {
+ "help_translate": "עזרו לתרגם",
+ "privacy_policy": "מדיניות פרטיות"
+ },
+ "cookie_consent": {
+ "description": "האתר הזה משתמש בעוגיות על מנת לשפר את חווית המשתמש."
+ },
+ "ok": "אישור"
+}
diff --git a/locales/he-IL/index.json b/locales/he-IL/index.json
new file mode 100644
index 0000000..d066daa
--- /dev/null
+++ b/locales/he-IL/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | כלי העכבר וה-Trackpad ל-Mac.",
+ "description": "התאימו אישית את כיווני הגלילה של העכבר וה-Trackpad, מהירות תאוצה, מהירות, ועוד...",
+ "slogan": "התאימו אישית \nכמו מקצוענים. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "עכבר ו-Trackpad",
+ "scrolling_direction": "מהירות גלילה",
+ "pointer_acceleration": "תאוצת העכבר",
+ "pointer_speed": "מהירות העכבר",
+ "modifier_keys": "קיצורי מקלדת"
+ },
+ "install": {
+ "download": "הורדה",
+ "install_via_homebrew": "התקנה דרך Homebrew",
+ "copied": "הועתק"
+ },
+ "features": [
+ {
+ "title": "עבור כל אחד ממכישירי המצביעים.",
+ "description": "LinearMouse תומך בהגדרות שונות לכל מכשיר.
ניתן לקבוע הגדרות שונות לעכברים ול-Trackpads שלכם.
"
+ },
+ {
+ "title": "יותר טבעי \nמטבעי .",
+ "description": "אם אתם מרגישים לא בנוח עם גלילה רגילה בעזרת העכבר שלכם, LinearMouse יכול לשנות לכם את כיוון הגלילה.
בגלל שכל מכשיר יכול להיות מוגדר באופן עצמאי, אין סיבה לדאוג בקשר לכיוון הגלילה של ה-Trackpad מכיוון שהוא לא ישתנה.
"
+ },
+ {
+ "title": "הזיזו את העכבר\nמהר ומדויק. ",
+ "description": "LinearMouse מאפשר לכם למצוא את תאוצת ומהירות העכבר שנוחה לכם ועוזר לכם להזיז את העכבר מהר יותר ומדויק יותר.
אתם אפילו יכולים לבטל את תאוצת העכבר אם אתם גיימרים או מעצבים כדי לקבל את הדיוק הגבוה ביותר מהעכבר שלכם.
"
+ }
+ ]
+}
diff --git a/locales/hu-HU/common.json b/locales/hu-HU/common.json
new file mode 100644
index 0000000..7a1d900
--- /dev/null
+++ b/locales/hu-HU/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Beszélgetések",
+ "language": "Nyelv"
+ },
+ "footer": {
+ "help_translate": "Segíts a fordításban",
+ "privacy_policy": "Privacy Policy"
+ },
+ "cookie_consent": {
+ "description": "A weboldal sütiket használ a felhasználói élmény javítása érdekében."
+ },
+ "ok": "OK"
+}
diff --git a/locales/hu-HU/index.json b/locales/hu-HU/index.json
new file mode 100644
index 0000000..227f979
--- /dev/null
+++ b/locales/hu-HU/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Az egér és trackpad segédprogram Machez.",
+ "description": "Testreszabhatod az egér és a trackpad görgetési irányát, gyorsítását, sebességét, satöbbi...",
+ "slogan": "Customize \nLike a Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Egér és Trackpad",
+ "scrolling_direction": "Görgetés Iránya",
+ "pointer_acceleration": "Mutató Gyorsulása",
+ "pointer_speed": "Mutató Sebessége",
+ "modifier_keys": "Módosító Billentyűk"
+ },
+ "install": {
+ "download": "Letöltés",
+ "install_via_homebrew": "Telepítés Homebrew használatával",
+ "copied": "Másolva"
+ },
+ "features": [
+ {
+ "title": "For Each Pointing Device.",
+ "description": "LinearMouse supports per-device settings.
You can apply different settings to your mice and trackpads.
"
+ },
+ {
+ "title": "More Natural \nThan Natural .",
+ "description": "If you are uncomfortable with the natural scrolling when using a mouse, LinearMouse can help you reverse the scrolling direction.
As each device can be configured independently, there is no need to be concerned about the trackpad's scrolling direction being affected.
"
+ },
+ {
+ "title": "Move the Pointer\nFast and Accurately. ",
+ "description": "LinearMouse allows you to find a comfortable pointer acceleration and speed and helps you to move the pointer faster and more accurately.
You can even disable pointer acceleration if you are a gamer or designer to get the best pointer accuracy.
"
+ }
+ ]
+}
diff --git a/locales/id-ID/common.json b/locales/id-ID/common.json
new file mode 100644
index 0000000..8969893
--- /dev/null
+++ b/locales/id-ID/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussions",
+ "language": "Language"
+ },
+ "footer": {
+ "help_translate": "Bantu Terjemahkan",
+ "privacy_policy": "Privacy Policy"
+ },
+ "cookie_consent": {
+ "description": "This website uses cookies to enhance the user experience."
+ },
+ "ok": "OK"
+}
diff --git a/locales/id-ID/index.json b/locales/id-ID/index.json
new file mode 100644
index 0000000..05cb947
--- /dev/null
+++ b/locales/id-ID/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | The mouse and trackpad utility for Mac.",
+ "description": "Customize mouse and trackpad's scrolling direction, pointer acceleration, pointer speed and so on...",
+ "slogan": "Customize \nLike a Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse and Trackpad",
+ "scrolling_direction": "Scrolling Direction",
+ "pointer_acceleration": "Pointer Acceleration",
+ "pointer_speed": "Pointer Speed",
+ "modifier_keys": "Modifier Keys"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Install via Homebrew",
+ "copied": "Copied"
+ },
+ "features": [
+ {
+ "title": "For Each Pointing Device.",
+ "description": "LinearMouse supports per-device settings.
You can apply different settings to your mice and trackpads.
"
+ },
+ {
+ "title": "More Natural \nThan Natural .",
+ "description": "If you are uncomfortable with the natural scrolling when using a mouse, LinearMouse can help you reverse the scrolling direction.
As each device can be configured independently, there is no need to be concerned about the trackpad's scrolling direction being affected.
"
+ },
+ {
+ "title": "Move the Pointer\nFast and Accurately. ",
+ "description": "LinearMouse allows you to find a comfortable pointer acceleration and speed and helps you to move the pointer faster and more accurately.
You can even disable pointer acceleration if you are a gamer or designer to get the best pointer accuracy.
"
+ }
+ ]
+}
diff --git a/locales/it-IT/common.json b/locales/it-IT/common.json
new file mode 100644
index 0000000..d7da468
--- /dev/null
+++ b/locales/it-IT/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussioni",
+ "language": "Lingua"
+ },
+ "footer": {
+ "help_translate": "Contribuisci alla traduzione",
+ "privacy_policy": "Politica sulla Privacy"
+ },
+ "cookie_consent": {
+ "description": "Questo sito web utilizza i cookie per migliorare l'esperienza dell'utente."
+ },
+ "ok": "OK"
+}
diff --git a/locales/it-IT/index.json b/locales/it-IT/index.json
new file mode 100644
index 0000000..a24b696
--- /dev/null
+++ b/locales/it-IT/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Utility del mouse e del trackpad per Mac.",
+ "description": "Personalizza la direzione di scorrimento del mouse e del trackpad, l'accelerazione del puntatore, la velocità del puntatore e così via...",
+ "slogan": "Personalizza \nCome un Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse e Trackpad",
+ "scrolling_direction": "Direzione di Scorrimento",
+ "pointer_acceleration": "Accelerazione del Puntatore",
+ "pointer_speed": "Velocità del Puntatore",
+ "modifier_keys": "Tasti Modificatori"
+ },
+ "install": {
+ "download": "Scarica",
+ "install_via_homebrew": "Installa tramite Homebrew",
+ "copied": "Copiato"
+ },
+ "features": [
+ {
+ "title": "Per Ogni Dispositivo di Puntamento.",
+ "description": "LinearMouse supporta le impostazioni per dispositivo.
Puoi applicare diverse impostazioni al tuo mouse e trackpad.
"
+ },
+ {
+ "title": "Più Naturale \nDi ciò che è Naturale .",
+ "description": "Se non sei a tuo agio con lo scorrimento naturale utilizzando un mouse, LinearMouse può aiutarti a invertire la direzione di scorrimento.
Poiché ogni dispositivo è configurabile indipendentemente, non è necessario preoccuparsi della modifica della direzione di scorrimento del trackpad.
"
+ },
+ {
+ "title": "Sposta il Puntatore\nVelocemente e Accuratamente. ",
+ "description": "LinearMouse ti consente di trovare un'accelerazione e velocità del puntatore comode e ti aiuta a spostarlo più velocemente e accuratamente.
Puoi persino disabilitare l'accelerazione del puntatore se sei un gamer o designer, per ottenere la migliore accuratezza del puntatore.
"
+ }
+ ]
+}
diff --git a/locales/ja-JP/common.json b/locales/ja-JP/common.json
new file mode 100644
index 0000000..0733dd8
--- /dev/null
+++ b/locales/ja-JP/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHubページ",
+ "discussions": "掲示板",
+ "language": "言語"
+ },
+ "footer": {
+ "help_translate": "翻訳を改善する",
+ "privacy_policy": "プライバシーポリシー"
+ },
+ "cookie_consent": {
+ "description": "本ウェブサイトでは、使用体験向上のため、クッキーを使用しております。"
+ },
+ "ok": "OK"
+}
diff --git a/locales/ja-JP/index.json b/locales/ja-JP/index.json
new file mode 100644
index 0000000..38d8f54
--- /dev/null
+++ b/locales/ja-JP/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Mac向けのマウスとトラックパッドユーティリティ。",
+ "description": "マウスとトラックパッドのスクロール方向、ポインタ加速度、ポインタ速度等をカスタマイズ。",
+ "slogan": " \nPro のようにカスタマイズ。",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "マウスとタッチパッドを",
+ "scrolling_direction": "スクロール方向を",
+ "pointer_acceleration": "ポインタの加速度を",
+ "pointer_speed": "ポインタの速度を",
+ "modifier_keys": "修飾キーを"
+ },
+ "install": {
+ "download": "ダウンロード",
+ "install_via_homebrew": "Homebrew でインストール",
+ "copied": "コピーしました"
+ },
+ "features": [
+ {
+ "title": "ポインティングデバイスごと に。",
+ "description": "LinearMouseはデバイスごとの設定に対応します。
マウスとトラックパッドに異なる設定を適用できます。
"
+ },
+ {
+ "title": "ナチュラル \nより ナチュラル に。",
+ "description": "ナチュラルスクロールが合わない方は、LinearMouseでスクロール方向を逆にすることができます。
各々の装置に応じて別個に設定できるため、トラックパッドに影響を及ぼす恐れもありません。
"
+ },
+ {
+ "title": "ポインターを動かせます。\n素早く、正確に。 ",
+ "description": "LinearMouseでは、自分に合う快適なポインタ加速度と速度を見つけることができます。より速く、より正確にポインターを操作しましょう。
ゲーマーやデザイナーなら、ポインター加速度を完全に無効にし、マウスをより精密に使いこなせます。
"
+ }
+ ]
+}
diff --git a/locales/ko-KR/common.json b/locales/ko-KR/common.json
new file mode 100644
index 0000000..d918476
--- /dev/null
+++ b/locales/ko-KR/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussions",
+ "language": "언어"
+ },
+ "footer": {
+ "help_translate": "번역을 도와주세요",
+ "privacy_policy": "개인정보 처리방침"
+ },
+ "cookie_consent": {
+ "description": "이 웹사이트는 이용 경험 개선을 위해 쿠키를 사용합니다."
+ },
+ "ok": "확인"
+}
diff --git a/locales/ko-KR/index.json b/locales/ko-KR/index.json
new file mode 100644
index 0000000..3ca03e4
--- /dev/null
+++ b/locales/ko-KR/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Mac을 위한 마우스 및 트랙패드 유틸리티.",
+ "description": "마우스 및 트랙패드의 스크롤 방향, 포인터 가속, 포인터 속도 등을 자유롭게 조절하세요.",
+ "slogan": " \n모두 내 맘대로. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "마우스 및 트랙패드",
+ "scrolling_direction": "스크롤 방향",
+ "pointer_acceleration": "포인터 가속",
+ "pointer_speed": "포인터 속도",
+ "modifier_keys": "보조 키"
+ },
+ "install": {
+ "download": "다운로드",
+ "install_via_homebrew": "Homebrew로 설치하기",
+ "copied": "복사됨"
+ },
+ "features": [
+ {
+ "title": "입력 장치마다 다른 설정. ",
+ "description": "LinearMouse는 장치별 설정을 지원합니다.
따라서 마우스와 트랙패드에 서로 다른 설정을 적용할 수 있죠.
"
+ },
+ {
+ "title": "자연스럽게 가\n자연스럽지 않을 때. ",
+ "description": "마우스를 사용할 때 자연스러운 스크롤이 불편했다면, LinearMouse로 스크롤 방향을 뒤집어 보세요.
각 장치는 독립적으로 설정되므로, 트랙패드의 스크롤 방향이 영향을 받는 것에 대해 걱정할 필요가 없습니다.
"
+ },
+ {
+ "title": "마우스 포인터를\n빠르고 정확하게. ",
+ "description": "LinearMouse는 사용자가 최적의 포인터 가속 및 속도를 찾을 수 있도록 도와줍니다.
게이머나 디자이너라면, 최고의 정확도를 위해 포인터 가속을 비활성화할 수도 있습니다.
"
+ }
+ ]
+}
diff --git a/locales/my-MM/common.json b/locales/my-MM/common.json
new file mode 100644
index 0000000..4a80f88
--- /dev/null
+++ b/locales/my-MM/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "ဆွေးနွေးချက်များ",
+ "language": "ဘာသာစကားများ"
+ },
+ "footer": {
+ "help_translate": "ဘာသာပြန်ခြင်း ကူညီပေးရန်",
+ "privacy_policy": "မူပိုင်ခွင့် မူဝါဒ"
+ },
+ "cookie_consent": {
+ "description": "ဤဝဘ်ဆိုဒ်သည် အသုံးပြုသူအတွေ့အကြုံကို မြှင့်တင်ရန် cookies များကို အသုံးပြုထားပါသည်။."
+ },
+ "ok": "OK"
+}
diff --git a/locales/my-MM/index.json b/locales/my-MM/index.json
new file mode 100644
index 0000000..0a1098e
--- /dev/null
+++ b/locales/my-MM/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Mac တွင်အသုံးပြုရန် Mouse နဲ့ Trackpad များအတွက်။.",
+ "description": "Mouse နဲ့ Trackpad တွေရဲ့ scrolling direction, pointer acceleration, pointer speed နှင့် တခြားသောအရာများကို ပြင်ဆင်နိုင်ပါသည်...",
+ "slogan": " ကို Pro ကဲ့သို့ ပြင်ဆင်လိုက်ပါ ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse and Trackpad",
+ "scrolling_direction": "Scrolling ဦးတည်ချက်",
+ "pointer_acceleration": "Pointer အရှိန်",
+ "pointer_speed": "Pointer မြန်နှုန်း",
+ "modifier_keys": "Modifier ခလုတ်များ"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Homebrew တစ်ဆင့် ထည့်သွင်းရန်",
+ "copied": "Copy ပြီးပါပြီ"
+ },
+ "features": [
+ {
+ "title": " Mouse နဲ့ Trackpad တစ်ခုစီတိုင်းအတွက်။",
+ "description": "Device တစ်ခု Setting တစ်ခု
\nLinearMouse သည် device တစ်ခုချင်းစီအတွက် setting ထားနိုင်ပါသည်။
"
+ },
+ {
+ "title": "More Natural \nThan Natural .",
+ "description": "Mouse အသုံးပြုသည့်အခါ natural scrolling နှင့်အဆင်မပြေလျှင် LinearMouse သည် scrolling directionကို ပြန်လည်ပြောင်းရန် သင့်အား ကူညီနိုင်သည်။
စက်တစ်ခုချင်းစီမူတည်ပြီး ပြောင်းလဲနိုင်တော့ကြောင့် laptop trackpad ရဲ့ scrolling direction။ ကို သက်ရောက်မှာ စိုးရိမ်ရန်မလိုပါ။
"
+ },
+ {
+ "title": "Pointer များကို\n မြန်မြန်နှင့်မှန်မှန် ရွေ့လိုက်ပါ။",
+ "description": "LinearMouse သည်သင့်အား သက်သောင့်သက်သာအဖြစ်ဆုံး pointer acceleration နှင့် speed အားရှာပေးနိုင်ပေးနိုင်ပြီး pointer အား ပိုမြန်ပြီး ပိုမှန်ကန်စွာ လုပ်ဆောင်နိုင်ရန်ကူညီပေးနိုင်ပါသည်။
သင်သည် ဂိမ်းကစားသူ သို့မဟုတ် ဒီဇိုင်နာဖြစ်ပါက အကောင်းဆုံး pointer accuracy ရရန် pointer acceleration ကိုပင် ပိတ်ထားနိုင်ပါသည်။
"
+ }
+ ]
+}
diff --git a/locales/nb-NO/common.json b/locales/nb-NO/common.json
new file mode 100644
index 0000000..11bac1e
--- /dev/null
+++ b/locales/nb-NO/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussions",
+ "language": "Language"
+ },
+ "footer": {
+ "help_translate": "Help translate",
+ "privacy_policy": "Privacy Policy"
+ },
+ "cookie_consent": {
+ "description": "This website uses cookies to enhance the user experience."
+ },
+ "ok": "OK"
+}
diff --git a/locales/nb-NO/index.json b/locales/nb-NO/index.json
new file mode 100644
index 0000000..05cb947
--- /dev/null
+++ b/locales/nb-NO/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | The mouse and trackpad utility for Mac.",
+ "description": "Customize mouse and trackpad's scrolling direction, pointer acceleration, pointer speed and so on...",
+ "slogan": "Customize \nLike a Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse and Trackpad",
+ "scrolling_direction": "Scrolling Direction",
+ "pointer_acceleration": "Pointer Acceleration",
+ "pointer_speed": "Pointer Speed",
+ "modifier_keys": "Modifier Keys"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Install via Homebrew",
+ "copied": "Copied"
+ },
+ "features": [
+ {
+ "title": "For Each Pointing Device.",
+ "description": "LinearMouse supports per-device settings.
You can apply different settings to your mice and trackpads.
"
+ },
+ {
+ "title": "More Natural \nThan Natural .",
+ "description": "If you are uncomfortable with the natural scrolling when using a mouse, LinearMouse can help you reverse the scrolling direction.
As each device can be configured independently, there is no need to be concerned about the trackpad's scrolling direction being affected.
"
+ },
+ {
+ "title": "Move the Pointer\nFast and Accurately. ",
+ "description": "LinearMouse allows you to find a comfortable pointer acceleration and speed and helps you to move the pointer faster and more accurately.
You can even disable pointer acceleration if you are a gamer or designer to get the best pointer accuracy.
"
+ }
+ ]
+}
diff --git a/locales/nl-NL/common.json b/locales/nl-NL/common.json
new file mode 100644
index 0000000..dd1b12f
--- /dev/null
+++ b/locales/nl-NL/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussies",
+ "language": "Taal"
+ },
+ "footer": {
+ "help_translate": "Help met vertalen",
+ "privacy_policy": "Privacybeleid"
+ },
+ "cookie_consent": {
+ "description": "Deze website maakt gebruik van cookies om de gebruikerservaring te verbeteren."
+ },
+ "ok": "OK"
+}
diff --git a/locales/nl-NL/index.json b/locales/nl-NL/index.json
new file mode 100644
index 0000000..9f7a99b
--- /dev/null
+++ b/locales/nl-NL/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | De muis en trackpad applicatie voor Mac.",
+ "description": "Pas de scroll-richting van je muis en trackpad aan, wijzig de aanwijzerversnelling, aanwijzer snelheid en veel meer...",
+ "slogan": "Customiseer je \nAls een Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Muis en Trackpad",
+ "scrolling_direction": "Scrollrichting",
+ "pointer_acceleration": "Aanwijzerversnelling",
+ "pointer_speed": "Aanwijzersnelheid",
+ "modifier_keys": "Aanpassingstoetsen"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Installeren via Homebrew",
+ "copied": "Gekopieerd"
+ },
+ "features": [
+ {
+ "title": "Voor Elk aanwijsapparaat.",
+ "description": "LinearMouse ondersteunt verschillende instellingen per apparaat.
Je kunt instellingen toepassen op verschillende muizen en trackpads.
"
+ },
+ {
+ "title": "Meer Natuurlijk \nDan de standaard instelling .",
+ "description": "Als je niet tevreden bent met natuurlijk scrollen bij het gebruik van de muis, kan LinearMouse de scrollrichting wijzigen.
Omdat elk apparaat onafhankelijk kan worden geconfigureerd, heeft deze instelling geen invloed op de scrollrichting van een trackpad als deze is aangesloten.
"
+ },
+ {
+ "title": "Beweeg de muispijl >snel en precies. ",
+ "description": "LinearMouse helpt je om een comfortable muisacceleratie- en snelheid te vinden en zorgt ervoor dat je de muispijl sneller en meer accuraat kunt bedienen.
kunt zelfs de muisaccelleratie volledig uitschakelen voor het spelen van games of grafisch ontwerp
"
+ }
+ ]
+}
diff --git a/locales/no-NO/common.json b/locales/no-NO/common.json
new file mode 100644
index 0000000..11bac1e
--- /dev/null
+++ b/locales/no-NO/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussions",
+ "language": "Language"
+ },
+ "footer": {
+ "help_translate": "Help translate",
+ "privacy_policy": "Privacy Policy"
+ },
+ "cookie_consent": {
+ "description": "This website uses cookies to enhance the user experience."
+ },
+ "ok": "OK"
+}
diff --git a/locales/no-NO/index.json b/locales/no-NO/index.json
new file mode 100644
index 0000000..05cb947
--- /dev/null
+++ b/locales/no-NO/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | The mouse and trackpad utility for Mac.",
+ "description": "Customize mouse and trackpad's scrolling direction, pointer acceleration, pointer speed and so on...",
+ "slogan": "Customize \nLike a Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse and Trackpad",
+ "scrolling_direction": "Scrolling Direction",
+ "pointer_acceleration": "Pointer Acceleration",
+ "pointer_speed": "Pointer Speed",
+ "modifier_keys": "Modifier Keys"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Install via Homebrew",
+ "copied": "Copied"
+ },
+ "features": [
+ {
+ "title": "For Each Pointing Device.",
+ "description": "LinearMouse supports per-device settings.
You can apply different settings to your mice and trackpads.
"
+ },
+ {
+ "title": "More Natural \nThan Natural .",
+ "description": "If you are uncomfortable with the natural scrolling when using a mouse, LinearMouse can help you reverse the scrolling direction.
As each device can be configured independently, there is no need to be concerned about the trackpad's scrolling direction being affected.
"
+ },
+ {
+ "title": "Move the Pointer\nFast and Accurately. ",
+ "description": "LinearMouse allows you to find a comfortable pointer acceleration and speed and helps you to move the pointer faster and more accurately.
You can even disable pointer acceleration if you are a gamer or designer to get the best pointer accuracy.
"
+ }
+ ]
+}
diff --git a/locales/pl-PL/common.json b/locales/pl-PL/common.json
new file mode 100644
index 0000000..f2aa449
--- /dev/null
+++ b/locales/pl-PL/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Dyskusje",
+ "language": "Język"
+ },
+ "footer": {
+ "help_translate": "Pomóż w tłumaczeniu",
+ "privacy_policy": "Polityka prywatności"
+ },
+ "cookie_consent": {
+ "description": "Ta witryna wykorzystuje pliki cookie w celu poprawy doświadczenia użytkownika."
+ },
+ "ok": "OK"
+}
diff --git a/locales/pl-PL/index.json b/locales/pl-PL/index.json
new file mode 100644
index 0000000..32d89cc
--- /dev/null
+++ b/locales/pl-PL/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Konfigurator myszy i gładzika dla Maca.",
+ "description": "Dostosuj właściwości myszy i gładzika, takie jak kierunek przewijania, przyspieszenie wskaźnika, szybkość wskaźnika i więcej...",
+ "slogan": "Dostosowywuj \nJak profesjonalista. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mysz i gładzik",
+ "scrolling_direction": "Kierunek przewijania",
+ "pointer_acceleration": "Przyspieszenie wskaźnika",
+ "pointer_speed": "Szybkość wskaźnika",
+ "modifier_keys": "Klawisze modyfikujące"
+ },
+ "install": {
+ "download": "Pobierz",
+ "install_via_homebrew": "Zainstaluj przez Homebrew",
+ "copied": "Skopiowano"
+ },
+ "features": [
+ {
+ "title": "Dla każdego urządzenia wskazującego.",
+ "description": "LinearMouse obsługuje oddzielne ustawienia dla każdego urządzenia.
Możesz zastosować różne ustawienia dla swoich myszy oraz gładzików.
"
+ },
+ {
+ "title": "Bardziej naturalne ,\nniż naturalne .",
+ "description": "Jeśli naturalne przewijanie podczas używania myszy nie jest dla Ciebie komfortowe, LinearMouse może pomóc w odwróceniu kierunku przewijania
Ponieważ każde urządzenie może być skonfigurowane oddzielnie, nie trzeba obawiać się, że kierunek przewijania gładzika zostanie zmieniony.
"
+ },
+ {
+ "title": "Poruszaj wskaźnikiem\nszybko i dokładnie. ",
+ "description": "LinearMouse umożliwia znalezienie odpowiedniego przyspieszenia wskaźnika i jego szybkości oraz pomaga poruszać wskaźnikiem szybciej i dokładniej.
Możesz także wyłączyć przyspieszenie wskaźnika, jeśli grasz w gry lub projektujesz, aby uzyskać najlepszą dokładność wskaźnika.
"
+ }
+ ]
+}
diff --git a/locales/pt-BR/common.json b/locales/pt-BR/common.json
new file mode 100644
index 0000000..bdf8040
--- /dev/null
+++ b/locales/pt-BR/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussões",
+ "language": "Idioma"
+ },
+ "footer": {
+ "help_translate": "Ajude a traduzir",
+ "privacy_policy": "Política de Privacidade"
+ },
+ "cookie_consent": {
+ "description": "Este site utiliza cookies para melhorar a experiência do usuário."
+ },
+ "ok": "OK"
+}
diff --git a/locales/pt-BR/index.json b/locales/pt-BR/index.json
new file mode 100644
index 0000000..90714b0
--- /dev/null
+++ b/locales/pt-BR/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | O utilitário de mouse e trackpad para Mac.",
+ "description": "Personalize a direção da rolagem do mouse e do trackpad, aceleração do ponteiro e velocidade do ponteiro e assim por diante...",
+ "slogan": "Personalize \nComo um Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse e Trackpad",
+ "scrolling_direction": "Direção de rolagem",
+ "pointer_acceleration": "Aceleração de ponteiro",
+ "pointer_speed": "Velocidade do ponteiro",
+ "modifier_keys": "Teclas Modificadoras"
+ },
+ "install": {
+ "download": "Baixar",
+ "install_via_homebrew": "Instalar via Homebrew",
+ "copied": "Copiado"
+ },
+ "features": [
+ {
+ "title": "Para Cada Dispositivo de ponta.",
+ "description": "O LinearMouse suporta as configurações por dispositivo.
Você pode aplicar configurações diferentes para seus mouses e trackpads.
"
+ },
+ {
+ "title": "Mais Natural \nQue Natural .",
+ "description": "Se você está desconfortável com a rolagem natural ao usar um mouse, o LinearMouse pode ajudá-lo a reverter a direção da rolagem.
Como cada dispositivo pode ser configurado de forma independente, não há necessidade de se preocupar com a direção da rolagem do trackpad ser afetada.
"
+ },
+ {
+ "title": "Mova o Cursor\nRápido e com Precisão ",
+ "description": "O LinearMouse permite que você encontre uma aceleração e velocidade do ponteiro confortáveis e ajuda a mover o ponteiro mais rápido e com mais precisão.
Você pode até desativar a aceleração do ponteiro se for um jogador ou designer para obter a melhor precisão do ponteiro.
"
+ }
+ ]
+}
diff --git a/locales/pt-PT/common.json b/locales/pt-PT/common.json
new file mode 100644
index 0000000..11bac1e
--- /dev/null
+++ b/locales/pt-PT/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussions",
+ "language": "Language"
+ },
+ "footer": {
+ "help_translate": "Help translate",
+ "privacy_policy": "Privacy Policy"
+ },
+ "cookie_consent": {
+ "description": "This website uses cookies to enhance the user experience."
+ },
+ "ok": "OK"
+}
diff --git a/locales/pt-PT/index.json b/locales/pt-PT/index.json
new file mode 100644
index 0000000..05cb947
--- /dev/null
+++ b/locales/pt-PT/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | The mouse and trackpad utility for Mac.",
+ "description": "Customize mouse and trackpad's scrolling direction, pointer acceleration, pointer speed and so on...",
+ "slogan": "Customize \nLike a Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse and Trackpad",
+ "scrolling_direction": "Scrolling Direction",
+ "pointer_acceleration": "Pointer Acceleration",
+ "pointer_speed": "Pointer Speed",
+ "modifier_keys": "Modifier Keys"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Install via Homebrew",
+ "copied": "Copied"
+ },
+ "features": [
+ {
+ "title": "For Each Pointing Device.",
+ "description": "LinearMouse supports per-device settings.
You can apply different settings to your mice and trackpads.
"
+ },
+ {
+ "title": "More Natural \nThan Natural .",
+ "description": "If you are uncomfortable with the natural scrolling when using a mouse, LinearMouse can help you reverse the scrolling direction.
As each device can be configured independently, there is no need to be concerned about the trackpad's scrolling direction being affected.
"
+ },
+ {
+ "title": "Move the Pointer\nFast and Accurately. ",
+ "description": "LinearMouse allows you to find a comfortable pointer acceleration and speed and helps you to move the pointer faster and more accurately.
You can even disable pointer acceleration if you are a gamer or designer to get the best pointer accuracy.
"
+ }
+ ]
+}
diff --git a/locales/ro-RO/common.json b/locales/ro-RO/common.json
new file mode 100644
index 0000000..faf381b
--- /dev/null
+++ b/locales/ro-RO/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discuții",
+ "language": "Limbă"
+ },
+ "footer": {
+ "help_translate": "Ajută la traducere",
+ "privacy_policy": "Privacy Policy"
+ },
+ "cookie_consent": {
+ "description": "Acest site folosește cookie-uri pentru a îmbunătăți experiența utilizatorului."
+ },
+ "ok": "OK"
+}
diff --git a/locales/ro-RO/index.json b/locales/ro-RO/index.json
new file mode 100644
index 0000000..cf0b8e2
--- /dev/null
+++ b/locales/ro-RO/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Utilitar pentru mouse și trackpad pentru Mac.",
+ "description": "Personalizați direcția de derulare a mouse-ului și a trackpad-ului, accelerația indicatorului, viteza cursorului și așa mai departe...",
+ "slogan": "Personalizați \nCa un Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse și Trackpad",
+ "scrolling_direction": "Direcție derulare",
+ "pointer_acceleration": "Accelerarea indicatorului",
+ "pointer_speed": "Viteza Indicatorului",
+ "modifier_keys": "Modificator de taste"
+ },
+ "install": {
+ "download": "Descărcare",
+ "install_via_homebrew": "Instalați prin Homebrew",
+ "copied": "Copiat"
+ },
+ "features": [
+ {
+ "title": "Pentru Fiecare Dispozitiv indicator.",
+ "description": "LinearMouse acceptă setările per-dispozitiv.
Poți aplica setări diferite pentru mouse și trackpad.
"
+ },
+ {
+ "title": "Mai Natural \nDecât Natural .",
+ "description": "Dacă ești neconfortabil cu derularea naturală atunci când folosești un mouse, LinearMouse te poate ajuta să inversezi direcția de derulare.
Deoarece fiecare dispozitiv poate fi configurat independent, nu trebuie să fie îngrijorat de faptul că direcția de derulare a trackpad-ului este afectată.
"
+ },
+ {
+ "title": "Mută indicatorul\nRapid și cu acuratețe. ",
+ "description": "LinearMouse îți permite să găsești o accelerație și o viteză confortabilă și te ajută să muți indicatorul mai repede și mai exact.
Poți chiar să dezactivezi accelerația cursorului dacă ești un gamer sau un designer pentru a obține cea mai bună acuratețe.
"
+ }
+ ]
+}
diff --git a/locales/ru-RU/common.json b/locales/ru-RU/common.json
new file mode 100644
index 0000000..54506b9
--- /dev/null
+++ b/locales/ru-RU/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Обсуждение",
+ "language": "Язык"
+ },
+ "footer": {
+ "help_translate": "Помочь с переводом",
+ "privacy_policy": "Политика приватности"
+ },
+ "cookie_consent": {
+ "description": "Этот веб-сайт использует куки-файлы для повышения удобства работы пользователя."
+ },
+ "ok": "ОК"
+}
diff --git a/locales/ru-RU/index.json b/locales/ru-RU/index.json
new file mode 100644
index 0000000..81fc85b
--- /dev/null
+++ b/locales/ru-RU/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Утилита для мыши и трекпада для Mac.",
+ "description": "Настраивайте направление прокрутки мыши и трекпада, ускорение указателя, скорость указателя и так далее...",
+ "slogan": "Настраивайте \nкак профессионал. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "мышь и трекпад",
+ "scrolling_direction": "направление прокрутки",
+ "pointer_acceleration": "ускорение указателя",
+ "pointer_speed": "скорость указателя",
+ "modifier_keys": "клавиши-модификаторы"
+ },
+ "install": {
+ "download": "Скачать",
+ "install_via_homebrew": "Установить через Homebrew",
+ "copied": "Скопировано"
+ },
+ "features": [
+ {
+ "title": "Для Каждого Устройства Управления Курсором.",
+ "description": "LinearMouse позволяет настроить каждое устройство по отдельности.
Вы можете применить различные настройки к вашим мышам и трекпадам.
"
+ },
+ {
+ "title": "Более естественная прокрутка,\nчем естественная .",
+ "description": "Если вы испытываете неудобства при использовании естественной прокрутки, LinearMouse поможет изменить направление прокрутки.
Так как каждое устройство может быть настроено индивидуально, нет необходимости беспокоиться о влиянии направления прокрутки на трекпад.
"
+ },
+ {
+ "title": "Перемещайте указатель\nбыстро и точно. ",
+ "description": "LinearMouse позволит подобрать удобное ускорение и скорость указателя и поможет вам быстрее и точнее перемещать указатель.
Вы даже можете отключить ускорение указателя, если вы геймер или дизайнер, чтобы получить наилучшую точность указателя.
"
+ }
+ ]
+}
diff --git a/locales/sk-SK/common.json b/locales/sk-SK/common.json
new file mode 100644
index 0000000..cb28c63
--- /dev/null
+++ b/locales/sk-SK/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Diskusia",
+ "language": "Jazyk"
+ },
+ "footer": {
+ "help_translate": "Pomôcť s prekladom",
+ "privacy_policy": "Zásady ochrany osobných údajov"
+ },
+ "cookie_consent": {
+ "description": "Táto webová stránka používa cookies na zlepšenie používateľského zážitku."
+ },
+ "ok": "OK"
+}
diff --git a/locales/sk-SK/index.json b/locales/sk-SK/index.json
new file mode 100644
index 0000000..0c22fbc
--- /dev/null
+++ b/locales/sk-SK/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Myš a trackpad pomôcka pre váš Mac.",
+ "description": "Prispôsobte smer posúvania myši a trackpadu, zrýchlenie ukazovateľa, rýchlosť ukazovateľa atď...",
+ "slogan": "Prispôsobte si \nako Profesionál. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Myš a Trackpad",
+ "scrolling_direction": "Smer posúvania",
+ "pointer_acceleration": "Zrýchlenie ukazovateľa",
+ "pointer_speed": "Rýchlosť ukazovateľa",
+ "modifier_keys": "Modifikačné klávesy"
+ },
+ "install": {
+ "download": "Stiahnuť",
+ "install_via_homebrew": "Inštalovať pomocou Homebrew",
+ "copied": "Skopírované"
+ },
+ "features": [
+ {
+ "title": "Pre každé ukazovacie zariadenie.",
+ "description": "LinearMouse podporuje nastavenie pre každé zariadenie zvlášť.
Môžete použiť iné nastavenie pre myš a iné pre trackpad.
"
+ },
+ {
+ "title": "Prirodzenejšie \nako Prirodzené .",
+ "description": "Ak vám nevyhovuje prirodzené posúvanie pri používaní myši, aplikácia LinearMouse vám pomôže zmeniť smer posúvania.
Keďže každé zariadenie možno nakonfigurovať nezávisle, nemusíte sa obávať, že by bol ovplyvnený smer posúvania trackpadu.
"
+ },
+ {
+ "title": "Presun ukazovateľa\nRýchlo a presne. ",
+ "description": "LinearMouse umožňuje nastaviť pohodlnú akceleráciu a rýchlosť ukazovateľa a pomáha vám pohybovať ukazovateľom rýchlejšie a presnejšie.
Ak ste hráč alebo dizajnér, môžete akceleráciu ukazovateľa dokonca vypnúť, aby ste dosiahli najlepšiu presnosť ukazovateľa.
"
+ }
+ ]
+}
diff --git a/locales/sr-SP/common.json b/locales/sr-SP/common.json
new file mode 100644
index 0000000..11bac1e
--- /dev/null
+++ b/locales/sr-SP/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Discussions",
+ "language": "Language"
+ },
+ "footer": {
+ "help_translate": "Help translate",
+ "privacy_policy": "Privacy Policy"
+ },
+ "cookie_consent": {
+ "description": "This website uses cookies to enhance the user experience."
+ },
+ "ok": "OK"
+}
diff --git a/locales/sr-SP/index.json b/locales/sr-SP/index.json
new file mode 100644
index 0000000..05cb947
--- /dev/null
+++ b/locales/sr-SP/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | The mouse and trackpad utility for Mac.",
+ "description": "Customize mouse and trackpad's scrolling direction, pointer acceleration, pointer speed and so on...",
+ "slogan": "Customize \nLike a Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse and Trackpad",
+ "scrolling_direction": "Scrolling Direction",
+ "pointer_acceleration": "Pointer Acceleration",
+ "pointer_speed": "Pointer Speed",
+ "modifier_keys": "Modifier Keys"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Install via Homebrew",
+ "copied": "Copied"
+ },
+ "features": [
+ {
+ "title": "For Each Pointing Device.",
+ "description": "LinearMouse supports per-device settings.
You can apply different settings to your mice and trackpads.
"
+ },
+ {
+ "title": "More Natural \nThan Natural .",
+ "description": "If you are uncomfortable with the natural scrolling when using a mouse, LinearMouse can help you reverse the scrolling direction.
As each device can be configured independently, there is no need to be concerned about the trackpad's scrolling direction being affected.
"
+ },
+ {
+ "title": "Move the Pointer\nFast and Accurately. ",
+ "description": "LinearMouse allows you to find a comfortable pointer acceleration and speed and helps you to move the pointer faster and more accurately.
You can even disable pointer acceleration if you are a gamer or designer to get the best pointer accuracy.
"
+ }
+ ]
+}
diff --git a/locales/sv-SE/common.json b/locales/sv-SE/common.json
new file mode 100644
index 0000000..747808f
--- /dev/null
+++ b/locales/sv-SE/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Diskussioner",
+ "language": "Språk"
+ },
+ "footer": {
+ "help_translate": "Help translate",
+ "privacy_policy": "Privacy Policy"
+ },
+ "cookie_consent": {
+ "description": "This website uses cookies to enhance the user experience."
+ },
+ "ok": "OK"
+}
diff --git a/locales/sv-SE/index.json b/locales/sv-SE/index.json
new file mode 100644
index 0000000..dc17d2f
--- /dev/null
+++ b/locales/sv-SE/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | The mouse and trackpad utility for Mac.",
+ "description": "Customize mouse and trackpad's scrolling direction, pointer acceleration, pointer speed and so on...",
+ "slogan": "Customize \nLike a Pro. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Mouse and Trackpad",
+ "scrolling_direction": "Scrolling Direction",
+ "pointer_acceleration": "Pointer Acceleration",
+ "pointer_speed": "Pointer Speed",
+ "modifier_keys": "Modifier Keys"
+ },
+ "install": {
+ "download": "Download",
+ "install_via_homebrew": "Installera via Homebrew",
+ "copied": "Copied"
+ },
+ "features": [
+ {
+ "title": "For Each Pointing Device.",
+ "description": "LinearMouse supports per-device settings.
You can apply different settings to your mice and trackpads.
"
+ },
+ {
+ "title": "More Natural \nThan Natural .",
+ "description": "If you are uncomfortable with the natural scrolling when using a mouse, LinearMouse can help you reverse the scrolling direction.
As each device can be configured independently, there is no need to be concerned about the trackpad's scrolling direction being affected.
"
+ },
+ {
+ "title": "Move the Pointer\nFast and Accurately. ",
+ "description": "LinearMouse allows you to find a comfortable pointer acceleration and speed and helps you to move the pointer faster and more accurately.
You can even disable pointer acceleration if you are a gamer or designer to get the best pointer accuracy.
"
+ }
+ ]
+}
diff --git a/locales/tr-TR/common.json b/locales/tr-TR/common.json
new file mode 100644
index 0000000..3798fd6
--- /dev/null
+++ b/locales/tr-TR/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Tartışmalar",
+ "language": "Dil"
+ },
+ "footer": {
+ "help_translate": "Çeviriye yardım et",
+ "privacy_policy": "Gizlilik Politikası"
+ },
+ "cookie_consent": {
+ "description": "Size en uygun kullanıcı deneyimini sunmak için çerezleri kullanıyoruz."
+ },
+ "ok": "Tamam"
+}
diff --git a/locales/tr-TR/index.json b/locales/tr-TR/index.json
new file mode 100644
index 0000000..2aa7699
--- /dev/null
+++ b/locales/tr-TR/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Mac için fare ve dokunmatik yüzey aracı.",
+ "description": "Fare ve dokunmatik yüzeyinizin kaydırma yönünü, imleç ivmesini, imleç hızını vb. özelleştirin...",
+ "slogan": " bir Profesyonel \ngibi özelleştirin",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Fare ve dokunmatik yüzeyini",
+ "scrolling_direction": "Kaydırma yönünü",
+ "pointer_acceleration": "İmleç ivmesini",
+ "pointer_speed": "İmleç hızını",
+ "modifier_keys": "Değiştirici tuşlar"
+ },
+ "install": {
+ "download": "İndir",
+ "install_via_homebrew": "Homebrew ile yükle",
+ "copied": "Kopyalandı"
+ },
+ "features": [
+ {
+ "title": "Her bir işaretçi cihazı için.",
+ "description": "LinearMouse cihaza özel ayarları destekliyor.
Fare ve dokunmatik yüzeyinize farklı ayarlar yapabilirsiniz.
"
+ },
+ {
+ "title": "Doğaldan Daha Doğal .",
+ "description": "Farenizin doğal kaydırışından rahatsız iseniz LinearMouse kaydırma yönünü değiştirmek için size yardım edebilir.
Her bir cihazı ayrı olarak yapılandırabilirsiniz, dokunmatik yüzeyinizin yönünün değişeceğinden endişelenmeyin.
"
+ },
+ {
+ "title": "İmlecinizi Daha hızlı ve daha isabetli Kaydırın.",
+ "description": "LinearMouse imlecinizin ivmesini ve hızını ayarlamanıza izin vererek imlecinizin daha hızlı ve daha isabetli olmasına olanak veriyor.
Eğer bir tasarımcı veya bilgisayar oyuncusuysanız imleç ivmesini kapatarak daha isabetli bir imleç elde edebilirsiniz.
"
+ }
+ ]
+}
diff --git a/locales/uk-UA/common.json b/locales/uk-UA/common.json
new file mode 100644
index 0000000..c375430
--- /dev/null
+++ b/locales/uk-UA/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Обговорення",
+ "language": "Мова"
+ },
+ "footer": {
+ "help_translate": "Допоможіть з перекладом",
+ "privacy_policy": "Політика конфіденційності"
+ },
+ "cookie_consent": {
+ "description": "Цей вебсайт використовує файли cookie для покращення користувацького досвіду."
+ },
+ "ok": "Гаразд"
+}
diff --git a/locales/uk-UA/index.json b/locales/uk-UA/index.json
new file mode 100644
index 0000000..2d27f6e
--- /dev/null
+++ b/locales/uk-UA/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Утиліта для миші та трекпада на Mac.",
+ "description": "Налаштуйте напрямок прокрутки миші та трекпада, пришвидшення вказівника, швидкість вказівника тощо...",
+ "slogan": "Налаштовуйте \nяк професіонал. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Мишу та Трекпад",
+ "scrolling_direction": "Напрямок прокрутки",
+ "pointer_acceleration": "Пришвидшення вказівника",
+ "pointer_speed": "Швидкість вказівника",
+ "modifier_keys": "Клавіші-модифікатори"
+ },
+ "install": {
+ "download": "Завантажити",
+ "install_via_homebrew": "Установити через Homebrew",
+ "copied": "Скопійовано"
+ },
+ "features": [
+ {
+ "title": "Для кожного пристрою для керування курсором.",
+ "description": "LinearMouse має підтримку налаштування для кожного пристрою.
Ви можете застосовувати різні налаштування до мишок і трекпадів.
"
+ },
+ {
+ "title": "Природніше \nніж природно .",
+ "description": "Якщо вам незручно користуватися природною прокруткою при використанні миші, LinearMouse може допомогти вам змінити напрямок прокрутки.
Оскільки кожен пристрій можна налаштувати незалежно, не потрібно турбуватися про те, що це вплине на напрямок прокрутки трекпада.
"
+ },
+ {
+ "title": "Переміщуйте вказівник\nшвидко і точно. ",
+ "description": "LinearMouse дозволяє знайти комфортне пришвидшення і швидкість вказівника, а також допомагає переміщати вказівник швидше і точніше.
Ви навіть можете вимкнути пришвидшення вказівника, якщо ви ґеймер або дизайнер, щоб мати найкращу точність вказівника.
"
+ }
+ ]
+}
diff --git a/locales/vi-VN/common.json b/locales/vi-VN/common.json
new file mode 100644
index 0000000..3520db1
--- /dev/null
+++ b/locales/vi-VN/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "Thảo luận",
+ "language": "Ngôn ngữ"
+ },
+ "footer": {
+ "help_translate": "Hỗ trợ dịch thuật",
+ "privacy_policy": "Chính sách bảo mật"
+ },
+ "cookie_consent": {
+ "description": "Trang web này sử dụng cookie để nâng cao trải nghiệm người dùng."
+ },
+ "ok": "OK"
+}
diff --git a/locales/vi-VN/index.json b/locales/vi-VN/index.json
new file mode 100644
index 0000000..9ce3ede
--- /dev/null
+++ b/locales/vi-VN/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Tiện ích chuột và trackpad cho Mac.",
+ "description": "Tuỳ biến hướng cuộn, tốc độ con trở, tăng tốc con trỏ, và nhiều hơn nữa... của chuột và trackpad",
+ "slogan": "Tuỳ biến \nMột cách chuyên nghiệp. ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "Chuột và Trackpad",
+ "scrolling_direction": "Hướng cuộn",
+ "pointer_acceleration": "Gia tốc con trỏ",
+ "pointer_speed": "Tốc độ con trỏ",
+ "modifier_keys": "Phím bổ trợ"
+ },
+ "install": {
+ "download": "Tải về",
+ "install_via_homebrew": "Cài đặt qua Homebrew",
+ "copied": "Đã sao chép"
+ },
+ "features": [
+ {
+ "title": "Dành cho mọi thiết bị điều hướng.",
+ "description": "LinearMouse hỗ trợ thiết lập riêng cho từng thiết bị.
Bạn có thể áp dụng các cài đặt khác nhau cho chuột và bàn di chuột của mình.
"
+ },
+ {
+ "title": "Tự nhiên \nHơn cả Tự nhiên .",
+ "description": "Nếu bạn không thoải mái với cách cuộn tự nhiên khi sử dụng chuột, LinearMouse có thể giúp bạn đảo ngược hướng cuộn.
Vì mỗi thiết bị có thể được cấu hình độc lập nên bạn không cần lo lắng về việc hướng cuộn của bàn di chuột bị ảnh hưởng.
"
+ },
+ {
+ "title": "Di chuyển con trỏ\nNhanh và chính xác. ",
+ "description": "LinearMouse giúp bạn dễ dàng thiết đặt tốc độ và gia tốc con trỏ phù hợp, đồng thời giúp bạn di chuyển con trỏ nhanh hơn và chính xác hơn.
Bạn thậm chí có thể tắt gia tốc con trỏ nếu bạn là một game thủ hoặc nhà thiết kế để có được độ chính xác cao nhất.
"
+ }
+ ]
+}
diff --git a/locales/zh-CN/common.json b/locales/zh-CN/common.json
new file mode 100644
index 0000000..065ad6a
--- /dev/null
+++ b/locales/zh-CN/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "讨论",
+ "language": "语言"
+ },
+ "footer": {
+ "help_translate": "协助翻译",
+ "privacy_policy": "隐私政策"
+ },
+ "cookie_consent": {
+ "description": "此网站使用 cookies 来增强用户体验。"
+ },
+ "ok": "好的"
+}
diff --git a/locales/zh-CN/index.json b/locales/zh-CN/index.json
new file mode 100644
index 0000000..92d7f4a
--- /dev/null
+++ b/locales/zh-CN/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Mac 平台的鼠标和触控板实用工具。",
+ "description": "自定义鼠标和触控板的滚动方向、指针加速度、指针速度等等",
+ "slogan": "给 \n一个私人定制的体验。 ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "鼠标和触控板",
+ "scrolling_direction": "滚动方向",
+ "pointer_acceleration": "指针加速度",
+ "pointer_speed": "指针速度",
+ "modifier_keys": "修饰键"
+ },
+ "install": {
+ "download": "下载",
+ "install_via_homebrew": "用 Homebrew 安装",
+ "copied": "已复制"
+ },
+ "features": [
+ {
+ "title": "定制每一个 指针设备。",
+ "description": "LinearMouse 支持为每个设备单独配置。
你可以为你的鼠标和触控板定制不同的参数。
"
+ },
+ {
+ "title": "比自然 更自然 。",
+ "description": "如果你不习惯于在使用鼠标时启用自然滚动,LinearMouse 能够帮助你反转滚动方向。
由于可以为每个设备单独配置,因此无需担心会影响触控板的滚动方向。
"
+ },
+ {
+ "title": "让指针又快又准 。",
+ "description": "LinearMouse 让你找到一个舒适的指针加速度和速度,让你更快、更准地移动指针。
如果你是游戏玩家或者设计师,你还可以禁用指针加速度来获得最精确的指针体验。
"
+ }
+ ]
+}
diff --git a/locales/zh-HK/common.json b/locales/zh-HK/common.json
new file mode 100644
index 0000000..587390c
--- /dev/null
+++ b/locales/zh-HK/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "討論",
+ "language": "語言"
+ },
+ "footer": {
+ "help_translate": "幫忙翻譯",
+ "privacy_policy": "隱私聲明"
+ },
+ "cookie_consent": {
+ "description": "此網站使用 cookies 來增強用戶體驗。"
+ },
+ "ok": "確認"
+}
diff --git a/locales/zh-HK/index.json b/locales/zh-HK/index.json
new file mode 100644
index 0000000..8a70a16
--- /dev/null
+++ b/locales/zh-HK/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Mac 下的滑鼠和觸控板實用工具。",
+ "description": "自定義滑鼠和觸控板的捲動方向、指標加速度、指標速度……",
+ "slogan": "給 \n一個專屬定製。 ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "滑鼠和觸控板",
+ "scrolling_direction": "捲動方向",
+ "pointer_acceleration": "指標加速度",
+ "pointer_speed": "指標速度",
+ "modifier_keys": "變更鍵"
+ },
+ "install": {
+ "download": "下載",
+ "install_via_homebrew": "透過 Homebrew 安裝",
+ "copied": "已複製"
+ },
+ "features": [
+ {
+ "title": "定製每一個 指標設備。",
+ "description": "LinearMouse 支援為每個設備單獨配置。
你可以為你的滑鼠和觸控板應用不同的設置。
"
+ },
+ {
+ "title": "比自然 更自然 。",
+ "description": "如果你不習慣於在使用滑鼠時啟用自然捲動,LinearMouse 能夠幫助你反轉捲動方向。
由於可以為每個設備單獨配置,因此無需擔心會影響觸控板的捲動方向。
"
+ },
+ {
+ "title": "讓指標又快又准 。",
+ "description": "LinearMouse 讓你找到一個舒適的指標加速度和速度,幫助你更快、更准地移動指標。
如果你是遊戲玩家或者設計師,你甚至可以禁用指標加速度來獲取最精確的指標體驗。
"
+ }
+ ]
+}
diff --git a/locales/zh-TW/common.json b/locales/zh-TW/common.json
new file mode 100644
index 0000000..15ab3d0
--- /dev/null
+++ b/locales/zh-TW/common.json
@@ -0,0 +1,15 @@
+{
+ "navigation": {
+ "github": "GitHub",
+ "discussions": "討論",
+ "language": "語言"
+ },
+ "footer": {
+ "help_translate": "幫助翻譯",
+ "privacy_policy": "隱私政策"
+ },
+ "cookie_consent": {
+ "description": "此網站使用 cookies 來增強用戶體驗。"
+ },
+ "ok": "確認"
+}
diff --git a/locales/zh-TW/index.json b/locales/zh-TW/index.json
new file mode 100644
index 0000000..9ab98b0
--- /dev/null
+++ b/locales/zh-TW/index.json
@@ -0,0 +1,31 @@
+{
+ "title": "LinearMouse | Mac 下的滑鼠和觸控式軌跡板實用工具。",
+ "description": "自定義滑鼠和觸控式軌跡板的捲動方向、指標加速度、指標速度……",
+ "slogan": "給 \n一個專屬定製。 ",
+ "slogan_marquee": {
+ "mouse_and_trackpad": "滑鼠和觸控式軌跡板",
+ "scrolling_direction": "捲動方向",
+ "pointer_acceleration": "指標加速度",
+ "pointer_speed": "指標速度",
+ "modifier_keys": "變更鍵"
+ },
+ "install": {
+ "download": "下載",
+ "install_via_homebrew": "透過 Homebrew 安裝",
+ "copied": "已複製"
+ },
+ "features": [
+ {
+ "title": "定製每一個 指標設備。",
+ "description": "LinearMouse 支援為每個設備單獨配置。
你可以為你的滑鼠和觸控式軌跡板應用不同的設置。
"
+ },
+ {
+ "title": "比自然 更自然 。",
+ "description": "如果你不習慣在使用滑鼠時啟用自然捲動,LinearMouse 能夠幫助你反轉捲動方向。
可以單獨配置每個設備,無需擔心會影響觸控式軌跡板的捲動方向。
"
+ },
+ {
+ "title": "讓指標又快又準 。",
+ "description": "LinearMouse 讓你找到一個舒適的指標加速度和速度,幫助你更快、更準地移動指標。
如果你是遊戲玩家或者設計師,你甚至可以禁用指標加速度來獲取最精確的指標體驗。
"
+ }
+ ]
+}
diff --git a/messages/af-ZA.json b/messages/af-ZA.json
deleted file mode 100644
index 11160cf..0000000
--- a/messages/af-ZA.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Besprekings",
- "nav_language": "Taal",
- "footer_help_translate": "Help vertaal",
- "footer_privacy_policy": "Privaatheidsbeleid",
- "cookie_description": "Hierdie webwerf gebruik koekies om die gebruikerservaring te verbeter.",
- "ok": "Goed",
- "title": "LinearMouse | Die nutsprogram vir muis en stuurvlak vir Mac.",
- "description": "Pas jou muis en stuurvlak se rolrigting, wyserversnelling, wyserspoed en meer aan...",
- "install_download": "Laai af",
- "install_install_via_homebrew": "Installeer via Homebrew",
- "install_copied": "Gekopieer",
- "nav_theme": "Tema",
- "theme_system": "Stelsel",
- "theme_light": "Lig",
- "theme_dark": "Donker",
- "slogan_marquee_mouse_and_trackpad": "Muis en Stuurvlak",
- "slogan_marquee_per_app_profiles": "Per-App Profiele",
- "slogan_marquee_reverse_scrolling": "Rol",
- "slogan_marquee_pointer_precision": "Wyserspoed",
- "slogan_marquee_button_shortcuts": "Knoppie-aksies",
- "nav_menu": "Kieslys",
- "slogan_rich": "Stel {#marquee}{/marquee} in\n{#gradient}Net reg.{/gradient}",
- "feature_profiles_title": "Profiele Wat\n{#strong}Bybly.{/strong}",
- "feature_profiles_description": "Ander toestel. Ander toepassing. Ander skerm. LinearMouse hou elke beheer presies waar dit hoort.",
- "feature_scrolling_title": "{#strong}Rol{/strong}\nOp Jou Manier.",
- "feature_scrolling_description": "Hou natuurlike rol op jou stuurvlak, keer dit om op jou muis, en verstel elke rigting totdat dit moeiteloos voel.",
- "feature_pointer_title": "Wyserbeheer,\n{#strong}Fyn Ingestel.{/strong}",
- "feature_pointer_description": "Stel versnelling en spoed fyn in, spring terug na stelselverstek, of skakel versnelling heeltemal af vir bestendige, voorspelbare presisie.",
- "feature_buttons_title": "Knoppies Wat\n{#strong}Meer Doen.{/strong}",
- "feature_buttons_description": "Herkarteer knoppies en rolaksies na kortpaaie, mediabeheer, Mission Control en gebaar-gedrewe werkvloeie wat by jou tempo hou."
-}
diff --git a/messages/ar-SA.json b/messages/ar-SA.json
deleted file mode 100644
index 278531e..0000000
--- a/messages/ar-SA.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "النقاشات",
- "nav_language": "اللغة",
- "footer_help_translate": "ساعد في الترجمة",
- "footer_privacy_policy": "سياسة الخصوصية",
- "cookie_description": "يستخدم هذا الموقع ملفات تعريف الارتباط لتحسين تجربة المستخدم.",
- "ok": "حسنًا",
- "title": "LinearMouse | أداة الماوس ولوحة التعقب لنظام Mac.",
- "description": "خصّص اتجاه التمرير وتسارع المؤشر وسرعة المؤشر وغير ذلك للماوس ولوحة التعقب...",
- "install_download": "تنزيل",
- "install_install_via_homebrew": "ثبّت عبر Homebrew",
- "install_copied": "تم النسخ",
- "nav_theme": "السمة",
- "theme_system": "النظام",
- "theme_light": "فاتح",
- "theme_dark": "داكن",
- "slogan_marquee_mouse_and_trackpad": "الماوس ولوحة التتبع",
- "slogan_marquee_per_app_profiles": "ملفات تعريف حسب التطبيق",
- "slogan_marquee_reverse_scrolling": "التمرير",
- "slogan_marquee_pointer_precision": "سرعة المؤشر",
- "slogan_marquee_button_shortcuts": "وظائف الأزرار",
- "nav_menu": "القائمة",
- "slogan_rich": "اضبط {#marquee}{/marquee}\n{#gradient}كما ينبغي.{/gradient}",
- "feature_profiles_title": "ملفات تعريف\n{#strong}تواكبك.{/strong}",
- "feature_profiles_description": "جهاز مختلف. تطبيق مختلف. شاشة مختلفة. يحافظ LinearMouse على كل عنصر تحكم في مكانه الصحيح تمامًا.",
- "feature_scrolling_title": "{#strong}تمرير{/strong}\nعلى طريقتك.",
- "feature_scrolling_description": "احتفظ بالتمرير الطبيعي على لوحة التتبع، واعكسه على الماوس، واضبط كل اتجاه حتى يصبح سلسًا تمامًا.",
- "feature_pointer_title": "تحكم بالمؤشر،\n{#strong}بدقة تامة.{/strong}",
- "feature_pointer_description": "اضبط التسارع والسرعة بدقة، وارجع إلى إعدادات النظام الافتراضية، أو عطّل التسارع بالكامل لتحصل على ثبات ودقة يمكن التنبؤ بهما.",
- "feature_buttons_title": "أزرار تقوم\n{#strong}بالمزيد.{/strong}",
- "feature_buttons_description": "أعِد تعيين الأزرار وإجراءات التمرير إلى اختصارات، وعناصر تحكم الوسائط، وMission Control، وسير عمل يعتمد على الإيماءات ليواكب سرعتك."
-}
diff --git a/messages/bs-BA.json b/messages/bs-BA.json
deleted file mode 100644
index a91f071..0000000
--- a/messages/bs-BA.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Diskusije",
- "nav_language": "Jezik",
- "footer_help_translate": "Pomozite s prijevodom",
- "footer_privacy_policy": "Politika privatnosti",
- "cookie_description": "Ova stranica koristi kolačiće za bolje korisničko iskustvo.",
- "ok": "OK",
- "title": "LinearMouse | Alat za miš i dodirnu plohu na Macu.",
- "description": "Prilagodite smjer skrolanja, ubrzanje pokazivača, brzinu pokazivača i još mnogo toga za miš i dodirnu plohu.",
- "install_download": "Preuzmi",
- "install_install_via_homebrew": "Instaliraj koristeći Homebrew",
- "install_copied": "Kopirano",
- "nav_theme": "Tema",
- "theme_system": "Sistemski",
- "theme_light": "Svijetla",
- "theme_dark": "Tamna",
- "slogan_marquee_mouse_and_trackpad": "Miš i dodirna ploha",
- "slogan_marquee_per_app_profiles": "Profili po aplikaciji",
- "slogan_marquee_reverse_scrolling": "Skrolovanje",
- "slogan_marquee_pointer_precision": "Brzina pokazivača",
- "slogan_marquee_button_shortcuts": "Radnje dugmadi",
- "nav_menu": "Meni",
- "slogan_rich": "Podesi {#marquee}{/marquee}\n{#gradient}Taman kako treba.{/gradient}",
- "feature_profiles_title": "Profili Koji\n{#strong}Prate Tempo.{/strong}",
- "feature_profiles_description": "Drugi uređaj. Druga aplikacija. Drugi ekran. LinearMouse drži svaku kontrolu tačno tamo gdje pripada.",
- "feature_scrolling_title": "{#strong}Skrolanje{/strong}\nPo Vašem.",
- "feature_scrolling_description": "Zadržite prirodno skrolanje na dodirnoj plohi, obrnite ga na mišu i podesite svaki smjer dok ne postane potpuno prirodan.",
- "feature_pointer_title": "Kontrola Pokazivača,\n{#strong}Fino Podešena.{/strong}",
- "feature_pointer_description": "Fino podesite ubrzanje i brzinu, vratite se na sistemske zadane vrijednosti ili potpuno isključite ubrzanje za stabilnu, predvidivu preciznost.",
- "feature_buttons_title": "Dugmad Koja\n{#strong}Mogu Više.{/strong}",
- "feature_buttons_description": "Preslikajte dugmad i radnje točkića na prečice, medijske kontrole, Mission Control i radne tokove vođene gestama koji prate vaš tempo."
-}
diff --git a/messages/ca-ES.json b/messages/ca-ES.json
deleted file mode 100644
index cf9a693..0000000
--- a/messages/ca-ES.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Debats",
- "nav_language": "Idioma",
- "footer_help_translate": "Ajuda a traduir",
- "footer_privacy_policy": "Política de privadesa",
- "cookie_description": "Aquest lloc web fa servir galetes per millorar l'experiència d'usuari.",
- "ok": "D'acord",
- "title": "LinearMouse | La utilitat de ratolí i trackpad per al Mac.",
- "description": "Personalitza la direcció del desplaçament, l'acceleració del punter, la velocitat del punter i més del ratolí i el trackpad...",
- "install_download": "Descarrega",
- "install_install_via_homebrew": "Instal·la amb Homebrew",
- "install_copied": "Copiat",
- "nav_theme": "Tema",
- "theme_system": "Sistema",
- "theme_light": "Clar",
- "theme_dark": "Fosc",
- "slogan_marquee_mouse_and_trackpad": "Ratolí i trackpad",
- "slogan_marquee_per_app_profiles": "Perfils per aplicació",
- "slogan_marquee_reverse_scrolling": "Desplaçament",
- "slogan_marquee_pointer_precision": "Velocitat del punter",
- "slogan_marquee_button_shortcuts": "Accions dels botons",
- "nav_menu": "Menú",
- "slogan_rich": "Ajusta {#marquee}{/marquee}\n{#gradient}Just com cal.{/gradient}",
- "feature_profiles_title": "Perfils Que\n{#strong}T'acompanyen.{/strong}",
- "feature_profiles_description": "Un dispositiu diferent. Una aplicació diferent. Una pantalla diferent. LinearMouse manté cada control exactament on toca.",
- "feature_scrolling_title": "{#strong}Desplaçament{/strong}\nA La Teva Manera.",
- "feature_scrolling_description": "Mantén el desplaçament natural al trackpad, inverteix-lo al ratolí i ajusta cada direcció fins que tot flueixi sol.",
- "feature_pointer_title": "Control Del Punter,\n{#strong}Ben Afinat.{/strong}",
- "feature_pointer_description": "Ajusta amb precisió l'acceleració i la velocitat, torna als valors del sistema quan vulguis o desactiva del tot l'acceleració per obtenir una precisió estable i previsible.",
- "feature_buttons_title": "Botons Que\n{#strong}Fan Més.{/strong}",
- "feature_buttons_description": "Reassigna botons i accions de desplaçament a dreceres, controls multimèdia, Mission Control i fluxos de treball guiats per gestos que segueixen el teu ritme."
-}
diff --git a/messages/cs-CZ.json b/messages/cs-CZ.json
deleted file mode 100644
index a8a23c1..0000000
--- a/messages/cs-CZ.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Diskuze",
- "nav_language": "Jazyk",
- "footer_help_translate": "Pomozte s překladem",
- "footer_privacy_policy": "Zásady soukromí",
- "cookie_description": "Tento web používá cookies pro zlepšení uživatelského zážitku.",
- "ok": "OK",
- "title": "LinearMouse | Nástroj pro myš a trackpad na Macu.",
- "description": "Přizpůsobte směr posouvání myši a trackpadu, zrychlení kurzoru, rychlost kurzoru a další.",
- "install_download": "Stáhnout",
- "install_install_via_homebrew": "Instalovat pomocí Homebrew",
- "install_copied": "Zkopírováno",
- "nav_theme": "Motiv",
- "theme_system": "Systém",
- "theme_light": "Světlý",
- "theme_dark": "Tmavý",
- "slogan_marquee_mouse_and_trackpad": "Myš a trackpad",
- "slogan_marquee_per_app_profiles": "Profily podle aplikace",
- "slogan_marquee_reverse_scrolling": "Posouvání",
- "slogan_marquee_pointer_precision": "Rychlost ukazatele",
- "slogan_marquee_button_shortcuts": "Akce tlačítek",
- "nav_menu": "Nabídka",
- "slogan_rich": "Vylaďte {#marquee}{/marquee}\n{#gradient}Tak akorát.{/gradient}",
- "feature_profiles_title": "Profily, Které\n{#strong}Drží Krok.{/strong}",
- "feature_profiles_description": "Jiné zařízení. Jiná aplikace. Jiný displej. LinearMouse drží každé ovládání přesně tam, kam patří.",
- "feature_scrolling_title": "{#strong}Rolování{/strong}\nPo Vašem.",
- "feature_scrolling_description": "Nechte přirozené rolování na trackpadu, obraťte ho na myši a dolaďte každý směr, dokud nebude působit naprosto přirozeně.",
- "feature_pointer_title": "Ovládání Ukazatele,\n{#strong}Vyladěné Do Detailu.{/strong}",
- "feature_pointer_description": "Jemně dolaďte akceleraci i rychlost, vraťte se k systémovým výchozím hodnotám nebo akceleraci úplně vypněte pro stabilní a předvídatelnou přesnost.",
- "feature_buttons_title": "Tlačítka, Která\n{#strong}Zvládnou Víc.{/strong}",
- "feature_buttons_description": "Namapujte tlačítka a akce kolečka na zkratky, ovládání médií, Mission Control a pracovní postupy řízené gesty, které drží krok s vámi."
-}
diff --git a/messages/da-DK.json b/messages/da-DK.json
deleted file mode 100644
index a140078..0000000
--- a/messages/da-DK.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Diskussioner",
- "nav_language": "Sprog",
- "footer_help_translate": "Hjælp med at oversætte",
- "footer_privacy_policy": "Privatlivspolitik",
- "cookie_description": "Denne hjemmeside bruger cookies for at forbedre brugeroplevelsen.",
- "ok": "Ok",
- "title": "LinearMouse | Hjælpeværktøjet for mus og pegefelt til Mac.",
- "description": "Tilpas mus og pegefelts rulleretning, markøracceleration, markørhastighed og så videre...",
- "install_download": "Download",
- "install_install_via_homebrew": "Installer via Homebrew",
- "install_copied": "Kopieret",
- "nav_theme": "Tema",
- "theme_system": "System",
- "theme_light": "Lys",
- "theme_dark": "Mørk",
- "slogan_marquee_mouse_and_trackpad": "Mus og pegefelt",
- "slogan_marquee_per_app_profiles": "Profiler pr. app",
- "slogan_marquee_reverse_scrolling": "Rulning",
- "slogan_marquee_pointer_precision": "Markørhastighed",
- "slogan_marquee_button_shortcuts": "Knaphandlinger",
- "nav_menu": "Menu",
- "slogan_rich": "Juster {#marquee}{/marquee}\n{#gradient}Lige tilpas.{/gradient}",
- "feature_profiles_title": "Profiler Der\n{#strong}Følger Med.{/strong}",
- "feature_profiles_description": "Ny enhed. Ny app. Ny skærm. LinearMouse holder hver kontrol præcis dér, hvor den hører hjemme.",
- "feature_scrolling_title": "{#strong}Rulning{/strong}\nPå Dine Vilkår.",
- "feature_scrolling_description": "Behold naturlig rulning på pegefeltet, vend den om på musen, og finjustér hver retning, indtil det hele føles ubesværet.",
- "feature_pointer_title": "Markørkontrol,\n{#strong}Finjusteret.{/strong}",
- "feature_pointer_description": "Finjustér acceleration og hastighed, hop tilbage til systemets standarder, eller slå acceleration helt fra for stabil og forudsigelig præcision.",
- "feature_buttons_title": "Knapper Der\n{#strong}Kan Mere.{/strong}",
- "feature_buttons_description": "Tilknyt knapper og rullehandlinger til genveje, mediekontroller, Mission Control og gestusbaserede arbejdsgange, der følger dit tempo."
-}
diff --git a/messages/de-DE.json b/messages/de-DE.json
deleted file mode 100644
index 9380471..0000000
--- a/messages/de-DE.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Diskussionen",
- "nav_language": "Sprache",
- "footer_help_translate": "Beim Übersetzen helfen",
- "footer_privacy_policy": "Datenschutzerklärung",
- "cookie_description": "Diese Website nutzt Cookies, um die Nutzererfahrung zu verbessern.",
- "ok": "OK",
- "title": "LinearMouse | Das Dienstprogramm für Maus und Trackpad auf dem Mac.",
- "description": "Passe Scrollrichtung, Zeigerbeschleunigung, Zeigergeschwindigkeit und mehr für Maus und Trackpad an.",
- "install_download": "Herunterladen",
- "install_install_via_homebrew": "Mit Homebrew installieren",
- "install_copied": "Kopiert",
- "nav_theme": "Thema",
- "theme_system": "System",
- "theme_light": "Hell",
- "theme_dark": "Dunkel",
- "slogan_marquee_mouse_and_trackpad": "Maus und Trackpad",
- "slogan_marquee_per_app_profiles": "Profile pro App",
- "slogan_marquee_reverse_scrolling": "Scrollen",
- "slogan_marquee_pointer_precision": "Zeigergeschwindigkeit",
- "slogan_marquee_button_shortcuts": "Tastenaktionen",
- "nav_menu": "Menü",
- "slogan_rich": "Justiere {#marquee}{/marquee}\n{#gradient}Genau richtig.{/gradient}",
- "feature_profiles_title": "Profile, Die\n{#strong}Mitziehen.{/strong}",
- "feature_profiles_description": "Anderes Gerät. Andere App. Anderes Display. LinearMouse hält jede Steuerung genau dort, wo sie hingehört.",
- "feature_scrolling_title": "{#strong}Scrollen{/strong}\nAuf Deine Art.",
- "feature_scrolling_description": "Lass natürliches Scrollen auf dem Trackpad, kehr es auf der Maus um und justiere jede Richtung, bis alles mühelos wirkt.",
- "feature_pointer_title": "Zeigerkontrolle,\n{#strong}Feinjustiert.{/strong}",
- "feature_pointer_description": "Passe Beschleunigung und Geschwindigkeit präzise an, spring jederzeit zu den Systemstandards zurück oder schalte Beschleunigung ganz aus – für ruhige, vorhersehbare Präzision.",
- "feature_buttons_title": "Tasten, Die\n{#strong}Mehr Können.{/strong}",
- "feature_buttons_description": "Lege Tasten- und Scroll-Aktionen auf Kurzbefehle, Mediensteuerung, Mission Control und gestenbasierte Workflows, die dich im Fluss halten."
-}
diff --git a/messages/el-GR.json b/messages/el-GR.json
deleted file mode 100644
index 9558c7f..0000000
--- a/messages/el-GR.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Συζητήσεις",
- "nav_language": "Γλώσσα",
- "footer_help_translate": "Βοηθήστε στη μετάφραση",
- "footer_privacy_policy": "Πολιτική Απορρήτου",
- "cookie_description": "Αυτή η ιστοσελίδα χρησιμοποιεί cookies για να βελτιώσει την εμπειρία του χρήστη.",
- "ok": "Εντάξει",
- "title": "LinearMouse | Το εργαλείο διαχείρισης ποντικιού και επιφάνειας αφής για Mac.",
- "description": "Προσαρμόστε την κατεύθυνση κύλισης του ποντικιού και της επιφάνειας αφής, την επιτάχυνση του δείκτη και ούτω καθεξής...",
- "install_download": "Λήψη",
- "install_install_via_homebrew": "Εγκατάσταση μέσω Homebrew",
- "install_copied": "Αντιγράφηκε",
- "nav_theme": "Θέμα",
- "theme_system": "Σύστημα",
- "theme_light": "Ανοιχτό",
- "theme_dark": "Σκούρο",
- "slogan_marquee_mouse_and_trackpad": "Ποντίκι και επιφάνεια αφής",
- "slogan_marquee_per_app_profiles": "Προφίλ ανά εφαρμογή",
- "slogan_marquee_reverse_scrolling": "Κύλιση",
- "slogan_marquee_pointer_precision": "Ταχύτητα δείκτη",
- "slogan_marquee_button_shortcuts": "Ενέργειες κουμπιών",
- "nav_menu": "Μενού",
- "slogan_rich": "Ρυθμίστε {#marquee}{/marquee}\n{#gradient}Ακριβώς όπως πρέπει.{/gradient}",
- "feature_profiles_title": "Προφίλ Που\n{#strong}Συμβαδίζουν.{/strong}",
- "feature_profiles_description": "Άλλη συσκευή. Άλλη εφαρμογή. Άλλη οθόνη. Το LinearMouse κρατά κάθε έλεγχο ακριβώς εκεί που πρέπει.",
- "feature_scrolling_title": "{#strong}Κύλιση{/strong}\nΣτα Μέτρα Σας.",
- "feature_scrolling_description": "Κρατήστε τη φυσική κύλιση στο trackpad, αντιστρέψτε τη στο ποντίκι και ρυθμίστε κάθε κατεύθυνση μέχρι να γίνεται αβίαστα.",
- "feature_pointer_title": "Έλεγχος Δείκτη,\n{#strong}Άψογα Ρυθμισμένος.{/strong}",
- "feature_pointer_description": "Ρυθμίστε με ακρίβεια επιτάχυνση και ταχύτητα, επιστρέψτε στις προεπιλογές του συστήματος ή απενεργοποιήστε πλήρως την επιτάχυνση για σταθερή, προβλέψιμη ακρίβεια.",
- "feature_buttons_title": "Κουμπιά Που\n{#strong}Κάνουν Περισσότερα.{/strong}",
- "feature_buttons_description": "Αντιστοιχίστε ξανά κουμπιά και ενέργειες κύλισης σε συντομεύσεις, χειριστήρια πολυμέσων, Mission Control και ροές εργασίας με χειρονομίες που σας κρατούν σε κίνηση."
-}
diff --git a/messages/en.json b/messages/en.json
deleted file mode 100644
index 17b1949..0000000
--- a/messages/en.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Discussions",
- "nav_language": "Language",
- "footer_help_translate": "Help translate",
- "footer_privacy_policy": "Privacy Policy",
- "cookie_description": "This website uses cookies to improve your experience.",
- "ok": "OK",
- "title": "LinearMouse | The mouse and trackpad utility for Mac.",
- "description": "Customize scrolling direction, pointer acceleration, pointer speed, and more for your mouse and trackpad.",
- "install_download": "Download",
- "install_install_via_homebrew": "Install via Homebrew",
- "install_copied": "Copied",
- "nav_theme": "Theme",
- "theme_system": "System",
- "theme_light": "Light",
- "theme_dark": "Dark",
- "slogan_marquee_mouse_and_trackpad": "Mouse & Trackpad",
- "slogan_marquee_per_app_profiles": "App Profiles",
- "slogan_marquee_reverse_scrolling": "Scrolling",
- "slogan_marquee_pointer_precision": "Pointer Speed",
- "slogan_marquee_button_shortcuts": "Button Actions",
- "nav_menu": "Menu",
- "slogan_rich": "Tune {#marquee}{/marquee}\n{#gradient}Just Right.{/gradient}",
- "feature_profiles_title": "Profiles That\n{#strong}Keep Up.{/strong}",
- "feature_profiles_description": "Different device. Different app. Different display. LinearMouse keeps every control exactly where it belongs.",
- "feature_scrolling_title": "{#strong}Scrolling{/strong}\nYour Way.",
- "feature_scrolling_description": "Keep natural scrolling on your trackpad, reverse it on your mouse, and tune every direction until it feels effortless.",
- "feature_pointer_title": "Pointer Control,\n{#strong}Dialed In.{/strong}",
- "feature_pointer_description": "Fine-tune acceleration and speed, snap back to system defaults, or turn acceleration off completely for steady, predictable precision.",
- "feature_buttons_title": "Buttons That\n{#strong}Do More.{/strong}",
- "feature_buttons_description": "Remap buttons and scroll actions to shortcuts, media controls, Mission Control, and gesture-driven workflows that keep you moving."
-}
diff --git a/messages/es-ES.json b/messages/es-ES.json
deleted file mode 100644
index ee3df87..0000000
--- a/messages/es-ES.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Foro",
- "nav_language": "Idioma",
- "footer_help_translate": "Ayudar a traducir",
- "footer_privacy_policy": "Política de privacidad",
- "cookie_description": "Esta página web usa cookies que mejoran la experiencia del usuario.",
- "ok": "Aceptar",
- "title": "LinearMouse | La utilidad de ratón y trackpad para Mac.",
- "description": "Personaliza la dirección de desplazamiento del ratón y del trackpad, la aceleración y velocidad del cursor, etc...",
- "install_download": "Descargar",
- "install_install_via_homebrew": "Instalar mediante Homebrew",
- "install_copied": "Copiado",
- "nav_theme": "Tema",
- "theme_system": "Sistema",
- "theme_light": "Claro",
- "theme_dark": "Oscuro",
- "slogan_marquee_mouse_and_trackpad": "Ratón y trackpad",
- "slogan_marquee_per_app_profiles": "Perfiles por app",
- "slogan_marquee_reverse_scrolling": "Desplazamiento",
- "slogan_marquee_pointer_precision": "Velocidad del puntero",
- "slogan_marquee_button_shortcuts": "Acciones de botones",
- "nav_menu": "Menú",
- "slogan_rich": "Ajusta {#marquee}{/marquee}\n{#gradient}Justo a tu gusto.{/gradient}",
- "feature_profiles_title": "Perfiles Que\n{#strong}Siguen Tu Ritmo.{/strong}",
- "feature_profiles_description": "Un dispositivo distinto. Una app distinta. Una pantalla distinta. LinearMouse mantiene cada control justo donde debe estar.",
- "feature_scrolling_title": "{#strong}Desplazamiento{/strong}\nA Tu Manera.",
- "feature_scrolling_description": "Mantén el desplazamiento natural en el trackpad, inviértelo en el ratón y ajusta cada dirección hasta que todo salga solo.",
- "feature_pointer_title": "Control Del Puntero,\n{#strong}Bien Ajustado.{/strong}",
- "feature_pointer_description": "Ajusta con precisión la aceleración y la velocidad, vuelve a los valores del sistema cuando quieras o desactiva por completo la aceleración para lograr una precisión estable y predecible.",
- "feature_buttons_title": "Botones Que\n{#strong}Hacen Más.{/strong}",
- "feature_buttons_description": "Reasigna botones y acciones de desplazamiento a atajos, controles multimedia, Mission Control y flujos basados en gestos que te mantienen en movimiento."
-}
diff --git a/messages/fi-FI.json b/messages/fi-FI.json
deleted file mode 100644
index ba307db..0000000
--- a/messages/fi-FI.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Keskustelut",
- "nav_language": "Kieli",
- "footer_help_translate": "Auta kääntämään",
- "footer_privacy_policy": "Tietosuojakäytäntö",
- "cookie_description": "Tämä sivusto käyttää evästeitä käyttökokemuksen parantamiseksi.",
- "ok": "OK",
- "title": "LinearMouse | Hiiren ja ohjauslevyn työkalu Macille.",
- "description": "Mukauta hiiren ja ohjauslevyn vierityssuuntaa, osoittimen kiihtyvyyttä, osoittimen nopeutta ja paljon muuta...",
- "install_download": "Lataa",
- "install_install_via_homebrew": "Asenna Homebrew'lla",
- "install_copied": "Kopioitu",
- "nav_theme": "Teema",
- "theme_system": "Järjestelmä",
- "theme_light": "Vaalea",
- "theme_dark": "Tumma",
- "slogan_marquee_mouse_and_trackpad": "Hiiri ja ohjauslevy",
- "slogan_marquee_per_app_profiles": "Profiilit sovelluksittain",
- "slogan_marquee_reverse_scrolling": "Vieritys",
- "slogan_marquee_pointer_precision": "Osoittimen nopeus",
- "slogan_marquee_button_shortcuts": "Painiketoiminnot",
- "nav_menu": "Valikko",
- "slogan_rich": "Säädä {#marquee}{/marquee}\n{#gradient}Juuri sopivaksi.{/gradient}",
- "feature_profiles_title": "Profiilit, Jotka\n{#strong}Pysyvät Mukanasi.{/strong}",
- "feature_profiles_description": "Eri laite. Eri sovellus. Eri näyttö. LinearMouse pitää jokaisen hallinnan juuri oikeassa paikassa.",
- "feature_scrolling_title": "{#strong}Vieritys{/strong}\nOmalla Tavallasi.",
- "feature_scrolling_description": "Pidä luonnollinen vieritys ohjauslevyllä, käännä se hiirellä toisin päin ja säädä joka suuntaa, kunnes kaikki tuntuu vaivattomalta.",
- "feature_pointer_title": "Osoittimen Hallinta,\n{#strong}Kohdalleen Säädetty.{/strong}",
- "feature_pointer_description": "Hienosäädä kiihtyvyyttä ja nopeutta, palaa järjestelmän oletuksiin milloin tahansa tai poista kiihtyvyys kokonaan saadaksesi vakaata ja ennakoitavaa tarkkuutta.",
- "feature_buttons_title": "Painikkeet, Jotka\n{#strong}Tekevät Enemmän.{/strong}",
- "feature_buttons_description": "Määritä painikkeet ja vieritystoiminnot uudelleen pikanäppäimiin, medianhallintaan, Mission Controliin ja eleohjattuihin työnkulkuihin, jotka pitävät sinut liikkeessä."
-}
diff --git a/messages/fr-FR.json b/messages/fr-FR.json
deleted file mode 100644
index f8aeb7f..0000000
--- a/messages/fr-FR.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Discussions",
- "nav_language": "Langue",
- "footer_help_translate": "Contribuer à la traduction",
- "footer_privacy_policy": "Politique de confidentialité",
- "cookie_description": "Ce site web utilise des cookies pour améliorer l'expérience utilisateur.",
- "ok": "OK",
- "title": "LinearMouse | L'utilitaire de souris et de pavé tactile pour Mac.",
- "description": "Personnalisez le sens de défilement de votre souris et de votre pavé tactile, l'accélération du pointeur, sa vitesse et bien plus...",
- "install_download": "Télécharger",
- "install_install_via_homebrew": "Installer avec Homebrew",
- "install_copied": "Copié",
- "nav_theme": "Thème",
- "theme_system": "Système",
- "theme_light": "Clair",
- "theme_dark": "Sombre",
- "slogan_marquee_mouse_and_trackpad": "Souris et pavé tactile",
- "slogan_marquee_per_app_profiles": "Profils par application",
- "slogan_marquee_reverse_scrolling": "Défilement",
- "slogan_marquee_pointer_precision": "Vitesse du pointeur",
- "slogan_marquee_button_shortcuts": "Actions des boutons",
- "nav_menu": "Menu",
- "slogan_rich": "Réglez {#marquee}{/marquee}\n{#gradient}Juste comme il faut.{/gradient}",
- "feature_profiles_title": "Des Profils Qui\n{#strong}Suivent Le Rythme.{/strong}",
- "feature_profiles_description": "Un autre appareil. Une autre app. Un autre écran. LinearMouse garde chaque contrôle exactement là où il doit être.",
- "feature_scrolling_title": "{#strong}Défilement{/strong}\nÀ Votre Façon.",
- "feature_scrolling_description": "Gardez le défilement naturel sur votre pavé tactile, inversez-le sur votre souris et ajustez chaque direction jusqu'à ce que tout devienne fluide.",
- "feature_pointer_title": "Contrôle Du Pointeur,\n{#strong}Parfaitement Réglé.{/strong}",
- "feature_pointer_description": "Affinez l'accélération et la vitesse, revenez aux réglages système quand vous le souhaitez ou désactivez totalement l'accélération pour une précision stable et prévisible.",
- "feature_buttons_title": "Des Boutons Qui\n{#strong}En Font Plus.{/strong}",
- "feature_buttons_description": "Réaffectez boutons et actions de défilement à des raccourcis, aux commandes multimédias, à Mission Control et à des flux pilotés par gestes qui vous gardent dans l'élan."
-}
diff --git a/messages/he-IL.json b/messages/he-IL.json
deleted file mode 100644
index dbb1bb6..0000000
--- a/messages/he-IL.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "גיטהאב",
- "nav_discussions": "דיונים",
- "nav_language": "שפה",
- "footer_help_translate": "עזרו לתרגם",
- "footer_privacy_policy": "מדיניות פרטיות",
- "cookie_description": "האתר הזה משתמש בעוגיות על מנת לשפר את חווית המשתמש.",
- "ok": "אישור",
- "title": "LinearMouse | הכלי לעכבר ולמשטח המגע ב-Mac.",
- "description": "התאימו אישית את כיוון הגלילה של העכבר ומשטח המגע, את תאוצת הסמן, את מהירותו ועוד.",
- "install_download": "הורדה",
- "install_install_via_homebrew": "התקנה דרך Homebrew",
- "install_copied": "הועתק",
- "nav_theme": "ערכת נושא",
- "theme_system": "מערכת",
- "theme_light": "בהיר",
- "theme_dark": "כהה",
- "slogan_marquee_mouse_and_trackpad": "עכבר ומשטח מגע",
- "slogan_marquee_per_app_profiles": "פרופילים לפי אפליקציה",
- "slogan_marquee_reverse_scrolling": "גלילה",
- "slogan_marquee_pointer_precision": "מהירות הסמן",
- "slogan_marquee_button_shortcuts": "פעולות הכפתורים",
- "nav_menu": "תפריט",
- "slogan_rich": "כווננו את {#marquee}{/marquee}\n{#gradient}בדיוק כמו שצריך.{/gradient}",
- "feature_profiles_title": "פרופילים ש\n{#strong}עומדים בקצב.{/strong}",
- "feature_profiles_description": "מכשיר אחר. אפליקציה אחרת. מסך אחר. LinearMouse שומר כל שליטה בדיוק במקום שבו היא צריכה להיות.",
- "feature_scrolling_title": "{#strong}גלילה{/strong}\nבדרך שלכם.",
- "feature_scrolling_description": "השאירו גלילה טבעית במשטח המגע, הפכו אותה בעכבר, וכוונו כל כיוון עד שהכול מרגיש טבעי לגמרי.",
- "feature_pointer_title": "שליטה בסמן,\n{#strong}מכוונת בדיוק.{/strong}",
- "feature_pointer_description": "כוונו בעדינות את ההאצה והמהירות, חזרו לברירות המחדל של המערכת בכל רגע, או כבו את ההאצה לגמרי לדיוק יציב וצפוי.",
- "feature_buttons_title": "כפתורים שעושים\n{#strong}יותר.{/strong}",
- "feature_buttons_description": "מפו מחדש כפתורים ופעולות גלילה לקיצורי דרך, בקרות מדיה, Mission Control וזרימות עבודה מבוססות מחוות ששומרות אתכם בתנועה."
-}
diff --git a/messages/hu-HU.json b/messages/hu-HU.json
deleted file mode 100644
index b61759e..0000000
--- a/messages/hu-HU.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Beszélgetések",
- "nav_language": "Nyelv",
- "footer_help_translate": "Segíts a fordításban",
- "footer_privacy_policy": "Adatvédelmi szabályzat",
- "cookie_description": "Ez a weboldal sütiket használ a felhasználói élmény javítása érdekében.",
- "ok": "Rendben",
- "title": "LinearMouse | Az egér és a trackpad segédprogramja Machez.",
- "description": "Szabd testre az egér és a trackpad görgetési irányát, mutatógyorsulását, mutatósebességét és még sok mást...",
- "install_download": "Letöltés",
- "install_install_via_homebrew": "Telepítés Homebrew-val",
- "install_copied": "Másolva",
- "nav_theme": "Téma",
- "theme_system": "Rendszer",
- "theme_light": "Világos",
- "theme_dark": "Sötét",
- "slogan_marquee_mouse_and_trackpad": "Egér és trackpad",
- "slogan_marquee_per_app_profiles": "Profilok alkalmazásonként",
- "slogan_marquee_reverse_scrolling": "Görgetés",
- "slogan_marquee_pointer_precision": "Mutatósebesség",
- "slogan_marquee_button_shortcuts": "Gombműveletek",
- "nav_menu": "Menü",
- "slogan_rich": "Hangolj {#marquee}{/marquee}\n{#gradient}Pont jóra.{/gradient}",
- "feature_profiles_title": "Profilok, Amik\n{#strong}Tartják A Lépést.{/strong}",
- "feature_profiles_description": "Másik eszköz. Másik alkalmazás. Másik kijelző. A LinearMouse minden vezérlést pontosan ott tart, ahová való.",
- "feature_scrolling_title": "{#strong}Görgetés{/strong}\nA Saját Módodon.",
- "feature_scrolling_description": "Tartsd meg a természetes görgetést a trackpaden, fordítsd meg az egéren, és hangolj minden irányt addig, amíg teljesen magától értetődő nem lesz.",
- "feature_pointer_title": "Mutatóvezérlés,\n{#strong}Finomhangolva.{/strong}",
- "feature_pointer_description": "Finoman állítsd a gyorsítást és a sebességet, ugorj vissza a rendszer alapértékeihez, vagy kapcsold ki teljesen a gyorsítást a stabil, kiszámítható pontosságért.",
- "feature_buttons_title": "Gombok, Amik\n{#strong}Többre Képesek.{/strong}",
- "feature_buttons_description": "Rendeld át a gombokat és görgetési műveleteket gyorsbillentyűkhöz, médiavezérléshez, Mission Controlhoz és gesztusvezérelt munkafolyamatokhoz, hogy megszakítás nélkül haladhass."
-}
diff --git a/messages/it-IT.json b/messages/it-IT.json
deleted file mode 100644
index f0d4303..0000000
--- a/messages/it-IT.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Discussioni",
- "nav_language": "Lingua",
- "footer_help_translate": "Contribuisci alla traduzione",
- "footer_privacy_policy": "Politica sulla Privacy",
- "cookie_description": "Questo sito web utilizza i cookie per migliorare l'esperienza dell'utente.",
- "ok": "OK",
- "title": "LinearMouse | L'utilità per mouse e trackpad su Mac.",
- "description": "Personalizza la direzione di scorrimento del mouse e del trackpad, l'accelerazione del puntatore, la velocità del puntatore e così via...",
- "install_download": "Scarica",
- "install_install_via_homebrew": "Installa tramite Homebrew",
- "install_copied": "Copiato",
- "nav_theme": "Tema",
- "theme_system": "Sistema",
- "theme_light": "Chiaro",
- "theme_dark": "Scuro",
- "slogan_marquee_mouse_and_trackpad": "Mouse e trackpad",
- "slogan_marquee_per_app_profiles": "Profili per app",
- "slogan_marquee_reverse_scrolling": "Scorrimento",
- "slogan_marquee_pointer_precision": "Velocità del puntatore",
- "slogan_marquee_button_shortcuts": "Azioni dei pulsanti",
- "nav_menu": "Menu",
- "slogan_rich": "Regola {#marquee}{/marquee}\n{#gradient}Come piace a te.{/gradient}",
- "feature_profiles_title": "Profili Che\n{#strong}Tengono Il Passo.{/strong}",
- "feature_profiles_description": "Dispositivo diverso. App diversa. Display diverso. LinearMouse mantiene ogni controllo esattamente dove deve stare.",
- "feature_scrolling_title": "{#strong}Scorrimento{/strong}\nA Modo Tuo.",
- "feature_scrolling_description": "Mantieni lo scorrimento naturale sul trackpad, inverti quello del mouse e regola ogni direzione finché tutto non diventa naturale.",
- "feature_pointer_title": "Controllo Del Puntatore,\n{#strong}Perfettamente Regolato.{/strong}",
- "feature_pointer_description": "Regola con precisione accelerazione e velocità, torna ai valori di sistema quando vuoi o disattiva del tutto l'accelerazione per una precisione stabile e prevedibile.",
- "feature_buttons_title": "Pulsanti Che\n{#strong}Fanno Di Più.{/strong}",
- "feature_buttons_description": "Riassegna pulsanti e azioni della rotella a scorciatoie, controlli multimediali, Mission Control e flussi guidati da gesture che ti tengono in movimento."
-}
diff --git a/messages/ja-JP.json b/messages/ja-JP.json
deleted file mode 100644
index c18ca4a..0000000
--- a/messages/ja-JP.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "ディスカッション",
- "nav_language": "言語",
- "footer_help_translate": "翻訳に協力する",
- "footer_privacy_policy": "プライバシーポリシー",
- "cookie_description": "このサイトでは、ユーザー体験を向上させるために Cookie を使用しています。",
- "ok": "OK",
- "title": "LinearMouse | Mac向けのマウスとトラックパッドユーティリティ。",
- "description": "マウスとトラックパッドのスクロール方向、ポインタ加速度、ポインタ速度等をカスタマイズ。",
- "install_download": "ダウンロード",
- "install_install_via_homebrew": "Homebrew でインストール",
- "install_copied": "コピーしました",
- "nav_theme": "テーマ",
- "theme_system": "システム",
- "theme_light": "ライト",
- "theme_dark": "ダーク",
- "slogan_marquee_mouse_and_trackpad": "マウスとトラックパッド",
- "slogan_marquee_per_app_profiles": "アプリ別プロファイル",
- "slogan_marquee_reverse_scrolling": "スクロール",
- "slogan_marquee_pointer_precision": "ポインター速度",
- "slogan_marquee_button_shortcuts": "ボタン操作",
- "nav_menu": "メニュー",
- "slogan_rich": "{#marquee}{/marquee}を\n{#gradient}しっくりくるまで{#hang}。{/hang}{/gradient}",
- "feature_profiles_title": "切り替わる設定で\n{#strong}いつでも快適{#hang}。{/hang}{/strong}",
- "feature_profiles_description": "デバイスが変わっても、アプリが変わっても、ディスプレイが変わっても、LinearMouse が操作感をあるべき場所にきちんと保ちます。",
- "feature_scrolling_title": "{#strong}スクロール{/strong}\n思いどおりに{#hang}。{/hang}",
- "feature_scrolling_description": "トラックパッドではナチュラルスクロールのまま、マウスでは反転し、縦横の動きを自分の感覚に合うまで追い込めます。",
- "feature_pointer_title": "ポインター操作を\n{#strong}緻密に調整{#hang}。{/hang}{/strong}",
- "feature_pointer_description": "加速度と速度を細かく調整し、いつでもシステム標準に戻せます。必要なら加速度を完全に切って、安定した予測しやすい精度を得られます。",
- "feature_buttons_title": "ボタンを\n{#strong}もっと自在に{#hang}。{/hang}{/strong}",
- "feature_buttons_description": "ボタンやスクロール操作をショートカット、メディア操作、Mission Control、ジェスチャー主体のワークフローへ再割り当てし、流れを止めずに操作できます。"
-}
diff --git a/messages/ko-KR.json b/messages/ko-KR.json
deleted file mode 100644
index a6ce40c..0000000
--- a/messages/ko-KR.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "토론",
- "nav_language": "언어",
- "footer_help_translate": "번역을 도와주세요",
- "footer_privacy_policy": "개인정보 처리방침",
- "cookie_description": "이 웹사이트는 이용 경험 개선을 위해 쿠키를 사용합니다.",
- "ok": "확인",
- "title": "LinearMouse | Mac을 위한 마우스 및 트랙패드 유틸리티.",
- "description": "마우스 및 트랙패드의 스크롤 방향, 포인터 가속, 포인터 속도 등을 자유롭게 조절하세요.",
- "install_download": "다운로드",
- "install_install_via_homebrew": "Homebrew로 설치하기",
- "install_copied": "복사됨",
- "nav_theme": "테마",
- "theme_system": "시스템",
- "theme_light": "라이트",
- "theme_dark": "다크",
- "slogan_marquee_mouse_and_trackpad": "마우스와 트랙패드",
- "slogan_marquee_per_app_profiles": "앱별 프로필",
- "slogan_marquee_reverse_scrolling": "스크롤",
- "slogan_marquee_pointer_precision": "포인터 속도",
- "slogan_marquee_button_shortcuts": "버튼 동작",
- "nav_menu": "메뉴",
- "slogan_rich": "{#marquee}{/marquee}\n{#gradient}손에 딱 맞게{#hang}.{/hang}{/gradient}",
- "feature_profiles_title": "상황에 맞게\n{#strong}따라오는 프로필{#hang}.{/hang}{/strong}",
- "feature_profiles_description": "기기가 달라도, 앱이 달라도, 디스플레이가 달라도 LinearMouse가 모든 조작을 딱 맞는 자리에 유지합니다.",
- "feature_scrolling_title": "{#strong}스크롤{/strong}\n원하는 방식대로{#hang}.{/hang}",
- "feature_scrolling_description": "트랙패드에서는 자연스럽게, 마우스에서는 반대로 설정하고, 모든 방향의 움직임을 손에 익을 때까지 세밀하게 다듬을 수 있습니다.",
- "feature_pointer_title": "포인터 제어{#hang},{/hang}\n{#strong}정밀하게 맞춤{#hang}.{/hang}{/strong}",
- "feature_pointer_description": "가속과 속도를 세밀하게 조정하고, 언제든 시스템 기본값으로 돌아가거나, 가속을 완전히 꺼서 안정적이고 예측 가능한 정밀도를 얻을 수 있습니다.",
- "feature_buttons_title": "버튼으로\n{#strong}더 많은 작업을{#hang}.{/hang}{/strong}",
- "feature_buttons_description": "버튼과 스크롤 동작을 단축키, 미디어 제어, Mission Control, 제스처 기반 워크플로로 다시 매핑해 흐름을 끊지 않고 작업할 수 있습니다."
-}
diff --git a/messages/my-MM.json b/messages/my-MM.json
deleted file mode 100644
index 785c945..0000000
--- a/messages/my-MM.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "ဆွေးနွေးချက်များ",
- "nav_language": "ဘာသာစကား",
- "footer_help_translate": "ဘာသာပြန်ရာတွင် ကူညီပါ",
- "footer_privacy_policy": "ကိုယ်ရေးအချက်အလက် မူဝါဒ",
- "cookie_description": "ဤဝဘ်ဆိုက်သည် အသုံးပြုသူအတွေ့အကြုံကို မြှင့်တင်ရန် cookies များကို အသုံးပြုပါသည်။",
- "ok": "အိုကေ",
- "title": "LinearMouse | Mac အတွက် မောက်စ်နှင့် trackpad အသုံးချကိရိယာ။",
- "description": "မောက်စ်နှင့် trackpad ၏ လှိမ့်ရာဦးတည်ချက်၊ pointer acceleration၊ pointer speed နှင့် အခြားအရာများကို စိတ်ကြိုက်ပြင်ဆင်ပါ...",
- "install_download": "ဒေါင်းလုဒ်",
- "install_install_via_homebrew": "Homebrew ဖြင့် ထည့်သွင်းရန်",
- "install_copied": "ကူးပြီးပါပြီ",
- "nav_theme": "အပြင်အဆင်",
- "theme_system": "စနစ်",
- "theme_light": "အလင်း",
- "theme_dark": "အမှောင်",
- "slogan_marquee_mouse_and_trackpad": "မောက်စ်နှင့် ထရက်ပက်",
- "slogan_marquee_per_app_profiles": "အက်ပ်အလိုက် ပရိုဖိုင်",
- "slogan_marquee_reverse_scrolling": "Scroll",
- "slogan_marquee_pointer_precision": "Pointer အမြန်နှုန်း",
- "slogan_marquee_button_shortcuts": "ခလုတ်လုပ်ဆောင်ချက်များ",
- "nav_menu": "မီနူး",
- "slogan_rich": "{#marquee}{/marquee} ကို\n{#gradient}အံဝင်ခွင်ကျဖြစ်အောင်။{/gradient}",
- "feature_profiles_title": "လိုက်လျောညီထွေဖြစ်တဲ့\n{#strong}ပရိုဖိုင်များ{/strong}",
- "feature_profiles_description": "စက်မတူ၊ အက်ပ်မတူ၊ မျက်နှာပြင်မတူ။ LinearMouse က control တိုင်းကို ရှိသင့်တဲ့နေရာမှာပဲ တိတိကျကျ ထားပေးပါသည်။",
- "feature_scrolling_title": "{#strong}Scroll{/strong}\nသင့်စိတ်ကြိုက်။",
- "feature_scrolling_description": "Trackpad မှာ natural scrolling ကို ထားထားပြီး mouse မှာ ပြောင်းပြန်လုပ်ကာ ဒေါင်လိုက်နဲ့ အလျားလိုက် လှုပ်ရှားမှုကို သင့်လက်နဲ့အဆင်ပြေသလို ညှိနိုင်ပါသည်။",
- "feature_pointer_title": "Pointer ထိန်းချုပ်မှု,\n{#strong}တိတိကျကျ ချိန်ညှိ။{/strong}",
- "feature_pointer_description": "Acceleration နဲ့ speed ကို အသေးစိတ်ချိန်ညှိနိုင်ပြီး system default ကို ချက်ချင်းပြန်သုံးနိုင်ပါသည်။ ပိုတည်ငြိမ်ပြီး ခန့်မှန်းရလွယ်တဲ့ တိကျမှုအတွက် acceleration ကို လုံးဝပိတ်ထားနိုင်ပါသည်။",
- "feature_buttons_title": "ပိုလုပ်ပေးနိုင်တဲ့\n{#strong}ခလုတ်များ{/strong}",
- "feature_buttons_description": "ခလုတ်များနှင့် scroll လုပ်ဆောင်ချက်များကို shortcut များ၊ media control များ၊ Mission Control နှင့် gesture အခြေပြု workflow များသို့ ပြန်လည်သတ်မှတ်ပြီး သင့်အလုပ်လုပ်နှုန်းအတိုင်း လိုက်ပါစေပါသည်။"
-}
diff --git a/messages/nb-NO.json b/messages/nb-NO.json
deleted file mode 100644
index 57e91c8..0000000
--- a/messages/nb-NO.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Diskusjoner",
- "nav_language": "Språk",
- "footer_help_translate": "Hjelp til med oversettelsen",
- "footer_privacy_policy": "Personvernerklæring",
- "cookie_description": "Dette nettstedet bruker informasjonskapsler for å forbedre brukeropplevelsen.",
- "ok": "OK",
- "title": "LinearMouse | Verktøyet for mus og styreflate til Mac.",
- "description": "Tilpass rulleretning, pekerakselerasjon, pekerhastighet og mer for mus og styreflate...",
- "install_download": "Last ned",
- "install_install_via_homebrew": "Installer via Homebrew",
- "install_copied": "Kopiert",
- "nav_theme": "Tema",
- "theme_system": "System",
- "theme_light": "Lys",
- "theme_dark": "Mørk",
- "slogan_marquee_mouse_and_trackpad": "Mus og styreflate",
- "slogan_marquee_per_app_profiles": "Profiler per app",
- "slogan_marquee_reverse_scrolling": "Rulling",
- "slogan_marquee_pointer_precision": "Pekerhastighet",
- "slogan_marquee_button_shortcuts": "Knapphandlinger",
- "nav_menu": "Meny",
- "slogan_rich": "Juster {#marquee}{/marquee}\n{#gradient}Akkurat passe.{/gradient}",
- "feature_profiles_title": "Profiler Som\n{#strong}Holder Følge.{/strong}",
- "feature_profiles_description": "Ny enhet. Ny app. Ny skjerm. LinearMouse holder hver kontroll akkurat der den skal være.",
- "feature_scrolling_title": "{#strong}Rulling{/strong}\nPå Din Måte.",
- "feature_scrolling_description": "Behold naturlig rulling på styreflaten, snu den på musen, og finjuster hver retning til alt føles uanstrengt.",
- "feature_pointer_title": "Pekerkontroll,\n{#strong}Finjustert.{/strong}",
- "feature_pointer_description": "Finjuster akselerasjon og hastighet, gå tilbake til systemstandarder når som helst, eller slå akselerasjon helt av for stabil og forutsigbar presisjon.",
- "feature_buttons_title": "Knapper Som\n{#strong}Gjør Mer.{/strong}",
- "feature_buttons_description": "Tilordne knapper og rullehandlinger til snarveier, mediekontroller, Mission Control og geststyrte arbeidsflyter som holder deg i flyt."
-}
diff --git a/messages/nl-NL.json b/messages/nl-NL.json
deleted file mode 100644
index 6de8ed2..0000000
--- a/messages/nl-NL.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Discussies",
- "nav_language": "Taal",
- "footer_help_translate": "Help met vertalen",
- "footer_privacy_policy": "Privacybeleid",
- "cookie_description": "Deze website maakt gebruik van cookies om de gebruikerservaring te verbeteren.",
- "ok": "OK",
- "title": "LinearMouse | Het hulpprogramma voor muis en trackpad op de Mac.",
- "description": "Pas de scrolrichting, aanwijzerversnelling, aanwijzersnelheid en meer aan voor je muis en trackpad.",
- "install_download": "Download",
- "install_install_via_homebrew": "Installeren via Homebrew",
- "install_copied": "Gekopieerd",
- "nav_theme": "Thema",
- "theme_system": "Systeem",
- "theme_light": "Licht",
- "theme_dark": "Donker",
- "slogan_marquee_mouse_and_trackpad": "Muis en trackpad",
- "slogan_marquee_per_app_profiles": "Profielen per app",
- "slogan_marquee_reverse_scrolling": "Scrollen",
- "slogan_marquee_pointer_precision": "Aanwijzersnelheid",
- "slogan_marquee_button_shortcuts": "Knopacties",
- "nav_menu": "Menu",
- "slogan_rich": "Stel {#marquee}{/marquee} af\n{#gradient}Precies goed.{/gradient}",
- "feature_profiles_title": "Profielen Die\n{#strong}Bijblijven.{/strong}",
- "feature_profiles_description": "Ander apparaat. Andere app. Ander scherm. LinearMouse houdt elke bediening precies waar die hoort.",
- "feature_scrolling_title": "{#strong}Scrollen{/strong}\nOp Jouw Manier.",
- "feature_scrolling_description": "Behoud natuurlijk scrollen op je trackpad, draai het om op je muis en stem elke richting af totdat alles vanzelf voelt.",
- "feature_pointer_title": "Pointercontrole,\n{#strong}Perfect Afgesteld.{/strong}",
- "feature_pointer_description": "Stel acceleratie en snelheid nauwkeurig af, spring terug naar de systeeminstellingen wanneer je wilt of schakel acceleratie helemaal uit voor stabiele, voorspelbare precisie.",
- "feature_buttons_title": "Knoppen Die\n{#strong}Meer Doen.{/strong}",
- "feature_buttons_description": "Wijs knoppen en scrollacties opnieuw toe aan sneltoetsen, mediabediening, Mission Control en gebaren-gestuurde workflows die je in beweging houden."
-}
diff --git a/messages/no-NO.json b/messages/no-NO.json
deleted file mode 100644
index 57e91c8..0000000
--- a/messages/no-NO.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Diskusjoner",
- "nav_language": "Språk",
- "footer_help_translate": "Hjelp til med oversettelsen",
- "footer_privacy_policy": "Personvernerklæring",
- "cookie_description": "Dette nettstedet bruker informasjonskapsler for å forbedre brukeropplevelsen.",
- "ok": "OK",
- "title": "LinearMouse | Verktøyet for mus og styreflate til Mac.",
- "description": "Tilpass rulleretning, pekerakselerasjon, pekerhastighet og mer for mus og styreflate...",
- "install_download": "Last ned",
- "install_install_via_homebrew": "Installer via Homebrew",
- "install_copied": "Kopiert",
- "nav_theme": "Tema",
- "theme_system": "System",
- "theme_light": "Lys",
- "theme_dark": "Mørk",
- "slogan_marquee_mouse_and_trackpad": "Mus og styreflate",
- "slogan_marquee_per_app_profiles": "Profiler per app",
- "slogan_marquee_reverse_scrolling": "Rulling",
- "slogan_marquee_pointer_precision": "Pekerhastighet",
- "slogan_marquee_button_shortcuts": "Knapphandlinger",
- "nav_menu": "Meny",
- "slogan_rich": "Juster {#marquee}{/marquee}\n{#gradient}Akkurat passe.{/gradient}",
- "feature_profiles_title": "Profiler Som\n{#strong}Holder Følge.{/strong}",
- "feature_profiles_description": "Ny enhet. Ny app. Ny skjerm. LinearMouse holder hver kontroll akkurat der den skal være.",
- "feature_scrolling_title": "{#strong}Rulling{/strong}\nPå Din Måte.",
- "feature_scrolling_description": "Behold naturlig rulling på styreflaten, snu den på musen, og finjuster hver retning til alt føles uanstrengt.",
- "feature_pointer_title": "Pekerkontroll,\n{#strong}Finjustert.{/strong}",
- "feature_pointer_description": "Finjuster akselerasjon og hastighet, gå tilbake til systemstandarder når som helst, eller slå akselerasjon helt av for stabil og forutsigbar presisjon.",
- "feature_buttons_title": "Knapper Som\n{#strong}Gjør Mer.{/strong}",
- "feature_buttons_description": "Tilordne knapper og rullehandlinger til snarveier, mediekontroller, Mission Control og geststyrte arbeidsflyter som holder deg i flyt."
-}
diff --git a/messages/pl-PL.json b/messages/pl-PL.json
deleted file mode 100644
index bd3cf2b..0000000
--- a/messages/pl-PL.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Dyskusje",
- "nav_language": "Język",
- "footer_help_translate": "Pomóż w tłumaczeniu",
- "footer_privacy_policy": "Polityka prywatności",
- "cookie_description": "Ta witryna wykorzystuje pliki cookie w celu poprawy doświadczenia użytkownika.",
- "ok": "OK",
- "title": "LinearMouse | Konfigurator myszy i gładzika dla Maca.",
- "description": "Dostosuj właściwości myszy i gładzika, takie jak kierunek przewijania, przyspieszenie wskaźnika, szybkość wskaźnika i więcej...",
- "install_download": "Pobierz",
- "install_install_via_homebrew": "Zainstaluj przez Homebrew",
- "install_copied": "Skopiowano",
- "nav_theme": "Motyw",
- "theme_system": "System",
- "theme_light": "Jasny",
- "theme_dark": "Ciemny",
- "slogan_marquee_mouse_and_trackpad": "Mysz i trackpad",
- "slogan_marquee_per_app_profiles": "Profile dla aplikacji",
- "slogan_marquee_reverse_scrolling": "Przewijanie",
- "slogan_marquee_pointer_precision": "Szybkość kursora",
- "slogan_marquee_button_shortcuts": "Akcje przycisków",
- "nav_menu": "Menu",
- "slogan_rich": "Dostrój {#marquee}{/marquee}\n{#gradient}Tak jak trzeba.{/gradient}",
- "feature_profiles_title": "Profile, Które\n{#strong}Nadążają Za Tobą.{/strong}",
- "feature_profiles_description": "Inne urządzenie. Inna aplikacja. Inny ekran. LinearMouse utrzymuje każde sterowanie dokładnie tam, gdzie powinno być.",
- "feature_scrolling_title": "{#strong}Przewijanie{/strong}\nPo Twojemu.",
- "feature_scrolling_description": "Zachowaj naturalne przewijanie na trackpadzie, odwróć je na myszy i dopracuj każdy kierunek, aż wszystko będzie działać bez wysiłku.",
- "feature_pointer_title": "Kontrola Kursora,\n{#strong}Dopracowana.{/strong}",
- "feature_pointer_description": "Precyzyjnie ustaw akcelerację i szybkość, wróć do ustawień systemowych w dowolnej chwili albo całkowicie wyłącz akcelerację, by uzyskać stabilną i przewidywalną precyzję.",
- "feature_buttons_title": "Przyciski, Które\n{#strong}Potrafią Więcej.{/strong}",
- "feature_buttons_description": "Przypisz przyciski i akcje przewijania do skrótów, sterowania multimediami, Mission Control i opartych na gestach przepływów pracy, które nie wybijają Cię z rytmu."
-}
diff --git a/messages/pt-BR.json b/messages/pt-BR.json
deleted file mode 100644
index 60a4fc4..0000000
--- a/messages/pt-BR.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Discussões",
- "nav_language": "Idioma",
- "footer_help_translate": "Ajude a traduzir",
- "footer_privacy_policy": "Política de Privacidade",
- "cookie_description": "Este site utiliza cookies para melhorar a experiência do usuário.",
- "ok": "OK",
- "title": "LinearMouse | O utilitário de mouse e trackpad para Mac.",
- "description": "Personalize a direção da rolagem do mouse e do trackpad, aceleração do ponteiro e velocidade do ponteiro e assim por diante...",
- "install_download": "Baixar",
- "install_install_via_homebrew": "Instalar via Homebrew",
- "install_copied": "Copiado",
- "nav_theme": "Tema",
- "theme_system": "Sistema",
- "theme_light": "Claro",
- "theme_dark": "Escuro",
- "slogan_marquee_mouse_and_trackpad": "Mouse e trackpad",
- "slogan_marquee_per_app_profiles": "Perfis por app",
- "slogan_marquee_reverse_scrolling": "Rolagem",
- "slogan_marquee_pointer_precision": "Velocidade do ponteiro",
- "slogan_marquee_button_shortcuts": "Ações dos botões",
- "nav_menu": "Menu",
- "slogan_rich": "Ajuste {#marquee}{/marquee}\n{#gradient}No ponto certo.{/gradient}",
- "feature_profiles_title": "Perfis Que\n{#strong}Acompanham Você.{/strong}",
- "feature_profiles_description": "Outro dispositivo. Outro app. Outra tela. O LinearMouse mantém cada controle exatamente onde ele deve estar.",
- "feature_scrolling_title": "{#strong}Rolagem{/strong}\nDo Seu Jeito.",
- "feature_scrolling_description": "Mantenha a rolagem natural no trackpad, inverta no mouse e ajuste cada direção até tudo ficar natural.",
- "feature_pointer_title": "Controle Do Ponteiro,\n{#strong}No Ponto.{/strong}",
- "feature_pointer_description": "Ajuste com precisão a aceleração e a velocidade, volte aos padrões do sistema quando quiser ou desligue a aceleração por completo para ter precisão estável e previsível.",
- "feature_buttons_title": "Botões Que\n{#strong}Fazem Mais.{/strong}",
- "feature_buttons_description": "Remapeie botões e ações da rolagem para atalhos, controles de mídia, Mission Control e fluxos guiados por gestos que mantêm você no ritmo."
-}
diff --git a/messages/pt-PT.json b/messages/pt-PT.json
deleted file mode 100644
index 70a8b80..0000000
--- a/messages/pt-PT.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Discussões",
- "nav_language": "Idioma",
- "footer_help_translate": "Ajude a traduzir",
- "footer_privacy_policy": "Política de Privacidade",
- "cookie_description": "Este site utiliza cookies para melhorar a experiência do utilizador.",
- "ok": "OK",
- "title": "LinearMouse | O utilitário de rato e trackpad para Mac.",
- "description": "Personalize a direção de deslocamento, a aceleração do cursor, a velocidade do cursor e muito mais do rato e do trackpad...",
- "install_download": "Descarregar",
- "install_install_via_homebrew": "Instalar via Homebrew",
- "install_copied": "Copiado",
- "nav_theme": "Tema",
- "theme_system": "Sistema",
- "theme_light": "Claro",
- "theme_dark": "Escuro",
- "slogan_marquee_mouse_and_trackpad": "Rato e trackpad",
- "slogan_marquee_per_app_profiles": "Perfis por app",
- "slogan_marquee_reverse_scrolling": "Deslocamento",
- "slogan_marquee_pointer_precision": "Velocidade do ponteiro",
- "slogan_marquee_button_shortcuts": "Ações dos botões",
- "nav_menu": "Menu",
- "slogan_rich": "Ajuste {#marquee}{/marquee}\n{#gradient}No ponto certo.{/gradient}",
- "feature_profiles_title": "Perfis Que\n{#strong}Acompanham o Ritmo.{/strong}",
- "feature_profiles_description": "Outro dispositivo. Outra app. Outro ecrã. O LinearMouse mantém cada controlo exatamente onde deve estar.",
- "feature_scrolling_title": "{#strong}Deslocamento{/strong}\nÀ Sua Maneira.",
- "feature_scrolling_description": "Mantenha o deslocamento natural no trackpad, inverta-o no rato e ajuste cada direção até tudo parecer natural.",
- "feature_pointer_title": "Controlo Do Ponteiro,\n{#strong}No Ponto.{/strong}",
- "feature_pointer_description": "Ajuste com precisão a aceleração e a velocidade, volte aos padrões do sistema quando quiser ou desative por completo a aceleração para obter precisão estável e previsível.",
- "feature_buttons_title": "Botões Que\n{#strong}Fazem Mais.{/strong}",
- "feature_buttons_description": "Remapeie botões e ações de deslocamento para atalhos, controlos multimédia, Mission Control e fluxos guiados por gestos que o mantêm em movimento."
-}
diff --git a/messages/ro-RO.json b/messages/ro-RO.json
deleted file mode 100644
index 5e38b5d..0000000
--- a/messages/ro-RO.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Discuții",
- "nav_language": "Limbă",
- "footer_help_translate": "Ajută la traducere",
- "footer_privacy_policy": "Politica de confidențialitate",
- "cookie_description": "Acest site folosește cookie-uri pentru a îmbunătăți experiența utilizatorului.",
- "ok": "OK",
- "title": "LinearMouse | Utilitarul pentru mouse și trackpad pe Mac.",
- "description": "Personalizați direcția de derulare a mouse-ului și a trackpad-ului, accelerația și viteza indicatorului și multe altele.",
- "install_download": "Descarcă",
- "install_install_via_homebrew": "Instalați prin Homebrew",
- "install_copied": "Copiat",
- "nav_theme": "Temă",
- "theme_system": "Sistem",
- "theme_light": "Luminos",
- "theme_dark": "Întunecat",
- "slogan_marquee_mouse_and_trackpad": "Mouse și trackpad",
- "slogan_marquee_per_app_profiles": "Profile pe aplicație",
- "slogan_marquee_reverse_scrolling": "Derulare",
- "slogan_marquee_pointer_precision": "Viteza cursorului",
- "slogan_marquee_button_shortcuts": "Acțiuni ale butoanelor",
- "nav_menu": "Meniu",
- "slogan_rich": "Reglați {#marquee}{/marquee}\n{#gradient}Exact cum trebuie.{/gradient}",
- "feature_profiles_title": "Profile Care\n{#strong}Țin Pasul.{/strong}",
- "feature_profiles_description": "Alt dispozitiv. Altă aplicație. Alt ecran. LinearMouse păstrează fiecare control exact acolo unde trebuie.",
- "feature_scrolling_title": "{#strong}Derulare{/strong}\nPe Gustul Tău.",
- "feature_scrolling_description": "Păstrează derularea naturală pe trackpad, inversează-o pe mouse și reglează fiecare direcție până când totul devine firesc.",
- "feature_pointer_title": "Controlul Cursorului,\n{#strong}Reglat Fin.{/strong}",
- "feature_pointer_description": "Reglează fin accelerația și viteza, revino oricând la valorile de sistem sau oprește complet accelerația pentru o precizie stabilă și previzibilă.",
- "feature_buttons_title": "Butoane Care\n{#strong}Fac Mai Mult.{/strong}",
- "feature_buttons_description": "Remapează butoane și acțiuni de derulare către scurtături, controale media, Mission Control și fluxuri bazate pe gesturi care te țin în mișcare."
-}
diff --git a/messages/ru-RU.json b/messages/ru-RU.json
deleted file mode 100644
index 5b8ef4c..0000000
--- a/messages/ru-RU.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Обсуждения",
- "nav_language": "Язык",
- "footer_help_translate": "Помочь с переводом",
- "footer_privacy_policy": "Политика конфиденциальности",
- "cookie_description": "Этот веб-сайт использует куки-файлы для повышения удобства работы пользователя.",
- "ok": "ОК",
- "title": "LinearMouse | Утилита для мыши и трекпада для Mac.",
- "description": "Настраивайте направление прокрутки мыши и трекпада, ускорение указателя, скорость указателя и так далее...",
- "install_download": "Скачать",
- "install_install_via_homebrew": "Установить через Homebrew",
- "install_copied": "Скопировано",
- "nav_theme": "Тема",
- "theme_system": "Системная",
- "theme_light": "Светлая",
- "theme_dark": "Тёмная",
- "slogan_marquee_mouse_and_trackpad": "Мышь и трекпад",
- "slogan_marquee_per_app_profiles": "Профили по приложениям",
- "slogan_marquee_reverse_scrolling": "Прокрутка",
- "slogan_marquee_pointer_precision": "Скорость указателя",
- "slogan_marquee_button_shortcuts": "Действия кнопок",
- "nav_menu": "Меню",
- "slogan_rich": "Настройте {#marquee}{/marquee}\n{#gradient}Как надо.{/gradient}",
- "feature_profiles_title": "Профили, Которые\n{#strong}Поспевают За Вами.{/strong}",
- "feature_profiles_description": "Другое устройство. Другое приложение. Другой дисплей. LinearMouse оставляет каждое управление именно там, где ему и место.",
- "feature_scrolling_title": "{#strong}Прокрутка{/strong}\nПо-Вашему.",
- "feature_scrolling_description": "Оставьте естественную прокрутку на трекпаде, разверните её на мыши и настройте каждое направление, пока всё не начнёт работать совершенно естественно.",
- "feature_pointer_title": "Управление Указателем,\n{#strong}Точно Настроенное.{/strong}",
- "feature_pointer_description": "Тонко настройте ускорение и скорость, в любой момент вернитесь к системным значениям или полностью отключите ускорение ради стабильной и предсказуемой точности.",
- "feature_buttons_title": "Кнопки, Которые\n{#strong}Умеют Больше.{/strong}",
- "feature_buttons_description": "Переназначайте кнопки и действия прокрутки на сочетания клавиш, управление медиа, Mission Control и жестовые сценарии, которые не сбивают вас с хода."
-}
diff --git a/messages/sk-SK.json b/messages/sk-SK.json
deleted file mode 100644
index ebd2e9d..0000000
--- a/messages/sk-SK.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Diskusia",
- "nav_language": "Jazyk",
- "footer_help_translate": "Pomôcť s prekladom",
- "footer_privacy_policy": "Zásady ochrany osobných údajov",
- "cookie_description": "Táto webová stránka používa cookies na zlepšenie používateľského zážitku.",
- "ok": "OK",
- "title": "LinearMouse | Myš a trackpad pomôcka pre váš Mac.",
- "description": "Prispôsobte smer posúvania myši a trackpadu, zrýchlenie ukazovateľa, rýchlosť ukazovateľa atď...",
- "install_download": "Stiahnuť",
- "install_install_via_homebrew": "Inštalovať pomocou Homebrew",
- "install_copied": "Skopírované",
- "nav_theme": "Motív",
- "theme_system": "Systém",
- "theme_light": "Svetlý",
- "theme_dark": "Tmavý",
- "slogan_marquee_mouse_and_trackpad": "Myš a trackpad",
- "slogan_marquee_per_app_profiles": "Profily podľa aplikácie",
- "slogan_marquee_reverse_scrolling": "Rolovanie",
- "slogan_marquee_pointer_precision": "Rýchlosť ukazovateľa",
- "slogan_marquee_button_shortcuts": "Akcie tlačidiel",
- "nav_menu": "Ponuka",
- "slogan_rich": "Vylaďte {#marquee}{/marquee}\n{#gradient}Tak akurát.{/gradient}",
- "feature_profiles_title": "Profily, Ktoré\n{#strong}Držia Krok.{/strong}",
- "feature_profiles_description": "Iné zariadenie. Iná aplikácia. Iný displej. LinearMouse drží každé ovládanie presne tam, kam patrí.",
- "feature_scrolling_title": "{#strong}Rolovanie{/strong}\nPo Vašom.",
- "feature_scrolling_description": "Nechajte prirodzené rolovanie na trackpade, otočte ho na myši a dolaďte každý smer, kým všetko nebude pôsobiť úplne prirodzene.",
- "feature_pointer_title": "Ovládanie Ukazovateľa,\n{#strong}Vyladené.{/strong}",
- "feature_pointer_description": "Jemne dolaďte akceleráciu a rýchlosť, kedykoľvek sa vráťte k systémovým predvoleným hodnotám alebo akceleráciu úplne vypnite pre stabilnú a predvídateľnú presnosť.",
- "feature_buttons_title": "Tlačidlá, Ktoré\n{#strong}Dokážu Viac.{/strong}",
- "feature_buttons_description": "Namapujte tlačidlá a akcie kolieska na skratky, ovládanie médií, Mission Control a pracovné postupy založené na gestách, ktoré vás udržia v tempe."
-}
diff --git a/messages/sr-SP.json b/messages/sr-SP.json
deleted file mode 100644
index 8378ffc..0000000
--- a/messages/sr-SP.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Дискусије",
- "nav_language": "Језик",
- "footer_help_translate": "Помозите с преводом",
- "footer_privacy_policy": "Политика приватности",
- "cookie_description": "Ова веб-страница користи колачиће да побољша корисничко искуство.",
- "ok": "У реду",
- "title": "LinearMouse | Алат за миш и додирну таблу за Mac.",
- "description": "Прилагодите смер померања, убрзање показивача, брзину показивача и још много тога за миш и додирну таблу...",
- "install_download": "Преузми",
- "install_install_via_homebrew": "Инсталирај преко Homebrew-а",
- "install_copied": "Копирано",
- "nav_theme": "Тема",
- "theme_system": "Системска",
- "theme_light": "Светла",
- "theme_dark": "Тамна",
- "slogan_marquee_mouse_and_trackpad": "Миш и тачпед",
- "slogan_marquee_per_app_profiles": "Профили по апликацији",
- "slogan_marquee_reverse_scrolling": "Скроловање",
- "slogan_marquee_pointer_precision": "Брзина показивача",
- "slogan_marquee_button_shortcuts": "Радње дугмади",
- "nav_menu": "Мени",
- "slogan_rich": "Подесите {#marquee}{/marquee}\n{#gradient}Таман како треба.{/gradient}",
- "feature_profiles_title": "Профили Који\n{#strong}Прате Ритам.{/strong}",
- "feature_profiles_description": "Други уређај. Друга апликација. Други екран. LinearMouse држи сваку контролу тачно тамо где припада.",
- "feature_scrolling_title": "{#strong}Скроловање{/strong}\nПо Вашем.",
- "feature_scrolling_description": "Задржите природно скроловање на тачпеду, обрните га на мишу и подесите сваки правац док све не постане потпуно природно.",
- "feature_pointer_title": "Контрола Показивача,\n{#strong}Фино Подешена.{/strong}",
- "feature_pointer_description": "Фино подесите убрзање и брзину, вратите се на системске подразумеване вредности кад год пожелите или потпуно искључите убрзање за стабилну и предвидљиву прецизност.",
- "feature_buttons_title": "Дугмад Која\n{#strong}Могу Више.{/strong}",
- "feature_buttons_description": "Пресликајте дугмад и радње точкића на пречице, контроле медија, Mission Control и токове рада вођене покретима који вас држе у ритму."
-}
diff --git a/messages/sv-SE.json b/messages/sv-SE.json
deleted file mode 100644
index b7ba39c..0000000
--- a/messages/sv-SE.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Diskussioner",
- "nav_language": "Språk",
- "footer_help_translate": "Hjälp till att översätta",
- "footer_privacy_policy": "Integritetspolicy",
- "cookie_description": "Den här webbplatsen använder cookies för att förbättra användarupplevelsen.",
- "ok": "OK",
- "title": "LinearMouse | Verktyget för mus och styrplatta på Mac.",
- "description": "Anpassa musens och styrplattans rullningsriktning, pekaracceleration, pekarhastighet och mycket mer...",
- "install_download": "Ladda ned",
- "install_install_via_homebrew": "Installera via Homebrew",
- "install_copied": "Kopierat",
- "nav_theme": "Tema",
- "theme_system": "System",
- "theme_light": "Ljust",
- "theme_dark": "Mörkt",
- "slogan_marquee_mouse_and_trackpad": "Mus och styrplatta",
- "slogan_marquee_per_app_profiles": "Profiler per app",
- "slogan_marquee_reverse_scrolling": "Rullning",
- "slogan_marquee_pointer_precision": "Pekarhastighet",
- "slogan_marquee_button_shortcuts": "Knappåtgärder",
- "nav_menu": "Meny",
- "slogan_rich": "Justera {#marquee}{/marquee}\n{#gradient}Precis rätt.{/gradient}",
- "feature_profiles_title": "Profiler Som\n{#strong}Hänger Med.{/strong}",
- "feature_profiles_description": "En annan enhet. En annan app. En annan skärm. LinearMouse håller varje kontroll exakt där den hör hemma.",
- "feature_scrolling_title": "{#strong}Rullning{/strong}\nPå Ditt Sätt.",
- "feature_scrolling_description": "Behåll naturlig rullning på styrplattan, vänd den på musen och finjustera varje riktning tills allt känns självklart.",
- "feature_pointer_title": "Pekarkontroll,\n{#strong}Finjusterad.{/strong}",
- "feature_pointer_description": "Finjustera acceleration och hastighet, hoppa tillbaka till systemets standarder när du vill eller stäng av acceleration helt för stabil och förutsägbar precision.",
- "feature_buttons_title": "Knappar Som\n{#strong}Gör Mer.{/strong}",
- "feature_buttons_description": "Omfördela knappar och rullåtgärder till genvägar, mediekontroller, Mission Control och geststyrda arbetsflöden som håller dig i rörelse."
-}
diff --git a/messages/tr-TR.json b/messages/tr-TR.json
deleted file mode 100644
index fdceb2e..0000000
--- a/messages/tr-TR.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Tartışmalar",
- "nav_language": "Dil",
- "footer_help_translate": "Çeviriye yardım et",
- "footer_privacy_policy": "Gizlilik Politikası",
- "cookie_description": "Size en uygun kullanıcı deneyimini sunmak için çerezleri kullanıyoruz.",
- "ok": "Tamam",
- "title": "LinearMouse | Mac için fare ve dokunmatik yüzey aracı.",
- "description": "Fare ve dokunmatik yüzeyinizin kaydırma yönünü, imleç ivmesini, imleç hızını vb. özelleştirin...",
- "install_download": "İndir",
- "install_install_via_homebrew": "Homebrew ile yükle",
- "install_copied": "Kopyalandı",
- "nav_theme": "Tema",
- "theme_system": "Sistem",
- "theme_light": "Açık",
- "theme_dark": "Koyu",
- "slogan_marquee_mouse_and_trackpad": "Fare ve dokunmatik yüzey",
- "slogan_marquee_per_app_profiles": "Uygulama bazlı profiller",
- "slogan_marquee_reverse_scrolling": "Kaydırma",
- "slogan_marquee_pointer_precision": "İşaretçi hızı",
- "slogan_marquee_button_shortcuts": "Düğme işlemleri",
- "nav_menu": "Menü",
- "slogan_rich": "Ayarla {#marquee}{/marquee}\n{#gradient}Tam kararında.{/gradient}",
- "feature_profiles_title": "Ayak Uyduran\n{#strong}Profiller.{/strong}",
- "feature_profiles_description": "Farklı cihaz. Farklı uygulama. Farklı ekran. LinearMouse her kontrolü tam olması gereken yerde tutar.",
- "feature_scrolling_title": "{#strong}Kaydırma{/strong}\nSizin Tarzınızda.",
- "feature_scrolling_description": "Trackpad'de doğal kaydırmayı koruyun, mouse'ta tersine çevirin ve her yönü her şey zahmetsiz gelene kadar ince ayarlayın.",
- "feature_pointer_title": "İmleç Kontrolü,\n{#strong}Tam Ayarında.{/strong}",
- "feature_pointer_description": "Hızlanma ve hızı hassas biçimde ayarlayın, istediğiniz an sistem varsayılanlarına dönün ya da stabil ve öngörülebilir hassasiyet için hızlanmayı tamamen kapatın.",
- "feature_buttons_title": "Düğmelerle\n{#strong}Daha Fazlası.{/strong}",
- "feature_buttons_description": "Düğmeleri ve kaydırma eylemlerini kısayollara, medya kontrollerine, Mission Control'e ve sizi akışta tutan jest odaklı iş akışlarına yeniden atayın."
-}
diff --git a/messages/uk-UA.json b/messages/uk-UA.json
deleted file mode 100644
index 9c2fc41..0000000
--- a/messages/uk-UA.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Обговорення",
- "nav_language": "Мова",
- "footer_help_translate": "Допоможіть з перекладом",
- "footer_privacy_policy": "Політика конфіденційності",
- "cookie_description": "Цей вебсайт використовує файли cookie для покращення користувацького досвіду.",
- "ok": "Гаразд",
- "title": "LinearMouse | Утиліта для миші та трекпада на Mac.",
- "description": "Налаштуйте напрямок прокрутки миші та трекпада, пришвидшення вказівника, швидкість вказівника тощо...",
- "install_download": "Завантажити",
- "install_install_via_homebrew": "Установити через Homebrew",
- "install_copied": "Скопійовано",
- "nav_theme": "Тема",
- "theme_system": "Системна",
- "theme_light": "Світла",
- "theme_dark": "Темна",
- "slogan_marquee_mouse_and_trackpad": "Миша й трекпад",
- "slogan_marquee_per_app_profiles": "Профілі за застосунком",
- "slogan_marquee_reverse_scrolling": "Прокручування",
- "slogan_marquee_pointer_precision": "Швидкість вказівника",
- "slogan_marquee_button_shortcuts": "Дії кнопок",
- "nav_menu": "Меню",
- "slogan_rich": "Налаштуйте {#marquee}{/marquee}\n{#gradient}Як треба.{/gradient}",
- "feature_profiles_title": "Профілі, Що\n{#strong}Встигають За Вами.{/strong}",
- "feature_profiles_description": "Інший пристрій. Інший застосунок. Інший дисплей. LinearMouse тримає кожен елемент керування саме там, де йому місце.",
- "feature_scrolling_title": "{#strong}Прокручування{/strong}\nПо-Своєму.",
- "feature_scrolling_description": "Залишайте природне прокручування на трекпаді, розвертайте його на миші й налаштовуйте кожен напрямок, доки все не стане цілком природним.",
- "feature_pointer_title": "Керування Вказівником,\n{#strong}Точно Налаштоване.{/strong}",
- "feature_pointer_description": "Точно налаштовуйте прискорення й швидкість, у будь-який момент повертайтеся до системних значень або повністю вимикайте прискорення заради стабільної та передбачуваної точності.",
- "feature_buttons_title": "Кнопки, Що\n{#strong}Вміють Більше.{/strong}",
- "feature_buttons_description": "Перепризначайте кнопки й дії прокручування на ярлики, керування медіа, Mission Control і жести-керовані сценарії, що не дають збиватися з темпу."
-}
diff --git a/messages/vi-VN.json b/messages/vi-VN.json
deleted file mode 100644
index 6b94f67..0000000
--- a/messages/vi-VN.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "Thảo luận",
- "nav_language": "Ngôn ngữ",
- "footer_help_translate": "Hỗ trợ dịch thuật",
- "footer_privacy_policy": "Chính sách bảo mật",
- "cookie_description": "Trang web này sử dụng cookie để nâng cao trải nghiệm người dùng.",
- "ok": "OK",
- "title": "LinearMouse | Tiện ích chuột và trackpad cho Mac.",
- "description": "Tùy chỉnh hướng cuộn, gia tốc con trỏ, tốc độ con trỏ và nhiều thiết lập khác cho chuột và trackpad.",
- "install_download": "Tải về",
- "install_install_via_homebrew": "Cài đặt qua Homebrew",
- "install_copied": "Đã sao chép",
- "nav_theme": "Giao diện",
- "theme_system": "Hệ thống",
- "theme_light": "Sáng",
- "theme_dark": "Tối",
- "slogan_marquee_mouse_and_trackpad": "Chuột và trackpad",
- "slogan_marquee_per_app_profiles": "Hồ sơ theo ứng dụng",
- "slogan_marquee_reverse_scrolling": "Cuộn",
- "slogan_marquee_pointer_precision": "Tốc độ con trỏ",
- "slogan_marquee_button_shortcuts": "Thao tác nút",
- "nav_menu": "Menu",
- "slogan_rich": "Chỉnh {#marquee}{/marquee}\n{#gradient}Vừa tay.{/gradient}",
- "feature_profiles_title": "Hồ Sơ Luôn\n{#strong}Theo Kịp Bạn.{/strong}",
- "feature_profiles_description": "Thiết bị khác. Ứng dụng khác. Màn hình khác. LinearMouse giữ mọi điều khiển đúng ở vị trí của nó.",
- "feature_scrolling_title": "{#strong}Cuộn{/strong}\nTheo Cách Của Bạn.",
- "feature_scrolling_description": "Giữ cuộn tự nhiên trên trackpad, đảo chiều trên chuột và tinh chỉnh từng hướng cho đến khi mọi thứ trở nên thật tự nhiên.",
- "feature_pointer_title": "Điều Khiển Con Trỏ,\n{#strong}Chuẩn Từng Chi Tiết.{/strong}",
- "feature_pointer_description": "Tinh chỉnh gia tốc và tốc độ, quay lại mặc định hệ thống bất cứ lúc nào, hoặc tắt hẳn gia tốc để có độ chính xác ổn định và dễ đoán.",
- "feature_buttons_title": "Nút Bấm\n{#strong}Làm Được Nhiều Hơn.{/strong}",
- "feature_buttons_description": "Gán lại nút bấm và thao tác cuộn thành phím tắt, điều khiển media, Mission Control và các quy trình dựa trên cử chỉ giúp bạn giữ nhịp làm việc."
-}
diff --git a/messages/zh-CN.json b/messages/zh-CN.json
deleted file mode 100644
index 624ebf9..0000000
--- a/messages/zh-CN.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "讨论",
- "nav_language": "语言",
- "footer_help_translate": "协助翻译",
- "footer_privacy_policy": "隐私政策",
- "cookie_description": "本网站会使用 Cookie 来提升用户体验。",
- "ok": "好的",
- "title": "LinearMouse | Mac 上的鼠标和触控板实用工具。",
- "description": "自定义鼠标和触控板的滚动方向、指针加速度、指针速度等设置。",
- "install_download": "下载",
- "install_install_via_homebrew": "用 Homebrew 安装",
- "install_copied": "已复制",
- "nav_theme": "主题",
- "theme_system": "跟随系统",
- "theme_light": "浅色",
- "theme_dark": "深色",
- "slogan_marquee_mouse_and_trackpad": "鼠标和触控板",
- "slogan_marquee_per_app_profiles": "App 配置",
- "slogan_marquee_reverse_scrolling": "滚动",
- "slogan_marquee_pointer_precision": "指针速度",
- "slogan_marquee_button_shortcuts": "按钮操作",
- "nav_menu": "菜单",
- "slogan_rich": "把{#marquee}{/marquee}\n调到{#gradient}刚刚好{#hang}。{/hang}{/gradient}",
- "feature_profiles_title": "会跟着场景切换的\n{#strong}配置{#hang}。{/hang}{/strong}",
- "feature_profiles_description": "设备不同,App 不同,显示器不同。LinearMouse 都能把每一套控制放在它该在的位置。",
- "feature_scrolling_title": "{#strong}滚动{/strong}\n按你的习惯来{#hang}。{/hang}",
- "feature_scrolling_description": "触控板保留自然滚动,鼠标单独反向,再把横向和纵向都调到顺手为止。",
- "feature_pointer_title": "指针控制{#hang},{/hang}\n{#strong}调得刚刚好{#hang}。{/hang}{/strong}",
- "feature_pointer_description": "细调加速度和速度,随时回到系统默认,或者彻底关闭加速度,换来稳定、可预期的精确手感。",
- "feature_buttons_title": "让按钮\n{#strong}更有用{#hang}。{/hang}{/strong}",
- "feature_buttons_description": "把按钮和滚轮动作重新映射到快捷键、媒体控制、Mission Control 和手势驱动的工作流,让操作节奏跟上你的手。"
-}
diff --git a/messages/zh-HK.json b/messages/zh-HK.json
deleted file mode 100644
index eedf834..0000000
--- a/messages/zh-HK.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "討論",
- "nav_language": "語言",
- "footer_help_translate": "協助翻譯",
- "footer_privacy_policy": "私隱政策",
- "cookie_description": "本網站會使用 Cookie 來提升用戶體驗。",
- "ok": "確認",
- "title": "LinearMouse | Mac 上的滑鼠和觸控板實用工具。",
- "description": "自訂滑鼠和觸控板的捲動方向、指標加速度、指標速度等設定。",
- "install_download": "下載",
- "install_install_via_homebrew": "透過 Homebrew 安裝",
- "install_copied": "已複製",
- "nav_theme": "主題",
- "theme_system": "跟隨系統",
- "theme_light": "淺色",
- "theme_dark": "深色",
- "slogan_marquee_mouse_and_trackpad": "滑鼠和觸控板",
- "slogan_marquee_per_app_profiles": "App 設定",
- "slogan_marquee_reverse_scrolling": "捲動",
- "slogan_marquee_pointer_precision": "指標速度",
- "slogan_marquee_button_shortcuts": "按鈕操作",
- "nav_menu": "選單",
- "slogan_rich": "把{#marquee}{/marquee}\n調到{#gradient}啱啱好{#hang}。{/hang}{/gradient}",
- "feature_profiles_title": "會跟住情境切換的\n{#strong}設定{#hang}。{/hang}{/strong}",
- "feature_profiles_description": "裝置不同,App 不同,顯示器不同。LinearMouse 都會把每一套控制放回它應在的位置。",
- "feature_scrolling_title": "{#strong}捲動{/strong}\n按你的習慣來{#hang}。{/hang}",
- "feature_scrolling_description": "觸控板保留自然捲動,滑鼠單獨反向,再把橫向和縱向都調到用得最順手。",
- "feature_pointer_title": "指標控制{#hang},{/hang}\n{#strong}調到啱啱好{#hang}。{/hang}{/strong}",
- "feature_pointer_description": "細調加速度和速度,隨時回到系統預設,或完全關閉加速度,換來穩定而可預期的精準手感。",
- "feature_buttons_title": "讓按鈕\n{#strong}更有用{#hang}。{/hang}{/strong}",
- "feature_buttons_description": "把按鈕和滾輪動作重新對應到快捷鍵、媒體控制、Mission Control 和手勢驅動的工作流程,讓操作節奏跟得上你的手。"
-}
diff --git a/messages/zh-TW.json b/messages/zh-TW.json
deleted file mode 100644
index 420f491..0000000
--- a/messages/zh-TW.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "nav_github": "GitHub",
- "nav_discussions": "討論",
- "nav_language": "語言",
- "footer_help_translate": "協助翻譯",
- "footer_privacy_policy": "隱私政策",
- "cookie_description": "本網站會使用 Cookie 來提升使用體驗。",
- "ok": "確認",
- "title": "LinearMouse | Mac 上的滑鼠和觸控式軌跡板實用工具。",
- "description": "自訂滑鼠和觸控式軌跡板的捲動方向、指標加速度、指標速度等設定。",
- "install_download": "下載",
- "install_install_via_homebrew": "透過 Homebrew 安裝",
- "install_copied": "已複製",
- "nav_theme": "主題",
- "theme_system": "跟隨系統",
- "theme_light": "淺色",
- "theme_dark": "深色",
- "slogan_marquee_mouse_and_trackpad": "滑鼠和觸控式軌跡板",
- "slogan_marquee_per_app_profiles": "App 設定",
- "slogan_marquee_reverse_scrolling": "捲動",
- "slogan_marquee_pointer_precision": "指標速度",
- "slogan_marquee_button_shortcuts": "按鈕操作",
- "nav_menu": "選單",
- "slogan_rich": "把{#marquee}{/marquee}\n調到{#gradient}剛剛好{#hang}。{/hang}{/gradient}",
- "feature_profiles_title": "會跟著情境切換的\n{#strong}設定{#hang}。{/hang}{/strong}",
- "feature_profiles_description": "裝置不同、App 不同、顯示器不同,LinearMouse 都會把每一套控制放在它該在的位置。",
- "feature_scrolling_title": "{#strong}捲動{/strong}\n照你的習慣來{#hang}。{/hang}",
- "feature_scrolling_description": "觸控式軌跡板保留自然捲動,滑鼠單獨反向,再把橫向與縱向都調到最順手。",
- "feature_pointer_title": "指標控制{#hang},{/hang}\n{#strong}調到剛剛好{#hang}。{/hang}{/strong}",
- "feature_pointer_description": "細調加速度與速度,隨時回到系統預設,或徹底關閉加速度,換來穩定、可預期的精準手感。",
- "feature_buttons_title": "讓按鈕\n{#strong}更有用{#hang}。{/hang}{/strong}",
- "feature_buttons_description": "把按鈕和滾輪動作重新對應到快捷鍵、媒體控制、Mission Control 和手勢驅動的工作流程,讓操作節奏跟得上你的手。"
-}
diff --git a/next-env.d.ts b/next-env.d.ts
new file mode 100755
index 0000000..c4b7818
--- /dev/null
+++ b/next-env.d.ts
@@ -0,0 +1,6 @@
+///
+///
+import "./.next/dev/types/routes.d.ts";
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/next.config.ts b/next.config.ts
new file mode 100755
index 0000000..623674f
--- /dev/null
+++ b/next.config.ts
@@ -0,0 +1,16 @@
+import createNextIntlPlugin from 'next-intl/plugin'
+
+const nextConfig: import('next').NextConfig = {
+ output: 'standalone',
+ reactStrictMode: true,
+ trailingSlash: true,
+ compiler: {
+ styledComponents: true
+ },
+ images: {
+ unoptimized: true
+ }
+}
+
+const withNextIntl = createNextIntlPlugin()
+export default withNextIntl(nextConfig)
diff --git a/package.json b/package.json
index 00af462..110ea47 100644
--- a/package.json
+++ b/package.json
@@ -1,49 +1,32 @@
{
- "name": "linearmouse-website",
- "private": true,
- "type": "module",
- "imports": {
- "#/*": "./src/*"
- },
- "scripts": {
- "dev": "vite dev --port 3000",
- "build": "vite build",
- "preview": "vite preview",
- "test": "vitest run",
- "deploy": "pnpm run build && wrangler deploy",
- "cf-typegen": "wrangler types"
- },
- "dependencies": {
- "@base-ui/react": "^1.3.0",
- "@cloudflare/vite-plugin": "^1.28.0",
- "@tailwindcss/vite": "^4.2.1",
- "@tanstack/react-devtools": "^0.9.13",
- "@tanstack/react-router": "^1.167.0",
- "@tanstack/react-router-devtools": "^1.166.7",
- "@tanstack/react-router-ssr-query": "^1.166.7",
- "@tanstack/react-start": "^1.166.11",
- "@tanstack/router-plugin": "^1.166.9",
- "lucide-react": "^0.577.0",
- "motion": "^12.36.0",
- "react": "^19.2.4",
- "react-dom": "^19.2.4",
- "tailwindcss": "^4.2.1",
- "xmlbuilder2": "^4.0.3"
- },
- "devDependencies": {
- "@inlang/paraglide-js": "^2.15.0",
- "@playwright/test": "^1.58.2",
- "@tanstack/devtools-vite": "^0.5.5",
- "@testing-library/dom": "^10.4.1",
- "@testing-library/react": "^16.3.2",
- "@types/node": "^25.5.0",
- "@types/react": "^19.2.14",
- "@types/react-dom": "^19.2.3",
- "@vitejs/plugin-react": "^6.0.1",
- "jsdom": "^28.1.0",
- "typescript": "^5.9.3",
- "vite": "^8.0.0",
- "vitest": "^4.1.0",
- "wrangler": "^4.73.0"
- }
+ "name": "linearmouse.org",
+ "version": "0.1.0",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "dev": "next dev --turbopack",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "dependencies": {
+ "next": "16.0.7",
+ "next-intl": "^4.5.8",
+ "react": "19.2.1",
+ "react-dom": "19.2.1",
+ "react-is": "19.2.1",
+ "sharp": "^0.34.5",
+ "styled-components": "^6.1.19"
+ },
+ "devDependencies": {
+ "@trivago/prettier-plugin-sort-imports": "^6.0.0",
+ "@types/node": "24.10.1",
+ "@types/react": "19.2.7",
+ "@types/react-dom": "19.2.3",
+ "@types/styled-components": "^5.1.36",
+ "eslint": "9.39.1",
+ "eslint-config-next": "16.0.7",
+ "prettier": "^3.7.4",
+ "typescript": "5.9.3"
+ }
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b5e47fa..df7e6ff 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,152 +8,92 @@ importers:
.:
dependencies:
- '@base-ui/react':
- specifier: ^1.3.0
- version: 1.3.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@cloudflare/vite-plugin':
- specifier: ^1.28.0
- version: 1.28.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))(workerd@1.20260312.1)(wrangler@4.73.0)
- '@tailwindcss/vite':
- specifier: ^4.2.1
- version: 4.2.1(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))
- '@tanstack/react-devtools':
- specifier: ^0.9.13
- version: 0.9.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)
- '@tanstack/react-router':
- specifier: ^1.167.0
- version: 1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/react-router-devtools':
- specifier: ^1.166.7
- version: 1.166.7(@tanstack/react-router@1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.167.0)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/react-router-ssr-query':
- specifier: ^1.166.7
- version: 1.166.7(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.4))(@tanstack/react-router@1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.167.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/react-start':
- specifier: ^1.166.11
- version: 1.166.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))
- '@tanstack/router-plugin':
- specifier: ^1.166.9
- version: 1.166.9(@tanstack/react-router@1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))
- lucide-react:
- specifier: ^0.577.0
- version: 0.577.0(react@19.2.4)
- motion:
- specifier: ^12.36.0
- version: 12.36.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ next:
+ specifier: 16.0.7
+ version: 16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
+ next-intl:
+ specifier: ^4.5.8
+ version: 4.5.8(next@16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react@19.2.1)(typescript@5.9.3)
react:
- specifier: ^19.2.4
- version: 19.2.4
+ specifier: 19.2.1
+ version: 19.2.1
react-dom:
- specifier: ^19.2.4
- version: 19.2.4(react@19.2.4)
- tailwindcss:
- specifier: ^4.2.1
- version: 4.2.1
- xmlbuilder2:
- specifier: ^4.0.3
- version: 4.0.3
+ specifier: 19.2.1
+ version: 19.2.1(react@19.2.1)
+ react-is:
+ specifier: 19.2.1
+ version: 19.2.1
+ sharp:
+ specifier: ^0.34.5
+ version: 0.34.5
+ styled-components:
+ specifier: ^6.1.19
+ version: 6.1.19(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
devDependencies:
- '@inlang/paraglide-js':
- specifier: ^2.15.0
- version: 2.15.0
- '@playwright/test':
- specifier: ^1.58.2
- version: 1.58.2
- '@tanstack/devtools-vite':
- specifier: ^0.5.5
- version: 0.5.5(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))
- '@testing-library/dom':
- specifier: ^10.4.1
- version: 10.4.1
- '@testing-library/react':
- specifier: ^16.3.2
- version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
+ '@trivago/prettier-plugin-sort-imports':
+ specifier: ^6.0.0
+ version: 6.0.0(prettier@3.7.4)
'@types/node':
- specifier: ^25.5.0
- version: 25.5.0
+ specifier: 24.10.1
+ version: 24.10.1
'@types/react':
- specifier: ^19.2.14
- version: 19.2.14
+ specifier: 19.2.7
+ version: 19.2.7
'@types/react-dom':
- specifier: ^19.2.3
- version: 19.2.3(@types/react@19.2.14)
- '@vitejs/plugin-react':
- specifier: ^6.0.1
- version: 6.0.1(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))
- jsdom:
- specifier: ^28.1.0
- version: 28.1.0
+ specifier: 19.2.3
+ version: 19.2.3(@types/react@19.2.7)
+ '@types/styled-components':
+ specifier: ^5.1.36
+ version: 5.1.36
+ eslint:
+ specifier: 9.39.1
+ version: 9.39.1
+ eslint-config-next:
+ specifier: 16.0.7
+ version: 16.0.7(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ prettier:
+ specifier: ^3.7.4
+ version: 3.7.4
typescript:
- specifier: ^5.9.3
+ specifier: 5.9.3
version: 5.9.3
- vite:
- specifier: ^8.0.0
- version: 8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)
- vitest:
- specifier: ^4.1.0
- version: 4.1.0(@types/node@25.5.0)(jsdom@28.1.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))
- wrangler:
- specifier: ^4.73.0
- version: 4.73.0
packages:
- '@acemir/cssom@0.9.31':
- resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==}
-
- '@asamuzakjp/css-color@5.0.1':
- resolution: {integrity: sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==}
- engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
-
- '@asamuzakjp/dom-selector@6.8.1':
- resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==}
-
- '@asamuzakjp/nwsapi@2.3.9':
- resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==}
-
'@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
- '@babel/code-frame@7.29.0':
- resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/compat-data@7.29.0':
- resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==}
+ '@babel/compat-data@7.28.5':
+ resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.29.0':
- resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==}
+ '@babel/core@7.28.5':
+ resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==}
engines: {node: '>=6.9.0'}
- '@babel/generator@7.29.1':
- resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
+ '@babel/generator@7.28.5':
+ resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
engines: {node: '>=6.9.0'}
- '@babel/helper-compilation-targets@7.28.6':
- resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
+ '@babel/helper-compilation-targets@7.27.2':
+ resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
engines: {node: '>=6.9.0'}
'@babel/helper-globals@7.28.0':
resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-imports@7.28.6':
- resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
+ '@babel/helper-module-imports@7.27.1':
+ resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
engines: {node: '>=6.9.0'}
- '@babel/helper-module-transforms@7.28.6':
- resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
+ '@babel/helper-module-transforms@7.28.3':
+ resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-plugin-utils@7.28.6':
- resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-string-parser@7.27.1':
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
@@ -166,499 +106,119 @@ packages:
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
- '@babel/helpers@7.28.6':
- resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
+ '@babel/helpers@7.28.4':
+ resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.29.0':
- resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==}
+ '@babel/parser@7.28.5':
+ resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/plugin-syntax-jsx@7.28.6':
- resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-syntax-typescript@7.28.6':
- resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/runtime@7.28.6':
- resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/template@7.28.6':
- resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ '@babel/template@7.27.2':
+ resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.29.0':
- resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
+ '@babel/traverse@7.28.5':
+ resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.29.0':
- resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
+ '@babel/types@7.28.5':
+ resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
- '@base-ui/react@1.3.0':
- resolution: {integrity: sha512-FwpKqZbPz14AITp1CVgf4AjhKPe1OeeVKSBMdgD10zbFlj3QSWelmtCMLi2+/PFZZcIm3l87G7rwtCZJwHyXWA==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- '@types/react': ^17 || ^18 || ^19
- react: ^17 || ^18 || ^19
- react-dom: ^17 || ^18 || ^19
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
- '@base-ui/utils@0.2.6':
- resolution: {integrity: sha512-yQ+qeuqohwhsNpoYDqqXaLllYAkPCP4vYdDrVo8FQXaAPfHWm1pG/Vm+jmGTA5JFS0BAIjookyapuJFY8F9PIw==}
- peerDependencies:
- '@types/react': ^17 || ^18 || ^19
- react: ^17 || ^18 || ^19
- react-dom: ^17 || ^18 || ^19
- peerDependenciesMeta:
- '@types/react':
- optional: true
-
- '@bramus/specificity@2.4.2':
- resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==}
- hasBin: true
-
- '@cloudflare/kv-asset-handler@0.4.2':
- resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==}
- engines: {node: '>=18.0.0'}
-
- '@cloudflare/unenv-preset@2.15.0':
- resolution: {integrity: sha512-EGYmJaGZKWl+X8tXxcnx4v2bOZSjQeNI5dWFeXivgX9+YCT69AkzHHwlNbVpqtEUTbew8eQurpyOpeN8fg00nw==}
- peerDependencies:
- unenv: 2.0.0-rc.24
- workerd: 1.20260301.1 || ~1.20260302.1 || ~1.20260303.1 || ~1.20260304.1 || >1.20260305.0 <2.0.0-0
- peerDependenciesMeta:
- workerd:
- optional: true
-
- '@cloudflare/vite-plugin@1.28.0':
- resolution: {integrity: sha512-h2idr5fZ5GojyWZOZ506NHaDAVq3zpvcKgk8ZzDLlnHHvOwXZlFDPRf9Kkffv0fe+J6GPn7gVjJxgT0YRXAbew==}
- peerDependencies:
- vite: ^6.1.0 || ^7.0.0
- wrangler: ^4.73.0
-
- '@cloudflare/workerd-darwin-64@1.20260312.1':
- resolution: {integrity: sha512-HUAtDWaqUduS6yasV6+NgsK7qBpP1qGU49ow/Wb117IHjYp+PZPUGReDYocpB4GOMRoQlvdd4L487iFxzdARpw==}
- engines: {node: '>=16'}
- cpu: [x64]
- os: [darwin]
-
- '@cloudflare/workerd-darwin-arm64@1.20260312.1':
- resolution: {integrity: sha512-DOn7TPTHSxJYfi4m4NYga/j32wOTqvJf/pY4Txz5SDKWIZHSTXFyGz2K4B+thoPWLop/KZxGoyTv7db0mk/qyw==}
- engines: {node: '>=16'}
- cpu: [arm64]
- os: [darwin]
-
- '@cloudflare/workerd-linux-64@1.20260312.1':
- resolution: {integrity: sha512-TdkIh3WzPXYHuvz7phAtFEEvAxvFd30tHrm4gsgpw0R0F5b8PtoM3hfL2uY7EcBBWVYUBtkY2ahDYFfufnXw/g==}
- engines: {node: '>=16'}
- cpu: [x64]
- os: [linux]
-
- '@cloudflare/workerd-linux-arm64@1.20260312.1':
- resolution: {integrity: sha512-kNauZhL569Iy94t844OMwa1zP6zKFiL3xiJ4tGLS+TFTEfZ3pZsRH6lWWOtkXkjTyCmBEOog0HSEKjIV4oAffw==}
- engines: {node: '>=16'}
- cpu: [arm64]
- os: [linux]
+ '@emnapi/core@1.7.1':
+ resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==}
- '@cloudflare/workerd-windows-64@1.20260312.1':
- resolution: {integrity: sha512-5dBrlSK+nMsZy5bYQpj8t9iiQNvCRlkm9GGvswJa9vVU/1BNO4BhJMlqOLWT24EmFyApZ+kaBiPJMV8847NDTg==}
- engines: {node: '>=16'}
- cpu: [x64]
- os: [win32]
+ '@emnapi/runtime@1.7.1':
+ resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
- '@cspotcode/source-map-support@0.8.1':
- resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
- engines: {node: '>=12'}
+ '@emnapi/wasi-threads@1.1.0':
+ resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
- '@csstools/color-helpers@6.0.2':
- resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==}
- engines: {node: '>=20.19.0'}
+ '@emotion/is-prop-valid@1.2.2':
+ resolution: {integrity: sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==}
- '@csstools/css-calc@3.1.1':
- resolution: {integrity: sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==}
- engines: {node: '>=20.19.0'}
- peerDependencies:
- '@csstools/css-parser-algorithms': ^4.0.0
- '@csstools/css-tokenizer': ^4.0.0
+ '@emotion/memoize@0.8.1':
+ resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==}
- '@csstools/css-color-parser@4.0.2':
- resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==}
- engines: {node: '>=20.19.0'}
- peerDependencies:
- '@csstools/css-parser-algorithms': ^4.0.0
- '@csstools/css-tokenizer': ^4.0.0
+ '@emotion/unitless@0.8.1':
+ resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==}
- '@csstools/css-parser-algorithms@4.0.0':
- resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==}
- engines: {node: '>=20.19.0'}
+ '@eslint-community/eslint-utils@4.9.0':
+ resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
- '@csstools/css-tokenizer': ^4.0.0
-
- '@csstools/css-syntax-patches-for-csstree@1.1.0':
- resolution: {integrity: sha512-H4tuz2nhWgNKLt1inYpoVCfbJbMwX/lQKp3g69rrrIMIYlFD9+zTykOKhNR8uGrAmbS/kT9n6hTFkmDkxLgeTA==}
-
- '@csstools/css-tokenizer@4.0.0':
- resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==}
- engines: {node: '>=20.19.0'}
-
- '@emnapi/core@1.9.0':
- resolution: {integrity: sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==}
-
- '@emnapi/runtime@1.9.0':
- resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==}
-
- '@emnapi/wasi-threads@1.2.0':
- resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==}
-
- '@esbuild/aix-ppc64@0.27.3':
- resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/aix-ppc64@0.27.4':
- resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/android-arm64@0.27.3':
- resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm64@0.27.4':
- resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm@0.27.3':
- resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-arm@0.27.4':
- resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-x64@0.27.3':
- resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/android-x64@0.27.4':
- resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/darwin-arm64@0.27.3':
- resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-arm64@0.27.4':
- resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.27.3':
- resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.27.4':
- resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/freebsd-arm64@0.27.3':
- resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-arm64@0.27.4':
- resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.27.3':
- resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.27.4':
- resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/linux-arm64@0.27.3':
- resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm64@0.27.4':
- resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm@0.27.3':
- resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-arm@0.27.4':
- resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-ia32@0.27.3':
- resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-ia32@0.27.4':
- resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-loong64@0.27.3':
- resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==}
- engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-loong64@0.27.4':
- resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==}
- engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.27.3':
- resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==}
- engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.27.4':
- resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==}
- engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-ppc64@0.27.3':
- resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-ppc64@0.27.4':
- resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.27.3':
- resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==}
- engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.27.4':
- resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==}
- engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-s390x@0.27.3':
- resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==}
- engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-s390x@0.27.4':
- resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==}
- engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-x64@0.27.3':
- resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/linux-x64@0.27.4':
- resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/netbsd-arm64@0.27.3':
- resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
-
- '@esbuild/netbsd-arm64@0.27.4':
- resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
-
- '@esbuild/netbsd-x64@0.27.3':
- resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/netbsd-x64@0.27.4':
- resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/openbsd-arm64@0.27.3':
- resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
- '@esbuild/openbsd-arm64@0.27.4':
- resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
+ '@eslint-community/regexpp@4.12.2':
+ resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@esbuild/openbsd-x64@0.27.3':
- resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [openbsd]
+ '@eslint/config-array@0.21.1':
+ resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@esbuild/openbsd-x64@0.27.4':
- resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [openbsd]
+ '@eslint/config-helpers@0.4.2':
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@esbuild/openharmony-arm64@0.27.3':
- resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openharmony]
+ '@eslint/core@0.17.0':
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@esbuild/openharmony-arm64@0.27.4':
- resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openharmony]
+ '@eslint/eslintrc@3.3.3':
+ resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@esbuild/sunos-x64@0.27.3':
- resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
+ '@eslint/js@9.39.1':
+ resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@esbuild/sunos-x64@0.27.4':
- resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
+ '@eslint/object-schema@2.1.7':
+ resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@esbuild/win32-arm64@0.27.3':
- resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
+ '@eslint/plugin-kit@0.4.1':
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@esbuild/win32-arm64@0.27.4':
- resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
+ '@formatjs/ecma402-abstract@2.3.6':
+ resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==}
- '@esbuild/win32-ia32@0.27.3':
- resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [win32]
+ '@formatjs/fast-memoize@2.2.7':
+ resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==}
- '@esbuild/win32-ia32@0.27.4':
- resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [win32]
+ '@formatjs/icu-messageformat-parser@2.11.4':
+ resolution: {integrity: sha512-7kR78cRrPNB4fjGFZg3Rmj5aah8rQj9KPzuLsmcSn4ipLXQvC04keycTI1F7kJYDwIXtT2+7IDEto842CfZBtw==}
- '@esbuild/win32-x64@0.27.3':
- resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [win32]
+ '@formatjs/icu-skeleton-parser@1.8.16':
+ resolution: {integrity: sha512-H13E9Xl+PxBd8D5/6TVUluSpxGNvFSlN/b3coUp0e0JpuWXXnQDiavIpY3NnvSp4xhEMoXyyBvVfdFX8jglOHQ==}
- '@esbuild/win32-x64@0.27.4':
- resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [win32]
+ '@formatjs/intl-localematcher@0.5.10':
+ resolution: {integrity: sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q==}
- '@exodus/bytes@1.15.0':
- resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==}
- engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
- peerDependencies:
- '@noble/hashes': ^1.8.0 || ^2.0.0
- peerDependenciesMeta:
- '@noble/hashes':
- optional: true
+ '@formatjs/intl-localematcher@0.6.2':
+ resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==}
- '@floating-ui/core@1.7.5':
- resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==}
+ '@humanfs/core@0.19.1':
+ resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
+ engines: {node: '>=18.18.0'}
- '@floating-ui/dom@1.7.6':
- resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==}
+ '@humanfs/node@0.16.7':
+ resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==}
+ engines: {node: '>=18.18.0'}
- '@floating-ui/react-dom@2.1.8':
- resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==}
- peerDependencies:
- react: '>=16.8.0'
- react-dom: '>=16.8.0'
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
- '@floating-ui/utils@0.2.11':
- resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
- '@img/colour@1.1.0':
- resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==}
+ '@img/colour@1.0.0':
+ resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==}
engines: {node: '>=18'}
'@img/sharp-darwin-arm64@0.34.5':
@@ -687,105 +247,89 @@ packages:
resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
cpu: [arm64]
os: [linux]
- libc: [glibc]
'@img/sharp-libvips-linux-arm@1.2.4':
resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
cpu: [arm]
os: [linux]
- libc: [glibc]
'@img/sharp-libvips-linux-ppc64@1.2.4':
resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
cpu: [ppc64]
os: [linux]
- libc: [glibc]
'@img/sharp-libvips-linux-riscv64@1.2.4':
resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
cpu: [riscv64]
os: [linux]
- libc: [glibc]
'@img/sharp-libvips-linux-s390x@1.2.4':
resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
cpu: [s390x]
os: [linux]
- libc: [glibc]
'@img/sharp-libvips-linux-x64@1.2.4':
resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
cpu: [x64]
os: [linux]
- libc: [glibc]
'@img/sharp-libvips-linuxmusl-arm64@1.2.4':
resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
cpu: [arm64]
os: [linux]
- libc: [musl]
'@img/sharp-libvips-linuxmusl-x64@1.2.4':
resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
cpu: [x64]
os: [linux]
- libc: [musl]
'@img/sharp-linux-arm64@0.34.5':
resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
- libc: [glibc]
'@img/sharp-linux-arm@0.34.5':
resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm]
os: [linux]
- libc: [glibc]
'@img/sharp-linux-ppc64@0.34.5':
resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ppc64]
os: [linux]
- libc: [glibc]
'@img/sharp-linux-riscv64@0.34.5':
resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [riscv64]
os: [linux]
- libc: [glibc]
'@img/sharp-linux-s390x@0.34.5':
resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x]
os: [linux]
- libc: [glibc]
'@img/sharp-linux-x64@0.34.5':
resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
- libc: [glibc]
'@img/sharp-linuxmusl-arm64@0.34.5':
resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
- libc: [musl]
'@img/sharp-linuxmusl-x64@0.34.5':
resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
- libc: [musl]
'@img/sharp-wasm32@0.34.5':
resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==}
@@ -810,17 +354,6 @@ packages:
cpu: [x64]
os: [win32]
- '@inlang/paraglide-js@2.15.0':
- resolution: {integrity: sha512-2ZOa9nssVn4tjkKskqb88KP5A7cTIjo8AiM9xnPvH+vBhRIRenO+ftAbVOHhHcHjcFxy2QFcOfBAH/Cw1LIsUg==}
- hasBin: true
-
- '@inlang/recommend-sherlock@0.2.1':
- resolution: {integrity: sha512-ckv8HvHy/iTqaVAEKrr+gnl+p3XFNwe5D2+6w6wJk2ORV2XkcRkKOJ/XsTUJbPSiyi4PI+p+T3bqbmNx/rDUlg==}
-
- '@inlang/sdk@2.8.0':
- resolution: {integrity: sha512-w1jysvUDTMgCaONklIgOJAp9dUDl0UhLbsdqfWEwY/GIqoc9IwpuHsrP3pzC+h3DfOpkMMDnDkTpPv8kIZ98iA==}
- engines: {node: '>=18.0.0'}
-
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
@@ -837,640 +370,457 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
- '@jridgewell/trace-mapping@0.3.9':
- resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
-
- '@lix-js/sdk@0.4.7':
- resolution: {integrity: sha512-pRbW+joG12L0ULfMiWYosIW0plmW4AsUdiPCp+Z8rAsElJ+wJ6in58zhD3UwUcd4BNcpldEGjg6PdA7e0RgsDQ==}
- engines: {node: '>=18'}
+ '@napi-rs/wasm-runtime@0.2.12':
+ resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
- '@lix-js/server-protocol-schema@0.1.1':
- resolution: {integrity: sha512-jBeALB6prAbtr5q4vTuxnRZZv1M2rKe8iNqRQhFJ4Tv7150unEa0vKyz0hs8Gl3fUGsWaNJBh3J8++fpbrpRBQ==}
+ '@next/env@16.0.7':
+ resolution: {integrity: sha512-gpaNgUh5nftFKRkRQGnVi5dpcYSKGcZZkQffZ172OrG/XkrnS7UBTQ648YY+8ME92cC4IojpI2LqTC8sTDhAaw==}
- '@napi-rs/wasm-runtime@1.1.1':
- resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
+ '@next/eslint-plugin-next@16.0.7':
+ resolution: {integrity: sha512-hFrTNZcMEG+k7qxVxZJq3F32Kms130FAhG8lvw2zkKBgAcNOJIxlljNiCjGygvBshvaGBdf88q2CqWtnqezDHA==}
- '@oozcitak/dom@2.0.2':
- resolution: {integrity: sha512-GjpKhkSYC3Mj4+lfwEyI1dqnsKTgwGy48ytZEhm4A/xnH/8z9M3ZVXKr/YGQi3uCLs1AEBS+x5T2JPiueEDW8w==}
- engines: {node: '>=20.0'}
+ '@next/swc-darwin-arm64@16.0.7':
+ resolution: {integrity: sha512-LlDtCYOEj/rfSnEn/Idi+j1QKHxY9BJFmxx7108A6D8K0SB+bNgfYQATPk/4LqOl4C0Wo3LACg2ie6s7xqMpJg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
- '@oozcitak/infra@2.0.2':
- resolution: {integrity: sha512-2g+E7hoE2dgCz/APPOEK5s3rMhJvNxSMBrP+U+j1OWsIbtSpWxxlUjq1lU8RIsFJNYv7NMlnVsCuHcUzJW+8vA==}
- engines: {node: '>=20.0'}
+ '@next/swc-darwin-x64@16.0.7':
+ resolution: {integrity: sha512-rtZ7BhnVvO1ICf3QzfW9H3aPz7GhBrnSIMZyr4Qy6boXF0b5E3QLs+cvJmg3PsTCG2M1PBoC+DANUi4wCOKXpA==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
- '@oozcitak/url@3.0.0':
- resolution: {integrity: sha512-ZKfET8Ak1wsLAiLWNfFkZc/BraDccuTJKR6svTYc7sVjbR+Iu0vtXdiDMY4o6jaFl5TW2TlS7jbLl4VovtAJWQ==}
- engines: {node: '>=20.0'}
-
- '@oozcitak/util@10.0.0':
- resolution: {integrity: sha512-hAX0pT/73190NLqBPPWSdBVGtbY6VOhWYK3qqHqtXQ1gK7kS2yz4+ivsN07hpJ6I3aeMtKP6J6npsEKOAzuTLA==}
- engines: {node: '>=20.0'}
-
- '@oxc-project/runtime@0.115.0':
- resolution: {integrity: sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
-
- '@oxc-project/types@0.115.0':
- resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==}
-
- '@playwright/test@1.58.2':
- resolution: {integrity: sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==}
- engines: {node: '>=18'}
- hasBin: true
-
- '@poppinss/colors@4.1.6':
- resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==}
-
- '@poppinss/dumper@0.6.5':
- resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==}
-
- '@poppinss/exception@1.2.3':
- resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==}
-
- '@rolldown/binding-android-arm64@1.0.0-rc.9':
- resolution: {integrity: sha512-lcJL0bN5hpgJfSIz/8PIf02irmyL43P+j1pTCfbD1DbLkmGRuFIA4DD3B3ZOvGqG0XiVvRznbKtN0COQVaKUTg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [android]
-
- '@rolldown/binding-darwin-arm64@1.0.0-rc.9':
- resolution: {integrity: sha512-J7Zk3kLYFsLtuH6U+F4pS2sYVzac0qkjcO5QxHS7OS7yZu2LRs+IXo+uvJ/mvpyUljDJ3LROZPoQfgBIpCMhdQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [darwin]
-
- '@rolldown/binding-darwin-x64@1.0.0-rc.9':
- resolution: {integrity: sha512-iwtmmghy8nhfRGeNAIltcNXzD0QMNaaA5U/NyZc1Ia4bxrzFByNMDoppoC+hl7cDiUq5/1CnFthpT9n+UtfFyg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [darwin]
-
- '@rolldown/binding-freebsd-x64@1.0.0-rc.9':
- resolution: {integrity: sha512-DLFYI78SCiZr5VvdEplsVC2Vx53lnA4/Ga5C65iyldMVaErr86aiqCoNBLl92PXPfDtUYjUh+xFFor40ueNs4Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [freebsd]
-
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9':
- resolution: {integrity: sha512-CsjTmTwd0Hri6iTw/DRMK7kOZ7FwAkrO4h8YWKoX/kcj833e4coqo2wzIFywtch/8Eb5enQ/lwLM7w6JX1W5RQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [linux]
-
- '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9':
- resolution: {integrity: sha512-2x9O2JbSPxpxMDhP9Z74mahAStibTlrBMW0520+epJH5sac7/LwZW5Bmg/E6CXuEF53JJFW509uP+lSedaUNxg==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ '@next/swc-linux-arm64-gnu@16.0.7':
+ resolution: {integrity: sha512-mloD5WcPIeIeeZqAIP5c2kdaTa6StwP4/2EGy1mUw8HiexSHGK/jcM7lFuS3u3i2zn+xH9+wXJs6njO7VrAqww==}
+ engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- libc: [glibc]
- '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9':
- resolution: {integrity: sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ '@next/swc-linux-arm64-musl@16.0.7':
+ resolution: {integrity: sha512-+ksWNrZrthisXuo9gd1XnjHRowCbMtl/YgMpbRvFeDEqEBd523YHPWpBuDjomod88U8Xliw5DHhekBC3EOOd9g==}
+ engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- libc: [musl]
-
- '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9':
- resolution: {integrity: sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
- '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9':
- resolution: {integrity: sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9':
- resolution: {integrity: sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ '@next/swc-linux-x64-gnu@16.0.7':
+ resolution: {integrity: sha512-4WtJU5cRDxpEE44Ana2Xro1284hnyVpBb62lIpU5k85D8xXxatT+rXxBgPkc7C1XwkZMWpK5rXLXTh9PFipWsA==}
+ engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- libc: [glibc]
- '@rolldown/binding-linux-x64-musl@1.0.0-rc.9':
- resolution: {integrity: sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ '@next/swc-linux-x64-musl@16.0.7':
+ resolution: {integrity: sha512-HYlhqIP6kBPXalW2dbMTSuB4+8fe+j9juyxwfMwCe9kQPPeiyFn7NMjNfoFOfJ2eXkeQsoUGXg+O2SE3m4Qg2w==}
+ engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- libc: [musl]
-
- '@rolldown/binding-openharmony-arm64@1.0.0-rc.9':
- resolution: {integrity: sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [openharmony]
-
- '@rolldown/binding-wasm32-wasi@1.0.0-rc.9':
- resolution: {integrity: sha512-rgFN6sA/dyebil3YTlL2evvi/M+ivhfnyxec7AccTpRPccno/rPoNlqybEZQBkcbZu8Hy+eqNJCqfBR8P7Pg8g==}
- engines: {node: '>=14.0.0'}
- cpu: [wasm32]
- '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9':
- resolution: {integrity: sha512-lHVNUG/8nlF1IQk1C0Ci574qKYyty2goMiPlRqkC5R+3LkXDkL5Dhx8ytbxq35m+pkHVIvIxviD+TWLdfeuadA==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ '@next/swc-win32-arm64-msvc@16.0.7':
+ resolution: {integrity: sha512-EviG+43iOoBRZg9deGauXExjRphhuYmIOJ12b9sAPy0eQ6iwcPxfED2asb/s2/yiLYOdm37kPaiZu8uXSYPs0Q==}
+ engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9':
- resolution: {integrity: sha512-G0oA4+w1iY5AGi5HcDTxWsoxF509hrFIPB2rduV5aDqS9FtDg1CAfa7V34qImbjfhIcA8C+RekocJZA96EarwQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ '@next/swc-win32-x64-msvc@16.0.7':
+ resolution: {integrity: sha512-gniPjy55zp5Eg0896qSrf3yB1dw4F/3s8VK1ephdsZZ129j2n6e1WqCbE2YgcKhW9hPB9TVZENugquWJD5x0ug==}
+ engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
- '@rolldown/pluginutils@1.0.0-beta.40':
- resolution: {integrity: sha512-s3GeJKSQOwBlzdUrj4ISjJj5SfSh+aqn0wjOar4Bx95iV1ETI7F6S/5hLcfAxZ9kXDcyrAkxPlqmd1ZITttf+w==}
-
- '@rolldown/pluginutils@1.0.0-rc.7':
- resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==}
-
- '@rolldown/pluginutils@1.0.0-rc.9':
- resolution: {integrity: sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==}
-
- '@sinclair/typebox@0.31.28':
- resolution: {integrity: sha512-/s55Jujywdw/Jpan+vsy6JZs1z2ZTGxTmbZTPiuSL2wz9mfzA2gN1zzaqmvfi4pq+uOt7Du85fkiwv5ymW84aQ==}
-
- '@sindresorhus/is@7.2.0':
- resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==}
- engines: {node: '>=18'}
-
- '@solid-primitives/event-listener@2.4.5':
- resolution: {integrity: sha512-nwRV558mIabl4yVAhZKY8cb6G+O1F0M6Z75ttTu5hk+SxdOnKSGj+eetDIu7Oax1P138ZdUU01qnBPR8rnxaEA==}
- peerDependencies:
- solid-js: ^1.6.12
-
- '@solid-primitives/keyboard@1.3.5':
- resolution: {integrity: sha512-sav+l+PL+74z3yaftVs7qd8c2SXkqzuxPOVibUe5wYMt+U5Hxp3V3XCPgBPN2I6cANjvoFtz0NiU8uHVLdi9FQ==}
- peerDependencies:
- solid-js: ^1.6.12
-
- '@solid-primitives/resize-observer@2.1.5':
- resolution: {integrity: sha512-AiyTknKcNBaKHbcSMuxtSNM8FjIuiSuFyFghdD0TcCMU9hKi9EmsC5pjfjDwxE+5EueB1a+T/34PLRI5vbBbKw==}
- peerDependencies:
- solid-js: ^1.6.12
-
- '@solid-primitives/rootless@1.5.3':
- resolution: {integrity: sha512-N8cIDAHbWcLahNRLr0knAAQvXyEdEMoAZvIMZKmhNb1mlx9e2UOv9BRD5YNwQUJwbNoYVhhLwFOEOcVXFx0HqA==}
- peerDependencies:
- solid-js: ^1.6.12
-
- '@solid-primitives/static-store@0.1.3':
- resolution: {integrity: sha512-uxez7SXnr5GiRnzqO2IEDjOJRIXaG+0LZLBizmUA1FwSi+hrpuMzVBwyk70m4prcl8X6FDDXUl9O8hSq8wHbBQ==}
- peerDependencies:
- solid-js: ^1.6.12
-
- '@solid-primitives/utils@6.4.0':
- resolution: {integrity: sha512-AeGTBg8Wtkh/0s+evyLtP8piQoS4wyqqQaAFs2HJcFMMjYAtUgo+ZPduRXLjPlqKVc2ejeR544oeqpbn8Egn8A==}
- peerDependencies:
- solid-js: ^1.6.12
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
- '@speed-highlight/core@1.2.14':
- resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==}
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
- '@sqlite.org/sqlite-wasm@3.48.0-build4':
- resolution: {integrity: sha512-hI6twvUkzOmyGZhQMza1gpfqErZxXRw6JEsiVjUbo7tFanVD+8Oil0Ih3l2nGzHdxPI41zFmfUQG7GHqhciKZQ==}
- hasBin: true
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
- '@standard-schema/spec@1.1.0':
- resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
+ '@nolyfill/is-core-module@1.0.39':
+ resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
+ engines: {node: '>=12.4.0'}
- '@tailwindcss/node@4.2.1':
- resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==}
+ '@rtsao/scc@1.1.0':
+ resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
- '@tailwindcss/oxide-android-arm64@4.2.1':
- resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==}
- engines: {node: '>= 20'}
- cpu: [arm64]
- os: [android]
+ '@schummar/icu-type-parser@1.21.5':
+ resolution: {integrity: sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==}
- '@tailwindcss/oxide-darwin-arm64@4.2.1':
- resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==}
- engines: {node: '>= 20'}
+ '@swc/core-darwin-arm64@1.15.3':
+ resolution: {integrity: sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ==}
+ engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
- '@tailwindcss/oxide-darwin-x64@4.2.1':
- resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==}
- engines: {node: '>= 20'}
+ '@swc/core-darwin-x64@1.15.3':
+ resolution: {integrity: sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A==}
+ engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
- '@tailwindcss/oxide-freebsd-x64@4.2.1':
- resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==}
- engines: {node: '>= 20'}
- cpu: [x64]
- os: [freebsd]
-
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1':
- resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==}
- engines: {node: '>= 20'}
+ '@swc/core-linux-arm-gnueabihf@1.15.3':
+ resolution: {integrity: sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg==}
+ engines: {node: '>=10'}
cpu: [arm]
os: [linux]
- '@tailwindcss/oxide-linux-arm64-gnu@4.2.1':
- resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==}
- engines: {node: '>= 20'}
+ '@swc/core-linux-arm64-gnu@1.15.3':
+ resolution: {integrity: sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw==}
+ engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
- libc: [glibc]
- '@tailwindcss/oxide-linux-arm64-musl@4.2.1':
- resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==}
- engines: {node: '>= 20'}
+ '@swc/core-linux-arm64-musl@1.15.3':
+ resolution: {integrity: sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==}
+ engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
- libc: [musl]
- '@tailwindcss/oxide-linux-x64-gnu@4.2.1':
- resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==}
- engines: {node: '>= 20'}
+ '@swc/core-linux-x64-gnu@1.15.3':
+ resolution: {integrity: sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==}
+ engines: {node: '>=10'}
cpu: [x64]
os: [linux]
- libc: [glibc]
- '@tailwindcss/oxide-linux-x64-musl@4.2.1':
- resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==}
- engines: {node: '>= 20'}
+ '@swc/core-linux-x64-musl@1.15.3':
+ resolution: {integrity: sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==}
+ engines: {node: '>=10'}
cpu: [x64]
os: [linux]
- libc: [musl]
- '@tailwindcss/oxide-wasm32-wasi@4.2.1':
- resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==}
- engines: {node: '>=14.0.0'}
- cpu: [wasm32]
- bundledDependencies:
- - '@napi-rs/wasm-runtime'
- - '@emnapi/core'
- - '@emnapi/runtime'
- - '@tybys/wasm-util'
- - '@emnapi/wasi-threads'
- - tslib
-
- '@tailwindcss/oxide-win32-arm64-msvc@4.2.1':
- resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==}
- engines: {node: '>= 20'}
+ '@swc/core-win32-arm64-msvc@1.15.3':
+ resolution: {integrity: sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==}
+ engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
- '@tailwindcss/oxide-win32-x64-msvc@4.2.1':
- resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==}
- engines: {node: '>= 20'}
- cpu: [x64]
+ '@swc/core-win32-ia32-msvc@1.15.3':
+ resolution: {integrity: sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw==}
+ engines: {node: '>=10'}
+ cpu: [ia32]
os: [win32]
- '@tailwindcss/oxide@4.2.1':
- resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==}
- engines: {node: '>= 20'}
+ '@swc/core-win32-x64-msvc@1.15.3':
+ resolution: {integrity: sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [win32]
- '@tailwindcss/vite@4.2.1':
- resolution: {integrity: sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==}
+ '@swc/core@1.15.3':
+ resolution: {integrity: sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==}
+ engines: {node: '>=10'}
peerDependencies:
- vite: ^5.2.0 || ^6 || ^7
+ '@swc/helpers': '>=0.5.17'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
- '@tanstack/devtools-client@0.0.6':
- resolution: {integrity: sha512-f85ZJXJnDIFOoykG/BFIixuAevJovCvJF391LPs6YjBAPhGYC50NWlx1y4iF/UmK5/cCMx+/JqI5SBOz7FanQQ==}
- engines: {node: '>=18'}
+ '@swc/counter@0.1.3':
+ resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
- '@tanstack/devtools-event-bus@0.4.1':
- resolution: {integrity: sha512-cNnJ89Q021Zf883rlbBTfsaxTfi2r73/qejGtyTa7ksErF3hyDyAq1aTbo5crK9dAL7zSHh9viKY1BtMls1QOA==}
- engines: {node: '>=18'}
+ '@swc/helpers@0.5.15':
+ resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
- '@tanstack/devtools-event-client@0.4.3':
- resolution: {integrity: sha512-OZI6QyULw0FI0wjgmeYzCIfbgPsOEzwJtCpa69XrfLMtNXLGnz3d/dIabk7frg0TmHo+Ah49w5I4KC7Tufwsvw==}
- engines: {node: '>=18'}
- hasBin: true
+ '@swc/types@0.1.25':
+ resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==}
- '@tanstack/devtools-ui@0.5.0':
- resolution: {integrity: sha512-nNZ14054n31fWB61jtWhZYLRdQ3yceCE3G/RINoINUB0RqIGZAIm9DnEDwOTAOfqt4/a/D8vNk8pJu6RQUp74g==}
- engines: {node: '>=18'}
+ '@trivago/prettier-plugin-sort-imports@6.0.0':
+ resolution: {integrity: sha512-Xarx55ow0R8oC7ViL5fPmDsg1EBa1dVhyZFVbFXNtPPJyW2w9bJADIla8YFSaNG9N06XfcklA9O9vmw4noNxkQ==}
+ engines: {node: '>= 20'}
peerDependencies:
- solid-js: '>=1.9.7'
+ '@vue/compiler-sfc': 3.x
+ prettier: 2.x - 3.x
+ prettier-plugin-ember-template-tag: '>= 2.0.0'
+ prettier-plugin-svelte: 3.x
+ svelte: 4.x || 5.x
+ peerDependenciesMeta:
+ '@vue/compiler-sfc':
+ optional: true
+ prettier-plugin-ember-template-tag:
+ optional: true
+ prettier-plugin-svelte:
+ optional: true
+ svelte:
+ optional: true
- '@tanstack/devtools-vite@0.5.5':
- resolution: {integrity: sha512-vtXZ3LipEknVg0X6yejgWzZXIJSrvlBMWB1lDJKW6GWztEV+uCAoqLAJS+Jk3c2mTXp/u+aI/jfE0gqT4zHTNw==}
- engines: {node: '>=18'}
- hasBin: true
- peerDependencies:
- vite: ^6.0.0 || ^7.0.0
+ '@tybys/wasm-util@0.10.1':
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
- '@tanstack/devtools@0.10.14':
- resolution: {integrity: sha512-bg1e0PyjmMMsc9VSOGb9etu15CpFdAwlQ5DD2xS6N93iTPgCPWXiZQFZygrEDoKnnx1x7BM6QTaiukizaejgSA==}
- engines: {node: '>=18'}
- hasBin: true
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/hoist-non-react-statics@3.3.7':
+ resolution: {integrity: sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==}
peerDependencies:
- solid-js: '>=1.9.7'
+ '@types/react': '*'
- '@tanstack/history@1.161.4':
- resolution: {integrity: sha512-Kp/WSt411ZWYvgXy6uiv5RmhHrz9cAml05AQPrtdAp7eUqvIDbMGPnML25OKbzR3RJ1q4wgENxDTvlGPa9+Mww==}
- engines: {node: '>=20.19'}
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
- '@tanstack/query-core@5.90.20':
- resolution: {integrity: sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==}
+ '@types/json5@0.0.29':
+ resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
- '@tanstack/react-devtools@0.9.13':
- resolution: {integrity: sha512-O9YXTEe2dlnw2pPNKFZ4Wk7zC4qrDvc0SAALKfMVedeZ2Dyd0LEJUabYS6GPm+DmnrBhc7nJx6Zqc9aDjFrj4g==}
- engines: {node: '>=18'}
- peerDependencies:
- '@types/react': '>=16.8'
- '@types/react-dom': '>=16.8'
- react: '>=16.8'
- react-dom: '>=16.8'
+ '@types/node@24.10.1':
+ resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
- '@tanstack/react-query@5.90.21':
- resolution: {integrity: sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg==}
+ '@types/react-dom@19.2.3':
+ resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
peerDependencies:
- react: ^18 || ^19
+ '@types/react': ^19.2.0
- '@tanstack/react-router-devtools@1.166.7':
- resolution: {integrity: sha512-sAh3gA3wkMvUI6rRLPW4lfP0XxeEA0wrlv4tW1cinb7eoD3avcdKwiE9jhQ3DgFlhVsHa9fa3AKxH46Y/d/e1g==}
- engines: {node: '>=20.19'}
- peerDependencies:
- '@tanstack/react-router': ^1.166.7
- '@tanstack/router-core': ^1.166.7
- react: '>=18.0.0 || >=19.0.0'
- react-dom: '>=18.0.0 || >=19.0.0'
- peerDependenciesMeta:
- '@tanstack/router-core':
- optional: true
+ '@types/react@19.2.7':
+ resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==}
- '@tanstack/react-router-ssr-query@1.166.7':
- resolution: {integrity: sha512-GiPV0JuygPlkyH0SYhAzks2FO5Rdym15ScXLQXjOVziaUBum6as6TXYXk486jtdz9JHfxSIoUBgBjCBO1c+XZg==}
- engines: {node: '>=20.19'}
- peerDependencies:
- '@tanstack/query-core': '>=5.90.0'
- '@tanstack/react-query': '>=5.90.0'
- '@tanstack/react-router': '>=1.127.0'
- react: '>=18.0.0 || >=19.0.0'
- react-dom: '>=18.0.0 || >=19.0.0'
-
- '@tanstack/react-router@1.167.0':
- resolution: {integrity: sha512-U7CamtXjuC8ixg1c32Rj/4A2OFBnjtMLdbgbyOGHrFHE7ULWS/yhnZLVXff0QSyn6qF92Oecek9mDMHCaTnB2Q==}
- engines: {node: '>=20.19'}
- peerDependencies:
- react: '>=18.0.0 || >=19.0.0'
- react-dom: '>=18.0.0 || >=19.0.0'
+ '@types/styled-components@5.1.36':
+ resolution: {integrity: sha512-pGMRNY5G2rNDKEv2DOiFYa7Ft1r0jrhmgBwHhOMzPTgCjO76bCot0/4uEfqj7K0Jf1KdQmDtAuaDk9EAs9foSw==}
- '@tanstack/react-start-client@1.166.9':
- resolution: {integrity: sha512-LCzoN0G8ypNmDmUKKJaPcOL+udOPCROhoCALaibfqPB+OfZqPbsctV2GC5fgv7ZSv7GRAeYE2H7HGr0LdcjiZg==}
- engines: {node: '>=22.12.0'}
- peerDependencies:
- react: '>=18.0.0 || >=19.0.0'
- react-dom: '>=18.0.0 || >=19.0.0'
+ '@types/stylis@4.2.5':
+ resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==}
- '@tanstack/react-start-server@1.166.9':
- resolution: {integrity: sha512-3ZEwiLuPJSXQ+RYl+DLDG/si1Ug2EaS0kQ0em1Ll35btKr+sk0M00te3IMVaYudwMJeHqketxrCCZuDE9nHZXg==}
- engines: {node: '>=22.12.0'}
+ '@typescript-eslint/eslint-plugin@8.48.1':
+ resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- react: '>=18.0.0 || >=19.0.0'
- react-dom: '>=18.0.0 || >=19.0.0'
+ '@typescript-eslint/parser': ^8.48.1
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
- '@tanstack/react-start@1.166.11':
- resolution: {integrity: sha512-HSieiNTwJssrq2Wb2BUrAXH+2TLun1VT0cgQ99OwVwxrrGCCQgbyNvS393wSAA2WvsIAEEw143ErwFc13P/zhw==}
- engines: {node: '>=22.12.0'}
+ '@typescript-eslint/parser@8.48.1':
+ resolution: {integrity: sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- react: '>=18.0.0 || >=19.0.0'
- react-dom: '>=18.0.0 || >=19.0.0'
- vite: '>=7.0.0'
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
- '@tanstack/react-store@0.9.2':
- resolution: {integrity: sha512-Vt5usJE5sHG/cMechQfmwvwne6ktGCELe89Lmvoxe3LKRoFrhPa8OCKWs0NliG8HTJElEIj7PLtaBQIcux5pAQ==}
+ '@typescript-eslint/project-service@8.48.1':
+ resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ typescript: '>=4.8.4 <6.0.0'
- '@tanstack/router-core@1.167.0':
- resolution: {integrity: sha512-pnaaUP+vMQEyL2XjZGe2PXmtzulxvXfGyvEMUs+AEBaNEk77xWA88bl3ujiBRbUxzpK0rxfJf+eSKPdZmBMFdQ==}
- engines: {node: '>=20.19'}
+ '@typescript-eslint/scope-manager@8.48.1':
+ resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@tanstack/router-devtools-core@1.166.7':
- resolution: {integrity: sha512-/OGLZlrw5NSNd9/PTL8vPSpmjxIbXNoeJATMHlU3YLCBVBtLx41CHIRc7OLkjyfVFJ4Sq7Pq+2/YH8PChShefg==}
- engines: {node: '>=20.19'}
+ '@typescript-eslint/tsconfig-utils@8.48.1':
+ resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@tanstack/router-core': ^1.166.7
- csstype: ^3.0.10
- peerDependenciesMeta:
- csstype:
- optional: true
+ typescript: '>=4.8.4 <6.0.0'
+
+ '@typescript-eslint/type-utils@8.48.1':
+ resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
- '@tanstack/router-generator@1.166.8':
- resolution: {integrity: sha512-Ijl1AqKaAZAeE0+6boD/RVw/inQgq24AYMcTMhPSLSFdaYp+xR9HS5lhC6qj50rUVLRtWgM1tAbQvsQeyHv2/w==}
- engines: {node: '>=20.19'}
+ '@typescript-eslint/types@8.48.1':
+ resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@tanstack/router-plugin@1.166.9':
- resolution: {integrity: sha512-vcVjlbFc9Bw5qqRrZlGkM1bFK34t5/YP4qmUJRCTDXa6Xg47b0yWwn39X4uzYe/RgW28XP/0qKJ859EQktUX3Q==}
- engines: {node: '>=20.19'}
+ '@typescript-eslint/typescript-estree@8.48.1':
+ resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@rsbuild/core': '>=1.0.2'
- '@tanstack/react-router': ^1.167.0
- vite: '>=5.0.0 || >=6.0.0 || >=7.0.0'
- vite-plugin-solid: ^2.11.10
- webpack: '>=5.92.0'
- peerDependenciesMeta:
- '@rsbuild/core':
- optional: true
- '@tanstack/react-router':
- optional: true
- vite:
- optional: true
- vite-plugin-solid:
- optional: true
- webpack:
- optional: true
+ typescript: '>=4.8.4 <6.0.0'
- '@tanstack/router-ssr-query-core@1.166.7':
- resolution: {integrity: sha512-NXUcZtT5uR67dRPl7s6/17ThXtXERCQN10STO5JRNuvlzwblY9e/QOr04W7Q8IxlhrthL21J1PPuIZTdEBBPEQ==}
- engines: {node: '>=20.19'}
+ '@typescript-eslint/utils@8.48.1':
+ resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@tanstack/query-core': '>=5.90.0'
- '@tanstack/router-core': '>=1.127.0'
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
- '@tanstack/router-utils@1.161.4':
- resolution: {integrity: sha512-r8TpjyIZoqrXXaf2DDyjd44gjGBoyE+/oEaaH68yLI9ySPO1gUWmQENZ1MZnmBnpUGN24NOZxdjDLc8npK0SAw==}
- engines: {node: '>=20.19'}
+ '@typescript-eslint/visitor-keys@8.48.1':
+ resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@tanstack/start-client-core@1.166.8':
- resolution: {integrity: sha512-xaSrDN+J0yiA/yFzv9CQQOMK3iEEnCznQV7nlNr9uQ4HAn1djbKGIWSBPE4qA/77Bfisuon1u4laFLhJkpd0fg==}
- engines: {node: '>=22.12.0'}
+ '@unrs/resolver-binding-android-arm-eabi@1.11.1':
+ resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==}
+ cpu: [arm]
+ os: [android]
- '@tanstack/start-fn-stubs@1.161.4':
- resolution: {integrity: sha512-b8s6iSQ+ny0P4lGK0n3DKaL6EI7SECG0/89svDeYieVw2+MaFOJVcQo3rU3BUvmuOcIkgkE5IhdzkmzPXH6yfA==}
- engines: {node: '>=22.12.0'}
+ '@unrs/resolver-binding-android-arm64@1.11.1':
+ resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==}
+ cpu: [arm64]
+ os: [android]
- '@tanstack/start-plugin-core@1.166.11':
- resolution: {integrity: sha512-Eb+pfmbEQYt0mKJC+Fnd10aOJK0jeOemesre0DBHagB4nqRhASmwWT7XXEreR2g/6b9fy2HKzWi52/UQD0it9g==}
- engines: {node: '>=22.12.0'}
- peerDependencies:
- vite: '>=7.0.0'
+ '@unrs/resolver-binding-darwin-arm64@1.11.1':
+ resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==}
+ cpu: [arm64]
+ os: [darwin]
- '@tanstack/start-server-core@1.166.8':
- resolution: {integrity: sha512-mLqPB3SnOcLwCIv4tl/lmtL3E0CLtZyE9Sk4HoZ2JhxZyQ933oRQZeO2kt4z27lyBzddcT6xVayb774sjoEvcQ==}
- engines: {node: '>=22.12.0'}
+ '@unrs/resolver-binding-darwin-x64@1.11.1':
+ resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==}
+ cpu: [x64]
+ os: [darwin]
- '@tanstack/start-storage-context@1.166.8':
- resolution: {integrity: sha512-7N5aNVDpsPD8BH3xohA1XMldb2NnQer+qQ3sPv/qt4n8xtKlAAKy3u5Tz1L5ji0JsdLfvLdPdYLqC7egQvSaRQ==}
- engines: {node: '>=22.12.0'}
+ '@unrs/resolver-binding-freebsd-x64@1.11.1':
+ resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==}
+ cpu: [x64]
+ os: [freebsd]
- '@tanstack/store@0.9.2':
- resolution: {integrity: sha512-K013lUJEFJK2ofFQ/hZKJUmCnpcV00ebLyOyFOWQvyQHUOZp/iYO84BM6aOGiV81JzwbX0APTVmW8YI7yiG5oA==}
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
+ resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==}
+ cpu: [arm]
+ os: [linux]
- '@tanstack/virtual-file-routes@1.161.4':
- resolution: {integrity: sha512-42WoRePf8v690qG8yGRe/YOh+oHni9vUaUUfoqlS91U2scd3a5rkLtVsc6b7z60w3RogH0I00vdrC5AaeiZ18w==}
- engines: {node: '>=20.19'}
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
+ resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==}
+ cpu: [arm]
+ os: [linux]
- '@testing-library/dom@10.4.1':
- resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==}
- engines: {node: '>=18'}
+ '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
+ resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
+ cpu: [arm64]
+ os: [linux]
- '@testing-library/react@16.3.2':
- resolution: {integrity: sha512-XU5/SytQM+ykqMnAnvB2umaJNIOsLF3PVv//1Ew4CTcpz0/BRyy/af40qqrt7SjKpDdT1saBMc42CUok5gaw+g==}
- engines: {node: '>=18'}
- peerDependencies:
- '@testing-library/dom': ^10.0.0
- '@types/react': ^18.0.0 || ^19.0.0
- '@types/react-dom': ^18.0.0 || ^19.0.0
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
- '@types/react-dom':
- optional: true
+ '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
+ resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
+ cpu: [arm64]
+ os: [linux]
- '@tybys/wasm-util@0.10.1':
- resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
+ resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
+ cpu: [ppc64]
+ os: [linux]
- '@types/aria-query@5.0.4':
- resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
+ resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
+ cpu: [riscv64]
+ os: [linux]
- '@types/chai@5.2.3':
- resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+ '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
+ resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
+ cpu: [riscv64]
+ os: [linux]
- '@types/deep-eql@4.0.2':
- resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+ '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
+ resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
+ cpu: [s390x]
+ os: [linux]
- '@types/estree@1.0.8':
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
+ resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
+ cpu: [x64]
+ os: [linux]
- '@types/node@25.5.0':
- resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==}
+ '@unrs/resolver-binding-linux-x64-musl@1.11.1':
+ resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
+ cpu: [x64]
+ os: [linux]
- '@types/react-dom@19.2.3':
- resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
- peerDependencies:
- '@types/react': ^19.2.0
+ '@unrs/resolver-binding-wasm32-wasi@1.11.1':
+ resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
- '@types/react@19.2.14':
- resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
+ '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
+ resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==}
+ cpu: [arm64]
+ os: [win32]
- '@vitejs/plugin-react@6.0.1':
- resolution: {integrity: sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- peerDependencies:
- '@rolldown/plugin-babel': ^0.1.7 || ^0.2.0
- babel-plugin-react-compiler: ^1.0.0
- vite: ^8.0.0
- peerDependenciesMeta:
- '@rolldown/plugin-babel':
- optional: true
- babel-plugin-react-compiler:
- optional: true
+ '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
+ resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==}
+ cpu: [ia32]
+ os: [win32]
- '@vitest/expect@4.1.0':
- resolution: {integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==}
+ '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
+ resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==}
+ cpu: [x64]
+ os: [win32]
- '@vitest/mocker@4.1.0':
- resolution: {integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==}
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
- msw: ^2.4.9
- vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0
- peerDependenciesMeta:
- msw:
- optional: true
- vite:
- optional: true
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- '@vitest/pretty-format@4.1.0':
- resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==}
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
- '@vitest/runner@4.1.0':
- resolution: {integrity: sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==}
+ ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
- '@vitest/snapshot@4.1.0':
- resolution: {integrity: sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==}
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
- '@vitest/spy@4.1.0':
- resolution: {integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==}
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
- '@vitest/utils@4.1.0':
- resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==}
+ aria-query@5.3.2:
+ resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
+ engines: {node: '>= 0.4'}
- acorn@8.16.0:
- resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
- engines: {node: '>=0.4.0'}
- hasBin: true
+ array-buffer-byte-length@1.0.2:
+ resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
+ engines: {node: '>= 0.4'}
- agent-base@7.1.4:
- resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
- engines: {node: '>= 14'}
+ array-includes@3.1.9:
+ resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
+ engines: {node: '>= 0.4'}
- ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
+ array.prototype.findlast@1.2.5:
+ resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
+ engines: {node: '>= 0.4'}
- ansi-styles@5.2.0:
- resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
- engines: {node: '>=10'}
+ array.prototype.findlastindex@1.2.6:
+ resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==}
+ engines: {node: '>= 0.4'}
- ansis@4.2.0:
- resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
- engines: {node: '>=14'}
+ array.prototype.flat@1.3.3:
+ resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
+ engines: {node: '>= 0.4'}
- anymatch@3.1.3:
- resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
- engines: {node: '>= 8'}
+ array.prototype.flatmap@1.3.3:
+ resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
+ engines: {node: '>= 0.4'}
- argparse@2.0.1:
- resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ array.prototype.tosorted@1.1.4:
+ resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
+ engines: {node: '>= 0.4'}
- aria-query@5.3.0:
- resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
+ arraybuffer.prototype.slice@1.0.4:
+ resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
+ engines: {node: '>= 0.4'}
- array-timsort@1.0.3:
- resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==}
+ ast-types-flow@0.0.8:
+ resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
- assertion-error@2.0.1:
- resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
- engines: {node: '>=12'}
+ async-function@1.0.0:
+ resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
+ engines: {node: '>= 0.4'}
- ast-types@0.16.1:
- resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
- engines: {node: '>=4'}
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
- babel-dead-code-elimination@1.0.12:
- resolution: {integrity: sha512-GERT7L2TiYcYDtYk1IpD+ASAYXjKbLTDPhBtYj7X1NuRMDTMtAx9kyBenub1Ev41lo91OHCKdmP+egTDmfQ7Ig==}
+ axe-core@4.11.0:
+ resolution: {integrity: sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==}
+ engines: {node: '>=4'}
- baseline-browser-mapping@2.10.7:
- resolution: {integrity: sha512-1ghYO3HnxGec0TCGBXiDLVns4eCSx4zJpxnHrlqFQajmhfKMQBzUGDdkMK7fUW7PTHTeLf+j87aTuKuuwWzMGw==}
- engines: {node: '>=6.0.0'}
- hasBin: true
+ axobject-query@4.1.0:
+ resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
+ engines: {node: '>= 0.4'}
- bidi-js@1.0.3:
- resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==}
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
- binary-extensions@2.3.0:
- resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
- engines: {node: '>=8'}
+ baseline-browser-mapping@2.9.3:
+ resolution: {integrity: sha512-8QdH6czo+G7uBsNo0GiUfouPN1lRzKdJTGnKXwe12gkFbnnOUaUKGN55dMkfy+mnxmvjwl9zcI4VncczcVXDhA==}
+ hasBin: true
- blake3-wasm@2.1.5:
- resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==}
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
- boolbase@1.0.0:
- resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
@@ -1481,1439 +831,1349 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
- caniuse-lite@1.0.30001778:
- resolution: {integrity: sha512-PN7uxFL+ExFJO61aVmP1aIEG4i9whQd4eoSCebav62UwDyp5OHh06zN4jqKSMePVgxHifCw1QJxdRkA1Pisekg==}
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
- chai@6.2.2:
- resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
- engines: {node: '>=18'}
+ call-bind@1.0.8:
+ resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ engines: {node: '>= 0.4'}
- chalk@5.6.2:
- resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
- engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ call-bound@1.0.4:
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
- cheerio-select@2.1.0:
- resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
- cheerio@1.2.0:
- resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==}
- engines: {node: '>=20.18.1'}
+ camelize@1.0.1:
+ resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==}
- chokidar@3.6.0:
- resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
- engines: {node: '>= 8.10.0'}
+ caniuse-lite@1.0.30001759:
+ resolution: {integrity: sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==}
- clsx@2.1.1:
- resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
- engines: {node: '>=6'}
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
- commander@11.1.0:
- resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
- engines: {node: '>=16'}
+ client-only@0.0.1:
+ resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
- comment-json@4.6.2:
- resolution: {integrity: sha512-R2rze/hDX30uul4NZoIZ76ImSJLFxn/1/ZxtKC1L77y2X1k+yYu1joKbAtMA2Fg3hZrTOiw0I5mwVMo0cf250w==}
- engines: {node: '>= 6'}
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
- consola@3.4.0:
- resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==}
- engines: {node: ^14.18.0 || >=16.10.0}
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
- cookie-es@2.0.0:
- resolution: {integrity: sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==}
-
- cookie@1.1.1:
- resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
- engines: {node: '>=18'}
-
- css-select@5.2.2:
- resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
- css-tree@3.2.1:
- resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==}
- engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+ css-color-keywords@1.0.0:
+ resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==}
+ engines: {node: '>=4'}
- css-what@6.2.2:
- resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
- engines: {node: '>= 6'}
+ css-to-react-native@3.2.0:
+ resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==}
- cssstyle@6.2.0:
- resolution: {integrity: sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==}
- engines: {node: '>=20'}
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
csstype@3.2.3:
resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
- data-urls@7.0.0:
- resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==}
- engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
+ damerau-levenshtein@1.0.8:
+ resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
- dayjs@1.11.20:
- resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==}
+ data-view-buffer@1.0.2:
+ resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
+ engines: {node: '>= 0.4'}
- debug@4.4.3:
- resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
- engines: {node: '>=6.0'}
+ data-view-byte-length@1.0.2:
+ resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-offset@1.0.1:
+ resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
+ engines: {node: '>= 0.4'}
+
+ debug@3.2.7:
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
- decimal.js@10.6.0:
- resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
-
- dedent@1.5.1:
- resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==}
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
peerDependencies:
- babel-plugin-macros: ^3.1.0
+ supports-color: '*'
peerDependenciesMeta:
- babel-plugin-macros:
+ supports-color:
optional: true
- dequal@2.0.3:
- resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
- engines: {node: '>=6'}
-
- detect-libc@2.1.2:
- resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
- engines: {node: '>=8'}
+ decimal.js@10.6.0:
+ resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
- diff@8.0.3:
- resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==}
- engines: {node: '>=0.3.1'}
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
- dom-accessibility-api@0.5.16:
- resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
- dom-serializer@2.0.0:
- resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
- domelementtype@2.3.0:
- resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
- domhandler@5.0.3:
- resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
- engines: {node: '>= 4'}
+ doctrine@2.1.0:
+ resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
+ engines: {node: '>=0.10.0'}
- domutils@3.2.2:
- resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
- electron-to-chromium@1.5.313:
- resolution: {integrity: sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==}
+ electron-to-chromium@1.5.266:
+ resolution: {integrity: sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==}
- encoding-sniffer@0.2.1:
- resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==}
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
- enhanced-resolve@5.20.0:
- resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==}
- engines: {node: '>=10.13.0'}
+ es-abstract@1.24.0:
+ resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==}
+ engines: {node: '>= 0.4'}
- entities@4.5.0:
- resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
- engines: {node: '>=0.12'}
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
- entities@6.0.1:
- resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
- engines: {node: '>=0.12'}
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
- entities@7.0.1:
- resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
- engines: {node: '>=0.12'}
+ es-iterator-helpers@1.2.1:
+ resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
+ engines: {node: '>= 0.4'}
- error-stack-parser-es@1.0.5:
- resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==}
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
- es-module-lexer@2.0.0:
- resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
- esbuild@0.27.3:
- resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==}
- engines: {node: '>=18'}
- hasBin: true
+ es-shim-unscopables@1.1.0:
+ resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
+ engines: {node: '>= 0.4'}
- esbuild@0.27.4:
- resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==}
- engines: {node: '>=18'}
- hasBin: true
+ es-to-primitive@1.3.0:
+ resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
+ engines: {node: '>= 0.4'}
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
- esprima@4.0.1:
- resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
- engines: {node: '>=4'}
- hasBin: true
-
- estree-walker@3.0.3:
- resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
- expect-type@1.3.0:
- resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
- engines: {node: '>=12.0.0'}
+ eslint-config-next@16.0.7:
+ resolution: {integrity: sha512-WubFGLFHfk2KivkdRGfx6cGSFhaQqhERRfyO8BRx+qiGPGp7WLKcPvYC4mdx1z3VhVRcrfFzczjjTrbJZOpnEQ==}
+ peerDependencies:
+ eslint: '>=9.0.0'
+ typescript: '>=3.3.1'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
- exsolve@1.0.8:
- resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
+ eslint-import-resolver-node@0.3.9:
+ resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
- fdir@6.5.0:
- resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
- engines: {node: '>=12.0.0'}
+ eslint-import-resolver-typescript@3.10.1:
+ resolution: {integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
- picomatch: ^3 || ^4
+ eslint: '*'
+ eslint-plugin-import: '*'
+ eslint-plugin-import-x: '*'
peerDependenciesMeta:
- picomatch:
+ eslint-plugin-import:
+ optional: true
+ eslint-plugin-import-x:
optional: true
- fill-range@7.1.1:
- resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
- engines: {node: '>=8'}
-
- framer-motion@12.36.0:
- resolution: {integrity: sha512-4PqYHAT7gev0ke0wos+PyrcFxI0HScjm3asgU8nSYa8YzJFuwgIvdj3/s3ZaxLq0bUSboIn19A2WS/MHwLCvfw==}
+ eslint-module-utils@2.12.1:
+ resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==}
+ engines: {node: '>=4'}
peerDependencies:
- '@emotion/is-prop-valid': '*'
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
+ '@typescript-eslint/parser': '*'
+ eslint: '*'
+ eslint-import-resolver-node: '*'
+ eslint-import-resolver-typescript: '*'
+ eslint-import-resolver-webpack: '*'
peerDependenciesMeta:
- '@emotion/is-prop-valid':
+ '@typescript-eslint/parser':
optional: true
- react:
+ eslint:
optional: true
- react-dom:
+ eslint-import-resolver-node:
+ optional: true
+ eslint-import-resolver-typescript:
+ optional: true
+ eslint-import-resolver-webpack:
optional: true
- fsevents@2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
+ eslint-plugin-import@2.32.0:
+ resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ '@typescript-eslint/parser': '*'
+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
+ peerDependenciesMeta:
+ '@typescript-eslint/parser':
+ optional: true
- fsevents@2.3.3:
- resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
+ eslint-plugin-jsx-a11y@6.10.2:
+ resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
- gensync@1.0.0-beta.2:
- resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
- engines: {node: '>=6.9.0'}
+ eslint-plugin-react-hooks@7.0.1:
+ resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
- get-tsconfig@4.13.6:
- resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
+ eslint-plugin-react@7.37.5:
+ resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==}
+ engines: {node: '>=4'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
- glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
+ eslint-scope@8.4.0:
+ resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- goober@2.1.18:
- resolution: {integrity: sha512-2vFqsaDVIT9Gz7N6kAL++pLpp41l3PfDuusHcjnGLfR6+huZkl6ziX+zgVC3ZxpqWhzH6pyDdGrCeDhMIvwaxw==}
- peerDependencies:
- csstype: ^3.0.10
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ eslint-visitor-keys@4.2.1:
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- h3@2.0.1-rc.16:
- resolution: {integrity: sha512-h+pjvyujdo9way8qj6FUbhaQcHlR8FEq65EhTX9ViT5pK8aLj68uFl4hBkF+hsTJAH+H1END2Yv6hTIsabGfag==}
- engines: {node: '>=20.11.1'}
+ eslint@9.39.1:
+ resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
- crossws: ^0.4.1
+ jiti: '*'
peerDependenciesMeta:
- crossws:
+ jiti:
optional: true
- html-encoding-sniffer@6.0.0:
- resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==}
- engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
-
- htmlparser2@10.1.0:
- resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==}
-
- http-proxy-agent@7.0.2:
- resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
- engines: {node: '>= 14'}
+ espree@10.4.0:
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- https-proxy-agent@7.0.6:
- resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
- engines: {node: '>= 14'}
+ esquery@1.6.0:
+ resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
+ engines: {node: '>=0.10'}
- human-id@4.1.3:
- resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==}
- hasBin: true
-
- iconv-lite@0.6.3:
- resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
- engines: {node: '>=0.10.0'}
-
- is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
- is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
- is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
- is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
-
- is-potential-custom-element-name@1.0.1:
- resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
-
- isbot@5.1.36:
- resolution: {integrity: sha512-C/ZtXyJqDPZ7G7JPr06ApWyYoHjYexQbS6hPYD4WYCzpv2Qes6Z+CCEfTX4Owzf+1EJ933PoI2p+B9v7wpGZBQ==}
- engines: {node: '>=18'}
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- jiti@2.6.1:
- resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
- hasBin: true
+ fast-glob@3.3.1:
+ resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
+ engines: {node: '>=8.6.0'}
- js-sha256@0.11.1:
- resolution: {integrity: sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==}
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
- js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- js-yaml@4.1.1:
- resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
- hasBin: true
+ fastq@1.19.1:
+ resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
- jsdom@28.1.0:
- resolution: {integrity: sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==}
- engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
peerDependencies:
- canvas: ^3.0.0
+ picomatch: ^3 || ^4
peerDependenciesMeta:
- canvas:
+ picomatch:
optional: true
- jsesc@3.1.0:
- resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
- engines: {node: '>=6'}
- hasBin: true
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
- json5@2.2.3:
- resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
- engines: {node: '>=6'}
- hasBin: true
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
- kleur@4.1.5:
- resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
- engines: {node: '>=6'}
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
- kysely@0.27.6:
- resolution: {integrity: sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ==}
- engines: {node: '>=14.0.0'}
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
- launch-editor@2.13.1:
- resolution: {integrity: sha512-lPSddlAAluRKJ7/cjRFoXUFzaX7q/YKI7yPHuEvSJVqoXvFnJov1/Ud87Aa4zULIbA9Nja4mSPK8l0z/7eV2wA==}
+ flatted@3.3.3:
+ resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
- lightningcss-android-arm64@1.31.1:
- resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [android]
+ for-each@0.3.5:
+ resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
+ engines: {node: '>= 0.4'}
- lightningcss-android-arm64@1.32.0:
- resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [android]
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- lightningcss-darwin-arm64@1.31.1:
- resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [darwin]
+ function.prototype.name@1.1.8:
+ resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
+ engines: {node: '>= 0.4'}
- lightningcss-darwin-arm64@1.32.0:
- resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [darwin]
+ functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
- lightningcss-darwin-x64@1.31.1:
- resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [darwin]
+ generator-function@2.0.1:
+ resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
+ engines: {node: '>= 0.4'}
- lightningcss-darwin-x64@1.32.0:
- resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [darwin]
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
- lightningcss-freebsd-x64@1.31.1:
- resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [freebsd]
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
- lightningcss-freebsd-x64@1.32.0:
- resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [freebsd]
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
- lightningcss-linux-arm-gnueabihf@1.31.1:
- resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm]
- os: [linux]
+ get-symbol-description@1.1.0:
+ resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
+ engines: {node: '>= 0.4'}
- lightningcss-linux-arm-gnueabihf@1.32.0:
- resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm]
- os: [linux]
+ get-tsconfig@4.13.0:
+ resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==}
- lightningcss-linux-arm64-gnu@1.31.1:
- resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
- lightningcss-linux-arm64-gnu@1.32.0:
- resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
- lightningcss-linux-arm64-musl@1.31.1:
- resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
- lightningcss-linux-arm64-musl@1.32.0:
- resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
+ globals@16.4.0:
+ resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==}
+ engines: {node: '>=18'}
- lightningcss-linux-x64-gnu@1.31.1:
- resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
+ globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+ engines: {node: '>= 0.4'}
- lightningcss-linux-x64-gnu@1.32.0:
- resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
- lightningcss-linux-x64-musl@1.31.1:
- resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
+ graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
- lightningcss-linux-x64-musl@1.32.0:
- resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
+ has-bigints@1.1.0:
+ resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
+ engines: {node: '>= 0.4'}
- lightningcss-win32-arm64-msvc@1.31.1:
- resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [win32]
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
- lightningcss-win32-arm64-msvc@1.32.0:
- resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [win32]
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
- lightningcss-win32-x64-msvc@1.31.1:
- resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [win32]
+ has-proto@1.2.0:
+ resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
+ engines: {node: '>= 0.4'}
- lightningcss-win32-x64-msvc@1.32.0:
- resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [win32]
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
- lightningcss@1.31.1:
- resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==}
- engines: {node: '>= 12.0.0'}
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
- lightningcss@1.32.0:
- resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
- engines: {node: '>= 12.0.0'}
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
- lru-cache@11.2.7:
- resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==}
- engines: {node: 20 || >=22}
+ hermes-estree@0.25.1:
+ resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==}
- lru-cache@5.1.1:
- resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ hermes-parser@0.25.1:
+ resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==}
- lucide-react@0.577.0:
- resolution: {integrity: sha512-4LjoFv2eEPwYDPg/CUdBJQSDfPyzXCRrVW1X7jrx/trgxnxkHFjnVZINbzvzxjN70dxychOfg+FTYwBiS3pQ5A==}
- peerDependencies:
- react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ hoist-non-react-statics@3.3.2:
+ resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
- lz-string@1.5.0:
- resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
- hasBin: true
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
- magic-string@0.30.21:
- resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+ ignore@7.0.5:
+ resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
+ engines: {node: '>= 4'}
- mdn-data@2.27.1:
- resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==}
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
- miniflare@4.20260312.0:
- resolution: {integrity: sha512-pieP2rfXynPT6VRINYaiHe/tfMJ4c5OIhqRlIdLF6iZ9g5xgpEmvimvIgMpgAdDJuFlrLcwDUi8MfAo2R6dt/w==}
- engines: {node: '>=18.0.0'}
- hasBin: true
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
- motion-dom@12.36.0:
- resolution: {integrity: sha512-Ep1pq8P88rGJ75om8lTCA13zqd7ywPGwCqwuWwin6BKc0hMLkVfcS6qKlRqEo2+t0DwoUcgGJfXwaiFn4AOcQA==}
+ internal-slot@1.1.0:
+ resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
+ engines: {node: '>= 0.4'}
- motion-utils@12.36.0:
- resolution: {integrity: sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==}
+ intl-messageformat@10.7.18:
+ resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==}
- motion@12.36.0:
- resolution: {integrity: sha512-5BMQuktYUX8aEByKWYx5tR4X3G08H2OMgp46wTxZ4o7CDDstyy4A0fe9RLNMjZiwvntCWGDvs16sC87/emz4Yw==}
- peerDependencies:
- '@emotion/is-prop-valid': '*'
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
- peerDependenciesMeta:
- '@emotion/is-prop-valid':
- optional: true
- react:
- optional: true
- react-dom:
- optional: true
+ is-array-buffer@3.0.5:
+ resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
+ engines: {node: '>= 0.4'}
- ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ is-async-function@2.1.1:
+ resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
+ engines: {node: '>= 0.4'}
- nanoid@3.3.11:
- resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
+ is-bigint@1.1.0:
+ resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
+ engines: {node: '>= 0.4'}
- node-releases@2.0.36:
- resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==}
+ is-boolean-object@1.2.2:
+ resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
+ engines: {node: '>= 0.4'}
- normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
+ is-bun-module@2.0.0:
+ resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==}
- nth-check@2.1.1:
- resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
- obug@2.1.1:
- resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
- parse5-htmlparser2-tree-adapter@7.1.0:
- resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
+ is-data-view@1.0.2:
+ resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
+ engines: {node: '>= 0.4'}
- parse5-parser-stream@7.1.2:
- resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==}
+ is-date-object@1.1.0:
+ resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
+ engines: {node: '>= 0.4'}
- parse5@7.3.0:
- resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
- parse5@8.0.0:
- resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==}
+ is-finalizationregistry@1.1.1:
+ resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
+ engines: {node: '>= 0.4'}
- path-to-regexp@6.3.0:
- resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
+ is-generator-function@1.1.2:
+ resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
+ engines: {node: '>= 0.4'}
- pathe@2.0.3:
- resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
- picocolors@1.1.1:
- resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+ is-map@2.0.3:
+ resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
+ engines: {node: '>= 0.4'}
- picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
+ is-negative-zero@2.0.3:
+ resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
+ engines: {node: '>= 0.4'}
- picomatch@4.0.3:
- resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
- engines: {node: '>=12'}
+ is-number-object@1.1.1:
+ resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
+ engines: {node: '>= 0.4'}
- playwright-core@1.58.2:
- resolution: {integrity: sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==}
- engines: {node: '>=18'}
- hasBin: true
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
- playwright@1.58.2:
- resolution: {integrity: sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==}
- engines: {node: '>=18'}
- hasBin: true
+ is-regex@1.2.1:
+ resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
+ engines: {node: '>= 0.4'}
- postcss@8.5.8:
- resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==}
- engines: {node: ^10 || ^12 || >=14}
+ is-set@2.0.3:
+ resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
+ engines: {node: '>= 0.4'}
- prettier@3.8.1:
- resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
- engines: {node: '>=14'}
- hasBin: true
+ is-shared-array-buffer@1.0.4:
+ resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
+ engines: {node: '>= 0.4'}
- pretty-format@27.5.1:
- resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
- engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+ is-string@1.1.1:
+ resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
+ engines: {node: '>= 0.4'}
- punycode@2.3.1:
- resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
- engines: {node: '>=6'}
+ is-symbol@1.1.1:
+ resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
+ engines: {node: '>= 0.4'}
- react-dom@19.2.4:
- resolution: {integrity: sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==}
- peerDependencies:
- react: ^19.2.4
+ is-typed-array@1.1.15:
+ resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
+ engines: {node: '>= 0.4'}
- react-is@17.0.2:
- resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
+ is-weakmap@2.0.2:
+ resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
+ engines: {node: '>= 0.4'}
- react@19.2.4:
- resolution: {integrity: sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
- engines: {node: '>=0.10.0'}
+ is-weakref@1.1.1:
+ resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
+ engines: {node: '>= 0.4'}
- readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
+ is-weakset@2.0.4:
+ resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
+ engines: {node: '>= 0.4'}
- recast@0.23.11:
- resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
- engines: {node: '>= 4'}
+ isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
- require-from-string@2.0.2:
- resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
- engines: {node: '>=0.10.0'}
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ iterator.prototype@1.1.5:
+ resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
+ engines: {node: '>= 0.4'}
- reselect@5.1.1:
- resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==}
+ javascript-natural-sort@0.7.1:
+ resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==}
- resolve-pkg-maps@1.0.0:
- resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
- rolldown@1.0.0-rc.9:
- resolution: {integrity: sha512-9EbgWge7ZH+yqb4d2EnELAntgPTWbfL8ajiTW+SyhJEC4qhBbkCKbqFV4Ge4zmu5ziQuVbWxb/XwLZ+RIO7E8Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
- rou3@0.8.1:
- resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==}
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
- safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
- saxes@6.0.0:
- resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
- engines: {node: '>=v12.22.7'}
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
- scheduler@0.27.0:
- resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
- semver@6.3.1:
- resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ json5@1.0.2:
+ resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
- semver@7.7.4:
- resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
- engines: {node: '>=10'}
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
hasBin: true
- seroval-plugins@1.5.1:
- resolution: {integrity: sha512-4FbuZ/TMl02sqv0RTFexu0SP6V+ywaIe5bAWCCEik0fk17BhALgwvUDVF7e3Uvf9pxmwCEJsRPmlkUE6HdzLAw==}
- engines: {node: '>=10'}
- peerDependencies:
- seroval: ^1.0
-
- seroval@1.5.1:
- resolution: {integrity: sha512-OwrZRZAfhHww0WEnKHDY8OM0U/Qs8OTfIDWhUD4BLpNJUfXK4cGmjiagGze086m+mhI+V2nD0gfbHEnJjb9STA==}
- engines: {node: '>=10'}
+ jsx-ast-utils@3.3.5:
+ resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
+ engines: {node: '>=4.0'}
- sharp@0.34.5:
- resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==}
- engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-
- shell-quote@1.8.3:
- resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
- engines: {node: '>= 0.4'}
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
- siginfo@2.0.0:
- resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+ language-subtag-registry@0.3.23:
+ resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
- solid-js@1.9.11:
- resolution: {integrity: sha512-WEJtcc5mkh/BnHA6Yrg4whlF8g6QwpmXXRg4P2ztPmcKeHHlH4+djYecBLhSpecZY2RRECXYUwIc/C2r3yzQ4Q==}
+ language-tags@1.0.9:
+ resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
+ engines: {node: '>=0.10'}
- source-map-js@1.2.1:
- resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
- engines: {node: '>=0.10.0'}
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
- source-map@0.6.1:
- resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
- engines: {node: '>=0.10.0'}
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
- source-map@0.7.6:
- resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
- engines: {node: '>= 12'}
+ lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
- sqlite-wasm-kysely@0.3.0:
- resolution: {integrity: sha512-TzjBNv7KwRw6E3pdKdlRyZiTmUIE0UttT/Sl56MVwVARl/u5gp978KepazCJZewFUnlWHz9i3NQd4kOtP/Afdg==}
- peerDependencies:
- kysely: '*'
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
- srvx@0.11.9:
- resolution: {integrity: sha512-97wWJS6F0KTKAhDlHVmBzMvlBOp5FiNp3XrLoodIgYJpXxgG5tE9rX4Pg7s46n2shI4wtEsMATTS1+rI3/ubzA==}
- engines: {node: '>=20.16.0'}
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
- stackback@0.0.2:
- resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
- std-env@4.0.0:
- resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==}
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
- supports-color@10.2.2:
- resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
- engines: {node: '>=18'}
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
- symbol-tree@3.2.4:
- resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
- tabbable@6.4.0:
- resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==}
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
- tailwindcss@4.2.1:
- resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==}
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
- tapable@2.3.0:
- resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
- engines: {node: '>=6'}
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
- tiny-invariant@1.3.3:
- resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
- tiny-warning@1.0.3:
- resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
- tinybench@2.9.0:
- resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+ napi-postinstall@0.3.4:
+ resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ hasBin: true
- tinyexec@1.0.4:
- resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==}
- engines: {node: '>=18'}
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
- tinyglobby@0.2.15:
- resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
- engines: {node: '>=12.0.0'}
+ negotiator@1.0.0:
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
- tinyrainbow@3.1.0:
- resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
- engines: {node: '>=14.0.0'}
+ next-intl-swc-plugin-extractor@4.5.8:
+ resolution: {integrity: sha512-hscCKUv+5GQ0CCNbvqZ8gaxnAGToCgDTbL++jgCq8SCk/ljtZDEeQZcMk46Nm6Ynn49Q/JKF4Npo/Sq1mpbusA==}
- tldts-core@7.0.25:
- resolution: {integrity: sha512-ZjCZK0rppSBu7rjHYDYsEaMOIbbT+nWF57hKkv4IUmZWBNrBWBOjIElc0mKRgLM8bm7x/BBlof6t2gi/Oq/Asw==}
+ next-intl@4.5.8:
+ resolution: {integrity: sha512-BdN6494nvt09WtmW5gbWdwRhDDHC/Sg7tBMhN7xfYds3vcRCngSDXat81gmJkblw9jYOv8zXzzFJyu5VYXnJzg==}
+ peerDependencies:
+ next: ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
+ typescript: ^5.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
- tldts@7.0.25:
- resolution: {integrity: sha512-keinCnPbwXEUG3ilrWQZU+CqcTTzHq9m2HhoUP2l7Xmi8l1LuijAXLpAJ5zRW+ifKTNscs4NdCkfkDCBYm352w==}
+ next@16.0.7:
+ resolution: {integrity: sha512-3mBRJyPxT4LOxAJI6IsXeFtKfiJUbjCLgvXO02fV8Wy/lIhPvP94Fe7dGhUgHXcQy4sSuYwQNcOLhIfOm0rL0A==}
+ engines: {node: '>=20.9.0'}
hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.1.0
+ '@playwright/test': ^1.51.1
+ babel-plugin-react-compiler: '*'
+ react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
+ sass: ^1.3.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ '@playwright/test':
+ optional: true
+ babel-plugin-react-compiler:
+ optional: true
+ sass:
+ optional: true
- to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
- tough-cookie@6.0.1:
- resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==}
- engines: {node: '>=16'}
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
- tr46@6.0.0:
- resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==}
- engines: {node: '>=20'}
+ object-inspect@1.13.4:
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
+ engines: {node: '>= 0.4'}
- tslib@2.8.1:
- resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
- tsx@4.21.0:
- resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
- engines: {node: '>=18.0.0'}
- hasBin: true
+ object.assign@4.1.7:
+ resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
+ engines: {node: '>= 0.4'}
- typescript@5.9.3:
- resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
- engines: {node: '>=14.17'}
- hasBin: true
+ object.entries@1.1.9:
+ resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==}
+ engines: {node: '>= 0.4'}
- ufo@1.6.3:
- resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
+ object.fromentries@2.0.8:
+ resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
+ engines: {node: '>= 0.4'}
- undici-types@7.18.2:
- resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
+ object.groupby@1.0.3:
+ resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
+ engines: {node: '>= 0.4'}
- undici@7.18.2:
- resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==}
- engines: {node: '>=20.18.1'}
+ object.values@1.2.1:
+ resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
+ engines: {node: '>= 0.4'}
- undici@7.24.2:
- resolution: {integrity: sha512-P9J1HWYV/ajFr8uCqk5QixwiRKmB1wOamgS0e+o2Z4A44Ej2+thFVRLG/eA7qprx88XXhnV5Bl8LHXTURpzB3Q==}
- engines: {node: '>=20.18.1'}
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
- unenv@2.0.0-rc.24:
- resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==}
+ own-keys@1.0.1:
+ resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
+ engines: {node: '>= 0.4'}
- unplugin@2.3.11:
- resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
- engines: {node: '>=18.12.0'}
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
- update-browserslist-db@1.2.3:
- resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
- urlpattern-polyfill@10.1.0:
- resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==}
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
- use-sync-external-store@1.6.0:
- resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ parse-imports-exports@0.2.4:
+ resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==}
- uuid@10.0.0:
- resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==}
- hasBin: true
+ parse-statements@1.0.11:
+ resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==}
- uuid@13.0.0:
- resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==}
- hasBin: true
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
- vite@8.0.0:
- resolution: {integrity: sha512-fPGaRNj9Zytaf8LEiBhY7Z6ijnFKdzU/+mL8EFBaKr7Vw1/FWcTBAMW0wLPJAGMPX38ZPVCVgLceWiEqeoqL2Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
- peerDependencies:
- '@types/node': ^20.19.0 || >=22.12.0
- '@vitejs/devtools': ^0.0.0-alpha.31
- esbuild: ^0.27.0
- jiti: '>=1.21.0'
- less: ^4.0.0
- sass: ^1.70.0
- sass-embedded: ^1.70.0
- stylus: '>=0.54.8'
- sugarss: ^5.0.0
- terser: ^5.16.0
- tsx: ^4.8.1
- yaml: ^2.4.2
- peerDependenciesMeta:
- '@types/node':
- optional: true
- '@vitejs/devtools':
- optional: true
- esbuild:
- optional: true
- jiti:
- optional: true
- less:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
- tsx:
- optional: true
- yaml:
- optional: true
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
- vitefu@1.1.2:
- resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==}
- peerDependencies:
- vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0
- peerDependenciesMeta:
- vite:
- optional: true
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
- vitest@4.1.0:
- resolution: {integrity: sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==}
- engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
- hasBin: true
- peerDependencies:
- '@edge-runtime/vm': '*'
- '@opentelemetry/api': ^1.9.0
- '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
- '@vitest/browser-playwright': 4.1.0
- '@vitest/browser-preview': 4.1.0
- '@vitest/browser-webdriverio': 4.1.0
- '@vitest/ui': 4.1.0
- happy-dom: '*'
- jsdom: '*'
- vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0
- peerDependenciesMeta:
- '@edge-runtime/vm':
- optional: true
- '@opentelemetry/api':
- optional: true
- '@types/node':
- optional: true
- '@vitest/browser-playwright':
- optional: true
- '@vitest/browser-preview':
- optional: true
- '@vitest/browser-webdriverio':
- optional: true
- '@vitest/ui':
- optional: true
- happy-dom:
- optional: true
- jsdom:
- optional: true
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
- w3c-xmlserializer@5.0.0:
- resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
- engines: {node: '>=18'}
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
- webidl-conversions@8.0.1:
- resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==}
- engines: {node: '>=20'}
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
- webpack-virtual-modules@0.6.2:
- resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+ po-parser@1.0.2:
+ resolution: {integrity: sha512-yTIQL8PZy7V8c0psPoJUx7fayez+Mo/53MZgX9MPuPHx+Dt+sRPNuRbI+6Oqxnddhkd68x4Nlgon/zizL1Xg+w==}
- whatwg-encoding@3.1.1:
- resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
- engines: {node: '>=18'}
- deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation
+ possible-typed-array-names@1.1.0:
+ resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
+ engines: {node: '>= 0.4'}
- whatwg-mimetype@4.0.0:
- resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
- engines: {node: '>=18'}
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
- whatwg-mimetype@5.0.0:
- resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==}
- engines: {node: '>=20'}
+ postcss@8.4.31:
+ resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
+ engines: {node: ^10 || ^12 || >=14}
- whatwg-url@16.0.1:
- resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==}
- engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
+ postcss@8.4.49:
+ resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
+ engines: {node: ^10 || ^12 || >=14}
- why-is-node-running@2.3.0:
- resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
- engines: {node: '>=8'}
- hasBin: true
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
- workerd@1.20260312.1:
- resolution: {integrity: sha512-nNpPkw9jaqo79B+iBCOiksx+N62xC+ETIfyzofUEdY3cSOHJg6oNnVSHm7vHevzVblfV76c8Gr0cXHEapYMBEg==}
- engines: {node: '>=16'}
+ prettier@3.7.4:
+ resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
+ engines: {node: '>=14'}
hasBin: true
- wrangler@4.73.0:
- resolution: {integrity: sha512-VJXsqKDFCp6OtFEHXITSOR5kh95JOknwPY8m7RyQuWJQguSybJy43m4vhoCSt42prutTef7eeuw7L4V4xiynGw==}
- engines: {node: '>=20.0.0'}
- hasBin: true
- peerDependencies:
- '@cloudflare/workers-types': ^4.20260312.1
- peerDependenciesMeta:
- '@cloudflare/workers-types':
- optional: true
+ prop-types@15.8.1:
+ resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
- ws@8.18.0:
- resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: '>=5.0.2'
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
- ws@8.19.0:
- resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
- engines: {node: '>=10.0.0'}
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ react-dom@19.2.1:
+ resolution: {integrity: sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==}
peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: '>=5.0.2'
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
+ react: ^19.2.1
- xml-name-validator@5.0.0:
- resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
- engines: {node: '>=18'}
+ react-is@16.13.1:
+ resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
- xmlbuilder2@4.0.3:
- resolution: {integrity: sha512-bx8Q1STctnNaaDymWnkfQLKofs0mGNN7rLLapJlGuV3VlvegD7Ls4ggMjE3aUSWItCCzU0PEv45lI87iSigiCA==}
- engines: {node: '>=20.0'}
+ react-is@19.2.1:
+ resolution: {integrity: sha512-L7BnWgRbMwzMAubQcS7sXdPdNLmKlucPlopgAzx7FtYbksWZgEWiuYM5x9T6UqS2Ne0rsgQTq5kY2SGqpzUkYA==}
- xmlchars@2.2.0:
- resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
+ react@19.2.1:
+ resolution: {integrity: sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==}
+ engines: {node: '>=0.10.0'}
- yallist@3.1.1:
- resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ reflect.getprototypeof@1.0.10:
+ resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
+ engines: {node: '>= 0.4'}
- youch-core@0.3.3:
- resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==}
+ regexp.prototype.flags@1.5.4:
+ resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
+ engines: {node: '>= 0.4'}
- youch@4.1.0-beta.10:
- resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==}
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
- zod@3.25.76:
- resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
-snapshots:
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
- '@acemir/cssom@0.9.31': {}
+ resolve@2.0.0-next.5:
+ resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
+ hasBin: true
- '@asamuzakjp/css-color@5.0.1':
- dependencies:
- '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
- '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
- '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
- '@csstools/css-tokenizer': 4.0.0
- lru-cache: 11.2.7
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- '@asamuzakjp/dom-selector@6.8.1':
- dependencies:
- '@asamuzakjp/nwsapi': 2.3.9
- bidi-js: 1.0.3
- css-tree: 3.2.1
- is-potential-custom-element-name: 1.0.1
- lru-cache: 11.2.7
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
- '@asamuzakjp/nwsapi@2.3.9': {}
+ safe-array-concat@1.1.3:
+ resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
+ engines: {node: '>=0.4'}
- '@babel/code-frame@7.27.1':
- dependencies:
- '@babel/helper-validator-identifier': 7.28.5
- js-tokens: 4.0.0
- picocolors: 1.1.1
+ safe-push-apply@1.0.0:
+ resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
+ engines: {node: '>= 0.4'}
- '@babel/code-frame@7.29.0':
- dependencies:
- '@babel/helper-validator-identifier': 7.28.5
- js-tokens: 4.0.0
- picocolors: 1.1.1
+ safe-regex-test@1.1.0:
+ resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
+ engines: {node: '>= 0.4'}
- '@babel/compat-data@7.29.0': {}
+ scheduler@0.27.0:
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
- '@babel/core@7.29.0':
- dependencies:
- '@babel/code-frame': 7.29.0
- '@babel/generator': 7.29.1
- '@babel/helper-compilation-targets': 7.28.6
- '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
- '@babel/helpers': 7.28.6
- '@babel/parser': 7.29.0
- '@babel/template': 7.28.6
- '@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
- '@jridgewell/remapping': 2.3.5
- convert-source-map: 2.0.0
- debug: 4.4.3
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
- '@babel/generator@7.29.1':
- dependencies:
- '@babel/parser': 7.29.0
- '@babel/types': 7.29.0
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
- jsesc: 3.1.0
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
+ hasBin: true
- '@babel/helper-compilation-targets@7.28.6':
- dependencies:
- '@babel/compat-data': 7.29.0
- '@babel/helper-validator-option': 7.27.1
- browserslist: 4.28.1
- lru-cache: 5.1.1
- semver: 6.3.1
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
- '@babel/helper-globals@7.28.0': {}
+ set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+ engines: {node: '>= 0.4'}
- '@babel/helper-module-imports@7.28.6':
- dependencies:
- '@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
- transitivePeerDependencies:
- - supports-color
+ set-proto@1.0.0:
+ resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
+ engines: {node: '>= 0.4'}
- '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/helper-module-imports': 7.28.6
- '@babel/helper-validator-identifier': 7.28.5
- '@babel/traverse': 7.29.0
- transitivePeerDependencies:
- - supports-color
+ shallowequal@1.1.0:
+ resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
- '@babel/helper-plugin-utils@7.28.6': {}
+ sharp@0.34.5:
+ resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
- '@babel/helper-string-parser@7.27.1': {}
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
- '@babel/helper-validator-identifier@7.28.5': {}
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
- '@babel/helper-validator-option@7.27.1': {}
+ side-channel-list@1.0.0:
+ resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
+ engines: {node: '>= 0.4'}
- '@babel/helpers@7.28.6':
- dependencies:
- '@babel/template': 7.28.6
- '@babel/types': 7.29.0
+ side-channel-map@1.0.1:
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
- '@babel/parser@7.29.0':
- dependencies:
- '@babel/types': 7.29.0
+ side-channel-weakmap@1.0.2:
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
- '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/helper-plugin-utils': 7.28.6
+ side-channel@1.1.0:
+ resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
+ engines: {node: '>= 0.4'}
- '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/helper-plugin-utils': 7.28.6
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
- '@babel/runtime@7.28.6': {}
+ stable-hash@0.0.5:
+ resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
- '@babel/template@7.28.6':
- dependencies:
- '@babel/code-frame': 7.29.0
- '@babel/parser': 7.29.0
- '@babel/types': 7.29.0
+ stop-iteration-iterator@1.1.0:
+ resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
+ engines: {node: '>= 0.4'}
- '@babel/traverse@7.29.0':
- dependencies:
- '@babel/code-frame': 7.29.0
- '@babel/generator': 7.29.1
- '@babel/helper-globals': 7.28.0
- '@babel/parser': 7.29.0
- '@babel/template': 7.28.6
- '@babel/types': 7.29.0
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
+ string.prototype.includes@2.0.1:
+ resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==}
+ engines: {node: '>= 0.4'}
- '@babel/types@7.29.0':
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.28.5
+ string.prototype.matchall@4.0.12:
+ resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
+ engines: {node: '>= 0.4'}
- '@base-ui/react@1.3.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
- dependencies:
- '@babel/runtime': 7.28.6
- '@base-ui/utils': 0.2.6(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@floating-ui/react-dom': 2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@floating-ui/utils': 0.2.11
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- tabbable: 6.4.0
- use-sync-external-store: 1.6.0(react@19.2.4)
- optionalDependencies:
- '@types/react': 19.2.14
+ string.prototype.repeat@1.0.0:
+ resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
- '@base-ui/utils@0.2.6(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
- dependencies:
- '@babel/runtime': 7.28.6
- '@floating-ui/utils': 0.2.11
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- reselect: 5.1.1
- use-sync-external-store: 1.6.0(react@19.2.4)
- optionalDependencies:
- '@types/react': 19.2.14
+ string.prototype.trim@1.2.10:
+ resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
+ engines: {node: '>= 0.4'}
- '@bramus/specificity@2.4.2':
- dependencies:
- css-tree: 3.2.1
+ string.prototype.trimend@1.0.9:
+ resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
+ engines: {node: '>= 0.4'}
- '@cloudflare/kv-asset-handler@0.4.2': {}
+ string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+ engines: {node: '>= 0.4'}
- '@cloudflare/unenv-preset@2.15.0(unenv@2.0.0-rc.24)(workerd@1.20260312.1)':
- dependencies:
- unenv: 2.0.0-rc.24
- optionalDependencies:
- workerd: 1.20260312.1
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
- '@cloudflare/vite-plugin@1.28.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))(workerd@1.20260312.1)(wrangler@4.73.0)':
- dependencies:
- '@cloudflare/unenv-preset': 2.15.0(unenv@2.0.0-rc.24)(workerd@1.20260312.1)
- miniflare: 4.20260312.0
- unenv: 2.0.0-rc.24
- vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)
- wrangler: 4.73.0
- ws: 8.18.0
- transitivePeerDependencies:
- - bufferutil
- - utf-8-validate
- - workerd
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
- '@cloudflare/workerd-darwin-64@1.20260312.1':
- optional: true
+ styled-components@6.1.19:
+ resolution: {integrity: sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==}
+ engines: {node: '>= 16'}
+ peerDependencies:
+ react: '>= 16.8.0'
+ react-dom: '>= 16.8.0'
- '@cloudflare/workerd-darwin-arm64@1.20260312.1':
- optional: true
+ styled-jsx@5.1.6:
+ resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
+ engines: {node: '>= 12.0.0'}
+ peerDependencies:
+ '@babel/core': '*'
+ babel-plugin-macros: '*'
+ react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ babel-plugin-macros:
+ optional: true
- '@cloudflare/workerd-linux-64@1.20260312.1':
- optional: true
+ stylis@4.3.2:
+ resolution: {integrity: sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==}
- '@cloudflare/workerd-linux-arm64@1.20260312.1':
- optional: true
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
- '@cloudflare/workerd-windows-64@1.20260312.1':
- optional: true
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
- '@cspotcode/source-map-support@0.8.1':
- dependencies:
- '@jridgewell/trace-mapping': 0.3.9
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
- '@csstools/color-helpers@6.0.2': {}
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
- '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
- dependencies:
- '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
- '@csstools/css-tokenizer': 4.0.0
+ ts-api-utils@2.1.0:
+ resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
+ engines: {node: '>=18.12'}
+ peerDependencies:
+ typescript: '>=4.8.4'
- '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
- dependencies:
- '@csstools/color-helpers': 6.0.2
- '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
- '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
- '@csstools/css-tokenizer': 4.0.0
+ tsconfig-paths@3.15.0:
+ resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
- '@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0)':
- dependencies:
- '@csstools/css-tokenizer': 4.0.0
+ tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
- '@csstools/css-syntax-patches-for-csstree@1.1.0': {}
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
- '@csstools/css-tokenizer@4.0.0': {}
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
- '@emnapi/core@1.9.0':
- dependencies:
- '@emnapi/wasi-threads': 1.2.0
- tslib: 2.8.1
- optional: true
+ typed-array-buffer@1.0.3:
+ resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
+ engines: {node: '>= 0.4'}
- '@emnapi/runtime@1.9.0':
- dependencies:
- tslib: 2.8.1
- optional: true
+ typed-array-byte-length@1.0.3:
+ resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
+ engines: {node: '>= 0.4'}
- '@emnapi/wasi-threads@1.2.0':
- dependencies:
- tslib: 2.8.1
- optional: true
+ typed-array-byte-offset@1.0.4:
+ resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
+ engines: {node: '>= 0.4'}
- '@esbuild/aix-ppc64@0.27.3':
- optional: true
+ typed-array-length@1.0.7:
+ resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
+ engines: {node: '>= 0.4'}
- '@esbuild/aix-ppc64@0.27.4':
- optional: true
+ typescript-eslint@8.48.1:
+ resolution: {integrity: sha512-FbOKN1fqNoXp1hIl5KYpObVrp0mCn+CLgn479nmu2IsRMrx2vyv74MmsBLVlhg8qVwNFGbXSp8fh1zp8pEoC2A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '>=4.8.4 <6.0.0'
- '@esbuild/android-arm64@0.27.3':
- optional: true
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
- '@esbuild/android-arm64@0.27.4':
- optional: true
+ unbox-primitive@1.1.0:
+ resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
+ engines: {node: '>= 0.4'}
- '@esbuild/android-arm@0.27.3':
- optional: true
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
- '@esbuild/android-arm@0.27.4':
- optional: true
+ unrs-resolver@1.11.1:
+ resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
- '@esbuild/android-x64@0.27.3':
- optional: true
+ update-browserslist-db@1.2.2:
+ resolution: {integrity: sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
- '@esbuild/android-x64@0.27.4':
- optional: true
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
- '@esbuild/darwin-arm64@0.27.3':
- optional: true
+ use-intl@4.5.8:
+ resolution: {integrity: sha512-rWPV2Sirw55BQbA/7ndUBtsikh8WXwBrUkZJ1mD35+emj/ogPPqgCZdv1DdrEFK42AjF1g5w8d3x8govhqPH6Q==}
+ peerDependencies:
+ react: ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0
- '@esbuild/darwin-arm64@0.27.4':
- optional: true
+ which-boxed-primitive@1.1.1:
+ resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
+ engines: {node: '>= 0.4'}
- '@esbuild/darwin-x64@0.27.3':
- optional: true
+ which-builtin-type@1.2.1:
+ resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
+ engines: {node: '>= 0.4'}
- '@esbuild/darwin-x64@0.27.4':
- optional: true
+ which-collection@1.0.2:
+ resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
+ engines: {node: '>= 0.4'}
- '@esbuild/freebsd-arm64@0.27.3':
- optional: true
+ which-typed-array@1.1.19:
+ resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
+ engines: {node: '>= 0.4'}
- '@esbuild/freebsd-arm64@0.27.4':
- optional: true
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
- '@esbuild/freebsd-x64@0.27.3':
- optional: true
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
- '@esbuild/freebsd-x64@0.27.4':
- optional: true
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- '@esbuild/linux-arm64@0.27.3':
- optional: true
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
- '@esbuild/linux-arm64@0.27.4':
- optional: true
+ zod-validation-error@4.0.2:
+ resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ zod: ^3.25.0 || ^4.0.0
- '@esbuild/linux-arm@0.27.3':
- optional: true
+ zod@4.1.13:
+ resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==}
- '@esbuild/linux-arm@0.27.4':
- optional: true
+snapshots:
- '@esbuild/linux-ia32@0.27.3':
- optional: true
+ '@babel/code-frame@7.27.1':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
- '@esbuild/linux-ia32@0.27.4':
- optional: true
+ '@babel/compat-data@7.28.5': {}
- '@esbuild/linux-loong64@0.27.3':
- optional: true
+ '@babel/core@7.28.5':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.28.5
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
+ '@babel/helpers': 7.28.4
+ '@babel/parser': 7.28.5
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
- '@esbuild/linux-loong64@0.27.4':
- optional: true
+ '@babel/generator@7.28.5':
+ dependencies:
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
- '@esbuild/linux-mips64el@0.27.3':
- optional: true
+ '@babel/helper-compilation-targets@7.27.2':
+ dependencies:
+ '@babel/compat-data': 7.28.5
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
- '@esbuild/linux-mips64el@0.27.4':
- optional: true
+ '@babel/helper-globals@7.28.0': {}
- '@esbuild/linux-ppc64@0.27.3':
- optional: true
+ '@babel/helper-module-imports@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
- '@esbuild/linux-ppc64@0.27.4':
- optional: true
+ '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
- '@esbuild/linux-riscv64@0.27.3':
- optional: true
+ '@babel/helper-string-parser@7.27.1': {}
- '@esbuild/linux-riscv64@0.27.4':
- optional: true
+ '@babel/helper-validator-identifier@7.28.5': {}
- '@esbuild/linux-s390x@0.27.3':
- optional: true
+ '@babel/helper-validator-option@7.27.1': {}
- '@esbuild/linux-s390x@0.27.4':
- optional: true
+ '@babel/helpers@7.28.4':
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.5
- '@esbuild/linux-x64@0.27.3':
- optional: true
+ '@babel/parser@7.28.5':
+ dependencies:
+ '@babel/types': 7.28.5
+
+ '@babel/template@7.27.2':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+
+ '@babel/traverse@7.28.5':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.28.5
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.28.5
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.5
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
- '@esbuild/linux-x64@0.27.4':
- optional: true
+ '@babel/types@7.28.5':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
- '@esbuild/netbsd-arm64@0.27.3':
+ '@emnapi/core@1.7.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.1.0
+ tslib: 2.8.1
optional: true
- '@esbuild/netbsd-arm64@0.27.4':
+ '@emnapi/runtime@1.7.1':
+ dependencies:
+ tslib: 2.8.1
optional: true
- '@esbuild/netbsd-x64@0.27.3':
+ '@emnapi/wasi-threads@1.1.0':
+ dependencies:
+ tslib: 2.8.1
optional: true
- '@esbuild/netbsd-x64@0.27.4':
- optional: true
+ '@emotion/is-prop-valid@1.2.2':
+ dependencies:
+ '@emotion/memoize': 0.8.1
- '@esbuild/openbsd-arm64@0.27.3':
- optional: true
+ '@emotion/memoize@0.8.1': {}
- '@esbuild/openbsd-arm64@0.27.4':
- optional: true
+ '@emotion/unitless@0.8.1': {}
- '@esbuild/openbsd-x64@0.27.3':
- optional: true
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)':
+ dependencies:
+ eslint: 9.39.1
+ eslint-visitor-keys: 3.4.3
- '@esbuild/openbsd-x64@0.27.4':
- optional: true
+ '@eslint-community/regexpp@4.12.2': {}
- '@esbuild/openharmony-arm64@0.27.3':
- optional: true
+ '@eslint/config-array@0.21.1':
+ dependencies:
+ '@eslint/object-schema': 2.1.7
+ debug: 4.4.3
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
- '@esbuild/openharmony-arm64@0.27.4':
- optional: true
+ '@eslint/config-helpers@0.4.2':
+ dependencies:
+ '@eslint/core': 0.17.0
- '@esbuild/sunos-x64@0.27.3':
- optional: true
+ '@eslint/core@0.17.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
- '@esbuild/sunos-x64@0.27.4':
- optional: true
+ '@eslint/eslintrc@3.3.3':
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.4.3
+ espree: 10.4.0
+ globals: 14.0.0
+ ignore: 5.3.2
+ import-fresh: 3.3.1
+ js-yaml: 4.1.1
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
- '@esbuild/win32-arm64@0.27.3':
- optional: true
+ '@eslint/js@9.39.1': {}
- '@esbuild/win32-arm64@0.27.4':
- optional: true
+ '@eslint/object-schema@2.1.7': {}
- '@esbuild/win32-ia32@0.27.3':
- optional: true
+ '@eslint/plugin-kit@0.4.1':
+ dependencies:
+ '@eslint/core': 0.17.0
+ levn: 0.4.1
- '@esbuild/win32-ia32@0.27.4':
- optional: true
+ '@formatjs/ecma402-abstract@2.3.6':
+ dependencies:
+ '@formatjs/fast-memoize': 2.2.7
+ '@formatjs/intl-localematcher': 0.6.2
+ decimal.js: 10.6.0
+ tslib: 2.8.1
- '@esbuild/win32-x64@0.27.3':
- optional: true
+ '@formatjs/fast-memoize@2.2.7':
+ dependencies:
+ tslib: 2.8.1
- '@esbuild/win32-x64@0.27.4':
- optional: true
+ '@formatjs/icu-messageformat-parser@2.11.4':
+ dependencies:
+ '@formatjs/ecma402-abstract': 2.3.6
+ '@formatjs/icu-skeleton-parser': 1.8.16
+ tslib: 2.8.1
- '@exodus/bytes@1.15.0': {}
+ '@formatjs/icu-skeleton-parser@1.8.16':
+ dependencies:
+ '@formatjs/ecma402-abstract': 2.3.6
+ tslib: 2.8.1
- '@floating-ui/core@1.7.5':
+ '@formatjs/intl-localematcher@0.5.10':
dependencies:
- '@floating-ui/utils': 0.2.11
+ tslib: 2.8.1
- '@floating-ui/dom@1.7.6':
+ '@formatjs/intl-localematcher@0.6.2':
dependencies:
- '@floating-ui/core': 1.7.5
- '@floating-ui/utils': 0.2.11
+ tslib: 2.8.1
- '@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ '@humanfs/core@0.19.1': {}
+
+ '@humanfs/node@0.16.7':
dependencies:
- '@floating-ui/dom': 1.7.6
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ '@humanfs/core': 0.19.1
+ '@humanwhocodes/retry': 0.4.3
+
+ '@humanwhocodes/module-importer@1.0.1': {}
- '@floating-ui/utils@0.2.11': {}
+ '@humanwhocodes/retry@0.4.3': {}
- '@img/colour@1.1.0': {}
+ '@img/colour@1.0.0': {}
'@img/sharp-darwin-arm64@0.34.5':
optionalDependencies:
@@ -2997,7 +2257,7 @@ snapshots:
'@img/sharp-wasm32@0.34.5':
dependencies:
- '@emnapi/runtime': 1.9.0
+ '@emnapi/runtime': 1.7.1
optional: true
'@img/sharp-win32-arm64@0.34.5':
@@ -3009,32 +2269,6 @@ snapshots:
'@img/sharp-win32-x64@0.34.5':
optional: true
- '@inlang/paraglide-js@2.15.0':
- dependencies:
- '@inlang/recommend-sherlock': 0.2.1
- '@inlang/sdk': 2.8.0
- commander: 11.1.0
- consola: 3.4.0
- json5: 2.2.3
- unplugin: 2.3.11
- urlpattern-polyfill: 10.1.0
- transitivePeerDependencies:
- - babel-plugin-macros
-
- '@inlang/recommend-sherlock@0.2.1':
- dependencies:
- comment-json: 4.6.2
-
- '@inlang/sdk@2.8.0':
- dependencies:
- '@lix-js/sdk': 0.4.7
- '@sinclair/typebox': 0.31.28
- kysely: 0.27.6
- sqlite-wasm-kysely: 0.3.0(kysely@0.27.6)
- uuid: 13.0.0
- transitivePeerDependencies:
- - babel-plugin-macros
-
'@jridgewell/gen-mapping@0.3.13':
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -3054,999 +2288,1161 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
- '@jridgewell/trace-mapping@0.3.9':
+ '@napi-rs/wasm-runtime@0.2.12':
dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.5
+ '@emnapi/core': 1.7.1
+ '@emnapi/runtime': 1.7.1
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
+ '@next/env@16.0.7': {}
- '@lix-js/sdk@0.4.7':
+ '@next/eslint-plugin-next@16.0.7':
dependencies:
- '@lix-js/server-protocol-schema': 0.1.1
- dedent: 1.5.1
- human-id: 4.1.3
- js-sha256: 0.11.1
- kysely: 0.27.6
- sqlite-wasm-kysely: 0.3.0(kysely@0.27.6)
- uuid: 10.0.0
- transitivePeerDependencies:
- - babel-plugin-macros
+ fast-glob: 3.3.1
- '@lix-js/server-protocol-schema@0.1.1': {}
+ '@next/swc-darwin-arm64@16.0.7':
+ optional: true
- '@napi-rs/wasm-runtime@1.1.1':
- dependencies:
- '@emnapi/core': 1.9.0
- '@emnapi/runtime': 1.9.0
- '@tybys/wasm-util': 0.10.1
+ '@next/swc-darwin-x64@16.0.7':
optional: true
- '@oozcitak/dom@2.0.2':
- dependencies:
- '@oozcitak/infra': 2.0.2
- '@oozcitak/url': 3.0.0
- '@oozcitak/util': 10.0.0
+ '@next/swc-linux-arm64-gnu@16.0.7':
+ optional: true
- '@oozcitak/infra@2.0.2':
- dependencies:
- '@oozcitak/util': 10.0.0
+ '@next/swc-linux-arm64-musl@16.0.7':
+ optional: true
- '@oozcitak/url@3.0.0':
- dependencies:
- '@oozcitak/infra': 2.0.2
- '@oozcitak/util': 10.0.0
+ '@next/swc-linux-x64-gnu@16.0.7':
+ optional: true
- '@oozcitak/util@10.0.0': {}
+ '@next/swc-linux-x64-musl@16.0.7':
+ optional: true
- '@oxc-project/runtime@0.115.0': {}
+ '@next/swc-win32-arm64-msvc@16.0.7':
+ optional: true
- '@oxc-project/types@0.115.0': {}
+ '@next/swc-win32-x64-msvc@16.0.7':
+ optional: true
- '@playwright/test@1.58.2':
+ '@nodelib/fs.scandir@2.1.5':
dependencies:
- playwright: 1.58.2
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
- '@poppinss/colors@4.1.6':
- dependencies:
- kleur: 4.1.5
+ '@nodelib/fs.stat@2.0.5': {}
- '@poppinss/dumper@0.6.5':
+ '@nodelib/fs.walk@1.2.8':
dependencies:
- '@poppinss/colors': 4.1.6
- '@sindresorhus/is': 7.2.0
- supports-color: 10.2.2
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.19.1
- '@poppinss/exception@1.2.3': {}
+ '@nolyfill/is-core-module@1.0.39': {}
- '@rolldown/binding-android-arm64@1.0.0-rc.9':
- optional: true
+ '@rtsao/scc@1.1.0': {}
- '@rolldown/binding-darwin-arm64@1.0.0-rc.9':
- optional: true
+ '@schummar/icu-type-parser@1.21.5': {}
- '@rolldown/binding-darwin-x64@1.0.0-rc.9':
+ '@swc/core-darwin-arm64@1.15.3':
optional: true
- '@rolldown/binding-freebsd-x64@1.0.0-rc.9':
+ '@swc/core-darwin-x64@1.15.3':
optional: true
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9':
+ '@swc/core-linux-arm-gnueabihf@1.15.3':
optional: true
- '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9':
+ '@swc/core-linux-arm64-gnu@1.15.3':
optional: true
- '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9':
+ '@swc/core-linux-arm64-musl@1.15.3':
optional: true
- '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9':
+ '@swc/core-linux-x64-gnu@1.15.3':
optional: true
- '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9':
+ '@swc/core-linux-x64-musl@1.15.3':
optional: true
- '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9':
+ '@swc/core-win32-arm64-msvc@1.15.3':
optional: true
- '@rolldown/binding-linux-x64-musl@1.0.0-rc.9':
+ '@swc/core-win32-ia32-msvc@1.15.3':
optional: true
- '@rolldown/binding-openharmony-arm64@1.0.0-rc.9':
+ '@swc/core-win32-x64-msvc@1.15.3':
optional: true
- '@rolldown/binding-wasm32-wasi@1.0.0-rc.9':
+ '@swc/core@1.15.3':
dependencies:
- '@napi-rs/wasm-runtime': 1.1.1
- optional: true
+ '@swc/counter': 0.1.3
+ '@swc/types': 0.1.25
+ optionalDependencies:
+ '@swc/core-darwin-arm64': 1.15.3
+ '@swc/core-darwin-x64': 1.15.3
+ '@swc/core-linux-arm-gnueabihf': 1.15.3
+ '@swc/core-linux-arm64-gnu': 1.15.3
+ '@swc/core-linux-arm64-musl': 1.15.3
+ '@swc/core-linux-x64-gnu': 1.15.3
+ '@swc/core-linux-x64-musl': 1.15.3
+ '@swc/core-win32-arm64-msvc': 1.15.3
+ '@swc/core-win32-ia32-msvc': 1.15.3
+ '@swc/core-win32-x64-msvc': 1.15.3
- '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9':
- optional: true
+ '@swc/counter@0.1.3': {}
+
+ '@swc/helpers@0.5.15':
+ dependencies:
+ tslib: 2.8.1
+
+ '@swc/types@0.1.25':
+ dependencies:
+ '@swc/counter': 0.1.3
+
+ '@trivago/prettier-plugin-sort-imports@6.0.0(prettier@3.7.4)':
+ dependencies:
+ '@babel/generator': 7.28.5
+ '@babel/parser': 7.28.5
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ javascript-natural-sort: 0.7.1
+ lodash-es: 4.17.21
+ minimatch: 9.0.5
+ parse-imports-exports: 0.2.4
+ prettier: 3.7.4
+ transitivePeerDependencies:
+ - supports-color
- '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9':
+ '@tybys/wasm-util@0.10.1':
+ dependencies:
+ tslib: 2.8.1
optional: true
- '@rolldown/pluginutils@1.0.0-beta.40': {}
+ '@types/estree@1.0.8': {}
- '@rolldown/pluginutils@1.0.0-rc.7': {}
+ '@types/hoist-non-react-statics@3.3.7(@types/react@19.2.7)':
+ dependencies:
+ '@types/react': 19.2.7
+ hoist-non-react-statics: 3.3.2
- '@rolldown/pluginutils@1.0.0-rc.9': {}
+ '@types/json-schema@7.0.15': {}
- '@sinclair/typebox@0.31.28': {}
+ '@types/json5@0.0.29': {}
- '@sindresorhus/is@7.2.0': {}
+ '@types/node@24.10.1':
+ dependencies:
+ undici-types: 7.16.0
- '@solid-primitives/event-listener@2.4.5(solid-js@1.9.11)':
+ '@types/react-dom@19.2.3(@types/react@19.2.7)':
dependencies:
- '@solid-primitives/utils': 6.4.0(solid-js@1.9.11)
- solid-js: 1.9.11
+ '@types/react': 19.2.7
- '@solid-primitives/keyboard@1.3.5(solid-js@1.9.11)':
+ '@types/react@19.2.7':
dependencies:
- '@solid-primitives/event-listener': 2.4.5(solid-js@1.9.11)
- '@solid-primitives/rootless': 1.5.3(solid-js@1.9.11)
- '@solid-primitives/utils': 6.4.0(solid-js@1.9.11)
- solid-js: 1.9.11
+ csstype: 3.2.3
- '@solid-primitives/resize-observer@2.1.5(solid-js@1.9.11)':
+ '@types/styled-components@5.1.36':
dependencies:
- '@solid-primitives/event-listener': 2.4.5(solid-js@1.9.11)
- '@solid-primitives/rootless': 1.5.3(solid-js@1.9.11)
- '@solid-primitives/static-store': 0.1.3(solid-js@1.9.11)
- '@solid-primitives/utils': 6.4.0(solid-js@1.9.11)
- solid-js: 1.9.11
+ '@types/hoist-non-react-statics': 3.3.7(@types/react@19.2.7)
+ '@types/react': 19.2.7
+ csstype: 3.2.3
+
+ '@types/stylis@4.2.5': {}
+
+ '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)':
+ dependencies:
+ '@eslint-community/regexpp': 4.12.2
+ '@typescript-eslint/parser': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.48.1
+ '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.48.1
+ eslint: 9.39.1
+ graphemer: 1.4.0
+ ignore: 7.0.5
+ natural-compare: 1.4.0
+ ts-api-utils: 2.1.0(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
- '@solid-primitives/rootless@1.5.3(solid-js@1.9.11)':
+ '@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3)':
dependencies:
- '@solid-primitives/utils': 6.4.0(solid-js@1.9.11)
- solid-js: 1.9.11
+ '@typescript-eslint/scope-manager': 8.48.1
+ '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.48.1
+ debug: 4.4.3
+ eslint: 9.39.1
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
- '@solid-primitives/static-store@0.1.3(solid-js@1.9.11)':
+ '@typescript-eslint/project-service@8.48.1(typescript@5.9.3)':
dependencies:
- '@solid-primitives/utils': 6.4.0(solid-js@1.9.11)
- solid-js: 1.9.11
+ '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3)
+ '@typescript-eslint/types': 8.48.1
+ debug: 4.4.3
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
- '@solid-primitives/utils@6.4.0(solid-js@1.9.11)':
+ '@typescript-eslint/scope-manager@8.48.1':
dependencies:
- solid-js: 1.9.11
+ '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/visitor-keys': 8.48.1
- '@speed-highlight/core@1.2.14': {}
+ '@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.9.3)':
+ dependencies:
+ typescript: 5.9.3
- '@sqlite.org/sqlite-wasm@3.48.0-build4': {}
+ '@typescript-eslint/type-utils@8.48.1(eslint@9.39.1)(typescript@5.9.3)':
+ dependencies:
+ '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
+ debug: 4.4.3
+ eslint: 9.39.1
+ ts-api-utils: 2.1.0(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
- '@standard-schema/spec@1.1.0': {}
+ '@typescript-eslint/types@8.48.1': {}
- '@tailwindcss/node@4.2.1':
+ '@typescript-eslint/typescript-estree@8.48.1(typescript@5.9.3)':
dependencies:
- '@jridgewell/remapping': 2.3.5
- enhanced-resolve: 5.20.0
- jiti: 2.6.1
- lightningcss: 1.31.1
- magic-string: 0.30.21
- source-map-js: 1.2.1
- tailwindcss: 4.2.1
+ '@typescript-eslint/project-service': 8.48.1(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3)
+ '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/visitor-keys': 8.48.1
+ debug: 4.4.3
+ minimatch: 9.0.5
+ semver: 7.7.3
+ tinyglobby: 0.2.15
+ ts-api-utils: 2.1.0(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@8.48.1(eslint@9.39.1)(typescript@5.9.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
+ '@typescript-eslint/scope-manager': 8.48.1
+ '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
+ eslint: 9.39.1
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/visitor-keys@8.48.1':
+ dependencies:
+ '@typescript-eslint/types': 8.48.1
+ eslint-visitor-keys: 4.2.1
- '@tailwindcss/oxide-android-arm64@4.2.1':
+ '@unrs/resolver-binding-android-arm-eabi@1.11.1':
optional: true
- '@tailwindcss/oxide-darwin-arm64@4.2.1':
+ '@unrs/resolver-binding-android-arm64@1.11.1':
optional: true
- '@tailwindcss/oxide-darwin-x64@4.2.1':
+ '@unrs/resolver-binding-darwin-arm64@1.11.1':
optional: true
- '@tailwindcss/oxide-freebsd-x64@4.2.1':
+ '@unrs/resolver-binding-darwin-x64@1.11.1':
optional: true
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1':
+ '@unrs/resolver-binding-freebsd-x64@1.11.1':
optional: true
- '@tailwindcss/oxide-linux-arm64-gnu@4.2.1':
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
optional: true
- '@tailwindcss/oxide-linux-arm64-musl@4.2.1':
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
optional: true
- '@tailwindcss/oxide-linux-x64-gnu@4.2.1':
+ '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
optional: true
- '@tailwindcss/oxide-linux-x64-musl@4.2.1':
+ '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
optional: true
- '@tailwindcss/oxide-wasm32-wasi@4.2.1':
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
optional: true
- '@tailwindcss/oxide-win32-arm64-msvc@4.2.1':
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
optional: true
- '@tailwindcss/oxide-win32-x64-msvc@4.2.1':
+ '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
optional: true
- '@tailwindcss/oxide@4.2.1':
- optionalDependencies:
- '@tailwindcss/oxide-android-arm64': 4.2.1
- '@tailwindcss/oxide-darwin-arm64': 4.2.1
- '@tailwindcss/oxide-darwin-x64': 4.2.1
- '@tailwindcss/oxide-freebsd-x64': 4.2.1
- '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.1
- '@tailwindcss/oxide-linux-arm64-gnu': 4.2.1
- '@tailwindcss/oxide-linux-arm64-musl': 4.2.1
- '@tailwindcss/oxide-linux-x64-gnu': 4.2.1
- '@tailwindcss/oxide-linux-x64-musl': 4.2.1
- '@tailwindcss/oxide-wasm32-wasi': 4.2.1
- '@tailwindcss/oxide-win32-arm64-msvc': 4.2.1
- '@tailwindcss/oxide-win32-x64-msvc': 4.2.1
+ '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
+ optional: true
- '@tailwindcss/vite@4.2.1(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))':
- dependencies:
- '@tailwindcss/node': 4.2.1
- '@tailwindcss/oxide': 4.2.1
- tailwindcss: 4.2.1
- vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)
+ '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-x64-musl@1.11.1':
+ optional: true
- '@tanstack/devtools-client@0.0.6':
+ '@unrs/resolver-binding-wasm32-wasi@1.11.1':
dependencies:
- '@tanstack/devtools-event-client': 0.4.3
+ '@napi-rs/wasm-runtime': 0.2.12
+ optional: true
- '@tanstack/devtools-event-bus@0.4.1':
+ '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
+ optional: true
+
+ acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
- ws: 8.19.0
- transitivePeerDependencies:
- - bufferutil
- - utf-8-validate
+ acorn: 8.15.0
- '@tanstack/devtools-event-client@0.4.3': {}
+ acorn@8.15.0: {}
- '@tanstack/devtools-ui@0.5.0(csstype@3.2.3)(solid-js@1.9.11)':
+ ajv@6.12.6:
dependencies:
- clsx: 2.1.1
- dayjs: 1.11.20
- goober: 2.1.18(csstype@3.2.3)
- solid-js: 1.9.11
- transitivePeerDependencies:
- - csstype
-
- '@tanstack/devtools-vite@0.5.5(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/generator': 7.29.1
- '@babel/parser': 7.29.0
- '@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
- '@tanstack/devtools-client': 0.0.6
- '@tanstack/devtools-event-bus': 0.4.1
- chalk: 5.6.2
- launch-editor: 2.13.1
- picomatch: 4.0.3
- vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
-
- '@tanstack/devtools@0.10.14(csstype@3.2.3)(solid-js@1.9.11)':
- dependencies:
- '@solid-primitives/event-listener': 2.4.5(solid-js@1.9.11)
- '@solid-primitives/keyboard': 1.3.5(solid-js@1.9.11)
- '@solid-primitives/resize-observer': 2.1.5(solid-js@1.9.11)
- '@tanstack/devtools-client': 0.0.6
- '@tanstack/devtools-event-bus': 0.4.1
- '@tanstack/devtools-ui': 0.5.0(csstype@3.2.3)(solid-js@1.9.11)
- clsx: 2.1.1
- goober: 2.1.18(csstype@3.2.3)
- solid-js: 1.9.11
- transitivePeerDependencies:
- - bufferutil
- - csstype
- - utf-8-validate
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
- '@tanstack/history@1.161.4': {}
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ argparse@2.0.1: {}
- '@tanstack/query-core@5.90.20': {}
+ aria-query@5.3.2: {}
- '@tanstack/react-devtools@0.9.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(solid-js@1.9.11)':
+ array-buffer-byte-length@1.0.2:
dependencies:
- '@tanstack/devtools': 0.10.14(csstype@3.2.3)(solid-js@1.9.11)
- '@types/react': 19.2.14
- '@types/react-dom': 19.2.3(@types/react@19.2.14)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- transitivePeerDependencies:
- - bufferutil
- - csstype
- - solid-js
- - utf-8-validate
+ call-bound: 1.0.4
+ is-array-buffer: 3.0.5
- '@tanstack/react-query@5.90.21(react@19.2.4)':
+ array-includes@3.1.9:
dependencies:
- '@tanstack/query-core': 5.90.20
- react: 19.2.4
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ is-string: 1.1.1
+ math-intrinsics: 1.1.0
- '@tanstack/react-router-devtools@1.166.7(@tanstack/react-router@1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.167.0)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ array.prototype.findlast@1.2.5:
dependencies:
- '@tanstack/react-router': 1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/router-devtools-core': 1.166.7(@tanstack/router-core@1.167.0)(csstype@3.2.3)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- optionalDependencies:
- '@tanstack/router-core': 1.167.0
- transitivePeerDependencies:
- - csstype
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ es-shim-unscopables: 1.1.0
- '@tanstack/react-router-ssr-query@1.166.7(@tanstack/query-core@5.90.20)(@tanstack/react-query@5.90.21(react@19.2.4))(@tanstack/react-router@1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.167.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ array.prototype.findlastindex@1.2.6:
dependencies:
- '@tanstack/query-core': 5.90.20
- '@tanstack/react-query': 5.90.21(react@19.2.4)
- '@tanstack/react-router': 1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/router-ssr-query-core': 1.166.7(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.167.0)
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- transitivePeerDependencies:
- - '@tanstack/router-core'
-
- '@tanstack/react-router@1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
- dependencies:
- '@tanstack/history': 1.161.4
- '@tanstack/react-store': 0.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/router-core': 1.167.0
- isbot: 5.1.36
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- tiny-invariant: 1.3.3
- tiny-warning: 1.0.3
-
- '@tanstack/react-start-client@1.166.9(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
- dependencies:
- '@tanstack/react-router': 1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/router-core': 1.167.0
- '@tanstack/start-client-core': 1.166.8
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- tiny-invariant: 1.3.3
- tiny-warning: 1.0.3
-
- '@tanstack/react-start-server@1.166.9(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
- dependencies:
- '@tanstack/history': 1.161.4
- '@tanstack/react-router': 1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/router-core': 1.167.0
- '@tanstack/start-client-core': 1.166.8
- '@tanstack/start-server-core': 1.166.8
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- transitivePeerDependencies:
- - crossws
-
- '@tanstack/react-start@1.166.11(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))':
- dependencies:
- '@tanstack/react-router': 1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/react-start-client': 1.166.9(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/react-start-server': 1.166.9(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- '@tanstack/router-utils': 1.161.4
- '@tanstack/start-client-core': 1.166.8
- '@tanstack/start-plugin-core': 1.166.11(@tanstack/react-router@1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))
- '@tanstack/start-server-core': 1.166.8
- pathe: 2.0.3
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)
- transitivePeerDependencies:
- - '@rsbuild/core'
- - crossws
- - supports-color
- - vite-plugin-solid
- - webpack
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ es-shim-unscopables: 1.1.0
- '@tanstack/react-store@0.9.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ array.prototype.flat@1.3.3:
dependencies:
- '@tanstack/store': 0.9.2
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- use-sync-external-store: 1.6.0(react@19.2.4)
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-shim-unscopables: 1.1.0
- '@tanstack/router-core@1.167.0':
+ array.prototype.flatmap@1.3.3:
dependencies:
- '@tanstack/history': 1.161.4
- '@tanstack/store': 0.9.2
- cookie-es: 2.0.0
- seroval: 1.5.1
- seroval-plugins: 1.5.1(seroval@1.5.1)
- tiny-invariant: 1.3.3
- tiny-warning: 1.0.3
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-shim-unscopables: 1.1.0
- '@tanstack/router-devtools-core@1.166.7(@tanstack/router-core@1.167.0)(csstype@3.2.3)':
+ array.prototype.tosorted@1.1.4:
dependencies:
- '@tanstack/router-core': 1.167.0
- clsx: 2.1.1
- goober: 2.1.18(csstype@3.2.3)
- tiny-invariant: 1.3.3
- optionalDependencies:
- csstype: 3.2.3
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-shim-unscopables: 1.1.0
- '@tanstack/router-generator@1.166.8':
+ arraybuffer.prototype.slice@1.0.4:
dependencies:
- '@tanstack/router-core': 1.167.0
- '@tanstack/router-utils': 1.161.4
- '@tanstack/virtual-file-routes': 1.161.4
- prettier: 3.8.1
- recast: 0.23.11
- source-map: 0.7.6
- tsx: 4.21.0
- zod: 3.25.76
- transitivePeerDependencies:
- - supports-color
+ array-buffer-byte-length: 1.0.2
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ is-array-buffer: 3.0.5
- '@tanstack/router-plugin@1.166.9(@tanstack/react-router@1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
- '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
- '@babel/template': 7.28.6
- '@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
- '@tanstack/router-core': 1.167.0
- '@tanstack/router-generator': 1.166.8
- '@tanstack/router-utils': 1.161.4
- '@tanstack/virtual-file-routes': 1.161.4
- chokidar: 3.6.0
- unplugin: 2.3.11
- zod: 3.25.76
- optionalDependencies:
- '@tanstack/react-router': 1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)
- transitivePeerDependencies:
- - supports-color
+ ast-types-flow@0.0.8: {}
- '@tanstack/router-ssr-query-core@1.166.7(@tanstack/query-core@5.90.20)(@tanstack/router-core@1.167.0)':
- dependencies:
- '@tanstack/query-core': 5.90.20
- '@tanstack/router-core': 1.167.0
+ async-function@1.0.0: {}
- '@tanstack/router-utils@1.161.4':
+ available-typed-arrays@1.0.7:
dependencies:
- '@babel/core': 7.29.0
- '@babel/generator': 7.29.1
- '@babel/parser': 7.29.0
- '@babel/types': 7.29.0
- ansis: 4.2.0
- babel-dead-code-elimination: 1.0.12
- diff: 8.0.3
- pathe: 2.0.3
- tinyglobby: 0.2.15
- transitivePeerDependencies:
- - supports-color
+ possible-typed-array-names: 1.1.0
- '@tanstack/start-client-core@1.166.8':
- dependencies:
- '@tanstack/router-core': 1.167.0
- '@tanstack/start-fn-stubs': 1.161.4
- '@tanstack/start-storage-context': 1.166.8
- seroval: 1.5.1
- tiny-invariant: 1.3.3
- tiny-warning: 1.0.3
+ axe-core@4.11.0: {}
- '@tanstack/start-fn-stubs@1.161.4': {}
+ axobject-query@4.1.0: {}
- '@tanstack/start-plugin-core@1.166.11(@tanstack/react-router@1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))':
- dependencies:
- '@babel/code-frame': 7.27.1
- '@babel/core': 7.29.0
- '@babel/types': 7.29.0
- '@rolldown/pluginutils': 1.0.0-beta.40
- '@tanstack/router-core': 1.167.0
- '@tanstack/router-generator': 1.166.8
- '@tanstack/router-plugin': 1.166.9(@tanstack/react-router@1.167.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))
- '@tanstack/router-utils': 1.161.4
- '@tanstack/start-client-core': 1.166.8
- '@tanstack/start-server-core': 1.166.8
- cheerio: 1.2.0
- exsolve: 1.0.8
- pathe: 2.0.3
- picomatch: 4.0.3
- source-map: 0.7.6
- srvx: 0.11.9
- tinyglobby: 0.2.15
- ufo: 1.6.3
- vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)
- vitefu: 1.1.2(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))
- xmlbuilder2: 4.0.3
- zod: 3.25.76
- transitivePeerDependencies:
- - '@rsbuild/core'
- - '@tanstack/react-router'
- - crossws
- - supports-color
- - vite-plugin-solid
- - webpack
-
- '@tanstack/start-server-core@1.166.8':
- dependencies:
- '@tanstack/history': 1.161.4
- '@tanstack/router-core': 1.167.0
- '@tanstack/start-client-core': 1.166.8
- '@tanstack/start-storage-context': 1.166.8
- h3-v2: h3@2.0.1-rc.16
- seroval: 1.5.1
- tiny-invariant: 1.3.3
- transitivePeerDependencies:
- - crossws
+ balanced-match@1.0.2: {}
- '@tanstack/start-storage-context@1.166.8':
- dependencies:
- '@tanstack/router-core': 1.167.0
+ baseline-browser-mapping@2.9.3: {}
- '@tanstack/store@0.9.2': {}
+ brace-expansion@1.1.12:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
- '@tanstack/virtual-file-routes@1.161.4': {}
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
- '@testing-library/dom@10.4.1':
+ braces@3.0.3:
dependencies:
- '@babel/code-frame': 7.29.0
- '@babel/runtime': 7.28.6
- '@types/aria-query': 5.0.4
- aria-query: 5.3.0
- dom-accessibility-api: 0.5.16
- lz-string: 1.5.0
- picocolors: 1.1.1
- pretty-format: 27.5.1
+ fill-range: 7.1.1
- '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
+ browserslist@4.28.1:
dependencies:
- '@babel/runtime': 7.28.6
- '@testing-library/dom': 10.4.1
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
- optionalDependencies:
- '@types/react': 19.2.14
- '@types/react-dom': 19.2.3(@types/react@19.2.14)
+ baseline-browser-mapping: 2.9.3
+ caniuse-lite: 1.0.30001759
+ electron-to-chromium: 1.5.266
+ node-releases: 2.0.27
+ update-browserslist-db: 1.2.2(browserslist@4.28.1)
- '@tybys/wasm-util@0.10.1':
+ call-bind-apply-helpers@1.0.2:
dependencies:
- tslib: 2.8.1
- optional: true
+ es-errors: 1.3.0
+ function-bind: 1.1.2
- '@types/aria-query@5.0.4': {}
+ call-bind@1.0.8:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ get-intrinsic: 1.3.0
+ set-function-length: 1.2.2
- '@types/chai@5.2.3':
+ call-bound@1.0.4:
dependencies:
- '@types/deep-eql': 4.0.2
- assertion-error: 2.0.1
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
- '@types/deep-eql@4.0.2': {}
+ callsites@3.1.0: {}
- '@types/estree@1.0.8': {}
+ camelize@1.0.1: {}
- '@types/node@25.5.0':
+ caniuse-lite@1.0.30001759: {}
+
+ chalk@4.1.2:
dependencies:
- undici-types: 7.18.2
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ client-only@0.0.1: {}
- '@types/react-dom@19.2.3(@types/react@19.2.14)':
+ color-convert@2.0.1:
dependencies:
- '@types/react': 19.2.14
+ color-name: 1.1.4
- '@types/react@19.2.14':
+ color-name@1.1.4: {}
+
+ concat-map@0.0.1: {}
+
+ convert-source-map@2.0.0: {}
+
+ cross-spawn@7.0.6:
dependencies:
- csstype: 3.2.3
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ css-color-keywords@1.0.0: {}
- '@vitejs/plugin-react@6.0.1(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))':
+ css-to-react-native@3.2.0:
dependencies:
- '@rolldown/pluginutils': 1.0.0-rc.7
- vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)
+ camelize: 1.0.1
+ css-color-keywords: 1.0.0
+ postcss-value-parser: 4.2.0
+
+ csstype@3.1.3: {}
+
+ csstype@3.2.3: {}
+
+ damerau-levenshtein@1.0.8: {}
- '@vitest/expect@4.1.0':
+ data-view-buffer@1.0.2:
dependencies:
- '@standard-schema/spec': 1.1.0
- '@types/chai': 5.2.3
- '@vitest/spy': 4.1.0
- '@vitest/utils': 4.1.0
- chai: 6.2.2
- tinyrainbow: 3.1.0
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
- '@vitest/mocker@4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))':
+ data-view-byte-length@1.0.2:
dependencies:
- '@vitest/spy': 4.1.0
- estree-walker: 3.0.3
- magic-string: 0.30.21
- optionalDependencies:
- vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
- '@vitest/pretty-format@4.1.0':
+ data-view-byte-offset@1.0.1:
dependencies:
- tinyrainbow: 3.1.0
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
- '@vitest/runner@4.1.0':
+ debug@3.2.7:
dependencies:
- '@vitest/utils': 4.1.0
- pathe: 2.0.3
+ ms: 2.1.3
- '@vitest/snapshot@4.1.0':
+ debug@4.4.3:
dependencies:
- '@vitest/pretty-format': 4.1.0
- '@vitest/utils': 4.1.0
- magic-string: 0.30.21
- pathe: 2.0.3
+ ms: 2.1.3
+
+ decimal.js@10.6.0: {}
- '@vitest/spy@4.1.0': {}
+ deep-is@0.1.4: {}
- '@vitest/utils@4.1.0':
+ define-data-property@1.1.4:
dependencies:
- '@vitest/pretty-format': 4.1.0
- convert-source-map: 2.0.0
- tinyrainbow: 3.1.0
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
- acorn@8.16.0: {}
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
- agent-base@7.1.4: {}
+ detect-libc@2.1.2: {}
- ansi-regex@5.0.1: {}
+ doctrine@2.1.0:
+ dependencies:
+ esutils: 2.0.3
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ electron-to-chromium@1.5.266: {}
+
+ emoji-regex@9.2.2: {}
+
+ es-abstract@1.24.0:
+ dependencies:
+ array-buffer-byte-length: 1.0.2
+ arraybuffer.prototype.slice: 1.0.4
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ data-view-buffer: 1.0.2
+ data-view-byte-length: 1.0.2
+ data-view-byte-offset: 1.0.1
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ es-set-tostringtag: 2.1.0
+ es-to-primitive: 1.3.0
+ function.prototype.name: 1.1.8
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ get-symbol-description: 1.1.0
+ globalthis: 1.0.4
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+ has-proto: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ internal-slot: 1.1.0
+ is-array-buffer: 3.0.5
+ is-callable: 1.2.7
+ is-data-view: 1.0.2
+ is-negative-zero: 2.0.3
+ is-regex: 1.2.1
+ is-set: 2.0.3
+ is-shared-array-buffer: 1.0.4
+ is-string: 1.1.1
+ is-typed-array: 1.1.15
+ is-weakref: 1.1.1
+ math-intrinsics: 1.1.0
+ object-inspect: 1.13.4
+ object-keys: 1.1.1
+ object.assign: 4.1.7
+ own-keys: 1.0.1
+ regexp.prototype.flags: 1.5.4
+ safe-array-concat: 1.1.3
+ safe-push-apply: 1.0.0
+ safe-regex-test: 1.1.0
+ set-proto: 1.0.0
+ stop-iteration-iterator: 1.1.0
+ string.prototype.trim: 1.2.10
+ string.prototype.trimend: 1.0.9
+ string.prototype.trimstart: 1.0.8
+ typed-array-buffer: 1.0.3
+ typed-array-byte-length: 1.0.3
+ typed-array-byte-offset: 1.0.4
+ typed-array-length: 1.0.7
+ unbox-primitive: 1.1.0
+ which-typed-array: 1.1.19
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-iterator-helpers@1.2.1:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-set-tostringtag: 2.1.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ globalthis: 1.0.4
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+ has-proto: 1.2.0
+ has-symbols: 1.1.0
+ internal-slot: 1.1.0
+ iterator.prototype: 1.1.5
+ safe-array-concat: 1.1.3
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ es-shim-unscopables@1.1.0:
+ dependencies:
+ hasown: 2.0.2
+
+ es-to-primitive@1.3.0:
+ dependencies:
+ is-callable: 1.2.7
+ is-date-object: 1.1.0
+ is-symbol: 1.1.1
- ansi-styles@5.2.0: {}
+ escalade@3.2.0: {}
- ansis@4.2.0: {}
+ escape-string-regexp@4.0.0: {}
- anymatch@3.1.3:
+ eslint-config-next@16.0.7(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3):
dependencies:
- normalize-path: 3.0.0
- picomatch: 2.3.1
+ '@next/eslint-plugin-next': 16.0.7
+ eslint: 9.39.1
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1)
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1))(eslint@9.39.1)
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.1)
+ eslint-plugin-react: 7.37.5(eslint@9.39.1)
+ eslint-plugin-react-hooks: 7.0.1(eslint@9.39.1)
+ globals: 16.4.0
+ typescript-eslint: 8.48.1(eslint@9.39.1)(typescript@5.9.3)
+ optionalDependencies:
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - '@typescript-eslint/parser'
+ - eslint-import-resolver-webpack
+ - eslint-plugin-import-x
+ - supports-color
- argparse@2.0.1: {}
+ eslint-import-resolver-node@0.3.9:
+ dependencies:
+ debug: 3.2.7
+ is-core-module: 2.16.1
+ resolve: 1.22.11
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1):
+ dependencies:
+ '@nolyfill/is-core-module': 1.0.39
+ debug: 4.4.3
+ eslint: 9.39.1
+ get-tsconfig: 4.13.0
+ is-bun-module: 2.0.0
+ stable-hash: 0.0.5
+ tinyglobby: 0.2.15
+ unrs-resolver: 1.11.1
+ optionalDependencies:
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1))(eslint@9.39.1)
+ transitivePeerDependencies:
+ - supports-color
- aria-query@5.3.0:
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1))(eslint@9.39.1):
dependencies:
- dequal: 2.0.3
+ debug: 3.2.7
+ optionalDependencies:
+ '@typescript-eslint/parser': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
+ eslint: 9.39.1
+ eslint-import-resolver-node: 0.3.9
+ eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1)
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1))(eslint@9.39.1):
+ dependencies:
+ '@rtsao/scc': 1.1.0
+ array-includes: 3.1.9
+ array.prototype.findlastindex: 1.2.6
+ array.prototype.flat: 1.3.3
+ array.prototype.flatmap: 1.3.3
+ debug: 3.2.7
+ doctrine: 2.1.0
+ eslint: 9.39.1
+ eslint-import-resolver-node: 0.3.9
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1))(eslint@9.39.1))(eslint@9.39.1)
+ hasown: 2.0.2
+ is-core-module: 2.16.1
+ is-glob: 4.0.3
+ minimatch: 3.1.2
+ object.fromentries: 2.0.8
+ object.groupby: 1.0.3
+ object.values: 1.2.1
+ semver: 6.3.1
+ string.prototype.trimend: 1.0.9
+ tsconfig-paths: 3.15.0
+ optionalDependencies:
+ '@typescript-eslint/parser': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
+ transitivePeerDependencies:
+ - eslint-import-resolver-typescript
+ - eslint-import-resolver-webpack
+ - supports-color
- array-timsort@1.0.3: {}
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.1):
+ dependencies:
+ aria-query: 5.3.2
+ array-includes: 3.1.9
+ array.prototype.flatmap: 1.3.3
+ ast-types-flow: 0.0.8
+ axe-core: 4.11.0
+ axobject-query: 4.1.0
+ damerau-levenshtein: 1.0.8
+ emoji-regex: 9.2.2
+ eslint: 9.39.1
+ hasown: 2.0.2
+ jsx-ast-utils: 3.3.5
+ language-tags: 1.0.9
+ minimatch: 3.1.2
+ object.fromentries: 2.0.8
+ safe-regex-test: 1.1.0
+ string.prototype.includes: 2.0.1
+
+ eslint-plugin-react-hooks@7.0.1(eslint@9.39.1):
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/parser': 7.28.5
+ eslint: 9.39.1
+ hermes-parser: 0.25.1
+ zod: 4.1.13
+ zod-validation-error: 4.0.2(zod@4.1.13)
+ transitivePeerDependencies:
+ - supports-color
- assertion-error@2.0.1: {}
+ eslint-plugin-react@7.37.5(eslint@9.39.1):
+ dependencies:
+ array-includes: 3.1.9
+ array.prototype.findlast: 1.2.5
+ array.prototype.flatmap: 1.3.3
+ array.prototype.tosorted: 1.1.4
+ doctrine: 2.1.0
+ es-iterator-helpers: 1.2.1
+ eslint: 9.39.1
+ estraverse: 5.3.0
+ hasown: 2.0.2
+ jsx-ast-utils: 3.3.5
+ minimatch: 3.1.2
+ object.entries: 1.1.9
+ object.fromentries: 2.0.8
+ object.values: 1.2.1
+ prop-types: 15.8.1
+ resolve: 2.0.0-next.5
+ semver: 6.3.1
+ string.prototype.matchall: 4.0.12
+ string.prototype.repeat: 1.0.0
- ast-types@0.16.1:
+ eslint-scope@8.4.0:
dependencies:
- tslib: 2.8.1
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
- babel-dead-code-elimination@1.0.12:
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint-visitor-keys@4.2.1: {}
+
+ eslint@9.39.1:
dependencies:
- '@babel/core': 7.29.0
- '@babel/parser': 7.29.0
- '@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
+ '@eslint-community/regexpp': 4.12.2
+ '@eslint/config-array': 0.21.1
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
+ '@eslint/eslintrc': 3.3.3
+ '@eslint/js': 9.39.1
+ '@eslint/plugin-kit': 0.4.1
+ '@humanfs/node': 0.16.7
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.8
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.3
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ esquery: 1.6.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
transitivePeerDependencies:
- supports-color
- baseline-browser-mapping@2.10.7: {}
+ espree@10.4.0:
+ dependencies:
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ eslint-visitor-keys: 4.2.1
+
+ esquery@1.6.0:
+ dependencies:
+ estraverse: 5.3.0
- bidi-js@1.0.3:
+ esrecurse@4.3.0:
dependencies:
- require-from-string: 2.0.2
+ estraverse: 5.3.0
- binary-extensions@2.3.0: {}
+ estraverse@5.3.0: {}
- blake3-wasm@2.1.5: {}
+ esutils@2.0.3: {}
- boolbase@1.0.0: {}
+ fast-deep-equal@3.1.3: {}
- braces@3.0.3:
+ fast-glob@3.3.1:
dependencies:
- fill-range: 7.1.1
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
- browserslist@4.28.1:
- dependencies:
- baseline-browser-mapping: 2.10.7
- caniuse-lite: 1.0.30001778
- electron-to-chromium: 1.5.313
- node-releases: 2.0.36
- update-browserslist-db: 1.2.3(browserslist@4.28.1)
+ fast-json-stable-stringify@2.1.0: {}
- caniuse-lite@1.0.30001778: {}
+ fast-levenshtein@2.0.6: {}
- chai@6.2.2: {}
+ fastq@1.19.1:
+ dependencies:
+ reusify: 1.1.0
- chalk@5.6.2: {}
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
- cheerio-select@2.1.0:
+ file-entry-cache@8.0.0:
dependencies:
- boolbase: 1.0.0
- css-select: 5.2.2
- css-what: 6.2.2
- domelementtype: 2.3.0
- domhandler: 5.0.3
- domutils: 3.2.2
+ flat-cache: 4.0.1
- cheerio@1.2.0:
+ fill-range@7.1.1:
dependencies:
- cheerio-select: 2.1.0
- dom-serializer: 2.0.0
- domhandler: 5.0.3
- domutils: 3.2.2
- encoding-sniffer: 0.2.1
- htmlparser2: 10.1.0
- parse5: 7.3.0
- parse5-htmlparser2-tree-adapter: 7.1.0
- parse5-parser-stream: 7.1.2
- undici: 7.24.2
- whatwg-mimetype: 4.0.0
+ to-regex-range: 5.0.1
- chokidar@3.6.0:
+ find-up@5.0.0:
dependencies:
- anymatch: 3.1.3
- braces: 3.0.3
- glob-parent: 5.1.2
- is-binary-path: 2.1.0
- is-glob: 4.0.3
- normalize-path: 3.0.0
- readdirp: 3.6.0
- optionalDependencies:
- fsevents: 2.3.3
+ locate-path: 6.0.0
+ path-exists: 4.0.0
- clsx@2.1.1: {}
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.3.3
+ keyv: 4.5.4
- commander@11.1.0: {}
+ flatted@3.3.3: {}
- comment-json@4.6.2:
+ for-each@0.3.5:
dependencies:
- array-timsort: 1.0.3
- esprima: 4.0.1
+ is-callable: 1.2.7
- consola@3.4.0: {}
+ function-bind@1.1.2: {}
- convert-source-map@2.0.0: {}
+ function.prototype.name@1.1.8:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ functions-have-names: 1.2.3
+ hasown: 2.0.2
+ is-callable: 1.2.7
- cookie-es@2.0.0: {}
+ functions-have-names@1.2.3: {}
- cookie@1.1.1: {}
+ generator-function@2.0.1: {}
+
+ gensync@1.0.0-beta.2: {}
- css-select@5.2.2:
+ get-intrinsic@1.3.0:
dependencies:
- boolbase: 1.0.0
- css-what: 6.2.2
- domhandler: 5.0.3
- domutils: 3.2.2
- nth-check: 2.1.1
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
- css-tree@3.2.1:
+ get-proto@1.0.1:
dependencies:
- mdn-data: 2.27.1
- source-map-js: 1.2.1
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
- css-what@6.2.2: {}
+ get-symbol-description@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
- cssstyle@6.2.0:
+ get-tsconfig@4.13.0:
dependencies:
- '@asamuzakjp/css-color': 5.0.1
- '@csstools/css-syntax-patches-for-csstree': 1.1.0
- css-tree: 3.2.1
- lru-cache: 11.2.7
+ resolve-pkg-maps: 1.0.0
- csstype@3.2.3: {}
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
- data-urls@7.0.0:
+ glob-parent@6.0.2:
dependencies:
- whatwg-mimetype: 5.0.0
- whatwg-url: 16.0.1
- transitivePeerDependencies:
- - '@noble/hashes'
+ is-glob: 4.0.3
- dayjs@1.11.20: {}
+ globals@14.0.0: {}
- debug@4.4.3:
- dependencies:
- ms: 2.1.3
+ globals@16.4.0: {}
- decimal.js@10.6.0: {}
+ globalthis@1.0.4:
+ dependencies:
+ define-properties: 1.2.1
+ gopd: 1.2.0
- dedent@1.5.1: {}
+ gopd@1.2.0: {}
- dequal@2.0.3: {}
+ graphemer@1.4.0: {}
- detect-libc@2.1.2: {}
+ has-bigints@1.1.0: {}
- diff@8.0.3: {}
+ has-flag@4.0.0: {}
- dom-accessibility-api@0.5.16: {}
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
- dom-serializer@2.0.0:
+ has-proto@1.2.0:
dependencies:
- domelementtype: 2.3.0
- domhandler: 5.0.3
- entities: 4.5.0
+ dunder-proto: 1.0.1
- domelementtype@2.3.0: {}
+ has-symbols@1.1.0: {}
- domhandler@5.0.3:
+ has-tostringtag@1.0.2:
dependencies:
- domelementtype: 2.3.0
+ has-symbols: 1.1.0
- domutils@3.2.2:
+ hasown@2.0.2:
dependencies:
- dom-serializer: 2.0.0
- domelementtype: 2.3.0
- domhandler: 5.0.3
+ function-bind: 1.1.2
- electron-to-chromium@1.5.313: {}
+ hermes-estree@0.25.1: {}
- encoding-sniffer@0.2.1:
+ hermes-parser@0.25.1:
dependencies:
- iconv-lite: 0.6.3
- whatwg-encoding: 3.1.1
+ hermes-estree: 0.25.1
- enhanced-resolve@5.20.0:
+ hoist-non-react-statics@3.3.2:
dependencies:
- graceful-fs: 4.2.11
- tapable: 2.3.0
+ react-is: 16.13.1
- entities@4.5.0: {}
+ ignore@5.3.2: {}
- entities@6.0.1: {}
+ ignore@7.0.5: {}
- entities@7.0.1: {}
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
- error-stack-parser-es@1.0.5: {}
+ imurmurhash@0.1.4: {}
- es-module-lexer@2.0.0: {}
+ internal-slot@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ hasown: 2.0.2
+ side-channel: 1.1.0
- esbuild@0.27.3:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.27.3
- '@esbuild/android-arm': 0.27.3
- '@esbuild/android-arm64': 0.27.3
- '@esbuild/android-x64': 0.27.3
- '@esbuild/darwin-arm64': 0.27.3
- '@esbuild/darwin-x64': 0.27.3
- '@esbuild/freebsd-arm64': 0.27.3
- '@esbuild/freebsd-x64': 0.27.3
- '@esbuild/linux-arm': 0.27.3
- '@esbuild/linux-arm64': 0.27.3
- '@esbuild/linux-ia32': 0.27.3
- '@esbuild/linux-loong64': 0.27.3
- '@esbuild/linux-mips64el': 0.27.3
- '@esbuild/linux-ppc64': 0.27.3
- '@esbuild/linux-riscv64': 0.27.3
- '@esbuild/linux-s390x': 0.27.3
- '@esbuild/linux-x64': 0.27.3
- '@esbuild/netbsd-arm64': 0.27.3
- '@esbuild/netbsd-x64': 0.27.3
- '@esbuild/openbsd-arm64': 0.27.3
- '@esbuild/openbsd-x64': 0.27.3
- '@esbuild/openharmony-arm64': 0.27.3
- '@esbuild/sunos-x64': 0.27.3
- '@esbuild/win32-arm64': 0.27.3
- '@esbuild/win32-ia32': 0.27.3
- '@esbuild/win32-x64': 0.27.3
-
- esbuild@0.27.4:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.27.4
- '@esbuild/android-arm': 0.27.4
- '@esbuild/android-arm64': 0.27.4
- '@esbuild/android-x64': 0.27.4
- '@esbuild/darwin-arm64': 0.27.4
- '@esbuild/darwin-x64': 0.27.4
- '@esbuild/freebsd-arm64': 0.27.4
- '@esbuild/freebsd-x64': 0.27.4
- '@esbuild/linux-arm': 0.27.4
- '@esbuild/linux-arm64': 0.27.4
- '@esbuild/linux-ia32': 0.27.4
- '@esbuild/linux-loong64': 0.27.4
- '@esbuild/linux-mips64el': 0.27.4
- '@esbuild/linux-ppc64': 0.27.4
- '@esbuild/linux-riscv64': 0.27.4
- '@esbuild/linux-s390x': 0.27.4
- '@esbuild/linux-x64': 0.27.4
- '@esbuild/netbsd-arm64': 0.27.4
- '@esbuild/netbsd-x64': 0.27.4
- '@esbuild/openbsd-arm64': 0.27.4
- '@esbuild/openbsd-x64': 0.27.4
- '@esbuild/openharmony-arm64': 0.27.4
- '@esbuild/sunos-x64': 0.27.4
- '@esbuild/win32-arm64': 0.27.4
- '@esbuild/win32-ia32': 0.27.4
- '@esbuild/win32-x64': 0.27.4
+ intl-messageformat@10.7.18:
+ dependencies:
+ '@formatjs/ecma402-abstract': 2.3.6
+ '@formatjs/fast-memoize': 2.2.7
+ '@formatjs/icu-messageformat-parser': 2.11.4
+ tslib: 2.8.1
- escalade@3.2.0: {}
+ is-array-buffer@3.0.5:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
- esprima@4.0.1: {}
+ is-async-function@2.1.1:
+ dependencies:
+ async-function: 1.0.0
+ call-bound: 1.0.4
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
- estree-walker@3.0.3:
+ is-bigint@1.1.0:
dependencies:
- '@types/estree': 1.0.8
+ has-bigints: 1.1.0
- expect-type@1.3.0: {}
+ is-boolean-object@1.2.2:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
- exsolve@1.0.8: {}
+ is-bun-module@2.0.0:
+ dependencies:
+ semver: 7.7.3
- fdir@6.5.0(picomatch@4.0.3):
- optionalDependencies:
- picomatch: 4.0.3
+ is-callable@1.2.7: {}
- fill-range@7.1.1:
+ is-core-module@2.16.1:
dependencies:
- to-regex-range: 5.0.1
+ hasown: 2.0.2
- framer-motion@12.36.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ is-data-view@1.0.2:
dependencies:
- motion-dom: 12.36.0
- motion-utils: 12.36.0
- tslib: 2.8.1
- optionalDependencies:
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
-
- fsevents@2.3.2:
- optional: true
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ is-typed-array: 1.1.15
- fsevents@2.3.3:
- optional: true
+ is-date-object@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
- gensync@1.0.0-beta.2: {}
+ is-extglob@2.1.1: {}
- get-tsconfig@4.13.6:
+ is-finalizationregistry@1.1.1:
dependencies:
- resolve-pkg-maps: 1.0.0
+ call-bound: 1.0.4
- glob-parent@5.1.2:
+ is-generator-function@1.1.2:
dependencies:
- is-glob: 4.0.3
+ call-bound: 1.0.4
+ generator-function: 2.0.1
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
- goober@2.1.18(csstype@3.2.3):
+ is-glob@4.0.3:
dependencies:
- csstype: 3.2.3
+ is-extglob: 2.1.1
- graceful-fs@4.2.11: {}
+ is-map@2.0.3: {}
- h3@2.0.1-rc.16:
- dependencies:
- rou3: 0.8.1
- srvx: 0.11.9
+ is-negative-zero@2.0.3: {}
- html-encoding-sniffer@6.0.0:
+ is-number-object@1.1.1:
dependencies:
- '@exodus/bytes': 1.15.0
- transitivePeerDependencies:
- - '@noble/hashes'
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
- htmlparser2@10.1.0:
- dependencies:
- domelementtype: 2.3.0
- domhandler: 5.0.3
- domutils: 3.2.2
- entities: 7.0.1
+ is-number@7.0.0: {}
- http-proxy-agent@7.0.2:
+ is-regex@1.2.1:
dependencies:
- agent-base: 7.1.4
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
+ call-bound: 1.0.4
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
- https-proxy-agent@7.0.6:
+ is-set@2.0.3: {}
+
+ is-shared-array-buffer@1.0.4:
dependencies:
- agent-base: 7.1.4
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
+ call-bound: 1.0.4
- human-id@4.1.3: {}
+ is-string@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
- iconv-lite@0.6.3:
+ is-symbol@1.1.1:
dependencies:
- safer-buffer: 2.1.2
+ call-bound: 1.0.4
+ has-symbols: 1.1.0
+ safe-regex-test: 1.1.0
- is-binary-path@2.1.0:
+ is-typed-array@1.1.15:
dependencies:
- binary-extensions: 2.3.0
+ which-typed-array: 1.1.19
- is-extglob@2.1.1: {}
+ is-weakmap@2.0.2: {}
- is-glob@4.0.3:
+ is-weakref@1.1.1:
dependencies:
- is-extglob: 2.1.1
+ call-bound: 1.0.4
- is-number@7.0.0: {}
+ is-weakset@2.0.4:
+ dependencies:
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
- is-potential-custom-element-name@1.0.1: {}
+ isarray@2.0.5: {}
- isbot@5.1.36: {}
+ isexe@2.0.0: {}
- jiti@2.6.1: {}
+ iterator.prototype@1.1.5:
+ dependencies:
+ define-data-property: 1.1.4
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ has-symbols: 1.1.0
+ set-function-name: 2.0.2
- js-sha256@0.11.1: {}
+ javascript-natural-sort@0.7.1: {}
js-tokens@4.0.0: {}
@@ -4054,222 +3450,209 @@ snapshots:
dependencies:
argparse: 2.0.1
- jsdom@28.1.0:
- dependencies:
- '@acemir/cssom': 0.9.31
- '@asamuzakjp/dom-selector': 6.8.1
- '@bramus/specificity': 2.4.2
- '@exodus/bytes': 1.15.0
- cssstyle: 6.2.0
- data-urls: 7.0.0
- decimal.js: 10.6.0
- html-encoding-sniffer: 6.0.0
- http-proxy-agent: 7.0.2
- https-proxy-agent: 7.0.6
- is-potential-custom-element-name: 1.0.1
- parse5: 8.0.0
- saxes: 6.0.0
- symbol-tree: 3.2.4
- tough-cookie: 6.0.1
- undici: 7.24.2
- w3c-xmlserializer: 5.0.0
- webidl-conversions: 8.0.1
- whatwg-mimetype: 5.0.0
- whatwg-url: 16.0.1
- xml-name-validator: 5.0.0
- transitivePeerDependencies:
- - '@noble/hashes'
- - supports-color
-
jsesc@3.1.0: {}
- json5@2.2.3: {}
+ json-buffer@3.0.1: {}
- kleur@4.1.5: {}
+ json-schema-traverse@0.4.1: {}
- kysely@0.27.6: {}
+ json-stable-stringify-without-jsonify@1.0.1: {}
- launch-editor@2.13.1:
+ json5@1.0.2:
dependencies:
- picocolors: 1.1.1
- shell-quote: 1.8.3
+ minimist: 1.2.8
- lightningcss-android-arm64@1.31.1:
- optional: true
+ json5@2.2.3: {}
- lightningcss-android-arm64@1.32.0:
- optional: true
+ jsx-ast-utils@3.3.5:
+ dependencies:
+ array-includes: 3.1.9
+ array.prototype.flat: 1.3.3
+ object.assign: 4.1.7
+ object.values: 1.2.1
- lightningcss-darwin-arm64@1.31.1:
- optional: true
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
- lightningcss-darwin-arm64@1.32.0:
- optional: true
+ language-subtag-registry@0.3.23: {}
- lightningcss-darwin-x64@1.31.1:
- optional: true
+ language-tags@1.0.9:
+ dependencies:
+ language-subtag-registry: 0.3.23
- lightningcss-darwin-x64@1.32.0:
- optional: true
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
- lightningcss-freebsd-x64@1.31.1:
- optional: true
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
- lightningcss-freebsd-x64@1.32.0:
- optional: true
+ lodash-es@4.17.21: {}
- lightningcss-linux-arm-gnueabihf@1.31.1:
- optional: true
+ lodash.merge@4.6.2: {}
- lightningcss-linux-arm-gnueabihf@1.32.0:
- optional: true
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
- lightningcss-linux-arm64-gnu@1.31.1:
- optional: true
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
- lightningcss-linux-arm64-gnu@1.32.0:
- optional: true
+ math-intrinsics@1.1.0: {}
- lightningcss-linux-arm64-musl@1.31.1:
- optional: true
+ merge2@1.4.1: {}
- lightningcss-linux-arm64-musl@1.32.0:
- optional: true
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
- lightningcss-linux-x64-gnu@1.31.1:
- optional: true
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.12
- lightningcss-linux-x64-gnu@1.32.0:
- optional: true
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
- lightningcss-linux-x64-musl@1.31.1:
- optional: true
+ minimist@1.2.8: {}
- lightningcss-linux-x64-musl@1.32.0:
- optional: true
+ ms@2.1.3: {}
- lightningcss-win32-arm64-msvc@1.31.1:
- optional: true
+ nanoid@3.3.11: {}
- lightningcss-win32-arm64-msvc@1.32.0:
- optional: true
+ napi-postinstall@0.3.4: {}
- lightningcss-win32-x64-msvc@1.31.1:
- optional: true
+ natural-compare@1.4.0: {}
- lightningcss-win32-x64-msvc@1.32.0:
- optional: true
+ negotiator@1.0.0: {}
- lightningcss@1.31.1:
- dependencies:
- detect-libc: 2.1.2
- optionalDependencies:
- lightningcss-android-arm64: 1.31.1
- lightningcss-darwin-arm64: 1.31.1
- lightningcss-darwin-x64: 1.31.1
- lightningcss-freebsd-x64: 1.31.1
- lightningcss-linux-arm-gnueabihf: 1.31.1
- lightningcss-linux-arm64-gnu: 1.31.1
- lightningcss-linux-arm64-musl: 1.31.1
- lightningcss-linux-x64-gnu: 1.31.1
- lightningcss-linux-x64-musl: 1.31.1
- lightningcss-win32-arm64-msvc: 1.31.1
- lightningcss-win32-x64-msvc: 1.31.1
-
- lightningcss@1.32.0:
+ next-intl-swc-plugin-extractor@4.5.8: {}
+
+ next-intl@4.5.8(next@16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(react@19.2.1)(typescript@5.9.3):
dependencies:
- detect-libc: 2.1.2
+ '@formatjs/intl-localematcher': 0.5.10
+ '@swc/core': 1.15.3
+ negotiator: 1.0.0
+ next: 16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
+ next-intl-swc-plugin-extractor: 4.5.8
+ po-parser: 1.0.2
+ react: 19.2.1
+ use-intl: 4.5.8(react@19.2.1)
optionalDependencies:
- lightningcss-android-arm64: 1.32.0
- lightningcss-darwin-arm64: 1.32.0
- lightningcss-darwin-x64: 1.32.0
- lightningcss-freebsd-x64: 1.32.0
- lightningcss-linux-arm-gnueabihf: 1.32.0
- lightningcss-linux-arm64-gnu: 1.32.0
- lightningcss-linux-arm64-musl: 1.32.0
- lightningcss-linux-x64-gnu: 1.32.0
- lightningcss-linux-x64-musl: 1.32.0
- lightningcss-win32-arm64-msvc: 1.32.0
- lightningcss-win32-x64-msvc: 1.32.0
-
- lru-cache@11.2.7: {}
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - '@swc/helpers'
- lru-cache@5.1.1:
+ next@16.0.7(@babel/core@7.28.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1):
dependencies:
- yallist: 3.1.1
+ '@next/env': 16.0.7
+ '@swc/helpers': 0.5.15
+ caniuse-lite: 1.0.30001759
+ postcss: 8.4.31
+ react: 19.2.1
+ react-dom: 19.2.1(react@19.2.1)
+ styled-jsx: 5.1.6(@babel/core@7.28.5)(react@19.2.1)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 16.0.7
+ '@next/swc-darwin-x64': 16.0.7
+ '@next/swc-linux-arm64-gnu': 16.0.7
+ '@next/swc-linux-arm64-musl': 16.0.7
+ '@next/swc-linux-x64-gnu': 16.0.7
+ '@next/swc-linux-x64-musl': 16.0.7
+ '@next/swc-win32-arm64-msvc': 16.0.7
+ '@next/swc-win32-x64-msvc': 16.0.7
+ sharp: 0.34.5
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
- lucide-react@0.577.0(react@19.2.4):
- dependencies:
- react: 19.2.4
+ node-releases@2.0.27: {}
- lz-string@1.5.0: {}
+ object-assign@4.1.1: {}
- magic-string@0.30.21:
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
+ object-inspect@1.13.4: {}
- mdn-data@2.27.1: {}
+ object-keys@1.1.1: {}
- miniflare@4.20260312.0:
+ object.assign@4.1.7:
dependencies:
- '@cspotcode/source-map-support': 0.8.1
- sharp: 0.34.5
- undici: 7.18.2
- workerd: 1.20260312.1
- ws: 8.18.0
- youch: 4.1.0-beta.10
- transitivePeerDependencies:
- - bufferutil
- - utf-8-validate
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
+ has-symbols: 1.1.0
+ object-keys: 1.1.1
- motion-dom@12.36.0:
+ object.entries@1.1.9:
dependencies:
- motion-utils: 12.36.0
-
- motion-utils@12.36.0: {}
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
- motion@12.36.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
+ object.fromentries@2.0.8:
dependencies:
- framer-motion: 12.36.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
- tslib: 2.8.1
- optionalDependencies:
- react: 19.2.4
- react-dom: 19.2.4(react@19.2.4)
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-object-atoms: 1.1.1
- ms@2.1.3: {}
-
- nanoid@3.3.11: {}
-
- node-releases@2.0.36: {}
+ object.groupby@1.0.3:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
- normalize-path@3.0.0: {}
+ object.values@1.2.1:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
- nth-check@2.1.1:
+ optionator@0.9.4:
dependencies:
- boolbase: 1.0.0
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
- obug@2.1.1: {}
+ own-keys@1.0.1:
+ dependencies:
+ get-intrinsic: 1.3.0
+ object-keys: 1.1.1
+ safe-push-apply: 1.0.0
- parse5-htmlparser2-tree-adapter@7.1.0:
+ p-limit@3.1.0:
dependencies:
- domhandler: 5.0.3
- parse5: 7.3.0
+ yocto-queue: 0.1.0
- parse5-parser-stream@7.1.2:
+ p-locate@5.0.0:
dependencies:
- parse5: 7.3.0
+ p-limit: 3.1.0
- parse5@7.3.0:
+ parent-module@1.0.1:
dependencies:
- entities: 6.0.1
+ callsites: 3.1.0
- parse5@8.0.0:
+ parse-imports-exports@0.2.4:
dependencies:
- entities: 6.0.1
+ parse-statements: 1.0.11
+
+ parse-statements@1.0.11: {}
- path-to-regexp@6.3.0: {}
+ path-exists@4.0.0: {}
- pathe@2.0.3: {}
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
picocolors@1.1.1: {}
@@ -4277,103 +3660,145 @@ snapshots:
picomatch@4.0.3: {}
- playwright-core@1.58.2: {}
+ po-parser@1.0.2: {}
+
+ possible-typed-array-names@1.1.0: {}
- playwright@1.58.2:
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.4.31:
dependencies:
- playwright-core: 1.58.2
- optionalDependencies:
- fsevents: 2.3.2
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
- postcss@8.5.8:
+ postcss@8.4.49:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
- prettier@3.8.1: {}
+ prelude-ls@1.2.1: {}
+
+ prettier@3.7.4: {}
- pretty-format@27.5.1:
+ prop-types@15.8.1:
dependencies:
- ansi-regex: 5.0.1
- ansi-styles: 5.2.0
- react-is: 17.0.2
+ loose-envify: 1.4.0
+ object-assign: 4.1.1
+ react-is: 16.13.1
punycode@2.3.1: {}
- react-dom@19.2.4(react@19.2.4):
+ queue-microtask@1.2.3: {}
+
+ react-dom@19.2.1(react@19.2.1):
dependencies:
- react: 19.2.4
+ react: 19.2.1
scheduler: 0.27.0
- react-is@17.0.2: {}
+ react-is@16.13.1: {}
- react@19.2.4: {}
+ react-is@19.2.1: {}
- readdirp@3.6.0:
- dependencies:
- picomatch: 2.3.1
+ react@19.2.1: {}
- recast@0.23.11:
+ reflect.getprototypeof@1.0.10:
dependencies:
- ast-types: 0.16.1
- esprima: 4.0.1
- source-map: 0.6.1
- tiny-invariant: 1.3.3
- tslib: 2.8.1
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ which-builtin-type: 1.2.1
- require-from-string@2.0.2: {}
+ regexp.prototype.flags@1.5.4:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-errors: 1.3.0
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ set-function-name: 2.0.2
- reselect@5.1.1: {}
+ resolve-from@4.0.0: {}
resolve-pkg-maps@1.0.0: {}
- rolldown@1.0.0-rc.9:
+ resolve@1.22.11:
dependencies:
- '@oxc-project/types': 0.115.0
- '@rolldown/pluginutils': 1.0.0-rc.9
- optionalDependencies:
- '@rolldown/binding-android-arm64': 1.0.0-rc.9
- '@rolldown/binding-darwin-arm64': 1.0.0-rc.9
- '@rolldown/binding-darwin-x64': 1.0.0-rc.9
- '@rolldown/binding-freebsd-x64': 1.0.0-rc.9
- '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.9
- '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.9
- '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.9
- '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.9
- '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.9
- '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.9
- '@rolldown/binding-linux-x64-musl': 1.0.0-rc.9
- '@rolldown/binding-openharmony-arm64': 1.0.0-rc.9
- '@rolldown/binding-wasm32-wasi': 1.0.0-rc.9
- '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.9
- '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.9
-
- rou3@0.8.1: {}
-
- safer-buffer@2.1.2: {}
-
- saxes@6.0.0:
- dependencies:
- xmlchars: 2.2.0
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ resolve@2.0.0-next.5:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ reusify@1.1.0: {}
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ safe-array-concat@1.1.3:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ has-symbols: 1.1.0
+ isarray: 2.0.5
+
+ safe-push-apply@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ isarray: 2.0.5
+
+ safe-regex-test@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-regex: 1.2.1
scheduler@0.27.0: {}
semver@6.3.1: {}
- semver@7.7.4: {}
+ semver@7.7.3: {}
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+
+ set-function-name@2.0.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
- seroval-plugins@1.5.1(seroval@1.5.1):
+ set-proto@1.0.0:
dependencies:
- seroval: 1.5.1
+ dunder-proto: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
- seroval@1.5.1: {}
+ shallowequal@1.1.0: {}
sharp@0.34.5:
dependencies:
- '@img/colour': 1.1.0
+ '@img/colour': 1.0.0
detect-libc: 2.1.2
- semver: 7.7.4
+ semver: 7.7.3
optionalDependencies:
'@img/sharp-darwin-arm64': 0.34.5
'@img/sharp-darwin-x64': 0.34.5
@@ -4400,250 +3825,309 @@ snapshots:
'@img/sharp-win32-ia32': 0.34.5
'@img/sharp-win32-x64': 0.34.5
- shell-quote@1.8.3: {}
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
- siginfo@2.0.0: {}
+ shebang-regex@3.0.0: {}
- solid-js@1.9.11:
+ side-channel-list@1.0.0:
dependencies:
- csstype: 3.2.3
- seroval: 1.5.1
- seroval-plugins: 1.5.1(seroval@1.5.1)
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-map: 1.0.1
+
+ side-channel@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
source-map-js@1.2.1: {}
- source-map@0.6.1: {}
+ stable-hash@0.0.5: {}
- source-map@0.7.6: {}
+ stop-iteration-iterator@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ internal-slot: 1.1.0
- sqlite-wasm-kysely@0.3.0(kysely@0.27.6):
+ string.prototype.includes@2.0.1:
dependencies:
- '@sqlite.org/sqlite-wasm': 3.48.0-build4
- kysely: 0.27.6
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
- srvx@0.11.9: {}
+ string.prototype.matchall@4.0.12:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ internal-slot: 1.1.0
+ regexp.prototype.flags: 1.5.4
+ set-function-name: 2.0.2
+ side-channel: 1.1.0
- stackback@0.0.2: {}
+ string.prototype.repeat@1.0.0:
+ dependencies:
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
- std-env@4.0.0: {}
+ string.prototype.trim@1.2.10:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-data-property: 1.1.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.0
+ es-object-atoms: 1.1.1
+ has-property-descriptors: 1.0.2
- supports-color@10.2.2: {}
+ string.prototype.trimend@1.0.9:
+ dependencies:
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
- symbol-tree@3.2.4: {}
+ string.prototype.trimstart@1.0.8:
+ dependencies:
+ call-bind: 1.0.8
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.1
- tabbable@6.4.0: {}
+ strip-bom@3.0.0: {}
- tailwindcss@4.2.1: {}
+ strip-json-comments@3.1.1: {}
- tapable@2.3.0: {}
+ styled-components@6.1.19(react-dom@19.2.1(react@19.2.1))(react@19.2.1):
+ dependencies:
+ '@emotion/is-prop-valid': 1.2.2
+ '@emotion/unitless': 0.8.1
+ '@types/stylis': 4.2.5
+ css-to-react-native: 3.2.0
+ csstype: 3.1.3
+ postcss: 8.4.49
+ react: 19.2.1
+ react-dom: 19.2.1(react@19.2.1)
+ shallowequal: 1.1.0
+ stylis: 4.3.2
+ tslib: 2.6.2
- tiny-invariant@1.3.3: {}
+ styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.1):
+ dependencies:
+ client-only: 0.0.1
+ react: 19.2.1
+ optionalDependencies:
+ '@babel/core': 7.28.5
- tiny-warning@1.0.3: {}
+ stylis@4.3.2: {}
- tinybench@2.9.0: {}
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
- tinyexec@1.0.4: {}
+ supports-preserve-symlinks-flag@1.0.0: {}
tinyglobby@0.2.15:
dependencies:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
- tinyrainbow@3.1.0: {}
-
- tldts-core@7.0.25: {}
-
- tldts@7.0.25:
- dependencies:
- tldts-core: 7.0.25
-
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
- tough-cookie@6.0.1:
+ ts-api-utils@2.1.0(typescript@5.9.3):
dependencies:
- tldts: 7.0.25
+ typescript: 5.9.3
- tr46@6.0.0:
+ tsconfig-paths@3.15.0:
dependencies:
- punycode: 2.3.1
+ '@types/json5': 0.0.29
+ json5: 1.0.2
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+
+ tslib@2.6.2: {}
tslib@2.8.1: {}
- tsx@4.21.0:
+ type-check@0.4.0:
dependencies:
- esbuild: 0.27.4
- get-tsconfig: 4.13.6
- optionalDependencies:
- fsevents: 2.3.3
-
- typescript@5.9.3: {}
+ prelude-ls: 1.2.1
- ufo@1.6.3: {}
-
- undici-types@7.18.2: {}
-
- undici@7.18.2: {}
+ typed-array-buffer@1.0.3:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-typed-array: 1.1.15
- undici@7.24.2: {}
+ typed-array-byte-length@1.0.3:
+ dependencies:
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
- unenv@2.0.0-rc.24:
+ typed-array-byte-offset@1.0.4:
dependencies:
- pathe: 2.0.3
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
+ reflect.getprototypeof: 1.0.10
- unplugin@2.3.11:
+ typed-array-length@1.0.7:
dependencies:
- '@jridgewell/remapping': 2.3.5
- acorn: 8.16.0
- picomatch: 4.0.3
- webpack-virtual-modules: 0.6.2
+ call-bind: 1.0.8
+ for-each: 0.3.5
+ gopd: 1.2.0
+ is-typed-array: 1.1.15
+ possible-typed-array-names: 1.1.0
+ reflect.getprototypeof: 1.0.10
- update-browserslist-db@1.2.3(browserslist@4.28.1):
+ typescript-eslint@8.48.1(eslint@9.39.1)(typescript@5.9.3):
dependencies:
- browserslist: 4.28.1
- escalade: 3.2.0
- picocolors: 1.1.1
+ '@typescript-eslint/eslint-plugin': 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
+ '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
+ eslint: 9.39.1
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
- urlpattern-polyfill@10.1.0: {}
+ typescript@5.9.3: {}
- use-sync-external-store@1.6.0(react@19.2.4):
+ unbox-primitive@1.1.0:
dependencies:
- react: 19.2.4
+ call-bound: 1.0.4
+ has-bigints: 1.1.0
+ has-symbols: 1.1.0
+ which-boxed-primitive: 1.1.1
- uuid@10.0.0: {}
+ undici-types@7.16.0: {}
- uuid@13.0.0: {}
-
- vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0):
+ unrs-resolver@1.11.1:
dependencies:
- '@oxc-project/runtime': 0.115.0
- lightningcss: 1.32.0
- picomatch: 4.0.3
- postcss: 8.5.8
- rolldown: 1.0.0-rc.9
- tinyglobby: 0.2.15
- optionalDependencies:
- '@types/node': 25.5.0
- esbuild: 0.27.4
- fsevents: 2.3.3
- jiti: 2.6.1
- tsx: 4.21.0
-
- vitefu@1.1.2(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)):
- optionalDependencies:
- vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)
-
- vitest@4.1.0(@types/node@25.5.0)(jsdom@28.1.0)(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)):
- dependencies:
- '@vitest/expect': 4.1.0
- '@vitest/mocker': 4.1.0(vite@8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0))
- '@vitest/pretty-format': 4.1.0
- '@vitest/runner': 4.1.0
- '@vitest/snapshot': 4.1.0
- '@vitest/spy': 4.1.0
- '@vitest/utils': 4.1.0
- es-module-lexer: 2.0.0
- expect-type: 1.3.0
- magic-string: 0.30.21
- obug: 2.1.1
- pathe: 2.0.3
- picomatch: 4.0.3
- std-env: 4.0.0
- tinybench: 2.9.0
- tinyexec: 1.0.4
- tinyglobby: 0.2.15
- tinyrainbow: 3.1.0
- vite: 8.0.0(@types/node@25.5.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)
- why-is-node-running: 2.3.0
+ napi-postinstall: 0.3.4
optionalDependencies:
- '@types/node': 25.5.0
- jsdom: 28.1.0
- transitivePeerDependencies:
- - msw
-
- w3c-xmlserializer@5.0.0:
+ '@unrs/resolver-binding-android-arm-eabi': 1.11.1
+ '@unrs/resolver-binding-android-arm64': 1.11.1
+ '@unrs/resolver-binding-darwin-arm64': 1.11.1
+ '@unrs/resolver-binding-darwin-x64': 1.11.1
+ '@unrs/resolver-binding-freebsd-x64': 1.11.1
+ '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1
+ '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1
+ '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-arm64-musl': 1.11.1
+ '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1
+ '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-x64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-x64-musl': 1.11.1
+ '@unrs/resolver-binding-wasm32-wasi': 1.11.1
+ '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1
+ '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
+ '@unrs/resolver-binding-win32-x64-msvc': 1.11.1
+
+ update-browserslist-db@1.2.2(browserslist@4.28.1):
dependencies:
- xml-name-validator: 5.0.0
-
- webidl-conversions@8.0.1: {}
-
- webpack-virtual-modules@0.6.2: {}
+ browserslist: 4.28.1
+ escalade: 3.2.0
+ picocolors: 1.1.1
- whatwg-encoding@3.1.1:
+ uri-js@4.4.1:
dependencies:
- iconv-lite: 0.6.3
-
- whatwg-mimetype@4.0.0: {}
-
- whatwg-mimetype@5.0.0: {}
+ punycode: 2.3.1
- whatwg-url@16.0.1:
+ use-intl@4.5.8(react@19.2.1):
dependencies:
- '@exodus/bytes': 1.15.0
- tr46: 6.0.0
- webidl-conversions: 8.0.1
- transitivePeerDependencies:
- - '@noble/hashes'
+ '@formatjs/fast-memoize': 2.2.7
+ '@schummar/icu-type-parser': 1.21.5
+ intl-messageformat: 10.7.18
+ react: 19.2.1
- why-is-node-running@2.3.0:
+ which-boxed-primitive@1.1.1:
dependencies:
- siginfo: 2.0.0
- stackback: 0.0.2
-
- workerd@1.20260312.1:
- optionalDependencies:
- '@cloudflare/workerd-darwin-64': 1.20260312.1
- '@cloudflare/workerd-darwin-arm64': 1.20260312.1
- '@cloudflare/workerd-linux-64': 1.20260312.1
- '@cloudflare/workerd-linux-arm64': 1.20260312.1
- '@cloudflare/workerd-windows-64': 1.20260312.1
-
- wrangler@4.73.0:
- dependencies:
- '@cloudflare/kv-asset-handler': 0.4.2
- '@cloudflare/unenv-preset': 2.15.0(unenv@2.0.0-rc.24)(workerd@1.20260312.1)
- blake3-wasm: 2.1.5
- esbuild: 0.27.3
- miniflare: 4.20260312.0
- path-to-regexp: 6.3.0
- unenv: 2.0.0-rc.24
- workerd: 1.20260312.1
- optionalDependencies:
- fsevents: 2.3.3
- transitivePeerDependencies:
- - bufferutil
- - utf-8-validate
+ is-bigint: 1.1.0
+ is-boolean-object: 1.2.2
+ is-number-object: 1.1.1
+ is-string: 1.1.1
+ is-symbol: 1.1.1
- ws@8.18.0: {}
+ which-builtin-type@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ function.prototype.name: 1.1.8
+ has-tostringtag: 1.0.2
+ is-async-function: 2.1.1
+ is-date-object: 1.1.0
+ is-finalizationregistry: 1.1.1
+ is-generator-function: 1.1.2
+ is-regex: 1.2.1
+ is-weakref: 1.1.1
+ isarray: 2.0.5
+ which-boxed-primitive: 1.1.1
+ which-collection: 1.0.2
+ which-typed-array: 1.1.19
- ws@8.19.0: {}
+ which-collection@1.0.2:
+ dependencies:
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-weakmap: 2.0.2
+ is-weakset: 2.0.4
- xml-name-validator@5.0.0: {}
+ which-typed-array@1.1.19:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.4
+ for-each: 0.3.5
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
- xmlbuilder2@4.0.3:
+ which@2.0.2:
dependencies:
- '@oozcitak/dom': 2.0.2
- '@oozcitak/infra': 2.0.2
- '@oozcitak/util': 10.0.0
- js-yaml: 4.1.1
+ isexe: 2.0.0
- xmlchars@2.2.0: {}
+ word-wrap@1.2.5: {}
yallist@3.1.1: {}
- youch-core@0.3.3:
- dependencies:
- '@poppinss/exception': 1.2.3
- error-stack-parser-es: 1.0.5
+ yocto-queue@0.1.0: {}
- youch@4.1.0-beta.10:
+ zod-validation-error@4.0.2(zod@4.1.13):
dependencies:
- '@poppinss/colors': 4.1.6
- '@poppinss/dumper': 0.6.5
- '@speed-highlight/core': 1.2.14
- cookie: 1.1.1
- youch-core: 0.3.3
+ zod: 4.1.13
- zod@3.25.76: {}
+ zod@4.1.13: {}
diff --git a/project.inlang/settings.json b/project.inlang/settings.json
deleted file mode 100644
index b0f394f..0000000
--- a/project.inlang/settings.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "$schema": "https://inlang.com/schema/project-settings",
- "baseLocale": "en",
- "locales": [
- "af-ZA",
- "ar-SA",
- "bs-BA",
- "ca-ES",
- "cs-CZ",
- "da-DK",
- "de-DE",
- "el-GR",
- "en",
- "es-ES",
- "fi-FI",
- "fr-FR",
- "he-IL",
- "hu-HU",
- "it-IT",
- "ja-JP",
- "ko-KR",
- "my-MM",
- "nb-NO",
- "nl-NL",
- "no-NO",
- "pl-PL",
- "pt-BR",
- "pt-PT",
- "ro-RO",
- "ru-RU",
- "sk-SK",
- "sr-SP",
- "sv-SE",
- "tr-TR",
- "uk-UA",
- "vi-VN",
- "zh-CN",
- "zh-HK",
- "zh-TW"
- ],
- "modules": [
- "https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@4/dist/index.js",
- "https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@2/dist/index.js"
- ],
- "plugin.inlang.messageFormat": {
- "pathPattern": "./messages/{locale}.json"
- }
-}
diff --git a/proxy.ts b/proxy.ts
new file mode 100644
index 0000000..4c9fb1e
--- /dev/null
+++ b/proxy.ts
@@ -0,0 +1,8 @@
+import createMiddleware from 'next-intl/middleware'
+import { routing } from './i18n/routing'
+
+export default createMiddleware(routing)
+
+export const config = {
+ matcher: '/((?!api|trpc|_next|_vercel|.*\\..*).*)'
+}
diff --git a/public/linearmouse-logo.svg b/public/linearmouse-logo.svg
deleted file mode 100644
index 0c37f7c..0000000
--- a/public/linearmouse-logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/public/linearmouse-pointer.png b/public/linearmouse-pointer.png
deleted file mode 100644
index b0f649e..0000000
Binary files a/public/linearmouse-pointer.png and /dev/null differ
diff --git a/public/linearmouse-scrolling.png b/public/linearmouse-scrolling.png
deleted file mode 100644
index 65c81cc..0000000
Binary files a/public/linearmouse-scrolling.png and /dev/null differ
diff --git a/public/logo192.png b/public/logo192.png
deleted file mode 100644
index fc44b0a..0000000
Binary files a/public/logo192.png and /dev/null differ
diff --git a/public/logo512.png b/public/logo512.png
deleted file mode 100644
index a4e47a6..0000000
Binary files a/public/logo512.png and /dev/null differ
diff --git a/public/manifest.json b/public/manifest.json
deleted file mode 100644
index 078ef50..0000000
--- a/public/manifest.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "short_name": "TanStack App",
- "name": "Create TanStack App Sample",
- "icons": [
- {
- "src": "favicon.ico",
- "sizes": "64x64 32x32 24x24 16x16",
- "type": "image/x-icon"
- },
- {
- "src": "logo192.png",
- "type": "image/png",
- "sizes": "192x192"
- },
- {
- "src": "logo512.png",
- "type": "image/png",
- "sizes": "512x512"
- }
- ],
- "start_url": ".",
- "display": "standalone",
- "theme_color": "#000000",
- "background_color": "#ffffff"
-}
diff --git a/public/tanstack-circle-logo.png b/public/tanstack-circle-logo.png
deleted file mode 100644
index 9db3e67..0000000
Binary files a/public/tanstack-circle-logo.png and /dev/null differ
diff --git a/public/tanstack-word-logo-white.svg b/public/tanstack-word-logo-white.svg
deleted file mode 100644
index b6ec508..0000000
--- a/public/tanstack-word-logo-white.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/skills-lock.json b/skills-lock.json
deleted file mode 100644
index 4044a7b..0000000
--- a/skills-lock.json
+++ /dev/null
@@ -1,95 +0,0 @@
-{
- "version": 1,
- "skills": {
- "adapt": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "cc2a4e3b438553622819d2e02b996e67c6685a93de8974e3b4189c14a5414237"
- },
- "animate": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "d9678700cc105ae1af98763fb4f85168ba398395d241aae336ef421836d9dd82"
- },
- "audit": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "49cbdf9ca35de3c03d060363207d70fd40b6ec7390e67710887ca43976244b2c"
- },
- "bolder": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "210d2d6c071512370613d3816ee58b256b0c5ea69f74b1363584059a8b2d3669"
- },
- "clarify": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "848b37fa3e6445008d9a521930a539a9cf9bac254c0419f80f2757010d4d46db"
- },
- "colorize": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "c6ad8d7ae05771fee9232b72a16a42180e0e111c7372795f9009bf1cc52ccb95"
- },
- "critique": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "d1498e1b023ab9df934905b5e7ad0979bfee47d81bca174364c7889f7190013a"
- },
- "delight": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "629c6efc3d12ab63bdadcf6674aa2a56f12848242c619f00b8f54f0f468bf928"
- },
- "distill": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "4fb24ad0ca7e75497cc25d98cf1de636a1acbbe0da919c75daab846ec63ba305"
- },
- "extract": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "b01b8be227a2a094e4b65f340c5a767bdbfd27d8bf2ccee4f75c203e44a5a592"
- },
- "frontend-design": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "5316f00e012e2d4a81f996adda009b6862a6684af4f6eef3f46a69f456121c6a"
- },
- "harden": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "69cecc4f28fb2f140652669bd45cc492744ad5c3c45083f5e0be5b0a5ef8acd0"
- },
- "normalize": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "a2d2c28085b46b1b0a97aa4133a4df5fec9cf77a7c3cef275b901065e11bc080"
- },
- "onboard": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "a6d7f5c09cb2828e622fbb8fa1467bc70b041519ffed2198d9de627325d97b66"
- },
- "optimize": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "278796e7d0b6febea9a53705f741f47d473cc4725684a5e0bd75fd4a99791b1c"
- },
- "polish": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "72c2426ac9540884eb5032bb438324bb344d0e2dd2b80f300a9fb49fe38d624e"
- },
- "quieter": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "139b3e3c9d43b79b4e6ccffaeb874265bc916d7d90662950e9f05581d6e0c06a"
- },
- "teach-impeccable": {
- "source": "pbakaus/impeccable",
- "sourceType": "github",
- "computedHash": "61855594bf79bc5b2665cfca3580b93840cfe645872c5a2deeaa5ad336570d5a"
- }
- }
-}
diff --git a/src/components/home/Brand.tsx b/src/components/home/Brand.tsx
deleted file mode 100644
index b967d2a..0000000
--- a/src/components/home/Brand.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import { Link } from '@tanstack/react-router'
-
-export function Brand() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- )
-}
diff --git a/src/components/home/CookieConsent.tsx b/src/components/home/CookieConsent.tsx
deleted file mode 100644
index 07d83a0..0000000
--- a/src/components/home/CookieConsent.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { useEffect, useState } from 'react'
-
-import { m } from '#/paraglide/messages'
-
-export function CookieConsent() {
- const [visible, setVisible] = useState(false)
-
- useEffect(() => {
- if (!localStorage.getItem('cookie_consent_informed')) {
- setVisible(true)
- }
- }, [])
-
- if (!visible) {
- return null
- }
-
- return (
-
-
- {m.cookie_description()}
- {
- localStorage.setItem('cookie_consent_informed', '1')
- setVisible(false)
- }}
- className="shrink-0 rounded-full bg-[color:var(--brand)] px-4 py-1.5 text-xs font-medium text-white transition-[background-color,transform] duration-200 ease-[var(--ease-out-quart)] hover:brightness-110 active:scale-[0.98]"
- >
- {m.ok()}
-
-
-
- )
-}
diff --git a/src/components/home/CopyStatusIcon.tsx b/src/components/home/CopyStatusIcon.tsx
deleted file mode 100644
index 51c2863..0000000
--- a/src/components/home/CopyStatusIcon.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { Check, Copy } from 'lucide-react'
-
-type CopyStatusIconProps = {
- copied: boolean
- wrapperClassName?: string
- iconClassName?: string
-}
-
-export function CopyStatusIcon({
- copied,
- wrapperClassName = 'size-5',
- iconClassName = 'size-3',
-}: CopyStatusIconProps) {
- const baseIconClassName =
- `absolute ${iconClassName} transition-[opacity,filter,scale] duration-[360ms] ease-[var(--ease-spring)]`
-
- return (
-
-
-
-
- )
-}
diff --git a/src/components/home/DownloadActions.tsx b/src/components/home/DownloadActions.tsx
deleted file mode 100644
index e41282d..0000000
--- a/src/components/home/DownloadActions.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-import { Button } from '@base-ui/react/button'
-import { Terminal } from 'lucide-react'
-
-import { m } from '#/paraglide/messages'
-
-import { CopyStatusIcon } from './CopyStatusIcon'
-import { homebrewCommand } from './constants'
-import { useCopyFeedback } from './useCopyFeedback'
-
-export function DownloadActions() {
- const { copied, handleCopy } = useCopyFeedback(homebrewCommand)
-
- return (
-
- )
-}
diff --git a/src/components/home/HangingPunctuation.tsx b/src/components/home/HangingPunctuation.tsx
deleted file mode 100644
index 2aa9ed3..0000000
--- a/src/components/home/HangingPunctuation.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-import type { ReactNode } from 'react'
-
-export function HangingPunctuation({ children }: { children: ReactNode }) {
- return {children}
-}
diff --git a/src/components/home/HeaderDownload.tsx b/src/components/home/HeaderDownload.tsx
deleted file mode 100644
index 50381fc..0000000
--- a/src/components/home/HeaderDownload.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import { Menu } from '@base-ui/react/menu'
-import { Button } from '@base-ui/react/button'
-import { ChevronDown, Download, Terminal } from 'lucide-react'
-
-import { m } from '#/paraglide/messages'
-
-import { CopyStatusIcon } from './CopyStatusIcon'
-import { homebrewCommand, menuPopupClass } from './constants'
-import { useCopyFeedback } from './useCopyFeedback'
-
-export function HeaderDownload() {
- const { copied, handleCopy } = useCopyFeedback(homebrewCommand)
-
- return (
-
- )
-}
diff --git a/src/components/home/HeroSlogan.tsx b/src/components/home/HeroSlogan.tsx
deleted file mode 100644
index d7829a1..0000000
--- a/src/components/home/HeroSlogan.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { m } from '#/paraglide/messages'
-
-import { Marquee } from './Marquee'
-import { RichHeadingText } from './RichHeadingText'
-import { messageToRichTokens } from './richText'
-
-export function HeroSlogan() {
- const marqueeLines = [
- m.slogan_marquee_mouse_and_trackpad(),
- m.slogan_marquee_per_app_profiles(),
- m.slogan_marquee_reverse_scrolling(),
- m.slogan_marquee_pointer_precision(),
- m.slogan_marquee_button_shortcuts(),
- ]
-
- return (
-
-
- ),
- }}
- />
-
- )
-}
diff --git a/src/components/home/HomeFeatures.tsx b/src/components/home/HomeFeatures.tsx
deleted file mode 100644
index 7f449ab..0000000
--- a/src/components/home/HomeFeatures.tsx
+++ /dev/null
@@ -1,72 +0,0 @@
-import { m } from '#/paraglide/messages'
-
-import { containerClass, featureScreenshots } from './constants'
-import { RichHeadingText } from './RichHeadingText'
-import { messageToRichTokens, richTokensToPlainText } from './richText'
-import { ThemedImage } from './ThemedImage'
-
-const featureContent = [
- {
- title: m.feature_profiles_title,
- description: m.feature_profiles_description,
- },
- {
- title: m.feature_scrolling_title,
- description: m.feature_scrolling_description,
- },
- {
- title: m.feature_pointer_title,
- description: m.feature_pointer_description,
- },
- {
- title: m.feature_buttons_title,
- description: m.feature_buttons_description,
- },
-] as const
-
-export function HomeFeatures() {
- return (
-
- {featureScreenshots.map((feature, index) => {
- const messages = featureContent[index]
- if (!messages) {
- return null
- }
-
- const titleTokens = messageToRichTokens(messages.title)
-
- return (
-
-
-
0 ? 'scroll-reveal' : ''} mx-auto max-w-[680px] text-center`}>
-
-
-
-
-
-
{messages.description()}
-
-
-
-
0 ? 'scroll-reveal-image' : 'scroll-reveal'} mx-auto mt-12 max-w-[800px]`}>
-
-
-
-
- )
- })}
-
- )
-}
diff --git a/src/components/home/HomeFooter.tsx b/src/components/home/HomeFooter.tsx
deleted file mode 100644
index 688daf5..0000000
--- a/src/components/home/HomeFooter.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { m } from '#/paraglide/messages'
-
-import { containerClass } from './constants'
-import { CookieConsent } from './CookieConsent'
-
-export function HomeFooter() {
- return (
- <>
-
-
- >
- )
-}
diff --git a/src/components/home/HomeHeader.tsx b/src/components/home/HomeHeader.tsx
deleted file mode 100644
index ee3a464..0000000
--- a/src/components/home/HomeHeader.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-import type { CSSProperties } from 'react'
-
-import { m } from '#/paraglide/messages'
-
-import { Brand } from './Brand'
-import { containerClass, navTriggerBaseClass } from './constants'
-import { HeaderDownload } from './HeaderDownload'
-import { LanguageMenu } from './LanguageMenu'
-import { MobileMenu } from './MobileMenu'
-import { ThemeMenu } from './ThemeMenu'
-
-const FLOAT_THRESHOLD = 620
-const FLOAT_REVEAL_RANGE = 148
-
-const floatingAnimationStyle = {
- '--header-float-start': `${FLOAT_THRESHOLD}px`,
- '--header-float-end': `${FLOAT_THRESHOLD + FLOAT_REVEAL_RANGE}px`,
-} as CSSProperties
-
-function HeaderBar({ floating }: { floating: boolean }) {
- return (
-
- )
-}
-
-export function HomeHeader() {
- return (
- <>
-
-
-
- >
- )
-}
diff --git a/src/components/home/HomeHero.tsx b/src/components/home/HomeHero.tsx
deleted file mode 100644
index 899db1c..0000000
--- a/src/components/home/HomeHero.tsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { containerClass } from './constants'
-import { DownloadActions } from './DownloadActions'
-import { HeroSlogan } from './HeroSlogan'
-
-export function HomeHero() {
- return (
-
- )
-}
diff --git a/src/components/home/HomePage.tsx b/src/components/home/HomePage.tsx
deleted file mode 100644
index 677b1b5..0000000
--- a/src/components/home/HomePage.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { useEffect } from 'react'
-
-import { isRtlLocale } from '#/lib/i18n'
-import { getLocale } from '#/paraglide/runtime'
-
-import { HomeFeatures } from './HomeFeatures'
-import { HomeFooter } from './HomeFooter'
-import { HomeHeader } from './HomeHeader'
-import { HomeHero } from './HomeHero'
-
-export function HomePage() {
- const locale = getLocale()
-
- useEffect(() => {
- document.documentElement.lang = locale
- document.documentElement.dir = isRtlLocale(locale) ? 'rtl' : 'ltr'
- }, [locale])
-
- return (
-
-
-
-
-
-
-
-
- )
-}
diff --git a/src/components/home/LanguageMenu.tsx b/src/components/home/LanguageMenu.tsx
deleted file mode 100644
index c715f86..0000000
--- a/src/components/home/LanguageMenu.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import { Menu } from '@base-ui/react/menu'
-import { Globe } from 'lucide-react'
-
-import { isRtlLocale, localeNames } from '#/lib/i18n'
-import { m } from '#/paraglide/messages'
-import { getLocale, locales } from '#/paraglide/runtime'
-
-import { menuItemClass, menuPopupClass, navTriggerClass } from './constants'
-
-export function LanguageMenu() {
- const locale = getLocale()
-
- return (
-
-
-
-
-
-
-
-
-
- {locales.map((option) => (
-
- {localeNames[option]}
-
- ))}
-
-
-
-
-
- )
-}
diff --git a/src/components/home/Marquee.test.tsx b/src/components/home/Marquee.test.tsx
deleted file mode 100644
index 79e462a..0000000
--- a/src/components/home/Marquee.test.tsx
+++ /dev/null
@@ -1,169 +0,0 @@
-// @vitest-environment jsdom
-
-import React, { forwardRef } from 'react'
-import { act, render, screen } from '@testing-library/react'
-import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
-
-import { Marquee } from './Marquee'
-
-vi.mock('motion/react', () => ({
- motion: {
- span: forwardRef & {
- animate?: { width?: number, y?: string }
- initial?: boolean
- transition?: unknown
- }>(function MockMotionSpan({
- animate,
- initial: _initial,
- transition: _transition,
- style,
- ...props
- }, ref) {
- return (
-
- )
- }),
- },
- useReducedMotion: () => false,
-}))
-
-class ResizeObserverMock {
- constructor(private readonly callback: ResizeObserverCallback) {}
-
- observe() {
- this.callback([], this as unknown as ResizeObserver)
- }
-
- disconnect() {}
-
- unobserve() {}
-}
-
-class IntersectionObserverMock {
- constructor(private readonly callback: IntersectionObserverCallback) {}
-
- observe() {
- this.callback(
- [{ isIntersecting: true } as IntersectionObserverEntry],
- this as unknown as IntersectionObserver,
- )
- }
-
- disconnect() {}
-
- unobserve() {}
-}
-
-describe('Marquee', () => {
- let visibilityState: DocumentVisibilityState
-
- beforeEach(() => {
- vi.useFakeTimers()
- vi.stubGlobal('ResizeObserver', ResizeObserverMock)
- vi.stubGlobal('IntersectionObserver', IntersectionObserverMock)
- visibilityState = 'visible'
-
- Object.defineProperty(HTMLElement.prototype, 'getBoundingClientRect', {
- configurable: true,
- value() {
- const width = (this.textContent?.length ?? 0) * 10
-
- return {
- bottom: 0,
- height: 20,
- left: 0,
- right: width,
- top: 0,
- width,
- x: 0,
- y: 0,
- toJSON() {
- return {}
- },
- }
- },
- })
-
- Object.defineProperty(document, 'visibilityState', {
- configurable: true,
- get() {
- return visibilityState
- },
- })
- })
-
- afterEach(() => {
- vi.useRealTimers()
- vi.unstubAllGlobals()
- })
-
- it('does not reset to the first line when rerendered with the same content', () => {
- const { rerender } = render(
- ,
- )
-
- const track = screen.getAllByText('Mouse').at(-1)?.parentElement
- expect(track).not.toBeNull()
- expect(track?.style.transform).toBe('translateY(-0em)')
-
- act(() => {
- vi.advanceTimersByTime(3200)
- })
-
- expect(track?.style.transform).toBe('translateY(-1.24em)')
-
- rerender(
- ,
- )
-
- expect(track?.style.transform).toBe('translateY(-1.24em)')
- })
-
- it('pauses while the page is hidden and resumes from the remaining delay', () => {
- render(
- ,
- )
-
- const track = screen.getAllByText('Mouse').at(-1)?.parentElement
- expect(track).not.toBeNull()
- expect(track?.style.transform).toBe('translateY(-0em)')
-
- act(() => {
- vi.advanceTimersByTime(1600)
- })
-
- act(() => {
- visibilityState = 'hidden'
- document.dispatchEvent(new Event('visibilitychange'))
- vi.advanceTimersByTime(10_000)
- })
-
- expect(track?.style.transform).toBe('translateY(-0em)')
-
- act(() => {
- visibilityState = 'visible'
- document.dispatchEvent(new Event('visibilitychange'))
- vi.advanceTimersByTime(1599)
- })
-
- expect(track?.style.transform).toBe('translateY(-0em)')
-
- act(() => {
- vi.advanceTimersByTime(1)
- })
-
- expect(track?.style.transform).toBe('translateY(-1.24em)')
- })
-})
diff --git a/src/components/home/Marquee.tsx b/src/components/home/Marquee.tsx
deleted file mode 100644
index e2f0a3d..0000000
--- a/src/components/home/Marquee.tsx
+++ /dev/null
@@ -1,268 +0,0 @@
-import { motion, useReducedMotion } from 'motion/react'
-import { useEffect, useLayoutEffect, useRef, useState } from 'react'
-
-type MarqueeProps = {
- lines: string[]
-}
-
-const rotationDelayMs = 3200
-const lineHeightEm = 1.24
-const widthSpring = {
- type: 'spring',
- stiffness: 340,
- damping: 32,
- mass: 0.85,
-} as const
-const slideSpring = {
- type: 'spring',
- stiffness: 260,
- damping: 28,
- mass: 0.8,
-} as const
-
-const useIsomorphicLayoutEffect =
- typeof window === 'undefined' ? useEffect : useLayoutEffect
-
-export function Marquee({ lines }: MarqueeProps) {
- const [currentIndex, setCurrentIndex] = useState(0)
- const [lineWidths, setLineWidths] = useState(() =>
- lines.map(() => 0),
- )
- const [hasEnteredAnimatedMode, setHasEnteredAnimatedMode] = useState(false)
- const rootRef = useRef(null)
- const measurementRefs = useRef<(HTMLSpanElement | null)[]>([])
- const timeoutRef = useRef(null)
- const cycleStartedAtRef = useRef(null)
- const remainingDelayRef = useRef(rotationDelayMs)
- const isPageVisibleRef = useRef(true)
- const isInViewRef = useRef(true)
- const prefersReducedMotion = useReducedMotion()
- const linesSignature = lines.join('\u0000')
- const currentLine = lines[currentIndex] ?? ''
-
- const clearScheduledAdvance = () => {
- if (timeoutRef.current !== null) {
- window.clearTimeout(timeoutRef.current)
- timeoutRef.current = null
- }
- cycleStartedAtRef.current = null
- }
-
- const scheduleAdvance = (delay: number) => {
- if (lines.length < 2 || prefersReducedMotion || !isPageVisibleRef.current || !isInViewRef.current) {
- return
- }
-
- const nextDelay = Math.max(0, delay)
- remainingDelayRef.current = nextDelay
- cycleStartedAtRef.current = Date.now()
- timeoutRef.current = window.setTimeout(() => {
- timeoutRef.current = null
- cycleStartedAtRef.current = null
- remainingDelayRef.current = rotationDelayMs
- setCurrentIndex((index) => (index + 1) % lines.length)
- scheduleAdvance(rotationDelayMs)
- }, nextDelay)
- }
-
- const pauseAdvance = () => {
- if (timeoutRef.current === null) {
- return
- }
-
- const startedAt = cycleStartedAtRef.current
- if (startedAt !== null) {
- const elapsed = Date.now() - startedAt
- remainingDelayRef.current = Math.max(0, remainingDelayRef.current - elapsed)
- }
-
- clearScheduledAdvance()
- }
-
- const resumeAdvance = () => {
- if (timeoutRef.current !== null) {
- return
- }
-
- scheduleAdvance(remainingDelayRef.current)
- }
-
- useIsomorphicLayoutEffect(() => {
- measurementRefs.current = measurementRefs.current.slice(0, lines.length)
- clearScheduledAdvance()
- remainingDelayRef.current = rotationDelayMs
- isInViewRef.current = true
- setLineWidths(lines.map(() => 0))
- setHasEnteredAnimatedMode(false)
- setCurrentIndex(0)
- }, [lines.length, linesSignature])
-
- useIsomorphicLayoutEffect(() => {
- if (typeof ResizeObserver === 'undefined') {
- return
- }
-
- const elements = measurementRefs.current.slice(0, lines.length)
- if (!elements.length || elements.some((element) => element === null)) {
- return
- }
-
- const measure = () => {
- setLineWidths(
- elements.map((element) =>
- Math.ceil(element?.getBoundingClientRect().width ?? 0),
- ),
- )
- }
-
- measure()
-
- const observer = new ResizeObserver(measure)
- elements.forEach((element) => {
- if (element) {
- observer.observe(element)
- }
- })
-
- return () => observer.disconnect()
- }, [lines.length, linesSignature])
-
- const currentWidth = lineWidths[currentIndex] ?? 0
- const areAllWidthsReady =
- lineWidths.length === lines.length
- && lineWidths.every((width) => width > 0)
-
- useEffect(() => {
- if (areAllWidthsReady) {
- setHasEnteredAnimatedMode(true)
- }
- }, [areAllWidthsReady])
-
- useEffect(() => {
- if (typeof document === 'undefined') {
- return
- }
-
- const updateVisibility = () => {
- isPageVisibleRef.current = document.visibilityState !== 'hidden'
-
- if (isPageVisibleRef.current) {
- resumeAdvance()
- } else {
- pauseAdvance()
- }
- }
-
- updateVisibility()
- document.addEventListener('visibilitychange', updateVisibility)
-
- return () => {
- document.removeEventListener('visibilitychange', updateVisibility)
- }
- }, [lines.length, prefersReducedMotion])
-
- useEffect(() => {
- const element = rootRef.current
- if (!element || typeof IntersectionObserver === 'undefined') {
- isInViewRef.current = true
- resumeAdvance()
- return
- }
-
- const observer = new IntersectionObserver(([entry]) => {
- isInViewRef.current = entry?.isIntersecting ?? true
-
- if (isInViewRef.current) {
- resumeAdvance()
- } else {
- pauseAdvance()
- }
- })
-
- observer.observe(element)
-
- return () => {
- observer.disconnect()
- }
- }, [lines.length, prefersReducedMotion, linesSignature])
-
- useEffect(() => {
- if (prefersReducedMotion) {
- pauseAdvance()
- return
- }
-
- resumeAdvance()
-
- return () => {
- clearScheduledAdvance()
- }
- }, [lines.length, prefersReducedMotion, linesSignature])
-
- const shouldAnimate = !prefersReducedMotion && hasEnteredAnimatedMode
-
- return (
-
-
- {lines.map((line, index) => (
- {
- measurementRefs.current[index] = element
- }}
- className="inline-block h-[1.24em] w-fit whitespace-nowrap leading-[1.24]"
- >
- {line}
-
- ))}
-
-
- {areAllWidthsReady
- ? (
-
-
- {currentLine}
-
-
-
-
- {lines.map((line, index) => (
-
- {line}
-
- ))}
-
-
-
- )
- : (
-
- {currentLine}
-
- )}
-
- )
-}
diff --git a/src/components/home/MobileMenu.tsx b/src/components/home/MobileMenu.tsx
deleted file mode 100644
index 56cd3ee..0000000
--- a/src/components/home/MobileMenu.tsx
+++ /dev/null
@@ -1,65 +0,0 @@
-import { Menu } from '@base-ui/react/menu'
-import { Button } from '@base-ui/react/button'
-import { Download, Github, Menu as MenuIcon, MessageSquare, Terminal } from 'lucide-react'
-
-import { m } from '#/paraglide/messages'
-
-import { CopyStatusIcon } from './CopyStatusIcon'
-import { homebrewCommand, menuItemClass, menuPopupClass, navTriggerClass } from './constants'
-import { useCopyFeedback } from './useCopyFeedback'
-
-export function MobileMenu() {
- const { copied, handleCopy } = useCopyFeedback(homebrewCommand)
-
- return (
-
-
-
-
-
-
-
-
-
-
- {m.install_download()}
-
-
-
-
-
- {homebrewCommand}
-
-
-
-
-
-
-
-
- {m.nav_github()}
-
-
-
-
- {m.nav_discussions()}
-
-
-
-
-
- )
-}
diff --git a/src/components/home/RichHeadingText.tsx b/src/components/home/RichHeadingText.tsx
deleted file mode 100644
index 5bf59ad..0000000
--- a/src/components/home/RichHeadingText.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import type { ReactNode } from 'react'
-
-import { renderRichTokens, splitRichTokensIntoLines, type RichToken } from './richText'
-
-type RichHeadingTextProps = {
- tokens: readonly RichToken[]
- keyPrefix: string
- options?: { marquee?: ReactNode }
-}
-
-export function RichHeadingText({ tokens, keyPrefix, options }: RichHeadingTextProps) {
- const lines = splitRichTokensIntoLines(tokens)
-
- return (
- <>
- {lines.map((line, index) => {
- const key = `${keyPrefix}-line-${index}`
-
- return (
-
-
- {renderRichTokens(line, key, options)}
-
-
- )
- })}
- >
- )
-}
diff --git a/src/components/home/ThemeMenu.tsx b/src/components/home/ThemeMenu.tsx
deleted file mode 100644
index 224f004..0000000
--- a/src/components/home/ThemeMenu.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import { Menu } from '@base-ui/react/menu'
-import { Check } from 'lucide-react'
-import { useEffect, useState } from 'react'
-
-import { m } from '#/paraglide/messages'
-import { Route as RootRoute } from '#/routes/__root'
-
-import { menuItemClass, menuPopupClass, navTriggerClass, themeModes, type ThemeMode } from './constants'
-import { applyThemeMode, readThemeModeFromDocument, writeThemeCookie } from './theme'
-
-export function ThemeMenu() {
- const { theme: initialTheme } = RootRoute.useLoaderData()
- const [theme, setTheme] = useState(initialTheme)
-
- useEffect(() => {
- setTheme(initialTheme)
- applyThemeMode(initialTheme)
- }, [initialTheme])
-
- useEffect(() => {
- const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
- const syncSystemTheme = () => {
- if (readThemeModeFromDocument() === 'system') {
- applyThemeMode('system')
- }
- }
-
- mediaQuery.addEventListener('change', syncSystemTheme)
- return () => mediaQuery.removeEventListener('change', syncSystemTheme)
- }, [])
-
- function handleThemeChange(nextTheme: ThemeMode) {
- setTheme(nextTheme)
- writeThemeCookie(nextTheme)
- applyThemeMode(nextTheme)
- }
-
- const currentTheme = themeModes.find((option) => option.value === theme) ?? themeModes[0]
- const CurrentIcon = currentTheme.icon
- const themeLabels: Record = {
- system: m.theme_system(),
- light: m.theme_light(),
- dark: m.theme_dark(),
- }
-
- return (
-
-
-
-
-
-
-
-
- handleThemeChange(value as ThemeMode)}>
- {themeModes.map(({ value, icon: Icon }) => (
-
-
- {themeLabels[value]}
-
-
-
-
- ))}
-
-
-
-
-
- )
-}
diff --git a/src/components/home/ThemedImage.tsx b/src/components/home/ThemedImage.tsx
deleted file mode 100644
index c186d3c..0000000
--- a/src/components/home/ThemedImage.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-type ThemedImageProps = {
- light: string
- dark: string
- alt: string
- className?: string
- sizes?: string
-}
-
-export function ThemedImage({ light, dark, alt, className, sizes }: ThemedImageProps) {
- return (
-
-
-
-
- )
-}
diff --git a/src/components/home/constants.ts b/src/components/home/constants.ts
deleted file mode 100644
index 9c281f9..0000000
--- a/src/components/home/constants.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { Laptop, Moon, Sun } from 'lucide-react'
-
-export const homebrewCommand = 'brew install --cask linearmouse'
-
-export const featureScreenshots = [
- {
- light: '/features/feature-1.png',
- dark: '/features/feature-1-dark.png',
- },
- {
- light: '/features/feature-2.png',
- dark: '/features/feature-2-dark.png',
- },
- {
- light: '/features/feature-3.png',
- dark: '/features/feature-3-dark.png',
- },
- {
- light: '/hero/screenshots/buttons.png',
- dark: '/hero/screenshots/buttons-dark.png',
- },
-] as const
-
-export const containerClass = 'mx-auto w-full max-w-[980px] px-6'
-
-export const containerWideClass = 'mx-auto w-full max-w-[1200px] px-6'
-
-export const themeModes = [
- { value: 'system', label: 'System', icon: Laptop },
- { value: 'light', label: 'Light', icon: Sun },
- { value: 'dark', label: 'Dark', icon: Moon },
-] as const
-
-export const navTriggerBaseClass =
- 'cursor-pointer items-center gap-2 rounded-full px-3.5 py-2.5 text-[13px] font-medium text-[color:color-mix(in_oklab,var(--text)_68%,var(--canvas))] transition-[color,opacity] duration-200 ease-[var(--ease-out-quart)] hover:text-[color:var(--text)] sm:px-4 sm:text-sm'
-
-export const navTriggerClass = `inline-flex ${navTriggerBaseClass}`
-
-export const menuPopupClass = 'menu-popup-motion glass-surface z-[120] rounded-2xl p-1.5 outline-none'
-
-export const menuItemClass =
- 'flex w-full cursor-pointer items-center gap-2.5 rounded-xl px-3 py-2 text-sm font-normal text-[color:var(--muted)] outline-none transition-[background-color,color] duration-200 ease-[var(--ease-out-quart)] data-[highlighted]:bg-[color:var(--surface-subtle)] data-[highlighted]:text-[color:var(--text)]'
-
-export type ThemeMode = (typeof themeModes)[number]['value']
diff --git a/src/components/home/copyText.ts b/src/components/home/copyText.ts
deleted file mode 100644
index 263ceed..0000000
--- a/src/components/home/copyText.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-export function copyText(value: string) {
- if (typeof navigator.clipboard?.writeText === 'function') {
- return navigator.clipboard.writeText(value)
- }
-
- const input = document.createElement('input')
- input.style.position = 'absolute'
- input.style.left = '-1000px'
- input.value = value
- document.body.appendChild(input)
- input.select()
- document.execCommand('copy')
- input.remove()
- return Promise.resolve()
-}
diff --git a/src/components/home/index.ts b/src/components/home/index.ts
deleted file mode 100644
index a535c25..0000000
--- a/src/components/home/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export { HomePage } from './HomePage'
diff --git a/src/components/home/richText.tsx b/src/components/home/richText.tsx
deleted file mode 100644
index 11ad829..0000000
--- a/src/components/home/richText.tsx
+++ /dev/null
@@ -1,243 +0,0 @@
-import { cloneElement, isValidElement, type ReactNode } from 'react'
-
-import type { MessagePart } from '#/paraglide/runtime'
-
-import { HangingPunctuation } from './HangingPunctuation'
-
-export type RichToken =
- | { type: 'text'; value: string }
- | { type: 'strong'; children: readonly RichToken[] }
- | { type: 'quote'; children: readonly RichToken[] }
- | { type: 'gradient'; children: readonly RichToken[] }
- | { type: 'marquee'; children: readonly RichToken[] }
- | { type: 'hangingPunctuation'; children: readonly RichToken[] }
-
-function mapMarkupNameToTokenType(name: string): Exclude | null {
- switch (name) {
- case 'strong':
- return 'strong'
- case 'gradient':
- return 'gradient'
- case 'marquee':
- return 'marquee'
- case 'hang':
- return 'hangingPunctuation'
- case 'quote':
- return 'quote'
- default:
- return null
- }
-}
-
-export function messageToRichTokens(message: unknown): RichToken[] {
- if (typeof message !== 'function') {
- return []
- }
-
- const maybeRichMessage = message as {
- (): string
- parts?: () => MessagePart[]
- }
-
- const parts = typeof maybeRichMessage.parts === 'function'
- ? maybeRichMessage.parts()
- : [{ type: 'text', value: maybeRichMessage() } satisfies MessagePart]
-
- return messagePartsToRichTokens(parts)
-}
-
-export function messagePartsToRichTokens(parts: readonly MessagePart[]): RichToken[] {
- const root: RichToken[] = []
- const stack: Array<{ name: string; children: RichToken[] }> = []
-
- const append = (token: RichToken) => {
- const parent = stack.at(-1)
- if (parent) {
- parent.children.push(token)
- return
- }
-
- root.push(token)
- }
-
- for (const part of parts) {
- switch (part.type) {
- case 'text':
- if (part.value) {
- append({ type: 'text', value: part.value })
- }
- break
- case 'markup-start':
- stack.push({ name: part.name, children: [] })
- break
- case 'markup-end': {
- const frame = stack.pop()
-
- if (!frame) {
- break
- }
-
- if (frame.name !== part.name) {
- for (const child of frame.children) {
- append(child)
- }
- break
- }
-
- const tokenType = mapMarkupNameToTokenType(frame.name)
- if (tokenType) {
- append({ type: tokenType, children: frame.children })
- } else {
- for (const child of frame.children) {
- append(child)
- }
- }
- break
- }
- case 'markup-standalone': {
- const tokenType = mapMarkupNameToTokenType(part.name)
- if (tokenType) {
- append({ type: tokenType, children: [] })
- }
- break
- }
- }
- }
-
- while (stack.length > 0) {
- const frame = stack.pop()
- if (!frame) {
- continue
- }
-
- const tokenType = mapMarkupNameToTokenType(frame.name)
- if (tokenType) {
- append({ type: tokenType, children: frame.children })
- continue
- }
-
- for (const child of frame.children) {
- append(child)
- }
- }
-
- return root
-}
-
-export function renderRichTokens(
- tokens: readonly RichToken[],
- keyPrefix: string,
- options: { marquee?: ReactNode } = {},
-): ReactNode[] {
- return tokens.map((token, index) => {
- const key = `${keyPrefix}-${index}`
-
- switch (token.type) {
- case 'text':
- return token.value ? {token.value} : null
- case 'strong':
- return (
-
- {renderRichTokens(token.children, key, options)}
-
- )
- case 'quote':
- return (
-
- {renderRichTokens(token.children, key, options)}
-
- )
- case 'gradient':
- return (
-
- {renderRichTokens(token.children, key, options)}
-
- )
- case 'marquee':
- if (!options.marquee) {
- return null
- }
-
- return isValidElement(options.marquee)
- ? cloneElement(options.marquee, { key })
- : {options.marquee}
- case 'hangingPunctuation':
- return (
-
- {renderRichTokens(token.children, key, options)}
-
- )
- }
- })
-}
-
-export function splitRichTokensIntoLines(tokens: readonly RichToken[]): RichToken[][] {
- const lines: RichToken[][] = [[]]
-
- const pushLine = () => lines.push([])
- const pushToken = (token: RichToken) => {
- if (token.type === 'text' && !token.value) {
- return
- }
-
- lines.at(-1)?.push(token)
- }
-
- for (const token of tokens) {
- if (token.type === 'text') {
- const parts = token.value.split('\n')
-
- parts.forEach((part, index) => {
- if (part) {
- pushToken({ type: 'text', value: part })
- }
-
- if (index < parts.length - 1) {
- pushLine()
- }
- })
-
- continue
- }
-
- if (token.type === 'marquee') {
- pushToken(token)
- continue
- }
-
- const childLines = splitRichTokensIntoLines(token.children)
-
- childLines.forEach((childLine, index) => {
- if (childLine.length > 0) {
- pushToken({ ...token, children: childLine })
- }
-
- if (index < childLines.length - 1) {
- pushLine()
- }
- })
- }
-
- const nonEmptyLines = lines.filter((line) => line.length > 0)
- return nonEmptyLines.length > 0 ? nonEmptyLines : [[]]
-}
-
-export function richTokensToPlainText(tokens: readonly RichToken[]): string {
- const text = tokens
- .map((token) => {
- switch (token.type) {
- case 'text':
- return token.value.replace(/\n+/g, ' ')
- case 'marquee':
- return ''
- default:
- return richTokensToPlainText(token.children)
- }
- })
- .join('')
-
- return text.replace(/\s+/g, ' ').trim()
-}
diff --git a/src/components/home/theme.test.ts b/src/components/home/theme.test.ts
deleted file mode 100644
index 85f8e5d..0000000
--- a/src/components/home/theme.test.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { describe, expect, it } from 'vitest'
-
-import {
- parseThemeMode,
- readThemeModeFromCookieString,
- serializeThemeCookie,
- themeCookieName,
-} from './theme'
-
-describe('theme helpers', () => {
- it('falls back to system for invalid theme values', () => {
- expect(parseThemeMode('dark')).toBe('dark')
- expect(parseThemeMode('')).toBe('system')
- expect(parseThemeMode('sepia')).toBe('system')
- expect(parseThemeMode(undefined)).toBe('system')
- })
-
- it('reads the stored theme from the cookie header string', () => {
- expect(readThemeModeFromCookieString(`${themeCookieName}=dark`)).toBe('dark')
- expect(readThemeModeFromCookieString(`foo=bar; ${themeCookieName}=light`)).toBe('light')
- expect(readThemeModeFromCookieString('foo=bar')).toBe('system')
- })
-
- it('serializes the theme cookie with stable attributes', () => {
- expect(serializeThemeCookie('system')).toBe(
- `${themeCookieName}=system; Path=/; Max-Age=31536000; SameSite=Lax`,
- )
- })
-})
diff --git a/src/components/home/theme.ts b/src/components/home/theme.ts
deleted file mode 100644
index 447ef4a..0000000
--- a/src/components/home/theme.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-import type { ThemeMode } from './constants'
-
-export const themeCookieName = 'linearmouse-theme-mode'
-export const themeCookieMaxAge = 60 * 60 * 24 * 365
-
-export function parseThemeMode(value?: string | null): ThemeMode {
- return value === 'light' || value === 'dark' || value === 'system'
- ? value
- : 'system'
-}
-
-export function readThemeModeFromCookieString(cookieString: string): ThemeMode {
- const prefix = `${themeCookieName}=`
-
- for (const entry of cookieString.split(';')) {
- const trimmedEntry = entry.trim()
-
- if (!trimmedEntry.startsWith(prefix)) {
- continue
- }
-
- return parseThemeMode(decodeURIComponent(trimmedEntry.slice(prefix.length)))
- }
-
- return 'system'
-}
-
-export function readThemeModeFromDocument(): ThemeMode {
- const rootTheme = document.documentElement.dataset.theme
-
- return rootTheme
- ? parseThemeMode(rootTheme)
- : readThemeModeFromCookieString(document.cookie)
-}
-
-export function serializeThemeCookie(theme: ThemeMode) {
- return [
- `${themeCookieName}=${encodeURIComponent(theme)}`,
- 'Path=/',
- `Max-Age=${themeCookieMaxAge}`,
- 'SameSite=Lax',
- ].join('; ')
-}
-
-export function writeThemeCookie(theme: ThemeMode) {
- document.cookie = serializeThemeCookie(theme)
-}
-
-export function getThemeColorScheme(theme: ThemeMode) {
- return theme === 'light' ? 'light' : theme === 'dark' ? 'dark' : 'light dark'
-}
-
-export function resolveTheme(theme: ThemeMode) {
- if (theme === 'light' || theme === 'dark') {
- return theme
- }
-
- return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
-}
-
-export function applyThemeMode(theme: ThemeMode) {
- const root = document.documentElement
- const resolvedTheme = resolveTheme(theme)
-
- root.dataset.theme = theme
- root.dataset.resolvedTheme = resolvedTheme
- root.style.colorScheme = getThemeColorScheme(theme)
-}
diff --git a/src/components/home/useCopyFeedback.ts b/src/components/home/useCopyFeedback.ts
deleted file mode 100644
index 71a282f..0000000
--- a/src/components/home/useCopyFeedback.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { useEffect, useRef, useState } from 'react'
-
-import { copyText } from './copyText'
-
-export function useCopyFeedback(text: string) {
- const [copied, setCopied] = useState(false)
- const copiedTimeoutRef = useRef(null)
-
- useEffect(() => {
- return () => {
- if (copiedTimeoutRef.current !== null) {
- window.clearTimeout(copiedTimeoutRef.current)
- }
- }
- }, [])
-
- async function handleCopy() {
- await copyText(text)
- setCopied(true)
-
- if (copiedTimeoutRef.current !== null) {
- window.clearTimeout(copiedTimeoutRef.current)
- }
-
- copiedTimeoutRef.current = window.setTimeout(() => setCopied(false), 1200)
- }
-
- return { copied, handleCopy }
-}
diff --git a/src/generated/locales.ts b/src/generated/locales.ts
deleted file mode 100644
index 3886559..0000000
--- a/src/generated/locales.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export const locales = ["af-ZA","ar-SA","bs-BA","ca-ES","cs-CZ","da-DK","de-DE","el-GR","en","es-ES","fi-FI","fr-FR","he-IL","hu-HU","it-IT","ja-JP","ko-KR","my-MM","nb-NO","nl-NL","no-NO","pl-PL","pt-BR","pt-PT","ro-RO","ru-RU","sk-SK","sr-SP","sv-SE","tr-TR","uk-UA","vi-VN","zh-CN","zh-HK","zh-TW"] as const
-export type AppLocale = (typeof locales)[number]
diff --git a/src/lib/appcast.test.ts b/src/lib/appcast.test.ts
deleted file mode 100644
index 6ec4d4c..0000000
--- a/src/lib/appcast.test.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import { describe, expect, it } from 'vitest'
-
-import { buildAppcastXml, matchesSparkle2 } from './appcast'
-
-describe('buildAppcastXml', () => {
- it('renders GitHub releases into Sparkle appcast xml', () => {
- const xml = buildAppcastXml([
- {
- assets: [
- {
- browser_download_url:
- 'https://github.com/linearmouse/linearmouse/releases/download/v1.2.3/LinearMouse.dmg',
- },
- ],
- body_html: 'Stable release
',
- draft: false,
- html_url: 'https://github.com/linearmouse/linearmouse/releases/tag/v1.2.3',
- name: 'v1.2.3',
- published_at: '2026-03-14T08:00:00Z',
- tag_name: 'v1.2.3',
- },
- {
- assets: [
- {
- browser_download_url:
- 'https://github.com/linearmouse/linearmouse/releases/download/v1.3.0-beta.1/LinearMouse.dmg',
- },
- ],
- body_html: 'Beta release
',
- draft: false,
- html_url:
- 'https://github.com/linearmouse/linearmouse/releases/tag/v1.3.0-beta.1',
- name: 'v1.3.0-beta.1',
- published_at: '2026-03-15T08:00:00Z',
- tag_name: 'v1.3.0-beta.1',
- },
- ])
-
- expect(xml).toContain('LinearMouse ')
- expect(xml).toContain('1.2.3 ')
- expect(xml).toContain('beta ')
- expect(xml).toContain('https://dl.linearmouse.org/v1.2.3/LinearMouse.dmg')
- expect(xml).toContain('Stable release ]]>')
- })
-
- it('skips draft releases and releases without assets', () => {
- const xml = buildAppcastXml([
- {
- assets: [],
- draft: false,
- html_url: 'https://example.com/no-asset',
- name: 'v1.0.0',
- published_at: '2026-03-14T08:00:00Z',
- tag_name: 'v1.0.0',
- },
- {
- assets: [
- {
- browser_download_url:
- 'https://github.com/linearmouse/linearmouse/releases/download/v1.0.1/LinearMouse.dmg',
- },
- ],
- draft: true,
- html_url: 'https://example.com/draft',
- name: 'v1.0.1',
- published_at: '2026-03-14T08:00:00Z',
- tag_name: 'v1.0.1',
- },
- ])
-
- expect(xml).not.toContain('- ')
- })
-})
-
-describe('matchesSparkle2', () => {
- it('matches legacy Sparkle 2 user agents', () => {
- expect(matchesSparkle2('LinearMouse/0.9.0 Sparkle/2.0.1')).toBe(true)
- expect(matchesSparkle2('LinearMouse/0.9.0 Sparkle/2.1.0')).toBe(false)
- expect(matchesSparkle2(null)).toBe(false)
- })
-})
diff --git a/src/lib/appcast.ts b/src/lib/appcast.ts
deleted file mode 100644
index 7dd2a9b..0000000
--- a/src/lib/appcast.ts
+++ /dev/null
@@ -1,230 +0,0 @@
-import { create } from 'xmlbuilder2'
-
-const APPCAST_PATH = '/appcast.xml'
-const GITHUB_RELEASES_URL =
- 'https://api.github.com/repos/linearmouse/linearmouse/releases?per_page=30'
-const GITHUB_DOWNLOAD_PREFIX =
- 'https://github.com/linearmouse/linearmouse/releases/download/'
-const CDN_DOWNLOAD_PREFIX = 'https://dl.linearmouse.org/'
-const APPCAST_MIN_UPDATE_INTERVAL_MS = 60_000
-
-const uaSparkle2Re = /\bSparkle\/2\.0\.[01]\b/
-
-const sparkle2Appcast = `
-
- LinearMouse
- https://github.com/linearmouse/linearmouse
- -
-
v0.6.1
- 0.6.1
- Fri, 10 Jun 2022 06:09:49 GMT
- https://github.com/linearmouse/linearmouse/releases/tag/v0.6.1
- What's Changed
-Bug fixes
-
-Fix the launch at login issue in some cases by @lujjjh in #132
-Fix freezing after granting accessibility permission by @lujjjh in #136
-
-Other changes
-
-Update translations (Italian and Portuguese, Brazilian) by @LuigiPiccoli17 in #131
-Universal back and forward: Ignore Dota 2 by @aramann in #133
-Add a guide on how to grant Accessibility permission by @lujjjh in #137
-
-New Contributors
-
-Full Changelog : v0.6.0...v0.6.1
]]>
-
-
-
- `
-
-type GitHubReleaseAsset = {
- browser_download_url: string
-}
-
-type GitHubRelease = {
- assets?: GitHubReleaseAsset[]
- body?: string | null
- body_html?: string | null
- draft: boolean
- html_url: string
- name: string | null
- published_at: string | null
- tag_name: string
-}
-
-type FetchLike = typeof fetch
-type AppcastEnv = Pick
-
-let cachedAppcastXml: string | null = null
-let appcastLastUpdatedAt = 0
-let appcastUpdatePromise: Promise | null = null
-
-function toPubDate(value: string | null) {
- if (!value) {
- return new Date(0).toUTCString()
- }
-
- const date = new Date(value)
-
- if (Number.isNaN(date.getTime())) {
- return new Date(0).toUTCString()
- }
-
- return date.toUTCString()
-}
-
-function toChannel(tagName: string) {
- return tagName.includes('-beta.') ? 'beta' : ''
-}
-
-function toEnclosureUrl(downloadUrl: string) {
- if (downloadUrl.startsWith(GITHUB_DOWNLOAD_PREFIX)) {
- return `${CDN_DOWNLOAD_PREFIX}${downloadUrl.slice(GITHUB_DOWNLOAD_PREFIX.length)}`
- }
-
- return downloadUrl
-}
-
-function toDescription(release: GitHubRelease) {
- return release.body_html ?? release.body ?? ''
-}
-
-function appendRelease(channelNode: ReturnType['ele']>, release: GitHubRelease) {
- const asset = release.assets?.[0]
-
- if (release.draft || !asset) {
- return
- }
-
- const title = release.name || release.tag_name
- const version = release.tag_name.replace(/^v/, '')
- const channel = toChannel(release.tag_name)
- const description = toDescription(release)
- const itemNode = channelNode.ele('item')
-
- itemNode.ele('title').txt(title)
- itemNode.ele('sparkle:version').txt(version)
-
- if (channel) {
- itemNode.ele('sparkle:channel').txt(channel)
- }
-
- itemNode.ele('pubDate').txt(toPubDate(release.published_at))
- itemNode.ele('link').txt(release.html_url)
- itemNode.ele('description').dat(description)
- itemNode
- .ele('enclosure')
- .att('url', toEnclosureUrl(asset.browser_download_url))
- .att('type', 'application/octet-stream')
-}
-
-export function buildAppcastXml(releases: GitHubRelease[]) {
- const rssNode = create({ version: '1.0' }).ele('rss', {
- 'xmlns:dc': 'http://purl.org/dc/elements/1.1/',
- 'xmlns:sparkle': 'http://www.andymatuschak.org/xml-namespaces/sparkle',
- version: '2.0',
- })
- const channelNode = rssNode.ele('channel')
-
- channelNode.ele('title').txt('LinearMouse')
- channelNode.ele('link').txt('https://linearmouse.app')
-
- for (const release of releases) {
- appendRelease(channelNode, release)
- }
-
- return rssNode.end({
- headless: true,
- prettyPrint: true,
- indent: ' ',
- newline: '\n',
- })
-}
-
-async function fetchGitHubReleases(fetchImpl: FetchLike, env: AppcastEnv) {
- const token = env.GITHUB_TOKEN
- const response = await fetchImpl(GITHUB_RELEASES_URL, {
- headers: {
- Accept: 'application/vnd.github.html+json',
- ...(token ? { Authorization: `Bearer ${token}` } : {}),
- 'User-Agent': 'linearmouse-website-appcast',
- 'X-GitHub-Api-Version': '2022-11-28',
- },
- })
-
- if (!response.ok) {
- throw new Error(`GitHub releases request failed: ${response.status}`)
- }
-
- return (await response.json()) as GitHubRelease[]
-}
-
-async function updateAppcast(fetchImpl: FetchLike, env: AppcastEnv) {
- const releases = await fetchGitHubReleases(fetchImpl, env)
-
- cachedAppcastXml = buildAppcastXml(releases)
- appcastLastUpdatedAt = Date.now()
-}
-
-export async function getAppcastXml(env: AppcastEnv, fetchImpl: FetchLike = fetch) {
- const isFresh =
- cachedAppcastXml !== null &&
- Date.now() - appcastLastUpdatedAt < APPCAST_MIN_UPDATE_INTERVAL_MS
-
- if (isFresh) {
- return cachedAppcastXml
- }
-
- if (!appcastUpdatePromise) {
- appcastUpdatePromise = updateAppcast(fetchImpl, env).finally(() => {
- appcastUpdatePromise = null
- })
- }
-
- if (cachedAppcastXml !== null) {
- return cachedAppcastXml
- }
-
- await appcastUpdatePromise
-
- if (!cachedAppcastXml) {
- throw new Error('appcast.xml not ready')
- }
-
- return cachedAppcastXml
-}
-
-export function matchesSparkle2(userAgent: string | null) {
- return userAgent !== null && uaSparkle2Re.test(userAgent)
-}
-
-export async function handleAppcastRequest(request: Request, env: AppcastEnv) {
- const { pathname } = new URL(request.url)
-
- if (pathname !== APPCAST_PATH) {
- return null
- }
-
- if (matchesSparkle2(request.headers.get('user-agent'))) {
- return new Response(sparkle2Appcast, {
- headers: {
- 'Cache-Control': 'max-age=0',
- 'Content-Type': 'text/xml; charset=utf-8',
- },
- })
- }
-
- const appcastXml = await getAppcastXml(env)
-
- return new Response(appcastXml, {
- headers: {
- 'Content-Type': 'text/xml; charset=utf-8',
- },
- })
-}
diff --git a/src/lib/i18n.ts b/src/lib/i18n.ts
deleted file mode 100644
index 8b0ab64..0000000
--- a/src/lib/i18n.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import type { AppLocale } from '#/generated/locales'
-
-export const localeNames: Record = {
- 'af-ZA': 'Afrikaans',
- 'ar-SA': 'العربية',
- 'bs-BA': 'Bosanski',
- 'ca-ES': 'Català',
- 'cs-CZ': 'Čeština',
- 'da-DK': 'Dansk',
- 'de-DE': 'Deutsch',
- 'el-GR': 'Ελληνικά',
- en: 'English',
- 'es-ES': 'Español',
- 'fi-FI': 'Suomi',
- 'fr-FR': 'Français',
- 'he-IL': 'עברית',
- 'hu-HU': 'Magyar',
- 'it-IT': 'Italiano',
- 'ja-JP': '日本語',
- 'ko-KR': '한국어',
- 'my-MM': 'မြန်မာ',
- 'nb-NO': 'Norsk bokmål',
- 'nl-NL': 'Nederlands',
- 'no-NO': 'Norsk',
- 'pl-PL': 'Polski',
- 'pt-BR': 'Português (Brasil)',
- 'pt-PT': 'Português (Portugal)',
- 'ro-RO': 'Română',
- 'ru-RU': 'Русский',
- 'sk-SK': 'Slovenčina',
- 'sr-SP': 'Српски',
- 'sv-SE': 'Svenska',
- 'tr-TR': 'Türkçe',
- 'uk-UA': 'Українська',
- 'vi-VN': 'Tiếng Việt',
- 'zh-CN': '简体中文',
- 'zh-HK': '繁體中文 (香港)',
- 'zh-TW': '繁體中文',
-}
-
-export function isRtlLocale(locale: string) {
- return locale === 'ar-SA' || locale === 'he-IL'
-}
diff --git a/src/lib/seo.ts b/src/lib/seo.ts
deleted file mode 100644
index 15ed079..0000000
--- a/src/lib/seo.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import type { AppLocale } from '#/generated/locales'
-import { locales } from '#/paraglide/runtime'
-
-const productionOrigin = 'https://linearmouse.app'
-
-function withTrailingSlash(pathname: string) {
- return pathname.endsWith('/') ? pathname : `${pathname}/`
-}
-
-export function getSiteOrigin() {
- return productionOrigin
-}
-
-export function getLocaleUrl(locale: AppLocale) {
- return new URL(withTrailingSlash(`/${locale}`), productionOrigin).toString()
-}
-
-export function getXDefaultUrl() {
- return new URL('/', productionOrigin).toString()
-}
-
-export function getCanonicalUrl(locale: AppLocale) {
- return getLocaleUrl(locale)
-}
-
-export function getAlternateLanguageLinks() {
- return [
- {
- rel: 'alternate' as const,
- hrefLang: 'x-default',
- href: getXDefaultUrl(),
- },
- ...locales.map((locale) => ({
- rel: 'alternate' as const,
- hrefLang: locale,
- href: getLocaleUrl(locale),
- })),
- ]
-}
diff --git a/src/paraglide.d.ts b/src/paraglide.d.ts
deleted file mode 100644
index 733a4b1..0000000
--- a/src/paraglide.d.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-type GeneratedLocale = import('./paraglide/runtime.js').Locale
-type GeneratedMessagePart = import('./paraglide/runtime.js').MessagePart
-
-declare module '#/paraglide/messages' {
- export * from './paraglide/messages/_index.js'
- export * as m from './paraglide/messages/_index.js'
-}
-
-declare module '#/paraglide/runtime' {
- export type Locale = GeneratedLocale
- export type MessagePart = GeneratedMessagePart
- export const locales: readonly GeneratedLocale[]
- export function getLocale(): GeneratedLocale
- export function localizeUrl(url: string | URL, options?: { locale?: GeneratedLocale }): URL
- export function deLocalizeUrl(url: string | URL): URL
-}
-
-declare module '#/paraglide/server.js' {
- export function paraglideMiddleware(
- request: Request,
- resolve: (args: {
- request: Request
- locale: GeneratedLocale
- }) => T | Promise,
- callbacks?: {
- onRedirect: (response: Response) => void
- },
- ): Promise
-}
diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts
deleted file mode 100644
index dceedff..0000000
--- a/src/routeTree.gen.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-/* eslint-disable */
-
-// @ts-nocheck
-
-// noinspection JSUnusedGlobalSymbols
-
-// This file was automatically generated by TanStack Router.
-// You should NOT make any changes in this file as it will be overwritten.
-// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
-
-import { Route as rootRouteImport } from './routes/__root'
-import { Route as IndexRouteImport } from './routes/index'
-
-const IndexRoute = IndexRouteImport.update({
- id: '/',
- path: '/',
- getParentRoute: () => rootRouteImport,
-} as any)
-
-export interface FileRoutesByFullPath {
- '/': typeof IndexRoute
-}
-export interface FileRoutesByTo {
- '/': typeof IndexRoute
-}
-export interface FileRoutesById {
- __root__: typeof rootRouteImport
- '/': typeof IndexRoute
-}
-export interface FileRouteTypes {
- fileRoutesByFullPath: FileRoutesByFullPath
- fullPaths: '/'
- fileRoutesByTo: FileRoutesByTo
- to: '/'
- id: '__root__' | '/'
- fileRoutesById: FileRoutesById
-}
-export interface RootRouteChildren {
- IndexRoute: typeof IndexRoute
-}
-
-declare module '@tanstack/react-router' {
- interface FileRoutesByPath {
- '/': {
- id: '/'
- path: '/'
- fullPath: '/'
- preLoaderRoute: typeof IndexRouteImport
- parentRoute: typeof rootRouteImport
- }
- }
-}
-
-const rootRouteChildren: RootRouteChildren = {
- IndexRoute: IndexRoute,
-}
-export const routeTree = rootRouteImport
- ._addFileChildren(rootRouteChildren)
- ._addFileTypes()
-
-import type { getRouter } from './router.tsx'
-import type { createStart } from '@tanstack/react-start'
-declare module '@tanstack/react-start' {
- interface Register {
- ssr: true
- router: Awaited>
- }
-}
diff --git a/src/router.tsx b/src/router.tsx
deleted file mode 100644
index efd0b47..0000000
--- a/src/router.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { createRouter as createTanStackRouter } from '@tanstack/react-router'
-import { deLocalizeUrl, localizeUrl } from '#/paraglide/runtime'
-import { routeTree } from './routeTree.gen'
-
-export function getRouter() {
- const router = createTanStackRouter({
- routeTree,
-
- scrollRestoration: true,
- defaultPreload: 'intent',
- defaultPreloadStaleTime: 0,
- rewrite: {
- input: ({ url }) => deLocalizeUrl(url),
- output: ({ url }) => localizeUrl(url),
- },
- })
-
- return router
-}
-
-declare module '@tanstack/react-router' {
- interface Register {
- router: ReturnType
- }
-}
diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx
deleted file mode 100644
index 5471206..0000000
--- a/src/routes/__root.tsx
+++ /dev/null
@@ -1,104 +0,0 @@
-import { HeadContent, Outlet, Scripts, createRootRoute } from '@tanstack/react-router'
-import { createIsomorphicFn } from '@tanstack/react-start'
-import type { ReactNode } from 'react'
-
-import {
- getThemeColorScheme,
- parseThemeMode,
- readThemeModeFromDocument,
- themeCookieName,
-} from '#/components/home/theme'
-import type { ThemeMode } from '#/components/home/constants'
-import { isRtlLocale } from '#/lib/i18n'
-import { getLocale } from '#/paraglide/runtime'
-import appCss from '../styles.css?url'
-
-const getThemePreference = createIsomorphicFn()
- .server(async () => {
- const { getCookie } = await import('@tanstack/react-start/server')
-
- return parseThemeMode(getCookie(themeCookieName))
- })
- .client(() => readThemeModeFromDocument())
-
-function getThemeInitScript(theme: ThemeMode) {
- return `
-(() => {
- const root = document.documentElement;
- const theme = ${JSON.stringify(theme)};
- const resolvedTheme =
- theme === 'light' || theme === 'dark'
- ? theme
- : window.matchMedia('(prefers-color-scheme: dark)').matches
- ? 'dark'
- : 'light';
- root.dataset.theme = theme;
- root.dataset.resolvedTheme = resolvedTheme;
- root.style.colorScheme = theme === 'light' ? 'light' : theme === 'dark' ? 'dark' : 'light dark';
-})();
-`
-}
-
-export const Route = createRootRoute({
- loader: async () => ({
- theme: await getThemePreference(),
- }),
- head: () => ({
- meta: [
- {
- charSet: 'utf-8',
- },
- {
- name: 'viewport',
- content: 'width=device-width, initial-scale=1',
- },
- ],
- links: [
- {
- rel: 'stylesheet',
- href: appCss,
- },
- {
- rel: 'icon',
- href: '/favicon.ico',
- },
- {
- rel: 'apple-touch-icon',
- href: '/apple-touch-icon.png',
- },
- ],
- }),
- component: RootLayout,
- shellComponent: RootDocument,
- notFoundComponent: () => null,
-})
-
-function RootLayout() {
- return
-}
-
-function RootDocument({ children }: { children: ReactNode }) {
- const { theme } = Route.useLoaderData()
- const locale = getLocale()
- const initialResolvedTheme = theme === 'light' || theme === 'dark' ? theme : 'light'
-
- return (
-
-
-
-
-
-
- {children}
-
-
-
- )
-}
diff --git a/src/routes/index.tsx b/src/routes/index.tsx
deleted file mode 100644
index 5a6dd8c..0000000
--- a/src/routes/index.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import { createFileRoute } from '@tanstack/react-router'
-
-import { HomePage } from '#/components/home'
-import { getAlternateLanguageLinks, getCanonicalUrl } from '#/lib/seo'
-import { m } from '#/paraglide/messages'
-import { getLocale } from '#/paraglide/runtime'
-
-export const Route = createFileRoute('/')({
- head: () => ({
- links: [
- {
- rel: 'canonical',
- href: getCanonicalUrl(getLocale()),
- },
- ...getAlternateLanguageLinks(),
- ],
- meta: [
- {
- title: m.title(),
- },
- {
- name: 'description',
- content: m.description(),
- },
- {
- property: 'og:url',
- content: getCanonicalUrl(getLocale()),
- },
- ],
- }),
- component: HomePage,
-})
diff --git a/src/server.ts b/src/server.ts
deleted file mode 100644
index 7f1f8ab..0000000
--- a/src/server.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import handler from '@tanstack/react-start/server-entry'
-
-import { handleAppcastRequest } from '#/lib/appcast'
-import { paraglideMiddleware } from '#/paraglide/server.js'
-import { locales } from '#/paraglide/runtime'
-
-function redirectLocaleRootWithTrailingSlash(request: Request) {
- const url = new URL(request.url)
- const localeRoot = url.pathname.slice(1)
-
- if (locales.includes(localeRoot as (typeof locales)[number])) {
- url.pathname = `${url.pathname}/`
- return Response.redirect(url, 307)
- }
-
- return null
-}
-
-export default {
- async fetch(req: Request, env: Env) {
- const appcastResponse = await handleAppcastRequest(req, env)
-
- if (appcastResponse) {
- return appcastResponse
- }
-
- const redirect = redirectLocaleRootWithTrailingSlash(req)
-
- if (redirect) {
- return redirect
- }
-
- return await paraglideMiddleware(req, () => handler.fetch(req))
- },
-}
diff --git a/src/styles.css b/src/styles.css
deleted file mode 100644
index 7d0ac25..0000000
--- a/src/styles.css
+++ /dev/null
@@ -1,269 +0,0 @@
-@import "tailwindcss";
-
-:root {
- color-scheme: light dark;
- --ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1);
- --ease-out-quint: cubic-bezier(0.22, 1, 0.36, 1);
- --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
- --ease-spring: linear(0, 0.012 0.9%, 0.05 2%, 0.411 9.2%, 0.517 11.8%, 0.611 14.6%, 0.694 17.7%, 0.765 21.1%, 0.824 24.8%, 0.872 28.9%, 0.91 33.4%, 0.939 38.4%, 0.977 50.9%, 0.994 68.4%, 1);
- --font-sans:
- -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display",
- "Helvetica Neue", Helvetica, Arial, sans-serif;
- --font-mono:
- "SF Mono", SFMono-Regular, ui-monospace, "Cascadia Code",
- Menlo, Monaco, Consolas, monospace;
- --canvas: light-dark(#ffffff, #111111);
- --surface: light-dark(hsl(0 0% 100% / 0.82), hsl(0 0% 12% / 0.72));
- --surface-subtle: light-dark(hsl(0 0% 96% / 0.8), hsl(0 0% 16% / 0.8));
- --line: light-dark(hsl(0 0% 0% / 0.1), hsl(0 0% 100% / 0.08));
- --text: light-dark(#1d1d1f, #f5f5f7);
- --muted: light-dark(#86868b, #a1a1a6);
- --brand: light-dark(#0071e3, #2997ff);
- --brand-strong: light-dark(#0066cc, #64b5ff);
- --download-solid: light-dark(#111111, #f5f5f7);
- --download-solid-hover: light-dark(#000000, #ffffff);
- --download-solid-text: light-dark(#f5f5f7, #111111);
- --download-solid-divider: light-dark(hsl(0 0% 100% / 0.14), hsl(0 0% 0% / 0.14));
- --header-download-height: 1.75rem;
- --header-float-radius: calc((var(--header-download-height) / 2) + clamp(0.375rem, 1vw, 0.625rem));
- --header-height: 3.5rem;
-}
-
-html[data-theme='light'] {
- color-scheme: light;
-}
-
-html[data-theme='dark'] {
- color-scheme: dark;
-}
-
-html[data-theme='system'] {
- color-scheme: light dark;
-}
-
-html[data-resolved-theme='light'] .theme-dark-only,
-html[data-resolved-theme='dark'] .theme-light-only {
- display: none;
-}
-
-html[data-resolved-theme='light'] .theme-light-only,
-html[data-resolved-theme='dark'] .theme-dark-only {
- display: block;
-}
-
-html {
- background: var(--canvas);
- color: var(--text);
- font-family: var(--font-sans);
- scroll-behavior: smooth;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-body {
- min-height: 100vh;
- margin: 0;
- background: var(--canvas);
- overflow-x: clip;
-}
-
-#root {
- min-height: 100vh;
-}
-
-img {
- display: block;
- max-width: 100%;
-}
-
-a[href],
-button,
-[role='button'],
-[role='menuitem'],
-[role='menuitemradio'] {
- cursor: pointer;
-}
-
-button:disabled,
-[aria-disabled='true'] {
- cursor: not-allowed;
-}
-
-.glass-surface {
- background: var(--surface);
- border: 1px solid var(--line);
- backdrop-filter: blur(20px) saturate(1.8);
- -webkit-backdrop-filter: blur(20px) saturate(1.8);
-}
-
-@media (prefers-reduced-transparency: reduce) {
- .glass-surface {
- background: color-mix(in oklab, var(--surface) 90%, var(--canvas));
- backdrop-filter: none;
- -webkit-backdrop-filter: none;
- }
-}
-
-::selection {
- background: color-mix(in oklab, var(--brand) 24%, transparent);
-}
-
-
-.menu-popup-motion {
- transition:
- opacity 220ms var(--ease-out-quart),
- transform 320ms var(--ease-spring);
- transform-origin: top right;
-}
-
-.menu-popup-motion[data-starting-style],
-.menu-popup-motion[data-ending-style] {
- opacity: 0;
- transform: translateY(-0.3rem) scale(0.96);
-}
-
-.download-button-solid {
- background: var(--download-solid);
- color: var(--download-solid-text);
-}
-
-.download-button-solid:hover {
- background: var(--download-solid-hover);
-}
-
-.heading-hanging-punctuation {
- display: inline-block;
- inline-size: 0;
- overflow: visible;
- pointer-events: none;
- white-space: nowrap;
-}
-
-.heading-gradient-text > .heading-hanging-punctuation {
- color: var(--text);
- -webkit-text-fill-color: var(--text);
-}
-
-.header-home {
- position: absolute;
- inset-inline: 0;
- top: 0;
-}
-
-.header-bar-home,
-.header-bar-float {
- border-radius: var(--header-float-radius);
-}
-
-.header-bar-home {
- border-color: transparent;
- background-color: transparent;
- backdrop-filter: none;
- -webkit-backdrop-filter: none;
- box-shadow: none;
-}
-
-.header-float {
- position: fixed;
- inset-inline: 0;
- top: 0.75rem;
- visibility: hidden;
- pointer-events: none;
- transform: translateY(calc(-100% - 1rem));
- will-change: transform;
-}
-
-.header-bar-float {
- pointer-events: auto;
- border-color: var(--line);
- background-color: color-mix(in oklab, var(--surface) 74%, transparent);
- backdrop-filter: blur(30px) saturate(2.25) brightness(1.03);
- -webkit-backdrop-filter: blur(30px) saturate(2.25) brightness(1.03);
- box-shadow:
- inset 0 1px 0 light-dark(rgba(255, 255, 255, 0.48), rgba(255, 255, 255, 0.12)),
- 0 1px 10px -3px light-dark(rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.18)),
- 0 24px 48px -40px light-dark(rgba(0, 0, 0, 0.18), rgba(0, 0, 0, 0.34));
-}
-
-@keyframes header-float-scroll {
- 0% {
- visibility: hidden;
- transform: translateY(calc(-100% - 1rem));
- }
-
- 0.01% {
- visibility: visible;
- }
-
- 100% {
- visibility: visible;
- transform: translateY(0);
- }
-}
-
-@supports (animation-timeline: scroll()) {
- .header-float {
- animation-name: header-float-scroll;
- animation-duration: 1s;
- animation-fill-mode: both;
- animation-timing-function: var(--ease-spring);
- animation-timeline: scroll(root block);
- animation-range: var(--header-float-start) var(--header-float-end);
- }
-}
-
-@keyframes section-in {
- from {
- opacity: 0;
- transform: translateY(2rem);
- }
-
- to {
- opacity: 1;
- transform: translateY(0);
- }
-}
-
-@media (prefers-reduced-motion: no-preference) {
- .scroll-reveal {
- opacity: 0;
- animation: section-in linear both;
- animation-timeline: view();
- animation-range: entry 10% cover 30%;
- }
-
- .scroll-reveal-image {
- opacity: 0;
- animation: section-in linear both;
- animation-timeline: view();
- animation-range: entry 18% cover 38%;
- }
-}
-
-@media (prefers-reduced-motion: reduce) {
- html {
- scroll-behavior: auto;
- }
-
- *,
- *::before,
- *::after {
- animation-duration: 0.01ms !important;
- animation-iteration-count: 1 !important;
- transition-duration: 0.01ms !important;
- }
-
- .scroll-reveal,
- .scroll-reveal-image {
- opacity: 1 !important;
- animation: none !important;
- transform: none !important;
- }
-
- .header-float {
- animation-duration: 1s !important;
- animation-timing-function: steps(1, end) !important;
- animation-range: var(--header-float-start) calc(var(--header-float-start) + 1px) !important;
- will-change: auto;
- }
-}
diff --git a/tsconfig.json b/tsconfig.json
index 5878632..dfe8caf 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,34 +1,45 @@
{
- "include": ["**/*.ts", "**/*.tsx"],
- "exclude": ["dist"],
"compilerOptions": {
- "target": "ES2022",
+ "target": "ES2017",
+ "lib": [
+ "dom",
+ "dom.iterable",
+ "esnext"
+ ],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": false,
+ "noEmit": true,
+ "incremental": true,
+ "module": "esnext",
+ "esModuleInterop": true,
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
"jsx": "react-jsx",
- "module": "ESNext",
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
"baseUrl": ".",
"paths": {
- "@/*": ["./src/*"],
- "#/*": ["./src/*"]
- },
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
- "types": [
- "./worker-configuration.d.ts",
- "node",
- "vite/client"
- ],
-
- /* Bundler mode */
- "moduleResolution": "bundler",
- "allowImportingTsExtensions": true,
- "verbatimModuleSyntax": true,
- "noEmit": true,
-
- /* Linting */
- "skipLibCheck": true,
- "strict": true,
- "noUnusedLocals": true,
- "noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true,
- "noUncheckedSideEffectImports": true
- }
+ "components/*": [
+ "components/*"
+ ],
+ "i18n/*": [
+ "i18n/*"
+ ]
+ }
+ },
+ "include": [
+ "next-env.d.ts",
+ ".next/types/**/*.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/dev/types/**/*.ts"
+ ],
+ "exclude": [
+ "node_modules"
+ ]
}
diff --git a/vite.config.ts b/vite.config.ts
deleted file mode 100644
index 10cda4b..0000000
--- a/vite.config.ts
+++ /dev/null
@@ -1,121 +0,0 @@
-import { paraglideVitePlugin } from '@inlang/paraglide-js'
-import { defineConfig } from 'vite'
-import { devtools } from '@tanstack/devtools-vite'
-
-import { tanstackStart } from '@tanstack/react-start/plugin/vite'
-
-import viteReact from '@vitejs/plugin-react'
-import tailwindcss from '@tailwindcss/vite'
-import { cloudflare } from '@cloudflare/vite-plugin'
-
-const config = defineConfig(({ mode }) => {
- const isTest = mode === 'test' || process.env.VITEST === 'true'
-
- return {
- resolve: {
- tsconfigPaths: true,
- },
- plugins: [
- paraglideVitePlugin({
- project: './project.inlang',
- outdir: './src/paraglide',
- emitTsDeclarations: true,
- outputStructure: 'message-modules',
- strategy: ['url', 'preferredLanguage', 'baseLocale'],
- urlPatterns: [
- {
- pattern: '/',
- localized: [
- ['af-ZA', '/af-ZA/'],
- ['ar-SA', '/ar-SA/'],
- ['bs-BA', '/bs-BA/'],
- ['ca-ES', '/ca-ES/'],
- ['cs-CZ', '/cs-CZ/'],
- ['da-DK', '/da-DK/'],
- ['de-DE', '/de-DE/'],
- ['el-GR', '/el-GR/'],
- ['en', '/en/'],
- ['es-ES', '/es-ES/'],
- ['fi-FI', '/fi-FI/'],
- ['fr-FR', '/fr-FR/'],
- ['he-IL', '/he-IL/'],
- ['hu-HU', '/hu-HU/'],
- ['it-IT', '/it-IT/'],
- ['ja-JP', '/ja-JP/'],
- ['ko-KR', '/ko-KR/'],
- ['my-MM', '/my-MM/'],
- ['nb-NO', '/nb-NO/'],
- ['nl-NL', '/nl-NL/'],
- ['no-NO', '/no-NO/'],
- ['pl-PL', '/pl-PL/'],
- ['pt-BR', '/pt-BR/'],
- ['pt-PT', '/pt-PT/'],
- ['ro-RO', '/ro-RO/'],
- ['ru-RU', '/ru-RU/'],
- ['sk-SK', '/sk-SK/'],
- ['sr-SP', '/sr-SP/'],
- ['sv-SE', '/sv-SE/'],
- ['tr-TR', '/tr-TR/'],
- ['uk-UA', '/uk-UA/'],
- ['vi-VN', '/vi-VN/'],
- ['zh-CN', '/zh-CN/'],
- ['zh-HK', '/zh-HK/'],
- ['zh-TW', '/zh-TW/'],
- ],
- },
- {
- pattern: '/:path(.*)?',
- localized: [
- ['af-ZA', '/af-ZA/:path(.*)?'],
- ['ar-SA', '/ar-SA/:path(.*)?'],
- ['bs-BA', '/bs-BA/:path(.*)?'],
- ['ca-ES', '/ca-ES/:path(.*)?'],
- ['cs-CZ', '/cs-CZ/:path(.*)?'],
- ['da-DK', '/da-DK/:path(.*)?'],
- ['de-DE', '/de-DE/:path(.*)?'],
- ['el-GR', '/el-GR/:path(.*)?'],
- ['en', '/en/:path(.*)?'],
- ['es-ES', '/es-ES/:path(.*)?'],
- ['fi-FI', '/fi-FI/:path(.*)?'],
- ['fr-FR', '/fr-FR/:path(.*)?'],
- ['he-IL', '/he-IL/:path(.*)?'],
- ['hu-HU', '/hu-HU/:path(.*)?'],
- ['it-IT', '/it-IT/:path(.*)?'],
- ['ja-JP', '/ja-JP/:path(.*)?'],
- ['ko-KR', '/ko-KR/:path(.*)?'],
- ['my-MM', '/my-MM/:path(.*)?'],
- ['nb-NO', '/nb-NO/:path(.*)?'],
- ['nl-NL', '/nl-NL/:path(.*)?'],
- ['no-NO', '/no-NO/:path(.*)?'],
- ['pl-PL', '/pl-PL/:path(.*)?'],
- ['pt-BR', '/pt-BR/:path(.*)?'],
- ['pt-PT', '/pt-PT/:path(.*)?'],
- ['ro-RO', '/ro-RO/:path(.*)?'],
- ['ru-RU', '/ru-RU/:path(.*)?'],
- ['sk-SK', '/sk-SK/:path(.*)?'],
- ['sr-SP', '/sr-SP/:path(.*)?'],
- ['sv-SE', '/sv-SE/:path(.*)?'],
- ['tr-TR', '/tr-TR/:path(.*)?'],
- ['uk-UA', '/uk-UA/:path(.*)?'],
- ['vi-VN', '/vi-VN/:path(.*)?'],
- ['zh-CN', '/zh-CN/:path(.*)?'],
- ['zh-HK', '/zh-HK/:path(.*)?'],
- ['zh-TW', '/zh-TW/:path(.*)?'],
- ],
- },
- ],
- }),
- devtools(),
- !isTest && cloudflare({ viteEnvironment: { name: 'ssr' } }),
- tailwindcss(),
- tanstackStart({
- server: {
- entry: './server.ts',
- },
- }),
- viteReact(),
- ].filter(Boolean),
- }
-})
-
-export default config
diff --git a/worker-configuration.d.ts b/worker-configuration.d.ts
deleted file mode 100644
index 118f4f8..0000000
--- a/worker-configuration.d.ts
+++ /dev/null
@@ -1,11327 +0,0 @@
-/* eslint-disable */
-// Generated by Wrangler by running `wrangler types` (hash: 7ba61e83a1e8af82628e498363f71d92)
-// Runtime types generated with workerd@1.20260312.1 2025-09-02 nodejs_compat
-declare namespace Cloudflare {
- interface GlobalProps {
- mainModule: typeof import("./src/server");
- }
- interface Env {
- GITHUB_TOKEN: string;
- }
-}
-interface Env extends Cloudflare.Env {}
-type StringifyValues> = {
- [Binding in keyof EnvType]: EnvType[Binding] extends string ? EnvType[Binding] : string;
-};
-declare namespace NodeJS {
- interface ProcessEnv extends StringifyValues> {}
-}
-
-// Begin runtime types
-/*! *****************************************************************************
-Copyright (c) Cloudflare. All rights reserved.
-Copyright (c) Microsoft Corporation. All rights reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License"); you may not use
-this file except in compliance with the License. You may obtain a copy of the
-License at http://www.apache.org/licenses/LICENSE-2.0
-THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
-WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
-MERCHANTABLITY OR NON-INFRINGEMENT.
-See the Apache Version 2.0 License for specific language governing permissions
-and limitations under the License.
-***************************************************************************** */
-/* eslint-disable */
-// noinspection JSUnusedGlobalSymbols
-declare var onmessage: never;
-/**
- * The **`DOMException`** interface represents an abnormal event (called an **exception**) that occurs as a result of calling a method or accessing a property of a web API.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException)
- */
-declare class DOMException extends Error {
- constructor(message?: string, name?: string);
- /**
- * The **`message`** read-only property of the a message or description associated with the given error name.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException/message)
- */
- readonly message: string;
- /**
- * The **`name`** read-only property of the one of the strings associated with an error name.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException/name)
- */
- readonly name: string;
- /**
- * The **`code`** read-only property of the DOMException interface returns one of the legacy error code constants, or `0` if none match.
- * @deprecated
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DOMException/code)
- */
- readonly code: number;
- static readonly INDEX_SIZE_ERR: number;
- static readonly DOMSTRING_SIZE_ERR: number;
- static readonly HIERARCHY_REQUEST_ERR: number;
- static readonly WRONG_DOCUMENT_ERR: number;
- static readonly INVALID_CHARACTER_ERR: number;
- static readonly NO_DATA_ALLOWED_ERR: number;
- static readonly NO_MODIFICATION_ALLOWED_ERR: number;
- static readonly NOT_FOUND_ERR: number;
- static readonly NOT_SUPPORTED_ERR: number;
- static readonly INUSE_ATTRIBUTE_ERR: number;
- static readonly INVALID_STATE_ERR: number;
- static readonly SYNTAX_ERR: number;
- static readonly INVALID_MODIFICATION_ERR: number;
- static readonly NAMESPACE_ERR: number;
- static readonly INVALID_ACCESS_ERR: number;
- static readonly VALIDATION_ERR: number;
- static readonly TYPE_MISMATCH_ERR: number;
- static readonly SECURITY_ERR: number;
- static readonly NETWORK_ERR: number;
- static readonly ABORT_ERR: number;
- static readonly URL_MISMATCH_ERR: number;
- static readonly QUOTA_EXCEEDED_ERR: number;
- static readonly TIMEOUT_ERR: number;
- static readonly INVALID_NODE_TYPE_ERR: number;
- static readonly DATA_CLONE_ERR: number;
- get stack(): any;
- set stack(value: any);
-}
-type WorkerGlobalScopeEventMap = {
- fetch: FetchEvent;
- scheduled: ScheduledEvent;
- queue: QueueEvent;
- unhandledrejection: PromiseRejectionEvent;
- rejectionhandled: PromiseRejectionEvent;
-};
-declare abstract class WorkerGlobalScope extends EventTarget {
- EventTarget: typeof EventTarget;
-}
-/* The **`console`** object provides access to the debugging console (e.g., the Web console in Firefox). *
- * The **`console`** object provides access to the debugging console (e.g., the Web console in Firefox).
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console)
- */
-interface Console {
- "assert"(condition?: boolean, ...data: any[]): void;
- /**
- * The **`console.clear()`** static method clears the console if possible.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/clear_static)
- */
- clear(): void;
- /**
- * The **`console.count()`** static method logs the number of times that this particular call to `count()` has been called.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/count_static)
- */
- count(label?: string): void;
- /**
- * The **`console.countReset()`** static method resets counter used with console/count_static.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/countReset_static)
- */
- countReset(label?: string): void;
- /**
- * The **`console.debug()`** static method outputs a message to the console at the 'debug' log level.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/debug_static)
- */
- debug(...data: any[]): void;
- /**
- * The **`console.dir()`** static method displays a list of the properties of the specified JavaScript object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/dir_static)
- */
- dir(item?: any, options?: any): void;
- /**
- * The **`console.dirxml()`** static method displays an interactive tree of the descendant elements of the specified XML/HTML element.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/dirxml_static)
- */
- dirxml(...data: any[]): void;
- /**
- * The **`console.error()`** static method outputs a message to the console at the 'error' log level.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/error_static)
- */
- error(...data: any[]): void;
- /**
- * The **`console.group()`** static method creates a new inline group in the Web console log, causing any subsequent console messages to be indented by an additional level, until console/groupEnd_static is called.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/group_static)
- */
- group(...data: any[]): void;
- /**
- * The **`console.groupCollapsed()`** static method creates a new inline group in the console.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupCollapsed_static)
- */
- groupCollapsed(...data: any[]): void;
- /**
- * The **`console.groupEnd()`** static method exits the current inline group in the console.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupEnd_static)
- */
- groupEnd(): void;
- /**
- * The **`console.info()`** static method outputs a message to the console at the 'info' log level.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/info_static)
- */
- info(...data: any[]): void;
- /**
- * The **`console.log()`** static method outputs a message to the console.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/log_static)
- */
- log(...data: any[]): void;
- /**
- * The **`console.table()`** static method displays tabular data as a table.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/table_static)
- */
- table(tabularData?: any, properties?: string[]): void;
- /**
- * The **`console.time()`** static method starts a timer you can use to track how long an operation takes.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/time_static)
- */
- time(label?: string): void;
- /**
- * The **`console.timeEnd()`** static method stops a timer that was previously started by calling console/time_static.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeEnd_static)
- */
- timeEnd(label?: string): void;
- /**
- * The **`console.timeLog()`** static method logs the current value of a timer that was previously started by calling console/time_static.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeLog_static)
- */
- timeLog(label?: string, ...data: any[]): void;
- timeStamp(label?: string): void;
- /**
- * The **`console.trace()`** static method outputs a stack trace to the console.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/trace_static)
- */
- trace(...data: any[]): void;
- /**
- * The **`console.warn()`** static method outputs a warning message to the console at the 'warning' log level.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/warn_static)
- */
- warn(...data: any[]): void;
-}
-declare const console: Console;
-type BufferSource = ArrayBufferView | ArrayBuffer;
-type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array;
-declare namespace WebAssembly {
- class CompileError extends Error {
- constructor(message?: string);
- }
- class RuntimeError extends Error {
- constructor(message?: string);
- }
- type ValueType = "anyfunc" | "externref" | "f32" | "f64" | "i32" | "i64" | "v128";
- interface GlobalDescriptor {
- value: ValueType;
- mutable?: boolean;
- }
- class Global {
- constructor(descriptor: GlobalDescriptor, value?: any);
- value: any;
- valueOf(): any;
- }
- type ImportValue = ExportValue | number;
- type ModuleImports = Record;
- type Imports = Record;
- type ExportValue = Function | Global | Memory | Table;
- type Exports = Record;
- class Instance {
- constructor(module: Module, imports?: Imports);
- readonly exports: Exports;
- }
- interface MemoryDescriptor {
- initial: number;
- maximum?: number;
- shared?: boolean;
- }
- class Memory {
- constructor(descriptor: MemoryDescriptor);
- readonly buffer: ArrayBuffer;
- grow(delta: number): number;
- }
- type ImportExportKind = "function" | "global" | "memory" | "table";
- interface ModuleExportDescriptor {
- kind: ImportExportKind;
- name: string;
- }
- interface ModuleImportDescriptor {
- kind: ImportExportKind;
- module: string;
- name: string;
- }
- abstract class Module {
- static customSections(module: Module, sectionName: string): ArrayBuffer[];
- static exports(module: Module): ModuleExportDescriptor[];
- static imports(module: Module): ModuleImportDescriptor[];
- }
- type TableKind = "anyfunc" | "externref";
- interface TableDescriptor {
- element: TableKind;
- initial: number;
- maximum?: number;
- }
- class Table {
- constructor(descriptor: TableDescriptor, value?: any);
- readonly length: number;
- get(index: number): any;
- grow(delta: number, value?: any): number;
- set(index: number, value?: any): void;
- }
- function instantiate(module: Module, imports?: Imports): Promise;
- function validate(bytes: BufferSource): boolean;
-}
-/**
- * The **`ServiceWorkerGlobalScope`** interface of the Service Worker API represents the global execution context of a service worker.
- * Available only in secure contexts.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope)
- */
-interface ServiceWorkerGlobalScope extends WorkerGlobalScope {
- DOMException: typeof DOMException;
- WorkerGlobalScope: typeof WorkerGlobalScope;
- btoa(data: string): string;
- atob(data: string): string;
- setTimeout(callback: (...args: any[]) => void, msDelay?: number): number;
- setTimeout(callback: (...args: Args) => void, msDelay?: number, ...args: Args): number;
- clearTimeout(timeoutId: number | null): void;
- setInterval(callback: (...args: any[]) => void, msDelay?: number): number;
- setInterval(callback: (...args: Args) => void, msDelay?: number, ...args: Args): number;
- clearInterval(timeoutId: number | null): void;
- queueMicrotask(task: Function): void;
- structuredClone(value: T, options?: StructuredSerializeOptions): T;
- reportError(error: any): void;
- fetch(input: RequestInfo | URL, init?: RequestInit): Promise;
- self: ServiceWorkerGlobalScope;
- crypto: Crypto;
- caches: CacheStorage;
- scheduler: Scheduler;
- performance: Performance;
- Cloudflare: Cloudflare;
- readonly origin: string;
- Event: typeof Event;
- ExtendableEvent: typeof ExtendableEvent;
- CustomEvent: typeof CustomEvent;
- PromiseRejectionEvent: typeof PromiseRejectionEvent;
- FetchEvent: typeof FetchEvent;
- TailEvent: typeof TailEvent;
- TraceEvent: typeof TailEvent;
- ScheduledEvent: typeof ScheduledEvent;
- MessageEvent: typeof MessageEvent;
- CloseEvent: typeof CloseEvent;
- ReadableStreamDefaultReader: typeof ReadableStreamDefaultReader;
- ReadableStreamBYOBReader: typeof ReadableStreamBYOBReader;
- ReadableStream: typeof ReadableStream;
- WritableStream: typeof WritableStream;
- WritableStreamDefaultWriter: typeof WritableStreamDefaultWriter;
- TransformStream: typeof TransformStream;
- ByteLengthQueuingStrategy: typeof ByteLengthQueuingStrategy;
- CountQueuingStrategy: typeof CountQueuingStrategy;
- ErrorEvent: typeof ErrorEvent;
- MessageChannel: typeof MessageChannel;
- MessagePort: typeof MessagePort;
- EventSource: typeof EventSource;
- ReadableStreamBYOBRequest: typeof ReadableStreamBYOBRequest;
- ReadableStreamDefaultController: typeof ReadableStreamDefaultController;
- ReadableByteStreamController: typeof ReadableByteStreamController;
- WritableStreamDefaultController: typeof WritableStreamDefaultController;
- TransformStreamDefaultController: typeof TransformStreamDefaultController;
- CompressionStream: typeof CompressionStream;
- DecompressionStream: typeof DecompressionStream;
- TextEncoderStream: typeof TextEncoderStream;
- TextDecoderStream: typeof TextDecoderStream;
- Headers: typeof Headers;
- Body: typeof Body;
- Request: typeof Request;
- Response: typeof Response;
- WebSocket: typeof WebSocket;
- WebSocketPair: typeof WebSocketPair;
- WebSocketRequestResponsePair: typeof WebSocketRequestResponsePair;
- AbortController: typeof AbortController;
- AbortSignal: typeof AbortSignal;
- TextDecoder: typeof TextDecoder;
- TextEncoder: typeof TextEncoder;
- navigator: Navigator;
- Navigator: typeof Navigator;
- URL: typeof URL;
- URLSearchParams: typeof URLSearchParams;
- URLPattern: typeof URLPattern;
- Blob: typeof Blob;
- File: typeof File;
- FormData: typeof FormData;
- Crypto: typeof Crypto;
- SubtleCrypto: typeof SubtleCrypto;
- CryptoKey: typeof CryptoKey;
- CacheStorage: typeof CacheStorage;
- Cache: typeof Cache;
- FixedLengthStream: typeof FixedLengthStream;
- IdentityTransformStream: typeof IdentityTransformStream;
- HTMLRewriter: typeof HTMLRewriter;
-}
-declare function addEventListener(type: Type, handler: EventListenerOrEventListenerObject, options?: EventTargetAddEventListenerOptions | boolean): void;
-declare function removeEventListener(type: Type, handler: EventListenerOrEventListenerObject, options?: EventTargetEventListenerOptions | boolean): void;
-/**
- * The **`dispatchEvent()`** method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent)
- */
-declare function dispatchEvent(event: WorkerGlobalScopeEventMap[keyof WorkerGlobalScopeEventMap]): boolean;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/btoa) */
-declare function btoa(data: string): string;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/atob) */
-declare function atob(data: string): string;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setTimeout) */
-declare function setTimeout(callback: (...args: any[]) => void, msDelay?: number): number;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setTimeout) */
-declare function setTimeout(callback: (...args: Args) => void, msDelay?: number, ...args: Args): number;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/clearTimeout) */
-declare function clearTimeout(timeoutId: number | null): void;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setInterval) */
-declare function setInterval(callback: (...args: any[]) => void, msDelay?: number): number;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setInterval) */
-declare function setInterval(callback: (...args: Args) => void, msDelay?: number, ...args: Args): number;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/clearInterval) */
-declare function clearInterval(timeoutId: number | null): void;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/queueMicrotask) */
-declare function queueMicrotask(task: Function): void;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/structuredClone) */
-declare function structuredClone(value: T, options?: StructuredSerializeOptions): T;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/reportError) */
-declare function reportError(error: any): void;
-/* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/fetch) */
-declare function fetch(input: RequestInfo | URL, init?: RequestInit): Promise;
-declare const self: ServiceWorkerGlobalScope;
-/**
-* The Web Crypto API provides a set of low-level functions for common cryptographic tasks.
-* The Workers runtime implements the full surface of this API, but with some differences in
-* the [supported algorithms](https://developers.cloudflare.com/workers/runtime-apis/web-crypto/#supported-algorithms)
-* compared to those implemented in most browsers.
-*
-* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/web-crypto/)
-*/
-declare const crypto: Crypto;
-/**
-* The Cache API allows fine grained control of reading and writing from the Cloudflare global network cache.
-*
-* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/)
-*/
-declare const caches: CacheStorage;
-declare const scheduler: Scheduler;
-/**
-* The Workers runtime supports a subset of the Performance API, used to measure timing and performance,
-* as well as timing of subrequests and other operations.
-*
-* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/performance/)
-*/
-declare const performance: Performance;
-declare const Cloudflare: Cloudflare;
-declare const origin: string;
-declare const navigator: Navigator;
-interface TestController {
-}
-interface ExecutionContext {
- waitUntil(promise: Promise): void;
- passThroughOnException(): void;
- readonly props: Props;
-}
-type ExportedHandlerFetchHandler = (request: Request>, env: Env, ctx: ExecutionContext) => Response | Promise;
-type ExportedHandlerTailHandler = (events: TraceItem[], env: Env, ctx: ExecutionContext) => void | Promise;
-type ExportedHandlerTraceHandler = (traces: TraceItem[], env: Env, ctx: ExecutionContext) => void | Promise;
-type ExportedHandlerTailStreamHandler = (event: TailStream.TailEvent, env: Env, ctx: ExecutionContext) => TailStream.TailEventHandlerType | Promise;
-type ExportedHandlerScheduledHandler = (controller: ScheduledController, env: Env, ctx: ExecutionContext) => void | Promise;
-type ExportedHandlerQueueHandler = (batch: MessageBatch, env: Env, ctx: ExecutionContext) => void | Promise;
-type ExportedHandlerTestHandler = (controller: TestController, env: Env, ctx: ExecutionContext) => void | Promise;
-interface ExportedHandler {
- fetch?: ExportedHandlerFetchHandler;
- tail?: ExportedHandlerTailHandler;
- trace?: ExportedHandlerTraceHandler;
- tailStream?: ExportedHandlerTailStreamHandler;
- scheduled?: ExportedHandlerScheduledHandler;
- test?: ExportedHandlerTestHandler;
- email?: EmailExportedHandler;
- queue?: ExportedHandlerQueueHandler;
-}
-interface StructuredSerializeOptions {
- transfer?: any[];
-}
-declare abstract class Navigator {
- sendBeacon(url: string, body?: BodyInit): boolean;
- readonly userAgent: string;
- readonly hardwareConcurrency: number;
- readonly language: string;
- readonly languages: string[];
-}
-interface AlarmInvocationInfo {
- readonly isRetry: boolean;
- readonly retryCount: number;
-}
-interface Cloudflare {
- readonly compatibilityFlags: Record;
-}
-interface DurableObject {
- fetch(request: Request): Response | Promise;
- alarm?(alarmInfo?: AlarmInvocationInfo): void | Promise;
- webSocketMessage?(ws: WebSocket, message: string | ArrayBuffer): void | Promise;
- webSocketClose?(ws: WebSocket, code: number, reason: string, wasClean: boolean): void | Promise;
- webSocketError?(ws: WebSocket, error: unknown): void | Promise;
-}
-type DurableObjectStub = Fetcher & {
- readonly id: DurableObjectId;
- readonly name?: string;
-};
-interface DurableObjectId {
- toString(): string;
- equals(other: DurableObjectId): boolean;
- readonly name?: string;
-}
-declare abstract class DurableObjectNamespace {
- newUniqueId(options?: DurableObjectNamespaceNewUniqueIdOptions): DurableObjectId;
- idFromName(name: string): DurableObjectId;
- idFromString(id: string): DurableObjectId;
- get(id: DurableObjectId, options?: DurableObjectNamespaceGetDurableObjectOptions): DurableObjectStub;
- getByName(name: string, options?: DurableObjectNamespaceGetDurableObjectOptions): DurableObjectStub;
- jurisdiction(jurisdiction: DurableObjectJurisdiction): DurableObjectNamespace;
-}
-type DurableObjectJurisdiction = "eu" | "fedramp" | "fedramp-high";
-interface DurableObjectNamespaceNewUniqueIdOptions {
- jurisdiction?: DurableObjectJurisdiction;
-}
-type DurableObjectLocationHint = "wnam" | "enam" | "sam" | "weur" | "eeur" | "apac" | "oc" | "afr" | "me";
-type DurableObjectRoutingMode = "primary-only";
-interface DurableObjectNamespaceGetDurableObjectOptions {
- locationHint?: DurableObjectLocationHint;
- routingMode?: DurableObjectRoutingMode;
-}
-interface DurableObjectClass<_T extends Rpc.DurableObjectBranded | undefined = undefined> {
-}
-interface DurableObjectState {
- waitUntil(promise: Promise): void;
- readonly props: Props;
- readonly id: DurableObjectId;
- readonly storage: DurableObjectStorage;
- container?: Container;
- blockConcurrencyWhile(callback: () => Promise): Promise;
- acceptWebSocket(ws: WebSocket, tags?: string[]): void;
- getWebSockets(tag?: string): WebSocket[];
- setWebSocketAutoResponse(maybeReqResp?: WebSocketRequestResponsePair): void;
- getWebSocketAutoResponse(): WebSocketRequestResponsePair | null;
- getWebSocketAutoResponseTimestamp(ws: WebSocket): Date | null;
- setHibernatableWebSocketEventTimeout(timeoutMs?: number): void;
- getHibernatableWebSocketEventTimeout(): number | null;
- getTags(ws: WebSocket): string[];
- abort(reason?: string): void;
-}
-interface DurableObjectTransaction {
- get(key: string, options?: DurableObjectGetOptions): Promise;
- get(keys: string[], options?: DurableObjectGetOptions): Promise>;
- list(options?: DurableObjectListOptions): Promise>;
- put(key: string, value: T, options?: DurableObjectPutOptions): Promise;
- put(entries: Record, options?: DurableObjectPutOptions): Promise;
- delete(key: string, options?: DurableObjectPutOptions): Promise;
- delete(keys: string[], options?: DurableObjectPutOptions): Promise;
- rollback(): void;
- getAlarm(options?: DurableObjectGetAlarmOptions): Promise;
- setAlarm(scheduledTime: number | Date, options?: DurableObjectSetAlarmOptions): Promise;
- deleteAlarm(options?: DurableObjectSetAlarmOptions): Promise;
-}
-interface DurableObjectStorage {
- get(key: string, options?: DurableObjectGetOptions): Promise;
- get(keys: string[], options?: DurableObjectGetOptions): Promise>;
- list(options?: DurableObjectListOptions): Promise>;
- put(key: string, value: T, options?: DurableObjectPutOptions): Promise;
- put(entries: Record, options?: DurableObjectPutOptions): Promise;
- delete(key: string, options?: DurableObjectPutOptions): Promise;
- delete(keys: string[], options?: DurableObjectPutOptions): Promise;
- deleteAll(options?: DurableObjectPutOptions): Promise;
- transaction(closure: (txn: DurableObjectTransaction) => Promise): Promise;
- getAlarm(options?: DurableObjectGetAlarmOptions): Promise;
- setAlarm(scheduledTime: number | Date, options?: DurableObjectSetAlarmOptions): Promise;
- deleteAlarm(options?: DurableObjectSetAlarmOptions): Promise;
- sync(): Promise;
- sql: SqlStorage;
- kv: SyncKvStorage;
- transactionSync(closure: () => T): T;
- getCurrentBookmark(): Promise;
- getBookmarkForTime(timestamp: number | Date): Promise;
- onNextSessionRestoreBookmark(bookmark: string): Promise;
-}
-interface DurableObjectListOptions {
- start?: string;
- startAfter?: string;
- end?: string;
- prefix?: string;
- reverse?: boolean;
- limit?: number;
- allowConcurrency?: boolean;
- noCache?: boolean;
-}
-interface DurableObjectGetOptions {
- allowConcurrency?: boolean;
- noCache?: boolean;
-}
-interface DurableObjectGetAlarmOptions {
- allowConcurrency?: boolean;
-}
-interface DurableObjectPutOptions {
- allowConcurrency?: boolean;
- allowUnconfirmed?: boolean;
- noCache?: boolean;
-}
-interface DurableObjectSetAlarmOptions {
- allowConcurrency?: boolean;
- allowUnconfirmed?: boolean;
-}
-declare class WebSocketRequestResponsePair {
- constructor(request: string, response: string);
- get request(): string;
- get response(): string;
-}
-interface AnalyticsEngineDataset {
- writeDataPoint(event?: AnalyticsEngineDataPoint): void;
-}
-interface AnalyticsEngineDataPoint {
- indexes?: ((ArrayBuffer | string) | null)[];
- doubles?: number[];
- blobs?: ((ArrayBuffer | string) | null)[];
-}
-/**
- * The **`Event`** interface represents an event which takes place on an `EventTarget`.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event)
- */
-declare class Event {
- constructor(type: string, init?: EventInit);
- /**
- * The **`type`** read-only property of the Event interface returns a string containing the event's type.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/type)
- */
- get type(): string;
- /**
- * The **`eventPhase`** read-only property of the being evaluated.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/eventPhase)
- */
- get eventPhase(): number;
- /**
- * The read-only **`composed`** property of the or not the event will propagate across the shadow DOM boundary into the standard DOM.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/composed)
- */
- get composed(): boolean;
- /**
- * The **`bubbles`** read-only property of the Event interface indicates whether the event bubbles up through the DOM tree or not.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/bubbles)
- */
- get bubbles(): boolean;
- /**
- * The **`cancelable`** read-only property of the Event interface indicates whether the event can be canceled, and therefore prevented as if the event never happened.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelable)
- */
- get cancelable(): boolean;
- /**
- * The **`defaultPrevented`** read-only property of the Event interface returns a boolean value indicating whether or not the call to Event.preventDefault() canceled the event.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/defaultPrevented)
- */
- get defaultPrevented(): boolean;
- /**
- * The Event property **`returnValue`** indicates whether the default action for this event has been prevented or not.
- * @deprecated
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/returnValue)
- */
- get returnValue(): boolean;
- /**
- * The **`currentTarget`** read-only property of the Event interface identifies the element to which the event handler has been attached.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/currentTarget)
- */
- get currentTarget(): EventTarget | undefined;
- /**
- * The read-only **`target`** property of the dispatched.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/target)
- */
- get target(): EventTarget | undefined;
- /**
- * The deprecated **`Event.srcElement`** is an alias for the Event.target property.
- * @deprecated
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/srcElement)
- */
- get srcElement(): EventTarget | undefined;
- /**
- * The **`timeStamp`** read-only property of the Event interface returns the time (in milliseconds) at which the event was created.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/timeStamp)
- */
- get timeStamp(): number;
- /**
- * The **`isTrusted`** read-only property of the when the event was generated by the user agent (including via user actions and programmatic methods such as HTMLElement.focus()), and `false` when the event was dispatched via The only exception is the `click` event, which initializes the `isTrusted` property to `false` in user agents.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/isTrusted)
- */
- get isTrusted(): boolean;
- /**
- * The **`cancelBubble`** property of the Event interface is deprecated.
- * @deprecated
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelBubble)
- */
- get cancelBubble(): boolean;
- /**
- * The **`cancelBubble`** property of the Event interface is deprecated.
- * @deprecated
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelBubble)
- */
- set cancelBubble(value: boolean);
- /**
- * The **`stopImmediatePropagation()`** method of the If several listeners are attached to the same element for the same event type, they are called in the order in which they were added.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/stopImmediatePropagation)
- */
- stopImmediatePropagation(): void;
- /**
- * The **`preventDefault()`** method of the Event interface tells the user agent that if the event does not get explicitly handled, its default action should not be taken as it normally would be.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/preventDefault)
- */
- preventDefault(): void;
- /**
- * The **`stopPropagation()`** method of the Event interface prevents further propagation of the current event in the capturing and bubbling phases.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/stopPropagation)
- */
- stopPropagation(): void;
- /**
- * The **`composedPath()`** method of the Event interface returns the event's path which is an array of the objects on which listeners will be invoked.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/composedPath)
- */
- composedPath(): EventTarget[];
- static readonly NONE: number;
- static readonly CAPTURING_PHASE: number;
- static readonly AT_TARGET: number;
- static readonly BUBBLING_PHASE: number;
-}
-interface EventInit {
- bubbles?: boolean;
- cancelable?: boolean;
- composed?: boolean;
-}
-type EventListener = (event: EventType) => void;
-interface EventListenerObject {
- handleEvent(event: EventType): void;
-}
-type EventListenerOrEventListenerObject = EventListener | EventListenerObject;
-/**
- * The **`EventTarget`** interface is implemented by objects that can receive events and may have listeners for them.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget)
- */
-declare class EventTarget = Record> {
- constructor();
- /**
- * The **`addEventListener()`** method of the EventTarget interface sets up a function that will be called whenever the specified event is delivered to the target.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener)
- */
- addEventListener(type: Type, handler: EventListenerOrEventListenerObject, options?: EventTargetAddEventListenerOptions | boolean): void;
- /**
- * The **`removeEventListener()`** method of the EventTarget interface removes an event listener previously registered with EventTarget.addEventListener() from the target.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/removeEventListener)
- */
- removeEventListener(type: Type, handler: EventListenerOrEventListenerObject, options?: EventTargetEventListenerOptions | boolean): void;
- /**
- * The **`dispatchEvent()`** method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent)
- */
- dispatchEvent(event: EventMap[keyof EventMap]): boolean;
-}
-interface EventTargetEventListenerOptions {
- capture?: boolean;
-}
-interface EventTargetAddEventListenerOptions {
- capture?: boolean;
- passive?: boolean;
- once?: boolean;
- signal?: AbortSignal;
-}
-interface EventTargetHandlerObject {
- handleEvent: (event: Event) => any | undefined;
-}
-/**
- * The **`AbortController`** interface represents a controller object that allows you to abort one or more Web requests as and when desired.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortController)
- */
-declare class AbortController {
- constructor();
- /**
- * The **`signal`** read-only property of the AbortController interface returns an AbortSignal object instance, which can be used to communicate with/abort an asynchronous operation as desired.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortController/signal)
- */
- get signal(): AbortSignal;
- /**
- * The **`abort()`** method of the AbortController interface aborts an asynchronous operation before it has completed.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortController/abort)
- */
- abort(reason?: any): void;
-}
-/**
- * The **`AbortSignal`** interface represents a signal object that allows you to communicate with an asynchronous operation (such as a fetch request) and abort it if required via an AbortController object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal)
- */
-declare abstract class AbortSignal extends EventTarget {
- /**
- * The **`AbortSignal.abort()`** static method returns an AbortSignal that is already set as aborted (and which does not trigger an AbortSignal/abort_event event).
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_static)
- */
- static abort(reason?: any): AbortSignal;
- /**
- * The **`AbortSignal.timeout()`** static method returns an AbortSignal that will automatically abort after a specified time.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/timeout_static)
- */
- static timeout(delay: number): AbortSignal;
- /**
- * The **`AbortSignal.any()`** static method takes an iterable of abort signals and returns an AbortSignal.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/any_static)
- */
- static any(signals: AbortSignal[]): AbortSignal;
- /**
- * The **`aborted`** read-only property returns a value that indicates whether the asynchronous operations the signal is communicating with are aborted (`true`) or not (`false`).
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/aborted)
- */
- get aborted(): boolean;
- /**
- * The **`reason`** read-only property returns a JavaScript value that indicates the abort reason.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/reason)
- */
- get reason(): any;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_event) */
- get onabort(): any | null;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/abort_event) */
- set onabort(value: any | null);
- /**
- * The **`throwIfAborted()`** method throws the signal's abort AbortSignal.reason if the signal has been aborted; otherwise it does nothing.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AbortSignal/throwIfAborted)
- */
- throwIfAborted(): void;
-}
-interface Scheduler {
- wait(delay: number, maybeOptions?: SchedulerWaitOptions): Promise;
-}
-interface SchedulerWaitOptions {
- signal?: AbortSignal;
-}
-/**
- * The **`ExtendableEvent`** interface extends the lifetime of the `install` and `activate` events dispatched on the global scope as part of the service worker lifecycle.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ExtendableEvent)
- */
-declare abstract class ExtendableEvent extends Event {
- /**
- * The **`ExtendableEvent.waitUntil()`** method tells the event dispatcher that work is ongoing.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ExtendableEvent/waitUntil)
- */
- waitUntil(promise: Promise): void;
-}
-/**
- * The **`CustomEvent`** interface represents events initialized by an application for any purpose.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomEvent)
- */
-declare class CustomEvent extends Event {
- constructor(type: string, init?: CustomEventCustomEventInit);
- /**
- * The read-only **`detail`** property of the CustomEvent interface returns any data passed when initializing the event.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CustomEvent/detail)
- */
- get detail(): T;
-}
-interface CustomEventCustomEventInit {
- bubbles?: boolean;
- cancelable?: boolean;
- composed?: boolean;
- detail?: any;
-}
-/**
- * The **`Blob`** interface represents a blob, which is a file-like object of immutable, raw data; they can be read as text or binary data, or converted into a ReadableStream so its methods can be used for processing the data.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob)
- */
-declare class Blob {
- constructor(type?: ((ArrayBuffer | ArrayBufferView) | string | Blob)[], options?: BlobOptions);
- /**
- * The **`size`** read-only property of the Blob interface returns the size of the Blob or File in bytes.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/size)
- */
- get size(): number;
- /**
- * The **`type`** read-only property of the Blob interface returns the MIME type of the file.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/type)
- */
- get type(): string;
- /**
- * The **`slice()`** method of the Blob interface creates and returns a new `Blob` object which contains data from a subset of the blob on which it's called.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/slice)
- */
- slice(start?: number, end?: number, type?: string): Blob;
- /**
- * The **`arrayBuffer()`** method of the Blob interface returns a Promise that resolves with the contents of the blob as binary data contained in an ArrayBuffer.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/arrayBuffer)
- */
- arrayBuffer(): Promise;
- /**
- * The **`bytes()`** method of the Blob interface returns a Promise that resolves with a Uint8Array containing the contents of the blob as an array of bytes.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/bytes)
- */
- bytes(): Promise;
- /**
- * The **`text()`** method of the string containing the contents of the blob, interpreted as UTF-8.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/text)
- */
- text(): Promise;
- /**
- * The **`stream()`** method of the Blob interface returns a ReadableStream which upon reading returns the data contained within the `Blob`.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/stream)
- */
- stream(): ReadableStream;
-}
-interface BlobOptions {
- type?: string;
-}
-/**
- * The **`File`** interface provides information about files and allows JavaScript in a web page to access their content.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/File)
- */
-declare class File extends Blob {
- constructor(bits: ((ArrayBuffer | ArrayBufferView) | string | Blob)[] | undefined, name: string, options?: FileOptions);
- /**
- * The **`name`** read-only property of the File interface returns the name of the file represented by a File object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/name)
- */
- get name(): string;
- /**
- * The **`lastModified`** read-only property of the File interface provides the last modified date of the file as the number of milliseconds since the Unix epoch (January 1, 1970 at midnight).
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/lastModified)
- */
- get lastModified(): number;
-}
-interface FileOptions {
- type?: string;
- lastModified?: number;
-}
-/**
-* The Cache API allows fine grained control of reading and writing from the Cloudflare global network cache.
-*
-* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/)
-*/
-declare abstract class CacheStorage {
- /**
- * The **`open()`** method of the the Cache object matching the `cacheName`.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CacheStorage/open)
- */
- open(cacheName: string): Promise;
- readonly default: Cache;
-}
-/**
-* The Cache API allows fine grained control of reading and writing from the Cloudflare global network cache.
-*
-* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/)
-*/
-declare abstract class Cache {
- /* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/#delete) */
- delete(request: RequestInfo | URL, options?: CacheQueryOptions): Promise;
- /* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/#match) */
- match(request: RequestInfo | URL, options?: CacheQueryOptions): Promise;
- /* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/cache/#put) */
- put(request: RequestInfo | URL, response: Response): Promise;
-}
-interface CacheQueryOptions {
- ignoreMethod?: boolean;
-}
-/**
-* The Web Crypto API provides a set of low-level functions for common cryptographic tasks.
-* The Workers runtime implements the full surface of this API, but with some differences in
-* the [supported algorithms](https://developers.cloudflare.com/workers/runtime-apis/web-crypto/#supported-algorithms)
-* compared to those implemented in most browsers.
-*
-* [Cloudflare Docs Reference](https://developers.cloudflare.com/workers/runtime-apis/web-crypto/)
-*/
-declare abstract class Crypto {
- /**
- * The **`Crypto.subtle`** read-only property returns a cryptographic operations.
- * Available only in secure contexts.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/subtle)
- */
- get subtle(): SubtleCrypto;
- /**
- * The **`Crypto.getRandomValues()`** method lets you get cryptographically strong random values.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/getRandomValues)
- */
- getRandomValues(buffer: T): T;
- /**
- * The **`randomUUID()`** method of the Crypto interface is used to generate a v4 UUID using a cryptographically secure random number generator.
- * Available only in secure contexts.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/randomUUID)
- */
- randomUUID(): string;
- DigestStream: typeof DigestStream;
-}
-/**
- * The **`SubtleCrypto`** interface of the Web Crypto API provides a number of low-level cryptographic functions.
- * Available only in secure contexts.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto)
- */
-declare abstract class SubtleCrypto {
- /**
- * The **`encrypt()`** method of the SubtleCrypto interface encrypts data.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/encrypt)
- */
- encrypt(algorithm: string | SubtleCryptoEncryptAlgorithm, key: CryptoKey, plainText: ArrayBuffer | ArrayBufferView): Promise;
- /**
- * The **`decrypt()`** method of the SubtleCrypto interface decrypts some encrypted data.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/decrypt)
- */
- decrypt(algorithm: string | SubtleCryptoEncryptAlgorithm, key: CryptoKey, cipherText: ArrayBuffer | ArrayBufferView): Promise;
- /**
- * The **`sign()`** method of the SubtleCrypto interface generates a digital signature.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/sign)
- */
- sign(algorithm: string | SubtleCryptoSignAlgorithm, key: CryptoKey, data: ArrayBuffer | ArrayBufferView): Promise;
- /**
- * The **`verify()`** method of the SubtleCrypto interface verifies a digital signature.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/verify)
- */
- verify(algorithm: string | SubtleCryptoSignAlgorithm, key: CryptoKey, signature: ArrayBuffer | ArrayBufferView, data: ArrayBuffer | ArrayBufferView): Promise;
- /**
- * The **`digest()`** method of the SubtleCrypto interface generates a _digest_ of the given data, using the specified hash function.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/digest)
- */
- digest(algorithm: string | SubtleCryptoHashAlgorithm, data: ArrayBuffer | ArrayBufferView): Promise;
- /**
- * The **`generateKey()`** method of the SubtleCrypto interface is used to generate a new key (for symmetric algorithms) or key pair (for public-key algorithms).
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/generateKey)
- */
- generateKey(algorithm: string | SubtleCryptoGenerateKeyAlgorithm, extractable: boolean, keyUsages: string[]): Promise;
- /**
- * The **`deriveKey()`** method of the SubtleCrypto interface can be used to derive a secret key from a master key.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/deriveKey)
- */
- deriveKey(algorithm: string | SubtleCryptoDeriveKeyAlgorithm, baseKey: CryptoKey, derivedKeyAlgorithm: string | SubtleCryptoImportKeyAlgorithm, extractable: boolean, keyUsages: string[]): Promise;
- /**
- * The **`deriveBits()`** method of the key.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/deriveBits)
- */
- deriveBits(algorithm: string | SubtleCryptoDeriveKeyAlgorithm, baseKey: CryptoKey, length?: number | null): Promise;
- /**
- * The **`importKey()`** method of the SubtleCrypto interface imports a key: that is, it takes as input a key in an external, portable format and gives you a CryptoKey object that you can use in the Web Crypto API.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/importKey)
- */
- importKey(format: string, keyData: (ArrayBuffer | ArrayBufferView) | JsonWebKey, algorithm: string | SubtleCryptoImportKeyAlgorithm, extractable: boolean, keyUsages: string[]): Promise;
- /**
- * The **`exportKey()`** method of the SubtleCrypto interface exports a key: that is, it takes as input a CryptoKey object and gives you the key in an external, portable format.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/exportKey)
- */
- exportKey(format: string, key: CryptoKey): Promise;
- /**
- * The **`wrapKey()`** method of the SubtleCrypto interface 'wraps' a key.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/wrapKey)
- */
- wrapKey(format: string, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: string | SubtleCryptoEncryptAlgorithm): Promise;
- /**
- * The **`unwrapKey()`** method of the SubtleCrypto interface 'unwraps' a key.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/unwrapKey)
- */
- unwrapKey(format: string, wrappedKey: ArrayBuffer | ArrayBufferView, unwrappingKey: CryptoKey, unwrapAlgorithm: string | SubtleCryptoEncryptAlgorithm, unwrappedKeyAlgorithm: string | SubtleCryptoImportKeyAlgorithm, extractable: boolean, keyUsages: string[]): Promise;
- timingSafeEqual(a: ArrayBuffer | ArrayBufferView, b: ArrayBuffer | ArrayBufferView): boolean;
-}
-/**
- * The **`CryptoKey`** interface of the Web Crypto API represents a cryptographic key obtained from one of the SubtleCrypto methods SubtleCrypto.generateKey, SubtleCrypto.deriveKey, SubtleCrypto.importKey, or SubtleCrypto.unwrapKey.
- * Available only in secure contexts.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey)
- */
-declare abstract class CryptoKey {
- /**
- * The read-only **`type`** property of the CryptoKey interface indicates which kind of key is represented by the object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/type)
- */
- readonly type: string;
- /**
- * The read-only **`extractable`** property of the CryptoKey interface indicates whether or not the key may be extracted using `SubtleCrypto.exportKey()` or `SubtleCrypto.wrapKey()`.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/extractable)
- */
- readonly extractable: boolean;
- /**
- * The read-only **`algorithm`** property of the CryptoKey interface returns an object describing the algorithm for which this key can be used, and any associated extra parameters.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/algorithm)
- */
- readonly algorithm: CryptoKeyKeyAlgorithm | CryptoKeyAesKeyAlgorithm | CryptoKeyHmacKeyAlgorithm | CryptoKeyRsaKeyAlgorithm | CryptoKeyEllipticKeyAlgorithm | CryptoKeyArbitraryKeyAlgorithm;
- /**
- * The read-only **`usages`** property of the CryptoKey interface indicates what can be done with the key.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CryptoKey/usages)
- */
- readonly usages: string[];
-}
-interface CryptoKeyPair {
- publicKey: CryptoKey;
- privateKey: CryptoKey;
-}
-interface JsonWebKey {
- kty: string;
- use?: string;
- key_ops?: string[];
- alg?: string;
- ext?: boolean;
- crv?: string;
- x?: string;
- y?: string;
- d?: string;
- n?: string;
- e?: string;
- p?: string;
- q?: string;
- dp?: string;
- dq?: string;
- qi?: string;
- oth?: RsaOtherPrimesInfo[];
- k?: string;
-}
-interface RsaOtherPrimesInfo {
- r?: string;
- d?: string;
- t?: string;
-}
-interface SubtleCryptoDeriveKeyAlgorithm {
- name: string;
- salt?: (ArrayBuffer | ArrayBufferView);
- iterations?: number;
- hash?: (string | SubtleCryptoHashAlgorithm);
- $public?: CryptoKey;
- info?: (ArrayBuffer | ArrayBufferView);
-}
-interface SubtleCryptoEncryptAlgorithm {
- name: string;
- iv?: (ArrayBuffer | ArrayBufferView);
- additionalData?: (ArrayBuffer | ArrayBufferView);
- tagLength?: number;
- counter?: (ArrayBuffer | ArrayBufferView);
- length?: number;
- label?: (ArrayBuffer | ArrayBufferView);
-}
-interface SubtleCryptoGenerateKeyAlgorithm {
- name: string;
- hash?: (string | SubtleCryptoHashAlgorithm);
- modulusLength?: number;
- publicExponent?: (ArrayBuffer | ArrayBufferView);
- length?: number;
- namedCurve?: string;
-}
-interface SubtleCryptoHashAlgorithm {
- name: string;
-}
-interface SubtleCryptoImportKeyAlgorithm {
- name: string;
- hash?: (string | SubtleCryptoHashAlgorithm);
- length?: number;
- namedCurve?: string;
- compressed?: boolean;
-}
-interface SubtleCryptoSignAlgorithm {
- name: string;
- hash?: (string | SubtleCryptoHashAlgorithm);
- dataLength?: number;
- saltLength?: number;
-}
-interface CryptoKeyKeyAlgorithm {
- name: string;
-}
-interface CryptoKeyAesKeyAlgorithm {
- name: string;
- length: number;
-}
-interface CryptoKeyHmacKeyAlgorithm {
- name: string;
- hash: CryptoKeyKeyAlgorithm;
- length: number;
-}
-interface CryptoKeyRsaKeyAlgorithm {
- name: string;
- modulusLength: number;
- publicExponent: ArrayBuffer | ArrayBufferView;
- hash?: CryptoKeyKeyAlgorithm;
-}
-interface CryptoKeyEllipticKeyAlgorithm {
- name: string;
- namedCurve: string;
-}
-interface CryptoKeyArbitraryKeyAlgorithm {
- name: string;
- hash?: CryptoKeyKeyAlgorithm;
- namedCurve?: string;
- length?: number;
-}
-declare class DigestStream extends WritableStream {
- constructor(algorithm: string | SubtleCryptoHashAlgorithm);
- readonly digest: Promise;
- get bytesWritten(): number | bigint;
-}
-/**
- * The **`TextDecoder`** interface represents a decoder for a specific text encoding, such as `UTF-8`, `ISO-8859-2`, `KOI8-R`, `GBK`, etc.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextDecoder)
- */
-declare class TextDecoder {
- constructor(label?: string, options?: TextDecoderConstructorOptions);
- /**
- * The **`TextDecoder.decode()`** method returns a string containing text decoded from the buffer passed as a parameter.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextDecoder/decode)
- */
- decode(input?: (ArrayBuffer | ArrayBufferView), options?: TextDecoderDecodeOptions): string;
- get encoding(): string;
- get fatal(): boolean;
- get ignoreBOM(): boolean;
-}
-/**
- * The **`TextEncoder`** interface takes a stream of code points as input and emits a stream of UTF-8 bytes.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoder)
- */
-declare class TextEncoder {
- constructor();
- /**
- * The **`TextEncoder.encode()`** method takes a string as input, and returns a Global_Objects/Uint8Array containing the text given in parameters encoded with the specific method for that TextEncoder object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoder/encode)
- */
- encode(input?: string): Uint8Array;
- /**
- * The **`TextEncoder.encodeInto()`** method takes a string to encode and a destination Uint8Array to put resulting UTF-8 encoded text into, and returns a dictionary object indicating the progress of the encoding.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoder/encodeInto)
- */
- encodeInto(input: string, buffer: Uint8Array): TextEncoderEncodeIntoResult;
- get encoding(): string;
-}
-interface TextDecoderConstructorOptions {
- fatal: boolean;
- ignoreBOM: boolean;
-}
-interface TextDecoderDecodeOptions {
- stream: boolean;
-}
-interface TextEncoderEncodeIntoResult {
- read: number;
- written: number;
-}
-/**
- * The **`ErrorEvent`** interface represents events providing information related to errors in scripts or in files.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent)
- */
-declare class ErrorEvent extends Event {
- constructor(type: string, init?: ErrorEventErrorEventInit);
- /**
- * The **`filename`** read-only property of the ErrorEvent interface returns a string containing the name of the script file in which the error occurred.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/filename)
- */
- get filename(): string;
- /**
- * The **`message`** read-only property of the ErrorEvent interface returns a string containing a human-readable error message describing the problem.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/message)
- */
- get message(): string;
- /**
- * The **`lineno`** read-only property of the ErrorEvent interface returns an integer containing the line number of the script file on which the error occurred.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/lineno)
- */
- get lineno(): number;
- /**
- * The **`colno`** read-only property of the ErrorEvent interface returns an integer containing the column number of the script file on which the error occurred.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/colno)
- */
- get colno(): number;
- /**
- * The **`error`** read-only property of the ErrorEvent interface returns a JavaScript value, such as an Error or DOMException, representing the error associated with this event.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ErrorEvent/error)
- */
- get error(): any;
-}
-interface ErrorEventErrorEventInit {
- message?: string;
- filename?: string;
- lineno?: number;
- colno?: number;
- error?: any;
-}
-/**
- * The **`MessageEvent`** interface represents a message received by a target object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent)
- */
-declare class MessageEvent extends Event {
- constructor(type: string, initializer: MessageEventInit);
- /**
- * The **`data`** read-only property of the The data sent by the message emitter; this can be any data type, depending on what originated this event.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/data)
- */
- readonly data: any;
- /**
- * The **`origin`** read-only property of the origin of the message emitter.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/origin)
- */
- readonly origin: string | null;
- /**
- * The **`lastEventId`** read-only property of the unique ID for the event.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/lastEventId)
- */
- readonly lastEventId: string;
- /**
- * The **`source`** read-only property of the a WindowProxy, MessagePort, or a `MessageEventSource` (which can be a WindowProxy, message emitter.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/source)
- */
- readonly source: MessagePort | null;
- /**
- * The **`ports`** read-only property of the containing all MessagePort objects sent with the message, in order.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/ports)
- */
- readonly ports: MessagePort[];
-}
-interface MessageEventInit {
- data: ArrayBuffer | string;
-}
-/**
- * The **`PromiseRejectionEvent`** interface represents events which are sent to the global script context when JavaScript Promises are rejected.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PromiseRejectionEvent)
- */
-declare abstract class PromiseRejectionEvent extends Event {
- /**
- * The PromiseRejectionEvent interface's **`promise`** read-only property indicates the JavaScript rejected.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PromiseRejectionEvent/promise)
- */
- readonly promise: Promise;
- /**
- * The PromiseRejectionEvent **`reason`** read-only property is any JavaScript value or Object which provides the reason passed into Promise.reject().
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PromiseRejectionEvent/reason)
- */
- readonly reason: any;
-}
-/**
- * The **`FormData`** interface provides a way to construct a set of key/value pairs representing form fields and their values, which can be sent using the Window/fetch, XMLHttpRequest.send() or navigator.sendBeacon() methods.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData)
- */
-declare class FormData {
- constructor();
- /**
- * The **`append()`** method of the FormData interface appends a new value onto an existing key inside a `FormData` object, or adds the key if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/append)
- */
- append(name: string, value: string | Blob): void;
- /**
- * The **`append()`** method of the FormData interface appends a new value onto an existing key inside a `FormData` object, or adds the key if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/append)
- */
- append(name: string, value: string): void;
- /**
- * The **`append()`** method of the FormData interface appends a new value onto an existing key inside a `FormData` object, or adds the key if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/append)
- */
- append(name: string, value: Blob, filename?: string): void;
- /**
- * The **`delete()`** method of the FormData interface deletes a key and its value(s) from a `FormData` object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/delete)
- */
- delete(name: string): void;
- /**
- * The **`get()`** method of the FormData interface returns the first value associated with a given key from within a `FormData` object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/get)
- */
- get(name: string): (File | string) | null;
- /**
- * The **`getAll()`** method of the FormData interface returns all the values associated with a given key from within a `FormData` object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/getAll)
- */
- getAll(name: string): (File | string)[];
- /**
- * The **`has()`** method of the FormData interface returns whether a `FormData` object contains a certain key.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/has)
- */
- has(name: string): boolean;
- /**
- * The **`set()`** method of the FormData interface sets a new value for an existing key inside a `FormData` object, or adds the key/value if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/set)
- */
- set(name: string, value: string | Blob): void;
- /**
- * The **`set()`** method of the FormData interface sets a new value for an existing key inside a `FormData` object, or adds the key/value if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/set)
- */
- set(name: string, value: string): void;
- /**
- * The **`set()`** method of the FormData interface sets a new value for an existing key inside a `FormData` object, or adds the key/value if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/set)
- */
- set(name: string, value: Blob, filename?: string): void;
- /* Returns an array of key, value pairs for every entry in the list. */
- entries(): IterableIterator<[
- key: string,
- value: File | string
- ]>;
- /* Returns a list of keys in the list. */
- keys(): IterableIterator;
- /* Returns a list of values in the list. */
- values(): IterableIterator<(File | string)>;
- forEach(callback: (this: This, value: File | string, key: string, parent: FormData) => void, thisArg?: This): void;
- [Symbol.iterator](): IterableIterator<[
- key: string,
- value: File | string
- ]>;
-}
-interface ContentOptions {
- html?: boolean;
-}
-declare class HTMLRewriter {
- constructor();
- on(selector: string, handlers: HTMLRewriterElementContentHandlers): HTMLRewriter;
- onDocument(handlers: HTMLRewriterDocumentContentHandlers): HTMLRewriter;
- transform(response: Response): Response;
-}
-interface HTMLRewriterElementContentHandlers {
- element?(element: Element): void | Promise;
- comments?(comment: Comment): void | Promise;
- text?(element: Text): void | Promise;
-}
-interface HTMLRewriterDocumentContentHandlers {
- doctype?(doctype: Doctype): void | Promise;
- comments?(comment: Comment): void | Promise;
- text?(text: Text): void | Promise;
- end?(end: DocumentEnd): void | Promise;
-}
-interface Doctype {
- readonly name: string | null;
- readonly publicId: string | null;
- readonly systemId: string | null;
-}
-interface Element {
- tagName: string;
- readonly attributes: IterableIterator;
- readonly removed: boolean;
- readonly namespaceURI: string;
- getAttribute(name: string): string | null;
- hasAttribute(name: string): boolean;
- setAttribute(name: string, value: string): Element;
- removeAttribute(name: string): Element;
- before(content: string | ReadableStream | Response, options?: ContentOptions): Element;
- after(content: string | ReadableStream | Response, options?: ContentOptions): Element;
- prepend(content: string | ReadableStream | Response, options?: ContentOptions): Element;
- append(content: string | ReadableStream | Response, options?: ContentOptions): Element;
- replace(content: string | ReadableStream | Response, options?: ContentOptions): Element;
- remove(): Element;
- removeAndKeepContent(): Element;
- setInnerContent(content: string | ReadableStream | Response, options?: ContentOptions): Element;
- onEndTag(handler: (tag: EndTag) => void | Promise): void;
-}
-interface EndTag {
- name: string;
- before(content: string | ReadableStream | Response, options?: ContentOptions): EndTag;
- after(content: string | ReadableStream | Response, options?: ContentOptions): EndTag;
- remove(): EndTag;
-}
-interface Comment {
- text: string;
- readonly removed: boolean;
- before(content: string, options?: ContentOptions): Comment;
- after(content: string, options?: ContentOptions): Comment;
- replace(content: string, options?: ContentOptions): Comment;
- remove(): Comment;
-}
-interface Text {
- readonly text: string;
- readonly lastInTextNode: boolean;
- readonly removed: boolean;
- before(content: string | ReadableStream | Response, options?: ContentOptions): Text;
- after(content: string | ReadableStream | Response, options?: ContentOptions): Text;
- replace(content: string | ReadableStream | Response, options?: ContentOptions): Text;
- remove(): Text;
-}
-interface DocumentEnd {
- append(content: string, options?: ContentOptions): DocumentEnd;
-}
-/**
- * This is the event type for `fetch` events dispatched on the ServiceWorkerGlobalScope.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FetchEvent)
- */
-declare abstract class FetchEvent extends ExtendableEvent {
- /**
- * The **`request`** read-only property of the the event handler.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FetchEvent/request)
- */
- readonly request: Request;
- /**
- * The **`respondWith()`** method of allows you to provide a promise for a Response yourself.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FetchEvent/respondWith)
- */
- respondWith(promise: Response | Promise): void;
- passThroughOnException(): void;
-}
-type HeadersInit = Headers | Iterable> | Record;
-/**
- * The **`Headers`** interface of the Fetch API allows you to perform various actions on HTTP request and response headers.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers)
- */
-declare class Headers {
- constructor(init?: HeadersInit);
- /**
- * The **`get()`** method of the Headers interface returns a byte string of all the values of a header within a `Headers` object with a given name.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/get)
- */
- get(name: string): string | null;
- getAll(name: string): string[];
- /**
- * The **`getSetCookie()`** method of the Headers interface returns an array containing the values of all Set-Cookie headers associated with a response.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/getSetCookie)
- */
- getSetCookie(): string[];
- /**
- * The **`has()`** method of the Headers interface returns a boolean stating whether a `Headers` object contains a certain header.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/has)
- */
- has(name: string): boolean;
- /**
- * The **`set()`** method of the Headers interface sets a new value for an existing header inside a `Headers` object, or adds the header if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/set)
- */
- set(name: string, value: string): void;
- /**
- * The **`append()`** method of the Headers interface appends a new value onto an existing header inside a `Headers` object, or adds the header if it does not already exist.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/append)
- */
- append(name: string, value: string): void;
- /**
- * The **`delete()`** method of the Headers interface deletes a header from the current `Headers` object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/delete)
- */
- delete(name: string): void;
- forEach(callback: (this: This, value: string, key: string, parent: Headers) => void, thisArg?: This): void;
- /* Returns an iterator allowing to go through all key/value pairs contained in this object. */
- entries(): IterableIterator<[
- key: string,
- value: string
- ]>;
- /* Returns an iterator allowing to go through all keys of the key/value pairs contained in this object. */
- keys(): IterableIterator;
- /* Returns an iterator allowing to go through all values of the key/value pairs contained in this object. */
- values(): IterableIterator;
- [Symbol.iterator](): IterableIterator<[
- key: string,
- value: string
- ]>;
-}
-type BodyInit = ReadableStream | string | ArrayBuffer | ArrayBufferView | Blob | URLSearchParams | FormData;
-declare abstract class Body {
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/body) */
- get body(): ReadableStream | null;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bodyUsed) */
- get bodyUsed(): boolean;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/arrayBuffer) */
- arrayBuffer(): Promise;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bytes) */
- bytes(): Promise;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/text) */
- text(): Promise;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/json) */
- json(): Promise;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/formData) */
- formData(): Promise;
- /* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/blob) */
- blob(): Promise;
-}
-/**
- * The **`Response`** interface of the Fetch API represents the response to a request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response)
- */
-declare var Response: {
- prototype: Response;
- new (body?: BodyInit | null, init?: ResponseInit): Response;
- error(): Response;
- redirect(url: string, status?: number): Response;
- json(any: any, maybeInit?: (ResponseInit | Response)): Response;
-};
-/**
- * The **`Response`** interface of the Fetch API represents the response to a request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response)
- */
-interface Response extends Body {
- /**
- * The **`clone()`** method of the Response interface creates a clone of a response object, identical in every way, but stored in a different variable.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/clone)
- */
- clone(): Response;
- /**
- * The **`status`** read-only property of the Response interface contains the HTTP status codes of the response.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/status)
- */
- status: number;
- /**
- * The **`statusText`** read-only property of the Response interface contains the status message corresponding to the HTTP status code in Response.status.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/statusText)
- */
- statusText: string;
- /**
- * The **`headers`** read-only property of the with the response.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/headers)
- */
- headers: Headers;
- /**
- * The **`ok`** read-only property of the Response interface contains a Boolean stating whether the response was successful (status in the range 200-299) or not.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/ok)
- */
- ok: boolean;
- /**
- * The **`redirected`** read-only property of the Response interface indicates whether or not the response is the result of a request you made which was redirected.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/redirected)
- */
- redirected: boolean;
- /**
- * The **`url`** read-only property of the Response interface contains the URL of the response.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/url)
- */
- url: string;
- webSocket: WebSocket | null;
- cf: any | undefined;
- /**
- * The **`type`** read-only property of the Response interface contains the type of the response.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/type)
- */
- type: "default" | "error";
-}
-interface ResponseInit {
- status?: number;
- statusText?: string;
- headers?: HeadersInit;
- cf?: any;
- webSocket?: (WebSocket | null);
- encodeBody?: "automatic" | "manual";
-}
-type RequestInfo> = Request | string;
-/**
- * The **`Request`** interface of the Fetch API represents a resource request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request)
- */
-declare var Request: {
- prototype: Request;
- new >(input: RequestInfo | URL, init?: RequestInit): Request;
-};
-/**
- * The **`Request`** interface of the Fetch API represents a resource request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request)
- */
-interface Request> extends Body {
- /**
- * The **`clone()`** method of the Request interface creates a copy of the current `Request` object.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/clone)
- */
- clone(): Request;
- /**
- * The **`method`** read-only property of the `POST`, etc.) A String indicating the method of the request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/method)
- */
- method: string;
- /**
- * The **`url`** read-only property of the Request interface contains the URL of the request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/url)
- */
- url: string;
- /**
- * The **`headers`** read-only property of the with the request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/headers)
- */
- headers: Headers;
- /**
- * The **`redirect`** read-only property of the Request interface contains the mode for how redirects are handled.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/redirect)
- */
- redirect: string;
- fetcher: Fetcher | null;
- /**
- * The read-only **`signal`** property of the Request interface returns the AbortSignal associated with the request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/signal)
- */
- signal: AbortSignal;
- cf?: Cf;
- /**
- * The **`integrity`** read-only property of the Request interface contains the subresource integrity value of the request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/integrity)
- */
- integrity: string;
- /**
- * The **`keepalive`** read-only property of the Request interface contains the request's `keepalive` setting (`true` or `false`), which indicates whether the browser will keep the associated request alive if the page that initiated it is unloaded before the request is complete.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/keepalive)
- */
- keepalive: boolean;
- /**
- * The **`cache`** read-only property of the Request interface contains the cache mode of the request.
- *
- * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/cache)
- */
- cache?: "no-store" | "no-cache";
-}
-interface RequestInit {
- /* A string to set request's method. */
- method?: string;
- /* A Headers object, an object literal, or an array of two-item arrays to set request's headers. */
- headers?: HeadersInit;
- /* A BodyInit object or null to set request's body. */
- body?: BodyInit | null;
- /* A string indicating whether request follows redirects, results in an error upon encountering a redirect, or returns the redirect (in an opaque fashion). Sets request's redirect. */
- redirect?: string;
- fetcher?: (Fetcher | null);
- cf?: Cf;
- /* A string indicating how the request will interact with the browser's cache to set request's cache. */
- cache?: "no-store" | "no-cache";
- /* A cryptographic hash of the resource to be fetched by request. Sets request's integrity. */
- integrity?: string;
- /* An AbortSignal to set request's signal. */
- signal?: (AbortSignal | null);
- encodeResponseBody?: "automatic" | "manual";
-}
-type Service Rpc.WorkerEntrypointBranded) | Rpc.WorkerEntrypointBranded | ExportedHandler | undefined = undefined> = T extends new (...args: any[]) => Rpc.WorkerEntrypointBranded ? Fetcher> : T extends Rpc.WorkerEntrypointBranded ? Fetcher : T extends Exclude ? never : Fetcher;
-type Fetcher = (T extends Rpc.EntrypointBranded ? Rpc.Provider : unknown) & {
- fetch(input: RequestInfo | URL, init?: RequestInit): Promise;
- connect(address: SocketAddress | string, options?: SocketOptions): Socket;
-};
-interface KVNamespaceListKey {
- name: Key;
- expiration?: number;
- metadata?: Metadata;
-}
-type KVNamespaceListResult = {
- list_complete: false;
- keys: KVNamespaceListKey[];
- cursor: string;
- cacheStatus: string | null;
-} | {
- list_complete: true;
- keys: KVNamespaceListKey[];
- cacheStatus: string | null;
-};
-interface KVNamespace {
- get(key: Key, options?: Partial>): Promise;
- get(key: Key, type: "text"): Promise;
- get(key: Key, type: "json"): Promise;
- get(key: Key, type: "arrayBuffer"): Promise;
- get(key: Key, type: "stream"): Promise;
- get(key: Key, options?: KVNamespaceGetOptions<"text">): Promise;
- get(key: Key, options?: KVNamespaceGetOptions<"json">): Promise;
- get(key: Key, options?: KVNamespaceGetOptions<"arrayBuffer">): Promise;
- get(key: Key, options?: KVNamespaceGetOptions<"stream">): Promise;
- get(key: Array, type: "text"): Promise>;
- get(key: Array, type: "json"): Promise>;
- get(key: Array, options?: Partial>): Promise>;
- get(key: Array, options?: KVNamespaceGetOptions<"text">): Promise>;
- get(key: Array, options?: KVNamespaceGetOptions<"json">): Promise>;
- list(options?: KVNamespaceListOptions): Promise>;
- put(key: Key, value: string | ArrayBuffer | ArrayBufferView | ReadableStream, options?: KVNamespacePutOptions): Promise;
- getWithMetadata(key: Key, options?: Partial>): Promise>;
- getWithMetadata(key: Key, type: "text"): Promise>;
- getWithMetadata(key: Key, type: "json"): Promise>;
- getWithMetadata(key: Key, type: "arrayBuffer"): Promise>;
- getWithMetadata(key: Key, type: "stream"): Promise>;
- getWithMetadata(key: Key, options: KVNamespaceGetOptions<"text">): Promise>;
- getWithMetadata(key: Key, options: KVNamespaceGetOptions<"json">): Promise>;
- getWithMetadata