diff --git a/.changeset/README.md b/.changeset/README.md
new file mode 100644
index 0000000..e5b6d8d
--- /dev/null
+++ b/.changeset/README.md
@@ -0,0 +1,8 @@
+# Changesets
+
+Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
+with multi-package repos, or single-package repos to help you version and publish your code. You can
+find the full documentation for it [in our repository](https://github.com/changesets/changesets)
+
+We have a quick list of common questions to get you started engaging with this project in
+[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
diff --git a/.changeset/config.json b/.changeset/config.json
new file mode 100644
index 0000000..d88011f
--- /dev/null
+++ b/.changeset/config.json
@@ -0,0 +1,11 @@
+{
+ "$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json",
+ "changelog": "@changesets/cli/changelog",
+ "commit": false,
+ "fixed": [],
+ "linked": [],
+ "access": "restricted",
+ "baseBranch": "main",
+ "updateInternalDependencies": "patch",
+ "ignore": []
+}
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..6313b56
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+* text=auto eol=lf
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 8f74f44..0af3639 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -1,16 +1,20 @@
---
name: Bug report
-about: Make a better open-source software with bug report
+about: Make a better software with bug report
title: '[bug]'
labels: bug
-assignees: danpacho
---
-**Describe the bug**
-A clear and concise description of what the bug is.
+
-**Expected behavior**
-A clear and concise description of what you expected to happen.
+## 1. Describe the bug
-**Additional context**
-Add any other context about the problem here.
+> A clear and concise description of what the bug is.
+
+## 2. Expected behavior
+
+> A clear and concise description of what you expected to happen.
+
+## 3. Additional context(screenshots, logs, etc.)
+
+> Add any other context about the problem here.
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index abbc567..628a541 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -3,7 +3,6 @@ name: Feature request
about: Suggest an idea for this project
title: '[feature-request] Write your features'
labels: feature request
-assignees: danpacho
---
-## ๐ Description
+## 1. Feature description
-> Add a brief description
+> What does this feature do? (Fix/Feature/Bugfix/Refactor)
-## ๐ช Current behavior
+## 2. Changes
-> Please describe the current behavior that you are modifying
+> What it changes were made?
-## ๐ฆพ New behavior
-
-> Please describe the behavior or changes this PR adds
-
-## ๐ฃ Breaking change (y/n):
+## 3. Breaking change (y/n):
-## ๐ Additional Information
+## 4. Additional Information(context, links, etc.)
\ No newline at end of file
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index ee05470..b408985 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,19 +1,27 @@
-## Description
+## 1. Description
-Please provide a meaningful description of what this change will do, or is for. Bonus points for including links to related issues, other PRs, or technical references.
+> What does this PR do? (Fix/Feature/Bugfix/Refactor)
-Note that by _not_ including a description, you are asking reviewers to do extra work to understand the context of this change, which may lead to your PR taking much longer to review, or result in it not being reviewed at all.
+## 2. Changes
-## Type of Change
+> What it changes were made?
+
+## 3. Breaking change (y/n):
+
+
+
+## 4. Additional Information(context, links, etc.)
+
+## 5. Type of Change
- [ ] Bug Fix
-- [ ] Enhancement
-- [ ] Breaking API Changes
- [ ] Refactor
+- [ ] Enhancement
- [ ] Documentation
+- [ ] Breaking API Changes
- [ ] Other (please describe)
-## Checklist
+## 6. Checklist
- [ ] I have verified this change is not present in other open pull requests
- [ ] Existing issues have been referenced (where applicable)
diff --git a/.github/release-drafter-config.yml b/.github/release-drafter-config.yml
index 23d8fe5..7d15852 100644
--- a/.github/release-drafter-config.yml
+++ b/.github/release-drafter-config.yml
@@ -1,41 +1,49 @@
-name-template: 'v$RESOLVED_VERSION ๐ฎ'
+name-template: 'v$RESOLVED_VERSION'
tag-template: 'v$RESOLVED_VERSION'
categories:
- - title: 'New Features ๐'
- labels:
- - 'feature'
- - 'enhancement'
- - title: 'Bug Fixes ๐'
- labels:
- - 'fix'
- - 'bugfix'
- - 'bug'
- - title: 'Breaking ๐คฏ'
- labels:
- - 'breaking'
- - title: 'Maintenance ๐ฆ'
- labels:
- - 'maintenance'
+ - title: 'New Features'
+ labels:
+ - 'feature'
+
+ - title: 'Bug Fixes'
+ labels:
+ - 'bugfix'
+ - 'bug'
+
+ - title: 'Breaking Changes'
+ labels:
+ - 'breaking'
+
+ - title: 'Maintenance'
+ labels:
+ - 'refactor'
category-template: '### $TITLE'
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
change-title-escapes: '\<*_&'
no-changes-template: 'No changes'
exclude-labels:
- - 'skip-changelog'
+ - 'skip-changelog'
version-resolver:
- major:
- labels:
- - 'breaking'
- minor:
- labels:
- - 'feature'
- - 'enhancement'
- patch:
- labels:
- - 'maintenance'
- - 'patch'
- default: 'patch'
+ major:
+ labels:
+ - 'breaking'
+ minor:
+ labels:
+ - 'feature'
+ patch:
+ labels:
+ - 'refactor'
+ - 'bugfix'
+ - 'bug'
+ default: 'patch'
+
template: |
- $CHANGES
+ ## Whatโs Changed
+
+ $CHANGES
+
+ ## Contributors
+
+ $CONTRIBUTORS
- **Full Changelog**: https://github.com/metal-ts/fetch/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION
+ **Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION
\ No newline at end of file
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index be0a80c..2df5c92 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,8 +1,8 @@
-name: Draft Release
+name: Release Drafter
on:
push:
- branches: [master]
+ branches: [main]
pull_request:
types: [opened, reopened, synchronize]
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index ad51333..ceaf42e 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -1,35 +1,35 @@
-name: Test code
+name: CI
on:
- push:
- branches: ['**']
- pull_request:
- branches: ['**']
+ push:
+ branches: ["**"]
jobs:
- total-test:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- name: Checkout
-
- - name: Setup Node.js
- uses: actions/setup-node@v3
- with:
- node-version: 20
-
- - uses: pnpm/action-setup@v2
- name: Install pnpm
- id: pnpm-install
- with:
- version: 9
- run_install: true
-
- - name: Format checking
- run: pnpm prettier && pnpm eslint
-
- - name: Build testing for core
- run: pnpm build
-
- - name: Unit testing
- run: pnpm test
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ name: Checkout
+
+ - uses: actions/setup-node@v3
+ name: Setup Node.js
+ with:
+ node-version: 22
+
+ - uses: pnpm/action-setup@v4
+ name: Setup PNPM
+ with:
+ # Skip the default install so we can do our own
+ run_install: false
+
+ - name: Install dependencies
+ run: pnpm install --no-frozen-lockfile
+
+ - name: Format checking
+ run: pnpm check
+
+ - name: Build
+ run: pnpm build
+
+ - name: Test
+ run: pnpm test
diff --git a/.gitignore b/.gitignore
index 646bc53..9003ea4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,16 @@
# Local
*.local
+@resources
# Build
dist
.turbo
benchmark
+.obsidian
+.vite
+output.css
+.source
+.next
# Dependencies
node_modules/
@@ -18,6 +24,8 @@ node_modules/
coverage
ts-perf
tsconfig.tsbuildinfo
+__snapshots__
+large.*
# Logs
npm-debug.log*
@@ -25,6 +33,15 @@ yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
+# Environment variables
+.env
+.env.production
+
+# Build output
+dist/
+.astro/
+.store/
+.legacy
# Editor
!.vscode/extensions.json
diff --git a/.hintrc b/.hintrc
new file mode 100644
index 0000000..5b02c11
--- /dev/null
+++ b/.hintrc
@@ -0,0 +1,13 @@
+{
+ "extends": [
+ "development"
+ ],
+ "hints": {
+ "axe/forms": [
+ "default",
+ {
+ "label": "off"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/.lintstagedrc b/.lintstagedrc
index 7ede30d..001c5e9 100644
--- a/.lintstagedrc
+++ b/.lintstagedrc
@@ -1,4 +1,3 @@
{
- "**/*.ts": ["prettier --write", "eslint --fix"],
- "**/*.{md,json}": ["prettier --write"]
+ "**/*.ts": ["biome format --write"]
}
diff --git a/.prettierignore b/.prettierignore
deleted file mode 100644
index 0e3e6f2..0000000
--- a/.prettierignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/node_modules/*
-pnpm-lock.yaml
diff --git a/.prettierrc b/.prettierrc
deleted file mode 100644
index 8b1a2a2..0000000
--- a/.prettierrc
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "tabWidth": 4,
- "trailingComma": "es5",
- "useTabs": false,
- "semi": false,
- "singleQuote": true
-}
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 16522e9..f3fec06 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,38 +1,110 @@
-
+```bash
+git clone https://github.com/freestylejs/fetch.git
+```
+
+### Navigate to project directory
+
+```bash
+cd fetch
+```
+
+### Create a new Branch
+
+```bash
+git checkout -b {new-branch}
+```
+
+### Install dependencies
+
+```bash
+pnpm install
+```
+
+### Start development
+
+```bash
+pnpm dev
+```
+
+#### Run a workspace
+
+You can use the `pnpm --filter=[WORKSPACE]` command to start the development process for a workspace.
+
+> Examples
+
+1. To run the documentation website:
+
+```bash
+pnpm --filter=@freestylejs/fetch-web dev
+```
+
+2. To work on the fetch package in watch mode:
+
+```bash
+pnpm --filter=@freestylejs/fetch dev
+```
+
+## Documentation
+
+The documentation for this project is located in the `web` workspace. You can run the documentation locally by running the following command:
+
+```bash
+pnpm --filter=@freestylejs/fetch-web dev
+```
+
+Documentation is written using [MDX](https://mdxjs.com). You can find the documentation files in the `packages/web/content/docs` directory.
+
+## Commit Convention
+
+Check [commit convention](./assets/commit.md).
+
+## Testing
+
+Tests are written using [Vitest](https://vitest.dev). You can run all the tests from the root of the repository.
+
+```bash
+pnpm test
+```
+
+Please ensure that the tests are passing when submitting a pull request. If you're adding new features, please include tests.
diff --git a/README.md b/README.md
index 44ded48..4259e5d 100644
--- a/README.md
+++ b/README.md
@@ -1,372 +1,15 @@
-
-
-
+# freestyle/fetch
-metal-fetch
+
-
- A type-safe, fluent, and chainable wrapper around the native Fetch API, designed for maximum flexibility and developer experience.
-
+## Documentation
-
-
-
-
-
-
-
----
-
-**metal-fetch** provides a robust, immutable builder that empowers you to define API endpoints declaratively. It enforces type safety for request bodies, search parameters, and responses, catching errors at compile time, not runtime. With a powerful middleware system and first-class error handling, it's built for creating resilient and maintainable API layers.
-
-## Features
-
-- **โ๏ธ Fluent, Chainable API:** Define every aspect of a request with a clean, readable, and chainable interface.
-- **๐ Type-Safe by Default:** Enforces validation for request bodies, path parameters, and responses. If you don't define a validator, you can't send the data.
-- **โจ Immutable Builder:** Every method on the `FetchBuilder` returns a new, cloned instance, preventing side effects and making your API definitions safe to reuse and extend.
-- **๐ Full-Cycle Middleware:** Intercept and modify requests and responses with a standard `(request, next) => Promise` middleware pattern. Perfect for logging, authentication, caching, and more.
-- **๐ช Flexible Response Handling:** Get full control over the raw `Response` object. Inspect headers or check status codes before deciding how to parse the body, preventing crashes from unexpected API responses.
-- **๐จ Granular Error Handling:** Define separate handlers for typed fetch errors (like a 404 or 500) and unknown network errors.
-
-## Installation
-
-```bash
-# Using pnpm
-pnpm add @metal-box/fetch
-
-# Using npm
-npm install @metal-box/fetch
-
-# Using yarn
-yarn add @metal-box/fetch
-```
-
-> **Note:** `metal-fetch` is a runtime-agnostic library. For validation, you can bring your own library, such as `zod`, `yup`, `@metal-box/type`, or any other.
-
----
-
-## Quick Start
-
-Here's a quick look at defining and using an API endpoint to fetch a user by their ID.
-
-```typescript
-import { f } from '@metal-box/fetch'
-import { z } from 'zod'
-
-const BASE_URL = 'https://api.example.com'
-
-// Define a validator for the user response
-const UserResponse = z.object({
- id: z.string(),
- name: z.string(),
- email: z.string().email(),
-})
-
-// 1. Create a reusable API client instance
-const apiClient = f
- .builder()
- .def_url(BASE_URL)
- .def_json() // Automatically handle JSON parsing
- .def_query_mode('throw') // Throw an error on non-2xx responses
-
-// 2. Define a specific endpoint
-const getUser = apiClient
- .def_method('GET')
- .def_url(`${BASE_URL}/users/$id`) // Dynamic path parameter
- .def_response(async ({ json }) => UserResponse.parse(await json()))
- .build()
-
-// 3. Execute the query
-async function fetchUser(userId: string) {
- try {
- const user = await getUser.query({
- path: { id: userId },
- })
-
- console.log('Fetched User:', user)
- // Type of `user` is inferred as:
- // { id: string; name: string; email: string; }
-
- return user
- } catch (error) {
- console.error('Failed to fetch user:', error)
- }
-}
-
-fetchUser('123')
-```
-
-## Core Concepts
-
-### The Immutable Builder
-
-The core of `metal-fetch` is the `FetchBuilder`. It's immutable, meaning every method call creates a new, refined builder instance. This allows you to safely create a base client and extend it for specific endpoints without any side effects.
-
-```typescript
-// Base client with shared configuration
-const baseClient = f
- .builder()
- .def_url('https://api.my-service.com')
- .def_query_mode('throw')
-
-// Endpoint for fetching products
-const getProducts = baseClient
- .def_method('GET')
- .def_url('https://api.my-service.com/products')
- .build()
-
-// Endpoint for creating a product (extends the same baseClient)
-const createProduct = baseClient
- .def_method('POST')
- .def_url('https://api.my-service.com/products')
- // ... add body definition
- .build()
-```
-
-### Type-Safe Validation
-
-`metal-fetch` helps you eliminate runtime errors by enforcing compile-time checks. You cannot pass a `body` or `search` object to `.query()` unless you have first defined a validator for it.
-
-#### Body Validation
-
-Use `.def_body()` with your favorite validation library.
-
-```typescript
-const ProductRequest = z.object({
- name: z.string(),
- price: z.number().positive(),
-})
-
-const createProduct = apiClient
- .def_method('POST')
- .def_url(`${BASE_URL}/products`)
- .def_body(ProductRequest.parse) // Pass the validation function
- .build()
-
-// This is now type-safe!
-await createProduct.query({
- body: {
- name: 'Laptop',
- price: 1200,
- },
-})
-
-// This would cause a TypeScript error, as `body` is not defined
-// await getProducts.query({ body: { name: 'Laptop' } });
-```
-
-#### Response Validation
-
-Similarly, use `.def_response()` to parse and validate the data you receive. When combined with `.def_json()`, you get a `json()` helper function to safely parse the body.
-
-```typescript
-const ProductResponse = z.object({ id: z.string() /* ... */ })
-
-const getProduct = apiClient
- .def_method('GET')
- .def_url(`${BASE_URL}/products/$id`)
- .def_response(async ({ response, json }) => {
- // You can inspect the raw response first
- if (!response.ok) {
- throw new Error(`Request failed with status ${response.status}`)
- }
- // Then parse the body
- return ProductResponse.parse(await json())
- })
- .build()
-```
-
-### Path and Search Parameters
-
-- **Path Parameters:** Define dynamic segments in your URL with a `$` prefix (e.g., `/$id`). Pass the corresponding values in the `path` object in `.query()`.
-- **Search Parameters:** Use `.def_searchparams()` to define a validator for query strings. Pass the data in the `search` object in `.query()`.
-
-```typescript
-const ProductSearch = z.object({
- category: z.string(),
- limit: z.number().optional(),
-})
-
-const findProducts = apiClient
- .def_method('GET')
- .def_url(`${BASE_URL}/products`)
- .def_searchparams(ProductSearch.parse)
- .build()
-
-await findProducts.query({
- search: {
- category: 'electronics',
- limit: 10,
- },
-})
-// Resulting URL: https://api.example.com/products?category=electronics&limit=10
-```
-
-## Declarative API Routers
-
-While the `FetchBuilder` is perfect for defining individual endpoints, `metal-fetch` also provides a powerful `router` function to define your entire API surface in a single, organized, and type-safe object. This creates a fully-typed client SDK, eliminating guesswork and ensuring your frontend and backend stay in sync.
-
-The router takes a `baseUrl` and a nested structure of `FetchBuilder` instances. It automatically assigns the URL and HTTP method to each builder based on its position in the tree.
-
-### Example: Defining a Router
-
-```typescript
-import { f, type GetRouterConfig } from '@metal-box/fetch'
-import { z } from 'zod'
-
-const BASE_URL = 'https://api.example.com'
-
-// Define your validators
-const UserResponse = z.object({ id: z.string(), name: z.string() })
-const UserListResponse = z.array(UserResponse)
-const UserRequest = z.object({ name: z.string() })
-
-// Define the entire API structure
-export const api = f.router(BASE_URL, {
- users: {
- GET: f
- .builder()
- .def_json()
- .def_response(async ({ json }) =>
- UserListResponse.parse(await json())
- ),
-
- POST: f
- .builder()
- .def_json()
- .def_body(UserRequest.parse)
- .def_response(async ({ json }) => UserResponse.parse(await json())),
-
- // Dynamic path: /users/:id
- $id: {
- GET: f
- .builder()
- .def_json()
- .def_response(async ({ json }) =>
- UserResponse.parse(await json())
- ),
- },
- },
-})
-
-// The `api` object is now a fully-typed client
-async function main() {
- // GET /users
- const users = await api.users.GET.query()
-
- // POST /users
- const newUser = await api.users.POST.query({
- body: { name: 'Jane Doe' },
- })
-
- // GET /users/123
- const user = await api.users.$id.GET.query({
- path: { id: '123' },
- })
-}
-```
-
-### End-to-End Type Safety with `GetRouterConfig`
-
-The most powerful feature of the router is its ability to infer types for your entire API. The `GetRouterConfig` utility creates a type definition that maps directly to your router structure.
-
-```typescript
-// 1. Export the inferred type from your API definition file
-export type ApiConfig = GetRouterConfig
-
-// 2. In another file, you can import and use this type
-import { type ApiConfig } from './api'
-
-// You can now extract the exact response type for any endpoint
-type GetUsersResponse = ApiConfig['users']['GET']['response']
-// `GetUsersResponse` is now:
-// Array<{ id: string; name: string; }>
-
-// Or the body type for a POST request
-type CreateUserBody = ApiConfig['users']['POST']['body']
-// `CreateUserBody` is now:
-// { name: string; }
-```
-
-This creates a single source of truth for your API's contract, providing autocomplete and compile-time errors if the frontend usage ever diverges from the backend definition.
-
-## Advanced Usage
-
-### Middleware
-
-Middleware allows you to implement cross-cutting concerns. It follows the standard `(request, next) => Promise` pattern.
-
-```typescript
-// An authentication middleware that adds a bearer token
-const authMiddleware: f.MiddlewareFunction = async (request, next) => {
- const token = localStorage.getItem('auth_token')
- if (token) {
- request.headers.set('Authorization', `Bearer ${token}`)
- }
- // Continue to the next middleware or the actual fetch call
- return next(request)
-}
-
-const secureApiClient = apiClient.def_middleware(authMiddleware)
-
-// All endpoints created from `secureApiClient` will now have the auth header
-const getMyProfile = secureApiClient
- .def_method('GET')
- .def_url(`${BASE_URL}/me`)
- .build()
-```
-
-### Error Handling
-
-`metal-fetch` provides three distinct handlers for processing outcomes:
-
-- `def_fetch_err_handler`: Handles `FetchResponseError`, which occurs when the server responds with a non-2xx status code (e.g., 404, 500). You get access to the typed error and status code.
-- `def_unknown_err_handler`: Catches any other error, such as network failures, DNS issues, or CORS errors.
-- `def_final_handler`: A `finally` block that executes after every request, regardless of success or failure. Useful for cleanup logic.
-
-```typescript
-const robustClient = apiClient
- .def_fetch_err_handler(({ error, status }) => {
- console.error(
- `[API Error] Status: ${status}, Message: ${error.statusMessage}`
- )
- })
- .def_unknown_err_handler(({ error }) => {
- console.error('[Network Error]', error)
- })
- .def_final_handler(() => {
- console.log('Request finished.')
- })
-```
-
-### Aborting Requests
-
-You can easily abort requests using either a timeout or an `AbortSignal`.
-
-```typescript
-const controller = new AbortController()
-
-// Abort after 2 seconds
-setTimeout(() => controller.abort(), 2000)
-
-try {
- await getUser.query({
- path: { id: '123' },
- // Option 1: Timeout in milliseconds
- timeout: 5000,
- // Option 2: Provide one or more AbortSignals
- abortSignal: controller.signal,
- })
-} catch (error) {
- // Catches the abort error
- console.log(error.name) // 'TimeoutError' or 'AbortError'
-}
-```
+Visit [fetch](https://freestyle-fetch.vercel.app/en) to read the documentation.
## Contributing
-Contributions are welcome! Please see the [CONTRIBUTING.md](./CONTRIBUTING.md) file for guidelines.
+Please read [contributing guide](./CONTRIBUTING.md).
## License
-This project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details.
+Licensed under the [MIT](./LICENSE) License.
\ No newline at end of file
diff --git a/SECURITY.md b/SECURITY.md
deleted file mode 100644
index 034e848..0000000
--- a/SECURITY.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Security Policy
-
-## Supported Versions
-
-Use this section to tell people about which versions of your project are
-currently being supported with security updates.
-
-| Version | Supported |
-| ------- | ------------------ |
-| 5.1.x | :white_check_mark: |
-| 5.0.x | :x: |
-| 4.0.x | :white_check_mark: |
-| < 4.0 | :x: |
-
-## Reporting a Vulnerability
-
-Use this section to tell people how to report a vulnerability.
-
-Tell them where to go, how often they can expect to get an update on a
-reported vulnerability, what to expect if the vulnerability is accepted or
-declined, etc.
diff --git a/assets/commit.md b/assets/commit.md
new file mode 100644
index 0000000..886d74b
--- /dev/null
+++ b/assets/commit.md
@@ -0,0 +1,75 @@
+## Commit Convention ๐๏ธ
+
+### **Overview**
+
+Primary purpose is to create an **explicit and structured commit history**, which is essential for writing automated tools, generating release notes, and, critically, aligning directly with **Semantic Versioning (SemVer)** principles.
+
+By adhering to this convention, your commit history clearly communicates the nature, scope, and impact of every change.
+
+---
+
+### **Commit Message Structure (The Formula)**
+
+Every conventional commit **MUST** follow a clear, three-part structure: a header, an optional body, and optional footers.
+
+$$\text{}[\text{optional scope}]\text{!}:\text{}$$
+$$[\text{optional body}]$$
+$$[\text{optional footer(s)}]$$
+
+#### **Key Structural Elements**
+
+| Element | Rule | Description |
+| :-------------- | :----------- | :------------------------------------------------------------------------------------------------------------ |
+| **type** | **REQUIRED** | A noun defining the nature of the change (e.g., `feat`, `fix`). |
+| **scope** | _OPTIONAL_ | A noun in parentheses providing context for a section of the codebase (e.g., `feat(parser)`). |
+| **\!** | _OPTIONAL_ | Placed immediately before the colon to **flag a Breaking Change** in the subject line. |
+| **description** | **REQUIRED** | A concise, short summary of the code change, max 50 characters recommended. |
+| **body** | _OPTIONAL_ | A longer, free-form, and detailed explanation of the change, separated from the header by **one blank line**. |
+| **footer(s)** | _OPTIONAL_ | Used for metadata like issue references (`Closes #123`) and, most importantly, **BREAKING CHANGE** details. |
+
+---
+
+### **Commit Prefix Types & SemVer Impact**
+
+While only `feat` and `fix` directly correlate with SemVer bumps, using the full set of recommended types provides comprehensive documentation.
+
+| Type | SemVer Implication | Description | Example |
+| :------------------ | :----------------- | :------------------------------------------------------------------------------------- | :-------------------------------------------------------- |
+| **feat** | **MINOR** | A new feature or capability. | `feat(api): add support for pagination` |
+| **fix** | **PATCH** | A bug fix. | `fix(login): correct username validation error` |
+| **BREAKING CHANGE** | **MAJOR** | Indicates an incompatible API change (via `!` or `BREAKING CHANGE:` footer). | `feat!: remove legacy config option` |
+| **docs** | None | Changes to documentation files (e.g., README, inline comments). | `docs: update installation instructions` |
+| **style** | None | Changes that do not affect code logic (whitespace, formatting). | `style: reformat code with prettier` |
+| **refactor** | None | A code change that neither fixes a bug nor adds a feature (restructuring). | `refactor: extract utility functions` |
+| **perf** | None | A code change that improves performance. | `perf(query): optimize DB query speed` |
+| **test** | None | Adding missing tests or correcting existing tests. | `test(auth): add unit tests for token validation` |
+| **build** | None | Changes that affect the build system or external dependencies (e.g., npm, Dockerfile). | `build: update webpack configuration` |
+| **ci** | None | Changes to CI configuration files and scripts. | `ci: configure Jenkins pipeline` |
+| **chore** | None | Other changes that don't modify source or test files (e.g., updating `.gitignore`). | `chore: reorganize folder structure` |
+| **revert** | Tooling Dependent | Reverts a previous commit. | `revert: let us never again speak of the noodle incident` |
+
+---
+
+### **Breaking Change Rules (Major Bump)**
+
+A breaking change **MUST** be explicitly and unambiguously noted in a Conventional Commit to justify a **MAJOR** SemVer version bump.
+
+You have two primary ways to signal a breaking change:
+
+1. **Via the Prefix Indicator (`!`)**
+
+ - The `!` **MUST** be placed immediately before the colon (`:`) in the header.
+ - _Example:_ `feat(api)!: remove user registration endpoint`
+
+2. **Via the Footer**
+
+ - The footer **MUST** contain the uppercase text `BREAKING CHANGE:`, followed by a detailed description of the breaking change.
+ - _Example:_
+
+ ```
+ feat: upgrade Node version
+
+ BREAKING CHANGE: use JavaScript features not available in Node 6.
+ ```
+
+> **Note:** If the `!` is used in the prefix, the `BREAKING CHANGE:` footer **MAY** be omitted, but the commit body **SHALL** be used to describe the nature and migration path of the breaking change.
diff --git a/assets/fetch-banner.png b/assets/fetch-banner.png
new file mode 100644
index 0000000..04e4af9
Binary files /dev/null and b/assets/fetch-banner.png differ
diff --git a/assets/metal-fetch.png b/assets/metal-fetch.png
deleted file mode 100644
index e3651cf..0000000
Binary files a/assets/metal-fetch.png and /dev/null differ
diff --git a/biome.json b/biome.json
new file mode 100644
index 0000000..c223af0
--- /dev/null
+++ b/biome.json
@@ -0,0 +1,3 @@
+{
+ "extends": ["@freestylejs/config/biome"]
+}
diff --git a/eslint.config.mjs b/eslint.config.mjs
deleted file mode 100644
index f201332..0000000
--- a/eslint.config.mjs
+++ /dev/null
@@ -1,78 +0,0 @@
-// eslint.config.js
-'use strict'
-import typescriptEslintPlugin from '@typescript-eslint/eslint-plugin'
-import tsParser from '@typescript-eslint/parser'
-import importPlugin from 'eslint-plugin-import'
-import prettierPlugin from 'eslint-plugin-prettier'
-import globals from 'globals'
-
-export default [
- // Global ignore patterns
- {
- ignores: [
- '**/dist/**',
- '**/node_modules/**',
- '**/test/**',
- '**/*.js',
- 'site',
- 'examples/*',
- ],
- },
- // Configuration for TypeScript files
- {
- files: ['packages/**/*.ts'],
- languageOptions: {
- parser: tsParser,
- globals: {
- ...globals.browser,
- ...globals.node,
- },
- },
- plugins: {
- prettier: prettierPlugin,
- import: importPlugin,
- '@typescript-eslint': typescriptEslintPlugin,
- },
- rules: {
- // Prettier and TypeScript rules
- 'prettier/prettier': ['error', { endOfLine: 'auto' }],
- '@typescript-eslint/no-unused-vars': 'warn',
-
- // Custom rules
- eqeqeq: 'error',
- 'no-var': 'error',
- 'prefer-const': 'error',
- 'no-console': 'warn',
- 'import/order': [
- 'error',
- {
- alphabetize: { order: 'asc', caseInsensitive: true },
- groups: [
- 'builtin',
- 'external',
- 'internal',
- 'parent',
- 'sibling',
- 'index',
- 'object',
- ],
- 'newlines-between': 'never',
- pathGroupsExcludedImportTypes: ['builtin'],
- },
- ],
- 'sort-imports': [
- 'error',
- {
- ignoreDeclarationSort: true,
- },
- ],
- },
- settings: {
- 'import/resolver': {
- node: {
- extensions: ['.js', '.ts'],
- },
- },
- },
- },
-]
diff --git a/package.json b/package.json
index 6961773..a4066f8 100644
--- a/package.json
+++ b/package.json
@@ -1,69 +1,57 @@
{
- "name": "metal-fetch-root-repository",
+ "name": "freestyle-fetch-root",
"version": "1.0.0",
- "description": "Root repository of metal fetch",
+ "description": "Root repository of freestylejs fetch",
"private": false,
"author": "danpacho",
"license": "MIT",
"repository": {
"type": "git",
- "url": "https://github.com/metal-ts/fetch"
+ "url": "https://github.com/freestylejs/fetch"
},
"type": "module",
"scripts": {
- "dev": "turbo run dev",
- "build": "turbo run build && gzip -c ./packages/fetch/dist/index.mjs | wc -c",
- "bench": "pnpm --filter=\"benchmark\" start run",
+ "dev": "turbo run build && turbo run dev",
+ "build": "pnpm reset:dist && turbo run build --no-cache --force",
+ "build:fast": "pnpm reset:dist && turbo run build:fast",
"start": "turbo run start",
- "clean": "turbo run clean",
"test": "vitest --run",
"test:watch": "vitest --watch -u",
"test:coverage": "vitest run --coverage",
- "test:ci": "pnpm test:coverage && pnpm prettier && pnpm ts:typecheck && pnpm build",
- "ts:typecheck": "tsc --noEmit --allowImportingTsExtensions --skipLibCheck",
- "ts:performance": "rimraf ts-perf && tsc --noEmit --generateTrace ts-perf",
- "reset": "pnpm clean && pnpm -r --parallel exec rimraf node_modules && rimraf node_modules",
- "prepublish": "pnpm test:ci && pnpm bench",
- "prettier": "prettier 'packages/**/*.{ts,js,md}' --check",
- "prettier:fix": "prettier 'packages/**/*.{ts,js,md}' --write",
- "eslint": "eslint",
- "eslint:fix": "eslint --fix",
- "release": "pnpm build && changeset publish",
- "pre-commit": "lint-staged",
- "prepare": "husky install",
- "changeset": "changeset",
- "packages:publish": "changeset publish",
- "packages:version": "changeset version"
+ "test:ci": "pnpm build && pnpm check && pnpm test:coverage",
+ "ts:typecheck": "turbo run ts:typecheck",
+ "ts:perf": "rimraf ts-perf && tsc --noEmit --generateTrace ts-perf",
+ "lint": "biome lint --write",
+ "format": "biome format --write",
+ "check": "biome check --write",
+ "report": "biome check --reporter=summary",
+ "reset:dist": "pnpm -r --parallel exec rimraf dist .turbo",
+ "reset:modules": "pnpm -r --parallel exec rimraf node_modules && rimraf node_modules .turbo",
+ "reset": "pnpm reset:dist && pnpm reset:modules",
+ "pkg:init": "pnpm test:ci && changeset",
+ "pkg:version": "changeset version",
+ "pkg:publish": "changeset publish",
+ "pre-commit": "pnpm format"
},
+ "packageManager": "pnpm@10.20.0",
"devDependencies": {
- "@changesets/cli": "^2.27.11",
- "@typescript-eslint/eslint-plugin": "^8.20.0",
- "@typescript-eslint/parser": "^8.20.0",
- "@vitest/coverage-v8": "^3.0.0",
- "chalk": "^5.4.1",
- "eslint": "^9.18.0",
- "eslint-config-prettier": "^10.0.1",
- "eslint-config-turbo": "^2.3.3",
- "eslint-plugin-import": "^2.31.0",
- "eslint-plugin-prettier": "^5.2.2",
- "husky": "^9.1.7",
- "lint-staged": "^15.4.0",
- "msw": "^2.7.0",
- "prettier": "^3.4.2",
- "rimraf": "^6.0.1",
- "ts-expect": "^1.3.0",
- "tsup": "^8.3.5",
- "turbo": "^2.3.3",
- "typescript": "^5.7.3",
- "vite-tsconfig-paths": "^5.1.4",
- "vitest": "^3.0.0",
- "@metal-box/type": "^0.2.0"
+ "@biomejs/biome": "latest",
+ "@changesets/cli": "latest",
+ "@freestylejs/config": "latest",
+ "@types/node": "latest",
+ "@vitest/coverage-v8": "4.0.6",
+ "husky": "latest",
+ "lint-staged": "latest",
+ "msw": "^2.12.3",
+ "rimraf": "latest",
+ "tsup": "latest",
+ "turbo": "latest",
+ "typescript": "latest",
+ "vite": "latest",
+ "vite-tsconfig-paths": "latest",
+ "vitest": "latest"
},
"engines": {
"node": ">=20.0.0"
- },
- "gitmoji": {
- "capitalizeTitle": false
- },
- "packageManager": "pnpm@9.15.4"
+ }
}
diff --git a/packages/fetch/CHANGELOG.md b/packages/fetch/CHANGELOG.md
new file mode 100644
index 0000000..3538754
--- /dev/null
+++ b/packages/fetch/CHANGELOG.md
@@ -0,0 +1,7 @@
+# @freestylejs/fetch
+
+## 1.0.0
+
+### Major Changes
+
+- Major V1 release for fluent, type-safe fetch client using typescript.
diff --git a/packages/fetch/package.json b/packages/fetch/package.json
index 3a037d0..90e56ba 100644
--- a/packages/fetch/package.json
+++ b/packages/fetch/package.json
@@ -1,6 +1,6 @@
{
- "name": "@metal-box/fetch",
- "version": "0.1.0",
+ "name": "@freestylejs/fetch",
+ "version": "1.0.0",
"description": "Declarative fetcher using typescript",
"author": "danpacho",
"license": "MIT",
@@ -9,14 +9,36 @@
"publishConfig": {
"access": "public"
},
- "files": [
- "dist"
- ],
+ "files": ["dist"],
"main": "./dist/index.js",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
+ "exports": {
+ "./*": {
+ "import": {
+ "types": "./dist/*.d.ts",
+ "default": "./dist/*.js"
+ },
+ "require": {
+ "types": "./dist/*.d.cts",
+ "default": "./dist/*.cjs"
+ }
+ },
+ ".": {
+ "import": {
+ "types": "./dist/index.d.ts",
+ "default": "./dist/index.js"
+ },
+ "require": {
+ "types": "./dist/index.d.cts",
+ "default": "./dist/index.cjs"
+ }
+ }
+ },
"scripts": {
- "build": "tsup src/index.ts --format=cjs,esm --dts",
- "build:fast": "tsup src/index.ts --format=cjs,esm"
+ "build": "tsup",
+ "build:fast": "tsup --no-dts",
+ "dev": "pnpm build --sourcemap --watch",
+ "ts:typecheck": "tsc --noEmit --skipLibCheck"
}
}
diff --git a/packages/fetch/src/__tests__/__mocks__/client.ts b/packages/fetch/src/__tests__/__mocks__/client.ts
index 009e2de..a4be4cc 100644
--- a/packages/fetch/src/__tests__/__mocks__/client.ts
+++ b/packages/fetch/src/__tests__/__mocks__/client.ts
@@ -1,10 +1,10 @@
-import { MetalSchemaShape, t } from '@metal-box/type'
-import { type GetRouterConfig, f } from '../..'
+import { type ZodSchema, z } from 'zod'
+import { f, type GetRouterConfig } from '../..'
import { BASE_URL } from './constant'
import { Model } from './model'
-const ApiResponse = (data: DataSchema) =>
- t.object({
+const ApiResponse = (data: DataSchema) =>
+ z.object({
data,
})
@@ -16,7 +16,7 @@ export const api = f.router(BASE_URL, {
.def_json()
.def_default_referrer('about:client')
.def_response(async ({ json }) =>
- ApiResponse(t.union(t.string, t.undefined)).parse(
+ ApiResponse(z.union([z.string(), z.undefined()])).parse(
await json()
)
),
@@ -51,7 +51,7 @@ export const api = f.router(BASE_URL, {
.builder()
.def_json()
.def_default_referrer('about:client')
- .def_body(Model.bookRequest.parse)
+ .def_body(Model.book.parse)
.def_response(async ({ json }) =>
ApiResponse(Model.book).parse(await json())
),
diff --git a/packages/fetch/src/__tests__/__mocks__/model.ts b/packages/fetch/src/__tests__/__mocks__/model.ts
index f53cba2..b6f967c 100644
--- a/packages/fetch/src/__tests__/__mocks__/model.ts
+++ b/packages/fetch/src/__tests__/__mocks__/model.ts
@@ -1,40 +1,40 @@
-import { Infer, t } from '@metal-box/type'
+import { z } from 'zod'
-const Book = t.object({
- name: t.string,
- price: t.number,
- category: t.string,
+const Book = z.object({
+ name: z.string(),
+ price: z.number(),
+ category: z.string(),
// server data
- publish_date: t.string,
- uuid: t.string,
+ publish_date: z.string(),
+ uuid: z.string(),
})
-export type BookModel = Infer
+export type BookModel = z.Infer
-const BookRequest = t.object({
- name: t.string,
- price: t.number,
- category: t.string,
+const BookRequest = z.object({
+ name: z.string(),
+ price: z.number(),
+ category: z.string(),
})
-export type BookRequestModel = Infer
+export type BookRequestModel = z.Infer
-const BookList = t.array(Book)
-export type BookModelList = Infer
+const BookList = z.array(Book)
+export type BookModelList = z.Infer
-const BookQueryBody = t.object({
- name: t.string,
+const BookQueryBody = z.object({
+ name: z.string(),
})
-export type BookQueryBodyModel = Infer
+export type BookQueryBodyModel = z.Infer
-const Author = t.object({
- name: t.null.array,
+const Author = z.object({
+ name: z.array(z.null()),
books: BookList,
})
-export type AuthorModel = Infer
+export type AuthorModel = z.Infer
-const AuthorList = t.array(Author)
-export type AuthorListModel = Infer
+const AuthorList = z.array(Author)
+export type AuthorListModel = z.Infer
export const Model = {
// books
diff --git a/packages/fetch/src/__tests__/__mocks__/server.ts b/packages/fetch/src/__tests__/__mocks__/server.ts
index 1043500..7394eb4 100644
--- a/packages/fetch/src/__tests__/__mocks__/server.ts
+++ b/packages/fetch/src/__tests__/__mocks__/server.ts
@@ -1,6 +1,6 @@
import { HttpResponse, http } from 'msw'
import { BASE_URL } from './constant'
-import { type BookModel, BookRequestModel, Model } from './model'
+import { type BookModel, type BookRequestModel, Model } from './model'
type UUID = string
type DB_COLLECTION = Map
@@ -53,11 +53,13 @@ class BookDatabase {
}
// REST @PUT books/:id
- public updateBook(id: UUID, book: BookModel): BookModel {
+ public updateBook(id: UUID, book: BookModel): BookModel | undefined {
const originalBook = this.db.get(id)
+ if (!originalBook) return undefined
+
const updatedBook = { ...originalBook, ...book }
this.db.set(id, updatedBook)
- return book
+ return updatedBook
}
}
diff --git a/packages/fetch/src/__tests__/build.router.test.ts b/packages/fetch/src/__tests__/build.router.test.ts
index 6d87efe..f1c76bb 100644
--- a/packages/fetch/src/__tests__/build.router.test.ts
+++ b/packages/fetch/src/__tests__/build.router.test.ts
@@ -1,10 +1,10 @@
import { setupServer } from 'msw/node'
import { afterAll, beforeAll, describe, expect, it } from 'vitest'
import { api } from './__mocks__/client'
-import {
- type BookModel,
- type BookModelList,
- type BookRequestModel,
+import type {
+ BookModel,
+ BookModelList,
+ BookRequestModel,
} from './__mocks__/model'
import { bookServer } from './__mocks__/server'
import { label } from './utils/test.label'
diff --git a/packages/fetch/src/__tests__/builder.test.ts b/packages/fetch/src/__tests__/builder.test.ts
index 20065e6..8f15ac0 100644
--- a/packages/fetch/src/__tests__/builder.test.ts
+++ b/packages/fetch/src/__tests__/builder.test.ts
@@ -1,5 +1,5 @@
-import { t } from '@metal-box/type'
import { describe, expect, it, vi } from 'vitest'
+import { z } from 'zod'
import { f } from '..'
import { FetchBuilder } from '../core/fetcher'
import { FetchUnit } from '../core/fetcher/unit'
@@ -32,7 +32,7 @@ describe('FetchBuilder', () => {
})
it('should define a body validator', () => {
- const bodySchema = t.object({ name: t.string })
+ const bodySchema = z.object({ name: z.string() })
const b = f.builder().def_body(bodySchema.parse)
const testBody = { name: 'test' }
expect(b.bodyValidator(testBody)).toEqual(testBody)
diff --git a/packages/fetch/src/__tests__/procedure.test.ts b/packages/fetch/src/__tests__/procedure.test.ts
index 455964e..a497a05 100644
--- a/packages/fetch/src/__tests__/procedure.test.ts
+++ b/packages/fetch/src/__tests__/procedure.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, it } from 'vitest'
-import { Procedure, ProcedureSet } from '../utils/procedure'
+import { type Procedure, ProcedureSet } from '../utils/procedure'
import { label } from './utils/test.label'
describe(label.unit('Procedure'), () => {
diff --git a/packages/fetch/src/__tests__/unit.test.ts b/packages/fetch/src/__tests__/unit.test.ts
index a9e772e..7726653 100644
--- a/packages/fetch/src/__tests__/unit.test.ts
+++ b/packages/fetch/src/__tests__/unit.test.ts
@@ -1,8 +1,8 @@
-import { Infer, t } from '@metal-box/type'
import { HttpResponse, http } from 'msw'
import { setupServer } from 'msw/node'
-import { TypeEqual, expectType } from 'ts-expect'
+import { expectType, type TypeEqual } from 'ts-expect'
import { afterAll, afterEach, beforeAll, describe, expect, it } from 'vitest'
+import { z } from 'zod'
import { f } from '..'
import { FetchPathParamsError, FetchResponseError } from '../core/error'
import { FetchUnit, type InferFetchUnit } from '../core/fetcher/unit'
@@ -236,10 +236,10 @@ describe('FetchUnit', () => {
it(label.case('should DEFINE search params shape'), () => {
const fetchUnit = f.builder()
- const SearchParams = t
+ const SearchParams = z
.object({
- name: t.string,
- category: t.string,
+ name: z.string(),
+ category: z.string(),
})
.transform((e) => ({
name: e.name,
@@ -252,7 +252,7 @@ describe('FetchUnit', () => {
type InjectedFetchUnit = FetchUnit<
string,
unknown,
- Infer,
+ z.Infer,
unknown,
unknown,
{
@@ -266,10 +266,10 @@ describe('FetchUnit', () => {
it(label.case('should DEFINE body shape'), () => {
const fetchUnit = f.builder()
- const BookRequest = t.object({
- name: t.string,
- category: t.string,
- price: t.number,
+ const BookRequest = z.object({
+ name: z.string(),
+ category: z.string(),
+ price: z.number(),
})
const result = fetchUnit.def_body(BookRequest.parse).build()
@@ -278,7 +278,7 @@ describe('FetchUnit', () => {
string,
unknown,
unknown,
- Infer,
+ z.Infer,
unknown,
{
isJsonMode: false
@@ -290,19 +290,19 @@ describe('FetchUnit', () => {
})
it(label.case('should DEFINE search params'), async () => {
- const SearchParams = t.object({
- name: t.string,
- price: t.number,
+ const SearchParams = z.object({
+ name: z.string(),
+ price: z.number(),
})
- const BookResponse = t
+ const BookResponse = z
.object({
- data: t.object({
- name: t.string,
- price: t.string,
- id: t.string,
+ data: z.object({
+ name: z.string(),
+ price: z.string(),
+ id: z.string(),
}),
- status: t.literal('success'),
+ status: z.literal('success'),
})
.transform((e) => ({
...e,
@@ -352,9 +352,9 @@ describe('FetchUnit', () => {
() => {
const fetchUnit = f.builder().def_json()
- const Product = t.object({
- name: t.string,
- price: t.number,
+ const Product = z.object({
+ name: z.string(),
+ price: z.number(),
})
const result = fetchUnit
.def_response(({ json }) => Product.parse(json))
@@ -365,7 +365,7 @@ describe('FetchUnit', () => {
unknown,
unknown,
unknown,
- Infer,
+ z.Infer,
{
isJsonMode: true
isSafeMode: false
@@ -382,9 +382,9 @@ describe('FetchUnit', () => {
async () => {
const fetchUnit = f.builder().def_json()
- const Product = t.object({
- name: t.string,
- price: t.number,
+ const Product = z.object({
+ name: z.string(),
+ price: z.number(),
})
const result = fetchUnit
.def_response(async ({ json }) => {
@@ -399,7 +399,7 @@ describe('FetchUnit', () => {
unknown,
unknown,
unknown,
- Infer,
+ z.Infer,
{
isJsonMode: true
isSafeMode: false
@@ -412,15 +412,15 @@ describe('FetchUnit', () => {
)
it(label.case('should QUERY json with [strict mode]'), async () => {
- const Body = t.object({
- name: t.string,
- category: t.string,
- price: t.number,
+ const Body = z.object({
+ name: z.string(),
+ category: z.string(),
+ price: z.number(),
})
- const ApiResponse = t.object({
+ const ApiResponse = z.object({
data: Body,
- status: t.union(t.literal('success'), t.literal('error')),
- 'message?': t.string,
+ status: z.union([z.literal('success'), z.literal('error')]),
+ message: z.string().optional(),
})
const postUnit = f
.builder()
@@ -437,8 +437,8 @@ describe('FetchUnit', () => {
'POST',
unknown,
unknown,
- Infer,
- Infer,
+ z.Infer,
+ z.Infer,
{
isJsonMode: true
isSafeMode: false
@@ -452,8 +452,8 @@ describe('FetchUnit', () => {
{
method: 'POST'
url: 'https://unit-api/v2/books'
- body: Infer
- response: Infer
+ body: z.Infer
+ response: z.Infer
mode: {
isJson: true
isSafeFetch: false
@@ -477,13 +477,10 @@ describe('FetchUnit', () => {
})
it(label.case('should QUERY formData with [strict mode]'), async () => {
- const BlobShape = t.custom<'Blob', Blob>(
- 'Blob',
- (e) => e instanceof Blob
- )
+ const BlobShape = z.custom((e) => e instanceof Blob)
const toJson = async (e: FormData) => {
- const title = t.string.parse(e.get('name'))
+ const title = z.string().parse(e.get('name'))
const file = e.get('file')
const text = await BlobShape.parse(file).text()
return {
@@ -492,11 +489,8 @@ describe('FetchUnit', () => {
}
}
- const FormDataShape = t
- .custom<
- 'FormData',
- FormData
- >('FormData', (e) => e instanceof FormData)
+ const FormDataShape = z
+ .custom((e) => e instanceof FormData)
.transform(toJson)
const fetchUnit = f
@@ -507,7 +501,7 @@ describe('FetchUnit', () => {
.def_url(`${BASE_URL}/books/images`)
.def_body(BlobShape.parse)
.def_response(async ({ response }) =>
- FormDataShape.parse(await response.formData())
+ FormDataShape.parseAsync(await response.formData())
)
.build()
diff --git a/packages/fetch/src/core/fetcher/builder.ts b/packages/fetch/src/core/fetcher/builder.ts
index 4e7bdab..d2520b1 100644
--- a/packages/fetch/src/core/fetcher/builder.ts
+++ b/packages/fetch/src/core/fetcher/builder.ts
@@ -1,13 +1,13 @@
-import { Middleware, MiddlewareFunction } from '../../utils/middleware'
-import { Procedure, ProcedureSet } from '../../utils/procedure'
-import type { ConcreteBoolean, JSON } from '../../utils/types'
+import { Middleware, type MiddlewareFunction } from '../../utils/middleware'
+import { type Procedure, ProcedureSet } from '../../utils/procedure'
+import type { ConcreteBoolean, Json } from '../../utils/types'
import {
- FetchErrorCode,
+ type FetchErrorCode,
FetchPathParamsError,
- FetchResponseError,
+ type FetchResponseError,
FetchSearchParamsError,
} from '../error'
-import {
+import type {
DefaultFetchModeOptions,
FetchMethod,
FetchMethodString,
@@ -452,7 +452,7 @@ export class FetchBuilder<
* const fetchUnit = f.builder().def_body(BodyZod.parse)
*
* // Example using metal-box/type
- * import { t } from "@metal-box/type"
+ * import { t } from "@freestylejs/schema"
*
* const BodyMetal = t.object({ name: t.string })
* const fetchUnit2 = f.builder().def_body(BodyMetal.parse)
@@ -486,7 +486,7 @@ export class FetchBuilder<
responseArgument: $ModeOptions['isJsonMode'] extends true
? {
response: Response
- json: () => Promise
+ json: () => Promise
}
: {
response: Response
@@ -501,7 +501,7 @@ export class FetchBuilder<
responseArgument: $ModeOptions['isJsonMode'] extends true
? {
response: Response
- json: () => Promise
+ json: () => Promise
}
: {
response: Response
diff --git a/packages/fetch/src/core/fetcher/core.type.ts b/packages/fetch/src/core/fetcher/core.type.ts
index 128700e..49f8938 100644
--- a/packages/fetch/src/core/fetcher/core.type.ts
+++ b/packages/fetch/src/core/fetcher/core.type.ts
@@ -20,7 +20,7 @@ export type FetchMethod =
export type FetchHeader = BaseFetchOption['headers'] & {
[key in FetchHeaderKeyString]?: string
}
-export type FetchOption = Omit & {
+export type FetchOption = Omit & {
headers: FetchHeader
}
diff --git a/packages/fetch/src/core/fetcher/fetch.option.ts b/packages/fetch/src/core/fetcher/fetch.option.ts
index b063ef3..262f632 100644
--- a/packages/fetch/src/core/fetcher/fetch.option.ts
+++ b/packages/fetch/src/core/fetcher/fetch.option.ts
@@ -5,6 +5,20 @@ import type {
FetchUrl,
} from './core.type'
+export interface FetchCommonConfiguration {
+ baseUrl: string
+ cache?: FetchOption['cache']
+ mode?: FetchOption['mode']
+ credentials?: FetchOption['credentials']
+ redirect?: FetchOption['redirect']
+ referrer?: FetchOption['referrer']
+ referrerPolicy?: FetchOption['referrerPolicy']
+ integrity?: FetchOption['integrity']
+ keepalive?: FetchOption['keepalive']
+ window?: FetchOption['window']
+ priority?: FetchOption['priority']
+}
+
export class FetchOptionStore {
public get options(): FetchOption {
return {
diff --git a/packages/fetch/src/core/fetcher/index.ts b/packages/fetch/src/core/fetcher/index.ts
index 2737164..0c2a962 100644
--- a/packages/fetch/src/core/fetcher/index.ts
+++ b/packages/fetch/src/core/fetcher/index.ts
@@ -1,2 +1,2 @@
-export * from './unit'
export * from './builder'
+export * from './unit'
diff --git a/packages/fetch/src/core/fetcher/unit.ts b/packages/fetch/src/core/fetcher/unit.ts
index e551fa6..eef5944 100644
--- a/packages/fetch/src/core/fetcher/unit.ts
+++ b/packages/fetch/src/core/fetcher/unit.ts
@@ -1,4 +1,4 @@
-import type { ConcreteBoolean, JSON, OmitUnknown } from '../../utils/types'
+import type { ConcreteBoolean, Json, OmitUnknown } from '../../utils/types'
import { type FetchErrorCode, FetchResponseError } from '../error'
import type { FetchBuilder } from './builder'
import type {
@@ -375,7 +375,7 @@ export class FetchUnit<
(this.$builder.isJsonMode
? {
response,
- json: () => response.json() as Promise,
+ json: () => response.json() as Promise,
}
: { response }) as any
)
diff --git a/packages/fetch/src/core/router.ts b/packages/fetch/src/core/router.ts
index ff0773b..24382b6 100644
--- a/packages/fetch/src/core/router.ts
+++ b/packages/fetch/src/core/router.ts
@@ -1,10 +1,11 @@
-import { FetchUnit, FetchUnitShape, InferFetchUnit } from './fetcher'
+import type { FetchUnit, FetchUnitShape, InferFetchUnit } from './fetcher'
import {
type DefaultFetchBuilderShape,
FetchBuilder,
type FetchBuilderShape,
} from './fetcher/builder'
import type { FetchMethod, Param } from './fetcher/core.type'
+import type { FetchCommonConfiguration } from './fetcher/fetch.option'
type Structure =
| {
@@ -17,26 +18,27 @@ type BuilderStructure = Structure
type UnitStructure = Structure
class Router<
- const RouterBaseUrl extends string,
const RouterBuilderStructure extends BuilderStructure,
+ const CommonConfig extends FetchCommonConfiguration,
> {
public constructor(
- routerBaseUrl: RouterBaseUrl,
- routerStructure: RouterBuilderStructure
+ routerStructure: RouterBuilderStructure,
+ commonConfig: CommonConfig
) {
this._buildedRouterStructure = this.buildRouterStructure(
routerStructure,
- routerBaseUrl
+ commonConfig,
+ commonConfig.baseUrl
)
}
private _buildedRouterStructure: BuildRouterUrlFromStructure<
RouterBuilderStructure,
- RouterBaseUrl
+ CommonConfig['baseUrl']
>
public get routerStructure(): BuildRouterUrlFromStructure<
RouterBuilderStructure,
- RouterBaseUrl
+ CommonConfig['baseUrl']
> {
return this._buildedRouterStructure
}
@@ -73,6 +75,7 @@ class Router<
private buildRouterStructure>(
structure: BuilderStructure,
+ commonConfig: FetchCommonConfiguration,
baseUrl: string = ''
): T {
const result = {} as Record
@@ -91,11 +94,47 @@ class Router<
const newBuilder = value
.def_url(Router.getUrlPath(baseUrl))
.def_method(key)
- // 2. Build
+
+ // 2. Set common config
+ if (commonConfig.cache) {
+ newBuilder.def_default_cache(commonConfig.cache)
+ }
+ if (commonConfig.credentials) {
+ newBuilder.def_default_credentials(commonConfig.credentials)
+ }
+ if (commonConfig.integrity) {
+ newBuilder.def_default_integrity(commonConfig.integrity)
+ }
+ if (commonConfig.keepalive) {
+ newBuilder.def_default_keepalive(commonConfig.keepalive)
+ }
+ if (commonConfig.mode) {
+ newBuilder.def_default_mode(commonConfig.mode)
+ }
+ if (commonConfig.priority) {
+ newBuilder.def_default_priority(commonConfig.priority)
+ }
+ if (commonConfig.redirect) {
+ newBuilder.def_default_redirect(commonConfig.redirect)
+ }
+ if (commonConfig.referrer) {
+ newBuilder.def_default_referrer(commonConfig.referrer)
+ }
+ if (commonConfig.referrerPolicy) {
+ newBuilder.def_default_referrer_policy(
+ commonConfig.referrerPolicy
+ )
+ }
+ if (commonConfig.window) {
+ newBuilder.def_default_window(commonConfig.window)
+ }
+
+ // 3. Build
result[key] = newBuilder.build()
} else if (Router.isRecord(value)) {
result[key] = this.buildRouterStructure(
value,
+ commonConfig,
Router.getUrlPath(baseUrl, key as string)
)
} else {
@@ -109,91 +148,32 @@ class Router<
}
}
-//TODO: Add transformer for router
-/**
- * @example
- * ```ts
- *
- * const ex =
- * {
- * api: {
- * "auth-login": {
- * GET: f.unit()
- * }
- * }
- * }
- *
- * const transformed =
- * {
- * api: {
- * auth: { // auth-login -> auth, we need to change that for convenience!
- * GET: f.unit()
- * }
- * }
- * ```
- routerTransformer?: <
- TransformedRouterStructure extends RouterBuilderStructure,
- >(
- base: RouterBuilderStructure
- ) => TransformedRouterStructure
- */
-
-/**
- * @description Define RESTful API structure with `router`
- * @param baseUrl Represents the base_url of the api
- * @param router RESTful API structure
- * @example
- * ```md
- * 1. BASE_URL : 'https://api/v1/example.com'
- *
- * 2. REST_API_STRUCTURE
- * โบ auth : 'BASE_URL/auth'
- * โบ login : 'BASE_URL/auth/login'
- * โบ books : 'BASE_URL/books'
- * โบ book : 'BASE_URL/books/:id'
- *
- * 3. DEFINE_ROUTER
- * ```
- *
- * ```ts
- * import * as f from "@metal-box/fetch"
- *
- * export const api = f.router(BASE_URL, {
- * auth: {
- * login: {
- * GET: f.builder()
- * },
- * },
- * books: {
- * GET: f.builder()
- * POST: f.builder()
- * // Dynamic path parameter via $ symbol
- * $id: {
- * GET: f.builder()
- * PUT: f.builder()
- * DELETE: f.builder()
- * },
- * },
- * })
- * ```
- *
- * ```md
- *
- * 4. GET_ROUTER_CONFIG
- * ```
- * ```ts
- * export type Api = f.GetRouterConfig
- *
- * ```
- */
-export const router = <
+export function router<
const RouterBaseUrl extends string,
const RouterBuilderStructure extends BuilderStructure,
>(
baseUrl: RouterBaseUrl,
router: RouterBuilderStructure
-): BuildRouterUrlFromStructure => {
- const baseRouter = new Router(baseUrl, router).routerStructure
+): BuildRouterUrlFromStructure
+export function router<
+ const CommonConfig extends FetchCommonConfiguration,
+ const RouterBuilderStructure extends BuilderStructure,
+>(
+ config: CommonConfig,
+ router: RouterBuilderStructure
+): BuildRouterUrlFromStructure
+export function router<
+ const ConfigOrBaseUrl extends string | FetchCommonConfiguration,
+ const RouterBuilderStructure extends BuilderStructure,
+>(configOrBaseUrl: ConfigOrBaseUrl, routerStructure: RouterBuilderStructure) {
+ if (typeof configOrBaseUrl === 'string') {
+ const baseRouter = new Router(routerStructure, {
+ baseUrl: configOrBaseUrl,
+ }).routerStructure
+ return baseRouter
+ }
+ const baseRouter = new Router(routerStructure, configOrBaseUrl)
+ .routerStructure
return baseRouter
}
diff --git a/packages/fetch/src/index.ts b/packages/fetch/src/index.ts
index fb53e6b..ad2654b 100644
--- a/packages/fetch/src/index.ts
+++ b/packages/fetch/src/index.ts
@@ -1,5 +1,5 @@
-import { FetchBuilder, type FetchUnitShape, builder } from './core/fetcher'
-import { GetRouterConfig, router } from './core/router'
+import { builder, type FetchBuilder, type FetchUnitShape } from './core/fetcher'
+import { type GetRouterConfig, router } from './core/router'
import { Middleware } from './utils/middleware'
/**
diff --git a/packages/fetch/src/utils/procedure.ts b/packages/fetch/src/utils/procedure.ts
index bddac0c..b007ad5 100644
--- a/packages/fetch/src/utils/procedure.ts
+++ b/packages/fetch/src/utils/procedure.ts
@@ -8,7 +8,6 @@ export class ProcedureSet {
new Set()
private procedureList: Array> = []
- public constructor() {}
public get procedures(): ReadonlyArray> {
return Array.from(this.registeredProcedure)
diff --git a/packages/fetch/src/utils/types/index.ts b/packages/fetch/src/utils/types/index.ts
index fe0d389..4faf741 100644
--- a/packages/fetch/src/utils/types/index.ts
+++ b/packages/fetch/src/utils/types/index.ts
@@ -1,9 +1,9 @@
export type IncludeString = string & {}
-export type JSON_Supported = string | number | boolean | null
-export type JSON =
- | Record
- | Array
+export type JsonPrimitives = string | number | boolean | null
+export type Json =
+ | Record
+ | Array
| string
| number
| boolean
diff --git a/packages/fetch/tsup.config.ts b/packages/fetch/tsup.config.ts
new file mode 100644
index 0000000..e1c3928
--- /dev/null
+++ b/packages/fetch/tsup.config.ts
@@ -0,0 +1,15 @@
+import { defineConfig } from 'tsup'
+
+export default defineConfig((options) => ({
+ entry: {
+ index: 'src/index.ts',
+ },
+ watch: options.watch ? ['src/**/*'] : false,
+ clean: false,
+ dts: true,
+ outDir: 'dist',
+ // noExternal: [],
+ target: 'esnext',
+ format: ['cjs', 'esm'],
+ sourcemap: false,
+}))
diff --git a/packages/fetch_monitor/readme.md b/packages/fetch_monitor/readme.md
deleted file mode 100644
index b280ff9..0000000
--- a/packages/fetch_monitor/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# Fetch monitoring tool
diff --git a/packages/generator/readme.md b/packages/generator/readme.md
deleted file mode 100644
index 4ca0546..0000000
--- a/packages/generator/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Generator
-
-1. script that generates api router via `JSON schema`
- 1. Schema builder script: https://github.com/StefanTerdell/json-schema-to-zod?tab=readme-ov-file#readme
-2. API Structure query script
- 1. Input: `query url`
- 2. Returns:
- 1. api endpoint structure
- 1. type: `GET` | `POST` | `PUT` | `DELETE`
- 2. path: `string`
- 3. query_schema: `JSON schema`
- 4. response_schema: `JSON schema`
- 5. status_code: `number`
-3. Build router automatically
- 1. Input: `api endpoint structure`
- 2. Output: `router`
diff --git a/packages/openapi_generator/CHANGELOG.md b/packages/openapi_generator/CHANGELOG.md
new file mode 100644
index 0000000..2323ff0
--- /dev/null
+++ b/packages/openapi_generator/CHANGELOG.md
@@ -0,0 +1,12 @@
+# create-freestyle-fetch
+
+## 1.0.0
+
+### Major Changes
+
+- Major V1 release for fluent, type-safe fetch client using typescript.
+
+### Patch Changes
+
+- Updated dependencies
+ - @freestylejs/fetch@1.0.0
diff --git a/packages/openapi_generator/package.json b/packages/openapi_generator/package.json
new file mode 100644
index 0000000..2afd967
--- /dev/null
+++ b/packages/openapi_generator/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "create-freestyle-fetch",
+ "version": "1.0.0",
+ "description": "Generate freestylejs fetch client from OpenAPI spec",
+ "author": "danpacho",
+ "license": "MIT",
+ "keywords": ["openapi", "generator", "fetch"],
+ "publishConfig": {
+ "access": "public"
+ },
+ "bin": {
+ "create-freestyle-fetch": "dist/index.js"
+ },
+ "scripts": {
+ "build": "tsup",
+ "build:fast": "tsup --no-dts",
+ "dev": "pnpm build --sourcemap --watch",
+ "test": "vitest",
+ "ts:typecheck": "tsc --noEmit --skipLibCheck"
+ },
+ "dependencies": {
+ "@freestylejs/fetch": "workspace:^",
+ "commander": "^14.0.2",
+ "fs-extra": "^11.3.2",
+ "openapi-types": "^12.1.3",
+ "swagger-parser": "^10.0.3",
+ "zod": "^4.1.13",
+ "chalk": "^5.6.2"
+ },
+ "devDependencies": {
+ "@types/fs-extra": "^11.0.4",
+ "@types/node": "^20.14.2",
+ "ts-expect": "^1.3.0"
+ }
+}
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse/api.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse/api.ts
new file mode 100644
index 0000000..5bbbdbb
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse/api.ts
@@ -0,0 +1,15 @@
+import { f } from '@freestylejs/fetch';
+import { z } from 'zod';
+import * as Model from './models';
+
+export const api = f.router('https://{environment}.example.com/v{version}', {
+'products': {
+'GET': f.builder().def_json().def_searchparams(z.object({ category: z.enum(['electronics', 'clothing', 'books']).optional(), priceRange: z.array(z.number()).optional(), page: z.number().int().min(1).optional(), limit: z.number().int().min(1).max(100).optional(), sort: z.record(z.enum(['asc', 'desc']), z.any()).optional() }).parse).def_response(async ({ json }) => z.array(Model.Product).parse(await json())),
+'POST': f.builder().def_json().def_body(Model.Product.parse).def_response(async ({ json }) => Model.Product.parse(await json()))
+},
+'orders': {
+'$orderId': {
+'GET': f.builder().def_json().def_response(async ({ json }) => Model.Order.parse(await json()))
+}
+}
+});
\ No newline at end of file
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse/index.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse/index.ts
new file mode 100644
index 0000000..ec10836
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse/index.ts
@@ -0,0 +1,2 @@
+export * from './api'
+export * from './models'
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse/models.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse/models.ts
new file mode 100644
index 0000000..c653477
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse/models.ts
@@ -0,0 +1,40 @@
+import { z } from 'zod';
+
+export const Product = z.object({
+'id': z.uuid(),
+'name': z.string(),
+'productType': z.string(),
+'price': z.number().min(0)
+});
+
+export type ProductModel = z.infer;
+
+export const ElectronicsProduct = Product.and(z.object({
+'specs': z.record(z.string(), z.any()).optional()
+}));
+
+export type ElectronicsProductModel = z.infer;
+
+export const ClothingProduct = Product.and(z.object({
+'size': z.enum(['S', 'M', 'L', 'XL']).optional(),
+'color': z.string().optional()
+}));
+
+export type ClothingProductModel = z.infer;
+
+export const Order = z.object({
+'id': z.uuid().optional(),
+'userId': z.string().optional(),
+'products': z.array(Product).optional(),
+'total': z.number().optional(),
+'status': z.enum(['pending', 'shipped', 'delivered']).optional()
+});
+
+export type OrderModel = z.infer;
+
+export const Error = z.object({
+'code': z.number().int().optional(),
+'message': z.string().optional()
+});
+
+export type ErrorModel = z.infer;
\ No newline at end of file
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse_2/api.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse_2/api.ts
new file mode 100644
index 0000000..70aabf9
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse_2/api.ts
@@ -0,0 +1,20 @@
+import { f } from '@freestylejs/fetch';
+import { z } from 'zod';
+import * as Model from './models';
+
+export const api = f.router('https://{environment}.example-commerce.com/api/v2', {
+'products': {
+'GET': f.builder().def_json().def_searchparams(z.object({ searchQuery: z.string().optional(), tags: z.array(z.string()).optional(), page: z.number().int().min(1).optional() }).parse).def_response(async ({ json }) => Model.PaginatedProductResponse.parse(await json())),
+'POST': f.builder().def_json().def_body(z.instanceof(FormData).parse).def_response(async ({ json }) => Model.Product.parse(await json())),
+'$productId': {
+'GET': f.builder().def_json().def_response(async ({ json }) => Model.Product.parse(await json()))
+}
+},
+'orders': {
+'$orderId': {
+'process': {
+'POST': f.builder().def_json()
+}
+}
+}
+});
\ No newline at end of file
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse_2/index.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse_2/index.ts
new file mode 100644
index 0000000..ec10836
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse_2/index.ts
@@ -0,0 +1,2 @@
+export * from './api'
+export * from './models'
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse_2/models.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse_2/models.ts
new file mode 100644
index 0000000..0aa2358
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/e_commerse_2/models.ts
@@ -0,0 +1,91 @@
+import { z } from 'zod';
+
+export const User = z.object({
+'id': z.uuid(),
+'username': z.string().regex(/^[a-zA-Z0-9_-]{3,16}$/),
+'email': z.email(),
+'profile': z.object({
+'fullName': z.string().optional(),
+'joinDate': z.iso.datetime().optional()
+}).optional(),
+'legacyId': z.number().int().optional()
+});
+
+export type UserModel = z.infer;
+
+export const ProductInput = z.object({
+'name': z.string(),
+'description': z.string().optional(),
+'price': z.number().min(0)
+});
+
+export type ProductInputModel = z.infer;
+
+export const Product = ProductInput.and(z.object({
+'id': z.uuid().optional(),
+'imageUrl': z.url().optional(),
+'stock': z.number().int().optional()
+}));
+
+export type ProductModel = z.infer;
+
+export const PaginatedResponse = z.object({
+'page': z.number().int().optional(),
+'pageSize': z.number().int().optional(),
+'total': z.number().int().optional(),
+'items': z.array(z.any()).optional()
+});
+
+export type PaginatedResponseModel = z.infer;
+
+export const PaginatedProductResponse = z.object({
+'page': z.number().int().optional(),
+'pageSize': z.number().int().optional(),
+'total': z.number().int().optional(),
+'items': z.array(Product).optional()
+});
+
+export type PaginatedProductResponseModel = z.infer;
+
+export const CreditCard = z.object({
+'methodType': z.enum(['card']),
+'cardNumber': z.string(),
+'expiry': z.string().optional(),
+'cvv': z.string().optional()
+});
+
+export type CreditCardModel = z.infer;
+
+export const PayPal = z.object({
+'methodType': z.enum(['paypal_account']),
+'email': z.email()
+});
+
+export type PayPalModel = z.infer;
+
+export const PaymentMethod = z.discriminatedUnion('methodType', [CreditCard, PayPal]);
+
+export type PaymentMethodModel = z.infer;
+
+export const CallbackPayload = z.object({
+'orderId': z.uuid().optional(),
+'status': z.enum(['PROCESSED', 'FAILED']).optional(),
+'detail': z.string().optional()
+});
+
+export type CallbackPayloadModel = z.infer;
+
+export const InventoryUpdatePayload = z.object({
+'productId': z.uuid().optional(),
+'newStockLevel': z.number().int().optional(),
+'timestamp': z.iso.datetime().optional()
+});
+
+export type InventoryUpdatePayloadModel = z.infer;
+
+export const ApiError = z.object({
+'errorCode': z.string().optional(),
+'message': z.string().optional()
+});
+
+export type ApiErrorModel = z.infer;
\ No newline at end of file
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell/api.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell/api.ts
new file mode 100644
index 0000000..f59c795
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell/api.ts
@@ -0,0 +1,7 @@
+import { f } from '@freestylejs/fetch';
+import { z } from 'zod';
+import * as Model from './models';
+
+export const api = f.router('', {
+
+});
\ No newline at end of file
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell/index.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell/index.ts
new file mode 100644
index 0000000..ec10836
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell/index.ts
@@ -0,0 +1,2 @@
+export * from './api'
+export * from './models'
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell/models.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell/models.ts
new file mode 100644
index 0000000..8f275f6
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell/models.ts
@@ -0,0 +1,44 @@
+import { z } from 'zod';
+
+export const HellObject = z.object({
+'required-key': z.string(),
+'optional-key': z.string().optional(),
+'spaced key': z.number(),
+'$special$': z.boolean().optional()
+});
+
+export type HellObjectModel = z.infer;
+
+export const DeepNested = z.object({
+'level1': z.object({
+'level2': z.array(z.object({
+'level3': z.enum(['deep']).optional()
+})).optional()
+}).optional()
+});
+
+export type DeepNestedModel = z.infer;
+
+export const IntersectionHell = HellObject.and(z.object({
+'extra': z.string().optional()
+}));
+
+export type IntersectionHellModel = z.infer;
+
+export const OptionA = z.object({
+'type': z.enum(['A']),
+'a': z.string().optional()
+});
+
+export type OptionAModel = z.infer;
+
+export const OptionB = z.object({
+'type': z.enum(['B']),
+'b': z.number().optional()
+});
+
+export type OptionBModel = z.infer;
+
+export const UnionHell = z.discriminatedUnion('type', [OptionA, OptionB]);
+
+export type UnionHellModel = z.infer;
\ No newline at end of file
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell_2/api.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell_2/api.ts
new file mode 100644
index 0000000..f59c795
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell_2/api.ts
@@ -0,0 +1,7 @@
+import { f } from '@freestylejs/fetch';
+import { z } from 'zod';
+import * as Model from './models';
+
+export const api = f.router('', {
+
+});
\ No newline at end of file
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell_2/index.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell_2/index.ts
new file mode 100644
index 0000000..ec10836
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell_2/index.ts
@@ -0,0 +1,2 @@
+export * from './api'
+export * from './models'
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell_2/models.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell_2/models.ts
new file mode 100644
index 0000000..3967a6c
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/hell_2/models.ts
@@ -0,0 +1,27 @@
+import { z } from 'zod';
+
+export const StringDictionary = z.record(z.string(), z.any());
+
+export type StringDictionaryModel = z.infer;
+
+export const ObjectWithCatchall = z.object({
+'id': z.string()
+}).catchall(z.number().int());
+
+export type ObjectWithCatchallModel = z.infer;
+
+export const SimpleUnion = z.union([z.string(), z.boolean()]);
+
+export type SimpleUnionModel = z.infer;
+
+export const AnyOfUnion = z.union([StringDictionary, z.number()]);
+
+export type AnyOfUnionModel = z.infer;
+
+export const ConstString = z.literal('FIXED_VALUE');
+
+export type ConstStringModel = z.infer;
+
+export const NullableString = z.string().nullable();
+
+export type NullableStringModel = z.infer;
\ No newline at end of file
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/simple/api.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/simple/api.ts
new file mode 100644
index 0000000..eb14f90
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/simple/api.ts
@@ -0,0 +1,13 @@
+import { f } from '@freestylejs/fetch';
+import { z } from 'zod';
+import * as Model from './models';
+
+export const api = f.router('', {
+'books': {
+'GET': f.builder().def_json().def_response(async ({ json }) => z.array(Model.Book).parse(await json())),
+'POST': f.builder().def_json().def_body(Model.BookRequest.parse).def_response(async ({ json }) => Model.Book.parse(await json())),
+'$id': {
+'GET': f.builder().def_json().def_response(async ({ json }) => Model.Book.parse(await json()))
+}
+}
+});
\ No newline at end of file
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/simple/index.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/simple/index.ts
new file mode 100644
index 0000000..ec10836
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/simple/index.ts
@@ -0,0 +1,2 @@
+export * from './api'
+export * from './models'
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/simple/models.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/simple/models.ts
new file mode 100644
index 0000000..0025d88
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/simple/models.ts
@@ -0,0 +1,19 @@
+import { z } from 'zod';
+
+export const Book = z.object({
+'uuid': z.string(),
+'name': z.string(),
+'price': z.number(),
+'category': z.string(),
+'publish_date': z.iso.datetime()
+});
+
+export type BookModel = z.infer;
+
+export const BookRequest = z.object({
+'name': z.string(),
+'price': z.number(),
+'category': z.string()
+});
+
+export type BookRequestModel = z.infer;
\ No newline at end of file
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/youtube/api.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/youtube/api.ts
new file mode 100644
index 0000000..d3d52e8
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/youtube/api.ts
@@ -0,0 +1,14 @@
+import { f } from '@freestylejs/fetch';
+import { z } from 'zod';
+import * as Model from './models';
+
+export const api = f.router('https://youtube.googleapis.com/', {
+'youtube': {
+'v3': {
+'videos': {
+'GET': f.builder().def_json().def_searchparams(z.object({ part: z.array(z.enum(['contentDetails', 'fileDetails', 'id', 'liveStreamingDetails', 'localizations', 'player', 'processingDetails', 'recordingDetails', 'snippet', 'statistics', 'status', 'suggestions', 'topicDetails'])), id: z.array(z.string()).optional(), chart: z.enum(['chartUnspecified', 'mostPopular']).optional(), maxResults: z.number().int().min(1).max(50).optional(), pageToken: z.string().optional() }).parse).def_response(async ({ json }) => Model.VideoListResponse.parse(await json())),
+'POST': f.builder().def_json().def_searchparams(z.object({ part: z.array(z.enum(['snippet', 'status', 'player'])) }).parse).def_body(Model.Video.parse).def_response(async ({ json }) => Model.Video.parse(await json()))
+}
+}
+}
+});
\ No newline at end of file
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/youtube/index.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/youtube/index.ts
new file mode 100644
index 0000000..ec10836
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/youtube/index.ts
@@ -0,0 +1,2 @@
+export * from './api'
+export * from './models'
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/.gen/youtube/models.ts b/packages/openapi_generator/src/__tests__/__mocks__/.gen/youtube/models.ts
new file mode 100644
index 0000000..3adbd0c
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/.gen/youtube/models.ts
@@ -0,0 +1,131 @@
+import { z } from 'zod';
+
+export const PageInfo = z.object({
+'totalResults': z.number().int().optional(),
+'resultsPerPage': z.number().int().optional()
+});
+
+export type PageInfoModel = z.infer;
+
+export const Thumbnail = z.object({
+'url': z.string().optional(),
+'width': z.number().int().optional(),
+'height': z.number().int().optional()
+});
+
+export type ThumbnailModel = z.infer;
+
+export const ThumbnailDetails = z.object({
+'default': Thumbnail.optional(),
+'medium': Thumbnail.optional(),
+'high': Thumbnail.optional(),
+'standard': Thumbnail.optional(),
+'maxres': Thumbnail.optional()
+});
+
+export type ThumbnailDetailsModel = z.infer;
+
+export const VideoLocalization = z.object({
+'title': z.string().optional(),
+'description': z.string().optional()
+});
+
+export type VideoLocalizationModel = z.infer;
+
+export const VideoSnippet = z.object({
+'publishedAt': z.iso.datetime().optional(),
+'channelId': z.string().optional(),
+'title': z.string().optional(),
+'description': z.string().optional(),
+'thumbnails': ThumbnailDetails.optional(),
+'channelTitle': z.string().optional(),
+'tags': z.array(z.string()).optional(),
+'categoryId': z.string().optional(),
+'liveBroadcastContent': z.enum(['none', 'upcoming', 'live', 'completed']).optional(),
+'localized': VideoLocalization.optional()
+});
+
+export type VideoSnippetModel = z.infer;
+
+export const VideoContentDetails = z.object({
+'duration': z.string().regex(/^PT[0-9]+[M|H|S]$/).optional(),
+'dimension': z.string().optional(),
+'definition': z.enum(['hd', 'sd']).optional(),
+'caption': z.enum(['false', 'true']).optional(),
+'licensedContent': z.boolean().optional(),
+'regionRestriction': z.object({
+'allowed': z.array(z.string()).optional(),
+'blocked': z.array(z.string()).optional()
+}).optional()
+});
+
+export type VideoContentDetailsModel = z.infer;
+
+export const VideoStatus = z.object({
+'uploadStatus': z.enum(['deleted', 'failed', 'processed', 'rejected', 'uploaded']).optional(),
+'failureReason': z.enum(['codec', 'conversion', 'emptyFile', 'invalidFile', 'tooSmall', 'uploadAborted']).optional(),
+'rejectionReason': z.enum(['claim', 'copyright', 'duplicate', 'inappropriate', 'legal', 'length', 'termsOfUse', 'trademark', 'uploaderAccountClosed', 'uploaderAccountSuspended']).optional(),
+'privacyStatus': z.enum(['private', 'public', 'unlisted']).optional(),
+'license': z.enum(['creativeCommon', 'youtube']).optional(),
+'embeddable': z.boolean().optional(),
+'publicStatsViewable': z.boolean().optional(),
+'madeForKids': z.boolean().optional()
+});
+
+export type VideoStatusModel = z.infer;
+
+export const VideoStatistics = z.object({
+'viewCount': z.string().optional(),
+'likeCount': z.string().optional(),
+'dislikeCount': z.string().optional(),
+'favoriteCount': z.string().optional(),
+'commentCount': z.string().optional()
+});
+
+export type VideoStatisticsModel = z.infer;
+
+export const VideoPlayer = z.object({
+'embedHtml': z.string().optional(),
+'embedHeight': z.number().int().optional(),
+'embedWidth': z.number().int().optional()
+});
+
+export type VideoPlayerModel = z.infer;
+
+export const Video = z.object({
+'kind': z.string().optional(),
+'etag': z.string().optional(),
+'id': z.string().optional(),
+'snippet': VideoSnippet.optional(),
+'contentDetails': VideoContentDetails.optional(),
+'status': VideoStatus.optional(),
+'statistics': VideoStatistics.optional(),
+'player': VideoPlayer.optional()
+});
+
+export type VideoModel = z.infer;
+
+export const VideoListResponse = z.object({
+'kind': z.string().optional(),
+'etag': z.string().optional(),
+'nextPageToken': z.string().optional(),
+'prevPageToken': z.string().optional(),
+'pageInfo': PageInfo.optional(),
+'items': z.array(Video).optional()
+});
+
+export type VideoListResponseModel = z.infer;
+
+export const ErrorResponse = z.object({
+'error': z.object({
+'code': z.number().int().optional(),
+'message': z.string().optional(),
+'errors': z.array(z.object({
+'domain': z.string().optional(),
+'reason': z.string().optional(),
+'message': z.string().optional()
+})).optional()
+}).optional()
+});
+
+export type ErrorResponseModel = z.infer;
\ No newline at end of file
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/openapi/e_commerse.json b/packages/openapi_generator/src/__tests__/__mocks__/openapi/e_commerse.json
new file mode 100644
index 0000000..2fe2489
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/openapi/e_commerse.json
@@ -0,0 +1,693 @@
+{
+ "openapi": "3.0.0",
+ "info": {
+ "title": "Comprehensive Real-World E-Commerce API",
+ "summary": "An advanced API for managing an online store, including products, orders, users, payments, and analytics.",
+ "description": "This API provides endpoints for e-commerce operations, supporting features like user authentication, product catalog management, order processing, payment integration, and real-time notifications via webhooks. It demonstrates polymorphism in product types, complex schemas with composition, various security schemes, and runtime expressions in callbacks and links.",
+ "termsOfService": "https://example.com/terms",
+ "contact": {
+ "name": "API Support Team",
+ "url": "https://support.example.com",
+ "email": "support@example.com"
+ },
+ "license": {
+ "name": "Apache 2.0",
+ "identifier": "Apache-2.0"
+ },
+ "version": "1.2.0"
+ },
+ "jsonSchemaDialect": "https://spec.openapis.org/oas/3.1/dialect/base",
+ "servers": [
+ {
+ "url": "https://{environment}.example.com/v{version}",
+ "description": "Dynamic server URL with variables",
+ "variables": {
+ "environment": {
+ "default": "api",
+ "description": "Server environment (api, staging, dev)",
+ "enum": ["api", "staging", "dev"]
+ },
+ "version": {
+ "default": "1",
+ "description": "API version"
+ }
+ }
+ }
+ ],
+ "paths": {
+ "/products": {
+ "summary": "Product catalog operations",
+ "description": "Endpoints for managing products in the store.",
+ "get": {
+ "tags": ["products"],
+ "summary": "List products",
+ "description": "Retrieve a paginated list of products with filtering options.",
+ "operationId": "listProducts",
+ "parameters": [
+ {
+ "name": "category",
+ "in": "query",
+ "description": "Filter by product category",
+ "schema": {
+ "type": "string",
+ "enum": ["electronics", "clothing", "books"]
+ }
+ },
+ {
+ "name": "priceRange",
+ "in": "query",
+ "description": "Filter by price range (min,max)",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ },
+ "minItems": 2,
+ "maxItems": 2
+ },
+ "style": "form",
+ "explode": false
+ },
+ {
+ "name": "page",
+ "in": "query",
+ "description": "Pagination page number",
+ "schema": {
+ "type": "integer",
+ "minimum": 1,
+ "default": 1
+ }
+ },
+ {
+ "name": "limit",
+ "in": "query",
+ "description": "Number of items per page",
+ "schema": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 100,
+ "default": 20
+ }
+ },
+ {
+ "name": "sort",
+ "in": "query",
+ "description": "Sort criteria",
+ "schema": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string",
+ "enum": ["asc", "desc"]
+ }
+ },
+ "style": "deepObject",
+ "explode": true
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful response with product list",
+ "headers": {
+ "X-Total-Count": {
+ "description": "Total number of products",
+ "schema": {
+ "type": "integer"
+ }
+ },
+ "X-Rate-Limit-Remaining": {
+ "description": "Remaining requests in the current rate limit window",
+ "schema": {
+ "type": "integer"
+ }
+ }
+ },
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Product"
+ }
+ },
+ "examples": {
+ "electronicsList": {
+ "summary": "Example list of electronics",
+ "value": [
+ {
+ "id": "prod123",
+ "name": "Smartphone",
+ "productType": "Electronics",
+ "price": 499.99,
+ "specs": {
+ "battery": "5000mAh",
+ "screen": "6.5 inches"
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "links": {
+ "nextPage": {
+ "operationId": "listProducts",
+ "parameters": {
+ "page": "$response.body#/nextPage"
+ },
+ "description": "Link to the next page of results"
+ }
+ }
+ },
+ "400": {
+ "$ref": "#/components/responses/BadRequest"
+ },
+ "default": {
+ "description": "Unexpected error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error"
+ }
+ }
+ }
+ }
+ },
+ "deprecated": false,
+ "security": [
+ {
+ "apiKeyAuth": []
+ }
+ ]
+ },
+ "post": {
+ "tags": ["products"],
+ "summary": "Create a new product",
+ "description": "Add a new product to the catalog. Supports different product types via polymorphism.",
+ "operationId": "createProduct",
+ "requestBody": {
+ "description": "Product details to create",
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Product"
+ },
+ "examples": {
+ "electronicsExample": {
+ "summary": "Electronics product example",
+ "value": {
+ "name": "Laptop",
+ "productType": "Electronics",
+ "price": 999.99,
+ "specs": {
+ "cpu": "Intel i7",
+ "ram": "16GB"
+ }
+ }
+ }
+ }
+ },
+ "application/xml": {
+ "schema": {
+ "$ref": "#/components/schemas/Product"
+ }
+ },
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "productData": {
+ "type": "string",
+ "format": "binary"
+ },
+ "image": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ },
+ "encoding": {
+ "productData": {
+ "contentType": "application/json",
+ "style": "form",
+ "explode": false,
+ "allowReserved": true
+ },
+ "image": {
+ "contentType": "image/png, image/jpeg",
+ "headers": {
+ "X-Image-Size": {
+ "schema": {
+ "type": "integer"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Product created successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Product"
+ }
+ }
+ }
+ },
+ "400": {
+ "$ref": "#/components/responses/BadRequest"
+ }
+ },
+ "callbacks": {
+ "productCreatedNotification": {
+ "{$request.body#/notificationUrl}": {
+ "post": {
+ "requestBody": {
+ "description": "Notification payload for new product",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "event": {
+ "type": "string",
+ "const": "productCreated"
+ },
+ "productId": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Notification acknowledged"
+ }
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "oauth2": ["write:products"]
+ }
+ ]
+ }
+ },
+ "/orders/{orderId}": {
+ "parameters": [
+ {
+ "name": "orderId",
+ "in": "path",
+ "required": true,
+ "description": "Unique identifier for the order",
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ ],
+ "get": {
+ "tags": ["orders"],
+ "summary": "Get order details",
+ "description": "Retrieve details of a specific order.",
+ "operationId": "getOrder",
+ "responses": {
+ "200": {
+ "description": "Order details",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Order"
+ }
+ }
+ }
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFound"
+ }
+ },
+ "security": [
+ {
+ "basicAuth": []
+ },
+ {
+ "bearerAuth": []
+ }
+ ]
+ }
+ }
+ },
+ "webhooks": {
+ "orderStatusUpdate": {
+ "post": {
+ "summary": "Webhook for order status changes",
+ "description": "Receive notifications when an order status updates.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "orderId": {
+ "type": "string"
+ },
+ "newStatus": {
+ "type": "string",
+ "enum": [
+ "pending",
+ "shipped",
+ "delivered",
+ "cancelled"
+ ]
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Webhook received successfully"
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "Product": {
+ "type": "object",
+ "discriminator": {
+ "propertyName": "productType",
+ "mapping": {
+ "electronics": "#/components/schemas/ElectronicsProduct",
+ "clothing": "#/components/schemas/ClothingProduct"
+ }
+ },
+ "required": ["id", "name", "productType", "price"],
+ "properties": {
+ "id": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "name": {
+ "type": "string",
+ "xml": {
+ "name": "productName"
+ }
+ },
+ "productType": {
+ "type": "string"
+ },
+ "price": {
+ "type": "number",
+ "format": "double",
+ "minimum": 0
+ }
+ },
+ "xml": {
+ "name": "Product",
+ "namespace": "https://example.com/schema/product"
+ },
+ "externalDocs": {
+ "description": "More about products",
+ "url": "https://docs.example.com/products"
+ }
+ },
+ "ElectronicsProduct": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Product"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "specs": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ ]
+ },
+ "ClothingProduct": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/Product"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "size": {
+ "type": "string",
+ "enum": ["S", "M", "L", "XL"]
+ },
+ "color": {
+ "type": "string"
+ }
+ }
+ }
+ ]
+ },
+ "Order": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "format": "uuid"
+ },
+ "userId": {
+ "type": "string"
+ },
+ "products": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Product"
+ }
+ },
+ "total": {
+ "type": "number"
+ },
+ "status": {
+ "type": "string",
+ "enum": ["pending", "shipped", "delivered"]
+ }
+ }
+ },
+ "Error": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "responses": {
+ "BadRequest": {
+ "description": "Invalid input",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error"
+ }
+ }
+ }
+ },
+ "NotFound": {
+ "description": "Resource not found",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error"
+ }
+ }
+ }
+ }
+ },
+ "parameters": {
+ "userId": {
+ "name": "userId",
+ "in": "header",
+ "description": "User identifier",
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "examples": {
+ "orderExample": {
+ "summary": "Sample order",
+ "value": {
+ "id": "order123",
+ "userId": "user456",
+ "total": 1499.98
+ }
+ }
+ },
+ "requestBodies": {
+ "updateUser": {
+ "description": "User update details",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "email": {
+ "type": "string",
+ "format": "email"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "headers": {
+ "X-Auth-Token": {
+ "description": "Authentication token",
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "securitySchemes": {
+ "apiKeyAuth": {
+ "type": "apiKey",
+ "name": "X-API-Key",
+ "in": "header"
+ },
+ "basicAuth": {
+ "type": "http",
+ "scheme": "basic"
+ },
+ "bearerAuth": {
+ "type": "http",
+ "scheme": "bearer",
+ "bearerFormat": "JWT"
+ },
+ "oauth2": {
+ "type": "oauth2",
+ "flows": {
+ "authorizationCode": {
+ "authorizationUrl": "https://example.com/oauth/authorize",
+ "tokenUrl": "https://example.com/oauth/token",
+ "scopes": {
+ "read:products": "Read products",
+ "write:products": "Modify products"
+ }
+ },
+ "implicit": {
+ "authorizationUrl": "https://example.com/oauth/authorize",
+ "scopes": {
+ "read:products": "Read products"
+ }
+ },
+ "password": {
+ "tokenUrl": "https://example.com/oauth/token",
+ "scopes": {
+ "write:orders": "Create orders"
+ }
+ },
+ "clientCredentials": {
+ "tokenUrl": "https://example.com/oauth/token",
+ "scopes": {
+ "read:analytics": "Read analytics"
+ }
+ }
+ }
+ },
+ "openIdConnect": {
+ "type": "openIdConnect",
+ "openIdConnectUrl": "https://example.com/.well-known/openid-configuration"
+ },
+ "mutualTls": {
+ "type": "mutualTLS",
+ "description": "Client certificate authentication"
+ }
+ },
+ "links": {
+ "getOrderById": {
+ "operationId": "getOrder",
+ "parameters": {
+ "orderId": "$response.body#/id"
+ },
+ "description": "Link to retrieve the created order"
+ }
+ },
+ "callbacks": {
+ "paymentCallback": {
+ "{$request.body#/callbackUrl}": {
+ "post": {
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "paymentStatus": {
+ "type": "string",
+ "enum": ["success", "failed"]
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Payment callback received"
+ }
+ }
+ }
+ }
+ }
+ },
+ "pathItems": {
+ "reusablePathItem": {
+ "summary": "Reusable path item for common operations",
+ "parameters": [
+ {
+ "$ref": "#/components/parameters/userId"
+ }
+ ]
+ }
+ }
+ },
+ "security": [
+ {
+ "oauth2": ["read:products"]
+ }
+ ],
+ "tags": [
+ {
+ "name": "products",
+ "description": "Operations related to products",
+ "externalDocs": {
+ "description": "Product documentation",
+ "url": "https://docs.example.com/products"
+ }
+ },
+ {
+ "name": "orders",
+ "description": "Operations related to orders"
+ }
+ ],
+ "externalDocs": {
+ "description": "Full API documentation",
+ "url": "https://docs.example.com"
+ }
+}
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/openapi/e_commerse_2.json b/packages/openapi_generator/src/__tests__/__mocks__/openapi/e_commerse_2.json
new file mode 100644
index 0000000..13d6518
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/openapi/e_commerse_2.json
@@ -0,0 +1,560 @@
+{
+ "openapi": "3.0.0",
+ "info": {
+ "title": "E-Commerce Platform API",
+ "version": "2.0.0",
+ "description": "A comprehensive API for managing products, users, orders, and more on an advanced e-commerce platform. This specification showcases a wide range of OpenAPI 3.1 features, including polymorphism, webhooks, callbacks, and advanced security models.",
+ "termsOfService": "https://api.example-commerce.com/terms",
+ "contact": {
+ "name": "API Support Team",
+ "url": "https://support.example-commerce.com",
+ "email": "api-support@example-commerce.com"
+ },
+ "license": {
+ "name": "Apache 2.0",
+ "identifier": "Apache-2.0"
+ },
+ "x-version-lifecycle": "beta"
+ },
+ "jsonSchemaDialect": "https://spec.openapis.org/oas/3.1/dialect/base",
+ "externalDocs": {
+ "description": "Find more in-depth tutorials and guides here.",
+ "url": "https://docs.example-commerce.com"
+ },
+ "servers": [
+ {
+ "url": "https://{environment}.example-commerce.com/api/v2",
+ "description": "Main API server",
+ "variables": {
+ "environment": {
+ "default": "api",
+ "enum": ["api", "staging-api"],
+ "description": "`api` for production, `staging-api` for testing."
+ }
+ }
+ }
+ ],
+ "tags": [
+ {
+ "name": "Users",
+ "description": "Operations related to user accounts and profiles."
+ },
+ {
+ "name": "Products",
+ "description": "Manage the product catalog, inventory, and reviews."
+ },
+ {
+ "name": "Orders",
+ "description": "Endpoints for creating and managing customer orders."
+ },
+ {
+ "name": "Webhooks",
+ "description": "Manage webhook subscriptions for real-time event notifications."
+ }
+ ],
+ "security": [
+ {
+ "oauth2_user": ["read:profile", "read:orders"]
+ }
+ ],
+ "paths": {
+ "/products": {
+ "summary": "Product Collection",
+ "description": "Endpoint for searching and creating products.",
+ "get": {
+ "tags": ["Products"],
+ "operationId": "searchProducts",
+ "summary": "Search and filter products",
+ "parameters": [
+ {
+ "name": "searchQuery",
+ "in": "query",
+ "description": "Text search across product name and description.",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "tags",
+ "in": "query",
+ "description": "Filter by product tags.",
+ "style": "pipeDelimited",
+ "explode": false,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ {
+ "name": "page",
+ "in": "query",
+ "schema": {
+ "type": "integer",
+ "default": 1,
+ "minimum": 1
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "A paginated list of products.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaginatedProductResponse"
+ }
+ }
+ }
+ },
+ "400": {
+ "$ref": "#/components/responses/BadRequest"
+ }
+ }
+ },
+ "post": {
+ "tags": ["Products"],
+ "operationId": "createProduct",
+ "summary": "Add a new product with an image",
+ "security": [
+ {
+ "oauth2_user": ["write:products"],
+ "apiKey_internal": []
+ }
+ ],
+ "requestBody": {
+ "required": true,
+ "content": {
+ "multipart/form-data": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "productData": {
+ "$ref": "#/components/schemas/ProductInput"
+ },
+ "productImage": {
+ "type": "string",
+ "format": "binary",
+ "description": "The primary product image file."
+ }
+ }
+ },
+ "encoding": {
+ "productData": {
+ "contentType": "application/json"
+ },
+ "productImage": {
+ "contentType": "image/png, image/jpeg, image/gif",
+ "headers": {
+ "X-File-Metadata": {
+ "description": "Custom metadata about the file.",
+ "schema": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "Product created successfully.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Product"
+ }
+ }
+ },
+ "links": {
+ "getProductById": {
+ "operationId": "getProductById",
+ "parameters": {
+ "productId": "$response.body#/id"
+ },
+ "description": "A link to the newly created product."
+ }
+ }
+ }
+ }
+ }
+ },
+ "/products/{productId}": {
+ "parameters": [
+ {
+ "name": "productId",
+ "in": "path",
+ "required": true,
+ "description": "The unique identifier of the product.",
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ ],
+ "get": {
+ "tags": ["Products"],
+ "operationId": "getProductById",
+ "summary": "Get a single product by its ID",
+ "responses": {
+ "200": {
+ "description": "The requested product.",
+ "headers": {
+ "ETag": {
+ "$ref": "#/components/headers/ETag"
+ }
+ },
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Product"
+ }
+ }
+ }
+ },
+ "404": {
+ "$ref": "#/components/responses/NotFound"
+ }
+ }
+ }
+ },
+ "/orders/{orderId}/process": {
+ "post": {
+ "tags": ["Orders"],
+ "operationId": "processOrder",
+ "summary": "Process an order asynchronously",
+ "description": "Begins processing an order. A callback URL is invoked upon completion.",
+ "parameters": [
+ {
+ "name": "orderId",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ ],
+ "requestBody": {
+ "$ref": "#/components/requestBodies/OrderProcessingRequest"
+ },
+ "callbacks": {
+ "onOrderProcessed": {
+ "{$request.body#/notificationUrl}": {
+ "post": {
+ "requestBody": {
+ "required": true,
+ "description": "Callback payload sent when order processing is complete.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CallbackPayload"
+ }
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Your server has successfully acknowledged the callback."
+ }
+ }
+ }
+ }
+ }
+ },
+ "responses": {
+ "202": {
+ "description": "Order processing has been initiated."
+ }
+ }
+ }
+ }
+ },
+ "webhooks": {
+ "inventoryUpdate": {
+ "summary": "Inventory Level Update",
+ "post": {
+ "operationId": "inventoryUpdateWebhook",
+ "requestBody": {
+ "description": "Notification sent when a product's inventory level changes.",
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/InventoryUpdatePayload"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "The event has been successfully received."
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "User": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "format": "uuid",
+ "readOnly": true
+ },
+ "username": {
+ "type": "string",
+ "pattern": "^[a-zA-Z0-9_-]{3,16}$"
+ },
+ "email": {
+ "type": "string",
+ "format": "email"
+ },
+ "profile": {
+ "type": "object",
+ "properties": {
+ "fullName": {
+ "type": "string"
+ },
+ "joinDate": {
+ "type": "string",
+ "format": "date-time",
+ "readOnly": true
+ }
+ }
+ },
+ "legacyId": {
+ "type": "integer",
+ "deprecated": true
+ }
+ },
+ "required": ["id", "username", "email"]
+ },
+ "ProductInput": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "example": "Quantum Fusion Laptop"
+ },
+ "description": {
+ "type": "string"
+ },
+ "price": {
+ "type": "number",
+ "format": "double",
+ "minimum": 0
+ }
+ },
+ "required": ["name", "price"]
+ },
+ "Product": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/ProductInput"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "format": "uuid",
+ "readOnly": true
+ },
+ "imageUrl": {
+ "type": "string",
+ "format": "uri",
+ "readOnly": true
+ },
+ "stock": {
+ "type": "integer",
+ "writeOnly": true
+ }
+ }
+ }
+ ]
+ },
+ "PaginatedResponse": {
+ "$id": "generic_paginated_response",
+ "type": "object",
+ "properties": {
+ "page": { "type": "integer" },
+ "pageSize": { "type": "integer" },
+ "total": { "type": "integer" },
+ "items": {
+ "type": "array",
+ "items": {
+ "$dynamicRef": "#item"
+ }
+ }
+ },
+ "$defs": {
+ "genericItem": {
+ "$dynamicAnchor": "item"
+ }
+ }
+ },
+ "PaginatedProductResponse": {
+ "$ref": "#/components/schemas/PaginatedResponse",
+ "$defs": {
+ "productItem": {
+ "$dynamicAnchor": "item",
+ "$ref": "#/components/schemas/Product"
+ }
+ }
+ },
+ "PaymentMethod": {
+ "oneOf": [
+ { "$ref": "#/components/schemas/CreditCard" },
+ { "$ref": "#/components/schemas/PayPal" }
+ ],
+ "discriminator": {
+ "propertyName": "methodType",
+ "mapping": {
+ "card": "#/components/schemas/CreditCard",
+ "paypal_account": "#/components/schemas/PayPal"
+ }
+ }
+ },
+ "CreditCard": {
+ "type": "object",
+ "properties": {
+ "methodType": { "type": "string", "enum": ["card"] },
+ "cardNumber": { "type": "string" },
+ "expiry": { "type": "string" },
+ "cvv": { "type": "string", "writeOnly": true }
+ },
+ "required": ["methodType", "cardNumber"]
+ },
+ "PayPal": {
+ "type": "object",
+ "properties": {
+ "methodType": {
+ "type": "string",
+ "enum": ["paypal_account"]
+ },
+ "email": { "type": "string", "format": "email" }
+ },
+ "required": ["methodType", "email"]
+ },
+ "CallbackPayload": {
+ "type": "object",
+ "properties": {
+ "orderId": { "type": "string", "format": "uuid" },
+ "status": {
+ "type": "string",
+ "enum": ["PROCESSED", "FAILED"]
+ },
+ "detail": { "type": "string" }
+ }
+ },
+ "InventoryUpdatePayload": {
+ "type": "object",
+ "properties": {
+ "productId": { "type": "string", "format": "uuid" },
+ "newStockLevel": { "type": "integer" },
+ "timestamp": { "type": "string", "format": "date-time" }
+ },
+ "xml": {
+ "name": "InventoryEvent"
+ }
+ },
+ "ApiError": {
+ "type": "object",
+ "properties": {
+ "errorCode": { "type": "string" },
+ "message": { "type": "string" }
+ }
+ }
+ },
+ "responses": {
+ "NotFound": {
+ "description": "The specified resource was not found.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ApiError"
+ }
+ }
+ }
+ },
+ "BadRequest": {
+ "description": "Invalid input provided.",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ApiError"
+ }
+ }
+ }
+ }
+ },
+ "requestBodies": {
+ "OrderProcessingRequest": {
+ "description": "Details for initiating order processing.",
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "properties": {
+ "notificationUrl": {
+ "type": "string",
+ "format": "uri",
+ "description": "The URL to send a callback to upon completion."
+ }
+ },
+ "required": ["notificationUrl"]
+ },
+ "examples": {
+ "standard": {
+ "summary": "A standard notification endpoint.",
+ "value": {
+ "notificationUrl": "https://client.example.com/order-callback"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "headers": {
+ "ETag": {
+ "description": "An identifier for a specific version of a resource.",
+ "schema": {
+ "type": "string"
+ }
+ }
+ },
+ "securitySchemes": {
+ "oauth2_user": {
+ "type": "oauth2",
+ "description": "OAuth2 for end-user authentication.",
+ "flows": {
+ "authorizationCode": {
+ "authorizationUrl": "https://auth.example-commerce.com/oauth/authorize",
+ "tokenUrl": "https://auth.example-commerce.com/oauth/token",
+ "scopes": {
+ "read:profile": "Read user profile",
+ "write:profile": "Modify user profile",
+ "read:orders": "Read user's orders",
+ "write:orders": "Create orders for user",
+ "write:products": "Create or update products"
+ }
+ }
+ }
+ },
+ "apiKey_internal": {
+ "type": "apiKey",
+ "name": "X-Internal-API-Key",
+ "in": "header",
+ "description": "API Key for internal, machine-to-machine services."
+ }
+ }
+ }
+}
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/openapi/hell.json b/packages/openapi_generator/src/__tests__/__mocks__/openapi/hell.json
new file mode 100644
index 0000000..d920949
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/openapi/hell.json
@@ -0,0 +1,110 @@
+{
+ "openapi": "3.0.0",
+ "info": {
+ "title": "Hell API",
+ "version": "6.6.6"
+ },
+ "paths": {},
+ "components": {
+ "schemas": {
+ "HellObject": {
+ "type": "object",
+ "required": ["required-key", "spaced key"],
+ "properties": {
+ "required-key": {
+ "type": "string"
+ },
+ "optional-key": {
+ "type": "string"
+ },
+ "spaced key": {
+ "type": "number"
+ },
+ "$special$": {
+ "type": "boolean"
+ }
+ }
+ },
+ "DeepNested": {
+ "type": "object",
+ "properties": {
+ "level1": {
+ "type": "object",
+ "properties": {
+ "level2": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "level3": {
+ "type": "string",
+ "enum": ["deep"]
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "IntersectionHell": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/HellObject"
+ },
+ {
+ "type": "object",
+ "properties": {
+ "extra": {
+ "type": "string"
+ }
+ }
+ }
+ ]
+ },
+ "UnionHell": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/OptionA"
+ },
+ {
+ "$ref": "#/components/schemas/OptionB"
+ }
+ ],
+ "discriminator": {
+ "propertyName": "type",
+ "mapping": {
+ "A": "#/components/schemas/OptionA",
+ "B": "#/components/schemas/OptionB"
+ }
+ }
+ },
+ "OptionA": {
+ "type": "object",
+ "required": ["type"],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["A"]
+ },
+ "a": {
+ "type": "string"
+ }
+ }
+ },
+ "OptionB": {
+ "type": "object",
+ "required": ["type"],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": ["B"]
+ },
+ "b": {
+ "type": "number"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/openapi/hell_2.json b/packages/openapi_generator/src/__tests__/__mocks__/openapi/hell_2.json
new file mode 100644
index 0000000..2d880df
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/openapi/hell_2.json
@@ -0,0 +1,44 @@
+{
+ "openapi": "3.0.0",
+ "info": {
+ "title": "Hell Vol 2 API",
+ "version": "1.0.0"
+ },
+ "paths": {},
+ "components": {
+ "schemas": {
+ "StringDictionary": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "ObjectWithCatchall": {
+ "type": "object",
+ "required": ["id"],
+ "properties": {
+ "id": { "type": "string" }
+ },
+ "additionalProperties": {
+ "type": "integer"
+ }
+ },
+ "SimpleUnion": {
+ "oneOf": [{ "type": "string" }, { "type": "boolean" }]
+ },
+ "AnyOfUnion": {
+ "anyOf": [
+ { "$ref": "#/components/schemas/StringDictionary" },
+ { "type": "number" }
+ ]
+ },
+ "ConstString": {
+ "type": "string",
+ "const": "FIXED_VALUE"
+ },
+ "NullableString": {
+ "type": ["string", "null"]
+ }
+ }
+ }
+}
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/openapi/simple.json b/packages/openapi_generator/src/__tests__/__mocks__/openapi/simple.json
new file mode 100644
index 0000000..0a4587b
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/openapi/simple.json
@@ -0,0 +1,128 @@
+{
+ "openapi": "3.0.0",
+ "info": {
+ "title": "Simple Books API",
+ "version": "1.0.0"
+ },
+ "paths": {
+ "/books": {
+ "get": {
+ "summary": "Get a list of books",
+ "responses": {
+ "200": {
+ "description": "A list of books",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Book"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "summary": "Create a new book",
+ "requestBody": {
+ "required": true,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/BookRequest"
+ }
+ }
+ }
+ },
+ "responses": {
+ "201": {
+ "description": "The created book",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Book"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/books/{id}": {
+ "get": {
+ "summary": "Get a book by ID",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "A single book",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Book"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "Book": {
+ "type": "object",
+ "properties": {
+ "uuid": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "price": {
+ "type": "number"
+ },
+ "category": {
+ "type": "string"
+ },
+ "publish_date": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "required": [
+ "uuid",
+ "name",
+ "price",
+ "category",
+ "publish_date"
+ ]
+ },
+ "BookRequest": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "price": {
+ "type": "number"
+ },
+ "category": {
+ "type": "string"
+ }
+ },
+ "required": ["name", "price", "category"]
+ }
+ }
+ }
+}
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/openapi/youtube.json b/packages/openapi_generator/src/__tests__/__mocks__/openapi/youtube.json
new file mode 100644
index 0000000..22a181d
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/openapi/youtube.json
@@ -0,0 +1,521 @@
+{
+ "openapi": "3.0.0",
+ "info": {
+ "title": "YouTube Data API v3",
+ "version": "v3",
+ "description": "Supports core YouTube features, such as uploading videos, creating and managing playlists, searching for content, and much more.",
+ "termsOfService": "https://developers.google.com/youtube/terms/api-services-terms-of-service",
+ "contact": {
+ "name": "Google",
+ "url": "https://google.com"
+ },
+ "license": {
+ "name": "Creative Commons Attribution 3.0",
+ "url": "http://creativecommons.org/licenses/by/3.0/"
+ }
+ },
+ "servers": [
+ {
+ "url": "https://youtube.googleapis.com/",
+ "description": "Production Server"
+ }
+ ],
+ "paths": {
+ "/youtube/v3/videos": {
+ "get": {
+ "tags": ["Videos"],
+ "summary": "Retrieves a list of resources, possibly filtered.",
+ "description": "Returns a list of videos that match the API request parameters.",
+ "operationId": "youtube.videos.list",
+ "parameters": [
+ {
+ "name": "part",
+ "in": "query",
+ "description": "The part parameter specifies a comma-separated list of one or more video resource properties that the API response will include.",
+ "required": true,
+ "style": "form",
+ "explode": false,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "contentDetails",
+ "fileDetails",
+ "id",
+ "liveStreamingDetails",
+ "localizations",
+ "player",
+ "processingDetails",
+ "recordingDetails",
+ "snippet",
+ "statistics",
+ "status",
+ "suggestions",
+ "topicDetails"
+ ]
+ }
+ }
+ },
+ {
+ "name": "id",
+ "in": "query",
+ "description": "Return videos with the given IDs.",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ },
+ {
+ "name": "chart",
+ "in": "query",
+ "description": "Return the most popular videos for the specified content region and video category.",
+ "schema": {
+ "type": "string",
+ "enum": ["chartUnspecified", "mostPopular"]
+ }
+ },
+ {
+ "name": "maxResults",
+ "in": "query",
+ "schema": {
+ "type": "integer",
+ "minimum": 1,
+ "maximum": 50,
+ "default": 5
+ }
+ },
+ {
+ "name": "pageToken",
+ "in": "query",
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/VideoListResponse"
+ }
+ }
+ }
+ },
+ "403": {
+ "description": "Forbidden",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "Oauth2": [
+ "https://www.googleapis.com/auth/youtube",
+ "https://www.googleapis.com/auth/youtube.readonly"
+ ]
+ }
+ ]
+ },
+ "post": {
+ "tags": ["Videos"],
+ "summary": "Uploads a video to YouTube.",
+ "operationId": "youtube.videos.insert",
+ "parameters": [
+ {
+ "name": "part",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": ["snippet", "status", "player"]
+ }
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Video"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Video uploaded successfully",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Video"
+ }
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "Oauth2": [
+ "https://www.googleapis.com/auth/youtube.upload",
+ "https://www.googleapis.com/auth/youtube.force-ssl"
+ ]
+ }
+ ]
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "VideoListResponse": {
+ "type": "object",
+ "properties": {
+ "kind": {
+ "type": "string",
+ "default": "youtube#videoListResponse"
+ },
+ "etag": {
+ "type": "string"
+ },
+ "nextPageToken": {
+ "type": "string"
+ },
+ "prevPageToken": {
+ "type": "string"
+ },
+ "pageInfo": {
+ "$ref": "#/components/schemas/PageInfo"
+ },
+ "items": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Video"
+ }
+ }
+ }
+ },
+ "PageInfo": {
+ "type": "object",
+ "properties": {
+ "totalResults": {
+ "type": "integer"
+ },
+ "resultsPerPage": {
+ "type": "integer"
+ }
+ }
+ },
+ "Video": {
+ "type": "object",
+ "description": "A video resource represents a YouTube video.",
+ "properties": {
+ "kind": {
+ "type": "string",
+ "default": "youtube#video"
+ },
+ "etag": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "snippet": {
+ "$ref": "#/components/schemas/VideoSnippet"
+ },
+ "contentDetails": {
+ "$ref": "#/components/schemas/VideoContentDetails"
+ },
+ "status": {
+ "$ref": "#/components/schemas/VideoStatus"
+ },
+ "statistics": {
+ "$ref": "#/components/schemas/VideoStatistics"
+ },
+ "player": {
+ "$ref": "#/components/schemas/VideoPlayer"
+ }
+ }
+ },
+ "VideoSnippet": {
+ "type": "object",
+ "properties": {
+ "publishedAt": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "channelId": {
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ },
+ "thumbnails": {
+ "$ref": "#/components/schemas/ThumbnailDetails"
+ },
+ "channelTitle": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "categoryId": {
+ "type": "string"
+ },
+ "liveBroadcastContent": {
+ "type": "string",
+ "enum": ["none", "upcoming", "live", "completed"]
+ },
+ "localized": {
+ "$ref": "#/components/schemas/VideoLocalization"
+ }
+ }
+ },
+ "ThumbnailDetails": {
+ "type": "object",
+ "properties": {
+ "default": {
+ "$ref": "#/components/schemas/Thumbnail"
+ },
+ "medium": {
+ "$ref": "#/components/schemas/Thumbnail"
+ },
+ "high": {
+ "$ref": "#/components/schemas/Thumbnail"
+ },
+ "standard": {
+ "$ref": "#/components/schemas/Thumbnail"
+ },
+ "maxres": {
+ "$ref": "#/components/schemas/Thumbnail"
+ }
+ }
+ },
+ "Thumbnail": {
+ "type": "object",
+ "properties": {
+ "url": {
+ "type": "string"
+ },
+ "width": {
+ "type": "integer"
+ },
+ "height": {
+ "type": "integer"
+ }
+ }
+ },
+ "VideoStatus": {
+ "type": "object",
+ "properties": {
+ "uploadStatus": {
+ "type": "string",
+ "enum": [
+ "deleted",
+ "failed",
+ "processed",
+ "rejected",
+ "uploaded"
+ ]
+ },
+ "failureReason": {
+ "type": "string",
+ "enum": [
+ "codec",
+ "conversion",
+ "emptyFile",
+ "invalidFile",
+ "tooSmall",
+ "uploadAborted"
+ ]
+ },
+ "rejectionReason": {
+ "type": "string",
+ "enum": [
+ "claim",
+ "copyright",
+ "duplicate",
+ "inappropriate",
+ "legal",
+ "length",
+ "termsOfUse",
+ "trademark",
+ "uploaderAccountClosed",
+ "uploaderAccountSuspended"
+ ]
+ },
+ "privacyStatus": {
+ "type": "string",
+ "enum": ["private", "public", "unlisted"]
+ },
+ "license": {
+ "type": "string",
+ "enum": ["creativeCommon", "youtube"]
+ },
+ "embeddable": {
+ "type": "boolean"
+ },
+ "publicStatsViewable": {
+ "type": "boolean"
+ },
+ "madeForKids": {
+ "type": "boolean"
+ }
+ }
+ },
+ "VideoStatistics": {
+ "type": "object",
+ "properties": {
+ "viewCount": {
+ "type": "string",
+ "description": "Type is string because view counts can exceed 2^32."
+ },
+ "likeCount": {
+ "type": "string"
+ },
+ "dislikeCount": {
+ "type": "string"
+ },
+ "favoriteCount": {
+ "type": "string"
+ },
+ "commentCount": {
+ "type": "string"
+ }
+ }
+ },
+ "VideoPlayer": {
+ "type": "object",
+ "properties": {
+ "embedHtml": {
+ "type": "string"
+ },
+ "embedHeight": {
+ "type": "integer"
+ },
+ "embedWidth": {
+ "type": "integer"
+ }
+ }
+ },
+ "VideoContentDetails": {
+ "type": "object",
+ "properties": {
+ "duration": {
+ "type": "string",
+ "pattern": "^PT[0-9]+[M|H|S]$"
+ },
+ "dimension": {
+ "type": "string"
+ },
+ "definition": {
+ "type": "string",
+ "enum": ["hd", "sd"]
+ },
+ "caption": {
+ "type": "string",
+ "enum": ["false", "true"]
+ },
+ "licensedContent": {
+ "type": "boolean"
+ },
+ "regionRestriction": {
+ "type": "object",
+ "properties": {
+ "allowed": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "blocked": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
+ "VideoLocalization": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "description": {
+ "type": "string"
+ }
+ }
+ },
+ "ErrorResponse": {
+ "type": "object",
+ "properties": {
+ "error": {
+ "type": "object",
+ "properties": {
+ "code": {
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "errors": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "domain": {
+ "type": "string"
+ },
+ "reason": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "securitySchemes": {
+ "Oauth2": {
+ "type": "oauth2",
+ "flows": {
+ "authorizationCode": {
+ "authorizationUrl": "https://accounts.google.com/o/oauth2/auth",
+ "tokenUrl": "https://accounts.google.com/o/oauth2/token",
+ "scopes": {
+ "https://www.googleapis.com/auth/youtube": "Manage your YouTube account",
+ "https://www.googleapis.com/auth/youtube.readonly": "View your YouTube account",
+ "https://www.googleapis.com/auth/youtube.upload": "Manage your YouTube videos",
+ "https://www.googleapis.com/auth/youtubepartner-channel-audit": "View private information of your channel relevant during the audit process with a YouTube partner"
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/target_model/ecommerse_1.model.ts b/packages/openapi_generator/src/__tests__/__mocks__/target_model/ecommerse_1.model.ts
new file mode 100644
index 0000000..e38cb47
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/target_model/ecommerse_1.model.ts
@@ -0,0 +1,45 @@
+import { z } from 'zod'
+
+export const Product = z.object({
+ id: z.uuid(),
+ name: z.string(),
+ productType: z.string(),
+ price: z.number().min(0),
+})
+
+export type ProductModel = z.infer
+
+export const ElectronicsProduct = Product.and(
+ z.object({
+ specs: z.record(z.string(), z.any()).optional(),
+ })
+)
+
+export type ElectronicsProductModel = z.infer
+
+export const ClothingProduct = Product.and(
+ z.object({
+ size: z.enum(['S', 'M', 'L', 'XL']).optional(),
+ color: z.string().optional(),
+ })
+)
+
+export type ClothingProductModel = z.infer
+
+export const Order = z.object({
+ id: z.uuid().optional(),
+ userId: z.string().optional(),
+ products: z.array(Product).optional(),
+ total: z.number().optional(),
+ status: z.enum(['pending', 'shipped', 'delivered']).optional(),
+})
+
+export type OrderModel = z.infer
+
+// biome-ignore lint/suspicious/noShadowRestrictedNames:
+export const Error = z.object({
+ code: z.number().int().optional(),
+ message: z.string().optional(),
+})
+
+export type ErrorModel = z.infer
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/target_model/ecommerse_2.model.ts b/packages/openapi_generator/src/__tests__/__mocks__/target_model/ecommerse_2.model.ts
new file mode 100644
index 0000000..95cf15f
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/target_model/ecommerse_2.model.ts
@@ -0,0 +1,100 @@
+import { z } from 'zod'
+
+export const User = z.object({
+ id: z.uuid(),
+ username: z.string().regex(/^[a-zA-Z0-9_-]{3,16}$/),
+ email: z.email(),
+ profile: z
+ .object({
+ fullName: z.string().optional(),
+ joinDate: z.iso.datetime().optional(),
+ })
+ .optional(),
+ legacyId: z.number().int().optional(),
+})
+
+export type UserModel = z.infer
+
+export const ProductInput = z.object({
+ name: z.string(),
+ description: z.string().optional(),
+ price: z.number().min(0),
+})
+
+export type ProductInputModel = z.infer
+
+export const Product = ProductInput.and(
+ z.object({
+ id: z.uuid().optional(),
+ imageUrl: z.url().optional(),
+ stock: z.number().int().optional(),
+ })
+)
+
+export type ProductModel = z.infer
+
+export const PaginatedResponse = z.object({
+ page: z.number().int().optional(),
+ pageSize: z.number().int().optional(),
+ total: z.number().int().optional(),
+ items: z.array(z.any()).optional(),
+})
+
+export type PaginatedResponseModel = z.infer
+
+export const PaginatedProductResponse = z.object({
+ page: z.number().int().optional(),
+ pageSize: z.number().int().optional(),
+ total: z.number().int().optional(),
+ items: z.array(Product).optional(),
+})
+
+export type PaginatedProductResponseModel = z.infer<
+ typeof PaginatedProductResponse
+>
+
+export const CreditCard = z.object({
+ methodType: z.enum(['card']),
+ cardNumber: z.string(),
+ expiry: z.string().optional(),
+ cvv: z.string().optional(),
+})
+
+export type CreditCardModel = z.infer
+
+export const PayPal = z.object({
+ methodType: z.enum(['paypal_account']),
+ email: z.email(),
+})
+
+export type PayPalModel = z.infer
+
+export const PaymentMethod = z.discriminatedUnion('methodType', [
+ CreditCard,
+ PayPal,
+])
+
+export type PaymentMethodModel = z.infer
+
+export const CallbackPayload = z.object({
+ orderId: z.uuid().optional(),
+ status: z.enum(['PROCESSED', 'FAILED']).optional(),
+ detail: z.string().optional(),
+})
+
+export type CallbackPayloadModel = z.infer
+
+export const InventoryUpdatePayload = z.object({
+ productId: z.uuid().optional(),
+ newStockLevel: z.number().int().optional(),
+ timestamp: z.iso.datetime().optional(),
+})
+
+export type InventoryUpdatePayloadModel = z.infer
+
+export const ApiError = z.object({
+ errorCode: z.string().optional(),
+ message: z.string().optional(),
+})
+
+export type ApiErrorModel = z.infer
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/target_model/hell.model.ts b/packages/openapi_generator/src/__tests__/__mocks__/target_model/hell.model.ts
new file mode 100644
index 0000000..cad7723
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/target_model/hell.model.ts
@@ -0,0 +1,52 @@
+import { z } from 'zod'
+
+export const HellObject = z.object({
+ 'required-key': z.string(),
+ 'optional-key': z.string().optional(),
+ 'spaced key': z.number(),
+ $special$: z.boolean().optional(),
+})
+
+export type HellObjectModel = z.infer
+
+export const DeepNested = z.object({
+ level1: z
+ .object({
+ level2: z
+ .array(
+ z.object({
+ level3: z.enum(['deep']).optional(),
+ })
+ )
+ .optional(),
+ })
+ .optional(),
+})
+
+export type DeepNestedModel = z.infer
+
+export const IntersectionHell = HellObject.and(
+ z.object({
+ extra: z.string().optional(),
+ })
+)
+
+export type IntersectionHellModel = z.infer
+
+export const OptionA = z.object({
+ type: z.enum(['A']),
+ a: z.string().optional(),
+})
+
+export type OptionAModel = z.infer
+
+export const OptionB = z.object({
+ type: z.enum(['B']),
+ b: z.number().optional(),
+})
+
+export type OptionBModel = z.infer
+
+export const UnionHell = z.discriminatedUnion('type', [OptionA, OptionB])
+
+export type UnionHellModel = z.infer
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/target_model/hell_2.model.ts b/packages/openapi_generator/src/__tests__/__mocks__/target_model/hell_2.model.ts
new file mode 100644
index 0000000..be6d694
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/target_model/hell_2.model.ts
@@ -0,0 +1,29 @@
+import { z } from 'zod'
+
+export const StringDictionary = z.record(z.string(), z.any())
+
+export type StringDictionaryModel = z.infer
+
+export const ObjectWithCatchall = z
+ .object({
+ id: z.string(),
+ })
+ .catchall(z.number().int())
+
+export type ObjectWithCatchallModel = z.infer
+
+export const SimpleUnion = z.union([z.string(), z.boolean()])
+
+export type SimpleUnionModel = z.infer
+
+export const AnyOfUnion = z.union([StringDictionary, z.number()])
+
+export type AnyOfUnionModel = z.infer
+
+export const ConstString = z.literal('FIXED_VALUE')
+
+export type ConstStringModel = z.infer
+
+export const NullableString = z.string().nullable()
+
+export type NullableStringModel = z.infer
diff --git a/packages/openapi_generator/src/__tests__/__mocks__/target_model/simple.model.ts b/packages/openapi_generator/src/__tests__/__mocks__/target_model/simple.model.ts
new file mode 100644
index 0000000..7403093
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/__mocks__/target_model/simple.model.ts
@@ -0,0 +1,19 @@
+import { z } from 'zod'
+
+export const Book = z.object({
+ uuid: z.string(),
+ name: z.string(),
+ price: z.number(),
+ category: z.string(),
+ publish_date: z.iso.datetime(),
+})
+
+export type BookModel = z.infer
+
+export const BookRequest = z.object({
+ name: z.string(),
+ price: z.number(),
+ category: z.string(),
+})
+
+export type BookRequestModel = z.infer
diff --git a/packages/openapi_generator/src/__tests__/errors.test.ts b/packages/openapi_generator/src/__tests__/errors.test.ts
new file mode 100644
index 0000000..44cccc3
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/errors.test.ts
@@ -0,0 +1,184 @@
+import { describe, expect, it } from 'vitest'
+import {
+ ConfigurationError,
+ FileSystemError,
+ SchemaValidationError,
+ SpecParsingError,
+} from '../errors'
+
+describe('GeneratorError classes', () => {
+ describe('SpecParsingError', () => {
+ it('should format error with file path only', () => {
+ const error = new SpecParsingError(
+ 'Invalid OpenAPI version',
+ '/path/to/spec.yaml'
+ )
+ const formatted = error.format()
+
+ expect(formatted).toContain('Error parsing OpenAPI specification')
+ expect(formatted).toContain('/path/to/spec.yaml')
+ expect(formatted).toContain('Invalid OpenAPI version')
+ })
+
+ it('should format error with line and column', () => {
+ const error = new SpecParsingError(
+ 'Unexpected token',
+ '/path/to/spec.yaml',
+ 42,
+ 15
+ )
+ const formatted = error.format()
+
+ expect(formatted).toContain('/path/to/spec.yaml:42:15')
+ expect(formatted).toContain('Unexpected token')
+ })
+
+ it('should include suggestion when provided', () => {
+ const error = new SpecParsingError(
+ 'Missing required field',
+ '/path/to/spec.yaml',
+ undefined,
+ undefined,
+ 'Add the "info" section to your spec'
+ )
+ const formatted = error.format()
+
+ expect(formatted).toContain('๐ก Suggestion:')
+ expect(formatted).toContain('Add the "info" section')
+ })
+
+ it('should format error with line but no column', () => {
+ const error = new SpecParsingError(
+ 'Indentation error',
+ '/path/to/spec.yaml',
+ 10
+ )
+ const formatted = error.format()
+
+ expect(formatted).toContain('/path/to/spec.yaml:10')
+ expect(formatted).not.toContain(':10:')
+ })
+ })
+
+ describe('SchemaValidationError', () => {
+ it('should format error with schema context', () => {
+ const error = new SchemaValidationError(
+ 'Type mismatch',
+ 'UserSchema',
+ '#/components/schemas/User'
+ )
+ const formatted = error.format()
+
+ expect(formatted).toContain('Invalid Schema')
+ expect(formatted).toContain('UserSchema')
+ expect(formatted).toContain('#/components/schemas/User')
+ expect(formatted).toContain('Type mismatch')
+ })
+
+ it('should include suggestion when provided', () => {
+ const error = new SchemaValidationError(
+ 'Missing type field',
+ 'UserSchema',
+ '#/components/schemas/User',
+ 'Add a "type" field to the schema'
+ )
+ const formatted = error.format()
+
+ expect(formatted).toContain('๐ก Suggestion:')
+ expect(formatted).toContain('Add a "type" field')
+ })
+ })
+
+ describe('FileSystemError', () => {
+ it('should format read error', () => {
+ const error = new FileSystemError(
+ 'File not found',
+ 'read',
+ '/path/to/file.json'
+ )
+ const formatted = error.format()
+
+ expect(formatted).toContain('File System Error (read)')
+ expect(formatted).toContain('/path/to/file.json')
+ expect(formatted).toContain('File not found')
+ })
+
+ it('should format write error', () => {
+ const error = new FileSystemError(
+ 'Permission denied',
+ 'write',
+ '/path/to/output.ts'
+ )
+ const formatted = error.format()
+
+ expect(formatted).toContain('File System Error (write)')
+ expect(formatted).toContain('Permission denied')
+ })
+ })
+
+ describe('ConfigurationError', () => {
+ it('should format error with option and value', () => {
+ const error = new ConfigurationError(
+ 'Invalid output path',
+ 'output',
+ '/invalid/path',
+ 'Provide a valid directory path'
+ )
+ const formatted = error.format()
+
+ expect(formatted).toContain('Configuration Error')
+ expect(formatted).toContain('--output')
+ expect(formatted).toContain('/invalid/path')
+ expect(formatted).toContain('Invalid output path')
+ expect(formatted).toContain('๐ก Suggestion:')
+ })
+
+ it('should format error without option', () => {
+ const error = new ConfigurationError('Missing required arguments')
+ const formatted = error.format()
+
+ expect(formatted).toContain('Configuration Error')
+ expect(formatted).toContain('Missing required arguments')
+ expect(formatted).not.toContain('Option:')
+ })
+
+ it('should format error with option but no value', () => {
+ const error = new ConfigurationError(
+ 'Option is required',
+ 'input',
+ undefined,
+ 'Provide the path to your OpenAPI spec'
+ )
+ const formatted = error.format()
+
+ expect(formatted).toContain('--input')
+ expect(formatted).not.toContain('Provided:')
+ expect(formatted).toContain('๐ก Suggestion:')
+ })
+ })
+
+ describe('Error instanceof checks', () => {
+ it('should be instances of Error', () => {
+ const specError = new SpecParsingError('test', '/path/to/spec.yaml')
+ const schemaError = new SchemaValidationError(
+ 'test',
+ 'Schema',
+ 'path'
+ )
+ const fsError = new FileSystemError('test', 'read', '/path')
+ const configError = new ConfigurationError('test')
+
+ expect(specError).toBeInstanceOf(Error)
+ expect(schemaError).toBeInstanceOf(Error)
+ expect(fsError).toBeInstanceOf(Error)
+ expect(configError).toBeInstanceOf(Error)
+ })
+
+ it('should capture stack traces', () => {
+ const error = new SpecParsingError('test', '/path/to/spec.yaml')
+
+ expect(error.stack).toBeDefined()
+ expect(error.stack).toContain('SpecParsingError')
+ })
+ })
+})
diff --git a/packages/openapi_generator/src/__tests__/integration.test.ts b/packages/openapi_generator/src/__tests__/integration.test.ts
new file mode 100644
index 0000000..23eac7b
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/integration.test.ts
@@ -0,0 +1,55 @@
+import { existsSync, readdirSync, readFileSync, statSync } from 'fs-extra'
+import { join, resolve } from 'path'
+import { describe, expect, it } from 'vitest'
+import { parseOpenApiSpec, parsePaths } from '../path_parser'
+import { generateRouter } from '../router_generator'
+import { SchemaGenerator } from '../schema_generator'
+
+describe('Generator', () => {
+ const mocksDir = resolve(__dirname, '__mocks__')
+ const genDir = join(mocksDir, '.gen')
+ const openapiDir = join(mocksDir, 'openapi')
+
+ const testCases = readdirSync(genDir).filter((file) => {
+ return statSync(join(genDir, file)).isDirectory()
+ })
+
+ testCases.forEach((caseName) => {
+ const specFileName = `${caseName}.json`
+ const specPath = join(openapiDir, specFileName)
+
+ if (!existsSync(specPath)) {
+ console.warn(
+ `Skipping test case ${caseName}: Spec file ${specFileName} not found.`
+ )
+ return
+ }
+
+ describe(caseName, () => {
+ it('should generate the same models as the snapshot', async () => {
+ const spec = await parseOpenApiSpec(specPath)
+ const modelGenerator = new SchemaGenerator(spec)
+
+ const generatedModels = modelGenerator.generateModels()
+
+ const snapshot = readFileSync(
+ join(genDir, caseName, 'models.ts'),
+ 'utf-8'
+ )
+ expect(generatedModels).toEqual(snapshot)
+ })
+
+ it('should generate the same api as the snapshot', async () => {
+ const spec = await parseOpenApiSpec(specPath)
+ const parsedPaths = parsePaths(spec)
+ const generatedRouter = generateRouter(parsedPaths, spec)
+
+ const snapshot = readFileSync(
+ join(genDir, caseName, 'api.ts'),
+ 'utf-8'
+ )
+ expect(generatedRouter).toEqual(snapshot)
+ })
+ })
+ })
+})
diff --git a/packages/openapi_generator/src/__tests__/path_parser.test.ts b/packages/openapi_generator/src/__tests__/path_parser.test.ts
new file mode 100644
index 0000000..38ec59c
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/path_parser.test.ts
@@ -0,0 +1,436 @@
+import { existsSync, unlinkSync, writeFileSync } from 'fs-extra'
+import type { OpenAPIV3_1 } from 'openapi-types'
+import { tmpdir } from 'os'
+import { basename, join } from 'path'
+import { describe, expect, it } from 'vitest'
+import { SpecParsingError } from '../errors'
+import { parseOpenApiSpec, parsePaths } from '../path_parser'
+
+describe('path_parser', () => {
+ describe('parseOpenApiSpec', () => {
+ it('should parse a valid OpenAPI JSON file', async () => {
+ const tempFile = join(tmpdir(), 'test-spec.json')
+ const spec = {
+ openapi: '3.0.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {},
+ }
+
+ writeFileSync(tempFile, JSON.stringify(spec))
+
+ try {
+ const result = await parseOpenApiSpec(tempFile)
+ expect(result.openapi).toBe('3.0.0')
+ expect(result.info.title).toBe('Test')
+ expect(result.paths).toBeDefined()
+ } finally {
+ unlinkSync(tempFile)
+ }
+ })
+
+ it('should parse a valid OpenAPI YAML file', async () => {
+ const tempFile = join(tmpdir(), 'test-spec.yaml')
+ const yamlContent = `
+openapi: 3.0.0
+info:
+ title: Test API
+ version: 1.0.0
+paths:
+ /users:
+ get:
+ responses:
+ '200':
+ description: Success
+ `
+
+ writeFileSync(tempFile, yamlContent)
+
+ try {
+ const result = await parseOpenApiSpec(tempFile)
+ expect(result.openapi).toBe('3.0.0')
+ expect(result.info.title).toBe('Test API')
+ expect(result.paths?.['/users']).toBeDefined()
+ } finally {
+ unlinkSync(tempFile)
+ }
+ })
+
+ it('should parse YAML file with .yml extension', async () => {
+ const tempFile = join(tmpdir(), 'test-spec.yml')
+ const yamlContent = `
+openapi: 3.0.0
+info:
+ title: YML Test
+ version: 1.0.0
+paths: {}
+ `
+
+ writeFileSync(tempFile, yamlContent)
+
+ try {
+ const result = await parseOpenApiSpec(tempFile)
+ expect(result.info.title).toBe('YML Test')
+ } finally {
+ unlinkSync(tempFile)
+ }
+ })
+
+ it('should resolve internal $ref in YAML', async () => {
+ const tempFile = join(tmpdir(), 'test-with-ref.yaml')
+ const yamlContent = `
+openapi: 3.0.0
+info:
+ title: Test
+ version: 1.0.0
+components:
+ schemas:
+ User:
+ type: object
+ properties:
+ id:
+ type: string
+ name:
+ type: string
+paths:
+ /users:
+ get:
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ `
+
+ writeFileSync(tempFile, yamlContent)
+
+ try {
+ const result = await parseOpenApiSpec(tempFile)
+ // Should be bundled - $ref should remain pointing to internal component
+ const response =
+ result.paths?.['/users']?.get?.responses?.['200']
+ const schema = (response as any)?.content?.['application/json']
+ ?.schema
+ expect(schema).toBeDefined()
+ expect(schema.$ref).toBe('#/components/schemas/User')
+ // Verify the component exists
+ expect(result.components?.schemas?.['User']).toBeDefined()
+ } finally {
+ unlinkSync(tempFile)
+ }
+ })
+
+ it('should resolve external $ref across YAML files', async () => {
+ const uniqueId = Math.random().toString(36).substring(7)
+ const schemasFile = join(tmpdir(), `schemas-${uniqueId}.yaml`)
+ const apiFile = join(tmpdir(), `api-${uniqueId}.yaml`)
+
+ // Create external schemas file
+ const schemasContent = `
+components:
+ schemas:
+ Product:
+ type: object
+ properties:
+ id:
+ type: string
+ name:
+ type: string
+ `
+
+ // Create API file with external ref
+ const apiContent = `
+openapi: 3.0.0
+info:
+ title: API with External Refs
+ version: 1.0.0
+paths:
+ /products:
+ get:
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '${basename(schemasFile)}#/components/schemas/Product'
+ `
+
+ writeFileSync(schemasFile, schemasContent)
+ writeFileSync(apiFile, apiContent)
+
+ try {
+ const result = await parseOpenApiSpec(apiFile)
+ const response =
+ result.paths?.['/products']?.get?.responses?.['200']
+ const schema = (response as any)?.content?.['application/json']
+ ?.schema
+
+ // External ref should be bundled.
+ // In this simple case, swagger-parser inlines it.
+ expect(schema).toBeDefined()
+ if ((schema as any).$ref) {
+ // If it's a ref, verify it points to a component
+ const refName = (schema as any).$ref.split('/').pop()!
+ const component = result.components?.schemas?.[
+ refName
+ ] as any
+ expect(component).toBeDefined()
+ expect(component.properties.id).toBeDefined()
+ expect(component.properties.name).toBeDefined()
+ } else {
+ // If it's inlined, verify the properties
+ expect(schema.type).toBe('object')
+ expect(schema.properties.id).toBeDefined()
+ expect(schema.properties.name).toBeDefined()
+ }
+ } finally {
+ if (existsSync(schemasFile)) unlinkSync(schemasFile)
+ if (existsSync(apiFile)) unlinkSync(apiFile)
+ }
+ })
+
+ it('should throw error for invalid YAML syntax', async () => {
+ const tempFile = join(tmpdir(), 'invalid.yaml')
+ const invalidYaml = `
+openapi: 3.0.0
+info:
+ title: "Unclosed string
+ version: 1.0.0
+ `
+
+ writeFileSync(tempFile, invalidYaml)
+
+ try {
+ await expect(parseOpenApiSpec(tempFile)).rejects.toThrow(
+ SpecParsingError
+ )
+ } finally {
+ unlinkSync(tempFile)
+ }
+ })
+
+ it('should throw error for missing file', async () => {
+ const nonExistentFile = join(tmpdir(), 'does-not-exist.yaml')
+
+ await expect(parseOpenApiSpec(nonExistentFile)).rejects.toThrow(
+ SpecParsingError
+ )
+ })
+
+ it('should throw error for invalid external $ref', async () => {
+ const apiFile = join(tmpdir(), 'api-bad-ref.yaml')
+ const apiContent = `
+openapi: 3.0.0
+info:
+ title: Bad Ref
+ version: 1.0.0
+paths:
+ /test:
+ get:
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: 'missing-file.yaml#/components/schemas/Missing'
+ `
+
+ writeFileSync(apiFile, apiContent)
+
+ try {
+ await expect(parseOpenApiSpec(apiFile)).rejects.toThrow(
+ SpecParsingError
+ )
+ } finally {
+ unlinkSync(apiFile)
+ }
+ })
+ })
+
+ describe('parsePaths', () => {
+ it('should return empty object when spec has no paths', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.0.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: undefined as any,
+ }
+
+ const result = parsePaths(spec)
+ expect(result).toEqual({})
+ })
+
+ it('should skip null or undefined pathItems', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.0.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {
+ '/users': null as any,
+ '/posts': { get: { responses: {} } },
+ },
+ }
+
+ const result = parsePaths(spec)
+ expect(result.users).toBeUndefined()
+ expect(result.posts).toBeDefined()
+ })
+
+ it('should parse simple paths', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.0.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {
+ '/users': {
+ get: { responses: {} },
+ },
+ },
+ }
+
+ const result = parsePaths(spec)
+ expect(result.users).toBeDefined()
+ expect(result.users.get).toBeDefined()
+ })
+
+ it('should parse nested paths', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.0.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {
+ '/users/profile': {
+ get: { responses: {} },
+ },
+ },
+ }
+
+ const result = parsePaths(spec)
+ expect(result.users.profile.get).toBeDefined()
+ })
+
+ it('should convert path parameters to $ prefix', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.0.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {
+ '/users/{userId}': {
+ get: { responses: {} },
+ },
+ },
+ }
+
+ const result = parsePaths(spec)
+ expect(result.users.$userId).toBeDefined()
+ expect(result.users.$userId.get).toBeDefined()
+ })
+
+ it('should handle multiple dynamic segments', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.0.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {
+ '/users/{userId}/posts/{postId}': {
+ get: { responses: {} },
+ },
+ },
+ }
+
+ const result = parsePaths(spec)
+ expect(result.users.$userId.posts.$postId.get).toBeDefined()
+ })
+
+ it('should merge multiple operations on the same path', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.0.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {
+ '/users': {
+ get: { responses: {} },
+ post: { responses: {} },
+ },
+ },
+ }
+
+ const result = parsePaths(spec)
+ expect(result.users.get).toBeDefined()
+ expect(result.users.post).toBeDefined()
+ })
+
+ it('should handle paths with leading slash only', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.0.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {
+ '/': {
+ get: { responses: {} },
+ },
+ },
+ }
+
+ const result = parsePaths(spec)
+ // Path "/" after split and filter becomes empty array, so result should be empty
+ expect(Object.keys(result).length).toBe(0)
+ })
+
+ it('should handle paths with trailing slashes', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.0.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {
+ '/users/': {
+ get: { responses: {} },
+ },
+ },
+ }
+
+ const result = parsePaths(spec)
+ expect(result.users.get).toBeDefined()
+ })
+
+ it('should handle empty paths object', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.0.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {},
+ }
+
+ const result = parsePaths(spec)
+ expect(result).toEqual({})
+ })
+
+ it('should handle complex nested structure with mixed static and dynamic paths', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.0.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {
+ '/api/v1/users/{userId}/posts/{postId}/comments': {
+ get: { responses: {} },
+ post: { responses: {} },
+ },
+ },
+ }
+
+ const result = parsePaths(spec)
+ expect(
+ result.api.v1.users.$userId.posts.$postId.comments.get
+ ).toBeDefined()
+ expect(
+ result.api.v1.users.$userId.posts.$postId.comments.post
+ ).toBeDefined()
+ })
+
+ it('should preserve path-level parameters and metadata', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.0.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {
+ '/users': {
+ parameters: [{ name: 'test', in: 'query' }],
+ get: { responses: {} },
+ },
+ },
+ }
+
+ const result = parsePaths(spec)
+ expect(result.users.parameters).toBeDefined()
+ expect(result.users.get).toBeDefined()
+ })
+ })
+})
diff --git a/packages/openapi_generator/src/__tests__/router_generator.test.ts b/packages/openapi_generator/src/__tests__/router_generator.test.ts
new file mode 100644
index 0000000..65de7fd
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/router_generator.test.ts
@@ -0,0 +1,309 @@
+import type { OpenAPIV3_1 } from 'openapi-types'
+import { describe, expect, it } from 'vitest'
+import { parsePaths } from '../path_parser'
+import { generateRouter } from '../router_generator'
+
+describe('Router Generator Comprehensive Tests', () => {
+ const baseSpec: OpenAPIV3_1.Document = {
+ openapi: '3.1.0',
+ info: { title: 'Test API', version: '1.0.0' },
+ paths: {},
+ components: {
+ schemas: {
+ User: {
+ type: 'object',
+ properties: { id: { type: 'string' } },
+ },
+ UserList: {
+ type: 'array',
+ items: { $ref: '#/components/schemas/User' },
+ },
+ },
+ },
+ }
+
+ it('should generate query parameters correctly', () => {
+ const spec: OpenAPIV3_1.Document = {
+ ...baseSpec,
+ paths: {
+ '/users': {
+ get: {
+ parameters: [
+ {
+ name: 'page',
+ in: 'query',
+ schema: { type: 'number' },
+ },
+ {
+ name: 'sort',
+ in: 'query',
+ required: true,
+ schema: { type: 'string' },
+ },
+ ],
+ responses: { '200': { description: 'OK' } },
+ },
+ },
+ },
+ }
+ const parsedPaths = parsePaths(spec)
+ const code = generateRouter(parsedPaths, spec)
+
+ expect(code).toContain(
+ '.def_searchparams(z.object({ page: z.number().optional(), sort: z.string() }).parse)'
+ )
+ })
+
+ it('should generate request body with JSON ref correctly', () => {
+ const spec: OpenAPIV3_1.Document = {
+ ...baseSpec,
+ paths: {
+ '/users': {
+ post: {
+ requestBody: {
+ content: {
+ 'application/json': {
+ schema: {
+ $ref: '#/components/schemas/User',
+ },
+ },
+ },
+ },
+ responses: { '201': { description: 'Created' } },
+ },
+ },
+ },
+ }
+ const parsedPaths = parsePaths(spec)
+ const code = generateRouter(parsedPaths, spec)
+
+ expect(code).toContain('.def_body(Model.User.parse)')
+ })
+
+ it('should generate request body with FormData correctly', () => {
+ const spec: OpenAPIV3_1.Document = {
+ ...baseSpec,
+ paths: {
+ '/upload': {
+ post: {
+ requestBody: {
+ content: {
+ 'multipart/form-data': {
+ schema: { type: 'object' },
+ },
+ },
+ },
+ responses: { '200': { description: 'OK' } },
+ },
+ },
+ },
+ }
+ const parsedPaths = parsePaths(spec)
+ const code = generateRouter(parsedPaths, spec)
+
+ expect(code).toContain('.def_body(z.instanceof(FormData).parse)')
+ })
+
+ it('should generate response with JSON ref correctly', () => {
+ const spec: OpenAPIV3_1.Document = {
+ ...baseSpec,
+ paths: {
+ '/users/1': {
+ get: {
+ responses: {
+ '200': {
+ content: {
+ 'application/json': {
+ schema: {
+ $ref: '#/components/schemas/User',
+ },
+ },
+ },
+ description: 'OK',
+ },
+ },
+ },
+ },
+ },
+ }
+ const parsedPaths = parsePaths(spec)
+ const code = generateRouter(parsedPaths, spec)
+
+ expect(code).toContain(
+ '.def_response(async ({ json }) => Model.User.parse(await json()))'
+ )
+ })
+
+ it('should generate response with Array of refs correctly', () => {
+ const spec: OpenAPIV3_1.Document = {
+ ...baseSpec,
+ paths: {
+ '/users': {
+ get: {
+ responses: {
+ '200': {
+ content: {
+ 'application/json': {
+ schema: {
+ type: 'array',
+ items: {
+ $ref: '#/components/schemas/User',
+ },
+ },
+ },
+ },
+ description: 'OK',
+ },
+ },
+ },
+ },
+ },
+ }
+ const parsedPaths = parsePaths(spec)
+ const code = generateRouter(parsedPaths, spec)
+
+ expect(code).toContain(
+ '.def_response(async ({ json }) => z.array(Model.User).parse(await json()))'
+ )
+ })
+
+ it('should handle nested routes and path parameters', () => {
+ const spec: OpenAPIV3_1.Document = {
+ ...baseSpec,
+ paths: {
+ '/users/{userId}/posts': {
+ get: { responses: { '200': { description: 'OK' } } },
+ },
+ },
+ }
+ const parsedPaths = parsePaths(spec)
+ const code = generateRouter(parsedPaths, spec)
+
+ // Check structure nesting
+ expect(code).toContain("'users': {")
+ expect(code).toContain("'$userId': {")
+ expect(code).toContain("'posts': {")
+ expect(code).toContain("'GET': f.builder()")
+ })
+
+ it('should inherit path level parameters', () => {
+ const spec: OpenAPIV3_1.Document = {
+ ...baseSpec,
+ paths: {
+ '/users': {
+ parameters: [
+ {
+ name: 'common',
+ in: 'query',
+ schema: { type: 'string' },
+ },
+ ],
+ get: {
+ responses: { '200': { description: 'OK' } },
+ },
+ post: {
+ parameters: [
+ {
+ name: 'specific',
+ in: 'query',
+ schema: { type: 'number' },
+ },
+ ],
+ responses: { '200': { description: 'OK' } },
+ },
+ },
+ },
+ }
+ const parsedPaths = parsePaths(spec)
+ const code = generateRouter(parsedPaths, spec)
+
+ // GET should have common param
+ expect(code).toContain('common: z.string().optional()')
+
+ expect(code).toMatch(
+ /def_searchparams\(z\.object\({.*common: z\.string\(\)\.optional\(\).*}\)\.parse\)/
+ )
+ expect(code).toMatch(
+ /def_searchparams\(z\.object\({.*specific: z\.number\(\)\.optional\(\).*}\)\.parse\)/
+ )
+ })
+
+ it('should handle empty paths gracefully', () => {
+ const spec: OpenAPIV3_1.Document = {
+ ...baseSpec,
+ paths: {},
+ }
+ const parsedPaths = parsePaths(spec)
+ const code = generateRouter(parsedPaths, spec)
+
+ expect(code).toContain("export const api = f.router('', {\n\n});")
+ })
+
+ it('should ignore metadata keys in path objects', () => {
+ const spec: OpenAPIV3_1.Document = {
+ ...baseSpec,
+ paths: {
+ '/users': {
+ summary: 'User operations',
+ description: 'All user related things',
+ get: { responses: { '200': { description: 'OK' } } },
+ } as any, // Cast to any to allow non-standard fields if strict types complain, though summary/desc are valid in PathItem
+ },
+ }
+ const parsedPaths = parsePaths(spec)
+ const code = generateRouter(parsedPaths, spec)
+
+ expect(code).not.toContain('summary')
+ expect(code).not.toContain('description')
+ expect(code).toContain("'GET': f.builder()")
+ })
+
+ it('should handle mixed static and dynamic paths correctly', () => {
+ const spec: OpenAPIV3_1.Document = {
+ ...baseSpec,
+ paths: {
+ '/users/me': {
+ get: { responses: { '200': { description: 'OK' } } },
+ },
+ '/users/{userId}': {
+ get: { responses: { '200': { description: 'OK' } } },
+ },
+ },
+ }
+ const parsedPaths = parsePaths(spec)
+ const code = generateRouter(parsedPaths, spec)
+
+ expect(code).toContain("'me': {")
+ expect(code).toContain("'$userId': {")
+ })
+
+ it('should not generate searchparams if no query params exist', () => {
+ const spec: OpenAPIV3_1.Document = {
+ ...baseSpec,
+ paths: {
+ '/users': {
+ get: {
+ parameters: [
+ {
+ name: 'id',
+ in: 'path',
+ required: true,
+ schema: { type: 'string' },
+ },
+ {
+ name: 'header-param',
+ in: 'header',
+ schema: { type: 'string' },
+ },
+ ],
+ responses: { '200': { description: 'OK' } },
+ },
+ },
+ },
+ }
+ const parsedPaths = parsePaths(spec)
+ const code = generateRouter(parsedPaths, spec)
+
+ expect(code).not.toContain('.def_searchparams')
+ })
+})
diff --git a/packages/openapi_generator/src/__tests__/router_generator_edge.test.ts b/packages/openapi_generator/src/__tests__/router_generator_edge.test.ts
new file mode 100644
index 0000000..2a93f72
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/router_generator_edge.test.ts
@@ -0,0 +1,221 @@
+import type { OpenAPIV3_1 } from 'openapi-types'
+import { describe, expect, it } from 'vitest'
+import { generateRouter } from '../router_generator'
+
+describe('router_generator edge cases', () => {
+ describe('Reference Edge Cases', () => {
+ it('should handle empty $ref (pathParams with ref)', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.1.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {
+ '/users': {
+ parameters: [
+ { $ref: '' } as any, // Edge case: empty ref
+ ],
+ get: {
+ responses: { '200': { description: 'OK' } },
+ },
+ },
+ },
+ }
+
+ // This should not throw, even with unusual ref
+ const result = generateRouter({ users: spec.paths['/users'] }, spec)
+ expect(result).toContain('export const api')
+ })
+
+ it('should handle request body with malformed $ref', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.1.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {},
+ components: {
+ schemas: {},
+ },
+ }
+
+ const parsedPaths = {
+ users: {
+ POST: {
+ requestBody: {
+ content: {
+ 'application/json': {
+ schema: { $ref: '#/components/schemas/' }, // Ends with slash, pop() returns empty
+ },
+ },
+ },
+ responses: { '201': { description: 'Created' } },
+ },
+ },
+ }
+
+ // Should handle the empty string from .pop()
+ const result = generateRouter(parsedPaths, spec)
+ expect(result).toContain('.def_body(Model..parse)') // Empty modelName
+ })
+
+ it('should handle response with malformed $ref', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.1.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {},
+ components: {
+ schemas: {},
+ },
+ }
+
+ const parsedPaths = {
+ users: {
+ GET: {
+ responses: {
+ '200': {
+ content: {
+ 'application/json': {
+ schema: {
+ $ref: '#/components/schemas/',
+ }, // Ends with slash
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+
+ // Should handle the empty string from .pop()
+ const result = generateRouter(parsedPaths, spec)
+ expect(result).toContain('Model..parse') // Empty modelName
+ })
+
+ it('should handle array response with malformed $ref in items', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.1.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {},
+ components: {
+ schemas: {},
+ },
+ }
+
+ const parsedPaths = {
+ users: {
+ GET: {
+ responses: {
+ '200': {
+ content: {
+ 'application/json': {
+ schema: {
+ type: 'array',
+ items: { $ref: '#/' }, // Very short ref, pop() returns empty
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+
+ // Should handle the empty string from .pop()
+ const result = generateRouter(parsedPaths, spec)
+ expect(result).toContain('z.array(Model.)') // Empty modelName
+ })
+
+ it('should handle pathParams that are reference objects', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.1.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {
+ '/users': {
+ parameters: [
+ {
+ $ref: '#/components/parameters/UserId',
+ } as OpenAPIV3_1.ReferenceObject,
+ {
+ name: 'filter',
+ in: 'query',
+ schema: { type: 'string' },
+ } as OpenAPIV3_1.ParameterObject,
+ ],
+ get: {
+ responses: { '200': { description: 'OK' } },
+ },
+ },
+ },
+ }
+
+ const result = generateRouter({ users: spec.paths['/users'] }, spec)
+ // Should process the pathParams correctly even when some are $ref
+ expect(result).toContain('export const api')
+ })
+
+ it('should handle operation parameters that duplicate path parameters', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.1.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {},
+ }
+
+ const parsedPaths = {
+ users: {
+ parameters: [
+ {
+ name: 'shared',
+ in: 'query',
+ schema: { type: 'string' },
+ },
+ ],
+ GET: {
+ parameters: [
+ {
+ name: 'shared',
+ in: 'query',
+ schema: { type: 'string' },
+ }, // Duplicate
+ {
+ name: 'specific',
+ in: 'query',
+ schema: { type: 'number' },
+ },
+ ],
+ responses: { '200': { description: 'OK' } },
+ },
+ },
+ }
+
+ const result = generateRouter(parsedPaths, spec)
+ // Should not duplicate the 'shared' parameter
+ const sharedCount = (result.match(/shared:/g) || []).length
+ expect(sharedCount).toBe(1) // Should only appear once
+ })
+
+ it('should handle operation with only reference parameters', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.1.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {},
+ }
+
+ const parsedPaths = {
+ users: {
+ GET: {
+ parameters: [
+ {
+ $ref: '#/components/parameters/Param1',
+ } as OpenAPIV3_1.ReferenceObject,
+ {
+ $ref: '#/components/parameters/Param2',
+ } as OpenAPIV3_1.ReferenceObject,
+ ],
+ responses: { '200': { description: 'OK' } },
+ },
+ },
+ }
+
+ const result = generateRouter(parsedPaths, spec)
+ // Should handle all reference parameters
+ expect(result).toContain('export const api')
+ })
+ })
+})
diff --git a/packages/openapi_generator/src/__tests__/router_generator_implicit.test.ts b/packages/openapi_generator/src/__tests__/router_generator_implicit.test.ts
new file mode 100644
index 0000000..9fbf440
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/router_generator_implicit.test.ts
@@ -0,0 +1,32 @@
+import type { OpenAPIV3_1 } from 'openapi-types'
+import { describe, expect, it } from 'vitest'
+import { parsePaths } from '../path_parser'
+import { generateRouter } from '../router_generator'
+
+describe('HTTP Methods Generation (Implicit)', () => {
+ it('should NOT generate .def_method() but rely on router structure', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.1.0',
+ info: { title: 'Test API', version: '1.0.0' },
+ paths: {
+ '/users': {
+ get: { responses: { '200': { description: 'OK' } } },
+ post: { responses: { '201': { description: 'Created' } } },
+ },
+ },
+ }
+
+ const parsedPaths = parsePaths(spec)
+ const code = generateRouter(parsedPaths, spec)
+
+ // We expect the generated code to NOT explicitly define methods
+ // because the runtime router handles it based on the key (GET, POST, etc.)
+
+ expect(code).not.toContain(".def_method('GET')")
+ expect(code).not.toContain(".def_method('POST')")
+
+ // But it MUST contain the keys in the object structure
+ expect(code).toContain("'GET':")
+ expect(code).toContain("'POST':")
+ })
+})
diff --git a/packages/openapi_generator/src/__tests__/schema_generator.test.ts b/packages/openapi_generator/src/__tests__/schema_generator.test.ts
new file mode 100644
index 0000000..6d0c81e
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/schema_generator.test.ts
@@ -0,0 +1,1184 @@
+import type { OpenAPIV3_1 } from 'openapi-types'
+import { describe, expect, it } from 'vitest'
+import { SchemaGenerator } from '../schema_generator'
+
+describe('SchemaGenerator', () => {
+ const createSpec = (
+ schemas: Record<
+ string,
+ OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject
+ >
+ ): OpenAPIV3_1.Document => ({
+ openapi: '3.1.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {},
+ components: { schemas },
+ })
+
+ describe('Basic Types', () => {
+ it('should generate z.string() for string type', () => {
+ const spec = createSpec({ Test: { type: 'string' } })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'string' },
+ 'test'
+ )
+ expect(result).toBe('z.string()')
+ })
+
+ it('should generate z.number() for number type', () => {
+ const spec = createSpec({ Test: { type: 'number' } })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'number' },
+ 'test'
+ )
+ expect(result).toBe('z.number()')
+ })
+
+ it('should generate z.number().int() for integer type', () => {
+ const spec = createSpec({ Test: { type: 'integer' } })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'integer' },
+ 'test'
+ )
+ expect(result).toBe('z.number().int()')
+ })
+
+ it('should generate z.boolean() for boolean type', () => {
+ const spec = createSpec({ Test: { type: 'boolean' } })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'boolean' },
+ 'test'
+ )
+ expect(result).toBe('z.boolean()')
+ })
+
+ it('should generate z.any() for undefined type', () => {
+ const spec = createSpec({ Test: {} })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema({}, 'test')
+ expect(result).toBe('z.any()')
+ })
+ })
+
+ describe('String Formats and Constraints', () => {
+ it('should generate z.email() for email format', () => {
+ const spec = createSpec({
+ Test: { type: 'string', format: 'email' },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'string', format: 'email' },
+ 'test'
+ )
+ expect(result).toBe('z.email()')
+ })
+
+ it('should generate z.uuid() for uuid format', () => {
+ const spec = createSpec({
+ Test: { type: 'string', format: 'uuid' },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'string', format: 'uuid' },
+ 'test'
+ )
+ expect(result).toBe('z.uuid()')
+ })
+
+ it('should generate z.url() for uri format', () => {
+ const spec = createSpec({ Test: { type: 'string', format: 'uri' } })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'string', format: 'uri' },
+ 'test'
+ )
+ expect(result).toBe('z.url()')
+ })
+
+ it('should generate z.iso.datetime() for date-time format', () => {
+ const spec = createSpec({
+ Test: { type: 'string', format: 'date-time' },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'string', format: 'date-time' },
+ 'test'
+ )
+ expect(result).toBe('z.iso.datetime()')
+ })
+
+ it('should generate z.enum() for string enum', () => {
+ const spec = createSpec({
+ Test: { type: 'string', enum: ['a', 'b', 'c'] },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'string', enum: ['a', 'b', 'c'] },
+ 'test'
+ )
+ expect(result).toBe("z.enum(['a', 'b', 'c'])")
+ })
+
+ it('should generate z.literal() for string const', () => {
+ const spec = createSpec({
+ Test: { type: 'string', const: 'fixed' },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'string', const: 'fixed' },
+ 'test'
+ )
+ expect(result).toBe("z.literal('fixed')")
+ })
+
+ it('should generate z.string().regex() for pattern', () => {
+ const spec = createSpec({
+ Test: { type: 'string', pattern: '^[a-z]+$' },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'string', pattern: '^[a-z]+$' },
+ 'test'
+ )
+ expect(result).toBe('z.string().regex(/^[a-z]+$/)')
+ })
+ })
+
+ describe('Number Constraints', () => {
+ it('should generate z.number().min() for minimum', () => {
+ const spec = createSpec({ Test: { type: 'number', minimum: 0 } })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'number', minimum: 0 },
+ 'test'
+ )
+ expect(result).toBe('z.number().min(0)')
+ })
+
+ it('should generate z.number().max() for maximum', () => {
+ const spec = createSpec({ Test: { type: 'number', maximum: 100 } })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'number', maximum: 100 },
+ 'test'
+ )
+ expect(result).toBe('z.number().max(100)')
+ })
+
+ it('should generate z.number().min().max() for both min and max', () => {
+ const spec = createSpec({
+ Test: { type: 'number', minimum: 0, maximum: 100 },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'number', minimum: 0, maximum: 100 },
+ 'test'
+ )
+ expect(result).toBe('z.number().min(0).max(100)')
+ })
+
+ it('should generate z.number().int().min().max() for integer with constraints', () => {
+ const spec = createSpec({
+ Test: { type: 'integer', minimum: 1, maximum: 10 },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'integer', minimum: 1, maximum: 10 },
+ 'test'
+ )
+ expect(result).toBe('z.number().int().min(1).max(10)')
+ })
+ })
+
+ describe('Array Types', () => {
+ it('should generate z.array() with string items', () => {
+ const spec = createSpec({
+ Test: { type: 'array', items: { type: 'string' } },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'array', items: { type: 'string' } },
+ 'test'
+ )
+ expect(result).toBe('z.array(z.string())')
+ })
+
+ it('should generate z.array() with number items', () => {
+ const spec = createSpec({
+ Test: { type: 'array', items: { type: 'number' } },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'array', items: { type: 'number' } },
+ 'test'
+ )
+ expect(result).toBe('z.array(z.number())')
+ })
+
+ it('should generate z.array() with ref items', () => {
+ const spec = createSpec({
+ Item: { type: 'string' },
+ Test: {
+ type: 'array',
+ items: { $ref: '#/components/schemas/Item' },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'array', items: { $ref: '#/components/schemas/Item' } },
+ 'test'
+ )
+ expect(result).toBe('z.array(Item)')
+ })
+
+ it('should throw error for array without items', () => {
+ const spec = createSpec({ Test: { type: 'array', items: {} } })
+ const generator = new SchemaGenerator(spec)
+ expect(() =>
+ generator.generateZodSchema({ type: 'array' } as any, 'test')
+ ).toThrow('Array schema must have items defined.')
+ })
+ })
+
+ describe('Object Types', () => {
+ it('should generate z.object() with required properties', () => {
+ const spec = createSpec({
+ Test: {
+ type: 'object',
+ required: ['name'],
+ properties: {
+ name: { type: 'string' },
+ },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ type: 'object',
+ required: ['name'],
+ properties: { name: { type: 'string' } },
+ },
+ 'test'
+ )
+ expect(result).toContain("'name': z.string()")
+ })
+
+ it('should generate z.object() with optional properties', () => {
+ const spec = createSpec({
+ Test: {
+ type: 'object',
+ properties: {
+ name: { type: 'string' },
+ },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ type: 'object',
+ properties: { name: { type: 'string' } },
+ },
+ 'test'
+ )
+ expect(result).toContain("'name': z.string().optional()")
+ })
+
+ it('should generate z.object() with mixed required and optional properties', () => {
+ const spec = createSpec({
+ Test: {
+ type: 'object',
+ required: ['id'],
+ properties: {
+ id: { type: 'string' },
+ name: { type: 'string' },
+ },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ type: 'object',
+ required: ['id'],
+ properties: {
+ id: { type: 'string' },
+ name: { type: 'string' },
+ },
+ },
+ 'test'
+ )
+ expect(result).toContain("'id': z.string()")
+ expect(result).toContain("'name': z.string().optional()")
+ })
+
+ it('should generate z.object({}) for empty object', () => {
+ const spec = createSpec({ Test: { type: 'object' } })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: 'object' },
+ 'test'
+ )
+ expect(result).toBe('z.object({})')
+ })
+
+ it('should generate z.object().catchall(z.any()) for additionalProperties: true', () => {
+ const spec = createSpec({
+ Test: {
+ type: 'object',
+ properties: { name: { type: 'string' } },
+ additionalProperties: true,
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ type: 'object',
+ properties: { name: { type: 'string' } },
+ additionalProperties: true,
+ },
+ 'test'
+ )
+ expect(result).toContain('.catchall(z.any())')
+ })
+
+ it('should generate z.object().catchall() with typed additionalProperties', () => {
+ const spec = createSpec({
+ Test: {
+ type: 'object',
+ properties: { name: { type: 'string' } },
+ additionalProperties: { type: 'number' },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ type: 'object',
+ properties: { name: { type: 'string' } },
+ additionalProperties: { type: 'number' },
+ },
+ 'test'
+ )
+ expect(result).toContain('.catchall(z.number())')
+ })
+
+ it('should generate z.record() when no properties but additionalProperties defined', () => {
+ const spec = createSpec({
+ Test: {
+ type: 'object',
+ additionalProperties: { type: 'string' },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ type: 'object',
+ additionalProperties: { type: 'string' },
+ },
+ 'test'
+ )
+ expect(result).toBe('z.record(z.string(), z.any())')
+ })
+ })
+
+ describe('References ($ref)', () => {
+ it('should resolve simple reference', () => {
+ const spec = createSpec({
+ User: { type: 'string' },
+ Test: { $ref: '#/components/schemas/User' },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { $ref: '#/components/schemas/User' },
+ 'test'
+ )
+ expect(result).toBe('User')
+ })
+
+ it('should throw error for invalid $ref format', () => {
+ const spec = createSpec({ Test: { $ref: 'invalid/ref' } })
+ const generator = new SchemaGenerator(spec)
+ expect(() =>
+ generator.generateZodSchema({ $ref: 'invalid/ref' }, 'test')
+ ).toThrow('Unsupported $ref format')
+ })
+
+ it('should throw error for non-existent $ref', () => {
+ const spec = createSpec({
+ Test: { $ref: '#/components/schemas/NonExistent' },
+ })
+ const generator = new SchemaGenerator(spec)
+ expect(() =>
+ generator.generateZodSchema(
+ { $ref: '#/components/schemas/NonExistent' },
+ 'test'
+ )
+ ).toThrow('Schema not found for $ref')
+ })
+
+ it('should handle reference with additional properties (allOf conversion)', () => {
+ const spec = createSpec({
+ Base: { type: 'string' },
+ Test: {
+ $ref: '#/components/schemas/Base',
+ description: 'extra',
+ } as any,
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ $ref: '#/components/schemas/Base',
+ description: 'extra',
+ } as any,
+ 'test'
+ )
+ // Should convert to allOf and process
+ expect(result).toContain('Base')
+ })
+ })
+
+ describe('allOf (Intersection)', () => {
+ it('should generate intersection with .and()', () => {
+ const spec = createSpec({
+ Base: {
+ type: 'object',
+ properties: { id: { type: 'string' } },
+ },
+ Extra: {
+ type: 'object',
+ properties: { name: { type: 'string' } },
+ },
+ Test: {
+ allOf: [
+ { $ref: '#/components/schemas/Base' },
+ { $ref: '#/components/schemas/Extra' },
+ ],
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ allOf: [
+ { $ref: '#/components/schemas/Base' },
+ { $ref: '#/components/schemas/Extra' },
+ ],
+ },
+ 'test'
+ )
+ expect(result).toContain('Base.and(Extra)')
+ })
+
+ it('should handle allOf with three schemas', () => {
+ const spec = createSpec({
+ A: { type: 'object', properties: { a: { type: 'string' } } },
+ B: { type: 'object', properties: { b: { type: 'string' } } },
+ C: { type: 'object', properties: { c: { type: 'string' } } },
+ Test: {
+ allOf: [
+ { $ref: '#/components/schemas/A' },
+ { $ref: '#/components/schemas/B' },
+ { $ref: '#/components/schemas/C' },
+ ],
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ allOf: [
+ { $ref: '#/components/schemas/A' },
+ { $ref: '#/components/schemas/B' },
+ { $ref: '#/components/schemas/C' },
+ ],
+ },
+ 'test'
+ )
+ expect(result).toBe('A.and(B.and(C))')
+ })
+
+ it('should handle allOf with inline schemas', () => {
+ const spec = createSpec({
+ Test: {
+ allOf: [
+ {
+ type: 'object',
+ properties: { a: { type: 'string' } },
+ },
+ {
+ type: 'object',
+ properties: { b: { type: 'number' } },
+ },
+ ],
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ allOf: [
+ {
+ type: 'object',
+ properties: { a: { type: 'string' } },
+ },
+ {
+ type: 'object',
+ properties: { b: { type: 'number' } },
+ },
+ ],
+ },
+ 'test'
+ )
+ expect(result).toContain('.and(')
+ })
+ })
+
+ describe('oneOf/anyOf (Union)', () => {
+ it('should generate z.union() for simple oneOf', () => {
+ const spec = createSpec({
+ A: { type: 'string' },
+ B: { type: 'number' },
+ Test: {
+ oneOf: [
+ { $ref: '#/components/schemas/A' },
+ { $ref: '#/components/schemas/B' },
+ ],
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ oneOf: [
+ { $ref: '#/components/schemas/A' },
+ { $ref: '#/components/schemas/B' },
+ ],
+ },
+ 'test'
+ )
+ expect(result).toBe('z.union([A, B])')
+ })
+
+ it('should generate z.union() for anyOf', () => {
+ const spec = createSpec({
+ A: { type: 'string' },
+ B: { type: 'number' },
+ Test: {
+ anyOf: [
+ { $ref: '#/components/schemas/A' },
+ { $ref: '#/components/schemas/B' },
+ ],
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ anyOf: [
+ { $ref: '#/components/schemas/A' },
+ { $ref: '#/components/schemas/B' },
+ ],
+ },
+ 'test'
+ )
+ expect(result).toBe('z.union([A, B])')
+ })
+
+ it('should generate z.discriminatedUnion() for oneOf with discriminator', () => {
+ const spec = createSpec({
+ OptionA: {
+ type: 'object',
+ required: ['type'],
+ properties: {
+ type: { type: 'string', const: 'A' },
+ a: { type: 'string' },
+ },
+ },
+ OptionB: {
+ type: 'object',
+ required: ['type'],
+ properties: {
+ type: { type: 'string', const: 'B' },
+ b: { type: 'number' },
+ },
+ },
+ Test: {
+ oneOf: [
+ { $ref: '#/components/schemas/OptionA' },
+ { $ref: '#/components/schemas/OptionB' },
+ ],
+ discriminator: { propertyName: 'type' },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ oneOf: [
+ { $ref: '#/components/schemas/OptionA' },
+ { $ref: '#/components/schemas/OptionB' },
+ ],
+ discriminator: { propertyName: 'type' },
+ },
+ 'test'
+ )
+ expect(result).toBe(
+ "z.discriminatedUnion('type', [OptionA, OptionB])"
+ )
+ })
+
+ it('should throw error for discriminated union with non-ref schemas', () => {
+ const spec = createSpec({
+ Test: {
+ oneOf: [
+ {
+ type: 'object',
+ properties: { type: { type: 'string' } },
+ },
+ ],
+ discriminator: { propertyName: 'type' },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ expect(() =>
+ generator.generateZodSchema(
+ {
+ oneOf: [
+ {
+ type: 'object',
+ properties: { type: { type: 'string' } },
+ },
+ ],
+ discriminator: { propertyName: 'type' },
+ },
+ 'test'
+ )
+ ).toThrow('oneOf with discriminator must use $ref objects')
+ })
+ })
+
+ describe('Nullable Types (OAS 3.1)', () => {
+ it('should generate .nullable() for type array with null', () => {
+ const spec = createSpec({
+ Test: { type: ['string', 'null'] } as any,
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: ['string', 'null'] } as any,
+ 'test'
+ )
+ expect(result).toBe('z.string().nullable()')
+ })
+
+ it('should generate .nullable() for number with null', () => {
+ const spec = createSpec({
+ Test: { type: ['number', 'null'] } as any,
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ { type: ['number', 'null'] } as any,
+ 'test'
+ )
+ expect(result).toBe('z.number().nullable()')
+ })
+
+ it('should preserve constraints in nullable types', () => {
+ const spec = createSpec({
+ Test: {
+ type: ['number', 'null'],
+ minimum: 0,
+ maximum: 100,
+ } as any,
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ type: ['number', 'null'],
+ minimum: 0,
+ maximum: 100,
+ } as any,
+ 'test'
+ )
+ expect(result).toBe('z.number().min(0).max(100).nullable()')
+ })
+ })
+
+ describe('generateModels()', () => {
+ it('should generate empty string for spec without components', () => {
+ const spec: OpenAPIV3_1.Document = {
+ openapi: '3.1.0',
+ info: { title: 'Test', version: '1.0.0' },
+ paths: {},
+ }
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateModels()
+ expect(result).toBe('')
+ })
+
+ it('should generate empty string for spec with empty schemas', () => {
+ const spec = createSpec({})
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateModels()
+ expect(result).toContain("import { z } from 'zod';")
+ })
+
+ it('should generate model exports with PascalCase names', () => {
+ const spec = createSpec({
+ 'user-profile': {
+ type: 'object',
+ properties: { name: { type: 'string' } },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateModels()
+ expect(result).toContain('export const UserProfile =')
+ expect(result).toContain('export type UserProfileModel =')
+ })
+
+ it('should generate imports and exports', () => {
+ const spec = createSpec({
+ User: { type: 'string' },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateModels()
+ expect(result).toContain("import { z } from 'zod';")
+ expect(result).toContain('export const User = z.string();')
+ expect(result).toContain(
+ 'export type UserModel = z.infer;'
+ )
+ })
+
+ it('should handle multiple schemas', () => {
+ const spec = createSpec({
+ User: { type: 'string' },
+ Post: {
+ type: 'object',
+ properties: { title: { type: 'string' } },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateModels()
+ expect(result).toContain('export const User')
+ expect(result).toContain('export const Post')
+ })
+ })
+
+ describe('Real-World Complex Schemas', () => {
+ it('should handle deeply nested objects and arrays', () => {
+ const spec = createSpec({
+ DeepNested: {
+ type: 'object',
+ properties: {
+ level1: {
+ type: 'object',
+ properties: {
+ level2: {
+ type: 'array',
+ items: {
+ type: 'object',
+ properties: {
+ level3: {
+ type: 'string',
+ enum: ['deep'],
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ spec.components!.schemas!
+ .DeepNested as OpenAPIV3_1.SchemaObject,
+ 'DeepNested'
+ )
+
+ // Should contain nested structure
+ expect(result).toContain('z.object({')
+ expect(result).toContain('z.array(')
+ expect(result).toContain("z.enum(['deep'])")
+ })
+
+ it('should handle allOf with ref and inline schema (IntersectionHell pattern)', () => {
+ const spec = createSpec({
+ HellObject: {
+ type: 'object',
+ required: ['required-key', 'spaced key'],
+ properties: {
+ 'required-key': { type: 'string' },
+ 'optional-key': { type: 'string' },
+ 'spaced key': { type: 'number' },
+ $special$: { type: 'boolean' },
+ },
+ },
+ IntersectionHell: {
+ allOf: [
+ { $ref: '#/components/schemas/HellObject' },
+ {
+ type: 'object',
+ properties: {
+ extra: { type: 'string' },
+ },
+ },
+ ],
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ spec.components!.schemas!
+ .IntersectionHell as OpenAPIV3_1.SchemaObject,
+ 'IntersectionHell'
+ )
+
+ expect(result).toContain('HellObject.and(')
+ expect(result).toContain('z.object({')
+ })
+
+ it('should correctly handle complete hell.json HellObject schema', () => {
+ const spec = createSpec({
+ HellObject: {
+ type: 'object',
+ required: ['required-key', 'spaced key'],
+ properties: {
+ 'required-key': { type: 'string' },
+ 'optional-key': { type: 'string' },
+ 'spaced key': { type: 'number' },
+ $special$: { type: 'boolean' },
+ },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ spec.components!.schemas!
+ .HellObject as OpenAPIV3_1.SchemaObject,
+ 'HellObject'
+ )
+
+ expect(result).toContain("'required-key': z.string()")
+ expect(result).toContain("'optional-key': z.string().optional()")
+ expect(result).toContain("'spaced key': z.number()")
+ expect(result).toContain("'$special$': z.boolean().optional()")
+ })
+
+ it('should handle complete hell.json UnionHell with discriminator', () => {
+ const spec = createSpec({
+ OptionA: {
+ type: 'object',
+ required: ['type'],
+ properties: {
+ type: { type: 'string', enum: ['A'] },
+ a: { type: 'string' },
+ },
+ },
+ OptionB: {
+ type: 'object',
+ required: ['type'],
+ properties: {
+ type: { type: 'string', enum: ['B'] },
+ b: { type: 'number' },
+ },
+ },
+ UnionHell: {
+ oneOf: [
+ { $ref: '#/components/schemas/OptionA' },
+ { $ref: '#/components/schemas/OptionB' },
+ ],
+ discriminator: {
+ propertyName: 'type',
+ },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const models = generator.generateModels()
+
+ expect(models).toContain(
+ "export const UnionHell = z.discriminatedUnion('type', [OptionA, OptionB]);"
+ )
+ })
+
+ it('should handle nested object with array of objects containing enums', () => {
+ const spec = createSpec({
+ Complex: {
+ type: 'object',
+ properties: {
+ items: {
+ type: 'array',
+ items: {
+ type: 'object',
+ properties: {
+ status: {
+ type: 'string',
+ enum: [
+ 'pending',
+ 'active',
+ 'completed',
+ ],
+ },
+ count: {
+ type: 'integer',
+ minimum: 0,
+ maximum: 100,
+ },
+ },
+ },
+ },
+ },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ spec.components!.schemas!.Complex as OpenAPIV3_1.SchemaObject,
+ 'Complex'
+ )
+
+ expect(result).toContain('z.array(')
+ expect(result).toContain(
+ "z.enum(['pending', 'active', 'completed'])"
+ )
+ expect(result).toContain('z.number().int().min(0).max(100)')
+ })
+
+ it('should handle object with additionalProperties containing $ref', () => {
+ const spec = createSpec({
+ Value: { type: 'string' },
+ Dictionary: {
+ type: 'object',
+ additionalProperties: {
+ $ref: '#/components/schemas/Value',
+ },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ spec.components!.schemas!
+ .Dictionary as OpenAPIV3_1.SchemaObject,
+ 'Dictionary'
+ )
+
+ expect(result).toBe('z.record(Value, z.any())')
+ })
+
+ it('should handle allOf with multiple refs and inline schemas', () => {
+ const spec = createSpec({
+ Base: {
+ type: 'object',
+ properties: { id: { type: 'string' } },
+ },
+ Timestamped: {
+ type: 'object',
+ properties: {
+ createdAt: { type: 'string', format: 'date-time' },
+ updatedAt: { type: 'string', format: 'date-time' },
+ },
+ },
+ Entity: {
+ allOf: [
+ { $ref: '#/components/schemas/Base' },
+ { $ref: '#/components/schemas/Timestamped' },
+ {
+ type: 'object',
+ properties: {
+ name: { type: 'string' },
+ },
+ },
+ ],
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ spec.components!.schemas!.Entity as OpenAPIV3_1.SchemaObject,
+ 'Entity'
+ )
+
+ expect(result).toContain('Base.and(')
+ expect(result).toContain('Timestamped')
+ })
+
+ it('should handle array of refs', () => {
+ const spec = createSpec({
+ User: {
+ type: 'object',
+ properties: {
+ id: { type: 'string' },
+ name: { type: 'string' },
+ },
+ },
+ Users: {
+ type: 'array',
+ items: { $ref: '#/components/schemas/User' },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ spec.components!.schemas!.Users as OpenAPIV3_1.SchemaObject,
+ 'Users'
+ )
+
+ expect(result).toBe('z.array(User)')
+ })
+
+ it('should handle nullable complex types', () => {
+ const spec = createSpec({
+ NullableObject: {
+ type: ['object', 'null'],
+ properties: {
+ value: { type: 'string' },
+ },
+ } as any,
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ spec.components!.schemas!.NullableObject as any,
+ 'NullableObject'
+ )
+
+ expect(result).toContain('.nullable()')
+ expect(result).toContain('z.object({')
+ })
+ })
+
+ describe('Edge Cases', () => {
+ it('should throw error for non-existent schema name', () => {
+ const spec = createSpec({})
+ const generator = new SchemaGenerator(spec)
+ expect(() =>
+ generator.generateZodSchema(undefined as any, 'NonExistent')
+ ).toThrow('Schema "NonExistent" not found in specification')
+ })
+
+ it('should handle caching of processed schemas', () => {
+ const spec = createSpec({
+ User: { type: 'string' },
+ Profile: { $ref: '#/components/schemas/User' },
+ })
+ const generator = new SchemaGenerator(spec)
+
+ // First call processes User
+ generator.generateZodSchema(
+ { $ref: '#/components/schemas/User' },
+ 'test1'
+ )
+
+ // Second call should return cached result
+ const result = generator.generateZodSchema(
+ { $ref: '#/components/schemas/User' },
+ 'test2'
+ )
+ expect(result).toBe('User')
+ })
+
+ it('should handle special characters in property names', () => {
+ const spec = createSpec({
+ Test: {
+ type: 'object',
+ properties: {
+ 'special-key': { type: 'string' },
+ $dollar: { type: 'number' },
+ },
+ },
+ })
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateZodSchema(
+ {
+ type: 'object',
+ properties: {
+ 'special-key': { type: 'string' },
+ $dollar: { type: 'number' },
+ },
+ },
+ 'test'
+ )
+ expect(result).toContain("'special-key'")
+ expect(result).toContain("'$dollar'")
+ })
+
+ it('should handle $defs pattern for specialized allOf composition', () => {
+ // This test covers the special $defs handling code path (lines 96-118)
+ const spec = createSpec({
+ BaseList: {
+ type: 'object',
+ properties: {
+ items: {
+ type: 'array',
+ items: { type: 'string' }, // Will be replaced
+ },
+ },
+ },
+ Product: {
+ type: 'object',
+ properties: {
+ id: { type: 'string' },
+ name: { type: 'string' },
+ },
+ },
+ ProductList: {
+ allOf: [
+ { $ref: '#/components/schemas/BaseList' },
+ {
+ $defs: {
+ productItem: {
+ $ref: '#/components/schemas/Product',
+ },
+ },
+ } as any,
+ ],
+ },
+ })
+
+ const generator = new SchemaGenerator(spec)
+ const result = generator.generateModels()
+
+ // The $defs pattern should replace z.array(z.any()) with z.array(Product)
+ expect(result).toContain('Product')
+ expect(result).toContain('ProductList')
+ })
+
+ it('should throw error when base schema not found in $defs pattern (lines 103-106)', () => {
+ const spec = createSpec({
+ BaseSchema: {
+ type: 'object',
+ properties: {
+ items: { type: 'array', items: { type: 'string' } },
+ },
+ },
+ Item: { type: 'string' },
+ Test: {
+ allOf: [
+ { $ref: '#/components/schemas/BaseSchema' },
+ {
+ $defs: {
+ productItem: {
+ $ref: '#/components/schemas/Item',
+ },
+ },
+ } as any,
+ ],
+ },
+ })
+
+ const generator = new SchemaGenerator(spec)
+
+ // Manually trigger the scenario: Process the Test schema which will try to
+ // process BaseSchema via the $defs pattern. We intercept the internal state
+ // to simulate BaseSchema not being in processedSchemas after mapSchemaObjectToZod
+ const originalGet = generator['processedSchemas'].get.bind(
+ generator['processedSchemas']
+ )
+ let callCount = 0
+ generator['processedSchemas'].get = function (key: string) {
+ callCount++
+ // On the specific call for 'BaseSchema' in the $defs handler, return undefined
+ if (key === 'BaseSchema' && callCount === 1) {
+ return undefined
+ }
+ return originalGet(key)
+ }
+
+ expect(() =>
+ generator.generateZodSchema(
+ spec.components!.schemas!.Test as OpenAPIV3_1.SchemaObject,
+ 'Test'
+ )
+ ).toThrow('Base schema "BaseSchema" not found in processed schemas')
+ })
+ })
+})
diff --git a/packages/openapi_generator/src/__tests__/utils.test.ts b/packages/openapi_generator/src/__tests__/utils.test.ts
new file mode 100644
index 0000000..ac07ade
--- /dev/null
+++ b/packages/openapi_generator/src/__tests__/utils.test.ts
@@ -0,0 +1,87 @@
+import { describe, expect, it } from 'vitest'
+import { toPascalCase } from '../utils'
+
+describe('utils', () => {
+ describe('toPascalCase', () => {
+ it('should convert kebab-case to PascalCase', () => {
+ expect(toPascalCase('user-profile')).toBe('UserProfile')
+ expect(toPascalCase('api-key')).toBe('ApiKey')
+ expect(toPascalCase('my-long-variable-name')).toBe(
+ 'MyLongVariableName'
+ )
+ })
+
+ it('should convert snake_case to PascalCase', () => {
+ expect(toPascalCase('user_profile')).toBe('UserProfile')
+ expect(toPascalCase('api_key')).toBe('ApiKey')
+ expect(toPascalCase('my_long_variable_name')).toBe(
+ 'MyLongVariableName'
+ )
+ })
+
+ it('should convert camelCase to PascalCase', () => {
+ expect(toPascalCase('userProfile')).toBe('UserProfile')
+ expect(toPascalCase('apiKey')).toBe('ApiKey')
+ expect(toPascalCase('myLongVariableName')).toBe(
+ 'MyLongVariableName'
+ )
+ })
+
+ it('should convert space-separated to PascalCase', () => {
+ expect(toPascalCase('user profile')).toBe('UserProfile')
+ expect(toPascalCase('api key')).toBe('ApiKey')
+ expect(toPascalCase('my long variable name')).toBe(
+ 'MyLongVariableName'
+ )
+ })
+
+ it('should handle already PascalCase strings', () => {
+ expect(toPascalCase('UserProfile')).toBe('UserProfile')
+ expect(toPascalCase('APIKey')).toBe('ApiKey') // Splits API and Key
+ })
+
+ it('should preserve leading special characters', () => {
+ expect(toPascalCase('$special-key')).toBe('$SpecialKey')
+ expect(toPascalCase('$dollar')).toBe('$Dollar')
+ // Underscore at the start is treated as separator, not special char
+ expect(toPascalCase('_private-var')).toBe('PrivateVar')
+ })
+
+ it('should handle mixed separators', () => {
+ expect(toPascalCase('user-profile_name')).toBe('UserProfileName')
+ expect(toPascalCase('api_key-value')).toBe('ApiKeyValue')
+ })
+
+ it('should handle empty string', () => {
+ expect(toPascalCase('')).toBe('')
+ })
+
+ it('should handle single word', () => {
+ expect(toPascalCase('user')).toBe('User')
+ expect(toPascalCase('api')).toBe('Api')
+ })
+
+ it('should handle all uppercase', () => {
+ expect(toPascalCase('API')).toBe('API') // Single word, already uppercase
+ expect(toPascalCase('HTTP')).toBe('HTTP')
+ })
+
+ it('should handle numbers in names', () => {
+ expect(toPascalCase('user-1-profile')).toBe('User1Profile')
+ expect(toPascalCase('api2-key')).toBe('Api2Key')
+ })
+
+ it('should handle consecutive separators', () => {
+ expect(toPascalCase('user--profile')).toBe('UserProfile')
+ expect(toPascalCase('api__key')).toBe('ApiKey')
+ expect(toPascalCase('my name')).toBe('MyName')
+ })
+
+ it('should handle real-world cases from codebase', () => {
+ expect(toPascalCase('user-profile')).toBe('UserProfile')
+ expect(toPascalCase('HellObject')).toBe('HellObject') // No separators, preserve
+ expect(toPascalCase('BaseList')).toBe('BaseList')
+ expect(toPascalCase('ProductList')).toBe('ProductList')
+ })
+ })
+})
diff --git a/packages/openapi_generator/src/errors.ts b/packages/openapi_generator/src/errors.ts
new file mode 100644
index 0000000..b97b814
--- /dev/null
+++ b/packages/openapi_generator/src/errors.ts
@@ -0,0 +1,114 @@
+import chalk from 'chalk'
+
+/**
+ * Base class for all generator errors
+ */
+export abstract class GeneratorError extends Error {
+ constructor(message: string) {
+ super(message)
+ this.name = this.constructor.name
+ Error.captureStackTrace(this, this.constructor)
+ }
+
+ abstract format(): string
+}
+
+/**
+ * Error for OpenAPI specification parsing failures
+ */
+export class SpecParsingError extends GeneratorError {
+ constructor(
+ message: string,
+ public filePath: string,
+ public line?: number,
+ public column?: number,
+ public suggestion?: string
+ ) {
+ super(message)
+ }
+
+ format(): string {
+ const location = this.line
+ ? `:${this.line}${this.column ? `:${this.column}` : ''}`
+ : ''
+
+ return `
+${chalk.red('โ')} ${chalk.bold('Error parsing OpenAPI specification')}
+
+ ${chalk.dim('File:')} ${this.filePath}${location}
+ ${chalk.dim('Issue:')} ${this.message}
+${this.suggestion ? `\n ${chalk.yellow('๐ก Suggestion:')} ${this.suggestion}` : ''}
+ `.trim()
+ }
+}
+
+/**
+ * Error for invalid schema definitions
+ */
+export class SchemaValidationError extends GeneratorError {
+ constructor(
+ message: string,
+ public schemaName: string,
+ public schemaPath: string,
+ public suggestion?: string
+ ) {
+ super(message)
+ }
+
+ format(): string {
+ return `
+${chalk.red('โ')} ${chalk.bold('Invalid Schema')}
+
+ ${chalk.dim('Schema:')} ${this.schemaName} (${this.schemaPath})
+ ${chalk.dim('Issue:')} ${this.message}
+${this.suggestion ? `\n ${chalk.yellow('๐ก Suggestion:')} ${this.suggestion}` : ''}
+ `.trim()
+ }
+}
+
+/**
+ * Error for file system operations
+ */
+export class FileSystemError extends GeneratorError {
+ constructor(
+ message: string,
+ public operation: 'read' | 'write' | 'create' | 'delete',
+ public filePath: string
+ ) {
+ super(message)
+ }
+
+ format(): string {
+ return `
+${chalk.red('โ')} ${chalk.bold(`File System Error (${this.operation})`)}
+
+ ${chalk.dim('File:')} ${this.filePath}
+ ${chalk.dim('Issue:')} ${this.message}
+ `.trim()
+ }
+}
+
+/**
+ * Error for CLI configuration issues
+ */
+export class ConfigurationError extends GeneratorError {
+ constructor(
+ message: string,
+ public option?: string,
+ public providedValue?: string,
+ public suggestion?: string
+ ) {
+ super(message)
+ }
+
+ format(): string {
+ return `
+${chalk.red('โ')} ${chalk.bold('Configuration Error')}
+
+${this.option ? ` ${chalk.dim('Option:')} --${this.option}` : ''}
+${this.providedValue ? ` ${chalk.dim('Provided:')} ${this.providedValue}` : ''}
+ ${chalk.dim('Issue:')} ${this.message}
+${this.suggestion ? `\n ${chalk.yellow('๐ก Suggestion:')} ${this.suggestion}` : ''}
+ `.trim()
+ }
+}
diff --git a/packages/openapi_generator/src/index.ts b/packages/openapi_generator/src/index.ts
new file mode 100644
index 0000000..4fb39da
--- /dev/null
+++ b/packages/openapi_generator/src/index.ts
@@ -0,0 +1,55 @@
+#!/usr/bin/env node
+
+import { resolve } from 'node:path'
+import { Command } from 'commander'
+import { outputFileSync } from 'fs-extra'
+import { parseOpenApiSpec, parsePaths } from './path_parser'
+import { generateRouter } from './router_generator'
+import { SchemaGenerator } from './schema_generator'
+
+const program = new Command()
+
+program
+ .command('generate')
+ .description(
+ 'Generate a new API client from an OpenAPI specification file.'
+ )
+ .requiredOption('-i, --input ', 'Path to the OpenAPI JSON file')
+ .requiredOption(
+ '-o, --output ',
+ 'Directory to output the generated client'
+ )
+ .action(async (options) => {
+ const absoluteInputPath = resolve(process.cwd(), options.input)
+ const absoluteOutputPath = resolve(process.cwd(), options.output)
+
+ const spec = await parseOpenApiSpec(absoluteInputPath)
+
+ const schemaGenerator = new SchemaGenerator(spec)
+
+ // Generate and write models
+ const modelsFileContent = schemaGenerator.generateModels()
+
+ outputFileSync(
+ resolve(absoluteOutputPath, 'models.ts'),
+ modelsFileContent
+ )
+
+ // Generate and write router
+ const parsedPaths = parsePaths(spec)
+ const routerFileContent = generateRouter(parsedPaths, spec)
+
+ outputFileSync(resolve(absoluteOutputPath, 'api.ts'), routerFileContent)
+
+ // Generate and write index
+ outputFileSync(
+ resolve(absoluteOutputPath, 'index.ts'),
+ "export * from './api';\nexport * from './models';"
+ )
+
+ console.log(
+ `API client generated successfully at ${absoluteOutputPath}`
+ )
+ })
+
+program.parse(process.argv)
diff --git a/packages/openapi_generator/src/path_parser.ts b/packages/openapi_generator/src/path_parser.ts
new file mode 100644
index 0000000..bb7c5e8
--- /dev/null
+++ b/packages/openapi_generator/src/path_parser.ts
@@ -0,0 +1,136 @@
+import SwaggerParser from '@apidevtools/swagger-parser'
+import type { OpenAPIV3_1 } from 'openapi-types'
+import { SpecParsingError } from './errors'
+
+/**
+ * Parse an OpenAPI specification file (JSON or YAML)
+ * Automatically resolves all $ref references (local and external)
+ *
+ * @param filePath - Absolute or relative path to the OpenAPI spec file (.json, .yaml, or .yml)
+ * @returns Fully dereferenced OpenAPI 3.1 document
+ */
+export async function parseOpenApiSpec(
+ filePath: string
+): Promise {
+ try {
+ const api = (await SwaggerParser.bundle(
+ filePath
+ )) as OpenAPIV3_1.Document
+
+ // Validate required OpenAPI fields
+ if (!api.openapi) {
+ throw new SpecParsingError(
+ 'Missing required "openapi" version field',
+ filePath,
+ undefined,
+ undefined,
+ 'Add "openapi: 3.0.0" or "openapi: 3.1.0" at the top of your spec'
+ )
+ }
+
+ if (!api.info) {
+ throw new SpecParsingError(
+ 'Missing required "info" section',
+ filePath,
+ undefined,
+ undefined,
+ 'Add an "info" section with "title" and "version" fields'
+ )
+ }
+
+ return api
+ } catch (error) {
+ // If already a SpecParsingError, re-throw
+ if (error instanceof SpecParsingError) {
+ throw error
+ }
+
+ if (error instanceof Error) {
+ const isYaml =
+ filePath.endsWith('.yaml') || filePath.endsWith('.yml')
+
+ // Parse YAML-specific errors for line numbers
+ let line: number | undefined
+ const lineMatch = error.message.match(/line (\d+)/)
+ if (lineMatch && lineMatch[1]) {
+ line = Number.parseInt(lineMatch[1], 10)
+ }
+
+ // Provide contextual suggestions
+ let suggestion: string | undefined
+ if (isYaml) {
+ if (error.message.includes('duplicate')) {
+ suggestion = 'Check for duplicate keys in your YAML file'
+ } else if (
+ error.message.includes('indent') ||
+ error.message.includes('indentation')
+ ) {
+ suggestion =
+ 'YAML requires consistent indentation (use spaces, not tabs)'
+ } else if (error.message.includes('mapping')) {
+ suggestion =
+ 'Check YAML structure - ensure proper key:value pairs and indentation'
+ } else {
+ suggestion =
+ 'Check YAML syntax - common issues: unclosed quotes, incorrect indentation, or missing colons'
+ }
+ } else if (error.message.includes('JSON')) {
+ suggestion =
+ 'Check for missing commas, brackets, or quotes in your JSON file'
+ } else if (
+ error.message.includes('ENOENT') ||
+ error.message.includes('no such file')
+ ) {
+ suggestion = `File not found. Check that "${filePath}" exists and is accessible`
+ } else if (error.message.includes('$ref')) {
+ suggestion =
+ 'Check that all $ref paths point to valid schemas or files'
+ }
+
+ throw new SpecParsingError(
+ error.message,
+ filePath,
+ line,
+ undefined,
+ suggestion
+ )
+ }
+
+ throw error
+ }
+}
+
+export function parsePaths(spec: OpenAPIV3_1.Document): Record {
+ const paths = spec.paths
+ if (!paths) return {}
+ const result: Record = {}
+
+ for (const path in paths) {
+ const pathItem = paths[path]
+ if (!pathItem) continue
+
+ const pathParts = path.split('/').filter((p) => p)
+ let current = result
+
+ for (let i = 0; i < pathParts.length; i++) {
+ let part = pathParts[i]
+ if (!part) continue
+
+ if (part.startsWith('{') && part.endsWith('}')) {
+ part = `$${part.slice(1, -1)}`
+ }
+
+ if (!current[part]) {
+ current[part] = {}
+ }
+
+ if (i === pathParts.length - 1) {
+ current[part] = { ...current[part], ...pathItem }
+ }
+
+ current = current[part]
+ }
+ }
+
+ return result
+}
diff --git a/packages/openapi_generator/src/router_generator.ts b/packages/openapi_generator/src/router_generator.ts
new file mode 100644
index 0000000..2576e38
--- /dev/null
+++ b/packages/openapi_generator/src/router_generator.ts
@@ -0,0 +1,145 @@
+import type { OpenAPIV3_1 } from 'openapi-types'
+import { SchemaGenerator } from './schema_generator'
+import { toPascalCase } from './utils'
+
+function isReferenceObject(obj: any): obj is OpenAPIV3_1.ReferenceObject {
+ return obj && '$ref' in obj
+}
+
+function generateBuilder(
+ operation: OpenAPIV3_1.OperationObject,
+ pathParams: (OpenAPIV3_1.ParameterObject | OpenAPIV3_1.ReferenceObject)[],
+ schemaGenerator: SchemaGenerator
+): string {
+ let builder = 'f.builder().def_json()'
+
+ const allParameters = [...pathParams]
+ if (operation.parameters) {
+ const pathParamNames = new Set(
+ pathParams.map((p) => (isReferenceObject(p) ? null : p.name))
+ )
+ operation.parameters.forEach((opParam) => {
+ if (
+ isReferenceObject(opParam) ||
+ !pathParamNames.has(opParam.name)
+ ) {
+ allParameters.push(opParam)
+ }
+ })
+ }
+
+ const queryParameters = allParameters.filter(
+ (p) => !isReferenceObject(p) && p.in === 'query'
+ ) as OpenAPIV3_1.ParameterObject[]
+ if (queryParameters.length > 0) {
+ const queryParamsString = queryParameters
+ .map((param) => {
+ const zodType = schemaGenerator.generateZodSchema(
+ param.schema as OpenAPIV3_1.SchemaObject,
+ param.name
+ )
+ const finalType = param.required
+ ? zodType
+ : `${zodType}.optional()`
+ return `${param.name}: ${finalType}`
+ })
+ .join(', ')
+ builder += `.def_searchparams(z.object({ ${queryParamsString} }).parse)`
+ }
+
+ if (operation.requestBody && !isReferenceObject(operation.requestBody)) {
+ const requestBody =
+ operation.requestBody as OpenAPIV3_1.RequestBodyObject
+ const jsonContent = requestBody.content?.['application/json']
+ const formContent = requestBody.content?.['multipart/form-data']
+
+ if (jsonContent?.schema && isReferenceObject(jsonContent.schema)) {
+ const modelName = toPascalCase(
+ jsonContent.schema.$ref.split('/').pop() || ''
+ )
+ builder += `.def_body(Model.${modelName}.parse)`
+ } else if (formContent) {
+ builder += `.def_body(z.instanceof(FormData).parse)`
+ }
+ }
+
+ const response =
+ operation.responses?.['200'] || operation.responses?.['201']
+ if (response && !isReferenceObject(response)) {
+ const mediaTypeObject = response.content?.['application/json']
+ if (mediaTypeObject?.schema) {
+ const schema = mediaTypeObject.schema
+ if (isReferenceObject(schema)) {
+ const modelName = toPascalCase(
+ schema.$ref.split('/').pop() || ''
+ )
+ builder += `.def_response(async ({ json }) => Model.${modelName}.parse(await json()))`
+ } else if (
+ schema.type === 'array' &&
+ schema.items &&
+ isReferenceObject(schema.items)
+ ) {
+ const modelName = toPascalCase(
+ schema.items.$ref.split('/').pop() || ''
+ )
+ builder += `.def_response(async ({ json }) => z.array(Model.${modelName}).parse(await json()))`
+ }
+ }
+ }
+ return builder
+}
+
+export function generateRouter(
+ parsedPaths: Record,
+ spec: OpenAPIV3_1.Document
+): string {
+ const httpMethods = new Set([
+ 'get',
+ 'put',
+ 'post',
+ 'delete',
+ 'options',
+ 'head',
+ 'patch',
+ 'trace',
+ ])
+ const openApiMetadataKeys = new Set([
+ 'summary',
+ 'description',
+ 'parameters',
+ 'servers',
+ '$ref',
+ ])
+
+ const schemaGenerator = new SchemaGenerator(spec)
+
+ function buildRouterObject(pathNode: Record): string {
+ const parts: string[] = []
+ const pathLevelParams = pathNode.parameters || []
+
+ for (const key in pathNode) {
+ const value = pathNode[key]
+ if (httpMethods.has(key.toLowerCase())) {
+ parts.push(
+ `'${key.toUpperCase()}': ${generateBuilder(value, pathLevelParams, schemaGenerator)}`
+ )
+ } else if (
+ typeof value === 'object' &&
+ value !== null &&
+ !openApiMetadataKeys.has(key)
+ ) {
+ parts.push(`'${key}': {\n${buildRouterObject(value)}\n}`)
+ }
+ }
+ return parts.join(',\n')
+ }
+
+ const routerObject = `{\n${buildRouterObject(parsedPaths)}\n}`
+ const baseUrl = spec.servers && spec.servers[0] ? spec.servers[0].url : ''
+
+ return `import { f } from '@freestylejs/fetch';
+import { z } from 'zod';
+import * as Model from './models';
+
+export const api = f.router('${baseUrl}', ${routerObject});`
+}
diff --git a/packages/openapi_generator/src/schema_generator.ts b/packages/openapi_generator/src/schema_generator.ts
new file mode 100644
index 0000000..feb005f
--- /dev/null
+++ b/packages/openapi_generator/src/schema_generator.ts
@@ -0,0 +1,298 @@
+import type { OpenAPIV3_1 } from 'openapi-types'
+import { SchemaValidationError } from './errors'
+import { toPascalCase } from './utils'
+
+function isReferenceObject(obj: any): obj is OpenAPIV3_1.ReferenceObject {
+ return obj && '$ref' in obj
+}
+
+export class SchemaGenerator {
+ private spec: OpenAPIV3_1.Document
+ private processedSchemas: Map = new Map()
+
+ constructor(spec: OpenAPIV3_1.Document) {
+ this.spec = spec
+ }
+
+ public generateZodSchema(
+ schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject,
+ nameHint: string = 'inline'
+ ): string {
+ return this.mapSchemaObjectToZod(nameHint, schema)
+ }
+
+ public generateModels(): string {
+ if (!this.spec.components || !this.spec.components.schemas) {
+ return ''
+ }
+ const schemas = Object.entries(this.spec.components.schemas)
+ const modelStrings: string[] = [`import { z } from 'zod';`]
+
+ for (const [name] of schemas) {
+ this.mapSchemaObjectToZod(name)
+ }
+
+ for (const [name, zodSchema] of this.processedSchemas.entries()) {
+ const pascalName = toPascalCase(name)
+ modelStrings.push(`export const ${pascalName} = ${zodSchema};`)
+ modelStrings.push(
+ `export type ${pascalName}Model = z.infer;`
+ )
+ }
+ return modelStrings.join('\n\n')
+ }
+
+ private resolveRef(ref: string): {
+ name: string
+ schema: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject
+ } {
+ if (!ref.startsWith('#/components/schemas/')) {
+ throw new SchemaValidationError(
+ `Unsupported $ref format: ${ref}`,
+ 'unknown',
+ ref,
+ 'Use the format "#/components/schemas/SchemaName" for schema references'
+ )
+ }
+ const name = ref.split('/').pop()
+ if (!name) {
+ throw new SchemaValidationError(
+ `Invalid $ref path: ${ref}`,
+ 'unknown',
+ ref,
+ 'Ensure $ref follows "#/components/schemas/SchemaName" format'
+ )
+ }
+ const schema = this.spec.components?.schemas?.[name]
+ if (!schema) {
+ throw new SchemaValidationError(
+ `Schema not found for $ref: ${ref}`,
+ name,
+ ref,
+ `Check that the schema "${name}" is defined in components.schemas`
+ )
+ }
+ return { name, schema }
+ }
+
+ private mapSchemaObjectToZod(
+ name: string,
+ schemaObject?: OpenAPIV3_1.SchemaObject | OpenAPIV3_1.ReferenceObject
+ ): string {
+ const schema = schemaObject || this.spec.components?.schemas?.[name]
+ if (!schema) {
+ throw new SchemaValidationError(
+ `Schema "${name}" not found in specification`,
+ name,
+ `components.schemas.${name}`,
+ 'Check that the schema is defined in the components.schemas section'
+ )
+ }
+
+ if (this.processedSchemas.has(name) && !schemaObject) {
+ return toPascalCase(name)
+ }
+
+ if (isReferenceObject(schema) && Object.keys(schema).length > 1) {
+ const { $ref, ...rest } = schema
+ const allOfSchema: OpenAPIV3_1.SchemaObject = {
+ allOf: [{ $ref }, rest as OpenAPIV3_1.SchemaObject],
+ }
+ return this.mapSchemaObjectToZod(name, allOfSchema)
+ }
+
+ if (isReferenceObject(schema)) {
+ const { name: refName } = this.resolveRef(schema.$ref)
+ this.mapSchemaObjectToZod(refName)
+ return toPascalCase(refName)
+ }
+
+ if (schema.allOf) {
+ const baseRef = schema.allOf[0]
+ const overrides = schema.allOf[1]
+
+ if (isReferenceObject(baseRef) && (overrides as any).$defs) {
+ const baseSchemaName = this.resolveRef(baseRef.$ref).name
+ this.mapSchemaObjectToZod(baseSchemaName)
+ const baseSchemaString =
+ this.processedSchemas.get(baseSchemaName)
+
+ if (!baseSchemaString) {
+ throw new SchemaValidationError(
+ `Base schema "${baseSchemaName}" not found in processed schemas`,
+ baseSchemaName,
+ `allOf[0].$ref`,
+ 'Ensure the base schema is defined before using it in allOf'
+ )
+ }
+
+ const itemRef = (overrides as any).$defs.productItem.$ref
+ const itemSchemaName = this.resolveRef(itemRef).name
+ const itemSchemaString =
+ this.mapSchemaObjectToZod(itemSchemaName)
+
+ const zodSchema = baseSchemaString.replace(
+ 'z.array(z.any())',
+ `z.array(${itemSchemaString})`
+ )
+ this.processedSchemas.set(name, zodSchema)
+ return zodSchema
+ }
+
+ const allOfSchemas = schema.allOf
+ .map((s) => this.mapSchemaObjectToZod(name, s))
+ .join('.and(')
+ const zodSchema = allOfSchemas + ')'.repeat(schema.allOf.length - 1)
+ if (!schemaObject) this.processedSchemas.set(name, zodSchema)
+ return zodSchema
+ }
+
+ // Expanded Union Handling: oneOf (discriminated & simple) and anyOf
+ if (schema.oneOf || schema.anyOf) {
+ const items = schema.oneOf || schema.anyOf || []
+ if (schema.oneOf && schema.discriminator) {
+ const discriminator = schema.discriminator.propertyName
+ const options = items.map((s) => {
+ if (!isReferenceObject(s)) {
+ throw new SchemaValidationError(
+ 'oneOf with discriminator must use $ref objects',
+ name,
+ 'oneOf',
+ 'Move inline schemas to components.schemas and reference them with $ref'
+ )
+ }
+ return this.mapSchemaObjectToZod(name, s)
+ })
+ const zodSchema = `z.discriminatedUnion('${discriminator}', [${options.join(', ')}])`
+ if (!schemaObject) this.processedSchemas.set(name, zodSchema)
+ return zodSchema
+ } else {
+ const options = items.map((s) =>
+ this.mapSchemaObjectToZod(name, s)
+ )
+ const zodSchema = `z.union([${options.join(', ')}])`
+ if (!schemaObject) this.processedSchemas.set(name, zodSchema)
+ return zodSchema
+ }
+ }
+
+ let zodString = 'z.any()'
+
+ // Handle simple types defined as arrays (e.g. type: ["string", "null"]) for OAS 3.1 nullability
+ if (Array.isArray(schema.type)) {
+ if (schema.type.length === 2 && schema.type.includes('null')) {
+ const nonNullType = schema.type.find((t) => t !== 'null')
+ if (nonNullType) {
+ // Create a temporary schema object to recurse
+ const innerSchema = {
+ ...schema,
+ type: nonNullType,
+ } as OpenAPIV3_1.SchemaObject
+ // We must remove 'null' from the type array to avoid infinite recursion if we passed schema.type back,
+ // but here we are constructing a new single-type object.
+ // Note: We lose other constraints if they were specific to one type, but standard OAS constraints apply to the instance.
+ zodString = `${this.mapSchemaObjectToZod(name, innerSchema)}.nullable()`
+ }
+ }
+ } else {
+ switch (schema.type) {
+ case 'string':
+ if (schema.const) {
+ zodString = `z.literal('${schema.const}')`
+ } else {
+ zodString = 'z.string()'
+ if (schema.enum) {
+ zodString = `z.enum([${schema.enum.map((e) => `'${e}'`).join(', ')}])`
+ }
+ if (schema.format === 'date-time')
+ zodString = 'z.iso.datetime()'
+ else if (schema.format === 'email')
+ zodString = 'z.email()'
+ else if (schema.format === 'uri') zodString = 'z.url()'
+ else if (schema.format === 'uuid')
+ zodString = 'z.uuid()' // use z.uuid() (not z.string().uuid())
+ if (schema.pattern)
+ zodString += `.regex(/${schema.pattern}/)`
+ }
+ break
+ case 'number':
+ zodString = 'z.number()'
+ if (schema.minimum !== undefined)
+ zodString += `.min(${schema.minimum})`
+ if (schema.maximum !== undefined)
+ zodString += `.max(${schema.maximum})`
+ break
+ case 'integer':
+ zodString = 'z.number().int()'
+ if (schema.minimum !== undefined)
+ zodString += `.min(${schema.minimum})`
+ if (schema.maximum !== undefined)
+ zodString += `.max(${schema.maximum})`
+ break
+ case 'boolean':
+ zodString = 'z.boolean()'
+ break
+ case 'array': {
+ if (!schema.items)
+ throw new Error('Array schema must have items defined.')
+ const itemSchema = this.mapSchemaObjectToZod(
+ name,
+ schema.items
+ )
+ zodString = `z.array(${itemSchema})`
+ break
+ }
+ case 'object':
+ if (schema.properties) {
+ const properties = Object.entries(schema.properties)
+ .map(([key, value]) => {
+ const isRequired =
+ schema.required?.includes(key)
+ const zodType = this.mapSchemaObjectToZod(
+ key,
+ value
+ )
+ const finalType = isRequired
+ ? zodType
+ : `${zodType}.optional()`
+ return `'${key}': ${finalType}`
+ })
+ .join(',\n')
+ zodString = `z.object({
+${properties}
+})`
+ } else {
+ zodString = `z.object({})`
+ }
+
+ // Handle additionalProperties
+ if (schema.additionalProperties) {
+ if (schema.additionalProperties === true) {
+ zodString += `.catchall(z.any())`
+ } else if (
+ typeof schema.additionalProperties === 'object'
+ ) {
+ const additionalSchema = this.mapSchemaObjectToZod(
+ name,
+ schema.additionalProperties
+ )
+ if (schema.properties) {
+ zodString += `.catchall(${additionalSchema})`
+ } else {
+ // If no properties, it is a Record
+ zodString = `z.record(${additionalSchema}, z.any())`
+ }
+ }
+ }
+ break
+ default:
+ break
+ }
+ }
+
+ if (!schemaObject) {
+ this.processedSchemas.set(name, zodString)
+ }
+ return zodString
+ }
+}
diff --git a/packages/openapi_generator/src/utils.ts b/packages/openapi_generator/src/utils.ts
new file mode 100644
index 0000000..7864b8d
--- /dev/null
+++ b/packages/openapi_generator/src/utils.ts
@@ -0,0 +1,54 @@
+/**
+ * Converts a string to PascalCase
+ * Handles kebab-case, snake_case, camelCase, spaces, and special characters
+ *
+ * @example
+ * toPascalCase("user-profile") // "UserProfile"
+ * toPascalCase("user_profile") // "UserProfile"
+ * toPascalCase("userProfile") // "UserProfile"
+ * toPascalCase("user profile") // "UserProfile"
+ * toPascalCase("$special-key") // "$SpecialKey"
+ * toPascalCase("APIKey") // "ApiKey" (treats consecutive capitals as one word)
+ */
+export function toPascalCase(str: string): string {
+ if (!str) return str
+
+ if (!/[\s\-_]/.test(str)) {
+ const words = str
+ .replace(/([a-z])([A-Z])/g, '$1 $2') // Split camelCase: "userId" -> "user Id"
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2') // Split "XMLParser" -> "XML Parser"
+ .split(' ')
+ .filter((word) => word.length > 0)
+
+ if (words.length === 1) {
+ const match = str.match(/^([^a-zA-Z0-9]*)(.*)$/)
+ if (!match) return str
+ const [, prefix, rest] = match
+ if (!rest) return str
+ return prefix + rest.charAt(0).toUpperCase() + rest.slice(1)
+ }
+ }
+
+ const words = str
+ .replace(/([a-z])([A-Z])/g, '$1 $2') // Split camelCase: "userId" -> "user Id"
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2') // Split "XMLParser" -> "XML Parser"
+ .split(/[\s\-_]+/) // Split on spaces, hyphens, underscores
+ .filter((word) => word.length > 0)
+
+ return words
+ .map((word) => {
+ // Preserve leading special characters (but not underscore which is a separator)
+ const match = word.match(/^([^a-zA-Z0-9]*)(.*)$/)
+ if (!match) return word
+
+ const [, prefix, rest] = match
+ if (!rest) return word
+
+ return (
+ prefix +
+ rest.charAt(0).toUpperCase() +
+ rest.slice(1).toLowerCase()
+ )
+ })
+ .join('')
+}
diff --git a/packages/openapi_generator/tsconfig.json b/packages/openapi_generator/tsconfig.json
new file mode 100644
index 0000000..f203bdd
--- /dev/null
+++ b/packages/openapi_generator/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "outDir": "./dist",
+ "baseUrl": "."
+ },
+ "include": ["src/**/*.ts"],
+ "exclude": ["node_modules", "dist"]
+}
diff --git a/packages/openapi_generator/tsup.config.ts b/packages/openapi_generator/tsup.config.ts
new file mode 100644
index 0000000..e3255d5
--- /dev/null
+++ b/packages/openapi_generator/tsup.config.ts
@@ -0,0 +1,17 @@
+import { defineConfig } from 'tsup'
+
+export default defineConfig((options) => ({
+ entry: {
+ index: 'src/index.ts',
+ },
+ watch: options.watch ? ['src/**/*'] : false,
+ clean: false,
+ dts: true,
+ outDir: 'dist',
+ // add swagger parser as inline deps
+ external: ['@apidevtools/swagger-parser'],
+ target: 'node18',
+ format: ['cjs'],
+ sourcemap: false,
+ shims: true,
+}))
diff --git a/packages/openapi_generator/vitest.config.ts b/packages/openapi_generator/vitest.config.ts
new file mode 100644
index 0000000..4fd5cf0
--- /dev/null
+++ b/packages/openapi_generator/vitest.config.ts
@@ -0,0 +1,8 @@
+import { defineConfig } from 'vitest/config'
+
+export default defineConfig({
+ test: {
+ globals: true,
+ environment: 'node',
+ },
+})
diff --git a/packages/web/CHANGELOG.md b/packages/web/CHANGELOG.md
new file mode 100644
index 0000000..30c8985
--- /dev/null
+++ b/packages/web/CHANGELOG.md
@@ -0,0 +1,12 @@
+# @freestylejs/fetch-web
+
+## 1.0.0
+
+### Major Changes
+
+- Major V1 release for fluent, type-safe fetch client using typescript.
+
+### Patch Changes
+
+- Updated dependencies
+ - @freestylejs/fetch@1.0.0
diff --git a/packages/web/components.json b/packages/web/components.json
new file mode 100644
index 0000000..dd7e879
--- /dev/null
+++ b/packages/web/components.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema.json",
+ "style": "new-york",
+ "rsc": true,
+ "tsx": true,
+ "tailwind": {
+ "config": "",
+ "css": "src/app/global.css",
+ "baseColor": "zinc",
+ "cssVariables": true,
+ "prefix": ""
+ },
+ "iconLibrary": "lucide",
+ "aliases": {
+ "components": "@/components",
+ "utils": "@/lib/utils",
+ "ui": "@/components/ui",
+ "lib": "@/lib",
+ "hooks": "@/hooks"
+ },
+ "registries": {}
+}
diff --git a/packages/web/content/docs/fetch/core-api/builder.mdx b/packages/web/content/docs/fetch/core-api/builder.mdx
new file mode 100644
index 0000000..13b11c2
--- /dev/null
+++ b/packages/web/content/docs/fetch/core-api/builder.mdx
@@ -0,0 +1,153 @@
+---
+title: FetchBuilder
+description: The fluent interface for constructing and configuring HTTP requests.
+---
+
+The `FetchBuilder` is the cornerstone of Fetch. It employs a **Fluent Interface** pattern, allowing you to chain configuration methods to define every aspect of an HTTP request.
+
+Each method call returns a **new, immutable** instance of the builder, ensuring that your base configurations remain reusable and side-effect-free.
+
+### Initialization
+
+You create a builder instance using the `f.builder()` factory method.
+
+```typescript
+import { f } from '@freestylejs/fetch';
+
+const builder = f.builder();
+```
+
+---
+
+### HTTP Configuration
+
+These methods configure the fundamental properties of the HTTP request.
+
+| Method | Signature | Description |
+| :--- | :--- | :--- |
+| `def_method` | `(method: FetchMethod) => Builder` | Sets the HTTP method (e.g., `'GET'`, `'POST'`, `'PUT'`, `'DELETE'`). Defaults to `'GET'`. |
+| `def_url` | `(url: string) => Builder` | Sets the request URL. Supports [Dynamic Paths](/en/docs/fetch/core-api/router#dynamic-paths) using the `$` prefix (e.g., `/users/$id`). |
+| `def_json` | `() => Builder` | Activates JSON mode. Automatically sets `Content-Type: application/json` and enables the `.json()` helper in the response handler. |
+| `def_query_mode` | `(mode: 'throw' \| 'not_throw') => Builder` | Determines if the `query()` method should throw an error on failure (`'throw'`) or return `undefined` (`'not_throw'`). Defaults to `'throw'`. |
+
+#### Example
+
+```typescript
+const getPost = f.builder()
+ .def_method('GET')
+ .def_url('https://api.example.com/posts/$postId')
+ .def_json();
+ .build()
+```
+
+---
+
+### Data Validation & Transformation
+
+These methods define the shape of data entering and leaving your request. They are crucial for **TypeScript inference**.
+
+| Method | Signature | Description |
+| :--- | :--- | :--- |
+| `def_body` | `(validator: (input: unknown) => T) => Builder` | Defines the request body schema. The `query()` method will require a `body` matching type `T`. |
+| `def_searchparams` | `(validator: (input: unknown) => T) => Builder` | Defines the URL search parameters schema. The `query()` method will require `search` matching type `T`. |
+| `def_response` | `(handler: (ctx) => R) => Builder` | Defines how to handle and transform the response. The return type `R` becomes the result of `query()`. |
+
+#### Example: Strictly Typed Request
+
+This example uses **Zod**, but you can use any validator function.
+
+```typescript
+import { z } from 'zod';
+
+const CreateUser = f.builder()
+ .def_method('POST')
+ .def_url('/users')
+ // 1. Enforce Body Shape
+ .def_body(z.object({
+ name: z.string(),
+ email: z.email(),
+ }).parse)
+ // 2. Enforce Search Params
+ .def_searchparams(z.object({
+ verbose: z.boolean().optional()
+ }).parse)
+ // 3. Parse Response
+ .def_response(async ({ json }) => {
+ const data = await json();
+ return z.object({ id: z.string() }).parse(data);
+ })
+ // 4. Build fetcher
+ .build()
+
+// Usage
+await CreateUser.query({
+ body: { name: 'Alice', email: 'alice@example.com' }, // Typed
+ search: { verbose: true } // Typed
+});
+```
+
+---
+
+### Lifecycle Hooks
+
+Hooks allow you to inject logic at specific stages of the request lifecycle.
+
+| Method | Description |
+| :--- | :--- |
+| `def_request_handler` | **Pre-flight interceptor.** Receives the standard `Request` object immediately before it is sent. Return the modified request. |
+| `def_fetch_err_handler` | **HTTP Error Handler.** Triggered when the response status is **not** 2xx. Receives `{ error: FetchResponseError, status: number }`. |
+| `def_unknown_err_handler` | **Network Error Handler.** Triggered when the fetch call itself fails (e.g., network offline, DNS failure). Receives `{ error: unknown }`. |
+| `def_final_handler` | **Finally Block.** Executed after the request completes, regardless of success or failure. Useful for cleanup or logging. |
+
+#### Example: Error Handling
+
+```typescript
+const safeRequest = f.builder()
+ .def_fetch_err_handler(({ status, error }) => {
+ if (status === 401) {
+ console.error('Unauthorized access');
+ // Redirect to login...
+ }
+ })
+ .def_final_handler(() => {
+ console.log('Request finished');
+ });
+```
+
+---
+
+### Middleware
+
+You can attach middleware to specific builders. For global middleware, it is recommended to use a shared builder instance or apply it manually.
+
+| Method | Signature |
+| :--- | :--- |
+| `def_middleware` | `(...middleware: MiddlewareFunction[]) => Builder` |
+
+See the [Middleware Guide](/en/docs/fetch/core-api/middleware) for detailed usage.
+
+---
+
+### Default Fetch Options
+
+You can pre-configure standard `fetch` options. These defaults can still be overridden when executing the query.
+
+| Method | Description |
+| :--- | :--- |
+| `def_default_headers` | Sets default headers. Merged with headers provided at query time. |
+| `def_default_cache` | Sets the cache mode (e.g., `'no-store'`, `'force-cache'`). |
+| `def_default_credentials` | Sets credentials mode (e.g., `'include'`, `'same-origin'`). |
+| `def_default_mode` | Sets the CORS mode (e.g., `'cors'`, `'no-cors'`). |
+| `def_default_redirect` | Sets redirect behavior (e.g., `'follow'`, `'error'`). |
+| `def_default_referrer` | Sets the referrer. |
+| `def_default_referrer_policy` | Sets the referrer policy. |
+| `def_default_integrity` | Sets the subresource integrity hash. |
+| `def_default_keepalive` | Enables/disables keepalive. |
+| `def_default_window` | Sets the associated window. |
+| `def_default_priority` | Sets the request priority. |
+
+```typescript
+const authenticatedBuilder = f.builder()
+ .def_default_headers({ 'Authorization': 'Bearer ...' })
+ .def_default_cache('no-store');
+```
\ No newline at end of file
diff --git a/packages/web/content/docs/fetch/core-api/error-handling.mdx b/packages/web/content/docs/fetch/core-api/error-handling.mdx
new file mode 100644
index 0000000..afec80f
--- /dev/null
+++ b/packages/web/content/docs/fetch/core-api/error-handling.mdx
@@ -0,0 +1,98 @@
+---
+title: Error Handling
+description: Strategies for managing HTTP and network errors.
+---
+
+Fetch provides structured ways to handle errors, distinguishing between **HTTP Errors** (e.g., 404, 500) and **Network Errors** (e.g., offline, DNS failure).
+
+### Error Types
+
+#### 1. HTTP Errors (`def_fetch_err_handler`)
+
+These occur when the server returns a response with a status code outside the 200-299 range.
+
+The handler receives an object with:
+- `error`: A `FetchResponseError` containing the response details.
+- `status`: The HTTP status code.
+
+```typescript
+f.builder()
+ .def_fetch_err_handler(async ({ error, status }) => {
+ if (status === 404) {
+ console.error('Resource not found');
+ }
+
+ // You can read the error body
+ const errorBody = await error.response.json();
+ console.error('Server message:', errorBody.message);
+ });
+```
+
+#### 2. Network Errors (`def_unknown_err_handler`)
+
+These occur when the `fetch` call itself fails to complete, usually due to network issues.
+
+```typescript
+f.builder()
+ .def_unknown_err_handler(({ error }) => {
+ console.error('Network failure:', error);
+ // Show offline message to user
+ });
+```
+
+### Handling Strategies
+
+#### Global Handling
+
+Create a base builder with your error handlers and reuse it across your application.
+
+```typescript
+// api-client.ts
+export const baseClient = f.builder()
+ .def_url('https://api.myapp.com')
+ .def_fetch_err_handler(({ status }) => {
+ if (status === 401) {
+ // Global logout trigger
+ logout();
+ }
+ });
+
+// users.ts
+import { baseClient } from './api-client';
+
+export const getUser = baseClient
+ .def_method('GET')
+ .def_url('/users/$id')
+ .build();
+```
+
+#### Per-Request Handling
+
+You can add specific handlers to individual requests. Note that handlers are **additive**; both global and local handlers will run unless you manage them otherwise.
+
+```typescript
+const getCriticalData = baseClient
+ .def_fetch_err_handler(({ status }) => {
+ // Specific handling for this request
+ if (status === 503) {
+ retryRequest();
+ }
+ })
+ .build();
+```
+
+### Throwing vs. Returning Undefined
+
+By default, `query()` throws an error if the request fails. You can change this behavior using `def_query_mode`.
+
+```typescript
+const safeFetcher = f.builder()
+ .def_query_mode('not_throw') // Returns undefined on error
+ .build();
+
+const result = await safeFetcher.query();
+
+if (!result) {
+ console.log('Request failed, but no exception was thrown.');
+}
+```
diff --git a/packages/web/content/docs/fetch/core-api/f.mdx b/packages/web/content/docs/fetch/core-api/f.mdx
new file mode 100644
index 0000000..3a477c2
--- /dev/null
+++ b/packages/web/content/docs/fetch/core-api/f.mdx
@@ -0,0 +1,18 @@
+---
+title: f (Namespace)
+description: The global entry point for Fetch.
+---
+
+The `f` namespace is your starting point. It bundles the core factories and classes into a single, convenient import.
+
+```typescript
+import { f } from '@freestylejs/fetch';
+```
+
+### API Reference
+
+| Property | Type | Description |
+| :--- | :--- | :--- |
+| [`f.builder`](/en/docs/fetch/core-api/builder) | `() => FetchBuilder` | **Factory**. Creates a new [FetchBuilder](/en/docs/fetch/core-api/builder) instance. Start here to define a new request. |
+| [`f.router`](/en/docs/fetch/core-api/router) | `Function` | **Utility**. Creates a structured [Router](/en/docs/fetch/core-api/router) client. |
+| [`f.Middleware`](/en/docs/fetch/core-api/middleware) | `Class` | **Class**. Instantiates a new [Middleware](/en/docs/fetch/core-api/middleware) manager. |
\ No newline at end of file
diff --git a/packages/web/content/docs/fetch/core-api/meta.json b/packages/web/content/docs/fetch/core-api/meta.json
new file mode 100644
index 0000000..8979ee6
--- /dev/null
+++ b/packages/web/content/docs/fetch/core-api/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Core API",
+ "pages": ["f", "builder", "unit", "router", "middleware", "error-handling"]
+}
diff --git a/packages/web/content/docs/fetch/core-api/middleware.mdx b/packages/web/content/docs/fetch/core-api/middleware.mdx
new file mode 100644
index 0000000..e989951
--- /dev/null
+++ b/packages/web/content/docs/fetch/core-api/middleware.mdx
@@ -0,0 +1,104 @@
+---
+title: Middleware
+description: Intercept and modify requests and responses in the pipeline.
+---
+
+Middleware provides a powerful mechanism to wrap request execution. It is ideal for cross-cutting concerns such as authentication, logging, global error handling, or response transformation.
+
+### Creating Middleware
+
+The `Middleware` class manages a stack of interceptor functions.
+
+```typescript
+import { f } from '@freestylejs/fetch';
+
+const authMiddleware = new f.Middleware();
+
+// Define a middleware function
+authMiddleware.use(async (request, next) => {
+ // --- Request Phase ---
+ // Modify the request before it's sent
+ const token = localStorage.getItem('token');
+ if (token) {
+ request.headers.set('Authorization', `Bearer ${token}`);
+ }
+
+ // --- Execution ---
+ // Call 'next' to proceed to the next middleware or the network call
+ const response = await next(request);
+
+ // --- Response Phase ---
+ // Inspect or modify the response
+ if (response.status === 401) {
+ // Handle token expiration
+ console.warn('Token expired!');
+ }
+
+ return response;
+});
+```
+
+### Common Use Cases
+
+#### 1. Logging Middleware
+
+```typescript
+const loggingMiddleware = new f.Middleware();
+
+loggingMiddleware.use(async (req, next) => {
+ const start = Date.now();
+ console.log(`[REQ] ${req.method} ${req.url}`);
+
+ try {
+ const res = await next(req);
+ const duration = Date.now() - start;
+ console.log(`[RES] ${res.status} (${duration}ms)`);
+ return res;
+ } catch (err) {
+ console.error(`[ERR] Request failed`, err);
+ throw err;
+ }
+});
+```
+
+### Applying Middleware
+
+You can apply middleware to any `FetchBuilder` using `.def_middleware()`.
+
+```typescript
+const client = f.builder()
+ // Spread the procedures from your middleware instance
+ .def_middleware(...loggingMiddleware.procedures, ...authMiddleware.procedures)
+ .def_url('https://api.example.com');
+```
+
+### Execution Pipeline
+
+Middleware follows an "onion" or "stack" model (similar to Koa or Express).
+
+1. **Request Phase**: Middleware functions run in the order they were added.
+2. **Network Call**: The actual `fetch` is executed.
+3. **Response Phase**: Middleware functions resume execution in **reverse order** (after `await next()`).
+
+```typescript
+const m = new f.Middleware();
+
+m.use(async (req, next) => {
+ console.log('1. Request');
+ await next(req);
+ console.log('4. Response');
+});
+
+m.use(async (req, next) => {
+ console.log('2. Request');
+ await next(req);
+ console.log('3. Response');
+});
+
+// Output:
+// 1. Request
+// 2. Request
+// (Network Request)
+// 3. Response
+// 4. Response
+```
\ No newline at end of file
diff --git a/packages/web/content/docs/fetch/core-api/router.mdx b/packages/web/content/docs/fetch/core-api/router.mdx
new file mode 100644
index 0000000..648a3bc
--- /dev/null
+++ b/packages/web/content/docs/fetch/core-api/router.mdx
@@ -0,0 +1,136 @@
+---
+title: Router
+description: Organize endpoints into a hierarchical, type-safe client.
+---
+
+The `router` function allows you to structure your API client to mirror your backend's URL hierarchy. It groups multiple `FetchUnit`s into a single, nested object, providing a clean and organized way to access your endpoints.
+
+### Visualizing the Router
+
+The router creates a tree structure where leaves are executable requests and nodes are path segments.
+
+```mermaid
+graph TD
+ %% --- Styles ---
+ classDef root fill:#6c5ce7,stroke:#fff,stroke-width:2px,color:#fff,font-weight:bold;
+ classDef pathNode fill:#dfe6e9,stroke:#b2bec3,stroke-width:2px,color:#2d3436,font-weight:bold;
+ classDef param fill:#a29bfe,stroke:#6c5ce7,stroke-width:2px,stroke-dasharray: 5 5,color:#fff,font-weight:bold;
+
+ %% Action Buttons (rx:5, ry:5 for slightly rounded corners)
+ classDef get fill:#e0f7fa,stroke:#00bcd4,stroke-width:2px,color:#006064,rx:5,ry:5;
+ classDef post fill:#f1f8e9,stroke:#8bc34a,stroke-width:2px,color:#33691e,rx:5,ry:5;
+ classDef delete fill:#ffebee,stroke:#ef5350,stroke-width:2px,color:#b71c1c,rx:5,ry:5;
+
+ %% --- Nodes ---
+
+ API([" API Root     "]):::root
+
+ Users[/" /users     "/]:::pathNode
+ UserId{{" :userId     "}}:::param
+ Posts[/" /posts     "/]:::pathNode
+
+ GetUsers["GET.ListUsers          "]:::get
+ PostUsers["POST.CreateUser          "]:::post
+ GetUser["GET.UserDetails          "]:::get
+ DelUser["DELETE.RemoveUser          "]:::delete
+ GetPosts["GET.UserPosts          "]:::get
+
+ %% --- Connections ---
+ API --> Users
+ Users --> GetUsers
+ Users --> PostUsers
+ Users --> UserId
+
+ UserId --> GetUser
+ UserId --> DelUser
+ UserId --> Posts
+
+ Posts --> GetPosts
+
+ %% Link Styling
+ linkStyle default stroke:#b2bec3,stroke-width:2px,fill:none;
+```
+
+### Defining a Router
+
+You define a router by passing a base URL and a structure object.
+
+```typescript
+import { f } from '@freestylejs/fetch';
+
+const api = f.router('https://api.example.com/v1', {
+ // Static path: /v1/health
+ health: {
+ GET: f.builder()
+ },
+
+ // Nested path: /v1/users
+ users: {
+ // HTTP Method: GET /v1/users
+ GET: f.builder().def_json(),
+
+ // Dynamic path: /v1/users/:userId
+ $userId: {
+ // GET /v1/users/:userId
+ GET: f.builder().def_json(),
+
+ // DELETE /v1/users/:userId
+ DELETE: f.builder(),
+
+ // Deeply nested: /v1/users/:userId/posts
+ posts: {
+ GET: f.builder().def_json()
+ }
+ }
+ }
+});
+```
+
+### Dynamic Paths (`$`)
+
+To define a dynamic path segment (e.g., `/users/:id`), use a key starting with `$`.
+
+- **Syntax**: `$paramName` (e.g., `$userId`, `$slug`).
+- **Inference**: The router detects these keys and enforces them as required arguments in the `path` object when you call `query()`.
+- **Path Building**: The router automatically constructs the full URL by replacing the dynamic segment with the provided value.
+
+#### Usage
+
+```typescript
+// Requesting: GET /v1/users/123
+await api.users.$userId.GET.query({
+ path: {
+ userId: '123' // Type-safe and required
+ }
+});
+
+// Requesting: GET /v1/users/123/posts
+await api.users.$userId.posts.GET.query({
+ path: {
+ userId: '123'
+ }
+});
+```
+
+### Type Inference
+
+To use your API client's type throughout your application (e.g., in React components or Vue composables), you can infer it using `GetRouterConfig`.
+
+This type represents the **return values** of your endpoints, not the router structure itself.
+
+```typescript
+import type { GetRouterConfig } from '@freestylejs/fetch';
+
+// Infers the shape of the responses
+type ApiClient = GetRouterConfig;
+
+// Example: Typing a function that uses the API
+async function loadUser(id: string): Promise {
+ return await api.users.$userId.GET.query({ path: { userId: id } });
+}
+```
+
+### Best Practices
+
+1. **Shared Configuration**: Create a "base builder" with common headers, middleware, and error handling, then reuse it for all routes.
+2. **Validation**: Use `.def_response()` on every route to ensure your runtime data matches your TypeScript types.
\ No newline at end of file
diff --git a/packages/web/content/docs/fetch/core-api/unit.mdx b/packages/web/content/docs/fetch/core-api/unit.mdx
new file mode 100644
index 0000000..878062a
--- /dev/null
+++ b/packages/web/content/docs/fetch/core-api/unit.mdx
@@ -0,0 +1,64 @@
+---
+title: FetchUnit
+description: The executable request object.
+---
+
+The `FetchUnit` is the final product of the `FetchBuilder` **created by `build` method**. It represents a fully configured request ready to be executed.
+
+### Methods
+
+#### `query(options?)`
+
+Executes the HTTP request.
+
+- **Returns**: `Promise` (where `T` is your defined response type).
+- **Options**:
+ - `path`: Object for dynamic path parameters (required if URL has `$param`).
+ - `body`: Request body (required if `def_body` is set).
+ - `search`: Search parameters (required if `def_searchparams` is set).
+ - `headers`: Additional headers to merge.
+ - `signal`: `AbortSignal` for cancellation.
+
+```typescript
+const response = await unit.query({
+ path: { id: '123' },
+ body: { name: 'New Name' }
+});
+```
+
+#### `set_options(options)`
+
+Creates a **new** `FetchUnit` with updated default fetch options. This is useful for overriding defaults (like headers) for a specific instance without rebuilding the whole chain.
+
+```typescript
+const authorizedUnit = unit.set_options({
+ headers: { 'Authorization': 'Bearer new-token' }
+});
+```
+
+#### `copy()`
+
+Creates a deep copy of the `FetchUnit`.
+
+```typescript
+const clone = unit.copy();
+```
+
+### Aborting Requests
+
+You can cancel a request using the standard `AbortController`.
+
+```typescript
+const controller = new AbortController();
+
+unit.query({
+ signal: controller.signal
+}).catch(err => {
+ if (err.name === 'AbortError') {
+ console.log('Request aborted');
+ }
+});
+
+// Cancel the request
+controller.abort();
+```
\ No newline at end of file
diff --git a/packages/web/content/docs/fetch/index.mdx b/packages/web/content/docs/fetch/index.mdx
new file mode 100644
index 0000000..49ceca0
--- /dev/null
+++ b/packages/web/content/docs/fetch/index.mdx
@@ -0,0 +1,49 @@
+---
+title: Fetch
+description: A type-safe, fluent fetch wrapper for TypeScript.
+---
+
+import { Card, Cards } from 'fumadocs-ui/components/card'
+import { NetworkIcon, RouteIcon, CodeIcon, LayersIcon } from 'lucide-react'
+
+## Philosophy
+
+**Fetch** reimagines HTTP requests in TypeScript. It moves away from loose, untyped `fetch` calls to a structured, type-safe, and fluent API.
+
+It is built on the **Builder Pattern**, ensuring that every request is constructed correctly before it is executed. With first-class support for **Zod** (or any validator), it bridges the gap between runtime data and static types.
+
+## Core Features
+
+
+ }
+ title="Fluent Builder"
+ description="Construct requests using a chainable, immutable builder API. Readable, maintainable, and safe."
+ href="/en/docs/fetch/core-api/builder"
+ />
+ }
+ title="Type-Safe Requests"
+ description="Infer request bodies, search parameters, and responses automatically. No more 'any'."
+ href="/en/docs/fetch/introduction/core-concepts"
+ />
+ }
+ title="Structured Routing"
+ description="Organize your API endpoints into a hierarchical, type-safe router structure."
+ href="/en/docs/fetch/core-api/router"
+ />
+ }
+ title="Middleware"
+ description="Intercept and modify requests and responses globally or per-route."
+ href="/en/docs/fetch/core-api/middleware"
+ />
+
+
+## What is Next?
+
+
+
+
+
diff --git a/packages/web/content/docs/fetch/introduction/core-concepts.mdx b/packages/web/content/docs/fetch/introduction/core-concepts.mdx
new file mode 100644
index 0000000..bbd21b7
--- /dev/null
+++ b/packages/web/content/docs/fetch/introduction/core-concepts.mdx
@@ -0,0 +1,54 @@
+---
+title: Core Concepts
+description: Understand the architecture of Fetch.
+---
+
+Fetch is built on three main pillars: the **Builder**, the **Unit**, and the **Router**. Understanding these concepts is key to using the library effectively.
+
+### The Builder Pattern
+
+Unlike the standard `fetch` API, where you pass a large configuration object, Fetch uses a **Fluent Builder** pattern.
+
+- **Immutability**: Every method call on the builder returns a *new* instance. This allows you to create a "base builder" and extend it for specific requests without side effects.
+- **Progressive Typing**: As you add definitions (like `.def_body()` or `.def_response()`), the builder's internal type definition evolves. This ensures that the final execute function knows exactly what inputs it needs and what output it returns.
+
+```typescript
+const base = f.builder().def_url('https://api.com');
+
+// New instance, 'base' is unchanged
+const postRequest = base.def_method('POST');
+```
+
+### The Fetch Unit
+
+When you call `.build()`, you get a **FetchUnit**. A Unit is a sealed, executable representation of a request.
+
+- **Execution**: The Unit exposes the `.query()` method.
+- **Requirements**: If you defined dynamic URL parameters (e.g., `$id`) or a request body in the builder, the `.query()` method will *require* them as arguments. You cannot compile a request that is missing data.
+
+```typescript
+// If the builder defined a body validator...
+const unit = builder.def_body(schema.parse).build();
+
+// ...the query method forces you to provide it.
+unit.query({ body: ... });
+```
+
+### The Router
+
+The **Router** is a structural tool. It doesn't change how requests are executed but organizes *where* they live.
+
+- **Mirroring**: The router structure typically mirrors your API's URL path structure.
+- **Namespace**: It groups related endpoints (e.g., `api.users.get`, `api.users.post`).
+- **Type Inference**: You can export the type of your router (`GetRouterConfig`), allowing you to use your API client type in other parts of your application (like React hooks or Vue composables) without importing the actual runtime logic.
+
+### Type Safety
+
+Fetch aims for **end-to-end type safety**.
+
+1. **Input**: You validate inputs (body, search params) using schemas.
+2. **Transport**: The builder tracks these types.
+3. **Output**: You validate responses using schemas.
+4. **Result**: The `.query()` result is fully typed.
+
+This eliminates the need to manually cast `response.json() as User`. If the server response doesn't match the schema, the validation logic throws, preventing runtime errors from propagating silently.
diff --git a/packages/web/content/docs/fetch/introduction/getting-started.mdx b/packages/web/content/docs/fetch/introduction/getting-started.mdx
new file mode 100644
index 0000000..5b2bf57
--- /dev/null
+++ b/packages/web/content/docs/fetch/introduction/getting-started.mdx
@@ -0,0 +1,96 @@
+---
+title: Getting Started
+description: Install and make your first request with Fetch.
+---
+
+import { Steps, Step } from 'fumadocs-ui/components/steps';
+import { Tabs, Tab } from 'fumadocs-ui/components/tabs';
+
+### Quick Start
+
+This guide will help you set up Fetch and start making type-safe HTTP requests.
+
+
+
+### 1. Prerequisites
+
+Ensure you have **TypeScript 4.5+** installed. Fetch relies on advanced TypeScript features for inference.
+
+
+
+### 2. Installation
+
+Install the `@freestylejs/fetch` package. We also recommend `zod` for validation. But you can use any library you want.
+
+
+
+ ```bash
+ npm install @freestylejs/fetch zod
+ ```
+
+
+ ```bash
+ pnpm add @freestylejs/fetch zod
+ ```
+
+
+ ```bash
+ yarn add @freestylejs/fetch zod
+ ```
+
+
+
+
+
+### 3. Create a Request Builder
+
+Import the `f` namespace to define a request. In this example, we'll fetch a user profile.
+
+```typescript
+import { f } from '@freestylejs/fetch';
+import { z } from 'zod';
+
+// 1. Define the response schema
+const UserSchema = z.object({
+ id: z.number(), // JSONPlaceholder uses numbers for IDs in response
+ name: z.string(),
+ email: z.email(),
+});
+
+// 2. Build the request
+const getUser = f.builder()
+ .def_method('GET')
+ // Define URL with a dynamic parameter ($id)
+ .def_url('https://jsonplaceholder.typicode.com/users/$id')
+ // Enable JSON mode (sets Content-Type and adds .json() helper)
+ .def_json()
+ // Handle and validate the response
+ .def_response(async ({ json }) => {
+ const data = await json();
+ return UserSchema.parse(data);
+ })
+ .build();
+```
+
+
+### 4. Execute the Request
+
+Use the `.query()` method to execute the request. Notice how the builder forces you to provide the `id` parameter because we defined `$id` in the URL.
+
+```typescript
+// The type of 'user' is inferred automatically as { id: string, name: string, email: string }
+const user = await getUser.query({
+ path: {
+ id: '1' // Type-safe: inferred from url (string because URL params are strings)
+ }
+});
+
+console.log(`Hello, ${user.name}!`);
+```
+
+
+
+## Next Steps
+
+- Learn about the **[Core Concepts](/en/docs/fetch/introduction/core-concepts)**.
+- See how to build a **[Router](/en/docs/fetch/core-api/router)**.
diff --git a/packages/web/content/docs/fetch/introduction/meta.json b/packages/web/content/docs/fetch/introduction/meta.json
new file mode 100644
index 0000000..9f22d22
--- /dev/null
+++ b/packages/web/content/docs/fetch/introduction/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Introduction",
+ "pages": ["getting-started", "core-concepts"]
+}
diff --git a/packages/web/content/docs/fetch/meta.json b/packages/web/content/docs/fetch/meta.json
new file mode 100644
index 0000000..956b8f2
--- /dev/null
+++ b/packages/web/content/docs/fetch/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Fetch",
+ "pages": ["index", "introduction", "core-api"]
+}
diff --git a/packages/web/content/docs/index.mdx b/packages/web/content/docs/index.mdx
new file mode 100644
index 0000000..8ffb25a
--- /dev/null
+++ b/packages/web/content/docs/index.mdx
@@ -0,0 +1,26 @@
+---
+title: Documentation
+description: Welcome to the Metal-TS documentation.
+---
+
+import { Card, Cards } from 'fumadocs-ui/components/card';
+import { BoxIcon, FileCodeIcon } from 'lucide-react';
+
+## Modules
+
+Welcome to the Metal-TS project documentation. Select a module to explore:
+
+
+ }
+ title="Fetch"
+ description="A type-safe, fluent fetch wrapper for TypeScript."
+ href="/en/docs/fetch"
+ />
+ }
+ title="OpenAPI Generator"
+ description="Generate type-safe API clients from OpenAPI specifications."
+ href="/en/docs/openapi-generator"
+ />
+
diff --git a/packages/web/content/docs/meta.json b/packages/web/content/docs/meta.json
new file mode 100644
index 0000000..78ba32f
--- /dev/null
+++ b/packages/web/content/docs/meta.json
@@ -0,0 +1,4 @@
+{
+ "title": "Overview",
+ "pages": ["index", "fetch", "openapi-generator"]
+}
diff --git a/packages/web/content/docs/openapi-generator/cli-reference.mdx b/packages/web/content/docs/openapi-generator/cli-reference.mdx
new file mode 100644
index 0000000..7ca9658
--- /dev/null
+++ b/packages/web/content/docs/openapi-generator/cli-reference.mdx
@@ -0,0 +1,175 @@
+---
+title: CLI Reference
+description: Complete reference for the OpenAPI Generator command-line interface.
+---
+
+## Commands
+
+The OpenAPI Generator provides a single `generate` command for creating API clients.
+
+### `generate`
+
+Generate a type-safe API client from an OpenAPI specification.
+
+```bash
+openapi-generator generate [options]
+```
+
+## Options
+
+| Option | Alias | Type | Required | Description |
+| ------ | ----- | ---- | -------- | ----------- |
+| `--input ` | `-i` | string | Yes | Path to the OpenAPI specification file (JSON or YAML). The generator automatically detects the format based on the file extension. |
+
+| `--output ` | `-o` | string | Yes | Directory where generated files will be saved |
+
+> **Note:** Both `.json` and `.yaml`/`.yml` files are supported. No additional flags are required.
+## Examples
+
+### Basic Generation
+
+Generate client files from a local specification:
+
+```bash
+openapi-generator generate \
+ --input ./api-spec.yaml \
+ --output ./src/api
+```
+
+### Using Relative Paths
+
+Paths are resolved relative to the current working directory:
+
+```bash
+openapi-generator generate \
+ -i ../specs/api.json \
+ -o ./generated
+```
+
+### With npx
+
+Run the generator without installation:
+
+```bash
+npx create-freestyle-fetch generate \
+ --input ./openapi.json \
+ --output ./src/generated
+```
+
+## Output Files
+
+The `generate` command creates three files in the output directory:
+
+### `models.ts`
+
+Contains Zod schemas for all components defined in your OpenAPI specification:
+
+```typescript
+import { z } from 'zod'
+
+export const User = z.object({
+ id: z.string(),
+ name: z.string(),
+ email: z.email()
+})
+
+export type UserModel = z.infer
+```
+
+### `api.ts`
+
+Contains the type-safe router with all API endpoints:
+
+```typescript
+import { f } from '@freestylejs/fetch'
+import { z } from 'zod'
+import * as Model from './models'
+
+export const api = f.router('https://api.example.com', {
+ users: {
+ $userId: {
+ GET: f.builder()
+ .def_json()
+ .def_response(async ({ json }) => Model.User.parse(await json()))
+ }
+ }
+})
+```
+
+### `index.ts`
+
+Re-exports all generated code for convenience:
+
+```typescript
+export * from './api'
+export * from './models'
+```
+
+## Error Handling
+
+The CLI provides clear error messages for common issues:
+
+### Invalid Specification
+
+If the OpenAPI file is invalid or cannot be parsed:
+
+```bash
+Error: Failed to parse OpenAPI specification
+ File: ./api-spec.yaml
+ Reason: Invalid YAML syntax at line 42
+```
+
+### Missing File
+
+If the input file does not exist:
+
+```bash
+Error: Input file not found
+ Path: ./api-spec.json
+```
+
+### Output Directory Issues
+
+The generator creates the output directory if it doesn't exist. Existing files are overwritten.
+
+## Best Practices
+
+### Version Control
+
+Add generated files to `.gitignore` and regenerate them during your build process:
+
+```bash
+# .gitignore
+src/generated/
+```
+
+```json
+{
+ "scripts": {
+ "generate": "openapi-generator generate -i ./spec.json -o ./src/generated",
+ "prebuild": "npm run generate"
+ }
+}
+```
+
+### CI/CD Integration
+
+Integrate generation into your CI/CD pipeline:
+
+```yaml
+# .github/workflows/build.yml
+steps:
+ - name: Generate API Client
+ run: |
+ npx create-freestyle-fetch generate \
+ --input ./openapi.json \
+ --output ./src/generated
+
+ - name: Build Application
+ run: npm run build
+```
+
+## Related
+
+- [Getting Started](/en/docs/openapi-generator/getting-started) - Installation and basic usage
+- [Generated Code](/en/docs/openapi-generator/generated-code) - Understanding the output
diff --git a/packages/web/content/docs/openapi-generator/generated-code.mdx b/packages/web/content/docs/openapi-generator/generated-code.mdx
new file mode 100644
index 0000000..b5ea493
--- /dev/null
+++ b/packages/web/content/docs/openapi-generator/generated-code.mdx
@@ -0,0 +1,205 @@
+---
+title: Generated Code
+description: Understanding the structure and usage of generated API clients.
+---
+
+## Overview
+
+The OpenAPI Generator creates three TypeScript files that work together to provide a complete, type-safe API client.
+
+## File Structure
+
+### models.ts
+
+Contains all Zod schemas derived from your OpenAPI components:
+
+- **Schemas** - Converted from `components.schemas` definitions
+- **Type exports** - TypeScript types inferred from Zod schemas
+- **Validation** - Runtime validation using Zod
+
+Example generated model:
+
+```typescript
+import { z } from 'zod'
+
+export const User = z.object({
+ id: z.string(),
+ username: z.string(),
+ email: z.email(),
+ createdAt: z.iso.datetime()
+})
+
+export type UserModel = z.infer
+```
+
+### api.ts
+
+Contains the hierarchical router mapping all API endpoints:
+
+- **Base URL** - Extracted from `servers[0].url` in the specification
+- **Nested routes** - Path segments become nested objects
+- **HTTP methods** - Each method is a pre-configured builder
+- **Type inference** - Full TypeScript support for all operations
+
+Example generated API:
+
+```typescript
+import { f } from '@freestylejs/fetch'
+import { z } from 'zod'
+import * as Model from './models'
+
+export const api = f.router('https://api.example.com', {
+ users: {
+ $userId: {
+ GET: f.builder()
+ .def_json()
+ .def_response(async ({ json }) => Model.User.parse(await json())),
+
+ posts: {
+ GET: f.builder()
+ .def_json()
+ .def_searchparams(z.object({
+ page: z.number().optional(),
+ limit: z.number().optional()
+ }).parse)
+ .def_response(async ({ json }) => z.array(Model.Post).parse(await json()))
+ }
+ }
+ }
+})
+```
+
+### index.ts
+
+Re-exports all generated code:
+
+```typescript
+export * from './api'
+export * from './models'
+```
+
+## Usage Patterns
+
+### Path Parameters
+
+Dynamic path segments use the `$paramName` syntax:
+
+```typescript
+// OpenAPI: /users/{userId}
+// Generated: api.users.$userId
+
+const user = await api.users.$userId.GET({
+ params: { userId: '123' }
+})
+```
+
+### Query Parameters
+
+Query parameters are validated with Zod schemas:
+
+```typescript
+// OpenAPI: /users?page=1&limit=10
+// Generated with searchparams
+
+const users = await api.users.GET({
+ query: {
+ page: 1,
+ limit: 10
+ }
+})
+```
+
+### Request Bodies
+
+Request bodies are validated against Zod schemas:
+
+```typescript
+// OpenAPI: POST /users with body
+// Generated with def_body
+
+const newUser = await api.users.POST({
+ body: {
+ username: 'john',
+ email: 'john@example.com'
+ }
+})
+```
+
+### Response Validation
+
+Responses are automatically validated:
+
+```typescript
+// Response is validated with zod at runtime
+const user = await api.users.$userId.GET({
+ params: { userId: '123' }
+})
+
+// TypeScript knows the exact shape
+user.username // string
+user.email // string
+```
+
+## Type Inference
+
+The generated client provides complete type inference:
+
+### Request Types
+
+```typescript
+// TypeScript infers the shape of params, query, and body
+api.users.$userId.GET({
+ params: { userId: '123' }, // Type: { userId: string }
+ query: { include: 'posts' } // Type: { include?: string }
+})
+```
+
+### Response Types
+
+```typescript
+// Response type is inferred from the Zod schema
+const user = await api.users.$userId.GET({
+ params: { userId: '123' }
+})
+
+// user: UserModel
+```
+
+## Schema Conversion
+
+The generator converts OpenAPI types to Zod schemas:
+
+| OpenAPI Type | Zod Schema | Example |
+| ------------ | ---------- | ------- |
+| `string` | `z.string()` | `"hello"` |
+| `number` | `z.number()` | `42` |
+| `integer` | `z.number().int()` | `10` |
+| `boolean` | `z.boolean()` | `true` |
+| `array` | `z.array(...)` | `[1, 2, 3]` |
+| `object` | `z.object({...})` | `{ key: "value" }` |
+| `string` (format: date-time) | `z.iso.datetime()` | `"2024-01-01T00:00:00Z"` |
+| `string` (format: email) | `z.email()` | `"user@example.com"` |
+| `string` (format: uuid) | `z.uuid()` | `"123e4567-e89b-12d3-..."` |
+| `string` (format: uri) | `z.url()` | `"https://example.com"` |
+| `string` (enum) | `z.enum([...])` | `"active"` |
+| `allOf` | `Schema1.and(Schema2)` | Intersection |
+| `oneOf` | `z.union([...])` | Union |
+| `oneOf` (discriminator) | `z.discriminatedUnion(...)` | Discriminated union |
+
+## Naming Conventions
+
+The generator converts OpenAPI names to PascalCase:
+
+- `user-profile` โ `UserProfile`
+- `api_key` โ `ApiKey`
+- `userSettings` โ `UserSettings`
+
+Special characters like `$` are preserved:
+
+- `$special` โ `$Special`
+
+## Related
+
+- [Validation](/en/docs/openapi-generator/validation) - Runtime validation details
+- [CLI Reference](/en/docs/openapi-generator/cli-reference) - Generation options
+- [Fetch Builder](/en/docs/fetch/core-api/builder) - Understanding the builder API
diff --git a/packages/web/content/docs/openapi-generator/getting-started.mdx b/packages/web/content/docs/openapi-generator/getting-started.mdx
new file mode 100644
index 0000000..18f169b
--- /dev/null
+++ b/packages/web/content/docs/openapi-generator/getting-started.mdx
@@ -0,0 +1,95 @@
+---
+title: Getting Started
+description: Install and use the OpenAPI Generator to create type-safe API clients.
+---
+
+## Installation
+
+Install the OpenAPI Generator package in your project:
+
+```bash
+npm install --save-dev create-freestyle-fetch
+```
+
+Or use it directly with `npx` without installation:
+
+```bash
+npx create-freestyle-fetch generate --input ./spec.yaml --output ./src/api
+```
+
+## Prerequisites
+
+Before using the OpenAPI Generator, ensure you have:
+
+- **Node.js 18+** installed on your system
+- An **Open API 3.1 specification file** (JSON or YAML format)
+- The **@freestylejs/fetch** library installed in your project (added automatically as a dependency)
+
+## Basic Usage
+
+### Generate Your First Client
+
+Create an API client from your OpenAPI specification:
+
+```bash
+npx create-freestyle-fetch generate \
+ --input ./openapi.yaml \
+ --output ./src/generated
+```
+
+This command generates three files in the output directory:
+
+- **`models.ts`** - Zod schemas for all data types
+- **`api.ts`** - Type-safe router with all API endpoints
+- **`index.ts`** - Re-exports for convenient imports
+
+### Use the Generated Client
+
+Import and use the generated API client in your application:
+
+```typescript
+import { api } from './generated'
+
+// GET request with path parameters
+const user = await api.users.$userId.GET({
+ params: { userId: '123' }
+})
+
+// POST request with request body
+const newPost = await api.posts.POST({
+ body: {
+ title: 'Hello World',
+ content: 'This is my first post'
+ }
+})
+
+// GET request with query parameters
+const posts = await api.posts.GET({
+ query: {
+ page: 1,
+ limit: 10,
+ sort: 'created_at'
+ }
+})
+```
+
+## Project Structure
+
+After generation, your project will have:
+
+```
+your-project/
+โโโ src/
+โ โโโ generated/
+โ โ โโโ models.ts # Zod schemas
+โ โ โโโ api.ts # API router
+โ โ โโโ index.ts # Exports
+โ โโโ your-code.ts # Your application
+โโโ openapi.yaml # API specification
+```
+
+## Next Steps
+
+- [CLI Reference](/en/docs/openapi-generator/cli-reference) - Learn all CLI options
+- [Generated Code](/en/docs/openapi-generator/generated-code) - Understand the output
+- [Validation](/en/docs/openapi-generator/validation) - Use Zod validation
diff --git a/packages/web/content/docs/openapi-generator/index.mdx b/packages/web/content/docs/openapi-generator/index.mdx
new file mode 100644
index 0000000..9f5676c
--- /dev/null
+++ b/packages/web/content/docs/openapi-generator/index.mdx
@@ -0,0 +1,73 @@
+---
+title: OpenAPI Generator
+description: Generate type-safe API clients from OpenAPI specifications.
+---
+
+import { Card, Cards } from 'fumadocs-ui/components/card'
+import { TerminalIcon, FileCodeIcon, ZapIcon, ShieldCheckIcon } from 'lucide-react'
+
+## What is OpenAPI Generator?
+
+**OpenAPI Generator** is a CLI tool that transforms OpenAPI specifications into fully type-safe TypeScript API clients powered by the `@freestylejs/fetch` library.
+
+It eliminates manual API client code and keeps your client in sync with your API specification. The generated code uses Zod for runtime validation and provides complete type inference for requests and responses.
+
+## Key Features
+
+
+ }
+ title="Simple CLI"
+ description="Generate clients with a single command. No configuration required."
+ href="/en/docs/openapi-generator/cli-reference"
+ />
+ }
+ title="Type-Safe Output"
+ description="Generates TypeScript code with full type inference for all API operations."
+ href="/en/docs/openapi-generator/generated-code"
+ />
+ }
+ title="Zod Validation"
+ description="Automatic runtime validation using Zod schemas for request and response data."
+ href="/en/docs/openapi-generator/validation"
+ />
+ }
+ title="Fetch Integration"
+ description="Generated clients use the @freestylejs/fetch fluent builder API."
+ href="/en/docs/fetch"
+ />
+
+
+## Quick Example
+
+Generate a fully typed API client from your OpenAPI specification:
+
+```bash
+npx create-freestyle-fetch generate \
+ --input ./api-spec.json \
+ --output ./src/api
+```
+
+Use the generated client in your code:
+
+```typescript
+import { api } from './api'
+
+// Fully typed request and response
+const user = await api.users.$userId.GET({
+ params: { userId: '123' }
+})
+
+// TypeScript knows the shape of `user`
+console.log(user.name, user.email)
+```
+
+## What is Next?
+
+
+
+
+
diff --git a/packages/web/content/docs/openapi-generator/meta.json b/packages/web/content/docs/openapi-generator/meta.json
new file mode 100644
index 0000000..4a1c63a
--- /dev/null
+++ b/packages/web/content/docs/openapi-generator/meta.json
@@ -0,0 +1,10 @@
+{
+ "title": "OpenAPI Generator",
+ "pages": [
+ "index",
+ "getting-started",
+ "cli-reference",
+ "generated-code",
+ "validation"
+ ]
+}
diff --git a/packages/web/content/docs/openapi-generator/validation.mdx b/packages/web/content/docs/openapi-generator/validation.mdx
new file mode 100644
index 0000000..6604afe
--- /dev/null
+++ b/packages/web/content/docs/openapi-generator/validation.mdx
@@ -0,0 +1,290 @@
+---
+title: Validation
+description: Runtime validation with Zod in generated API clients.
+---
+
+## Overview
+
+The OpenAPI Generator creates Zod schemas for all data types in your API specification. These schemas provide runtime validation for requests and responses, ensuring type safety at both compile-time and runtime.
+
+## Automatic Validation
+
+### Response Validation
+
+All responses are automatically validated before being returned:
+
+```typescript
+const user = await api.users.$userId.GET({
+ params: { userId: '123' }
+})
+
+// If the response doesn't match the User schema, Zod throws an error
+// Otherwise, user is guaranteed to match UserModel
+```
+
+The validation happens in the `.def_response()` method:
+
+```typescript
+.def_response(async ({ json }) => Model.User.parse(await json()))
+```
+
+### Request Body Validation
+
+Request bodies are validated using the `.def_body()` method:
+
+```typescript
+POST: f.builder()
+ .def_json()
+ .def_body(Model.CreateUser.parse)
+```
+
+When you make a request, the body is validated:
+
+```typescript
+await api.users.POST({
+ body: {
+ username: 'john',
+ email: 'invalid-email' // โ Zod error: Invalid email
+ }
+})
+```
+
+### Query Parameter Validation
+
+Query parameters are validated with `.def_searchparams()`:
+
+```typescript
+GET: f.builder()
+ .def_json()
+ .def_searchparams(z.object({
+ page: z.number().optional(),
+ limit: z.number().max(100).optional()
+ }).parse)
+```
+
+Invalid query parameters throw errors:
+
+```typescript
+await api.users.GET({
+ query: {
+ page: 1,
+ limit: 200 // โ Zod error: Number must be less than or equal to 100
+ }
+})
+```
+
+## Handling Validation Errors
+
+### Zod Error Structure
+
+When validation fails, Zod throws a `ZodError`:
+
+```typescript
+import { ZodError } from 'zod'
+
+try {
+ const user = await api.users.$userId.GET({
+ params: { userId: '123' }
+ })
+} catch (error) {
+ if (error instanceof ZodError) {
+ console.error('Validation failed:', error.errors)
+ // [{ path: ['email'], message: 'Invalid email' }]
+ }
+}
+```
+
+### Custom Error Handling
+
+Use the fetch library's error handlers for more control:
+
+```typescript
+const user = await api.users.$userId.GET({
+ params: { userId: '123' }
+}).fetch({
+ onError: (error) => {
+ if (error instanceof ZodError) {
+ // Handle validation errors
+ console.error('Data validation failed:', error.flatten())
+ } else {
+ // Handle other errors
+ console.error('Request failed:', error)
+ }
+ }
+})
+```
+
+## Schema Constraints
+
+The generator translates OpenAPI constraints to Zod:
+
+### String Constraints
+
+```typescript
+// OpenAPI
+{
+ "type": "string",
+ "minLength": 3,
+ "maxLength": 50,
+ "pattern": "^[a-zA-Z]+$"
+}
+
+// Generated Zod
+z.string().min(3).max(50).regex(/^[a-zA-Z]+$/)
+```
+
+### Number Constraints
+
+```typescript
+// OpenAPI
+{
+ "type": "number",
+ "minimum": 0,
+ "maximum": 100
+}
+
+// Generated Zod
+z.number().min(0).max(100)
+```
+
+### Array Constraints
+
+```typescript
+// OpenAPI
+{
+ "type": "array",
+ "items": { "type": "string" },
+ "minItems": 1,
+ "maxItems": 10
+}
+
+// Generated Zod
+z.array(z.string()).min(1).max(10)
+```
+
+### Object Constraints
+
+```typescript
+// OpenAPI
+{
+ "type": "object",
+ "required": ["name", "email"],
+ "properties": {
+ "name": { "type": "string" },
+ "email": { "type": "string", "format": "email" },
+ "age": { "type": "integer" }
+ }
+}
+
+// Generated Zod
+z.object({
+ name: z.string(),
+ email: z.email(),
+ age: z.number().int().optional()
+})
+```
+
+## Advanced Validation
+
+### Nullable Types (OAS 3.1)
+
+The generator supports OpenAPI 3.1 nullable types:
+
+```typescript
+// OpenAPI
+{
+ "type": ["string", "null"]
+}
+
+// Generated Zod
+z.string().nullable()
+```
+
+### Enums
+
+Enums are converted to Zod enums:
+
+```typescript
+// OpenAPI
+{
+ "type": "string",
+ "enum": ["active", "inactive", "pending"]
+}
+
+// Generated Zod
+z.enum(['active', 'inactive', 'pending'])
+```
+
+### Discriminated Unions
+
+The generator creates discriminated unions for `oneOf` with discriminators:
+
+```typescript
+// OpenAPI
+{
+ "oneOf": [
+ { "$ref": "#/components/schemas/Cat" },
+ { "$ref": "#/components/schemas/Dog" }
+ ],
+ "discriminator": {
+ "propertyName": "type"
+ }
+}
+
+// Generated Zod
+z.discriminatedUnion('type', [Cat, Dog])
+```
+
+### Intersection Types
+
+`allOf` creates intersection types:
+
+```typescript
+// OpenAPI
+{
+ "allOf": [
+ { "$ref": "#/components/schemas/BaseEntity" },
+ { "$ref": "#/components/schemas/Timestamped" }
+ ]
+}
+
+// Generated Zod
+BaseEntity.and(Timestamped)
+```
+
+## Performance Considerations
+
+### Schema Caching
+
+Zod schemas are created once and reused for all requests:
+
+```typescript
+// The schema is defined once
+export const User = z.object({
+ id: z.string(),
+ name: z.string()
+})
+
+// And reused for every request
+Model.User.parse(data) // No schema recreation
+```
+
+### Lazy Validation
+
+Consider using `.safeParse()` for non-critical validations:
+
+```typescript
+const result = Model.User.safeParse(data)
+
+if (result.success) {
+ const user = result.data
+} else {
+ console.warn('Invalid user data:', result.error)
+}
+```
+
+## Related
+
+- [Generated Code](/en/docs/openapi-generator/generated-code) - Understanding the output structure
+- [Zod Documentation](https://zod.dev) - Complete Zod reference
+- [Fetch Builder](/en/docs/fetch/core-api/builder) - Builder API details
diff --git a/packages/web/content/rules/WRITING_RULES.md b/packages/web/content/rules/WRITING_RULES.md
new file mode 100644
index 0000000..f9bf037
--- /dev/null
+++ b/packages/web/content/rules/WRITING_RULES.md
@@ -0,0 +1,126 @@
+# Documentation Writing Rules
+
+This document outlines the official guidelines for writing and structuring documentation for FreestyleJS Ani. Adhering to these rules ensures consistency, clarity, and maintainability across all our documentation.
+
+---
+
+## 1. Markdown Syntax (GFM)
+
+Leverage GitHub Flavoured Markdown (GFM) to create a better reading experience.
+
+### **Use Lists for Key Points**
+
+Instead of complex sentences with many connectives, use unordered lists (`-`) to present key features or points. This improves scannability.
+
+### **Use Tables for Structured Data**
+
+Tables are essential for presenting structured information like API parameters, props, or return values. This is the required format for documenting APIs.
+
+**Example:**
+
+| Name | Type | Description |
+| -------------- | ---------------- | ----------------------------------------- |
+| `timeline` | `Timeline` | The animation timeline instance to track. |
+| `initialValue` | `AniGroup` | The initial value of the animation state. |
+
+### **Use Headings for Structure**
+
+- Use headings (`##`, `###`) to break down content into logical, scannable sections.
+- Headings create anchor links, allowing for easy cross-referencing.
+- Give each step in a process a meaningful heading instead of using an ordered list.
+
+### **Use Bold for Emphasis**
+
+Use bold (`**text**`) to highlight important terms, concepts, or keywords. This helps readers who are skimming the content to quickly find relevant information.
+
+### **Use Code Blocks for Examples**
+
+- All technical examples, API definitions, and code snippets **must** be in code blocks with the correct language identifier (e.g., `tsx`, `typescript`, `svelte`, `vue`).
+- Use comments within code blocks to explain specific lines or concepts.
+- Keep examples focused and minimal.
+
+### **Use Hyperlinks for References**
+
+When mentioning another component, API, or external resource (e.g., `timeline`, `React`), link to the relevant documentation page or URL.
+
+---
+
+## 2. Writing Style
+
+Our documentation targets a global audience. Clarity and simplicity are paramount.
+
+### **Use Simple, Direct Language**
+
+- Use simple and accurate words. Avoid jargon or overly technical terms where a simpler alternative exists.
+- Be direct. Remove redundant or polite phrases.
+
+| Before | After |
+| -------------------------------------------- | ------------------------------------------ |
+| `You can configure the library by...` | `Configure the library by...` |
+| `If it doesn't work, you may try to...` | `If it doesn't work,...` |
+| `To enable B, you can configure C` | `To enable B, configure C` |
+
+### **"Subject First" Sentence Structure**
+
+Place the main subject at the beginning of the sentence. This makes the content easier to parse, especially for non-native English speakers.
+
+| Before | After |
+| ------------------------------------------------------------------- | ------------------------------------------------------------------- |
+| `One of the core concepts of the library, the timeline, is...` | `The timeline is a core concept of the library. It is...` |
+| `Moreover, as a web framework, Next.js is useful for React.js apps` | `Next.js is a web framework that is useful for building React.js apps` |
+
+### **No Long Paragraphs**
+
+- Keep paragraphs short and focused on a single idea.
+- A paragraph should generally be no longer than 5-7 lines.
+- Break up longer explanations into multiple paragraphs, each with a clear topic.
+
+### **Avoid Sequential Words**
+
+Do not use words like "first," "then," or "finally" to describe steps. People read from top to bottom, so the order is implicit. Use meaningful headings for each step instead.
+
+---
+
+## 3. Page Content and Organization
+
+How content is structured within a page is as important as the content itself.
+
+### **Define Acronyms**
+
+Spell out any acronyms or abbreviations the first time they are used on a page.
+
+### **No Duplicated Content**
+
+Avoid repeating the same information across multiple pages. If a concept is relevant in multiple places, explain it once on a dedicated page and link to it from the other pages. This makes maintenance easier.
+
+### **Dedicated API Sections**
+
+- Every exported function, hook, or component must have a dedicated documentation page.
+- Each page must include:
+ 1. A clear title and a one-sentence description.
+ 2. A minimal, complete, and verifiable code example.
+ 3. A "Usage & Concepts" section explaining the *why* and *how*.
+ 4. An "API Reference" section with tables for parameters, props, and return values.
+ 5. A "Related Components" section with links to other relevant APIs.
+
+### **"When to Use" Sections**
+
+For hooks or components that have alternatives (e.g., `useAni` vs. `useAniRef`), include a "When to Use" section that provides clear guidelines on which to choose in different scenarios. Use "Do" and "Don't" bullet points for clarity.
+
+---
+
+## 4. File and Navigation Structure
+
+A logical file structure is crucial for discoverability and maintainability.
+
+### **Dedicated Page per Topic**
+
+Each core concept, API, or feature should have its own dedicated page. This ensures that information is easy to find and update.
+
+### **No Overlapping Pages**
+
+Avoid creating multiple pages with similar purposes. For example, "Getting Started" and "Introduction" should be combined if their content overlaps significantly.
+
+### **Logical Learning Curve**
+
+Order pages in the navigation (`meta.json`) to follow a logical progression. Start with introductory concepts, move to core APIs, and then cover advanced topics and framework-specific bindings.
diff --git a/packages/web/next-env.d.ts b/packages/web/next-env.d.ts
new file mode 100644
index 0000000..c4b7818
--- /dev/null
+++ b/packages/web/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/packages/web/next.config.mjs b/packages/web/next.config.mjs
new file mode 100644
index 0000000..6ff62a5
--- /dev/null
+++ b/packages/web/next.config.mjs
@@ -0,0 +1,13 @@
+import { createMDX } from 'fumadocs-mdx/next'
+
+const withMdx = createMDX()
+
+/** @type {import('next').NextConfig} */
+const config = {
+ // output: 'export', // static build
+
+ reactStrictMode: true,
+ serverExternalPackages: ['typescript', 'twoslash'],
+}
+
+export default withMdx(config)
diff --git a/packages/web/package.json b/packages/web/package.json
new file mode 100644
index 0000000..ccac33b
--- /dev/null
+++ b/packages/web/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "@freestylejs/fetch-web",
+ "version": "1.0.0",
+ "private": true,
+ "scripts": {
+ "build": "next build",
+ "dev": "next dev",
+ "start": "next start",
+ "postinstall": "fumadocs-mdx"
+ },
+ "dependencies": {
+ "@freestylejs/ani-core": "^1.2.0",
+ "@freestylejs/ani-react": "^1.1.0",
+ "@freestylejs/fetch": "workspace:^",
+ "@radix-ui/react-slot": "^1.2.4",
+ "class-variance-authority": "^0.7.1",
+ "clsx": "^2.1.1",
+ "fumadocs-core": "16.0.8",
+ "fumadocs-mdx": "13.0.5",
+ "fumadocs-twoslash": "^3.1.10",
+ "fumadocs-typescript": "^4.0.13",
+ "fumadocs-ui": "16.0.8",
+ "lucide-react": "^0.552.0",
+ "mermaid": "^11.12.1",
+ "next": "16.0.1",
+ "octokit": "^5.0.5",
+ "react": "^19.2.0",
+ "react-dom": "^19.2.0",
+ "tailwind-merge": "^3.4.0",
+ "tailwindest": "^3.2.2",
+ "twoslash": "^0.3.4"
+ },
+ "devDependencies": {
+ "@tailwindcss/postcss": "^4.1.16",
+ "@takumi-rs/image-response": "^0.51.0",
+ "@types/mdx": "^2.0.13",
+ "@types/node": "^24.10.0",
+ "@types/react": "^19.2.2",
+ "@types/react-dom": "^19.2.2",
+ "feed": "^5.1.0",
+ "postcss": "^8.5.6",
+ "tailwindcss": "^4.1.16",
+ "tw-animate-css": "^1.4.0",
+ "typescript": "^5.9.3"
+ }
+}
diff --git a/packages/web/postcss.config.mjs b/packages/web/postcss.config.mjs
new file mode 100644
index 0000000..4d19be2
--- /dev/null
+++ b/packages/web/postcss.config.mjs
@@ -0,0 +1,5 @@
+export default {
+ plugins: {
+ '@tailwindcss/postcss': {},
+ },
+}
diff --git a/packages/web/public/fetch-banner.png b/packages/web/public/fetch-banner.png
new file mode 100644
index 0000000..04e4af9
Binary files /dev/null and b/packages/web/public/fetch-banner.png differ
diff --git a/packages/web/source.config.ts b/packages/web/source.config.ts
new file mode 100644
index 0000000..072b3fa
--- /dev/null
+++ b/packages/web/source.config.ts
@@ -0,0 +1,57 @@
+import { rehypeCodeDefaultOptions, remarkMdxMermaid } from 'fumadocs-core/mdx-plugins'
+import {
+ defineCollections,
+ defineConfig,
+ defineDocs,
+ frontmatterSchema,
+ metaSchema,
+} from 'fumadocs-mdx/config'
+import { transformerTwoslash } from 'fumadocs-twoslash'
+import { createGenerator, remarkAutoTypeTable } from 'fumadocs-typescript'
+import z from 'zod'
+
+const generator = createGenerator()
+
+// You can customise Zod schemas for frontmatter and `meta.json` here
+// see https://fumadocs.dev/docs/mdx/collections
+export const docs = defineDocs({
+ dir: 'content/docs',
+ docs: {
+ schema: frontmatterSchema,
+ postprocess: {
+ includeProcessedMarkdown: true,
+ },
+ },
+ meta: {
+ schema: metaSchema,
+ },
+})
+
+export const blog = defineCollections({
+ type: 'doc',
+ dir: 'content/blog',
+ schema: frontmatterSchema.extend({
+ title: z.string(),
+ description: z.string(),
+ author: z.string(),
+ update: z.date().or(z.date()),
+ draft: z.boolean().optional(),
+ }),
+})
+
+export default defineConfig({
+ lastModifiedTime: 'git',
+ mdxOptions: {
+ rehypeCodeOptions: {
+ themes: {
+ light: 'github-light',
+ dark: 'material-theme-palenight',
+ },
+ transformers: [
+ ...(rehypeCodeDefaultOptions.transformers ?? []),
+ transformerTwoslash(),
+ ],
+ },
+ remarkPlugins: [remarkMdxMermaid, [remarkAutoTypeTable, { generator }]],
+ },
+})
diff --git a/packages/web/src/app/[lang]/(home)/components/body_validation_demo.tsx b/packages/web/src/app/[lang]/(home)/components/body_validation_demo.tsx
new file mode 100644
index 0000000..342697a
--- /dev/null
+++ b/packages/web/src/app/[lang]/(home)/components/body_validation_demo.tsx
@@ -0,0 +1,211 @@
+/** biome-ignore-all lint/style/useConsistentCurlyBraces: */
+
+'use client'
+
+import { useState } from 'react'
+import { cn } from '@/lib/utils'
+
+export const BodyValidationDemo = () => {
+ const [name, setName] = useState('Alice')
+ const [age, setAge] = useState('30')
+ const [status, setStatus] = useState<
+ 'idle' | 'checking' | 'valid' | 'invalid'
+ >('idle')
+
+ const isValidName = name.length > 0
+ const isValidAge = !isNaN(Number(age)) && age.length > 0
+
+ const checkType = () => {
+ setStatus('checking')
+ setTimeout(() => {
+ if (isValidName && isValidAge) {
+ setStatus('valid')
+ setTimeout(() => setStatus('idle'), 2000)
+ } else {
+ setStatus('invalid')
+ setTimeout(() => setStatus('idle'), 2000)
+ }
+ }, 600)
+ }
+
+ return (
+
+ {/* Left: Input Form */}
+
+
+
+
+
+ {status === 'checking'
+ ? 'Validating...'
+ : status === 'valid'
+ ? 'Valid Payload'
+ : status === 'invalid'
+ ? 'Invalid Payload'
+ : 'Send Request'}
+
+
+
+
+ {/* Right: Code Sync Visual */}
+
+
+ const createUser =
+ f.builder()
+
+
+ {/* Validator Def */}
+
+ .def_body(
+ {/* FIX: Escaped open curly brace */}
+
t.object({'{'}
+
+ name: t.string ,
+
+
+ age: t.number
+
+
+ {'}'}).parse
+
+ )
+
+
.build()
+
+
+
+ {/* Runtime Check */}
+
+
// Runtime Execution
+
+ await {' '}
+ {/* FIX: Escaped open curly brace */}
+ createUser.query({'{'}
+
+ {/* FIX: Escaped open curly brace */}
+
body: {'{'}
+
+ name: "{name}",
+
+
+ age: {age || 'undefined'}
+
+
{'}'}
+
{'}'})
+
+
+
+ )
+}
+
+export const bodyValidationCode = `
+const createUser = f.builder()
+ .def_body(
+ // Pass the .parse function directly
+ t.object({
+ name: t.string,
+ age: t.number
+ }).parse
+ )
+ .build()
+
+// TypeScript & Runtime validation active!
+await createUser.query({
+ body: {
+ name: 'Alice',
+ age: 30
+ }
+})
+`
diff --git a/packages/web/src/app/[lang]/(home)/components/error_handling_demo.tsx b/packages/web/src/app/[lang]/(home)/components/error_handling_demo.tsx
new file mode 100644
index 0000000..c5ee317
--- /dev/null
+++ b/packages/web/src/app/[lang]/(home)/components/error_handling_demo.tsx
@@ -0,0 +1,210 @@
+// biome-ignore format: manual indentation needed for code preview
+
+"use client";
+
+import { useState } from 'react'
+import { cn } from '@/lib/utils'
+
+export const ErrorHandlingDemo = () => {
+ const [responseType, setResponseType] = useState<'200' | '404' | '500'>(
+ '200'
+ )
+ const [activeBlock, setActiveBlock] = useState<
+ 'none' | 'request' | 'error' | 'success' | 'finally'
+ >('none')
+ const [log, setLog] = useState([])
+
+ const execute = async () => {
+ setLog([])
+ setActiveBlock('request')
+ addLog('Sending Request...')
+
+ await new Promise((r) => setTimeout(r, 600))
+
+ if (responseType === '200') {
+ setActiveBlock('success')
+ addLog('โ Status 200 OK')
+ } else {
+ setActiveBlock('error')
+ addLog(`โ Error: ${responseType}`)
+ addLog(`Handling ${responseType}...`)
+ }
+
+ await new Promise((r) => setTimeout(r, 800))
+
+ setActiveBlock('finally')
+ addLog('โน Finally Block Executed')
+
+ await new Promise((r) => setTimeout(r, 800))
+ setActiveBlock('none')
+ }
+
+ const addLog = (msg: string) => setLog((prev) => [...prev, msg])
+
+ return (
+
+ {/* Left: Interactive Control */}
+
+
+
+ Server Simulation
+
+
+
setResponseType('200')}
+ className={cn(
+ 'px-4 py-1.5 font-medium text-xs transition-colors',
+ responseType === '200'
+ ? 'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400'
+ : 'hover:bg-zinc-50 dark:hover:bg-zinc-800'
+ )}
+ >
+ 200 OK
+
+
+
setResponseType('404')}
+ className={cn(
+ 'px-4 py-1.5 font-medium text-xs transition-colors',
+ responseType === '404'
+ ? 'bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400'
+ : 'hover:bg-zinc-50 dark:hover:bg-zinc-800'
+ )}
+ >
+ 404
+
+
+
setResponseType('500')}
+ className={cn(
+ 'px-4 py-1.5 font-medium text-xs transition-colors',
+ responseType === '500'
+ ? 'bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400'
+ : 'hover:bg-zinc-50 dark:hover:bg-zinc-800'
+ )}
+ >
+ 500
+
+
+
+
+
+
+ Console Output
+
+
+ {log.map((l, i) => (
+
+ {l}
+
+ ))}
+ {log.length === 0 && (
+
+ Waiting for execution...
+
+ )}
+
+
+
+
+ {activeBlock === 'none' ? 'Execute Request' : 'Running...'}
+
+
+
+ {/* Right: Code Sync */}
+
+
+ const request =
+ f.builder()
+
+
.def_url('/api')
+
+ {/* Request Handler */}
+
+ .def_request_handler(req ={'>'} req)
+
+
+ {/* Success Handler */}
+
+ .def_response(res ={'>'}{' '}
+ // 200 OK {'}'})
+
+
+ {/* Error Handler */}
+
+ .def_fetch_err_handler(({`{`}status{`}`}) ={'>'}{' '}
+ {
+
+ if (status
+ !== 200) log('Error')
+
+ }
+
+
+ {/* Finally Handler */}
+
+ .def_final_handler(() = {'>'}{' '}
+ {
log('Finally')
}
+
+
+
.build()
+
+
+ )
+}
+
+export const errorHandlingCode = `
+const request = f.builder()
+ .def_url('/api')
+ // 1. Handle HTTP Errors (4xx, 5xx)
+ .def_fetch_err_handler(({ status }) => {
+ console.error('HTTP Error:', status)
+ })
+ // 2. Cleanup
+ .def_final_handler(() => {
+ console.log('Always executed')
+ })
+ .build()
+`
diff --git a/packages/web/src/app/[lang]/(home)/components/feature_card.tsx b/packages/web/src/app/[lang]/(home)/components/feature_card.tsx
new file mode 100644
index 0000000..26e2958
--- /dev/null
+++ b/packages/web/src/app/[lang]/(home)/components/feature_card.tsx
@@ -0,0 +1,112 @@
+'use client'
+
+import { Code, Eye } from 'lucide-react'
+import { type ReactNode, useState } from 'react'
+
+import { CodeBlock } from '@/components/ui'
+import { Card, CardLink } from '@/components/ui/card'
+import { Glow } from '@/components/ui/glow'
+import { cn } from '@/lib/utils'
+
+interface FeatureCardProps {
+ title: string
+ description: string
+ code: string
+ link?: string
+ children: ReactNode
+}
+
+export function FeatureCard({
+ title,
+ description,
+ code,
+ link,
+ children,
+}: FeatureCardProps) {
+ const [view, setView] = useState<'preview' | 'code'>('preview')
+
+ return (
+
+
+
+ {/* Header */}
+
+
+
+ {title}
+
+
+ {description}
+
+
+ {link && (
+
+ )}
+
+
+ {/* Toolbar */}
+
+
+ setView('preview')}
+ className={cn(
+ 'flex items-center gap-2 rounded-md px-3 py-1.5 font-medium text-xs transition-all',
+ view === 'preview'
+ ? 'bg-white text-neutral-900 shadow-sm dark:bg-neutral-700 dark:text-white'
+ : 'text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200'
+ )}
+ >
+
+ Preview
+
+ setView('code')}
+ className={cn(
+ 'flex items-center gap-2 rounded-md px-3 py-1.5 font-medium text-xs transition-all',
+ view === 'code'
+ ? 'bg-white text-neutral-900 shadow-sm dark:bg-neutral-700 dark:text-white'
+ : 'text-neutral-500 hover:text-neutral-700 dark:text-neutral-400 dark:hover:text-neutral-200'
+ )}
+ >
+
+ Code
+
+
+
+
+ {/* Content Area - Grid Stack for Auto Height */}
+
+ {/* Preview */}
+
+ {children}
+
+
+ {/* Code */}
+
+
+
+
+
+ )
+}
diff --git a/packages/web/src/app/[lang]/(home)/components/fetch_builder_demo.tsx b/packages/web/src/app/[lang]/(home)/components/fetch_builder_demo.tsx
new file mode 100644
index 0000000..f875cab
--- /dev/null
+++ b/packages/web/src/app/[lang]/(home)/components/fetch_builder_demo.tsx
@@ -0,0 +1,283 @@
+/** biome-ignore-all lint/style/useConsistentCurlyBraces: */
+
+'use client'
+
+import { useState } from 'react'
+import { cn } from '@/lib/utils'
+
+export const FetchBuilderDemo = () => {
+ const [config, setConfig] = useState<{
+ method: 'GET' | 'POST'
+ url: boolean
+ json: boolean
+ built: boolean
+ }>({
+ method: 'GET',
+ url: false,
+ json: false,
+ built: false,
+ })
+
+ const [id, setId] = useState('123')
+ const [status, setStatus] = useState<'idle' | 'loading' | 'success'>('idle')
+
+ const handleSend = () => {
+ setStatus('loading')
+ setTimeout(() => setStatus('success'), 800)
+ setTimeout(() => {
+ setStatus('idle')
+ // Reset demo after success
+ setTimeout(() => {
+ setConfig({
+ method: 'GET',
+ url: false,
+ json: false,
+ built: false,
+ })
+ setId('123')
+ }, 1000)
+ }, 2000)
+ }
+
+ return (
+
+ {/* Left: Interactive Builder Config */}
+
+
+
+ Configure Builder
+
+
+ {/* 1. Method */}
+
+ setConfig((p) => ({
+ ...p,
+ method: p.method === 'GET' ? 'POST' : 'GET',
+ }))
+ }
+ className={cn(
+ 'flex items-center justify-between rounded-lg border px-3 py-2 font-medium text-xs transition-all',
+ config.built
+ ? 'opacity-50'
+ : 'hover:border-blue-400 hover:bg-blue-50 dark:hover:bg-blue-900/20',
+ 'border-zinc-200 bg-white dark:border-zinc-800 dark:bg-zinc-900'
+ )}
+ >
+ HTTP Method
+
+ {config.method}
+
+
+
+ {/* 2. URL */}
+
+ setConfig((p) => ({ ...p, url: !p.url }))
+ }
+ className={cn(
+ 'flex items-center justify-between rounded-lg border px-3 py-2 font-medium text-xs transition-all',
+ config.url
+ ? 'border-amber-500 bg-amber-50 dark:border-amber-800 dark:bg-amber-900/20'
+ : config.built
+ ? 'opacity-50'
+ : 'border-zinc-200 bg-white hover:border-zinc-300 dark:border-zinc-800 dark:bg-zinc-900'
+ )}
+ >
+ Add Dynamic URL
+
+ {config.url ? '/users/$id' : '(none)'}
+
+
+
+ {/* 3. JSON */}
+
+ setConfig((p) => ({ ...p, json: !p.json }))
+ }
+ className={cn(
+ 'flex items-center justify-between rounded-lg border px-3 py-2 font-medium text-xs transition-all',
+ config.json
+ ? 'border-purple-500 bg-purple-50 dark:border-purple-800 dark:bg-purple-900/20'
+ : config.built
+ ? 'opacity-50'
+ : 'border-zinc-200 bg-white hover:border-zinc-300 dark:border-zinc-800 dark:bg-zinc-900'
+ )}
+ >
+ Enable JSON Mode
+
+ {config.json ? 'true' : 'false'}
+
+
+
+ {/* 4. Build */}
+
+ setConfig((p) => ({ ...p, built: !p.built }))
+ }
+ className={cn(
+ 'mt-2 rounded-lg px-3 py-2 font-bold text-white text-xs transition-all',
+ config.built
+ ? 'bg-red-500 hover:bg-red-600'
+ : 'bg-zinc-900 hover:bg-zinc-700 dark:bg-zinc-100 dark:text-black'
+ )}
+ >
+ {config.built ? 'Reset Builder' : 'Build Unit'}
+
+
+
+
+ {/* Execution Control */}
+
+
+ Execute Request
+
+
+ {config.url && (
+
+
+ id:
+
+ setId(e.target.value)}
+ className="w-full bg-transparent font-mono text-sm text-zinc-700 outline-none dark:text-zinc-200"
+ spellCheck={false}
+ />
+
+ )}
+
+
+ {status === 'loading'
+ ? 'Sending...'
+ : status === 'success'
+ ? 'Sent!'
+ : '.query()'}
+
+
+
+
+ {/* Right: Live Code Generation */}
+
+
+ const getUser =
+ f.builder()
+
+
+ {/* Method */}
+
+ .def_method(
+ '{config.method}' )
+
+
+ {/* URL */}
+ {config.url && (
+
+ .def_url(
+
+ "https://api/users/
+ $id "
+
+ )
+
+ )}
+
+ {/* JSON */}
+ {config.json && (
+
+ .def_json()
+
+ )}
+
+ {/* Build */}
+ {config.built && (
+
+ .build()
+
+ )}
+
+
+
+ {/* Usage */}
+
+
+ await {' '}
+ {/* Improved: Added ({ for visual accuracy when URL is active */}
+ getUser.query{config.url ? '({' : '()'}
+
+ {config.url && (
+ <>
+
+ {/* FIX: Escaped the opening curly brace to prevent syntax error */}
+ path: {'{'}
+ id :{' '}
+ "{id}" {' '}
+ {'}'}
+
+
{'}'})
+ >
+ )}
+
+
+
+ )
+}
+
+export const fetchBuilderCode = `
+// 1. Interactive Construction
+const getUser = f.builder()
+ .def_method('GET')
+ .def_url('https://api/users/$id')
+ .def_json()
+ .build()
+
+// 2. Type-Safe Execution
+await getUser.query({
+ path: { id: '123' }
+})
+`
diff --git a/packages/web/src/app/[lang]/(home)/components/index.ts b/packages/web/src/app/[lang]/(home)/components/index.ts
new file mode 100644
index 0000000..ffc1c95
--- /dev/null
+++ b/packages/web/src/app/[lang]/(home)/components/index.ts
@@ -0,0 +1,7 @@
+export * from './body_validation_demo'
+export * from './error_handling_demo'
+export * from './feature_card'
+export * from './fetch_builder_demo'
+export * from './middleware_demo'
+export * from './response_inference_demo'
+export * from './router_demo'
diff --git a/packages/web/src/app/[lang]/(home)/components/middleware_demo.tsx b/packages/web/src/app/[lang]/(home)/components/middleware_demo.tsx
new file mode 100644
index 0000000..0c2e000
--- /dev/null
+++ b/packages/web/src/app/[lang]/(home)/components/middleware_demo.tsx
@@ -0,0 +1,317 @@
+/** biome-ignore-all lint/style/useConsistentCurlyBraces: */
+
+'use client'
+
+import { useState } from 'react'
+import { cn } from '@/lib/utils'
+
+export const MiddlewareDemo = () => {
+ const [stage, setStage] = useState(0)
+
+ // 0: Idle
+ // 1: Auth Request
+ // 2: Log Request
+ // 3: Server
+ // 4: Log Response
+ // 5: Auth Response
+ // 6: Complete (Wait state)
+
+ const run = () => {
+ setStage(1)
+ setTimeout(() => setStage(2), 800)
+ setTimeout(() => setStage(3), 1600)
+ setTimeout(() => setStage(4), 2400)
+ setTimeout(() => setStage(5), 3200)
+ setTimeout(() => setStage(6), 4000)
+ setTimeout(() => setStage(0), 6000) // Reset after 2s wait
+ }
+
+ return (
+
+ {/* Left: Pipeline Visual */}
+
+
+ {/* Client */}
+
+
+ {/* Pipeline */}
+
+ {/* The traveling dot */}
+
+
+
+
+ AUTH
+
+
+
+
+
+ LOG
+
+
+
+
+ {/* Server */}
+
+
+
+
+
+ โ Request Phase: Add Headers
+
+
+ โ Request Phase: Log Start
+
+
+ Processing...
+
+
+ โ Response Phase: Log End
+
+
+ โ Response Phase: Verify
+
+
+ โ Request Complete
+
+
+
+
+ {stage === 0
+ ? 'Execute Request'
+ : stage === 6
+ ? 'Done'
+ : 'Running Pipeline...'}
+
+
+
+ {/* Right: Code Sync Visual */}
+
+
+ const {' '}
+ middleware ={' '}
+ new f.Middleware()
+
+
+
+ // 1. Auth Middleware
+
+
+
middleware .
+
use (
+
async (req, next) =
+ {'>'}
+
+ req.headers.set(...){' '}
+ // โ Request
+
+
+ const res ={' '}
+ await next(req)
+
+
+ return res{' '}
+ // โ Response
+
+ {'}'}
+
+
+
+
+
+
+ // 2. Logging Middleware
+
+
+
+
middleware .
+
use (
+
async (req, next) =
+ {'>'}
+
+ console.log('Start'){' '}
+ // โ Request
+
+
+ const res ={' '}
+ await next(req)
+
+
+ console.log('End'){' '}
+ // โ Response
+
+
+ return res
+
+ {'}'}
+
+
+
+ )
+}
+
+export const middlewareCode = `
+const mw = new f.Middleware()
+
+// 1. Auth
+mw.use(async (req, next) => {
+ req.headers.set('Auth', '...')
+ const res = await next(req)
+ // Response verification
+ return res
+})
+
+// 2. Logger
+mw.use(async (req, next) => {
+ console.log('Req')
+ const res = await next(req)
+ console.log('Res')
+ return res
+})
+`
diff --git a/packages/web/src/app/[lang]/(home)/components/response_inference_demo.tsx b/packages/web/src/app/[lang]/(home)/components/response_inference_demo.tsx
new file mode 100644
index 0000000..4945c86
--- /dev/null
+++ b/packages/web/src/app/[lang]/(home)/components/response_inference_demo.tsx
@@ -0,0 +1,176 @@
+/** biome-ignore-all lint/style/useConsistentCurlyBraces: */
+
+'use client'
+
+import { useState } from 'react'
+import { cn } from '@/lib/utils'
+
+export const ResponseInferenceDemo = () => {
+ const [step, setStep] = useState(0)
+
+ const next = () => {
+ setStep((s) => (s + 1) % 4) // 0: Idle, 1: Network, 2: Validate, 3: Type Result
+ }
+
+ return (
+
+ {/* Left: Process Timeline */}
+
+
+ {/* Step 1: Network */}
+
1
+ ? 'border-zinc-200 bg-zinc-50 opacity-50 dark:border-zinc-800 dark:bg-zinc-900'
+ : 'border-transparent opacity-30'
+ )}
+ >
+
+ 1. Network Response
+
+
+ {`"Hello World"`}
+
+
+
+ {/* Step 2: Validation */}
+
2
+ ? 'border-zinc-200 bg-zinc-50 opacity-50 dark:border-zinc-800 dark:bg-zinc-900'
+ : 'border-transparent opacity-30'
+ )}
+ >
+
+ 2. Validate Schema
+
+
+ t.string.parse()
+
+
+
+ {/* Step 3: Inference */}
+
+
+ 3. Inferred Type
+
+
+ string
+
+
+
+
+
+ {step === 0
+ ? 'Start Request'
+ : step === 3
+ ? 'Reset'
+ : 'Next Step'}
+
+
+
+ {/* Right: Code Sync Visual */}
+
+
+ const getText =
+ f.builder()
+
+
.def_json()
+
+ {/* Definition Block */}
+
+ .def_response(
async {' '}
+ {/* FIX: Cleaned up syntax and escaped braces correctly */}(
+ {'{'} json {'}'}) ={'>'} {'{'}
+
+ // 1. Fetch JSON
+
+ const raw ={' '}
+ await json()
+
+
+ // 2. Validate
+
+ return {' '}
+ t.string.
+ parse
+ (raw)
+
+ {'}'})
+
+
.build()
+
+
+
+ {/* Usage Block */}
+
+
+ // 3. Result is typed!
+
+
+ const data ={' '}
+ await {' '}
+ getText.query()
+
+
+ ^ (const) data: string
+
+
+
+
+ )
+}
+
+export const responseInferenceCode = `
+const getText = f.builder()
+ .def_json()
+ .def_response(async ({ json }) => {
+ // 1. Get raw JSON
+ const raw = await json()
+
+ // 2. Parse & Validate
+ return t.string.parse(raw)
+ })
+ .build()
+
+// 3. Result is fully typed
+const data = await getText.query()
+// ^ type: string
+`
diff --git a/packages/web/src/app/[lang]/(home)/components/router_demo.tsx b/packages/web/src/app/[lang]/(home)/components/router_demo.tsx
new file mode 100644
index 0000000..f4e6b57
--- /dev/null
+++ b/packages/web/src/app/[lang]/(home)/components/router_demo.tsx
@@ -0,0 +1,341 @@
+/** biome-ignore-all lint/style/useConsistentCurlyBraces: */
+
+'use client'
+
+import { useState } from 'react'
+import { cn } from '@/lib/utils'
+
+export const RouterDemo = () => {
+ const [activePath, setActivePath] = useState([])
+ const [hovered, setHovered] = useState(null)
+
+ const isPathActive = (segment: string) => activePath.includes(segment)
+ const isHovered = (segment: string) => hovered === segment
+
+ const handleSegmentClick = (path: string[]) => {
+ setActivePath(path)
+ }
+
+ // Helper to render the inner builder code
+ const BuilderCode = () => (
+
+ f.
+
+ builder
+
+ ().build ()
+
+ )
+
+ return (
+
+
+ {/* Left: Router Definition (Interactive Code) */}
+
+
+ 1. Define Router
+
+
+
+
+ const
+ {' '}
+
+ api
+ {' '}
+ = f.router(
+ {/* FIX: Escaped curly brace correctly */}
+ BASE, {'{'}
+
+
+ {/* auth */}
+
+ handleSegmentClick(['auth'])}
+ onMouseEnter={() => setHovered('auth')}
+ onMouseLeave={() => setHovered(null)}
+ >
+ auth
+
+ {/* FIX: Escaped curly brace */}: {'{'}
+
+
+ {/* login */}
+
+
+ handleSegmentClick([
+ 'auth',
+ 'login',
+ 'POST',
+ ])
+ }
+ onMouseEnter={() => setHovered('login')}
+ onMouseLeave={() => setHovered(null)}
+ >
+ login
+
+ {/* FIX: Escaped curly brace */}: {'{'}
+ {isPathActive('login') ? (
+
+
+ POST
+
+ : ,
+
+ ) : (
+
...
+ )}
+ {/* FIX: Escaped curly brace */}
+ {'}'}
+
+
{'}'},
+
+ {/* users */}
+
+ handleSegmentClick(['users'])}
+ onMouseEnter={() => setHovered('users')}
+ onMouseLeave={() => setHovered(null)}
+ >
+ users
+
+ {/* FIX: Escaped curly brace */}: {'{'}
+
+
+ {/* $id */}
+
+
+ handleSegmentClick(['users', '$id'])
+ }
+ onMouseEnter={() => setHovered('$id')}
+ onMouseLeave={() => setHovered(null)}
+ >
+ $id
+
+ {/* FIX: Escaped curly brace */}: {'{'}
+
+
+ {/* $id.GET */}
+
+
+ handleSegmentClick(['users', '$id', 'GET'])
+ }
+ onMouseEnter={() => setHovered('GET')}
+ onMouseLeave={() => setHovered(null)}
+ >
+ GET
+
+ : ,
+
+
+ {/* $id.posts */}
+
+
+ handleSegmentClick([
+ 'users',
+ '$id',
+ 'posts',
+ 'GET',
+ ])
+ }
+ onMouseEnter={() => setHovered('posts')}
+ onMouseLeave={() => setHovered(null)}
+ >
+ posts
+
+ {/* FIX: Escaped curly brace */}: {'{'}
+ {isPathActive('posts') ? (
+
+
+ GET
+
+ :
+
+ ) : (
+
...
+ )}
+ {'}'}
+
+
+
{'}'}
+
{'}'}
+
{'}'})
+
+
+
+ {/* Right: Usage Preview (Generated Code) */}
+
+
+
2. Type-Safe Usage
+ {activePath.length > 0 && (
+
+ )}
+
+
+
await {' '}
+
api
+ {activePath.length === 0 && (
+
+ ...
+
+ )}
+ {/* Render Active Path Segments */}
+ {activePath.map((segment, i) => {
+ const isSegmentHovered = hovered === segment
+ let colorClass = 'text-zinc-100'
+ if (segment === '$id') colorClass = 'text-amber-400'
+ else if (['GET', 'POST'].includes(segment))
+ colorClass = 'text-emerald-400'
+
+ return (
+
+ .{segment}
+
+ )
+ })}
+ {/* Query Execution Block */}
+ {['GET', 'POST', 'PUT', 'DELETE'].includes(
+ activePath[activePath.length - 1]
+ ) && (
+
+ .
query (
+ {/* FIX: Replaced invalid nested syntax with explicit string escaping */}
+ {'{'}
+ {activePath.includes('$id') && (
+
+ path: {'{'}
+
+ id
+
+ :{' '}
+
+ "123"
+ {' '}
+ {'}'},
+
+ )}
+ {activePath.includes('login') && (
+
+ body: {'{'}
+
+ email
+
+ :{' '}
+
+ "..."
+ {' '}
+ {'}'},
+
+ )}
+ {'}'})
+
+ )}
+
+
+
+
+ Select a route definition to generate its type-safe client usage
+
+
+ )
+}
+
+export const routerCode = `
+// 1. Define Nested Router
+const api = f.router('https://api.com', {
+ auth: {
+ login: {
+ POST: f.builder().build()
+ }
+ },
+ users: {
+ $id: {
+ GET: f.builder().build(),
+ },
+ posts: {
+ GET: f.builder().build()
+ }
+ }
+})
+
+// 2. Use with Autocomplete
+await api.users.$id.GET.query({
+ path: { id: '123' } // Typed & Required!
+})
+`
diff --git a/packages/web/src/app/[lang]/(home)/layout.tsx b/packages/web/src/app/[lang]/(home)/layout.tsx
new file mode 100644
index 0000000..03c0866
--- /dev/null
+++ b/packages/web/src/app/[lang]/(home)/layout.tsx
@@ -0,0 +1,12 @@
+/** biome-ignore-all lint/style/noDefaultExport: */
+import { HomeLayout } from 'fumadocs-ui/layouts/home'
+import { baseOptions } from '@/lib/layout.shared'
+
+export default async function Layout({
+ children,
+ params,
+}: LayoutProps<'/[lang]'>) {
+ const { lang } = await params
+
+ return {children}
+}
diff --git a/packages/web/src/app/[lang]/(home)/page.tsx b/packages/web/src/app/[lang]/(home)/page.tsx
new file mode 100644
index 0000000..732a62a
--- /dev/null
+++ b/packages/web/src/app/[lang]/(home)/page.tsx
@@ -0,0 +1,88 @@
+import { Banner } from '@/components/banner'
+import { CONFIG } from '@/constant/config'
+import {
+ BodyValidationDemo,
+ bodyValidationCode,
+ ErrorHandlingDemo,
+ errorHandlingCode,
+ FeatureCard,
+ FetchBuilderDemo,
+ fetchBuilderCode,
+ MiddlewareDemo,
+ middlewareCode,
+ ResponseInferenceDemo,
+ RouterDemo,
+ responseInferenceCode,
+ routerCode,
+} from './components'
+
+export default function HomePage() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/packages/web/src/app/[lang]/docs/[[...slug]]/page.tsx b/packages/web/src/app/[lang]/docs/[[...slug]]/page.tsx
new file mode 100644
index 0000000..b6d0875
--- /dev/null
+++ b/packages/web/src/app/[lang]/docs/[[...slug]]/page.tsx
@@ -0,0 +1,67 @@
+import { createRelativeLink } from 'fumadocs-ui/mdx'
+import {
+ DocsBody,
+ DocsDescription,
+ DocsPage,
+ DocsTitle,
+} from 'fumadocs-ui/page'
+import type { Metadata } from 'next'
+import { Inter } from 'next/font/google'
+import { notFound } from 'next/navigation'
+import { docSource, getPageImage } from '@/lib/source'
+import { getMDXComponents } from '@/mdx_components'
+
+const inter = Inter({
+ subsets: ['latin'],
+ weight: '300',
+})
+
+export default async function Page(
+ props: PageProps<'/[lang]/docs/[[...slug]]'>
+) {
+ const { slug, lang } = await props.params
+
+ const page = docSource.getPage(slug, lang)
+
+ if (!page) notFound()
+
+ const MDX = page.data.body
+
+ return (
+
+ {page.data.title}
+
+ {page.data.description}
+
+
+
+
+
+ )
+}
+
+export async function generateStaticParams() {
+ return docSource.generateParams()
+}
+
+export async function generateMetadata(
+ props: PageProps<'/[lang]/docs/[[...slug]]'>
+): Promise {
+ const { slug, lang } = await props.params
+
+ const page = docSource.getPage(slug, lang)
+
+ if (!page) notFound()
+
+ return {
+ title: page.data.title,
+ description: page.data.description,
+ openGraph: {
+ images: getPageImage(page).url,
+ },
+ }
+}
diff --git a/packages/web/src/app/[lang]/docs/layout.tsx b/packages/web/src/app/[lang]/docs/layout.tsx
new file mode 100644
index 0000000..4f42128
--- /dev/null
+++ b/packages/web/src/app/[lang]/docs/layout.tsx
@@ -0,0 +1,15 @@
+import { DocsLayout } from 'fumadocs-ui/layouts/docs'
+import { baseOptions } from '@/lib/layout.shared'
+import { docSource } from '@/lib/source'
+
+export default async function Layout({
+ params,
+ children,
+}: LayoutProps<'/[lang]/docs'>) {
+ const { lang } = await params
+ return (
+
+ {children}
+
+ )
+}
diff --git a/packages/web/src/app/[lang]/layout.tsx b/packages/web/src/app/[lang]/layout.tsx
new file mode 100644
index 0000000..0a87514
--- /dev/null
+++ b/packages/web/src/app/[lang]/layout.tsx
@@ -0,0 +1,54 @@
+import { tw } from '@/lib/utils'
+import '../global.css'
+
+import { defineI18nUI } from 'fumadocs-ui/i18n'
+import { RootProvider } from 'fumadocs-ui/provider/next'
+import { Darker_Grotesque, Inter } from 'next/font/google'
+import { i18n } from '@/lib/i18n/i18n'
+
+const inter = Inter({
+ subsets: ['latin'],
+})
+
+const darkerGrotesque = Darker_Grotesque({
+ subsets: ['latin'],
+ style: 'normal',
+})
+
+const { provider } = defineI18nUI(i18n, {
+ translations: {
+ en: {
+ displayName: 'English',
+ },
+ // ko: {
+ // displayName: 'ํ๊ตญ์ด',
+ // },
+ },
+})
+
+export default async function Layout({
+ params,
+ children,
+}: LayoutProps<'/[lang]'>) {
+ const lang = (await params).lang
+
+ return (
+
+
+
+ {children}
+
+
+
+ )
+}
diff --git a/packages/web/src/app/[lang]/llms-full.txt/route.ts b/packages/web/src/app/[lang]/llms-full.txt/route.ts
new file mode 100644
index 0000000..0d23517
--- /dev/null
+++ b/packages/web/src/app/[lang]/llms-full.txt/route.ts
@@ -0,0 +1,11 @@
+import { getLLMText } from '@/lib/llm/get_llm_text'
+import { docSource } from '@/lib/source'
+
+export const revalidate = false
+
+export async function GET() {
+ const scan = docSource.getPages().map(getLLMText)
+ const scanned = await Promise.all(scan)
+
+ return new Response(scanned.join('\n\n'))
+}
diff --git a/packages/web/src/app/[lang]/llms.txt/route.ts b/packages/web/src/app/[lang]/llms.txt/route.ts
new file mode 100644
index 0000000..534c0c3
--- /dev/null
+++ b/packages/web/src/app/[lang]/llms.txt/route.ts
@@ -0,0 +1,25 @@
+import { docSource } from '@/lib/source'
+
+export const revalidate = false
+
+export async function GET() {
+ const scanned: string[] = []
+ scanned.push('# Docs')
+ const map = new Map()
+
+ for (const page of docSource.getPages()) {
+ const dir = page.slugs[0]
+ const list = map.get(dir) ?? []
+ list.push(
+ `- [${page.data.title}](${page.url}): ${page.data.description}`
+ )
+ map.set(dir, list)
+ }
+
+ for (const [key, value] of map) {
+ scanned.push(`## ${key}`)
+ scanned.push(value.join('\n'))
+ }
+
+ return new Response(scanned.join('\n\n'))
+}
diff --git a/packages/web/src/app/[lang]/llms/[...slug]/route.ts b/packages/web/src/app/[lang]/llms/[...slug]/route.ts
new file mode 100644
index 0000000..27938b7
--- /dev/null
+++ b/packages/web/src/app/[lang]/llms/[...slug]/route.ts
@@ -0,0 +1,25 @@
+import { notFound } from 'next/navigation'
+import { type NextRequest, NextResponse } from 'next/server'
+import { getLLMText } from '@/lib/llm/get_llm_text'
+import { docSource } from '@/lib/source'
+
+export const revalidate = false
+
+export async function GET(
+ _req: NextRequest,
+ { params }: RouteContext<'/[lang]/llms/[...slug]'>
+) {
+ const slug = (await params).slug
+ const page = docSource.getPage(slug)
+ if (!page) notFound()
+
+ return new NextResponse(await getLLMText(page), {
+ headers: {
+ 'Content-Type': 'text/markdown',
+ },
+ })
+}
+
+export function generateStaticParams() {
+ return docSource.generateParams().filter((param) => param.slug.length > 0)
+}
diff --git a/packages/web/src/app/api/search/route.ts b/packages/web/src/app/api/search/route.ts
new file mode 100644
index 0000000..9899c83
--- /dev/null
+++ b/packages/web/src/app/api/search/route.ts
@@ -0,0 +1,4 @@
+import { createFromSource } from 'fumadocs-core/search/server'
+import { docSource } from '@/lib/source'
+
+export const { GET } = createFromSource(docSource, {})
diff --git a/packages/web/src/app/blog/[slug]/page.tsx b/packages/web/src/app/blog/[slug]/page.tsx
new file mode 100644
index 0000000..6d334b9
--- /dev/null
+++ b/packages/web/src/app/blog/[slug]/page.tsx
@@ -0,0 +1,145 @@
+import path from 'node:path'
+import DynamicLink from 'fumadocs-core/dynamic-link'
+import type { Metadata } from 'next'
+import { Darker_Grotesque, DM_Serif_Display, Inter } from 'next/font/google'
+import { notFound } from 'next/navigation'
+import { ShareButton } from '@/components/ui'
+import { buttonVariants } from '@/components/ui/button'
+import { createMetadata } from '@/lib/metadata/create_metadata'
+import { blogSource } from '@/lib/source'
+import { cn, tw } from '@/lib/utils'
+import { getMDXComponents } from '@/mdx_components'
+
+const inter = Inter({
+ subsets: ['latin'],
+ weight: '300',
+})
+
+const _dmSerif = DM_Serif_Display({
+ weight: '400',
+ subsets: ['latin'],
+})
+
+const darkerGrotesque = Darker_Grotesque({
+ subsets: ['latin'],
+ style: 'normal',
+})
+
+export default async function Page(props: PageProps<'/blog/[slug]'>) {
+ const params = await props.params
+ const page = blogSource.getPage([params.slug])
+
+ if (!page) notFound()
+ if (page.data.draft) notFound()
+
+ const { body: Mdx, toc } = page.data
+
+ return (
+
+
+
+
+
+ {page.data.title}
+
+
+ {page.data.description}
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export async function generateMetadata(
+ props: PageProps<'/blog/[slug]'>
+): Promise {
+ const params = await props.params
+ const page = blogSource.getPage([params.slug])
+
+ if (!page) notFound()
+
+ return createMetadata({
+ title: page.data.title,
+ description: page.data.description,
+ })
+}
+
+export function generateStaticParams(): Array<{ slug: string }> {
+ const staticParams = blogSource
+ .getPages()
+ .filter((p) => Boolean(p.data.draft) === false)
+ .map((p) => p.slugs)
+ .filter((s) => s.length > 0)
+ .map((s) => ({ slug: s[0] }))
+
+ return staticParams
+}
diff --git a/packages/web/src/app/blog/layout.tsx b/packages/web/src/app/blog/layout.tsx
new file mode 100644
index 0000000..54bcfd6
--- /dev/null
+++ b/packages/web/src/app/blog/layout.tsx
@@ -0,0 +1,37 @@
+import '../global.css'
+
+import { HomeLayout } from 'fumadocs-ui/layouts/home'
+import { RootProvider } from 'fumadocs-ui/provider/next'
+import { Darker_Grotesque, Inter } from 'next/font/google'
+
+import { CONFIG } from '@/constant/config'
+
+import { baseOptions } from '@/lib/layout.shared'
+import { tw } from '@/lib/utils'
+
+const inter = Inter({
+ subsets: ['latin'],
+})
+
+const darkerGrotesque = Darker_Grotesque({
+ subsets: ['latin'],
+ style: 'normal',
+})
+
+export default function Layout({ children }: LayoutProps<'/blog'>) {
+ return (
+
+
+
+
+ {children}
+
+
+
+
+ )
+}
diff --git a/packages/web/src/app/blog/page.tsx b/packages/web/src/app/blog/page.tsx
new file mode 100644
index 0000000..74dffb2
--- /dev/null
+++ b/packages/web/src/app/blog/page.tsx
@@ -0,0 +1,65 @@
+/** biome-ignore-all lint/style/noDefaultExport: */
+import { PathUtils } from 'fumadocs-core/source'
+import Link from 'next/link'
+import { Banner } from '@/components/banner'
+import { CONFIG } from '@/constant/config'
+import { blogSource } from '@/lib/source'
+
+function getName(path: string) {
+ return PathUtils.basename(path, PathUtils.extname(path))
+}
+
+export default function BlogIntroduction() {
+ const posts = [...blogSource.getPages()]
+ .filter((p) => Boolean(p.data.draft) === false)
+ .sort(
+ (a, b) =>
+ new Date(b.data.update ?? getName(b.path)).getTime() -
+ new Date(a.data.update ?? getName(a.path)).getTime()
+ )
+
+ const hasNoPost = posts.length === 0
+
+ return (
+
+
+
+
+ {hasNoPost && (
+
+ Will be added soon.
+
+ )}
+
+ {hasNoPost === false &&
+ posts.map((post) => (
+
+
+ {post.data.title}
+
+
+ {post.data.description}
+
+
+
+ {new Date(
+ post.data.update ?? getName(post.path)
+ ).toDateString()}
+
+
+ ))}
+
+
+ )
+}
diff --git a/packages/web/src/app/blog/rss.xml/route.ts b/packages/web/src/app/blog/rss.xml/route.ts
new file mode 100644
index 0000000..685ca7b
--- /dev/null
+++ b/packages/web/src/app/blog/rss.xml/route.ts
@@ -0,0 +1,44 @@
+import { Feed } from 'feed'
+import { NextResponse } from 'next/server'
+import { CONFIG } from '@/constant/config'
+import { blogSource } from '@/lib/source'
+
+export const revalidate = false
+
+export function GET() {
+ const baseUrl = CONFIG.siteUrl
+
+ const feed = new Feed({
+ title: `${CONFIG.libName} Blog`,
+ id: `${baseUrl}/blog`,
+ link: `${baseUrl}/blog`,
+ language: 'en',
+
+ image: `${baseUrl}/banner.png`,
+ favicon: `${baseUrl}/icon.png`,
+ copyright: `All rights reserved 2025, ${CONFIG.authorName}`,
+ })
+
+ for (const page of blogSource.getPages().sort((a, b) => {
+ return (
+ new Date(b.data.update).getTime() -
+ new Date(a.data.update).getTime()
+ )
+ })) {
+ feed.addItem({
+ id: page.url,
+ title: page.data.title,
+ description: page.data.description,
+ link: `${baseUrl}${page.url}`,
+ date: new Date(page.data.update),
+
+ author: [
+ {
+ name: page.data.author,
+ },
+ ],
+ })
+ }
+
+ return new NextResponse(feed.rss2())
+}
diff --git a/packages/web/src/app/global.css b/packages/web/src/app/global.css
new file mode 100644
index 0000000..e8e81f0
--- /dev/null
+++ b/packages/web/src/app/global.css
@@ -0,0 +1,130 @@
+@import "tailwindcss";
+
+@source not "../lib/utils/tailwind.ts";
+
+@import "./utils.css";
+@import "fumadocs-ui/css/vitepress.css";
+@import "fumadocs-ui/css/preset.css";
+@import "tw-animate-css";
+
+@custom-variant dark (&:is(.dark *));
+
+@theme inline {
+ --radius-sm: calc(var(--radius) - 4px);
+ --radius-md: calc(var(--radius) - 2px);
+ --radius-lg: var(--radius);
+ --radius-xl: calc(var(--radius) + 4px);
+ --color-background: var(--background);
+ --color-foreground: var(--foreground);
+ --color-card: var(--card);
+ --color-card-foreground: var(--card-foreground);
+ --color-popover: var(--popover);
+ --color-popover-foreground: var(--popover-foreground);
+ --color-primary: var(--primary);
+ --color-primary-foreground: var(--primary-foreground);
+ --color-secondary: var(--secondary);
+ --color-secondary-foreground: var(--secondary-foreground);
+ --color-muted: var(--muted);
+ --color-muted-foreground: var(--muted-foreground);
+ --color-accent: var(--accent);
+ --color-accent-foreground: var(--accent-foreground);
+ --color-destructive: var(--destructive);
+ --color-border: var(--border);
+ --color-input: var(--input);
+ --color-ring: var(--ring);
+ --color-chart-1: var(--chart-1);
+ --color-chart-2: var(--chart-2);
+ --color-chart-3: var(--chart-3);
+ --color-chart-4: var(--chart-4);
+ --color-chart-5: var(--chart-5);
+ --color-sidebar: var(--sidebar);
+ --color-sidebar-foreground: var(--sidebar-foreground);
+ --color-sidebar-primary: var(--sidebar-primary);
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
+ --color-sidebar-accent: var(--sidebar-accent);
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
+ --color-sidebar-border: var(--sidebar-border);
+ --color-sidebar-ring: var(--sidebar-ring);
+}
+
+:root {
+ --radius: 0.625rem;
+ --background: oklch(1 0 0);
+ --foreground: oklch(0.141 0.005 285.823);
+ --card: oklch(1 0 0);
+ --card-foreground: oklch(0.141 0.005 285.823);
+ --popover: oklch(1 0 0);
+ --popover-foreground: oklch(0.141 0.005 285.823);
+ --primary: oklch(0.21 0.006 285.885);
+ --primary-foreground: oklch(0.985 0 0);
+ --secondary: oklch(0.967 0.001 286.375);
+ --secondary-foreground: oklch(0.21 0.006 285.885);
+ --muted: oklch(0.967 0.001 286.375);
+ --muted-foreground: oklch(0.552 0.016 285.938);
+ --accent: oklch(0.967 0.001 286.375);
+ --accent-foreground: oklch(0.21 0.006 285.885);
+ --destructive: oklch(0.577 0.245 27.325);
+ --border: oklch(0.92 0.004 286.32);
+ --input: oklch(0.92 0.004 286.32);
+ --ring: oklch(0.705 0.015 286.067);
+ --chart-1: oklch(0.646 0.222 41.116);
+ --chart-2: oklch(0.6 0.118 184.704);
+ --chart-3: oklch(0.398 0.07 227.392);
+ --chart-4: oklch(0.828 0.189 84.429);
+ --chart-5: oklch(0.769 0.188 70.08);
+ --sidebar: oklch(0.985 0 0);
+ --sidebar-foreground: oklch(0.141 0.005 285.823);
+ --sidebar-primary: oklch(0.21 0.006 285.885);
+ --sidebar-primary-foreground: oklch(0.985 0 0);
+ --sidebar-accent: oklch(0.967 0.001 286.375);
+ --sidebar-accent-foreground: oklch(0.21 0.006 285.885);
+ --sidebar-border: oklch(0.92 0.004 286.32);
+ --sidebar-ring: oklch(0.705 0.015 286.067);
+}
+
+.dark {
+ --background: oklch(0.141 0.005 285.823);
+ --foreground: oklch(0.985 0 0);
+ --card: oklch(0.21 0.006 285.885);
+ --card-foreground: oklch(0.985 0 0);
+ --popover: oklch(0.21 0.006 285.885);
+ --popover-foreground: oklch(0.985 0 0);
+ --primary: oklch(0.92 0.004 286.32);
+ --primary-foreground: oklch(0.21 0.006 285.885);
+ --secondary: oklch(0.274 0.006 286.033);
+ --secondary-foreground: oklch(0.985 0 0);
+ --muted: oklch(0.274 0.006 286.033);
+ --muted-foreground: oklch(0.705 0.015 286.067);
+ --accent: oklch(0.274 0.006 286.033);
+ --accent-foreground: oklch(0.985 0 0);
+ --destructive: oklch(0.704 0.191 22.216);
+ --border: oklch(1 0 0 / 10%);
+ --input: oklch(1 0 0 / 15%);
+ --ring: oklch(0.552 0.016 285.938);
+ --chart-1: oklch(0.488 0.243 264.376);
+ --chart-2: oklch(0.696 0.17 162.48);
+ --chart-3: oklch(0.769 0.188 70.08);
+ --chart-4: oklch(0.627 0.265 303.9);
+ --chart-5: oklch(0.645 0.246 16.439);
+ --sidebar: oklch(0.21 0.006 285.885);
+ --sidebar-foreground: oklch(0.985 0 0);
+ --sidebar-primary: oklch(0.488 0.243 264.376);
+ --sidebar-primary-foreground: oklch(0.985 0 0);
+ --sidebar-accent: oklch(0.274 0.006 286.033);
+ --sidebar-accent-foreground: oklch(0.985 0 0);
+ --sidebar-border: oklch(1 0 0 / 10%);
+ --sidebar-ring: oklch(0.552 0.016 285.938);
+}
+
+@layer base {
+ * {
+ @apply border-border outline-ring/50;
+ }
+ body {
+ @apply bg-background text-foreground;
+ }
+}
+
+@utility no-scrollbar {
+ @apply [scrollbar-width:none] [&::-webkit-scrollbar]:hidden;
+}
diff --git a/packages/web/src/app/og/docs/[...slug]/generate.tsx b/packages/web/src/app/og/docs/[...slug]/generate.tsx
new file mode 100644
index 0000000..7dd84d2
--- /dev/null
+++ b/packages/web/src/app/og/docs/[...slug]/generate.tsx
@@ -0,0 +1,127 @@
+import { readFile } from 'node:fs/promises'
+import type { ImageResponseOptions } from '@takumi-rs/image-response'
+import type { ReactNode } from 'react'
+import { CONFIG } from '@/constant/config'
+
+export interface GenerateProps {
+ title: ReactNode
+ description?: ReactNode
+}
+
+const majorFont = readFile('./lib/og/DarkerGrotesque-Regular.ttf').then(
+ (data) => ({
+ name: 'Mono',
+ data,
+ weight: 600,
+ })
+)
+
+const logoFont = readFile('./lib/og/DMSerifDisplay-Regular.ttf').then(
+ (data) => ({
+ name: 'Mono',
+ data,
+ weight: 400,
+ })
+)
+
+export async function getImageResponseOptions(): Promise {
+ return {
+ width: 1200,
+ height: 630,
+ format: 'webp',
+ fonts: await Promise.all([logoFont, majorFont]),
+ }
+}
+
+export function generate({ title, description }: GenerateProps) {
+ const siteName = CONFIG.libName
+ const primaryTextColor = 'rgb(240,240,240)'
+ const logo = (
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+
+ return (
+
+
+
+ {title}
+
+
+ {description}
+
+
+ {logo}
+
+ {siteName}
+
+
+
+
+ )
+}
diff --git a/packages/web/src/app/og/docs/[...slug]/route.tsx b/packages/web/src/app/og/docs/[...slug]/route.tsx
new file mode 100644
index 0000000..70f7058
--- /dev/null
+++ b/packages/web/src/app/og/docs/[...slug]/route.tsx
@@ -0,0 +1,35 @@
+import { generate as DefaultImage } from 'fumadocs-ui/og'
+import { notFound } from 'next/navigation'
+import { ImageResponse } from 'next/og'
+import { CONFIG } from '@/constant/config'
+import { docSource, getPageImage } from '@/lib/source'
+
+export const revalidate = false
+
+export async function GET(
+ _req: Request,
+ { params }: RouteContext<'/og/docs/[...slug]'>
+) {
+ const { slug } = await params
+ const page = docSource.getPage(slug.slice(0, -1))
+ if (!page) notFound()
+
+ return new ImageResponse(
+ ,
+ {
+ width: 1200,
+ height: 630,
+ }
+ )
+}
+
+export function generateStaticParams() {
+ return docSource.getPages().map((page) => ({
+ lang: page.locale,
+ slug: getPageImage(page).segments,
+ }))
+}
diff --git a/packages/web/src/app/page.tsx b/packages/web/src/app/page.tsx
new file mode 100644
index 0000000..034bf25
--- /dev/null
+++ b/packages/web/src/app/page.tsx
@@ -0,0 +1,6 @@
+import { redirect } from 'next/navigation'
+import { CONFIG } from '@/constant/config'
+
+export default function RootPage() {
+ redirect(`/${CONFIG.majorLang}`)
+}
diff --git a/packages/web/src/app/rss.xml/route.ts b/packages/web/src/app/rss.xml/route.ts
new file mode 100644
index 0000000..e0106a6
--- /dev/null
+++ b/packages/web/src/app/rss.xml/route.ts
@@ -0,0 +1,38 @@
+import { Feed } from 'feed'
+import { CONFIG } from '@/constant/config'
+import { docSource } from '@/lib/source'
+
+function getRss() {
+ const baseUrl = CONFIG.siteUrl
+ const feed = new Feed({
+ title: `${CONFIG.libName} - Blog`,
+ id: `${baseUrl}/blog`,
+ link: `${baseUrl}/blog`,
+ language: 'en',
+
+ image: `${baseUrl}${CONFIG.mainBannerUrl}`,
+ favicon: `${baseUrl}/icon.png`,
+ copyright: `All rights reserved 2025, ${CONFIG.authorName}`,
+ })
+
+ for (const page of docSource.getPages()) {
+ feed.addItem({
+ id: page.url,
+ title: page.data.title,
+ description: page.data.description,
+ link: `${baseUrl}${page.url}`,
+ date: new Date(page.data.lastModified ?? new Date()),
+
+ author: [{ name: CONFIG.authorName }],
+ })
+ }
+
+ return feed.rss2()
+}
+
+// NEXT CONFIG
+export const revalidate = false
+
+export function GET() {
+ return new Response(getRss())
+}
diff --git a/packages/web/src/app/sitemap.ts b/packages/web/src/app/sitemap.ts
new file mode 100644
index 0000000..b02ca43
--- /dev/null
+++ b/packages/web/src/app/sitemap.ts
@@ -0,0 +1,32 @@
+import type { MetadataRoute } from 'next'
+import { baseUrl } from '@/lib/metadata/create_metadata'
+import { docSource } from '@/lib/source'
+
+export const revalidate = false
+
+export default async function sitemap(): Promise {
+ const url = (path: string): string => new URL(path, baseUrl).toString()
+
+ return [
+ {
+ url: url('/'),
+ changeFrequency: 'monthly',
+ priority: 1,
+ },
+ {
+ url: url('/docs'),
+ changeFrequency: 'monthly',
+ priority: 0.8,
+ },
+ ...docSource.getPages().flatMap((page) => {
+ const { lastModified } = page.data
+
+ return {
+ url: url(page.url),
+ lastModified: lastModified ? new Date(lastModified) : undefined,
+ changeFrequency: 'weekly',
+ priority: 0.5,
+ } as MetadataRoute.Sitemap[number]
+ }),
+ ]
+}
diff --git a/packages/web/src/app/utils.css b/packages/web/src/app/utils.css
new file mode 100644
index 0000000..8b43573
--- /dev/null
+++ b/packages/web/src/app/utils.css
@@ -0,0 +1,83 @@
+@utility glass-1 {
+ @apply border-border from-card/80 to-card/40 dark:border-border/10 dark:border-b-border/5 dark:border-t-border/20 dark:from-card/5 dark:to-card/0 border bg-linear-to-b;
+}
+@utility glass-2 {
+ @apply border-border from-card/100 to-card/80 dark:border-border/10 dark:border-b-border/5 dark:border-t-border/20 dark:from-card/10 dark:to-card/5 border bg-linear-to-b;
+}
+@utility glass-3 {
+ @apply border-border from-card/30 to-card/20 dark:border-border/10 dark:border-t-border/20 dark:border-b-border/5 dark:from-primary/5 dark:to-primary/2 border bg-linear-to-b;
+}
+@utility glass-4 {
+ @apply border-border border-b-input/90 from-card/60 to-card/20 dark:border-border/10 dark:border-t-border/30 dark:from-primary/10 dark:to-primary/5 border bg-linear-to-b dark:border-b-0;
+}
+@utility glass-5 {
+ @apply border-border border-b-input from-card/100 to-card/20 dark:border-border/10 dark:border-t-border/30 dark:from-primary/15 dark:to-primary/5 border bg-linear-to-b dark:border-b-0;
+}
+
+/* Fade effects */
+@utility fade-x {
+ mask-image: linear-gradient(
+ to right,
+ transparent 0%,
+ black 25%,
+ black 75%,
+ transparent 100%
+ );
+}
+@utility fade-y {
+ mask-image: linear-gradient(
+ to top,
+ transparent 0%,
+ black 25%,
+ black 75%,
+ transparent 100%
+ );
+}
+@utility fade-top {
+ mask-image: linear-gradient(to bottom, transparent 0%, black 35%);
+}
+@utility fade-bottom {
+ mask-image: linear-gradient(to top, transparent 0%, black 35%);
+}
+@utility fade-top-lg {
+ mask-image: linear-gradient(to bottom, transparent 15%, black 100%);
+}
+@utility fade-bottom-lg {
+ mask-image: linear-gradient(to top, transparent 15%, black 100%);
+}
+@utility fade-left {
+ mask-image: linear-gradient(to right, transparent 0%, black 35%);
+}
+@utility fade-right {
+ mask-image: linear-gradient(to left, transparent 0%, black 35%);
+}
+@utility fade-left-lg {
+ mask-image: linear-gradient(to right, transparent 15%, black 100%);
+}
+@utility fade-right-lg {
+ mask-image: linear-gradient(to left, transparent 15%, black 100%);
+}
+
+@utility line-y {
+ @apply border-border dark:border-border/10;
+ border-width: 0 var(--line-width, 0);
+}
+
+@utility line-x {
+ @apply border-border dark:border-border/10;
+ border-width: var(--line-width, 0) 0;
+}
+
+@utility line-b {
+ @apply border-border dark:border-border/10;
+ border-width: 0 0 var(--line-width, 0);
+}
+
+@utility line-t {
+ @apply border-border dark:border-border/10;
+ border-width: var(--line-width, 0) 0;
+}
+
+@utility line-dashed {
+ @apply border-dashed;
+}
diff --git a/packages/web/src/components/banner/banner.tsx b/packages/web/src/components/banner/banner.tsx
new file mode 100644
index 0000000..87b7fa5
--- /dev/null
+++ b/packages/web/src/components/banner/banner.tsx
@@ -0,0 +1,97 @@
+'use client'
+
+import { a } from '@freestylejs/ani-core'
+import { DM_Serif_Display } from 'next/font/google'
+import Image from 'next/image'
+import Link from 'next/link'
+import { useEffect, useRef } from 'react'
+import { CONFIG } from '@/constant/config'
+import { tw } from '@/lib/utils'
+import { Button } from '../ui'
+import BannerImage from './bg.png'
+
+const dmSerif = DM_Serif_Display({
+ weight: '400',
+ subsets: ['latin'],
+})
+
+const controller = a.timeline(
+ a.sequence(
+ [
+ a.ani({
+ to: { opacity: 1, skew: 0, translateX: 0, scale: 1 },
+ duration: 1.5,
+ }),
+ ],
+ a.timing.spring({ m: 1, k: 100, c: 20 })
+ )
+)
+
+export const Banner = ({
+ title,
+ description,
+ subDescription,
+ linkDescription,
+ linkUrl,
+ noAnimation,
+}: {
+ title: string
+ description: string
+ subDescription: string
+ linkDescription: string
+ linkUrl: string
+ noAnimation: boolean
+}) => {
+ const target = useRef(null)
+
+ useEffect(() => {
+ if (!target.current) return
+ if (noAnimation) return
+ controller.play(target.current, {
+ from: { opacity: 0, skew: 2, translateX: -10, scale: 0.975 },
+ })
+ }, [noAnimation])
+
+ return (
+
+
+
+
+
+ {title}
+
+
+
{description}
+
+
{subDescription}
+
+
+
+
+ {linkDescription}
+
+
+
+
+
+ )
+}
diff --git a/packages/web/src/components/banner/bg.png b/packages/web/src/components/banner/bg.png
new file mode 100644
index 0000000..6a0b690
Binary files /dev/null and b/packages/web/src/components/banner/bg.png differ
diff --git a/packages/web/src/components/banner/index.ts b/packages/web/src/components/banner/index.ts
new file mode 100644
index 0000000..b860eae
--- /dev/null
+++ b/packages/web/src/components/banner/index.ts
@@ -0,0 +1 @@
+export * from './banner'
diff --git a/packages/web/src/components/github/action.tsx b/packages/web/src/components/github/action.tsx
new file mode 100644
index 0000000..60432d0
--- /dev/null
+++ b/packages/web/src/components/github/action.tsx
@@ -0,0 +1,193 @@
+'use client'
+
+import { cva } from 'class-variance-authority'
+import { buttonVariants } from 'fumadocs-ui/components/ui/button'
+import {
+ Collapsible,
+ CollapsibleContent,
+} from 'fumadocs-ui/components/ui/collapsible'
+import { ThumbsDown, ThumbsUp } from 'lucide-react'
+import { usePathname } from 'next/navigation'
+import { type SyntheticEvent, useEffect, useState, useTransition } from 'react'
+import { cn } from '@/lib/utils'
+
+const rateButtonVariants = cva(
+ 'inline-flex items-center gap-2 px-3 py-2 rounded-full font-medium border text-sm [&_svg]:size-4 disabled:cursor-not-allowed',
+ {
+ variants: {
+ active: {
+ true: 'bg-fd-accent text-fd-accent-foreground [&_svg]:fill-current',
+ false: 'text-fd-muted-foreground',
+ },
+ },
+ }
+)
+
+export interface Feedback {
+ opinion: 'good' | 'bad'
+ url?: string
+ message: string
+}
+
+export interface ActionResponse {
+ githubUrl: string
+}
+
+interface Result extends Feedback {
+ response?: ActionResponse
+}
+
+export const Feedback = ({
+ onRateAction,
+}: {
+ onRateAction: (url: string, feedback: Feedback) => Promise
+}) => {
+ const url = usePathname()
+ const [previous, setPrevious] = useState(null)
+ const [opinion, setOpinion] = useState<'good' | 'bad' | null>(null)
+ const [message, setMessage] = useState('')
+ const [isPending, startTransition] = useTransition()
+
+ useEffect(() => {
+ const item = localStorage.getItem(`docs-feedback-${url}`)
+
+ if (item === null) return
+ setPrevious(JSON.parse(item) as Result)
+ }, [url])
+
+ useEffect(() => {
+ const key = `docs-feedback-${url}`
+
+ if (previous) localStorage.setItem(key, JSON.stringify(previous))
+ else localStorage.removeItem(key)
+ }, [previous, url])
+
+ function submit(e?: SyntheticEvent) {
+ if (opinion == null) return
+
+ startTransition(async () => {
+ const feedback: Feedback = {
+ opinion,
+ message,
+ }
+
+ void onRateAction(url, feedback).then((response) => {
+ setPrevious({
+ response,
+ ...feedback,
+ })
+ setMessage('')
+ setOpinion(null)
+ })
+ })
+
+ e?.preventDefault()
+ }
+
+ const activeOpinion = previous?.opinion ?? opinion
+
+ return (
+ {
+ if (!v) setOpinion(null)
+ }}
+ className="border-y py-3"
+ >
+
+
How is this guide?
+
{
+ setOpinion('good')
+ }}
+ >
+
+ Good
+
+
{
+ setOpinion('bad')
+ }}
+ >
+
+ Bad
+
+
+
+ {previous ? (
+
+
Thank you for your feedback!
+
+
+ View on GitHub
+
+
+
{
+ setOpinion(previous.opinion)
+ setPrevious(null)
+ }}
+ >
+ Submit Again
+
+
+
+ ) : (
+
+ )}
+
+
+ )
+}
diff --git a/packages/web/src/components/github/contributor_counter.tsx b/packages/web/src/components/github/contributor_counter.tsx
new file mode 100644
index 0000000..c377627
--- /dev/null
+++ b/packages/web/src/components/github/contributor_counter.tsx
@@ -0,0 +1,63 @@
+import Image from 'next/image'
+import type { HTMLAttributes } from 'react'
+import { CONFIG } from '@/constant/config'
+import { fetchContributors } from '@/lib/github/contributor'
+import { cn } from '@/lib/utils'
+
+export interface ContributorCounterProps
+ extends HTMLAttributes {
+ repoOwner: string
+ repoName: string
+ displayCount?: number
+}
+
+export const ContributorCounter = async ({
+ repoOwner,
+ repoName,
+ displayCount = 20,
+ ...props
+}: ContributorCounterProps): Promise => {
+ const contributors = await fetchContributors(repoOwner, repoName)
+ const topContributors = contributors
+ .filter((contributor) => contributor.login !== repoOwner)
+ .slice(0, displayCount)
+
+ return (
+
+
+ {topContributors.map((contributor, i) => (
+
+
+
+ ))}
+ {displayCount < contributors.length ? (
+
+ +{contributors.length - displayCount}
+
+ ) : null}
+
+
+ Some of our best contributors.
+
+
+ )
+}
diff --git a/packages/web/src/components/github/index.ts b/packages/web/src/components/github/index.ts
new file mode 100644
index 0000000..c51d183
--- /dev/null
+++ b/packages/web/src/components/github/index.ts
@@ -0,0 +1,2 @@
+export * from './action'
+export * from './contributor_counter'
diff --git a/packages/web/src/components/ui/button.tsx b/packages/web/src/components/ui/button.tsx
new file mode 100644
index 0000000..4bec7cc
--- /dev/null
+++ b/packages/web/src/components/ui/button.tsx
@@ -0,0 +1,58 @@
+import { Slot } from '@radix-ui/react-slot'
+import { cva, type VariantProps } from 'class-variance-authority'
+import type * as React from 'react'
+
+import { cn } from '@/lib/utils'
+
+export const buttonVariants = cva(
+ 'inline-flex transition-all will-change-transform opacity-100 duration-500 scale-100 hover:opacity-50 active:scale-95 items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',
+ {
+ variants: {
+ variant: {
+ default:
+ 'text-primary-foreground shadow-sm dark:hover:from-primary/80 hover:from-primary/70 dark:hover:to-primary/70 hover:to-primary/90 bg-linear-to-b from-primary/60 to-primary/100 dark:from-primary/100 dark:to-primary/70 border-t-primary',
+ destructive:
+ 'bg-destructive/30 text-destructive-foreground shadow-xs hover:bg-destructive/90',
+ outline:
+ 'border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground',
+ glow: 'glass-4 hover:glass-5 shadow-md',
+ secondary:
+ 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',
+ ghost: 'hover:bg-accent hover:text-accent-foreground',
+ link: 'text-foreground underline-offset-4 hover:underline',
+ },
+ size: {
+ default: 'h-9 px-4 py-2',
+ xs: 'h-7 rounded-md px-2',
+ sm: 'h-8 rounded-md px-3 text-xs',
+ lg: 'h-10 rounded-md px-5',
+ icon: 'size-9',
+ },
+ },
+ defaultVariants: {
+ variant: 'default',
+ size: 'default',
+ },
+ }
+)
+
+export function Button({
+ className,
+ variant,
+ size,
+ asChild = false,
+ ...props
+}: React.ComponentProps<'button'> &
+ VariantProps & {
+ asChild?: boolean
+ }) {
+ const Comp = asChild ? Slot : 'button'
+
+ return (
+
+ )
+}
diff --git a/packages/web/src/components/ui/card.tsx b/packages/web/src/components/ui/card.tsx
new file mode 100644
index 0000000..f352eee
--- /dev/null
+++ b/packages/web/src/components/ui/card.tsx
@@ -0,0 +1,162 @@
+'use client'
+
+import DynamicLink from 'fumadocs-core/dynamic-link'
+import { ArrowUpRight, Code, X } from 'lucide-react'
+import * as React from 'react'
+
+import { cn } from '@/lib/utils'
+
+const Card = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, children, ...props }, ref) => (
+
+))
+Card.displayName = 'Card'
+
+const CardLink = React.forwardRef<
+ HTMLAnchorElement,
+ React.AnchorHTMLAttributes
+>(({ className, children, ...props }, ref) => (
+
+ {children || (
+
+ )}
+
+))
+CardLink.displayName = 'CardLink'
+
+export const CardShow = ({
+ className,
+ children,
+ show,
+ ...props
+}: { show: boolean } & React.ButtonHTMLAttributes) => (
+
+ {children || show ? (
+
+ ) : (
+
+ )}
+
+)
+CardShow.displayName = 'CardShow'
+
+const CardContent = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+))
+CardContent.displayName = 'CardContent'
+
+const CardTitle = React.forwardRef<
+ HTMLHeadingElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+))
+CardTitle.displayName = 'CardTitle'
+
+const CardDescription = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, ...props }, ref) => (
+
+))
+CardDescription.displayName = 'CardDescription'
+
+const CardVisual = React.forwardRef<
+ HTMLDivElement,
+ React.HTMLAttributes
+>(({ className, children, ...props }, ref) => (
+
+))
+CardVisual.displayName = 'CardVisual'
+
+export {
+ Card as Card,
+ CardLink as CardLink,
+ CardContent as CardContent,
+ CardTitle as CardTitle,
+ CardDescription as CardDescription,
+ CardVisual as CardVisual,
+}
diff --git a/packages/web/src/components/ui/codeblock.tsx b/packages/web/src/components/ui/codeblock.tsx
new file mode 100644
index 0000000..e96269d
--- /dev/null
+++ b/packages/web/src/components/ui/codeblock.tsx
@@ -0,0 +1,55 @@
+'use client'
+
+import { getHighlighter, hastToJsx } from 'fumadocs-core/highlight'
+import * as Base from 'fumadocs-ui/components/codeblock'
+import { useEffect, useState } from 'react'
+import type { BundledLanguage, Highlighter } from 'shiki'
+import { cn } from '@/lib/utils'
+
+export interface CodeBlockProps {
+ code: string
+ wrapper?: Base.CodeBlockProps
+ lang: string
+}
+
+export const CodeBlock = ({ code, lang, wrapper }: CodeBlockProps) => {
+ const [highlighter, setHighlighter] = useState(null)
+ useEffect(() => {
+ const loadLang = async () => {
+ const highlighter = await getHighlighter('js', {
+ langs: ['js', 'ts', 'jsx', 'tsx'],
+ themes: ['catppuccin-macchiato', 'github-light'],
+ })
+ await highlighter.loadLanguage(lang as BundledLanguage)
+ setHighlighter(highlighter)
+ return
+ }
+
+ loadLang()
+ }, [])
+
+ if (!highlighter) {
+ return null
+ }
+
+ const hast = highlighter.codeToHast(code.trim(), {
+ lang,
+ defaultColor: false,
+ themes: {
+ light: 'github-light',
+ dark: 'catppuccin-macchiato',
+ },
+ })
+
+ const rendered = hastToJsx(hast, {
+ components: {
+ pre: Base.Pre,
+ },
+ })
+
+ return (
+
+ {rendered}
+
+ )
+}
diff --git a/packages/web/src/components/ui/copy.tsx b/packages/web/src/components/ui/copy.tsx
new file mode 100644
index 0000000..c6ad513
--- /dev/null
+++ b/packages/web/src/components/ui/copy.tsx
@@ -0,0 +1,35 @@
+'use client'
+import { useCopyButton } from 'fumadocs-ui/utils/use-copy-button'
+import { Check, Share } from 'lucide-react'
+import { buttonVariants } from '@/components/ui/button'
+import { cn } from '@/lib/utils'
+
+export const ShareButton = ({
+ url,
+ className,
+}: {
+ url: string
+ className?: string
+}) => {
+ const [isChecked, onCopy] = useCopyButton(() => {
+ void navigator.clipboard.writeText(`${window.location.origin}${url}`)
+ })
+
+ return (
+
+ {isChecked ? (
+
+ ) : (
+
+ )}
+ {isChecked ? 'Copied URL' : 'Share Post'}
+
+ )
+}
diff --git a/packages/web/src/components/ui/glow.tsx b/packages/web/src/components/ui/glow.tsx
new file mode 100644
index 0000000..e58d4f1
--- /dev/null
+++ b/packages/web/src/components/ui/glow.tsx
@@ -0,0 +1,103 @@
+'use client'
+
+import { a } from '@freestylejs/ani-core/index'
+import type React from 'react'
+import { useEffect, useRef, useState } from 'react'
+import { rand } from '@/lib/math/rand'
+import { cn } from '@/lib/utils/index'
+
+const Spring = a.timing.spring({ m: 1, k: 1.5, c: 2 })
+
+const glowTimeline = a.timeline(
+ a.parallel([
+ // 3s sequence
+ a.sequence(
+ [
+ a.ani({
+ to: {
+ opacity: 0,
+ scale: 0.75,
+ },
+ duration: 0.5,
+ }),
+
+ a.ani({
+ to: {
+ opacity: 0.5,
+ scale: 1.25,
+ },
+ duration: 0.75,
+ }),
+
+ a.ani({
+ to: {
+ opacity: 1,
+ scale: 1.75,
+ },
+ duration: 1.5,
+ }),
+ ],
+
+ Spring
+ ),
+ ])
+)
+
+const randLoc = () => {
+ return {
+ x: rand([-450, 100]),
+ y: rand([-200, 100]),
+ }
+}
+
+export function Glow({
+ className,
+ children,
+ ...props
+}: React.PropsWithChildren>) {
+ const targetGlob = useRef(null)
+
+ const [randLocation, setRandLocation] = useState<{
+ x: number
+ y: number
+ } | null>(null)
+
+ useEffect(() => {
+ if (!targetGlob.current) return
+ setRandLocation(randLoc())
+ glowTimeline.play(targetGlob.current, {
+ from: {
+ scale: 0,
+ opacity: 0,
+ },
+ })
+ }, [])
+
+ if (!randLocation) return
+
+ return (
+
+ )
+}
diff --git a/packages/web/src/components/ui/index.ts b/packages/web/src/components/ui/index.ts
new file mode 100644
index 0000000..cf45818
--- /dev/null
+++ b/packages/web/src/components/ui/index.ts
@@ -0,0 +1,5 @@
+export * from './button'
+export * from './card'
+export * from './codeblock'
+export * from './copy'
+export * from './glow'
diff --git a/packages/web/src/components/ui/mermaid.tsx b/packages/web/src/components/ui/mermaid.tsx
new file mode 100644
index 0000000..2b1f471
--- /dev/null
+++ b/packages/web/src/components/ui/mermaid.tsx
@@ -0,0 +1,60 @@
+'use client'
+
+import { useTheme } from 'next-themes'
+import { use, useEffect, useId, useState } from 'react'
+
+export function Mermaid({ chart }: { chart: string }) {
+ const [mounted, setMounted] = useState(false)
+
+ useEffect(() => {
+ setMounted(true)
+ }, [])
+
+ if (!mounted) return
+ return
+}
+
+const cache = new Map>()
+
+function cachePromise(
+ key: string,
+ setPromise: () => Promise
+): Promise {
+ const cached = cache.get(key)
+ if (cached) return cached as Promise
+
+ const promise = setPromise()
+ cache.set(key, promise)
+ return promise
+}
+
+function MermaidContent({ chart }: { chart: string }) {
+ const id = useId()
+ const { resolvedTheme } = useTheme()
+ const { default: mermaid } = use(
+ cachePromise('mermaid', () => import('mermaid'))
+ )
+
+ mermaid.initialize({
+ startOnLoad: false,
+ securityLevel: 'loose',
+ fontFamily: 'inherit',
+ themeCSS: 'margin: 1.5rem auto 0;',
+ theme: resolvedTheme === 'dark' ? 'dark' : 'default',
+ })
+
+ const { svg, bindFunctions } = use(
+ cachePromise(`${chart}-${resolvedTheme}`, () => {
+ return mermaid.render(id, chart.replaceAll('\\n', '\n'))
+ })
+ )
+
+ return (
+ {
+ if (container) bindFunctions?.(container)
+ }}
+ dangerouslySetInnerHTML={{ __html: svg }}
+ />
+ )
+}
diff --git a/packages/web/src/constant/config.ts b/packages/web/src/constant/config.ts
new file mode 100644
index 0000000..5485801
--- /dev/null
+++ b/packages/web/src/constant/config.ts
@@ -0,0 +1,17 @@
+const prodUrl = process.env.VERCEL_PROD_URL
+ ? process.env.VERCEL_PROD_URL
+ : 'http://localhost:3000'
+
+export const CONFIG = {
+ libName: 'Fetch',
+ siteName: 'Fetch - Type-Safe, Fluent HTTP Client.',
+ authorName: 'freestylejs',
+ repoUrl: 'https://github.com/freestylejs/fetch',
+ siteUrl: prodUrl,
+ mainBannerUrl: '/fetch-banner.png',
+ supportedLang: [
+ 'en',
+ // 'ko'
+ ],
+ majorLang: 'en',
+} as const
diff --git a/packages/web/src/lib/github/action.ts b/packages/web/src/lib/github/action.ts
new file mode 100644
index 0000000..4a6a99c
--- /dev/null
+++ b/packages/web/src/lib/github/action.ts
@@ -0,0 +1,137 @@
+import { App, type Octokit } from 'octokit'
+import type { ActionResponse, Feedback } from '@/components/github'
+import { CONFIG } from '@/constant/config'
+
+export const repo = CONFIG.libName
+export const owner = CONFIG.authorName
+export const DocsCategory = 'Docs Feedback'
+
+let instance: Octokit | undefined
+
+async function getOctokit(): Promise
{
+ if (instance) return instance
+ const appId = process.env.GITHUB_APP_ID
+ const privateKey = process.env.GITHUB_APP_PRIVATE_KEY
+
+ if (!appId || !privateKey) {
+ throw new Error(
+ 'No GitHub keys provided for Github app, docs feedback feature will not work.'
+ )
+ }
+
+ const app = new App({
+ appId,
+ privateKey,
+ })
+
+ const { data } = await app.octokit.request(
+ 'GET /repos/{owner}/{repo}/installation',
+ {
+ owner,
+ repo,
+ headers: {
+ 'X-GitHub-Api-Version': '2022-11-28',
+ },
+ }
+ )
+
+ instance = await app.getInstallationOctokit(data.id)
+ return instance
+}
+
+interface RepositoryInfo {
+ id: string
+ discussionCategories: {
+ nodes: {
+ id: string
+ name: string
+ }[]
+ }
+}
+
+let cachedDestination: RepositoryInfo | undefined
+async function getFeedbackDestination() {
+ if (cachedDestination) return cachedDestination
+ const octokit = await getOctokit()
+
+ const {
+ repository,
+ }: {
+ repository: RepositoryInfo
+ } = await octokit.graphql(`
+ query {
+ repository(owner: "${owner}", name: "${repo}") {
+ id
+ discussionCategories(first: 25) {
+ nodes { id name }
+ }
+ }
+ }
+`)
+
+ return (cachedDestination = repository)
+}
+
+export async function onRateAction(
+ url: string,
+ feedback: Feedback
+): Promise {
+ 'use server'
+ const octokit = await getOctokit()
+ const destination = await getFeedbackDestination()
+ if (!octokit || !destination)
+ throw new Error('GitHub comment integration is not configured.')
+
+ const category = destination.discussionCategories.nodes.find(
+ (category) => category.name === DocsCategory
+ )
+
+ if (!category)
+ throw new Error(
+ `Please create a "${DocsCategory}" category in GitHub Discussion`
+ )
+
+ const title = `Feedback for ${url}`
+ const body = `[${feedback.opinion}] ${feedback.message}\n\n> Forwarded from user feedback.`
+
+ let {
+ search: {
+ nodes: [discussion],
+ },
+ }: {
+ search: {
+ nodes: { id: string; url: string }[]
+ }
+ } = await octokit.graphql(`
+ query {
+ search(type: DISCUSSION, query: ${JSON.stringify(`${title} in:title repo:${owner}/${repo} author:@me`)}, first: 1) {
+ nodes {
+ ... on Discussion { id, url }
+ }
+ }
+ }`)
+
+ if (discussion) {
+ await octokit.graphql(`
+ mutation {
+ addDiscussionComment(input: { body: ${JSON.stringify(body)}, discussionId: "${discussion.id}" }) {
+ comment { id }
+ }
+ }`)
+ } else {
+ const result: {
+ discussion: { id: string; url: string }
+ } = await octokit.graphql(`
+ mutation {
+ createDiscussion(input: { repositoryId: "${destination.id}", categoryId: "${category!.id}", body: ${JSON.stringify(body)}, title: ${JSON.stringify(title)} }) {
+ discussion { id, url }
+ }
+ }`)
+
+ discussion = result.discussion
+ }
+
+ return {
+ githubUrl: discussion.url,
+ }
+}
diff --git a/packages/web/src/lib/github/contributor.ts b/packages/web/src/lib/github/contributor.ts
new file mode 100644
index 0000000..5385369
--- /dev/null
+++ b/packages/web/src/lib/github/contributor.ts
@@ -0,0 +1,32 @@
+export interface Contributor {
+ avatar_url: string
+ login: string
+ contributions: number
+}
+
+export async function fetchContributors(
+ repoOwner: string,
+ repoName: string,
+ baseUrl: string = 'https://api.github.com'
+): Promise {
+ const headers = new Headers()
+ if (process.env.GITHUB_TOKEN)
+ headers.set('Authorization', `Bearer ${process.env.GITHUB_TOKEN}`)
+
+ const response = await fetch(
+ `${baseUrl}/repos/${repoOwner}/${repoName}/contributors?per_page=50`,
+ {
+ headers,
+ next: { revalidate: 1000 * 1000 },
+ }
+ )
+
+ if (!response.ok) {
+ throw new Error(`Failed to fetch contributors: ${response.statusText}`)
+ }
+
+ const contributors = (await response.json()) as Contributor[]
+ return contributors
+ .filter((contributor) => !contributor.login.endsWith('[bot]'))
+ .sort((a, b) => b.contributions - a.contributions)
+}
diff --git a/packages/web/src/lib/i18n/i18n.ts b/packages/web/src/lib/i18n/i18n.ts
new file mode 100644
index 0000000..b852c1f
--- /dev/null
+++ b/packages/web/src/lib/i18n/i18n.ts
@@ -0,0 +1,7 @@
+import { defineI18n } from 'fumadocs-core/i18n'
+import { CONFIG } from '@/constant/config'
+
+export const i18n = defineI18n({
+ defaultLanguage: CONFIG.majorLang,
+ languages: CONFIG.supportedLang as unknown as string[],
+})
diff --git a/packages/web/src/lib/i18n/index.ts b/packages/web/src/lib/i18n/index.ts
new file mode 100644
index 0000000..8f7cbe2
--- /dev/null
+++ b/packages/web/src/lib/i18n/index.ts
@@ -0,0 +1 @@
+export * from './i18n'
diff --git a/packages/web/src/lib/layout.shared.tsx b/packages/web/src/lib/layout.shared.tsx
new file mode 100644
index 0000000..2fc3712
--- /dev/null
+++ b/packages/web/src/lib/layout.shared.tsx
@@ -0,0 +1,40 @@
+// ENTRY FILES FOR FUMADOCS
+
+import type { I18nConfig } from 'fumadocs-core/i18n'
+import type { BaseLayoutProps, LinkItemType } from 'fumadocs-ui/layouts/shared'
+import { BookIcon, RocketIcon } from 'lucide-react'
+import { i18n } from '@/lib/i18n/i18n'
+import { CONFIG } from '../constant/config'
+
+const GetLinkItems = (locale: string): LinkItemType[] => [
+ {
+ icon: ,
+ text: 'Docs',
+ url: `/${locale}/docs`,
+ },
+ {
+ icon: ,
+ text: 'Blog',
+ url: `/blog`,
+ // secondary items will be displayed differently on navbar
+ secondary: false,
+ },
+]
+
+export function baseOptions(
+ locale: string,
+ i18nConfig: boolean | I18nConfig = i18n
+): BaseLayoutProps {
+ return {
+ i18n: i18nConfig,
+ nav: {
+ title: CONFIG.libName,
+ children: <>>,
+ url: `/${locale}`,
+ transparentMode: 'top',
+ },
+ githubUrl: CONFIG.repoUrl,
+ themeSwitch: { mode: 'light-dark-system' },
+ links: GetLinkItems(locale),
+ }
+}
diff --git a/packages/web/src/lib/llm/get_llm_text.ts b/packages/web/src/lib/llm/get_llm_text.ts
new file mode 100644
index 0000000..78f6401
--- /dev/null
+++ b/packages/web/src/lib/llm/get_llm_text.ts
@@ -0,0 +1,14 @@
+import type { Page } from '@/lib/source'
+import { CONFIG } from '../../constant/config'
+
+export async function getLLMText(page: Page) {
+ const processed = await page.data.getText('processed')
+
+ return `# ${page.data.title}
+URL: ${page.url}
+Source: ${CONFIG.repoUrl}/blob/main/packages/web/content/docs/${page.path}
+
+${page.data.description ?? ''}
+
+${processed}`
+}
diff --git a/packages/web/src/lib/math/rand.ts b/packages/web/src/lib/math/rand.ts
new file mode 100644
index 0000000..c0eea8f
--- /dev/null
+++ b/packages/web/src/lib/math/rand.ts
@@ -0,0 +1,2 @@
+export const rand = (arg: [min: number, max: number]) =>
+ Math.min(Math.max(Math.floor(Math.random() * arg[1]), arg[0]), arg[1])
diff --git a/packages/web/src/lib/metadata/create_metadata.ts b/packages/web/src/lib/metadata/create_metadata.ts
new file mode 100644
index 0000000..50bbac4
--- /dev/null
+++ b/packages/web/src/lib/metadata/create_metadata.ts
@@ -0,0 +1,37 @@
+import type { Metadata } from 'next/types'
+import { CONFIG } from '../../constant/config'
+
+export function createMetadata(override: Metadata): Metadata {
+ return {
+ ...override,
+ openGraph: {
+ title: override.title ?? undefined,
+ description: override.description ?? undefined,
+ images: CONFIG.mainBannerUrl,
+ siteName: CONFIG.siteName,
+ url: CONFIG.siteUrl,
+ ...override.openGraph,
+ },
+ twitter: {
+ card: 'summary_large_image',
+ creator: CONFIG.authorName,
+ title: override.title ?? undefined,
+ description: override.description ?? undefined,
+ images: CONFIG.mainBannerUrl,
+ ...override.twitter,
+ },
+ alternates: {
+ types: {
+ 'application/rss+xml': [
+ {
+ title: CONFIG.libName,
+ url: `${CONFIG.siteUrl}/blog/rss.xml`,
+ },
+ ],
+ },
+ ...override.alternates,
+ },
+ }
+}
+
+export const baseUrl = new URL('http://localhost:3000')
diff --git a/packages/web/src/lib/og/DMSerifDisplay-Regular.ttf b/packages/web/src/lib/og/DMSerifDisplay-Regular.ttf
new file mode 100644
index 0000000..72f19b4
Binary files /dev/null and b/packages/web/src/lib/og/DMSerifDisplay-Regular.ttf differ
diff --git a/packages/web/src/lib/og/DarkerGrotesque-Regular.ttf b/packages/web/src/lib/og/DarkerGrotesque-Regular.ttf
new file mode 100644
index 0000000..5c1215e
Binary files /dev/null and b/packages/web/src/lib/og/DarkerGrotesque-Regular.ttf differ
diff --git a/packages/web/src/lib/og/LICENSE.txt b/packages/web/src/lib/og/LICENSE.txt
new file mode 100644
index 0000000..3c83248
--- /dev/null
+++ b/packages/web/src/lib/og/LICENSE.txt
@@ -0,0 +1,93 @@
+Copyright 2014-2018 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. Copyright 2019 Google LLC.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://openfontlicense.org
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/packages/web/src/lib/og/mono.tsx b/packages/web/src/lib/og/mono.tsx
new file mode 100644
index 0000000..9ba774d
--- /dev/null
+++ b/packages/web/src/lib/og/mono.tsx
@@ -0,0 +1,102 @@
+import fs from 'node:fs/promises'
+import type { ImageResponseOptions } from 'next/server'
+import type { ReactNode } from 'react'
+import { CONFIG } from '@/constant/config'
+
+export interface GenerateProps {
+ title: ReactNode
+ description?: ReactNode
+ site?: ReactNode
+ logo?: ReactNode
+}
+
+const logoFont = fs.readFile('./lib/og/DMSerifDisplay-Regular.ttf')
+const majorFont = fs.readFile('./lib/og/DarkerGrotesque-Regular.ttf')
+
+export async function getImageResponseOptions(): Promise {
+ return {
+ width: 1200,
+ height: 630,
+ fonts: [
+ {
+ name: 'Mono',
+ data: await majorFont,
+ weight: 400,
+ },
+ {
+ name: 'Mono',
+ data: await logoFont,
+ weight: 600,
+ },
+ ],
+ }
+}
+
+export function generate({
+ title,
+ description,
+ logo,
+ site = CONFIG.libName,
+}: GenerateProps) {
+ const primaryTextColor = 'rgb(240,240,240)'
+
+ return (
+
+
+
+ {title}
+
+
+ {description}
+
+
+
+
+ )
+}
diff --git a/packages/web/src/lib/source.tsx b/packages/web/src/lib/source.tsx
new file mode 100644
index 0000000..f82019b
--- /dev/null
+++ b/packages/web/src/lib/source.tsx
@@ -0,0 +1,55 @@
+// ENTRY FILES FOR FUMADOCS
+
+import {
+ type InferMetaType,
+ type InferPageType,
+ type LoaderPlugin,
+ loader,
+} from 'fumadocs-core/source'
+import { lucideIconsPlugin } from 'fumadocs-core/source/lucide-icons'
+import { createMDXSource } from 'fumadocs-mdx/runtime/next'
+import { blog as blogPosts, docs } from '@/.source'
+import { i18n } from '@/lib/i18n/i18n'
+
+function pageTreeCodeTitles(): LoaderPlugin {
+ return {
+ transformPageTree: {
+ file(node) {
+ if (
+ typeof node.name === 'string' &&
+ (node.name.endsWith('()') || node.name.match(/^<\w+ \/>$/))
+ ) {
+ return {
+ ...node,
+ name: {node.name},
+ }
+ }
+ return node
+ },
+ },
+ }
+}
+
+// See https://fumadocs.dev/docs/headless/source-api for more info
+export const docSource = loader({
+ baseUrl: '/docs',
+ i18n,
+ source: docs.toFumadocsSource(),
+ plugins: [pageTreeCodeTitles(), lucideIconsPlugin()],
+})
+
+export const blogSource = loader(createMDXSource(blogPosts), {
+ baseUrl: '/blog',
+})
+
+export function getPageImage(page: InferPageType) {
+ const segments = [...page.slugs, 'image.png']
+ return {
+ segments,
+ url: `/og/docs/${segments.join('/')}`,
+ }
+}
+
+export type Page = InferPageType
+
+export type Meta = InferMetaType
diff --git a/packages/web/src/lib/utils/index.ts b/packages/web/src/lib/utils/index.ts
new file mode 100644
index 0000000..9c06c66
--- /dev/null
+++ b/packages/web/src/lib/utils/index.ts
@@ -0,0 +1,2 @@
+export * from './tailwind'
+export * from './tw'
diff --git a/packages/web/src/lib/utils/tailwind.ts b/packages/web/src/lib/utils/tailwind.ts
new file mode 100644
index 0000000..8c12ddd
--- /dev/null
+++ b/packages/web/src/lib/utils/tailwind.ts
@@ -0,0 +1,7020 @@
+/** Tailwind global color property */
+export type TailwindGlobalColor =
+ | 'red-50'
+ | 'red-100'
+ | 'red-200'
+ | 'red-300'
+ | 'red-400'
+ | 'red-500'
+ | 'red-600'
+ | 'red-700'
+ | 'red-800'
+ | 'red-900'
+ | 'red-950'
+ | 'orange-50'
+ | 'orange-100'
+ | 'orange-200'
+ | 'orange-300'
+ | 'orange-400'
+ | 'orange-500'
+ | 'orange-600'
+ | 'orange-700'
+ | 'orange-800'
+ | 'orange-900'
+ | 'orange-950'
+ | 'amber-50'
+ | 'amber-100'
+ | 'amber-200'
+ | 'amber-300'
+ | 'amber-400'
+ | 'amber-500'
+ | 'amber-600'
+ | 'amber-700'
+ | 'amber-800'
+ | 'amber-900'
+ | 'amber-950'
+ | 'yellow-50'
+ | 'yellow-100'
+ | 'yellow-200'
+ | 'yellow-300'
+ | 'yellow-400'
+ | 'yellow-500'
+ | 'yellow-600'
+ | 'yellow-700'
+ | 'yellow-800'
+ | 'yellow-900'
+ | 'yellow-950'
+ | 'lime-50'
+ | 'lime-100'
+ | 'lime-200'
+ | 'lime-300'
+ | 'lime-400'
+ | 'lime-500'
+ | 'lime-600'
+ | 'lime-700'
+ | 'lime-800'
+ | 'lime-900'
+ | 'lime-950'
+ | 'green-50'
+ | 'green-100'
+ | 'green-200'
+ | 'green-300'
+ | 'green-400'
+ | 'green-500'
+ | 'green-600'
+ | 'green-700'
+ | 'green-800'
+ | 'green-900'
+ | 'green-950'
+ | 'emerald-50'
+ | 'emerald-100'
+ | 'emerald-200'
+ | 'emerald-300'
+ | 'emerald-400'
+ | 'emerald-500'
+ | 'emerald-600'
+ | 'emerald-700'
+ | 'emerald-800'
+ | 'emerald-900'
+ | 'emerald-950'
+ | 'teal-50'
+ | 'teal-100'
+ | 'teal-200'
+ | 'teal-300'
+ | 'teal-400'
+ | 'teal-500'
+ | 'teal-600'
+ | 'teal-700'
+ | 'teal-800'
+ | 'teal-900'
+ | 'teal-950'
+ | 'cyan-50'
+ | 'cyan-100'
+ | 'cyan-200'
+ | 'cyan-300'
+ | 'cyan-400'
+ | 'cyan-500'
+ | 'cyan-600'
+ | 'cyan-700'
+ | 'cyan-800'
+ | 'cyan-900'
+ | 'cyan-950'
+ | 'sky-50'
+ | 'sky-100'
+ | 'sky-200'
+ | 'sky-300'
+ | 'sky-400'
+ | 'sky-500'
+ | 'sky-600'
+ | 'sky-700'
+ | 'sky-800'
+ | 'sky-900'
+ | 'sky-950'
+ | 'blue-50'
+ | 'blue-100'
+ | 'blue-200'
+ | 'blue-300'
+ | 'blue-400'
+ | 'blue-500'
+ | 'blue-600'
+ | 'blue-700'
+ | 'blue-800'
+ | 'blue-900'
+ | 'blue-950'
+ | 'indigo-50'
+ | 'indigo-100'
+ | 'indigo-200'
+ | 'indigo-300'
+ | 'indigo-400'
+ | 'indigo-500'
+ | 'indigo-600'
+ | 'indigo-700'
+ | 'indigo-800'
+ | 'indigo-900'
+ | 'indigo-950'
+ | 'violet-50'
+ | 'violet-100'
+ | 'violet-200'
+ | 'violet-300'
+ | 'violet-400'
+ | 'violet-500'
+ | 'violet-600'
+ | 'violet-700'
+ | 'violet-800'
+ | 'violet-900'
+ | 'violet-950'
+ | 'purple-50'
+ | 'purple-100'
+ | 'purple-200'
+ | 'purple-300'
+ | 'purple-400'
+ | 'purple-500'
+ | 'purple-600'
+ | 'purple-700'
+ | 'purple-800'
+ | 'purple-900'
+ | 'purple-950'
+ | 'fuchsia-50'
+ | 'fuchsia-100'
+ | 'fuchsia-200'
+ | 'fuchsia-300'
+ | 'fuchsia-400'
+ | 'fuchsia-500'
+ | 'fuchsia-600'
+ | 'fuchsia-700'
+ | 'fuchsia-800'
+ | 'fuchsia-900'
+ | 'fuchsia-950'
+ | 'pink-50'
+ | 'pink-100'
+ | 'pink-200'
+ | 'pink-300'
+ | 'pink-400'
+ | 'pink-500'
+ | 'pink-600'
+ | 'pink-700'
+ | 'pink-800'
+ | 'pink-900'
+ | 'pink-950'
+ | 'rose-50'
+ | 'rose-100'
+ | 'rose-200'
+ | 'rose-300'
+ | 'rose-400'
+ | 'rose-500'
+ | 'rose-600'
+ | 'rose-700'
+ | 'rose-800'
+ | 'rose-900'
+ | 'rose-950'
+ | 'slate-50'
+ | 'slate-100'
+ | 'slate-200'
+ | 'slate-300'
+ | 'slate-400'
+ | 'slate-500'
+ | 'slate-600'
+ | 'slate-700'
+ | 'slate-800'
+ | 'slate-900'
+ | 'slate-950'
+ | 'gray-50'
+ | 'gray-100'
+ | 'gray-200'
+ | 'gray-300'
+ | 'gray-400'
+ | 'gray-500'
+ | 'gray-600'
+ | 'gray-700'
+ | 'gray-800'
+ | 'gray-900'
+ | 'gray-950'
+ | 'zinc-50'
+ | 'zinc-100'
+ | 'zinc-200'
+ | 'zinc-300'
+ | 'zinc-400'
+ | 'zinc-500'
+ | 'zinc-600'
+ | 'zinc-700'
+ | 'zinc-800'
+ | 'zinc-900'
+ | 'zinc-950'
+ | 'neutral-50'
+ | 'neutral-100'
+ | 'neutral-200'
+ | 'neutral-300'
+ | 'neutral-400'
+ | 'neutral-500'
+ | 'neutral-600'
+ | 'neutral-700'
+ | 'neutral-800'
+ | 'neutral-900'
+ | 'neutral-950'
+ | 'stone-50'
+ | 'stone-100'
+ | 'stone-200'
+ | 'stone-300'
+ | 'stone-400'
+ | 'stone-500'
+ | 'stone-600'
+ | 'stone-700'
+ | 'stone-800'
+ | 'stone-900'
+ | 'stone-950'
+ | 'black'
+ | 'white'
+ | 'fd-background'
+ | 'fd-foreground'
+ | 'fd-muted'
+ | 'fd-muted-foreground'
+ | 'fd-popover'
+ | 'fd-popover-foreground'
+ | 'fd-card'
+ | 'fd-card-foreground'
+ | 'fd-border'
+ | 'fd-primary'
+ | 'fd-primary-foreground'
+ | 'fd-secondary'
+ | 'fd-secondary-foreground'
+ | 'fd-accent'
+ | 'fd-accent-foreground'
+ | 'fd-ring'
+ | 'fd-overlay'
+ | 'fd-info'
+ | 'fd-warning'
+ | 'fd-error'
+ | 'fd-success'
+ | 'fd-diff-remove'
+ | 'fd-diff-remove-symbol'
+ | 'fd-diff-add'
+ | 'fd-diff-add-symbol'
+type BackgroundImageRef1 =
+ | '0'
+ | '30'
+ | '60'
+ | '90'
+ | '120'
+ | '150'
+ | '180'
+ | '210'
+ | '240'
+ | '270'
+ | '300'
+ | '330'
+type BackgroundImageRef2 = 'b' | 'bl' | 'br' | 'l' | 'r' | 't' | 'tl' | 'tr'
+type BackgroundImageRef3 =
+ | '0%'
+ | '5%'
+ | '10%'
+ | '15%'
+ | '20%'
+ | '25%'
+ | '30%'
+ | '35%'
+ | '40%'
+ | '45%'
+ | '50%'
+ | '55%'
+ | '60%'
+ | '65%'
+ | '70%'
+ | '75%'
+ | '80%'
+ | '85%'
+ | '90%'
+ | '95%'
+ | '100%'
+ | 'current'
+ | 'inherit'
+ | 'transparent'
+ | TailwindGlobalColor
+type BackgroundImageRef4 = 'conic' | 'none' | 'radial'
+type BottomRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type GridColumnRef1 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '13'
+ | 'auto'
+type GridColumnRef2 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | 'full'
+type GridColumnRef3 = 'auto'
+type EndRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type TextIndentRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type InsetRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type LeftRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type MarginRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+ | 'auto'
+type MarginRef2 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'px'
+ | 'reverse'
+type MaskImageRef1 =
+ | '0'
+ | '0%'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '5%'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '10%'
+ | '11'
+ | '12'
+ | '14'
+ | '15%'
+ | '16'
+ | '20'
+ | '20%'
+ | '24'
+ | '25%'
+ | '28'
+ | '30%'
+ | '32'
+ | '35%'
+ | '36'
+ | '40'
+ | '40%'
+ | '44'
+ | '45%'
+ | '48'
+ | '50%'
+ | '52'
+ | '55%'
+ | '56'
+ | '60'
+ | '60%'
+ | '64'
+ | '65%'
+ | '70%'
+ | '72'
+ | '75%'
+ | '80'
+ | '80%'
+ | '85%'
+ | '90%'
+ | '95%'
+ | '96'
+ | '100%'
+ | 'current'
+ | 'inherit'
+ | 'transparent'
+ | TailwindGlobalColor
+type MaskImageRef2 = 'left' | 'right'
+type MaskImageRef3 = 'left' | 'right'
+type MaskImageRef4 = 'bottom' | 'center' | 'left' | 'right' | 'top'
+type MaskImageRef5 =
+ | 'closest-corner'
+ | 'closest-side'
+ | 'farthest-corner'
+ | 'farthest-side'
+type MaskImageRef6 = '0' | '1' | '2' | '3' | '6' | '12' | '45' | '90' | '180'
+type MaskImageRef7 = 'circle' | 'ellipse' | 'none'
+type OrderRef1 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | 'first'
+ | 'last'
+ | 'none'
+type OutlineOffsetRef1 = '0' | '1' | '2' | '4' | '8'
+type RightRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type RotateRef1 = '0' | '1' | '2' | '3' | '6' | '12' | '45' | '90' | '180'
+type GridRowRef1 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '13'
+ | 'auto'
+type GridRowRef2 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | 'full'
+type GridRowRef3 = 'auto'
+type ScaleRef1 =
+ | '0'
+ | '50'
+ | '75'
+ | '90'
+ | '95'
+ | '100'
+ | '105'
+ | '110'
+ | '125'
+ | '150'
+ | '200'
+type ScrollMarginRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type SkewRef1 = '0' | '1' | '2' | '3' | '6' | '12'
+type CustomRef1 = 'x-fd-container' | 'y-fd-container'
+type StartRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type TopRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type LetterSpacingRef1 =
+ | 'normal'
+ | 'tight'
+ | 'tighter'
+ | 'wide'
+ | 'wider'
+ | 'widest'
+type TranslateRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type TextUnderlineOffsetRef1 = '0' | '1' | '2' | '4' | '8' | 'auto'
+type ZIndexRef1 = '0' | '10' | '20' | '30' | '40' | '50' | 'auto'
+type AccentColorRef1 =
+ | 'auto'
+ | 'current'
+ | 'inherit'
+ | 'transparent'
+ | TailwindGlobalColor
+type VerticalAlignRef1 =
+ | 'baseline'
+ | 'bottom'
+ | 'middle'
+ | 'sub'
+ | 'super'
+ | 'text-bottom'
+ | 'text-top'
+ | 'top'
+type AnimationRef1 =
+ | 'bounce'
+ | 'fd-accordion-down'
+ | 'fd-accordion-up'
+ | 'fd-collapsible-down'
+ | 'fd-collapsible-up'
+ | 'fd-dialog-in'
+ | 'fd-dialog-out'
+ | 'fd-enterFromLeft'
+ | 'fd-enterFromRight'
+ | 'fd-exitToLeft'
+ | 'fd-exitToRight'
+ | 'fd-fade-in'
+ | 'fd-fade-out'
+ | 'fd-nav-menu-in'
+ | 'fd-nav-menu-out'
+ | 'fd-popover-in'
+ | 'fd-popover-out'
+ | 'fd-sidebar-in'
+ | 'fd-sidebar-out'
+ | 'none'
+ | 'ping'
+ | 'pulse'
+ | 'spin'
+type AspectRatioRef1 = 'auto' | 'square' | 'video'
+type GridAutoColumnsRef1 = 'auto' | 'fr' | 'max' | 'min'
+type GridAutoRowsRef1 = 'auto' | 'fr' | 'max' | 'min'
+type BackdropFilterRef1 =
+ | '2xl'
+ | '3xl'
+ | 'lg'
+ | 'md'
+ | 'none'
+ | 'sm'
+ | 'xl'
+ | 'xs'
+type BackdropFilterRef2 = '0' | '50' | '75' | '100' | '125' | '150' | '200'
+type BackdropFilterRef3 = '0' | '25' | '50' | '75' | '100'
+type BackdropFilterRef4 = '0' | '15' | '30' | '60' | '90' | '180'
+type BackdropFilterRef5 = '0' | '25' | '50' | '75' | '100'
+type BackdropFilterRef6 =
+ | '0'
+ | '5'
+ | '10'
+ | '15'
+ | '20'
+ | '25'
+ | '30'
+ | '35'
+ | '40'
+ | '45'
+ | '50'
+ | '55'
+ | '60'
+ | '65'
+ | '70'
+ | '75'
+ | '80'
+ | '85'
+ | '90'
+ | '95'
+ | '100'
+type BackdropFilterRef7 = '0' | '50' | '100' | '150' | '200'
+type BackdropFilterRef8 = '0' | '50' | '100'
+type BackdropFilterRef9 = 'grayscale' | 'invert' | 'sepia'
+type FlexBasisRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '2xl'
+ | '2xs'
+ | '3'
+ | '3.5'
+ | '3xl'
+ | '3xs'
+ | '4'
+ | '4xl'
+ | '5'
+ | '5xl'
+ | '6'
+ | '6xl'
+ | '7'
+ | '7xl'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'auto'
+ | 'fd-container'
+ | 'full'
+ | 'lg'
+ | 'md'
+ | 'px'
+ | 'sm'
+ | 'xl'
+ | 'xs'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+type BackgroundColorRef1 =
+ | 'current'
+ | 'inherit'
+ | 'left-bottom'
+ | 'left-top'
+ | 'right-bottom'
+ | 'right-top'
+ | 'transparent'
+ | TailwindGlobalColor
+type BackgroundSizeRef1 = 'auto' | 'contain' | 'cover'
+type BackgroundBlendModeRef1 =
+ | 'color'
+ | 'darken'
+ | 'difference'
+ | 'exclusion'
+ | 'hard-light'
+ | 'hue'
+ | 'lighten'
+ | 'luminosity'
+ | 'multiply'
+ | 'normal'
+ | 'overlay'
+ | 'saturation'
+ | 'screen'
+ | 'soft-light'
+type BackgroundBlendModeRef2 = 'burn' | 'dodge'
+type BackgroundPositionRef1 = 'left' | 'right'
+type BackgroundPositionRef2 = 'left' | 'right'
+type BackgroundPositionRef3 = 'bottom' | 'center' | 'left' | 'right' | 'top'
+type BackgroundClipRef1 = 'border' | 'content' | 'padding' | 'text'
+type BackgroundAttachmentRef1 = 'fixed' | 'local' | 'scroll'
+type BackgroundRepeatRef1 = 'round' | 'space' | 'x' | 'y'
+type BackgroundRepeatRef2 = 'no-repeat' | 'repeat'
+type BackgroundOriginRef1 = 'border' | 'content' | 'padding'
+type DisplayRef1 = 'block' | 'flex' | 'grid' | 'table'
+type DisplayRef2 =
+ | 'caption'
+ | 'cell'
+ | 'column'
+ | 'column-group'
+ | 'footer-group'
+ | 'header-group'
+ | 'row'
+ | 'row-group'
+type FilterRef1 = '2xl' | '3xl' | 'lg' | 'md' | 'none' | 'sm' | 'xl' | 'xs'
+type FilterRef2 = '0' | '50' | '75' | '100' | '125' | '150' | '200'
+type FilterRef3 =
+ | '2xl'
+ | 'current'
+ | 'inherit'
+ | 'lg'
+ | 'md'
+ | 'none'
+ | 'sm'
+ | 'transparent'
+ | 'xl'
+ | 'xs'
+ | TailwindGlobalColor
+type FilterRef4 = '0' | '25' | '50' | '75' | '100'
+type FilterRef5 = '0' | '15' | '30' | '60' | '90' | '180'
+type FilterRef6 = '0' | '25' | '50' | '75' | '100'
+type FilterRef7 = '0' | '50' | '100' | '150' | '200'
+type FilterRef8 = '0' | '50' | '100'
+type BorderWidthRef1 = '0' | '2' | '4' | '8'
+type BorderWidthRef2 = '0' | '2' | '4' | '8'
+type BorderWidthRef3 = '0' | '2' | '4' | '8'
+type BorderWidthRef4 = '0' | '2' | '4' | '8'
+type BorderWidthRef5 = '0' | '2' | '4' | '8'
+type BorderWidthRef6 = '0' | '2' | '4' | '8'
+type BorderWidthRef7 = '0' | '2' | '4' | '8'
+type BorderWidthRef8 = '0' | '2' | '4' | '8'
+type BorderWidthRef9 = '0' | '2' | '4' | '8' | 'reverse'
+type BorderWidthRef10 = '0' | '2' | '4' | '8' | 'reverse'
+type BorderWidthRef11 =
+ | '0'
+ | '2'
+ | '4'
+ | '8'
+ | 'b'
+ | 'e'
+ | 'l'
+ | 'r'
+ | 's'
+ | 't'
+ | 'x'
+ | 'y'
+type BorderWidthRef12 = 'x' | 'y'
+type BorderColorRef1 =
+ | 'current'
+ | 'inherit'
+ | 'transparent'
+ | TailwindGlobalColor
+type BorderStyleRef1 =
+ | 'dashed'
+ | 'dotted'
+ | 'double'
+ | 'hidden'
+ | 'none'
+ | 'solid'
+type BorderStyleRef2 = 'dashed' | 'dotted' | 'double' | 'none' | 'solid'
+type BorderSpacingRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type BreakAfterRef1 =
+ | 'all'
+ | 'auto'
+ | 'avoid'
+ | 'avoid-page'
+ | 'column'
+ | 'left'
+ | 'page'
+ | 'right'
+type WordBreakRef1 = 'all' | 'keep' | 'normal'
+type BreakBeforeRef1 =
+ | 'all'
+ | 'auto'
+ | 'avoid'
+ | 'avoid-page'
+ | 'column'
+ | 'left'
+ | 'page'
+ | 'right'
+type BreakInsideRef1 = 'auto' | 'avoid'
+type BreakInsideRef2 = 'column' | 'page'
+type OverflowWrapRef1 = 'anywhere' | 'break-word' | 'normal'
+type CaretColorRef1 =
+ | 'current'
+ | 'inherit'
+ | 'transparent'
+ | TailwindGlobalColor
+type ClearRef1 = 'both' | 'end' | 'left' | 'none' | 'right' | 'start'
+type ColumnsRef1 =
+ | '1'
+ | '2'
+ | '2xl'
+ | '2xs'
+ | '3'
+ | '3xl'
+ | '3xs'
+ | '4'
+ | '4xl'
+ | '5'
+ | '5xl'
+ | '6'
+ | '6xl'
+ | '7'
+ | '7xl'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | 'auto'
+ | 'lg'
+ | 'md'
+ | 'sm'
+ | 'xl'
+ | 'xs'
+type ContainRef1 =
+ | 'content'
+ | 'inline-size'
+ | 'layout'
+ | 'none'
+ | 'paint'
+ | 'size'
+ | 'strict'
+ | 'style'
+type MaxWidthRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '2xl'
+ | '2xs'
+ | '3'
+ | '3.5'
+ | '3xl'
+ | '3xs'
+ | '4'
+ | '4xl'
+ | '5'
+ | '5xl'
+ | '6'
+ | '6xl'
+ | '7'
+ | '7xl'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'dvh'
+ | 'dvw'
+ | 'fd-container'
+ | 'fit'
+ | 'full'
+ | 'lg'
+ | 'lvh'
+ | 'lvw'
+ | 'max'
+ | 'md'
+ | 'min'
+ | 'none'
+ | 'prose'
+ | 'px'
+ | 'screen'
+ | 'sm'
+ | 'svh'
+ | 'svw'
+ | 'xl'
+ | 'xs'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+type AlignContentRef1 =
+ | 'around'
+ | 'baseline'
+ | 'between'
+ | 'center'
+ | 'end'
+ | 'evenly'
+ | 'normal'
+ | 'start'
+ | 'stretch'
+type ContentRef1 = 'center-safe' | 'end-safe' | 'none'
+type CursorRef1 = 'resize'
+type CursorRef2 = 'resize'
+type CursorRef3 = 'resize'
+type CursorRef4 = 'drop'
+type CursorRef5 = 'resize'
+type CursorRef6 = 'resize'
+type CursorRef7 =
+ | 'alias'
+ | 'all-scroll'
+ | 'auto'
+ | 'cell'
+ | 'col-resize'
+ | 'context-menu'
+ | 'copy'
+ | 'crosshair'
+ | 'default'
+ | 'ew-resize'
+ | 'grab'
+ | 'grabbing'
+ | 'help'
+ | 'move'
+ | 'nesw-resize'
+ | 'none'
+ | 'not-allowed'
+ | 'ns-resize'
+ | 'nw-resize'
+ | 'nwse-resize'
+ | 'pointer'
+ | 'progress'
+ | 'row-resize'
+ | 'se-resize'
+ | 'sw-resize'
+ | 'text'
+ | 'vertical-text'
+ | 'wait'
+ | 'zoom-in'
+ | 'zoom-out'
+type TextDecorationThicknessRef1 =
+ | '0'
+ | '1'
+ | '2'
+ | 'auto'
+ | 'clone'
+ | 'from-font'
+ | 'slice'
+type TextDecorationColorRef1 =
+ | 'current'
+ | 'inherit'
+ | 'transparent'
+ | TailwindGlobalColor
+type TextDecorationStyleRef1 = 'dashed' | 'dotted' | 'double' | 'solid' | 'wavy'
+type TransitionDelayRef1 =
+ | '75'
+ | '100'
+ | '150'
+ | '200'
+ | '300'
+ | '500'
+ | '700'
+ | '1000'
+type TransitionDurationRef1 =
+ | '75'
+ | '100'
+ | '150'
+ | '200'
+ | '300'
+ | '500'
+ | '700'
+ | '1000'
+ | 'initial'
+type TransitionTimingFunctionRef1 = 'out'
+type TransitionTimingFunctionRef2 = 'in' | 'initial' | 'linear' | 'out'
+type FillRef1 =
+ | 'current'
+ | 'inherit'
+ | 'none'
+ | 'transparent'
+ | TailwindGlobalColor
+type FlexRef1 =
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'auto'
+ | 'initial'
+ | 'none'
+type FlexDirectionRef1 = 'col' | 'col-reverse' | 'row' | 'row-reverse'
+type FlexWrapRef1 = 'reverse'
+type FlexWrapRef2 = 'nowrap' | 'wrap'
+type FloatRef1 = 'end' | 'left' | 'none' | 'right' | 'start'
+type FontWeightRef1 =
+ | 'black'
+ | 'bold'
+ | 'extrabold'
+ | 'extralight'
+ | 'light'
+ | 'medium'
+ | 'normal'
+ | 'semibold'
+ | 'thin'
+type FontFamilyRef1 = 'mono' | 'sans' | 'serif'
+type FontStretchRef1 =
+ | '50%'
+ | '75%'
+ | '90%'
+ | '95%'
+ | '100%'
+ | '105%'
+ | '110%'
+ | '125%'
+ | '150%'
+ | '200%'
+ | 'condensed'
+ | 'expanded'
+ | 'extra-condensed'
+ | 'extra-expanded'
+ | 'normal'
+ | 'semi-condensed'
+ | 'semi-expanded'
+ | 'ultra-condensed'
+ | 'ultra-expanded'
+type GapRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type GridTemplateColumnsRef1 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | 'none'
+ | 'subgrid'
+type GridAutoFlowRef1 = 'col' | 'col-dense' | 'dense' | 'row' | 'row-dense'
+type GridTemplateRowsRef1 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | 'none'
+ | 'subgrid'
+type HeightRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'auto'
+ | 'dvh'
+ | 'dvw'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'fit'
+ | 'full'
+ | 'lvh'
+ | 'lvw'
+ | 'max'
+ | 'min'
+ | 'px'
+ | 'svh'
+ | 'svw'
+type HyphensRef1 = 'auto' | 'manual' | 'none'
+type BoxShadowRef1 =
+ | 'ring'
+ | 'ring-0'
+ | 'ring-1'
+ | 'ring-2'
+ | 'ring-4'
+ | 'ring-8'
+ | 'ring-amber-50'
+ | 'ring-amber-100'
+ | 'ring-amber-200'
+ | 'ring-amber-300'
+ | 'ring-amber-400'
+ | 'ring-amber-500'
+ | 'ring-amber-600'
+ | 'ring-amber-700'
+ | 'ring-amber-800'
+ | 'ring-amber-900'
+ | 'ring-amber-950'
+ | 'ring-black'
+ | 'ring-blue-50'
+ | 'ring-blue-100'
+ | 'ring-blue-200'
+ | 'ring-blue-300'
+ | 'ring-blue-400'
+ | 'ring-blue-500'
+ | 'ring-blue-600'
+ | 'ring-blue-700'
+ | 'ring-blue-800'
+ | 'ring-blue-900'
+ | 'ring-blue-950'
+ | 'ring-current'
+ | 'ring-cyan-50'
+ | 'ring-cyan-100'
+ | 'ring-cyan-200'
+ | 'ring-cyan-300'
+ | 'ring-cyan-400'
+ | 'ring-cyan-500'
+ | 'ring-cyan-600'
+ | 'ring-cyan-700'
+ | 'ring-cyan-800'
+ | 'ring-cyan-900'
+ | 'ring-cyan-950'
+ | 'ring-emerald-50'
+ | 'ring-emerald-100'
+ | 'ring-emerald-200'
+ | 'ring-emerald-300'
+ | 'ring-emerald-400'
+ | 'ring-emerald-500'
+ | 'ring-emerald-600'
+ | 'ring-emerald-700'
+ | 'ring-emerald-800'
+ | 'ring-emerald-900'
+ | 'ring-emerald-950'
+ | 'ring-fd-accent'
+ | 'ring-fd-accent-foreground'
+ | 'ring-fd-background'
+ | 'ring-fd-border'
+ | 'ring-fd-card'
+ | 'ring-fd-card-foreground'
+ | 'ring-fd-diff-add'
+ | 'ring-fd-diff-add-symbol'
+ | 'ring-fd-diff-remove'
+ | 'ring-fd-diff-remove-symbol'
+ | 'ring-fd-error'
+ | 'ring-fd-foreground'
+ | 'ring-fd-info'
+ | 'ring-fd-muted'
+ | 'ring-fd-muted-foreground'
+ | 'ring-fd-overlay'
+ | 'ring-fd-popover'
+ | 'ring-fd-popover-foreground'
+ | 'ring-fd-primary'
+ | 'ring-fd-primary-foreground'
+ | 'ring-fd-ring'
+ | 'ring-fd-secondary'
+ | 'ring-fd-secondary-foreground'
+ | 'ring-fd-success'
+ | 'ring-fd-warning'
+ | 'ring-fuchsia-50'
+ | 'ring-fuchsia-100'
+ | 'ring-fuchsia-200'
+ | 'ring-fuchsia-300'
+ | 'ring-fuchsia-400'
+ | 'ring-fuchsia-500'
+ | 'ring-fuchsia-600'
+ | 'ring-fuchsia-700'
+ | 'ring-fuchsia-800'
+ | 'ring-fuchsia-900'
+ | 'ring-fuchsia-950'
+ | 'ring-gray-50'
+ | 'ring-gray-100'
+ | 'ring-gray-200'
+ | 'ring-gray-300'
+ | 'ring-gray-400'
+ | 'ring-gray-500'
+ | 'ring-gray-600'
+ | 'ring-gray-700'
+ | 'ring-gray-800'
+ | 'ring-gray-900'
+ | 'ring-gray-950'
+ | 'ring-green-50'
+ | 'ring-green-100'
+ | 'ring-green-200'
+ | 'ring-green-300'
+ | 'ring-green-400'
+ | 'ring-green-500'
+ | 'ring-green-600'
+ | 'ring-green-700'
+ | 'ring-green-800'
+ | 'ring-green-900'
+ | 'ring-green-950'
+ | 'ring-indigo-50'
+ | 'ring-indigo-100'
+ | 'ring-indigo-200'
+ | 'ring-indigo-300'
+ | 'ring-indigo-400'
+ | 'ring-indigo-500'
+ | 'ring-indigo-600'
+ | 'ring-indigo-700'
+ | 'ring-indigo-800'
+ | 'ring-indigo-900'
+ | 'ring-indigo-950'
+ | 'ring-inherit'
+ | 'ring-lime-50'
+ | 'ring-lime-100'
+ | 'ring-lime-200'
+ | 'ring-lime-300'
+ | 'ring-lime-400'
+ | 'ring-lime-500'
+ | 'ring-lime-600'
+ | 'ring-lime-700'
+ | 'ring-lime-800'
+ | 'ring-lime-900'
+ | 'ring-lime-950'
+ | 'ring-neutral-50'
+ | 'ring-neutral-100'
+ | 'ring-neutral-200'
+ | 'ring-neutral-300'
+ | 'ring-neutral-400'
+ | 'ring-neutral-500'
+ | 'ring-neutral-600'
+ | 'ring-neutral-700'
+ | 'ring-neutral-800'
+ | 'ring-neutral-900'
+ | 'ring-neutral-950'
+ | 'ring-orange-50'
+ | 'ring-orange-100'
+ | 'ring-orange-200'
+ | 'ring-orange-300'
+ | 'ring-orange-400'
+ | 'ring-orange-500'
+ | 'ring-orange-600'
+ | 'ring-orange-700'
+ | 'ring-orange-800'
+ | 'ring-orange-900'
+ | 'ring-orange-950'
+ | 'ring-pink-50'
+ | 'ring-pink-100'
+ | 'ring-pink-200'
+ | 'ring-pink-300'
+ | 'ring-pink-400'
+ | 'ring-pink-500'
+ | 'ring-pink-600'
+ | 'ring-pink-700'
+ | 'ring-pink-800'
+ | 'ring-pink-900'
+ | 'ring-pink-950'
+ | 'ring-purple-50'
+ | 'ring-purple-100'
+ | 'ring-purple-200'
+ | 'ring-purple-300'
+ | 'ring-purple-400'
+ | 'ring-purple-500'
+ | 'ring-purple-600'
+ | 'ring-purple-700'
+ | 'ring-purple-800'
+ | 'ring-purple-900'
+ | 'ring-purple-950'
+ | 'ring-red-50'
+ | 'ring-red-100'
+ | 'ring-red-200'
+ | 'ring-red-300'
+ | 'ring-red-400'
+ | 'ring-red-500'
+ | 'ring-red-600'
+ | 'ring-red-700'
+ | 'ring-red-800'
+ | 'ring-red-900'
+ | 'ring-red-950'
+ | 'ring-rose-50'
+ | 'ring-rose-100'
+ | 'ring-rose-200'
+ | 'ring-rose-300'
+ | 'ring-rose-400'
+ | 'ring-rose-500'
+ | 'ring-rose-600'
+ | 'ring-rose-700'
+ | 'ring-rose-800'
+ | 'ring-rose-900'
+ | 'ring-rose-950'
+ | 'ring-sky-50'
+ | 'ring-sky-100'
+ | 'ring-sky-200'
+ | 'ring-sky-300'
+ | 'ring-sky-400'
+ | 'ring-sky-500'
+ | 'ring-sky-600'
+ | 'ring-sky-700'
+ | 'ring-sky-800'
+ | 'ring-sky-900'
+ | 'ring-sky-950'
+ | 'ring-slate-50'
+ | 'ring-slate-100'
+ | 'ring-slate-200'
+ | 'ring-slate-300'
+ | 'ring-slate-400'
+ | 'ring-slate-500'
+ | 'ring-slate-600'
+ | 'ring-slate-700'
+ | 'ring-slate-800'
+ | 'ring-slate-900'
+ | 'ring-slate-950'
+ | 'ring-stone-50'
+ | 'ring-stone-100'
+ | 'ring-stone-200'
+ | 'ring-stone-300'
+ | 'ring-stone-400'
+ | 'ring-stone-500'
+ | 'ring-stone-600'
+ | 'ring-stone-700'
+ | 'ring-stone-800'
+ | 'ring-stone-900'
+ | 'ring-stone-950'
+ | 'ring-teal-50'
+ | 'ring-teal-100'
+ | 'ring-teal-200'
+ | 'ring-teal-300'
+ | 'ring-teal-400'
+ | 'ring-teal-500'
+ | 'ring-teal-600'
+ | 'ring-teal-700'
+ | 'ring-teal-800'
+ | 'ring-teal-900'
+ | 'ring-teal-950'
+ | 'ring-transparent'
+ | 'ring-violet-50'
+ | 'ring-violet-100'
+ | 'ring-violet-200'
+ | 'ring-violet-300'
+ | 'ring-violet-400'
+ | 'ring-violet-500'
+ | 'ring-violet-600'
+ | 'ring-violet-700'
+ | 'ring-violet-800'
+ | 'ring-violet-900'
+ | 'ring-violet-950'
+ | 'ring-white'
+ | 'ring-yellow-50'
+ | 'ring-yellow-100'
+ | 'ring-yellow-200'
+ | 'ring-yellow-300'
+ | 'ring-yellow-400'
+ | 'ring-yellow-500'
+ | 'ring-yellow-600'
+ | 'ring-yellow-700'
+ | 'ring-yellow-800'
+ | 'ring-yellow-900'
+ | 'ring-yellow-950'
+ | 'ring-zinc-50'
+ | 'ring-zinc-100'
+ | 'ring-zinc-200'
+ | 'ring-zinc-300'
+ | 'ring-zinc-400'
+ | 'ring-zinc-500'
+ | 'ring-zinc-600'
+ | 'ring-zinc-700'
+ | 'ring-zinc-800'
+ | 'ring-zinc-900'
+ | 'ring-zinc-950'
+ | 'shadow-2xs'
+ | 'shadow-amber-50'
+ | 'shadow-amber-100'
+ | 'shadow-amber-200'
+ | 'shadow-amber-300'
+ | 'shadow-amber-400'
+ | 'shadow-amber-500'
+ | 'shadow-amber-600'
+ | 'shadow-amber-700'
+ | 'shadow-amber-800'
+ | 'shadow-amber-900'
+ | 'shadow-amber-950'
+ | 'shadow-black'
+ | 'shadow-blue-50'
+ | 'shadow-blue-100'
+ | 'shadow-blue-200'
+ | 'shadow-blue-300'
+ | 'shadow-blue-400'
+ | 'shadow-blue-500'
+ | 'shadow-blue-600'
+ | 'shadow-blue-700'
+ | 'shadow-blue-800'
+ | 'shadow-blue-900'
+ | 'shadow-blue-950'
+ | 'shadow-current'
+ | 'shadow-cyan-50'
+ | 'shadow-cyan-100'
+ | 'shadow-cyan-200'
+ | 'shadow-cyan-300'
+ | 'shadow-cyan-400'
+ | 'shadow-cyan-500'
+ | 'shadow-cyan-600'
+ | 'shadow-cyan-700'
+ | 'shadow-cyan-800'
+ | 'shadow-cyan-900'
+ | 'shadow-cyan-950'
+ | 'shadow-emerald-50'
+ | 'shadow-emerald-100'
+ | 'shadow-emerald-200'
+ | 'shadow-emerald-300'
+ | 'shadow-emerald-400'
+ | 'shadow-emerald-500'
+ | 'shadow-emerald-600'
+ | 'shadow-emerald-700'
+ | 'shadow-emerald-800'
+ | 'shadow-emerald-900'
+ | 'shadow-emerald-950'
+ | 'shadow-fd-accent'
+ | 'shadow-fd-accent-foreground'
+ | 'shadow-fd-background'
+ | 'shadow-fd-border'
+ | 'shadow-fd-card'
+ | 'shadow-fd-card-foreground'
+ | 'shadow-fd-diff-add'
+ | 'shadow-fd-diff-add-symbol'
+ | 'shadow-fd-diff-remove'
+ | 'shadow-fd-diff-remove-symbol'
+ | 'shadow-fd-error'
+ | 'shadow-fd-foreground'
+ | 'shadow-fd-info'
+ | 'shadow-fd-muted'
+ | 'shadow-fd-muted-foreground'
+ | 'shadow-fd-overlay'
+ | 'shadow-fd-popover'
+ | 'shadow-fd-popover-foreground'
+ | 'shadow-fd-primary'
+ | 'shadow-fd-primary-foreground'
+ | 'shadow-fd-ring'
+ | 'shadow-fd-secondary'
+ | 'shadow-fd-secondary-foreground'
+ | 'shadow-fd-success'
+ | 'shadow-fd-warning'
+ | 'shadow-fuchsia-50'
+ | 'shadow-fuchsia-100'
+ | 'shadow-fuchsia-200'
+ | 'shadow-fuchsia-300'
+ | 'shadow-fuchsia-400'
+ | 'shadow-fuchsia-500'
+ | 'shadow-fuchsia-600'
+ | 'shadow-fuchsia-700'
+ | 'shadow-fuchsia-800'
+ | 'shadow-fuchsia-900'
+ | 'shadow-fuchsia-950'
+ | 'shadow-gray-50'
+ | 'shadow-gray-100'
+ | 'shadow-gray-200'
+ | 'shadow-gray-300'
+ | 'shadow-gray-400'
+ | 'shadow-gray-500'
+ | 'shadow-gray-600'
+ | 'shadow-gray-700'
+ | 'shadow-gray-800'
+ | 'shadow-gray-900'
+ | 'shadow-gray-950'
+ | 'shadow-green-50'
+ | 'shadow-green-100'
+ | 'shadow-green-200'
+ | 'shadow-green-300'
+ | 'shadow-green-400'
+ | 'shadow-green-500'
+ | 'shadow-green-600'
+ | 'shadow-green-700'
+ | 'shadow-green-800'
+ | 'shadow-green-900'
+ | 'shadow-green-950'
+ | 'shadow-indigo-50'
+ | 'shadow-indigo-100'
+ | 'shadow-indigo-200'
+ | 'shadow-indigo-300'
+ | 'shadow-indigo-400'
+ | 'shadow-indigo-500'
+ | 'shadow-indigo-600'
+ | 'shadow-indigo-700'
+ | 'shadow-indigo-800'
+ | 'shadow-indigo-900'
+ | 'shadow-indigo-950'
+ | 'shadow-inherit'
+ | 'shadow-initial'
+ | 'shadow-lime-50'
+ | 'shadow-lime-100'
+ | 'shadow-lime-200'
+ | 'shadow-lime-300'
+ | 'shadow-lime-400'
+ | 'shadow-lime-500'
+ | 'shadow-lime-600'
+ | 'shadow-lime-700'
+ | 'shadow-lime-800'
+ | 'shadow-lime-900'
+ | 'shadow-lime-950'
+ | 'shadow-neutral-50'
+ | 'shadow-neutral-100'
+ | 'shadow-neutral-200'
+ | 'shadow-neutral-300'
+ | 'shadow-neutral-400'
+ | 'shadow-neutral-500'
+ | 'shadow-neutral-600'
+ | 'shadow-neutral-700'
+ | 'shadow-neutral-800'
+ | 'shadow-neutral-900'
+ | 'shadow-neutral-950'
+ | 'shadow-none'
+ | 'shadow-orange-50'
+ | 'shadow-orange-100'
+ | 'shadow-orange-200'
+ | 'shadow-orange-300'
+ | 'shadow-orange-400'
+ | 'shadow-orange-500'
+ | 'shadow-orange-600'
+ | 'shadow-orange-700'
+ | 'shadow-orange-800'
+ | 'shadow-orange-900'
+ | 'shadow-orange-950'
+ | 'shadow-pink-50'
+ | 'shadow-pink-100'
+ | 'shadow-pink-200'
+ | 'shadow-pink-300'
+ | 'shadow-pink-400'
+ | 'shadow-pink-500'
+ | 'shadow-pink-600'
+ | 'shadow-pink-700'
+ | 'shadow-pink-800'
+ | 'shadow-pink-900'
+ | 'shadow-pink-950'
+ | 'shadow-purple-50'
+ | 'shadow-purple-100'
+ | 'shadow-purple-200'
+ | 'shadow-purple-300'
+ | 'shadow-purple-400'
+ | 'shadow-purple-500'
+ | 'shadow-purple-600'
+ | 'shadow-purple-700'
+ | 'shadow-purple-800'
+ | 'shadow-purple-900'
+ | 'shadow-purple-950'
+ | 'shadow-red-50'
+ | 'shadow-red-100'
+ | 'shadow-red-200'
+ | 'shadow-red-300'
+ | 'shadow-red-400'
+ | 'shadow-red-500'
+ | 'shadow-red-600'
+ | 'shadow-red-700'
+ | 'shadow-red-800'
+ | 'shadow-red-900'
+ | 'shadow-red-950'
+ | 'shadow-rose-50'
+ | 'shadow-rose-100'
+ | 'shadow-rose-200'
+ | 'shadow-rose-300'
+ | 'shadow-rose-400'
+ | 'shadow-rose-500'
+ | 'shadow-rose-600'
+ | 'shadow-rose-700'
+ | 'shadow-rose-800'
+ | 'shadow-rose-900'
+ | 'shadow-rose-950'
+ | 'shadow-sky-50'
+ | 'shadow-sky-100'
+ | 'shadow-sky-200'
+ | 'shadow-sky-300'
+ | 'shadow-sky-400'
+ | 'shadow-sky-500'
+ | 'shadow-sky-600'
+ | 'shadow-sky-700'
+ | 'shadow-sky-800'
+ | 'shadow-sky-900'
+ | 'shadow-sky-950'
+ | 'shadow-slate-50'
+ | 'shadow-slate-100'
+ | 'shadow-slate-200'
+ | 'shadow-slate-300'
+ | 'shadow-slate-400'
+ | 'shadow-slate-500'
+ | 'shadow-slate-600'
+ | 'shadow-slate-700'
+ | 'shadow-slate-800'
+ | 'shadow-slate-900'
+ | 'shadow-slate-950'
+ | 'shadow-sm'
+ | 'shadow-stone-50'
+ | 'shadow-stone-100'
+ | 'shadow-stone-200'
+ | 'shadow-stone-300'
+ | 'shadow-stone-400'
+ | 'shadow-stone-500'
+ | 'shadow-stone-600'
+ | 'shadow-stone-700'
+ | 'shadow-stone-800'
+ | 'shadow-stone-900'
+ | 'shadow-stone-950'
+ | 'shadow-teal-50'
+ | 'shadow-teal-100'
+ | 'shadow-teal-200'
+ | 'shadow-teal-300'
+ | 'shadow-teal-400'
+ | 'shadow-teal-500'
+ | 'shadow-teal-600'
+ | 'shadow-teal-700'
+ | 'shadow-teal-800'
+ | 'shadow-teal-900'
+ | 'shadow-teal-950'
+ | 'shadow-transparent'
+ | 'shadow-violet-50'
+ | 'shadow-violet-100'
+ | 'shadow-violet-200'
+ | 'shadow-violet-300'
+ | 'shadow-violet-400'
+ | 'shadow-violet-500'
+ | 'shadow-violet-600'
+ | 'shadow-violet-700'
+ | 'shadow-violet-800'
+ | 'shadow-violet-900'
+ | 'shadow-violet-950'
+ | 'shadow-white'
+ | 'shadow-xs'
+ | 'shadow-yellow-50'
+ | 'shadow-yellow-100'
+ | 'shadow-yellow-200'
+ | 'shadow-yellow-300'
+ | 'shadow-yellow-400'
+ | 'shadow-yellow-500'
+ | 'shadow-yellow-600'
+ | 'shadow-yellow-700'
+ | 'shadow-yellow-800'
+ | 'shadow-yellow-900'
+ | 'shadow-yellow-950'
+ | 'shadow-zinc-50'
+ | 'shadow-zinc-100'
+ | 'shadow-zinc-200'
+ | 'shadow-zinc-300'
+ | 'shadow-zinc-400'
+ | 'shadow-zinc-500'
+ | 'shadow-zinc-600'
+ | 'shadow-zinc-700'
+ | 'shadow-zinc-800'
+ | 'shadow-zinc-900'
+ | 'shadow-zinc-950'
+type BoxShadowRef2 =
+ | '0'
+ | '1'
+ | '2'
+ | '4'
+ | '8'
+ | 'current'
+ | 'inherit'
+ | 'transparent'
+ | TailwindGlobalColor
+type BoxShadowRef3 =
+ | '2xl'
+ | '2xs'
+ | 'current'
+ | 'inherit'
+ | 'initial'
+ | 'inner'
+ | 'lg'
+ | 'md'
+ | 'none'
+ | 'sm'
+ | 'transparent'
+ | 'xl'
+ | 'xs'
+ | TailwindGlobalColor
+type AlignItemsRef1 =
+ | 'baseline'
+ | 'baseline-last'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'start'
+ | 'stretch'
+type JustifyContentRef1 =
+ | 'around'
+ | 'baseline'
+ | 'between'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'evenly'
+ | 'normal'
+ | 'start'
+ | 'stretch'
+type JustifyItemsRef1 =
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'normal'
+ | 'start'
+ | 'stretch'
+type JustifySelfRef1 =
+ | 'auto'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'start'
+ | 'stretch'
+type LineHeightRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'loose'
+ | 'none'
+ | 'normal'
+ | 'px'
+ | 'relaxed'
+ | 'snug'
+ | 'tight'
+type LineClampRef1 = '1' | '2' | '3' | '4' | '5' | '6' | 'none'
+type TextDecorationLineRef1 = 'through'
+type ListStyleTypeRef1 = 'decimal' | 'disc' | 'none'
+type MaskCompositeRef1 = 'add' | 'exclude' | 'intersect' | 'subtract'
+type MaskModeRef1 = 'alpha' | 'luminance' | 'match'
+type MaskSizeRef1 = 'auto' | 'contain' | 'cover'
+type MaskPositionRef1 = 'left' | 'right'
+type MaskPositionRef2 = 'left' | 'right'
+type MaskPositionRef3 = 'bottom' | 'center' | 'left' | 'right' | 'top'
+type MaskClipRef1 =
+ | 'border'
+ | 'content'
+ | 'fill'
+ | 'padding'
+ | 'stroke'
+ | 'view'
+type MaskClipRef2 = 'no-clip'
+type MaskRepeatRef1 = 'round' | 'space' | 'x' | 'y'
+type MaskRepeatRef2 = 'no-repeat' | 'repeat'
+type MaskOriginRef1 =
+ | 'border'
+ | 'content'
+ | 'fill'
+ | 'padding'
+ | 'stroke'
+ | 'view'
+type MaxHeightRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'dvh'
+ | 'dvw'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'fit'
+ | 'full'
+ | 'lvh'
+ | 'lvw'
+ | 'max'
+ | 'min'
+ | 'none'
+ | 'px'
+ | 'screen'
+ | 'svh'
+ | 'svw'
+type MinHeightRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'auto'
+ | 'dvh'
+ | 'dvw'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'fit'
+ | 'full'
+ | 'lvh'
+ | 'lvw'
+ | 'max'
+ | 'min'
+ | 'px'
+ | 'screen'
+ | 'svh'
+ | 'svw'
+type MinWidthRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '2xl'
+ | '2xs'
+ | '3'
+ | '3.5'
+ | '3xl'
+ | '3xs'
+ | '4'
+ | '4xl'
+ | '5'
+ | '5xl'
+ | '6'
+ | '6xl'
+ | '7'
+ | '7xl'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'auto'
+ | 'dvh'
+ | 'dvw'
+ | 'fd-container'
+ | 'fit'
+ | 'full'
+ | 'lg'
+ | 'lvh'
+ | 'lvw'
+ | 'max'
+ | 'md'
+ | 'min'
+ | 'px'
+ | 'screen'
+ | 'sm'
+ | 'svh'
+ | 'svw'
+ | 'xl'
+ | 'xs'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+type MixBlendModeRef1 =
+ | 'color'
+ | 'darken'
+ | 'difference'
+ | 'exclusion'
+ | 'hard-light'
+ | 'hue'
+ | 'lighten'
+ | 'luminosity'
+ | 'multiply'
+ | 'normal'
+ | 'overlay'
+ | 'plus-darker'
+ | 'plus-lighter'
+ | 'saturation'
+ | 'screen'
+ | 'soft-light'
+type MixBlendModeRef2 = 'burn' | 'dodge'
+type ObjectPositionRef1 = 'left' | 'right'
+type ObjectPositionRef2 = 'bottom' | 'top'
+type ObjectPositionRef3 = 'bottom' | 'top'
+type ObjectPositionRef4 = 'left' | 'right'
+type ObjectPositionRef5 = 'bottom' | 'center' | 'left' | 'right' | 'top'
+type ObjectFitRef1 = 'contain' | 'cover' | 'fill' | 'none' | 'scale-down'
+type OpacityRef1 =
+ | '0'
+ | '5'
+ | '10'
+ | '15'
+ | '20'
+ | '25'
+ | '30'
+ | '35'
+ | '40'
+ | '45'
+ | '50'
+ | '55'
+ | '60'
+ | '65'
+ | '70'
+ | '75'
+ | '80'
+ | '85'
+ | '90'
+ | '95'
+ | '100'
+type TransformOriginRef1 = 'left' | 'right'
+type TransformOriginRef2 = 'left' | 'right'
+type TransformOriginRef3 = 'bottom' | 'center' | 'left' | 'right' | 'top'
+type OutlineWidthRef1 = '0' | '1' | '2' | '4' | '8'
+type OutlineColorRef1 =
+ | 'current'
+ | 'inherit'
+ | 'transparent'
+ | TailwindGlobalColor
+type OutlineStyleRef1 =
+ | 'dashed'
+ | 'dotted'
+ | 'double'
+ | 'hidden'
+ | 'none'
+ | 'solid'
+type OverflowRef1 = 'auto' | 'clip' | 'hidden' | 'scroll' | 'visible'
+type OverflowRef2 = 'auto' | 'clip' | 'hidden' | 'scroll' | 'visible'
+type OverflowRef3 = 'auto' | 'clip' | 'hidden' | 'scroll' | 'visible'
+type OverscrollBehaviorRef1 = 'auto' | 'contain' | 'none'
+type OverscrollBehaviorRef2 = 'auto' | 'contain' | 'none'
+type OverscrollBehaviorRef3 = 'auto' | 'contain' | 'none'
+type PaddingRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type PerspectiveRef1 =
+ | 'distant'
+ | 'dramatic'
+ | 'midrange'
+ | 'near'
+ | 'none'
+ | 'normal'
+type PerspectiveOriginRef1 = 'left' | 'right'
+type PerspectiveOriginRef2 = 'left' | 'right'
+type PerspectiveOriginRef3 = 'bottom' | 'center' | 'left' | 'right' | 'top'
+type PlaceContentRef1 =
+ | 'around'
+ | 'baseline'
+ | 'between'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'evenly'
+ | 'start'
+ | 'stretch'
+type PlaceItemsRef1 =
+ | 'baseline'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'start'
+ | 'stretch'
+type PlaceSelfRef1 =
+ | 'auto'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'start'
+ | 'stretch'
+type ColorRef1 = 'current' | 'inherit' | 'transparent' | TailwindGlobalColor
+type ResizeRef1 = 'none' | 'x' | 'y'
+type BorderRadiusRef1 =
+ | '2xl'
+ | '3xl'
+ | '4xl'
+ | 'full'
+ | 'lg'
+ | 'md'
+ | 'none'
+ | 'sm'
+ | 'xl'
+ | 'xs'
+type ColorSchemeRef1 = 'dark'
+type ColorSchemeRef2 = 'dark' | 'light' | 'normal' | 'only-dark' | 'only-light'
+type ScrollPaddingRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type UserSelectRef1 = 'all' | 'auto' | 'none' | 'text'
+type AlignSelfRef1 =
+ | 'auto'
+ | 'baseline'
+ | 'baseline-last'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'start'
+ | 'stretch'
+type WidthRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'auto'
+ | 'dvh'
+ | 'dvw'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'fit'
+ | 'full'
+ | 'lvh'
+ | 'lvw'
+ | 'max'
+ | 'min'
+ | 'px'
+ | 'svh'
+ | 'svw'
+type ScrollSnapAlignRef1 = 'align-none' | 'center' | 'end' | 'start'
+type ScrollSnapTypeRef1 =
+ | 'both'
+ | 'mandatory'
+ | 'none'
+ | 'proximity'
+ | 'x'
+ | 'y'
+type StrokeWidthRef1 = '0' | '1' | '2' | '3'
+type StrokeRef1 =
+ | 'current'
+ | 'inherit'
+ | 'none'
+ | 'transparent'
+ | TailwindGlobalColor
+type FontSizeRef1 =
+ | '2xl'
+ | '3xl'
+ | '4xl'
+ | '5xl'
+ | '6xl'
+ | '7xl'
+ | '8xl'
+ | '9xl'
+ | 'base'
+ | 'lg'
+ | 'sm'
+ | 'xl'
+ | 'xs'
+type TextWrapRef1 = 'balance' | 'nowrap' | 'pretty' | 'wrap'
+type TextAlignRef1 = 'center' | 'end' | 'justify' | 'left' | 'right' | 'start'
+type TextShadowRef1 =
+ | '2xs'
+ | 'current'
+ | 'inherit'
+ | 'initial'
+ | 'lg'
+ | 'md'
+ | 'none'
+ | 'sm'
+ | 'transparent'
+ | 'xs'
+ | TailwindGlobalColor
+type TouchActionRef1 = 'down' | 'left' | 'right' | 'up' | 'x' | 'y'
+type TouchActionRef2 = 'auto' | 'manipulation' | 'none' | 'pinch-zoom'
+type TransformRef1 = 'cpu' | 'gpu' | 'none'
+type TransformBoxRef1 = 'border' | 'content' | 'fill' | 'stroke' | 'view'
+type TransitionPropertyRef1 =
+ | 'all'
+ | 'colors'
+ | 'none'
+ | 'opacity'
+ | 'shadow'
+ | 'transform'
+type WhiteSpaceRef1 = 'line' | 'wrap'
+type WhiteSpaceRef2 = 'break-spaces' | 'normal' | 'nowrap' | 'pre'
+type WillChangeRef1 = 'auto' | 'contents' | 'scroll' | 'transform'
+type BackgroundImageBgconicLiteral = `bg-conic-${BackgroundImageRef1}`
+type BackgroundImageBgconicLiteralWithSign =
+ | BackgroundImageBgconicLiteral
+ | `-${BackgroundImageBgconicLiteral}`
+type BackgroundImageBglinearLiteral = `bg-linear-${BackgroundImageRef1}`
+type BackgroundImageBglinearLiteralWithSign =
+ | BackgroundImageBglinearLiteral
+ | `-${BackgroundImageBglinearLiteral}`
+type BackgroundImageBglineartoLiteral = `bg-linear-to-${BackgroundImageRef2}`
+type BackgroundImageBglineartoLiteralWithSign =
+ | BackgroundImageBglineartoLiteral
+ | `-${BackgroundImageBglineartoLiteral}`
+type BackgroundImageFromLiteral = `from-${BackgroundImageRef3}`
+type BackgroundImageFromLiteralWithSign =
+ | BackgroundImageFromLiteral
+ | `-${BackgroundImageFromLiteral}`
+type BackgroundImageToLiteral = `to-${BackgroundImageRef3}`
+type BackgroundImageToLiteralWithSign =
+ | BackgroundImageToLiteral
+ | `-${BackgroundImageToLiteral}`
+type BackgroundImageViaLiteral = `via-${BackgroundImageRef3}` | 'via-none'
+type BackgroundImageViaLiteralWithSign =
+ | BackgroundImageViaLiteral
+ | `-${BackgroundImageViaLiteral}`
+type BackgroundImageBgLiteral = `bg-${BackgroundImageRef4}`
+type BackgroundImageBgLiteralWithSign =
+ | BackgroundImageBgLiteral
+ | `-${BackgroundImageBgLiteral}`
+type BackgroundImageValue =
+ | BackgroundImageBgconicLiteralWithSign
+ | BackgroundImageBglinearLiteralWithSign
+ | BackgroundImageBglineartoLiteralWithSign
+ | BackgroundImageFromLiteralWithSign
+ | BackgroundImageToLiteralWithSign
+ | BackgroundImageViaLiteralWithSign
+ | BackgroundImageBgLiteralWithSign
+interface TailwindBackgroundImage {
+ /**
+ * `BackgroundImage`
+ *
+ * Utilities for controlling an element's background image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-image Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-image , MDN docs}
+ */
+ backgroundImage: BackgroundImageValue
+}
+type BottomLiteral = `bottom-${BottomRef1}`
+type BottomLiteralWithSign = BottomLiteral | `-${BottomLiteral}`
+type BottomValue = BottomLiteralWithSign
+interface TailwindBottom {
+ /**
+ * `Bottom`
+ *
+ * Utilities for controlling the placement of positioned elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/top-right-bottom-left Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/bottom , MDN docs}
+ */
+ bottom: BottomValue
+}
+type GridColumnColendLiteral = `col-end-${GridColumnRef1}`
+type GridColumnColendLiteralWithSign =
+ | GridColumnColendLiteral
+ | `-${GridColumnColendLiteral}`
+type GridColumnColstartLiteral = `col-start-${GridColumnRef1}`
+type GridColumnColstartLiteralWithSign =
+ | GridColumnColstartLiteral
+ | `-${GridColumnColstartLiteral}`
+type GridColumnColspanLiteral = `col-span-${GridColumnRef2}`
+type GridColumnColspanLiteralWithSign =
+ | GridColumnColspanLiteral
+ | `-${GridColumnColspanLiteral}`
+type GridColumnColLiteral = `col-${GridColumnRef3}`
+type GridColumnColLiteralWithSign =
+ | GridColumnColLiteral
+ | `-${GridColumnColLiteral}`
+type GridColumnValue =
+ | GridColumnColendLiteralWithSign
+ | GridColumnColstartLiteralWithSign
+ | GridColumnColspanLiteralWithSign
+ | GridColumnColLiteralWithSign
+interface TailwindGridColumn {
+ /**
+ * `GridColumn`
+ *
+ * Utilities for controlling how elements are sized and placed across grid
+ * columns.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-column Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-column , MDN docs}
+ */
+ gridColumn: GridColumnValue
+}
+type EndLiteral = `end-${EndRef1}`
+type EndLiteralWithSign = EndLiteral | `-${EndLiteral}`
+type EndValue = EndLiteralWithSign
+interface TailwindEnd {
+ /**
+ * `End`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/end , MDN docs}
+ */
+ end: EndValue
+}
+type TextIndentIndentLiteral = `indent-${TextIndentRef1}`
+type TextIndentIndentLiteralWithSign =
+ | TextIndentIndentLiteral
+ | `-${TextIndentIndentLiteral}`
+type TextIndentValue = TextIndentIndentLiteralWithSign
+interface TailwindTextIndent {
+ /**
+ * `TextIndent`
+ *
+ * Utilities for controlling the amount of empty space shown before text in a
+ * block.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-indent Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-indent , MDN docs}
+ */
+ textIndent: TextIndentValue
+}
+type InsetXLiteral = `inset-x-${InsetRef1}`
+type InsetXLiteralWithSign = InsetXLiteral | `-${InsetXLiteral}`
+type InsetYLiteral = `inset-y-${InsetRef1}`
+type InsetYLiteralWithSign = InsetYLiteral | `-${InsetYLiteral}`
+type InsetLiteral = `inset-${InsetRef1}`
+type InsetLiteralWithSign = InsetLiteral | `-${InsetLiteral}`
+type InsetValue =
+ | InsetXLiteralWithSign
+ | InsetYLiteralWithSign
+ | InsetLiteralWithSign
+interface TailwindInset {
+ /**
+ * `Inset`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/inset , MDN docs}
+ */
+ inset: InsetValue
+}
+type LeftLiteral = `left-${LeftRef1}`
+type LeftLiteralWithSign = LeftLiteral | `-${LeftLiteral}`
+type LeftValue = LeftLiteralWithSign
+interface TailwindLeft {
+ /**
+ * `Left`
+ *
+ * Utilities for controlling the placement of positioned elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/top-right-bottom-left Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/left , MDN docs}
+ */
+ left: LeftValue
+}
+type MarginMLiteral = `m-${MarginRef1}`
+type MarginMLiteralWithSign = MarginMLiteral | `-${MarginMLiteral}`
+type MarginMbLiteral = `mb-${MarginRef1}`
+type MarginMbLiteralWithSign = MarginMbLiteral | `-${MarginMbLiteral}`
+type MarginMeLiteral = `me-${MarginRef1}`
+type MarginMeLiteralWithSign = MarginMeLiteral | `-${MarginMeLiteral}`
+type MarginMlLiteral = `ml-${MarginRef1}`
+type MarginMlLiteralWithSign = MarginMlLiteral | `-${MarginMlLiteral}`
+type MarginMrLiteral = `mr-${MarginRef1}`
+type MarginMrLiteralWithSign = MarginMrLiteral | `-${MarginMrLiteral}`
+type MarginMsLiteral = `ms-${MarginRef1}`
+type MarginMsLiteralWithSign = MarginMsLiteral | `-${MarginMsLiteral}`
+type MarginMtLiteral = `mt-${MarginRef1}`
+type MarginMtLiteralWithSign = MarginMtLiteral | `-${MarginMtLiteral}`
+type MarginMxLiteral = `mx-${MarginRef1}`
+type MarginMxLiteralWithSign = MarginMxLiteral | `-${MarginMxLiteral}`
+type MarginMyLiteral = `my-${MarginRef1}`
+type MarginMyLiteralWithSign = MarginMyLiteral | `-${MarginMyLiteral}`
+type MarginSpacexLiteral = `space-x-${MarginRef2}`
+type MarginSpacexLiteralWithSign =
+ | MarginSpacexLiteral
+ | `-${MarginSpacexLiteral}`
+type MarginSpaceyLiteral = `space-y-${MarginRef2}`
+type MarginSpaceyLiteralWithSign =
+ | MarginSpaceyLiteral
+ | `-${MarginSpaceyLiteral}`
+type MarginValue =
+ | MarginMLiteralWithSign
+ | MarginMbLiteralWithSign
+ | MarginMeLiteralWithSign
+ | MarginMlLiteralWithSign
+ | MarginMrLiteralWithSign
+ | MarginMsLiteralWithSign
+ | MarginMtLiteralWithSign
+ | MarginMxLiteralWithSign
+ | MarginMyLiteralWithSign
+ | MarginSpacexLiteralWithSign
+ | MarginSpaceyLiteralWithSign
+interface TailwindMargin {
+ /**
+ * `Margin`
+ *
+ * Utilities for controlling an element's margin.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/margin Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/margin , MDN docs}
+ */
+ margin: MarginValue
+}
+type MaskImageMaskconicfromLiteral = `mask-conic-from-${MaskImageRef1}`
+type MaskImageMaskconicfromLiteralWithSign =
+ | MaskImageMaskconicfromLiteral
+ | `-${MaskImageMaskconicfromLiteral}`
+type MaskImageMaskconictoLiteral = `mask-conic-to-${MaskImageRef1}`
+type MaskImageMaskconictoLiteralWithSign =
+ | MaskImageMaskconictoLiteral
+ | `-${MaskImageMaskconictoLiteral}`
+type MaskImageMasklinearfromLiteral = `mask-linear-from-${MaskImageRef1}`
+type MaskImageMasklinearfromLiteralWithSign =
+ | MaskImageMasklinearfromLiteral
+ | `-${MaskImageMasklinearfromLiteral}`
+type MaskImageMasklineartoLiteral = `mask-linear-to-${MaskImageRef1}`
+type MaskImageMasklineartoLiteralWithSign =
+ | MaskImageMasklineartoLiteral
+ | `-${MaskImageMasklineartoLiteral}`
+type MaskImageMaskbfromLiteral = `mask-b-from-${MaskImageRef1}`
+type MaskImageMaskbfromLiteralWithSign =
+ | MaskImageMaskbfromLiteral
+ | `-${MaskImageMaskbfromLiteral}`
+type MaskImageMaskbtoLiteral = `mask-b-to-${MaskImageRef1}`
+type MaskImageMaskbtoLiteralWithSign =
+ | MaskImageMaskbtoLiteral
+ | `-${MaskImageMaskbtoLiteral}`
+type MaskImageMaskradialatbottomLiteral =
+ `mask-radial-at-bottom-${MaskImageRef2}`
+type MaskImageMaskradialatbottomLiteralWithSign =
+ | MaskImageMaskradialatbottomLiteral
+ | `-${MaskImageMaskradialatbottomLiteral}`
+type MaskImageMaskradialattopLiteral = `mask-radial-at-top-${MaskImageRef3}`
+type MaskImageMaskradialattopLiteralWithSign =
+ | MaskImageMaskradialattopLiteral
+ | `-${MaskImageMaskradialattopLiteral}`
+type MaskImageMaskradialfromLiteral = `mask-radial-from-${MaskImageRef1}`
+type MaskImageMaskradialfromLiteralWithSign =
+ | MaskImageMaskradialfromLiteral
+ | `-${MaskImageMaskradialfromLiteral}`
+type MaskImageMaskradialtoLiteral = `mask-radial-to-${MaskImageRef1}`
+type MaskImageMaskradialtoLiteralWithSign =
+ | MaskImageMaskradialtoLiteral
+ | `-${MaskImageMaskradialtoLiteral}`
+type MaskImageMasktfromLiteral = `mask-t-from-${MaskImageRef1}`
+type MaskImageMasktfromLiteralWithSign =
+ | MaskImageMasktfromLiteral
+ | `-${MaskImageMasktfromLiteral}`
+type MaskImageMaskttoLiteral = `mask-t-to-${MaskImageRef1}`
+type MaskImageMaskttoLiteralWithSign =
+ | MaskImageMaskttoLiteral
+ | `-${MaskImageMaskttoLiteral}`
+type MaskImageMaskxfromLiteral = `mask-x-from-${MaskImageRef1}`
+type MaskImageMaskxfromLiteralWithSign =
+ | MaskImageMaskxfromLiteral
+ | `-${MaskImageMaskxfromLiteral}`
+type MaskImageMaskxtoLiteral = `mask-x-to-${MaskImageRef1}`
+type MaskImageMaskxtoLiteralWithSign =
+ | MaskImageMaskxtoLiteral
+ | `-${MaskImageMaskxtoLiteral}`
+type MaskImageMaskyfromLiteral = `mask-y-from-${MaskImageRef1}`
+type MaskImageMaskyfromLiteralWithSign =
+ | MaskImageMaskyfromLiteral
+ | `-${MaskImageMaskyfromLiteral}`
+type MaskImageMaskytoLiteral = `mask-y-to-${MaskImageRef1}`
+type MaskImageMaskytoLiteralWithSign =
+ | MaskImageMaskytoLiteral
+ | `-${MaskImageMaskytoLiteral}`
+type MaskImageMaskradialatLiteral = `mask-radial-at-${MaskImageRef4}`
+type MaskImageMaskradialatLiteralWithSign =
+ | MaskImageMaskradialatLiteral
+ | `-${MaskImageMaskradialatLiteral}`
+type MaskImageMaskradialLiteral = `mask-radial-${MaskImageRef5}`
+type MaskImageMaskradialLiteralWithSign =
+ | MaskImageMaskradialLiteral
+ | `-${MaskImageMaskradialLiteral}`
+type MaskImageMasklinearLiteral = `mask-linear-${MaskImageRef6}`
+type MaskImageMasklinearLiteralWithSign =
+ | MaskImageMasklinearLiteral
+ | `-${MaskImageMasklinearLiteral}`
+type MaskImageMaskLiteral = `mask-${MaskImageRef7}`
+type MaskImageMaskLiteralWithSign =
+ | MaskImageMaskLiteral
+ | `-${MaskImageMaskLiteral}`
+type MaskImageMaskconicLiteral = `mask-conic-${MaskImageRef6}`
+type MaskImageMaskconicLiteralWithSign =
+ | MaskImageMaskconicLiteral
+ | `-${MaskImageMaskconicLiteral}`
+type MaskImageMasklfromLiteral = `mask-l-from-${MaskImageRef1}`
+type MaskImageMasklfromLiteralWithSign =
+ | MaskImageMasklfromLiteral
+ | `-${MaskImageMasklfromLiteral}`
+type MaskImageMaskltoLiteral = `mask-l-to-${MaskImageRef1}`
+type MaskImageMaskltoLiteralWithSign =
+ | MaskImageMaskltoLiteral
+ | `-${MaskImageMaskltoLiteral}`
+type MaskImageMaskrfromLiteral = `mask-r-from-${MaskImageRef1}`
+type MaskImageMaskrfromLiteralWithSign =
+ | MaskImageMaskrfromLiteral
+ | `-${MaskImageMaskrfromLiteral}`
+type MaskImageMaskrtoLiteral = `mask-r-to-${MaskImageRef1}`
+type MaskImageMaskrtoLiteralWithSign =
+ | MaskImageMaskrtoLiteral
+ | `-${MaskImageMaskrtoLiteral}`
+type MaskImageValue =
+ | MaskImageMaskconicfromLiteralWithSign
+ | MaskImageMaskconictoLiteralWithSign
+ | MaskImageMasklinearfromLiteralWithSign
+ | MaskImageMasklineartoLiteralWithSign
+ | MaskImageMaskbfromLiteralWithSign
+ | MaskImageMaskbtoLiteralWithSign
+ | MaskImageMaskradialatbottomLiteralWithSign
+ | MaskImageMaskradialattopLiteralWithSign
+ | MaskImageMaskradialfromLiteralWithSign
+ | MaskImageMaskradialtoLiteralWithSign
+ | MaskImageMasktfromLiteralWithSign
+ | MaskImageMaskttoLiteralWithSign
+ | MaskImageMaskxfromLiteralWithSign
+ | MaskImageMaskxtoLiteralWithSign
+ | MaskImageMaskyfromLiteralWithSign
+ | MaskImageMaskytoLiteralWithSign
+ | MaskImageMaskradialatLiteralWithSign
+ | MaskImageMaskradialLiteralWithSign
+ | MaskImageMasklinearLiteralWithSign
+ | MaskImageMaskLiteralWithSign
+ | MaskImageMaskconicLiteralWithSign
+ | MaskImageMasklfromLiteralWithSign
+ | MaskImageMaskltoLiteralWithSign
+ | MaskImageMaskrfromLiteralWithSign
+ | MaskImageMaskrtoLiteralWithSign
+interface TailwindMaskImage {
+ /**
+ * `MaskImage`
+ *
+ * Utilities for controlling an element's mask image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-image Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-image , MDN docs}
+ */
+ maskImage: MaskImageValue
+}
+type OrderLiteral = `order-${OrderRef1}`
+type OrderLiteralWithSign = OrderLiteral | `-${OrderLiteral}`
+type OrderValue = OrderLiteralWithSign
+interface TailwindOrder {
+ /**
+ * `Order`
+ *
+ * Utilities for controlling the order of flex and grid items.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/order Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/order , MDN docs}
+ */
+ order: OrderValue
+}
+type OutlineOffsetLiteral = `outline-offset-${OutlineOffsetRef1}`
+type OutlineOffsetLiteralWithSign =
+ | OutlineOffsetLiteral
+ | `-${OutlineOffsetLiteral}`
+type OutlineOffsetValue = OutlineOffsetLiteralWithSign
+interface TailwindOutlineOffset {
+ /**
+ * `OutlineOffset`
+ *
+ * Utilities for controlling the offset of an element's outline.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/outline-offset Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/outline-offset , MDN docs}
+ */
+ outlineOffset: OutlineOffsetValue
+}
+type RightLiteral = `right-${RightRef1}`
+type RightLiteralWithSign = RightLiteral | `-${RightLiteral}`
+type RightValue = RightLiteralWithSign
+interface TailwindRight {
+ /**
+ * `Right`
+ *
+ * Utilities for controlling the placement of positioned elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/top-right-bottom-left Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/right , MDN docs}
+ */
+ right: RightValue
+}
+type RotateXLiteral = `rotate-x-${RotateRef1}`
+type RotateXLiteralWithSign = RotateXLiteral | `-${RotateXLiteral}`
+type RotateYLiteral = `rotate-y-${RotateRef1}`
+type RotateYLiteralWithSign = RotateYLiteral | `-${RotateYLiteral}`
+type RotateZLiteral = `rotate-z-${RotateRef1}`
+type RotateZLiteralWithSign = RotateZLiteral | `-${RotateZLiteral}`
+type RotateLiteral = `rotate-${RotateRef1}` | 'rotate-none'
+type RotateLiteralWithSign = RotateLiteral | `-${RotateLiteral}`
+type RotateValue =
+ | RotateXLiteralWithSign
+ | RotateYLiteralWithSign
+ | RotateZLiteralWithSign
+ | RotateLiteralWithSign
+interface TailwindRotate {
+ /**
+ * `Rotate`
+ *
+ * Utilities for rotating elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/rotate Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/rotate , MDN docs}
+ */
+ rotate: RotateValue
+}
+type GridRowRowendLiteral = `row-end-${GridRowRef1}`
+type GridRowRowendLiteralWithSign =
+ | GridRowRowendLiteral
+ | `-${GridRowRowendLiteral}`
+type GridRowRowstartLiteral = `row-start-${GridRowRef1}`
+type GridRowRowstartLiteralWithSign =
+ | GridRowRowstartLiteral
+ | `-${GridRowRowstartLiteral}`
+type GridRowRowspanLiteral = `row-span-${GridRowRef2}`
+type GridRowRowspanLiteralWithSign =
+ | GridRowRowspanLiteral
+ | `-${GridRowRowspanLiteral}`
+type GridRowRowLiteral = `row-${GridRowRef3}`
+type GridRowRowLiteralWithSign = GridRowRowLiteral | `-${GridRowRowLiteral}`
+type GridRowValue =
+ | GridRowRowendLiteralWithSign
+ | GridRowRowstartLiteralWithSign
+ | GridRowRowspanLiteralWithSign
+ | GridRowRowLiteralWithSign
+interface TailwindGridRow {
+ /**
+ * `GridRow`
+ *
+ * Utilities for controlling how elements are sized and placed across grid
+ * rows.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-row Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-row , MDN docs}
+ */
+ gridRow: GridRowValue
+}
+type ScaleXLiteral = `scale-x-${ScaleRef1}`
+type ScaleXLiteralWithSign = ScaleXLiteral | `-${ScaleXLiteral}`
+type ScaleYLiteral = `scale-y-${ScaleRef1}`
+type ScaleYLiteralWithSign = ScaleYLiteral | `-${ScaleYLiteral}`
+type ScaleZLiteral = `scale-z-${ScaleRef1}`
+type ScaleZLiteralWithSign = ScaleZLiteral | `-${ScaleZLiteral}`
+type ScaleLiteral = `scale-${ScaleRef1}` | 'scale-3d' | 'scale-none'
+type ScaleLiteralWithSign = ScaleLiteral | `-${ScaleLiteral}`
+type ScaleValue =
+ | ScaleXLiteralWithSign
+ | ScaleYLiteralWithSign
+ | ScaleZLiteralWithSign
+ | ScaleLiteralWithSign
+interface TailwindScale {
+ /**
+ * `Scale`
+ *
+ * Utilities for scaling elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scale Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scale , MDN docs}
+ */
+ scale: ScaleValue
+}
+type ScrollMarginScrollmLiteral = `scroll-m-${ScrollMarginRef1}`
+type ScrollMarginScrollmLiteralWithSign =
+ | ScrollMarginScrollmLiteral
+ | `-${ScrollMarginScrollmLiteral}`
+type ScrollMarginScrollmbLiteral = `scroll-mb-${ScrollMarginRef1}`
+type ScrollMarginScrollmbLiteralWithSign =
+ | ScrollMarginScrollmbLiteral
+ | `-${ScrollMarginScrollmbLiteral}`
+type ScrollMarginScrollmeLiteral = `scroll-me-${ScrollMarginRef1}`
+type ScrollMarginScrollmeLiteralWithSign =
+ | ScrollMarginScrollmeLiteral
+ | `-${ScrollMarginScrollmeLiteral}`
+type ScrollMarginScrollmlLiteral = `scroll-ml-${ScrollMarginRef1}`
+type ScrollMarginScrollmlLiteralWithSign =
+ | ScrollMarginScrollmlLiteral
+ | `-${ScrollMarginScrollmlLiteral}`
+type ScrollMarginScrollmrLiteral = `scroll-mr-${ScrollMarginRef1}`
+type ScrollMarginScrollmrLiteralWithSign =
+ | ScrollMarginScrollmrLiteral
+ | `-${ScrollMarginScrollmrLiteral}`
+type ScrollMarginScrollmsLiteral = `scroll-ms-${ScrollMarginRef1}`
+type ScrollMarginScrollmsLiteralWithSign =
+ | ScrollMarginScrollmsLiteral
+ | `-${ScrollMarginScrollmsLiteral}`
+type ScrollMarginScrollmtLiteral = `scroll-mt-${ScrollMarginRef1}`
+type ScrollMarginScrollmtLiteralWithSign =
+ | ScrollMarginScrollmtLiteral
+ | `-${ScrollMarginScrollmtLiteral}`
+type ScrollMarginScrollmxLiteral = `scroll-mx-${ScrollMarginRef1}`
+type ScrollMarginScrollmxLiteralWithSign =
+ | ScrollMarginScrollmxLiteral
+ | `-${ScrollMarginScrollmxLiteral}`
+type ScrollMarginScrollmyLiteral = `scroll-my-${ScrollMarginRef1}`
+type ScrollMarginScrollmyLiteralWithSign =
+ | ScrollMarginScrollmyLiteral
+ | `-${ScrollMarginScrollmyLiteral}`
+type ScrollMarginValue =
+ | ScrollMarginScrollmLiteralWithSign
+ | ScrollMarginScrollmbLiteralWithSign
+ | ScrollMarginScrollmeLiteralWithSign
+ | ScrollMarginScrollmlLiteralWithSign
+ | ScrollMarginScrollmrLiteralWithSign
+ | ScrollMarginScrollmsLiteralWithSign
+ | ScrollMarginScrollmtLiteralWithSign
+ | ScrollMarginScrollmxLiteralWithSign
+ | ScrollMarginScrollmyLiteralWithSign
+interface TailwindScrollMargin {
+ /**
+ * `ScrollMargin`
+ *
+ * Utilities for controlling the scroll offset around items in a snap
+ * container.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scroll-margin Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-margin , MDN docs}
+ */
+ scrollMargin: ScrollMarginValue
+}
+type SkewXLiteral = `skew-x-${SkewRef1}`
+type SkewXLiteralWithSign = SkewXLiteral | `-${SkewXLiteral}`
+type SkewYLiteral = `skew-y-${SkewRef1}`
+type SkewYLiteralWithSign = SkewYLiteral | `-${SkewYLiteral}`
+type SkewLiteral = `skew-${SkewRef1}`
+type SkewLiteralWithSign = SkewLiteral | `-${SkewLiteral}`
+type SkewValue =
+ | SkewXLiteralWithSign
+ | SkewYLiteralWithSign
+ | SkewLiteralWithSign
+interface TailwindSkew {
+ /**
+ * `Skew`
+ *
+ * Utilities for skewing elements with transform.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/skew Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/skew , MDN docs}
+ */
+ skew: SkewValue
+}
+type CustomSpaceLiteral = `space-${CustomRef1}`
+type CustomSpaceLiteralWithSign = CustomSpaceLiteral | `-${CustomSpaceLiteral}`
+type CustomValue =
+ | 'fd-scroll-container'
+ | 'fd-step'
+ | 'fd-steps'
+ | 'prose'
+ | 'prose-no-margin'
+ | CustomSpaceLiteralWithSign
+interface TailwindCustom {
+ /**
+ * `Custom`
+ *
+ * Custom properties, defined by user.
+ */
+ custom: CustomValue
+}
+type StartLiteral = `start-${StartRef1}`
+type StartLiteralWithSign = StartLiteral | `-${StartLiteral}`
+type StartValue = StartLiteralWithSign
+interface TailwindStart {
+ /**
+ * `Start`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/start , MDN docs}
+ */
+ start: StartValue
+}
+type TopLiteral = `top-${TopRef1}`
+type TopLiteralWithSign = TopLiteral | `-${TopLiteral}`
+type TopValue = TopLiteralWithSign
+interface TailwindTop {
+ /**
+ * `Top`
+ *
+ * Utilities for controlling the placement of positioned elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/top-right-bottom-left Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/top , MDN docs}
+ */
+ top: TopValue
+}
+type LetterSpacingTrackingLiteral = `tracking-${LetterSpacingRef1}`
+type LetterSpacingTrackingLiteralWithSign =
+ | LetterSpacingTrackingLiteral
+ | `-${LetterSpacingTrackingLiteral}`
+type LetterSpacingValue = LetterSpacingTrackingLiteralWithSign
+interface TailwindLetterSpacing {
+ /**
+ * `LetterSpacing`
+ *
+ * Utilities for controlling the tracking, or letter spacing, of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/letter-spacing Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing , MDN docs}
+ */
+ letterSpacing: LetterSpacingValue
+}
+type TranslateXLiteral =
+ | `translate-x-${TranslateRef1}`
+ | 'translate-x-1/2'
+ | 'translate-x-1/3'
+ | 'translate-x-1/4'
+ | 'translate-x-1/5'
+ | 'translate-x-1/6'
+ | 'translate-x-1/12'
+ | 'translate-x-2/3'
+ | 'translate-x-2/4'
+ | 'translate-x-2/5'
+ | 'translate-x-2/6'
+ | 'translate-x-2/12'
+ | 'translate-x-3/4'
+ | 'translate-x-3/5'
+ | 'translate-x-3/6'
+ | 'translate-x-3/12'
+ | 'translate-x-4/5'
+ | 'translate-x-4/6'
+ | 'translate-x-4/12'
+ | 'translate-x-5/6'
+ | 'translate-x-5/12'
+ | 'translate-x-6/12'
+ | 'translate-x-7/12'
+ | 'translate-x-8/12'
+ | 'translate-x-9/12'
+ | 'translate-x-10/12'
+ | 'translate-x-11/12'
+ | 'translate-x-full'
+type TranslateXLiteralWithSign = TranslateXLiteral | `-${TranslateXLiteral}`
+type TranslateYLiteral =
+ | `translate-y-${TranslateRef1}`
+ | 'translate-y-1/2'
+ | 'translate-y-1/3'
+ | 'translate-y-1/4'
+ | 'translate-y-1/5'
+ | 'translate-y-1/6'
+ | 'translate-y-1/12'
+ | 'translate-y-2/3'
+ | 'translate-y-2/4'
+ | 'translate-y-2/5'
+ | 'translate-y-2/6'
+ | 'translate-y-2/12'
+ | 'translate-y-3/4'
+ | 'translate-y-3/5'
+ | 'translate-y-3/6'
+ | 'translate-y-3/12'
+ | 'translate-y-4/5'
+ | 'translate-y-4/6'
+ | 'translate-y-4/12'
+ | 'translate-y-5/6'
+ | 'translate-y-5/12'
+ | 'translate-y-6/12'
+ | 'translate-y-7/12'
+ | 'translate-y-8/12'
+ | 'translate-y-9/12'
+ | 'translate-y-10/12'
+ | 'translate-y-11/12'
+ | 'translate-y-full'
+type TranslateYLiteralWithSign = TranslateYLiteral | `-${TranslateYLiteral}`
+type TranslateZLiteral = `translate-z-${TranslateRef1}`
+type TranslateZLiteralWithSign = TranslateZLiteral | `-${TranslateZLiteral}`
+type TranslateLiteral =
+ | `translate-${TranslateRef1}`
+ | 'translate-1/2'
+ | 'translate-1/3'
+ | 'translate-1/4'
+ | 'translate-1/5'
+ | 'translate-1/6'
+ | 'translate-1/12'
+ | 'translate-2/3'
+ | 'translate-2/4'
+ | 'translate-2/5'
+ | 'translate-2/6'
+ | 'translate-2/12'
+ | 'translate-3/4'
+ | 'translate-3/5'
+ | 'translate-3/6'
+ | 'translate-3/12'
+ | 'translate-4/5'
+ | 'translate-4/6'
+ | 'translate-4/12'
+ | 'translate-5/6'
+ | 'translate-5/12'
+ | 'translate-6/12'
+ | 'translate-7/12'
+ | 'translate-8/12'
+ | 'translate-9/12'
+ | 'translate-10/12'
+ | 'translate-11/12'
+ | 'translate-full'
+ | 'translate-3d'
+ | 'translate-none'
+type TranslateLiteralWithSign = TranslateLiteral | `-${TranslateLiteral}`
+type TranslateValue =
+ | TranslateXLiteralWithSign
+ | TranslateYLiteralWithSign
+ | TranslateZLiteralWithSign
+ | TranslateLiteralWithSign
+interface TailwindTranslate {
+ /**
+ * `Translate`
+ *
+ * Utilities for translating elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/translate Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/translate , MDN docs}
+ */
+ translate: TranslateValue
+}
+type TextUnderlineOffsetUnderlineoffsetLiteral =
+ `underline-offset-${TextUnderlineOffsetRef1}`
+type TextUnderlineOffsetUnderlineoffsetLiteralWithSign =
+ | TextUnderlineOffsetUnderlineoffsetLiteral
+ | `-${TextUnderlineOffsetUnderlineoffsetLiteral}`
+type TextUnderlineOffsetValue =
+ TextUnderlineOffsetUnderlineoffsetLiteralWithSign
+interface TailwindTextUnderlineOffset {
+ /**
+ * `TextUnderlineOffset`
+ *
+ * Utilities for controlling the offset of a text underline.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-underline-offset Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-underline-offset , MDN docs}
+ */
+ textUnderlineOffset: TextUnderlineOffsetValue
+}
+type ZIndexZLiteral = `z-${ZIndexRef1}`
+type ZIndexZLiteralWithSign = ZIndexZLiteral | `-${ZIndexZLiteral}`
+type ZIndexValue = ZIndexZLiteralWithSign
+interface TailwindZIndex {
+ /**
+ * `ZIndex`
+ *
+ * Utilities for controlling the stack order of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/z-index Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/z-index , MDN docs}
+ */
+ zIndex: ZIndexValue
+}
+type ContainerTypeValue =
+ | '@container'
+ | '@container-normal'
+ | '@container'
+ | '@container-normal'
+interface TailwindContainerType {
+ /**
+ * `ContainerType`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/container-type , MDN docs}
+ */
+ containerType: ContainerTypeValue
+}
+type PositionValue =
+ | 'absolute'
+ | 'fixed'
+ | 'relative'
+ | 'static'
+ | 'sticky'
+ | 'absolute'
+ | 'fixed'
+ | 'relative'
+ | 'static'
+ | 'sticky'
+interface TailwindPosition {
+ /**
+ * `Position`
+ *
+ * Utilities for controlling how an element is positioned in the document.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/position Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/position , MDN docs}
+ */
+ position: PositionValue
+}
+type AccentColorAccentLiteral = `accent-${AccentColorRef1}`
+type AccentColorValue = AccentColorAccentLiteral
+interface TailwindAccentColor {
+ /**
+ * `AccentColor`
+ *
+ * Utilities for controlling the accented color of a form control.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/accent-color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/accent-color , MDN docs}
+ */
+ accentColor: AccentColorValue
+}
+type VerticalAlignAlignLiteral = `align-${VerticalAlignRef1}`
+type VerticalAlignValue = VerticalAlignAlignLiteral
+interface TailwindVerticalAlign {
+ /**
+ * `VerticalAlign`
+ *
+ * Utilities for controlling the vertical alignment of an inline or table-cell
+ * box.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/vertical-align Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align , MDN docs}
+ */
+ verticalAlign: VerticalAlignValue
+}
+type AnimationAnimateLiteral = `animate-${AnimationRef1}`
+type AnimationValue = AnimationAnimateLiteral
+interface TailwindAnimation {
+ /**
+ * `Animation`
+ *
+ * Utilities for animating elements with CSS animations.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/animation Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/animation , MDN docs}
+ */
+ animation: AnimationValue
+}
+type FontSmoothingValue =
+ | 'antialiased'
+ | 'subpixel-antialiased'
+ | 'antialiased'
+ | 'subpixel-antialiased'
+interface TailwindFontSmoothing {
+ /**
+ * `FontSmoothing`
+ *
+ * Utilities for controlling the font smoothing of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-smoothing Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-smoothing , MDN docs}
+ */
+ fontSmoothing: FontSmoothingValue
+}
+type AppearanceValue =
+ | 'appearance-auto'
+ | 'appearance-none'
+ | 'appearance-auto'
+ | 'appearance-none'
+interface TailwindAppearance {
+ /**
+ * `Appearance`
+ *
+ * Utilities for suppressing native form control styling.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/appearance Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/appearance , MDN docs}
+ */
+ appearance: AppearanceValue
+}
+type AspectRatioAspectLiteral = `aspect-${AspectRatioRef1}`
+type AspectRatioValue = AspectRatioAspectLiteral
+interface TailwindAspectRatio {
+ /**
+ * `AspectRatio`
+ *
+ * Utilities for controlling the aspect ratio of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/aspect-ratio Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio , MDN docs}
+ */
+ aspectRatio: AspectRatioValue
+}
+type GridAutoColumnsAutocolsLiteral = `auto-cols-${GridAutoColumnsRef1}`
+type GridAutoColumnsValue = GridAutoColumnsAutocolsLiteral
+interface TailwindGridAutoColumns {
+ /**
+ * `GridAutoColumns`
+ *
+ * Utilities for controlling the size of implicitly-created grid columns.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-auto-columns Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-columns , MDN docs}
+ */
+ gridAutoColumns: GridAutoColumnsValue
+}
+type GridAutoRowsAutorowsLiteral = `auto-rows-${GridAutoRowsRef1}`
+type GridAutoRowsValue = GridAutoRowsAutorowsLiteral
+interface TailwindGridAutoRows {
+ /**
+ * `GridAutoRows`
+ *
+ * Utilities for controlling the size of implicitly-created grid rows.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-auto-rows Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-rows , MDN docs}
+ */
+ gridAutoRows: GridAutoRowsValue
+}
+type BackdropFilterBackdropblurLiteral = `backdrop-blur-${BackdropFilterRef1}`
+type BackdropFilterBackdropbrightnessLiteral =
+ | `backdrop-brightness-${BackdropFilterRef2}`
+ | 'backdrop-brightness-90'
+ | 'backdrop-brightness-95'
+ | 'backdrop-brightness-105'
+ | 'backdrop-brightness-110'
+type BackdropFilterBackdropcontrastLiteral =
+ `backdrop-contrast-${BackdropFilterRef2}`
+type BackdropFilterBackdropgrayscaleLiteral =
+ `backdrop-grayscale-${BackdropFilterRef3}`
+type BackdropFilterBackdrophuerotateLiteral =
+ `backdrop-hue-rotate-${BackdropFilterRef4}`
+type BackdropFilterBackdropinvertLiteral =
+ `backdrop-invert-${BackdropFilterRef5}`
+type BackdropFilterBackdropopacityLiteral =
+ `backdrop-opacity-${BackdropFilterRef6}`
+type BackdropFilterBackdropsaturateLiteral =
+ `backdrop-saturate-${BackdropFilterRef7}`
+type BackdropFilterBackdropsepiaLiteral = `backdrop-sepia-${BackdropFilterRef8}`
+type BackdropFilterBackdropLiteral = `backdrop-${BackdropFilterRef9}`
+type BackdropFilterValue =
+ | BackdropFilterBackdropblurLiteral
+ | BackdropFilterBackdropbrightnessLiteral
+ | BackdropFilterBackdropcontrastLiteral
+ | BackdropFilterBackdropgrayscaleLiteral
+ | BackdropFilterBackdrophuerotateLiteral
+ | BackdropFilterBackdropinvertLiteral
+ | BackdropFilterBackdropopacityLiteral
+ | BackdropFilterBackdropsaturateLiteral
+ | BackdropFilterBackdropsepiaLiteral
+ | BackdropFilterBackdropLiteral
+interface TailwindBackdropFilter {
+ /**
+ * `BackdropFilter`
+ *
+ * Utilities for applying backdrop filters to an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/backdrop-filter Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter , MDN docs}
+ */
+ backdropFilter: BackdropFilterValue
+}
+type BackfaceVisibilityValue =
+ | 'backface-hidden'
+ | 'backface-visible'
+ | 'backface-hidden'
+ | 'backface-visible'
+interface TailwindBackfaceVisibility {
+ /**
+ * `BackfaceVisibility`
+ *
+ * Utilities for controlling if an element's backface is visible.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/backface-visibility Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/backface-visibility , MDN docs}
+ */
+ backfaceVisibility: BackfaceVisibilityValue
+}
+type FlexBasisBasisLiteral = `basis-${FlexBasisRef1}`
+type FlexBasisValue = FlexBasisBasisLiteral
+interface TailwindFlexBasis {
+ /**
+ * `FlexBasis`
+ *
+ * Utilities for controlling the initial size of flex items.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/flex-basis Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/flex-basis , MDN docs}
+ */
+ flexBasis: FlexBasisValue
+}
+type BackgroundColorBgLiteral = `bg-${BackgroundColorRef1}`
+type BackgroundColorValue = BackgroundColorBgLiteral
+interface TailwindBackgroundColor {
+ /**
+ * `BackgroundColor`
+ *
+ * Utilities for controlling an element's background color.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-color , MDN docs}
+ */
+ backgroundColor: BackgroundColorValue
+}
+type BackgroundSizeBgLiteral = `bg-${BackgroundSizeRef1}`
+type BackgroundSizeValue = BackgroundSizeBgLiteral
+interface TailwindBackgroundSize {
+ /**
+ * `BackgroundSize`
+ *
+ * Utilities for controlling the background size of an element's background
+ * image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-size Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-size , MDN docs}
+ */
+ backgroundSize: BackgroundSizeValue
+}
+type BackgroundBlendModeBgblendLiteral = `bg-blend-${BackgroundBlendModeRef1}`
+type BackgroundBlendModeBgblendcolorLiteral =
+ `bg-blend-color-${BackgroundBlendModeRef2}`
+type BackgroundBlendModeValue =
+ | BackgroundBlendModeBgblendLiteral
+ | BackgroundBlendModeBgblendcolorLiteral
+interface TailwindBackgroundBlendMode {
+ /**
+ * `BackgroundBlendMode`
+ *
+ * Utilities for controlling how an element's background image should blend
+ * with its background color.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-blend-mode Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-blend-mode , MDN docs}
+ */
+ backgroundBlendMode: BackgroundBlendModeValue
+}
+type BackgroundPositionBgbottomLiteral = `bg-bottom-${BackgroundPositionRef1}`
+type BackgroundPositionBgtopLiteral = `bg-top-${BackgroundPositionRef2}`
+type BackgroundPositionBgLiteral = `bg-${BackgroundPositionRef3}`
+type BackgroundPositionValue =
+ | BackgroundPositionBgbottomLiteral
+ | BackgroundPositionBgtopLiteral
+ | BackgroundPositionBgLiteral
+interface TailwindBackgroundPosition {
+ /**
+ * `BackgroundPosition`
+ *
+ * Utilities for controlling the position of an element's background image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-position Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-position , MDN docs}
+ */
+ backgroundPosition: BackgroundPositionValue
+}
+type BackgroundClipBgclipLiteral = `bg-clip-${BackgroundClipRef1}`
+type BackgroundClipValue = BackgroundClipBgclipLiteral
+interface TailwindBackgroundClip {
+ /**
+ * `BackgroundClip`
+ *
+ * Utilities for controlling the bounding box of an element's background.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-clip Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-clip , MDN docs}
+ */
+ backgroundClip: BackgroundClipValue
+}
+type BackgroundAttachmentBgLiteral = `bg-${BackgroundAttachmentRef1}`
+type BackgroundAttachmentValue = BackgroundAttachmentBgLiteral
+interface TailwindBackgroundAttachment {
+ /**
+ * `BackgroundAttachment`
+ *
+ * Utilities for controlling how a background image behaves when scrolling.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-attachment Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-attachment , MDN docs}
+ */
+ backgroundAttachment: BackgroundAttachmentValue
+}
+type BackgroundRepeatBgrepeatLiteral = `bg-repeat-${BackgroundRepeatRef1}`
+type BackgroundRepeatBgLiteral = `bg-${BackgroundRepeatRef2}`
+type BackgroundRepeatValue =
+ | BackgroundRepeatBgrepeatLiteral
+ | BackgroundRepeatBgLiteral
+interface TailwindBackgroundRepeat {
+ /**
+ * `BackgroundRepeat`
+ *
+ * Utilities for controlling the repetition of an element's background image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-repeat Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-repeat , MDN docs}
+ */
+ backgroundRepeat: BackgroundRepeatValue
+}
+type BackgroundOriginBgoriginLiteral = `bg-origin-${BackgroundOriginRef1}`
+type BackgroundOriginValue = BackgroundOriginBgoriginLiteral
+interface TailwindBackgroundOrigin {
+ /**
+ * `BackgroundOrigin`
+ *
+ * Utilities for controlling how an element's background is positioned
+ * relative to borders, padding, and content.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-origin Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-origin , MDN docs}
+ */
+ backgroundOrigin: BackgroundOriginValue
+}
+type DisplayInlineLiteral = `inline-${DisplayRef1}`
+type DisplayTableLiteral = `table-${DisplayRef2}`
+type DisplayValue =
+ | 'block'
+ | 'contents'
+ | 'flex'
+ | 'flow-root'
+ | 'grid'
+ | 'hidden'
+ | 'inline'
+ | 'list-item'
+ | 'not-sr-only'
+ | 'sr-only'
+ | 'table'
+ | DisplayInlineLiteral
+ | DisplayTableLiteral
+interface TailwindDisplay {
+ /**
+ * `Display`
+ *
+ * Utilities for controlling the display box type of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/display Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/display , MDN docs}
+ */
+ display: DisplayValue
+}
+type FilterBlurLiteral = `blur-${FilterRef1}`
+type FilterBrightnessLiteral =
+ | `brightness-${FilterRef2}`
+ | 'brightness-90'
+ | 'brightness-95'
+ | 'brightness-105'
+ | 'brightness-110'
+type FilterContrastLiteral = `contrast-${FilterRef2}`
+type FilterDropshadowLiteral = `drop-shadow-${FilterRef3}`
+type FilterGrayscaleLiteral = `grayscale-${FilterRef4}`
+type FilterHuerotateLiteral = `hue-rotate-${FilterRef5}`
+type FilterInvertLiteral = `invert-${FilterRef6}`
+type FilterSaturateLiteral = `saturate-${FilterRef7}`
+type FilterSepiaLiteral = `sepia-${FilterRef8}`
+type FilterValue =
+ | 'grayscale'
+ | 'invert'
+ | 'sepia'
+ | FilterBlurLiteral
+ | FilterBrightnessLiteral
+ | FilterContrastLiteral
+ | FilterDropshadowLiteral
+ | FilterGrayscaleLiteral
+ | FilterHuerotateLiteral
+ | FilterInvertLiteral
+ | FilterSaturateLiteral
+ | FilterSepiaLiteral
+interface TailwindFilter {
+ /**
+ * `Filter`
+ *
+ * Utilities for applying filters to an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/filter Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/filter , MDN docs}
+ */
+ filter: FilterValue
+}
+type BorderWidthBorderbLiteral = `border-b-${BorderWidthRef1}`
+type BorderWidthBordereLiteral = `border-e-${BorderWidthRef2}`
+type BorderWidthBorderlLiteral = `border-l-${BorderWidthRef3}`
+type BorderWidthBorderrLiteral = `border-r-${BorderWidthRef4}`
+type BorderWidthBordersLiteral = `border-s-${BorderWidthRef5}`
+type BorderWidthBordertLiteral = `border-t-${BorderWidthRef6}`
+type BorderWidthBorderxLiteral = `border-x-${BorderWidthRef7}`
+type BorderWidthBorderyLiteral = `border-y-${BorderWidthRef8}`
+type BorderWidthDividexLiteral = `divide-x-${BorderWidthRef9}`
+type BorderWidthDivideyLiteral = `divide-y-${BorderWidthRef10}`
+type BorderWidthBorderLiteral = `border-${BorderWidthRef11}`
+type BorderWidthDivideLiteral = `divide-${BorderWidthRef12}`
+type BorderWidthValue =
+ | 'border'
+ | BorderWidthBorderbLiteral
+ | BorderWidthBordereLiteral
+ | BorderWidthBorderlLiteral
+ | BorderWidthBorderrLiteral
+ | BorderWidthBordersLiteral
+ | BorderWidthBordertLiteral
+ | BorderWidthBorderxLiteral
+ | BorderWidthBorderyLiteral
+ | BorderWidthDividexLiteral
+ | BorderWidthDivideyLiteral
+ | BorderWidthBorderLiteral
+ | BorderWidthDivideLiteral
+interface TailwindBorderWidth {
+ /**
+ * `BorderWidth`
+ *
+ * Utilities for controlling the width of an element's borders.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/border-width Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/border-width , MDN docs}
+ */
+ borderWidth: BorderWidthValue
+}
+type BorderColorBorderbLiteral = `border-b-${BorderColorRef1}`
+type BorderColorBordereLiteral = `border-e-${BorderColorRef1}`
+type BorderColorBorderlLiteral = `border-l-${BorderColorRef1}`
+type BorderColorBorderrLiteral = `border-r-${BorderColorRef1}`
+type BorderColorBordersLiteral = `border-s-${BorderColorRef1}`
+type BorderColorBordertLiteral = `border-t-${BorderColorRef1}`
+type BorderColorBorderxLiteral = `border-x-${BorderColorRef1}`
+type BorderColorBorderyLiteral = `border-y-${BorderColorRef1}`
+type BorderColorDivideLiteral = `divide-${BorderColorRef1}`
+type BorderColorBorderLiteral = `border-${BorderColorRef1}`
+type BorderColorValue =
+ | BorderColorBorderbLiteral
+ | BorderColorBordereLiteral
+ | BorderColorBorderlLiteral
+ | BorderColorBorderrLiteral
+ | BorderColorBordersLiteral
+ | BorderColorBordertLiteral
+ | BorderColorBorderxLiteral
+ | BorderColorBorderyLiteral
+ | BorderColorDivideLiteral
+ | BorderColorBorderLiteral
+interface TailwindBorderColor {
+ /**
+ * `BorderColor`
+ *
+ * Utilities for controlling the color of an element's borders.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/border-color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/border-color , MDN docs}
+ */
+ borderColor: BorderColorValue
+}
+type BorderCollapseValue =
+ | 'border-collapse'
+ | 'border-separate'
+ | 'border-collapse'
+ | 'border-separate'
+interface TailwindBorderCollapse {
+ /**
+ * `BorderCollapse`
+ *
+ * Utilities for controlling whether table borders should collapse or be
+ * separated.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/border-collapse Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/border-collapse , MDN docs}
+ */
+ borderCollapse: BorderCollapseValue
+}
+type BorderStyleBorderLiteral = `border-${BorderStyleRef1}`
+type BorderStyleDivideLiteral = `divide-${BorderStyleRef2}`
+type BorderStyleValue = BorderStyleBorderLiteral | BorderStyleDivideLiteral
+interface TailwindBorderStyle {
+ /**
+ * `BorderStyle`
+ *
+ * Utilities for controlling the style of an element's borders.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/border-style Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/border-style , MDN docs}
+ */
+ borderStyle: BorderStyleValue
+}
+type BorderSpacingXLiteral = `border-spacing-x-${BorderSpacingRef1}`
+type BorderSpacingYLiteral = `border-spacing-y-${BorderSpacingRef1}`
+type BorderSpacingLiteral = `border-spacing-${BorderSpacingRef1}`
+type BorderSpacingValue =
+ | BorderSpacingXLiteral
+ | BorderSpacingYLiteral
+ | BorderSpacingLiteral
+interface TailwindBorderSpacing {
+ /**
+ * `BorderSpacing`
+ *
+ * Utilities for controlling the spacing between table borders.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/border-spacing Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/border-spacing , MDN docs}
+ */
+ borderSpacing: BorderSpacingValue
+}
+type BoxSizingValue =
+ | 'box-border'
+ | 'box-content'
+ | 'box-border'
+ | 'box-content'
+interface TailwindBoxSizing {
+ /**
+ * `BoxSizing`
+ *
+ * Utilities for controlling how the browser should calculate an element's
+ * total size.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/box-sizing Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing , MDN docs}
+ */
+ boxSizing: BoxSizingValue
+}
+type BoxDecorationBreakValue =
+ | 'box-decoration-clone'
+ | 'box-decoration-slice'
+ | 'box-decoration-clone'
+ | 'box-decoration-slice'
+interface TailwindBoxDecorationBreak {
+ /**
+ * `BoxDecorationBreak`
+ *
+ * Utilities for controlling how element fragments should be rendered across
+ * multiple lines, columns, or pages.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/box-decoration-break Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/box-decoration-break , MDN docs}
+ */
+ boxDecorationBreak: BoxDecorationBreakValue
+}
+type BreakAfterLiteral = `break-after-${BreakAfterRef1}`
+type BreakAfterValue = BreakAfterLiteral
+interface TailwindBreakAfter {
+ /**
+ * `BreakAfter`
+ *
+ * Utilities for controlling how a column or page should break after an
+ * element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/break-after Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/break-after , MDN docs}
+ */
+ breakAfter: BreakAfterValue
+}
+type WordBreakBreakLiteral = `break-${WordBreakRef1}`
+type WordBreakValue = WordBreakBreakLiteral
+interface TailwindWordBreak {
+ /**
+ * `WordBreak`
+ *
+ * Utilities for controlling word breaks in an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/word-break Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/word-break , MDN docs}
+ */
+ wordBreak: WordBreakValue
+}
+type BreakBeforeLiteral = `break-before-${BreakBeforeRef1}`
+type BreakBeforeValue = BreakBeforeLiteral
+interface TailwindBreakBefore {
+ /**
+ * `BreakBefore`
+ *
+ * Utilities for controlling how a column or page should break before an
+ * element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/break-before Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/break-before , MDN docs}
+ */
+ breakBefore: BreakBeforeValue
+}
+type BreakInsideLiteral = `break-inside-${BreakInsideRef1}`
+type BreakInsideAvoidLiteral = `break-inside-avoid-${BreakInsideRef2}`
+type BreakInsideValue = BreakInsideLiteral | BreakInsideAvoidLiteral
+interface TailwindBreakInside {
+ /**
+ * `BreakInside`
+ *
+ * Utilities for controlling how a column or page should break within an
+ * element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/break-inside Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/break-inside , MDN docs}
+ */
+ breakInside: BreakInsideValue
+}
+type OverflowWrapWrapLiteral = `wrap-${OverflowWrapRef1}`
+type OverflowWrapValue = 'break-words' | OverflowWrapWrapLiteral
+interface TailwindOverflowWrap {
+ /**
+ * `OverflowWrap`
+ *
+ * Utilities for controlling line breaks within words in an overflowing
+ * element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/overflow-wrap Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-wrap , MDN docs}
+ */
+ overflowWrap: OverflowWrapValue
+}
+type TextTransformValue =
+ | 'capitalize'
+ | 'lowercase'
+ | 'normal-case'
+ | 'uppercase'
+ | 'capitalize'
+ | 'lowercase'
+ | 'normal-case'
+ | 'uppercase'
+interface TailwindTextTransform {
+ /**
+ * `TextTransform`
+ *
+ * Utilities for controlling the capitalization of text.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-transform Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform , MDN docs}
+ */
+ textTransform: TextTransformValue
+}
+type CaptionSideValue =
+ | 'caption-bottom'
+ | 'caption-top'
+ | 'caption-bottom'
+ | 'caption-top'
+interface TailwindCaptionSide {
+ /**
+ * `CaptionSide`
+ *
+ * Utilities for controlling the alignment of a caption element inside of a
+ * table.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/caption-side Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/caption-side , MDN docs}
+ */
+ captionSide: CaptionSideValue
+}
+type CaretColorCaretLiteral = `caret-${CaretColorRef1}`
+type CaretColorValue = CaretColorCaretLiteral
+interface TailwindCaretColor {
+ /**
+ * `CaretColor`
+ *
+ * Utilities for controlling the color of the text input cursor.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/caret-color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/caret-color , MDN docs}
+ */
+ caretColor: CaretColorValue
+}
+type ClearLiteral = `clear-${ClearRef1}`
+type ClearValue = ClearLiteral
+interface TailwindClear {
+ /**
+ * `Clear`
+ *
+ * Utilities for controlling the wrapping of content around an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/clear Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/clear , MDN docs}
+ */
+ clear: ClearValue
+}
+type VisibilityValue =
+ | 'collapse'
+ | 'invisible'
+ | 'visible'
+ | 'collapse'
+ | 'invisible'
+ | 'visible'
+interface TailwindVisibility {
+ /**
+ * `Visibility`
+ *
+ * Utilities for controlling the visibility of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/visibility Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/visibility , MDN docs}
+ */
+ visibility: VisibilityValue
+}
+type ColumnsLiteral = `columns-${ColumnsRef1}`
+type ColumnsValue = ColumnsLiteral
+interface TailwindColumns {
+ /**
+ * `Columns`
+ *
+ * Utilities for controlling the number of columns within an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/columns Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/columns , MDN docs}
+ */
+ columns: ColumnsValue
+}
+type ContainLiteral = `contain-${ContainRef1}`
+type ContainValue = ContainLiteral
+interface TailwindContain {
+ /**
+ * `Contain`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/contain , MDN docs}
+ */
+ contain: ContainValue
+}
+type MaxWidthMaxwLiteral = `max-w-${MaxWidthRef1}`
+type MaxWidthValue = 'container' | MaxWidthMaxwLiteral
+interface TailwindMaxWidth {
+ /**
+ * `MaxWidth`
+ *
+ * Utilities for setting the maximum width of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/max-width Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/max-width , MDN docs}
+ */
+ maxWidth: MaxWidthValue
+}
+type AlignContentContentLiteral = `content-${AlignContentRef1}`
+type AlignContentValue = AlignContentContentLiteral
+interface TailwindAlignContent {
+ /**
+ * `AlignContent`
+ *
+ * Utilities for controlling how rows are positioned in multi-row flex and
+ * grid containers.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/align-content Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/align-content , MDN docs}
+ */
+ alignContent: AlignContentValue
+}
+type ContentLiteral = `content-${ContentRef1}`
+type ContentValue = ContentLiteral
+interface TailwindContent {
+ /**
+ * `Content`
+ *
+ * Utilities for controlling the content of the before and after
+ * pseudo-elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/content Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/content , MDN docs}
+ */
+ content: ContentValue
+}
+type CursorELiteral = `cursor-e-${CursorRef1}`
+type CursorNLiteral = `cursor-n-${CursorRef2}`
+type CursorNeLiteral = `cursor-ne-${CursorRef3}`
+type CursorNoLiteral = `cursor-no-${CursorRef4}`
+type CursorSLiteral = `cursor-s-${CursorRef5}`
+type CursorWLiteral = `cursor-w-${CursorRef6}`
+type CursorLiteral = `cursor-${CursorRef7}`
+type CursorValue =
+ | CursorELiteral
+ | CursorNLiteral
+ | CursorNeLiteral
+ | CursorNoLiteral
+ | CursorSLiteral
+ | CursorWLiteral
+ | CursorLiteral
+interface TailwindCursor {
+ /**
+ * `Cursor`
+ *
+ * Utilities for controlling the cursor style when hovering over an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/cursor Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/cursor , MDN docs}
+ */
+ cursor: CursorValue
+}
+type TextDecorationThicknessDecorationLiteral =
+ `decoration-${TextDecorationThicknessRef1}`
+type TextDecorationThicknessValue = TextDecorationThicknessDecorationLiteral
+interface TailwindTextDecorationThickness {
+ /**
+ * `TextDecorationThickness`
+ *
+ * Utilities for controlling the thickness of text decorations.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-decoration-thickness Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-thickness , MDN docs}
+ */
+ textDecorationThickness: TextDecorationThicknessValue
+}
+type TextDecorationColorDecorationLiteral =
+ `decoration-${TextDecorationColorRef1}`
+type TextDecorationColorValue = TextDecorationColorDecorationLiteral
+interface TailwindTextDecorationColor {
+ /**
+ * `TextDecorationColor`
+ *
+ * Utilities for controlling the color of text decorations.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-decoration-color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-color , MDN docs}
+ */
+ textDecorationColor: TextDecorationColorValue
+}
+type TextDecorationStyleDecorationLiteral =
+ `decoration-${TextDecorationStyleRef1}`
+type TextDecorationStyleValue = TextDecorationStyleDecorationLiteral
+interface TailwindTextDecorationStyle {
+ /**
+ * `TextDecorationStyle`
+ *
+ * Utilities for controlling the style of text decorations.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-decoration-style Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-style , MDN docs}
+ */
+ textDecorationStyle: TextDecorationStyleValue
+}
+type TransitionDelayDelayLiteral = `delay-${TransitionDelayRef1}`
+type TransitionDelayValue = TransitionDelayDelayLiteral
+interface TailwindTransitionDelay {
+ /**
+ * `TransitionDelay`
+ *
+ * Utilities for controlling the delay of CSS transitions.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transition-delay Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transition-delay , MDN docs}
+ */
+ transitionDelay: TransitionDelayValue
+}
+type FontVariantNumericValue =
+ | 'diagonal-fractions'
+ | 'lining-nums'
+ | 'normal-nums'
+ | 'oldstyle-nums'
+ | 'ordinal'
+ | 'proportional-nums'
+ | 'slashed-zero'
+ | 'stacked-fractions'
+ | 'tabular-nums'
+ | 'diagonal-fractions'
+ | 'lining-nums'
+ | 'normal-nums'
+ | 'oldstyle-nums'
+ | 'ordinal'
+ | 'proportional-nums'
+ | 'slashed-zero'
+ | 'stacked-fractions'
+ | 'tabular-nums'
+interface TailwindFontVariantNumeric {
+ /**
+ * `FontVariantNumeric`
+ *
+ * Utilities for controlling the variant of numbers.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-variant-numeric Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant-numeric , MDN docs}
+ */
+ fontVariantNumeric: FontVariantNumericValue
+}
+type TransitionDurationDurationLiteral = `duration-${TransitionDurationRef1}`
+type TransitionDurationValue = TransitionDurationDurationLiteral
+interface TailwindTransitionDuration {
+ /**
+ * `TransitionDuration`
+ *
+ * Utilities for controlling the duration of CSS transitions.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transition-duration Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transition-duration , MDN docs}
+ */
+ transitionDuration: TransitionDurationValue
+}
+type TransitionTimingFunctionEaseinLiteral =
+ `ease-in-${TransitionTimingFunctionRef1}`
+type TransitionTimingFunctionEaseLiteral =
+ `ease-${TransitionTimingFunctionRef2}`
+type TransitionTimingFunctionValue =
+ | TransitionTimingFunctionEaseinLiteral
+ | TransitionTimingFunctionEaseLiteral
+interface TailwindTransitionTimingFunction {
+ /**
+ * `TransitionTimingFunction`
+ *
+ * Utilities for controlling the easing of CSS transitions.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transition-timing-function Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transition-timing-function , MDN docs}
+ */
+ transitionTimingFunction: TransitionTimingFunctionValue
+}
+type FieldSizingValue =
+ | 'field-sizing-content'
+ | 'field-sizing-fixed'
+ | 'field-sizing-content'
+ | 'field-sizing-fixed'
+interface TailwindFieldSizing {
+ /**
+ * `FieldSizing`
+ *
+ * Utilities for controlling the sizing of form controls.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/field-sizing Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/field-sizing , MDN docs}
+ */
+ fieldSizing: FieldSizingValue
+}
+type FillLiteral = `fill-${FillRef1}`
+type FillValue = FillLiteral
+interface TailwindFill {
+ /**
+ * `Fill`
+ *
+ * Utilities for styling the fill of SVG elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/fill Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/fill , MDN docs}
+ */
+ fill: FillValue
+}
+type FlexLiteral = `flex-${FlexRef1}`
+type FlexValue = FlexLiteral
+interface TailwindFlex {
+ /**
+ * `Flex`
+ *
+ * Utilities for controlling how flex items both grow and shrink.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/flex Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/flex , MDN docs}
+ */
+ flex: FlexValue
+}
+type FlexDirectionFlexLiteral = `flex-${FlexDirectionRef1}`
+type FlexDirectionValue = FlexDirectionFlexLiteral
+interface TailwindFlexDirection {
+ /**
+ * `FlexDirection`
+ *
+ * Utilities for controlling the direction of flex items.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/flex-direction Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/flex-direction , MDN docs}
+ */
+ flexDirection: FlexDirectionValue
+}
+type FlexWrapLiteral = `flex-wrap-${FlexWrapRef1}`
+type FlexWrapFlexLiteral = `flex-${FlexWrapRef2}`
+type FlexWrapValue = FlexWrapLiteral | FlexWrapFlexLiteral
+interface TailwindFlexWrap {
+ /**
+ * `FlexWrap`
+ *
+ * Utilities for controlling how flex items wrap.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/flex-wrap Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/flex-wrap , MDN docs}
+ */
+ flexWrap: FlexWrapValue
+}
+type FloatLiteral = `float-${FloatRef1}`
+type FloatValue = FloatLiteral
+interface TailwindFloat {
+ /**
+ * `Float`
+ *
+ * Utilities for controlling the wrapping of content around an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/float Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/float , MDN docs}
+ */
+ float: FloatValue
+}
+type FontWeightFontLiteral = `font-${FontWeightRef1}`
+type FontWeightValue = FontWeightFontLiteral
+interface TailwindFontWeight {
+ /**
+ * `FontWeight`
+ *
+ * Utilities for controlling the font weight of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-weight Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight , MDN docs}
+ */
+ fontWeight: FontWeightValue
+}
+type FontFamilyFontLiteral = `font-${FontFamilyRef1}`
+type FontFamilyValue = FontFamilyFontLiteral
+interface TailwindFontFamily {
+ /**
+ * `FontFamily`
+ *
+ * Utilities for controlling the font family of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-family Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-family , MDN docs}
+ */
+ fontFamily: FontFamilyValue
+}
+type FontStretchLiteral = `font-stretch-${FontStretchRef1}`
+type FontStretchValue = FontStretchLiteral
+interface TailwindFontStretch {
+ /**
+ * `FontStretch`
+ *
+ * Utilities for selecting the width of a font face.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-stretch Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-stretch , MDN docs}
+ */
+ fontStretch: FontStretchValue
+}
+type ForcedColorAdjustValue =
+ | 'forced-color-adjust-auto'
+ | 'forced-color-adjust-none'
+ | 'forced-color-adjust-auto'
+ | 'forced-color-adjust-none'
+interface TailwindForcedColorAdjust {
+ /**
+ * `ForcedColorAdjust`
+ *
+ * Utilities for opting in and out of forced colors.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/forced-color-adjust Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/forced-color-adjust , MDN docs}
+ */
+ forcedColorAdjust: ForcedColorAdjustValue
+}
+type GapXLiteral = `gap-x-${GapRef1}`
+type GapYLiteral = `gap-y-${GapRef1}`
+type GapLiteral = `gap-${GapRef1}`
+type GapValue = GapXLiteral | GapYLiteral | GapLiteral
+interface TailwindGap {
+ /**
+ * `Gap`
+ *
+ * Utilities for controlling gutters between grid and flexbox items.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/gap Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/gap , MDN docs}
+ */
+ gap: GapValue
+}
+type GridTemplateColumnsGridcolsLiteral = `grid-cols-${GridTemplateColumnsRef1}`
+type GridTemplateColumnsValue = GridTemplateColumnsGridcolsLiteral
+interface TailwindGridTemplateColumns {
+ /**
+ * `GridTemplateColumns`
+ *
+ * Utilities for specifying the columns in a grid layout.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-template-columns Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns , MDN docs}
+ */
+ gridTemplateColumns: GridTemplateColumnsValue
+}
+type GridAutoFlowGridflowLiteral = `grid-flow-${GridAutoFlowRef1}`
+type GridAutoFlowValue = GridAutoFlowGridflowLiteral
+interface TailwindGridAutoFlow {
+ /**
+ * `GridAutoFlow`
+ *
+ * Utilities for controlling how elements in a grid are auto-placed.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-auto-flow Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow , MDN docs}
+ */
+ gridAutoFlow: GridAutoFlowValue
+}
+type GridTemplateRowsGridrowsLiteral = `grid-rows-${GridTemplateRowsRef1}`
+type GridTemplateRowsValue = GridTemplateRowsGridrowsLiteral
+interface TailwindGridTemplateRows {
+ /**
+ * `GridTemplateRows`
+ *
+ * Utilities for specifying the rows in a grid layout.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-template-rows Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-rows , MDN docs}
+ */
+ gridTemplateRows: GridTemplateRowsValue
+}
+type FlexGrowValue = 'grow' | 'grow-0' | 'grow' | 'grow-0'
+interface TailwindFlexGrow {
+ /**
+ * `FlexGrow`
+ *
+ * Utilities for controlling how flex items grow.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/flex-grow Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/flex-grow , MDN docs}
+ */
+ flexGrow: FlexGrowValue
+}
+type HeightHLiteral = `h-${HeightRef1}` | 'h-screen'
+type HeightSizeLiteral = `size-${HeightRef1}`
+type HeightValue = HeightHLiteral | HeightSizeLiteral
+interface TailwindHeight {
+ /**
+ * `Height`
+ *
+ * Utilities for setting the height of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/height Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/height , MDN docs}
+ */
+ height: HeightValue
+}
+type HyphensLiteral = `hyphens-${HyphensRef1}`
+type HyphensValue = HyphensLiteral
+interface TailwindHyphens {
+ /**
+ * `Hyphens`
+ *
+ * Utilities for controlling how words should be hyphenated.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/hyphens Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/hyphens , MDN docs}
+ */
+ hyphens: HyphensValue
+}
+type BoxShadowInsetLiteral = `inset-${BoxShadowRef1}`
+type BoxShadowRingoffsetLiteral = `ring-offset-${BoxShadowRef2}`
+type BoxShadowRingLiteral = `ring-${BoxShadowRef2}` | 'ring-inset'
+type BoxShadowShadowLiteral = `shadow-${BoxShadowRef3}`
+type BoxShadowValue =
+ | 'ring'
+ | 'shadow'
+ | BoxShadowInsetLiteral
+ | BoxShadowRingoffsetLiteral
+ | BoxShadowRingLiteral
+ | BoxShadowShadowLiteral
+interface TailwindBoxShadow {
+ /**
+ * `BoxShadow`
+ *
+ * Utilities for controlling the box shadow of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/box-shadow Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow , MDN docs}
+ */
+ boxShadow: BoxShadowValue
+}
+type IsolationValue =
+ | 'isolate'
+ | 'isolation-auto'
+ | 'isolate'
+ | 'isolation-auto'
+interface TailwindIsolation {
+ /**
+ * `Isolation`
+ *
+ * Utilities for controlling whether an element should explicitly create a new
+ * stacking context.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/isolation Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/isolation , MDN docs}
+ */
+ isolation: IsolationValue
+}
+type FontStyleValue = 'italic' | 'not-italic' | 'italic' | 'not-italic'
+interface TailwindFontStyle {
+ /**
+ * `FontStyle`
+ *
+ * Utilities for controlling the style of text.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-style Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-style , MDN docs}
+ */
+ fontStyle: FontStyleValue
+}
+type AlignItemsItemsLiteral = `items-${AlignItemsRef1}`
+type AlignItemsValue = AlignItemsItemsLiteral
+interface TailwindAlignItems {
+ /**
+ * `AlignItems`
+ *
+ * Utilities for controlling how flex and grid items are positioned along a
+ * container's cross axis.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/align-items Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/align-items , MDN docs}
+ */
+ alignItems: AlignItemsValue
+}
+type JustifyContentJustifyLiteral = `justify-${JustifyContentRef1}`
+type JustifyContentValue = JustifyContentJustifyLiteral
+interface TailwindJustifyContent {
+ /**
+ * `JustifyContent`
+ *
+ * Utilities for controlling how flex and grid items are positioned along a
+ * container's main axis.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/justify-content Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content , MDN docs}
+ */
+ justifyContent: JustifyContentValue
+}
+type JustifyItemsLiteral = `justify-items-${JustifyItemsRef1}`
+type JustifyItemsValue = JustifyItemsLiteral
+interface TailwindJustifyItems {
+ /**
+ * `JustifyItems`
+ *
+ * Utilities for controlling how grid items are aligned along their inline
+ * axis.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/justify-items Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/justify-items , MDN docs}
+ */
+ justifyItems: JustifyItemsValue
+}
+type JustifySelfLiteral = `justify-self-${JustifySelfRef1}`
+type JustifySelfValue = JustifySelfLiteral
+interface TailwindJustifySelf {
+ /**
+ * `JustifySelf`
+ *
+ * Utilities for controlling how an individual grid item is aligned along its
+ * inline axis.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/justify-self Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/justify-self , MDN docs}
+ */
+ justifySelf: JustifySelfValue
+}
+type LineHeightLeadingLiteral = `leading-${LineHeightRef1}`
+type LineHeightValue = LineHeightLeadingLiteral
+interface TailwindLineHeight {
+ /**
+ * `LineHeight`
+ *
+ * Utilities for controlling the leading, or line height, of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/line-height Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/line-height , MDN docs}
+ */
+ lineHeight: LineHeightValue
+}
+type LineClampLiteral = `line-clamp-${LineClampRef1}`
+type LineClampValue = LineClampLiteral
+interface TailwindLineClamp {
+ /**
+ * `LineClamp`
+ *
+ * Utilities for clamping text to a specific number of lines.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/line-clamp Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/line-clamp , MDN docs}
+ */
+ lineClamp: LineClampValue
+}
+type TextDecorationLineLineLiteral = `line-${TextDecorationLineRef1}`
+type TextDecorationLineValue =
+ | 'no-underline'
+ | 'overline'
+ | 'underline'
+ | TextDecorationLineLineLiteral
+interface TailwindTextDecorationLine {
+ /**
+ * `TextDecorationLine`
+ *
+ * Utilities for controlling the decoration of text.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-decoration-line Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-line , MDN docs}
+ */
+ textDecorationLine: TextDecorationLineValue
+}
+type ListStyleTypeListLiteral = `list-${ListStyleTypeRef1}`
+type ListStyleTypeValue = ListStyleTypeListLiteral
+interface TailwindListStyleType {
+ /**
+ * `ListStyleType`
+ *
+ * Utilities for controlling the marker style of a list.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/list-style-type Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type , MDN docs}
+ */
+ listStyleType: ListStyleTypeValue
+}
+type ListStyleImageValue = 'list-image-none' | 'list-image-none'
+interface TailwindListStyleImage {
+ /**
+ * `ListStyleImage`
+ *
+ * Utilities for controlling the marker images for list items.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/list-style-image Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-image , MDN docs}
+ */
+ listStyleImage: ListStyleImageValue
+}
+type ListStylePositionValue =
+ | 'list-inside'
+ | 'list-outside'
+ | 'list-inside'
+ | 'list-outside'
+interface TailwindListStylePosition {
+ /**
+ * `ListStylePosition`
+ *
+ * Utilities for controlling the position of bullets and numbers in lists.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/list-style-position Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-position , MDN docs}
+ */
+ listStylePosition: ListStylePositionValue
+}
+type MaskCompositeMaskLiteral = `mask-${MaskCompositeRef1}`
+type MaskCompositeValue = MaskCompositeMaskLiteral
+interface TailwindMaskComposite {
+ /**
+ * `MaskComposite`
+ *
+ * Utilities for controlling how multiple masks are combined together.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-composite Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-composite , MDN docs}
+ */
+ maskComposite: MaskCompositeValue
+}
+type MaskModeMaskLiteral = `mask-${MaskModeRef1}`
+type MaskModeValue = MaskModeMaskLiteral
+interface TailwindMaskMode {
+ /**
+ * `MaskMode`
+ *
+ * Utilities for controlling an element's mask mode.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-mode Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-mode , MDN docs}
+ */
+ maskMode: MaskModeValue
+}
+type MaskSizeMaskLiteral = `mask-${MaskSizeRef1}`
+type MaskSizeValue = MaskSizeMaskLiteral
+interface TailwindMaskSize {
+ /**
+ * `MaskSize`
+ *
+ * Utilities for controlling the size of an element's mask image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-size Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-size , MDN docs}
+ */
+ maskSize: MaskSizeValue
+}
+type MaskPositionMaskbottomLiteral = `mask-bottom-${MaskPositionRef1}`
+type MaskPositionMasktopLiteral = `mask-top-${MaskPositionRef2}`
+type MaskPositionMaskLiteral = `mask-${MaskPositionRef3}`
+type MaskPositionValue =
+ | MaskPositionMaskbottomLiteral
+ | MaskPositionMasktopLiteral
+ | MaskPositionMaskLiteral
+interface TailwindMaskPosition {
+ /**
+ * `MaskPosition`
+ *
+ * Utilities for controlling the position of an element's mask image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-position Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-position , MDN docs}
+ */
+ maskPosition: MaskPositionValue
+}
+type MaskClipLiteral = `mask-clip-${MaskClipRef1}`
+type MaskClipMaskLiteral = `mask-${MaskClipRef2}`
+type MaskClipValue = MaskClipLiteral | MaskClipMaskLiteral
+interface TailwindMaskClip {
+ /**
+ * `MaskClip`
+ *
+ * Utilities for controlling the bounding box of an element's mask.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-clip Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-clip , MDN docs}
+ */
+ maskClip: MaskClipValue
+}
+type MaskRepeatLiteral = `mask-repeat-${MaskRepeatRef1}`
+type MaskRepeatMaskLiteral = `mask-${MaskRepeatRef2}`
+type MaskRepeatValue = MaskRepeatLiteral | MaskRepeatMaskLiteral
+interface TailwindMaskRepeat {
+ /**
+ * `MaskRepeat`
+ *
+ * Utilities for controlling the repetition of an element's mask image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-repeat Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-repeat , MDN docs}
+ */
+ maskRepeat: MaskRepeatValue
+}
+type MaskOriginLiteral = `mask-origin-${MaskOriginRef1}`
+type MaskOriginValue = MaskOriginLiteral
+interface TailwindMaskOrigin {
+ /**
+ * `MaskOrigin`
+ *
+ * Utilities for controlling how an element's mask image is positioned
+ * relative to borders, padding, and content.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-origin Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-origin , MDN docs}
+ */
+ maskOrigin: MaskOriginValue
+}
+type MaskTypeValue =
+ | 'mask-type-alpha'
+ | 'mask-type-luminance'
+ | 'mask-type-alpha'
+ | 'mask-type-luminance'
+interface TailwindMaskType {
+ /**
+ * `MaskType`
+ *
+ * Utilities for controlling how an SVG mask is interpreted.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-type Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-type , MDN docs}
+ */
+ maskType: MaskTypeValue
+}
+type MaxHeightMaxhLiteral = `max-h-${MaxHeightRef1}`
+type MaxHeightValue = MaxHeightMaxhLiteral
+interface TailwindMaxHeight {
+ /**
+ * `MaxHeight`
+ *
+ * Utilities for setting the maximum height of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/max-height Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/max-height , MDN docs}
+ */
+ maxHeight: MaxHeightValue
+}
+type MinHeightMinhLiteral = `min-h-${MinHeightRef1}`
+type MinHeightValue = MinHeightMinhLiteral
+interface TailwindMinHeight {
+ /**
+ * `MinHeight`
+ *
+ * Utilities for setting the minimum height of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/min-height Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/min-height , MDN docs}
+ */
+ minHeight: MinHeightValue
+}
+type MinWidthMinwLiteral = `min-w-${MinWidthRef1}`
+type MinWidthValue = MinWidthMinwLiteral
+interface TailwindMinWidth {
+ /**
+ * `MinWidth`
+ *
+ * Utilities for setting the minimum width of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/min-width Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/min-width , MDN docs}
+ */
+ minWidth: MinWidthValue
+}
+type MixBlendModeMixblendLiteral = `mix-blend-${MixBlendModeRef1}`
+type MixBlendModeMixblendcolorLiteral = `mix-blend-color-${MixBlendModeRef2}`
+type MixBlendModeValue =
+ | MixBlendModeMixblendLiteral
+ | MixBlendModeMixblendcolorLiteral
+interface TailwindMixBlendMode {
+ /**
+ * `MixBlendMode`
+ *
+ * Utilities for controlling how an element should blend with the background.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mix-blend-mode Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode , MDN docs}
+ */
+ mixBlendMode: MixBlendModeValue
+}
+type ObjectPositionObjectbottomLiteral = `object-bottom-${ObjectPositionRef1}`
+type ObjectPositionObjectleftLiteral = `object-left-${ObjectPositionRef2}`
+type ObjectPositionObjectrightLiteral = `object-right-${ObjectPositionRef3}`
+type ObjectPositionObjecttopLiteral = `object-top-${ObjectPositionRef4}`
+type ObjectPositionObjectLiteral = `object-${ObjectPositionRef5}`
+type ObjectPositionValue =
+ | ObjectPositionObjectbottomLiteral
+ | ObjectPositionObjectleftLiteral
+ | ObjectPositionObjectrightLiteral
+ | ObjectPositionObjecttopLiteral
+ | ObjectPositionObjectLiteral
+interface TailwindObjectPosition {
+ /**
+ * `ObjectPosition`
+ *
+ * Utilities for controlling how a replaced element's content should be
+ * positioned within its container.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/object-position Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/object-position , MDN docs}
+ */
+ objectPosition: ObjectPositionValue
+}
+type ObjectFitObjectLiteral = `object-${ObjectFitRef1}`
+type ObjectFitValue = ObjectFitObjectLiteral
+interface TailwindObjectFit {
+ /**
+ * `ObjectFit`
+ *
+ * Utilities for controlling how a replaced element's content should be
+ * resized.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/object-fit Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit , MDN docs}
+ */
+ objectFit: ObjectFitValue
+}
+type OpacityLiteral = `opacity-${OpacityRef1}`
+type OpacityValue = OpacityLiteral
+interface TailwindOpacity {
+ /**
+ * `Opacity`
+ *
+ * Utilities for controlling the opacity of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/opacity Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/opacity , MDN docs}
+ */
+ opacity: OpacityValue
+}
+type TransformOriginOriginbottomLiteral = `origin-bottom-${TransformOriginRef1}`
+type TransformOriginOrigintopLiteral = `origin-top-${TransformOriginRef2}`
+type TransformOriginOriginLiteral = `origin-${TransformOriginRef3}`
+type TransformOriginValue =
+ | TransformOriginOriginbottomLiteral
+ | TransformOriginOrigintopLiteral
+ | TransformOriginOriginLiteral
+interface TailwindTransformOrigin {
+ /**
+ * `TransformOrigin`
+ *
+ * Utilities for specifying the origin for an element's transformations.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transform-origin Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin , MDN docs}
+ */
+ transformOrigin: TransformOriginValue
+}
+type OutlineWidthOutlineLiteral = `outline-${OutlineWidthRef1}`
+type OutlineWidthValue = 'outline' | OutlineWidthOutlineLiteral
+interface TailwindOutlineWidth {
+ /**
+ * `OutlineWidth`
+ *
+ * Utilities for controlling the width of an element's outline.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/outline-width Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/outline-width , MDN docs}
+ */
+ outlineWidth: OutlineWidthValue
+}
+type OutlineColorOutlineLiteral = `outline-${OutlineColorRef1}`
+type OutlineColorValue = OutlineColorOutlineLiteral
+interface TailwindOutlineColor {
+ /**
+ * `OutlineColor`
+ *
+ * Utilities for controlling the color of an element's outline.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/outline-color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/outline-color , MDN docs}
+ */
+ outlineColor: OutlineColorValue
+}
+type OutlineStyleOutlineLiteral = `outline-${OutlineStyleRef1}`
+type OutlineStyleValue = OutlineStyleOutlineLiteral
+interface TailwindOutlineStyle {
+ /**
+ * `OutlineStyle`
+ *
+ * Utilities for controlling the style of an element's outline.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/outline-style Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/outline-style , MDN docs}
+ */
+ outlineStyle: OutlineStyleValue
+}
+type OverflowXLiteral = `overflow-x-${OverflowRef1}`
+type OverflowYLiteral = `overflow-y-${OverflowRef2}`
+type OverflowLiteral = `overflow-${OverflowRef3}`
+type OverflowValue = OverflowXLiteral | OverflowYLiteral | OverflowLiteral
+interface TailwindOverflow {
+ /**
+ * `Overflow`
+ *
+ * Utilities for controlling how an element handles content that is too large
+ * for the container.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/overflow Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/overflow , MDN docs}
+ */
+ overflow: OverflowValue
+}
+type TextOverflowValue =
+ | 'overflow-ellipsis'
+ | 'text-clip'
+ | 'text-ellipsis'
+ | 'truncate'
+ | 'overflow-ellipsis'
+ | 'text-clip'
+ | 'text-ellipsis'
+ | 'truncate'
+interface TailwindTextOverflow {
+ /**
+ * `TextOverflow`
+ *
+ * Utilities for controlling how the text of an element overflows.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-overflow Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflow , MDN docs}
+ */
+ textOverflow: TextOverflowValue
+}
+type OverscrollBehaviorOverscrollxLiteral =
+ `overscroll-x-${OverscrollBehaviorRef1}`
+type OverscrollBehaviorOverscrollyLiteral =
+ `overscroll-y-${OverscrollBehaviorRef2}`
+type OverscrollBehaviorOverscrollLiteral =
+ `overscroll-${OverscrollBehaviorRef3}`
+type OverscrollBehaviorValue =
+ | OverscrollBehaviorOverscrollxLiteral
+ | OverscrollBehaviorOverscrollyLiteral
+ | OverscrollBehaviorOverscrollLiteral
+interface TailwindOverscrollBehavior {
+ /**
+ * `OverscrollBehavior`
+ *
+ * Utilities for controlling how the browser behaves when reaching the
+ * boundary of a scrolling area.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/overscroll-behavior Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior , MDN docs}
+ */
+ overscrollBehavior: OverscrollBehaviorValue
+}
+type PaddingPbLiteral = `pb-${PaddingRef1}`
+type PaddingPLiteral = `p-${PaddingRef1}`
+type PaddingPeLiteral = `pe-${PaddingRef1}`
+type PaddingPlLiteral = `pl-${PaddingRef1}`
+type PaddingPrLiteral = `pr-${PaddingRef1}`
+type PaddingPsLiteral = `ps-${PaddingRef1}`
+type PaddingPtLiteral = `pt-${PaddingRef1}`
+type PaddingPxLiteral = `px-${PaddingRef1}`
+type PaddingPyLiteral = `py-${PaddingRef1}`
+type PaddingValue =
+ | PaddingPbLiteral
+ | PaddingPLiteral
+ | PaddingPeLiteral
+ | PaddingPlLiteral
+ | PaddingPrLiteral
+ | PaddingPsLiteral
+ | PaddingPtLiteral
+ | PaddingPxLiteral
+ | PaddingPyLiteral
+interface TailwindPadding {
+ /**
+ * `Padding`
+ *
+ * Utilities for controlling an element's padding.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/padding Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/padding , MDN docs}
+ */
+ padding: PaddingValue
+}
+type PerspectiveLiteral = `perspective-${PerspectiveRef1}`
+type PerspectiveValue = PerspectiveLiteral
+interface TailwindPerspective {
+ /**
+ * `Perspective`
+ *
+ * Utilities for controlling an element's perspective when placed in 3D space.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/perspective Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/perspective , MDN docs}
+ */
+ perspective: PerspectiveValue
+}
+type PerspectiveOriginBottomLiteral =
+ `perspective-origin-bottom-${PerspectiveOriginRef1}`
+type PerspectiveOriginTopLiteral =
+ `perspective-origin-top-${PerspectiveOriginRef2}`
+type PerspectiveOriginLiteral = `perspective-origin-${PerspectiveOriginRef3}`
+type PerspectiveOriginValue =
+ | PerspectiveOriginBottomLiteral
+ | PerspectiveOriginTopLiteral
+ | PerspectiveOriginLiteral
+interface TailwindPerspectiveOrigin {
+ /**
+ * `PerspectiveOrigin`
+ *
+ * Utilities for controlling an element's perspective origin when placed in 3D
+ * space.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/perspective-origin Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/perspective-origin , MDN docs}
+ */
+ perspectiveOrigin: PerspectiveOriginValue
+}
+type PlaceContentLiteral = `place-content-${PlaceContentRef1}`
+type PlaceContentValue = PlaceContentLiteral
+interface TailwindPlaceContent {
+ /**
+ * `PlaceContent`
+ *
+ * Utilities for controlling how content is justified and aligned at the same
+ * time.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/place-content Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/place-content , MDN docs}
+ */
+ placeContent: PlaceContentValue
+}
+type PlaceItemsLiteral = `place-items-${PlaceItemsRef1}`
+type PlaceItemsValue = PlaceItemsLiteral
+interface TailwindPlaceItems {
+ /**
+ * `PlaceItems`
+ *
+ * Utilities for controlling how items are justified and aligned at the same
+ * time.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/place-items Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/place-items , MDN docs}
+ */
+ placeItems: PlaceItemsValue
+}
+type PlaceSelfLiteral = `place-self-${PlaceSelfRef1}`
+type PlaceSelfValue = PlaceSelfLiteral
+interface TailwindPlaceSelf {
+ /**
+ * `PlaceSelf`
+ *
+ * Utilities for controlling how an individual item is justified and aligned
+ * at the same time.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/place-self Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/place-self , MDN docs}
+ */
+ placeSelf: PlaceSelfValue
+}
+type ColorPlaceholderLiteral = `placeholder-${ColorRef1}`
+type ColorTextLiteral = `text-${ColorRef1}`
+type ColorValue = ColorPlaceholderLiteral | ColorTextLiteral
+interface TailwindColor {
+ /**
+ * `Color`
+ *
+ * Utilities for controlling the text color of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/color , MDN docs}
+ */
+ color: ColorValue
+}
+type PointerEventsValue =
+ | 'pointer-events-auto'
+ | 'pointer-events-none'
+ | 'pointer-events-auto'
+ | 'pointer-events-none'
+interface TailwindPointerEvents {
+ /**
+ * `PointerEvents`
+ *
+ * Utilities for controlling whether an element responds to pointer events.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/pointer-events Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events , MDN docs}
+ */
+ pointerEvents: PointerEventsValue
+}
+type ResizeLiteral = `resize-${ResizeRef1}`
+type ResizeValue = 'resize' | ResizeLiteral
+interface TailwindResize {
+ /**
+ * `Resize`
+ *
+ * Utilities for controlling how an element can be resized.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/resize Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/resize , MDN docs}
+ */
+ resize: ResizeValue
+}
+type BorderRadiusRoundedbLiteral = `rounded-b-${BorderRadiusRef1}`
+type BorderRadiusRoundedblLiteral = `rounded-bl-${BorderRadiusRef1}`
+type BorderRadiusRoundedbrLiteral = `rounded-br-${BorderRadiusRef1}`
+type BorderRadiusRoundedeLiteral = `rounded-e-${BorderRadiusRef1}`
+type BorderRadiusRoundedeeLiteral = `rounded-ee-${BorderRadiusRef1}`
+type BorderRadiusRoundedesLiteral = `rounded-es-${BorderRadiusRef1}`
+type BorderRadiusRoundedlLiteral = `rounded-l-${BorderRadiusRef1}`
+type BorderRadiusRoundedrLiteral = `rounded-r-${BorderRadiusRef1}`
+type BorderRadiusRoundedsLiteral = `rounded-s-${BorderRadiusRef1}`
+type BorderRadiusRoundedseLiteral = `rounded-se-${BorderRadiusRef1}`
+type BorderRadiusRoundedssLiteral = `rounded-ss-${BorderRadiusRef1}`
+type BorderRadiusRoundedtLiteral = `rounded-t-${BorderRadiusRef1}`
+type BorderRadiusRoundedtlLiteral = `rounded-tl-${BorderRadiusRef1}`
+type BorderRadiusRoundedtrLiteral = `rounded-tr-${BorderRadiusRef1}`
+type BorderRadiusRoundedLiteral = `rounded-${BorderRadiusRef1}`
+type BorderRadiusValue =
+ | BorderRadiusRoundedbLiteral
+ | BorderRadiusRoundedblLiteral
+ | BorderRadiusRoundedbrLiteral
+ | BorderRadiusRoundedeLiteral
+ | BorderRadiusRoundedeeLiteral
+ | BorderRadiusRoundedesLiteral
+ | BorderRadiusRoundedlLiteral
+ | BorderRadiusRoundedrLiteral
+ | BorderRadiusRoundedsLiteral
+ | BorderRadiusRoundedseLiteral
+ | BorderRadiusRoundedssLiteral
+ | BorderRadiusRoundedtLiteral
+ | BorderRadiusRoundedtlLiteral
+ | BorderRadiusRoundedtrLiteral
+ | BorderRadiusRoundedLiteral
+interface TailwindBorderRadius {
+ /**
+ * `BorderRadius`
+ *
+ * Utilities for controlling the border radius of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/border-radius Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius , MDN docs}
+ */
+ borderRadius: BorderRadiusValue
+}
+type ColorSchemeSchemelightLiteral = `scheme-light-${ColorSchemeRef1}`
+type ColorSchemeSchemeLiteral = `scheme-${ColorSchemeRef2}`
+type ColorSchemeValue = ColorSchemeSchemelightLiteral | ColorSchemeSchemeLiteral
+interface TailwindColorScheme {
+ /**
+ * `ColorScheme`
+ *
+ * Utilities for controlling the color scheme of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/color-scheme Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme , MDN docs}
+ */
+ colorScheme: ColorSchemeValue
+}
+type ScrollBehaviorValue =
+ | 'scroll-auto'
+ | 'scroll-smooth'
+ | 'scroll-auto'
+ | 'scroll-smooth'
+interface TailwindScrollBehavior {
+ /**
+ * `ScrollBehavior`
+ *
+ * Utilities for controlling the scroll behavior of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scroll-behavior Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior , MDN docs}
+ */
+ scrollBehavior: ScrollBehaviorValue
+}
+type ScrollPaddingScrollpLiteral = `scroll-p-${ScrollPaddingRef1}`
+type ScrollPaddingScrollpbLiteral = `scroll-pb-${ScrollPaddingRef1}`
+type ScrollPaddingScrollpeLiteral = `scroll-pe-${ScrollPaddingRef1}`
+type ScrollPaddingScrollplLiteral = `scroll-pl-${ScrollPaddingRef1}`
+type ScrollPaddingScrollprLiteral = `scroll-pr-${ScrollPaddingRef1}`
+type ScrollPaddingScrollpsLiteral = `scroll-ps-${ScrollPaddingRef1}`
+type ScrollPaddingScrollptLiteral = `scroll-pt-${ScrollPaddingRef1}`
+type ScrollPaddingScrollpxLiteral = `scroll-px-${ScrollPaddingRef1}`
+type ScrollPaddingScrollpyLiteral = `scroll-py-${ScrollPaddingRef1}`
+type ScrollPaddingValue =
+ | ScrollPaddingScrollpLiteral
+ | ScrollPaddingScrollpbLiteral
+ | ScrollPaddingScrollpeLiteral
+ | ScrollPaddingScrollplLiteral
+ | ScrollPaddingScrollprLiteral
+ | ScrollPaddingScrollpsLiteral
+ | ScrollPaddingScrollptLiteral
+ | ScrollPaddingScrollpxLiteral
+ | ScrollPaddingScrollpyLiteral
+interface TailwindScrollPadding {
+ /**
+ * `ScrollPadding`
+ *
+ * Utilities for controlling an element's scroll offset within a snap
+ * container.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scroll-padding Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-padding , MDN docs}
+ */
+ scrollPadding: ScrollPaddingValue
+}
+type UserSelectSelectLiteral = `select-${UserSelectRef1}`
+type UserSelectValue = UserSelectSelectLiteral
+interface TailwindUserSelect {
+ /**
+ * `UserSelect`
+ *
+ * Utilities for controlling whether the user can select text in an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/user-select Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/user-select , MDN docs}
+ */
+ userSelect: UserSelectValue
+}
+type AlignSelfSelfLiteral = `self-${AlignSelfRef1}`
+type AlignSelfValue = AlignSelfSelfLiteral
+interface TailwindAlignSelf {
+ /**
+ * `AlignSelf`
+ *
+ * Utilities for controlling how an individual flex or grid item is positioned
+ * along its container's cross axis.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/align-self Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/align-self , MDN docs}
+ */
+ alignSelf: AlignSelfValue
+}
+type FlexShrinkValue = 'shrink' | 'shrink-0' | 'shrink' | 'shrink-0'
+interface TailwindFlexShrink {
+ /**
+ * `FlexShrink`
+ *
+ * Utilities for controlling how flex items shrink.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/flex-shrink Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/flex-shrink , MDN docs}
+ */
+ flexShrink: FlexShrinkValue
+}
+type WidthSizeLiteral = `size-${WidthRef1}`
+type WidthWLiteral =
+ | `w-${WidthRef1}`
+ | 'w-2xl'
+ | 'w-2xs'
+ | 'w-3xl'
+ | 'w-3xs'
+ | 'w-4xl'
+ | 'w-5xl'
+ | 'w-6xl'
+ | 'w-7xl'
+ | 'w-lg'
+ | 'w-md'
+ | 'w-screen'
+ | 'w-sm'
+ | 'w-xl'
+ | 'w-xs'
+type WidthValue = WidthSizeLiteral | WidthWLiteral
+interface TailwindWidth {
+ /**
+ * `Width`
+ *
+ * Utilities for setting the width of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/width Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/width , MDN docs}
+ */
+ width: WidthValue
+}
+type ScrollSnapAlignSnapLiteral = `snap-${ScrollSnapAlignRef1}`
+type ScrollSnapAlignValue = ScrollSnapAlignSnapLiteral
+interface TailwindScrollSnapAlign {
+ /**
+ * `ScrollSnapAlign`
+ *
+ * Utilities for controlling the scroll snap alignment of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scroll-snap-align Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-align , MDN docs}
+ */
+ scrollSnapAlign: ScrollSnapAlignValue
+}
+type ScrollSnapStopValue =
+ | 'snap-always'
+ | 'snap-normal'
+ | 'snap-always'
+ | 'snap-normal'
+interface TailwindScrollSnapStop {
+ /**
+ * `ScrollSnapStop`
+ *
+ * Utilities for controlling whether you can skip past possible snap
+ * positions.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scroll-snap-stop Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-stop , MDN docs}
+ */
+ scrollSnapStop: ScrollSnapStopValue
+}
+type ScrollSnapTypeSnapLiteral = `snap-${ScrollSnapTypeRef1}`
+type ScrollSnapTypeValue = ScrollSnapTypeSnapLiteral
+interface TailwindScrollSnapType {
+ /**
+ * `ScrollSnapType`
+ *
+ * Utilities for controlling how strictly snap points are enforced in a snap
+ * container.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scroll-snap-type Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-type , MDN docs}
+ */
+ scrollSnapType: ScrollSnapTypeValue
+}
+type StrokeWidthStrokeLiteral = `stroke-${StrokeWidthRef1}`
+type StrokeWidthValue = StrokeWidthStrokeLiteral
+interface TailwindStrokeWidth {
+ /**
+ * `StrokeWidth`
+ *
+ * Utilities for styling the stroke width of SVG elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/stroke-width Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/stroke-width , MDN docs}
+ */
+ strokeWidth: StrokeWidthValue
+}
+type StrokeLiteral = `stroke-${StrokeRef1}`
+type StrokeValue = StrokeLiteral
+interface TailwindStroke {
+ /**
+ * `Stroke`
+ *
+ * Utilities for styling the stroke of SVG elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/stroke Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/stroke , MDN docs}
+ */
+ stroke: StrokeValue
+}
+type TableLayoutValue =
+ | 'table-auto'
+ | 'table-fixed'
+ | 'table-auto'
+ | 'table-fixed'
+interface TailwindTableLayout {
+ /**
+ * `TableLayout`
+ *
+ * Utilities for controlling the table layout algorithm.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/table-layout Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/table-layout , MDN docs}
+ */
+ tableLayout: TableLayoutValue
+}
+type FontSizeTextLiteral = `text-${FontSizeRef1}`
+type FontSizeValue = FontSizeTextLiteral
+interface TailwindFontSize {
+ /**
+ * `FontSize`
+ *
+ * Utilities for controlling the font size of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-size Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-size , MDN docs}
+ */
+ fontSize: FontSizeValue
+}
+type TextWrapTextLiteral = `text-${TextWrapRef1}`
+type TextWrapValue = TextWrapTextLiteral
+interface TailwindTextWrap {
+ /**
+ * `TextWrap`
+ *
+ * Utilities for controlling how text wraps within an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-wrap Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-wrap , MDN docs}
+ */
+ textWrap: TextWrapValue
+}
+type TextAlignTextLiteral = `text-${TextAlignRef1}`
+type TextAlignValue = TextAlignTextLiteral
+interface TailwindTextAlign {
+ /**
+ * `TextAlign`
+ *
+ * Utilities for controlling the alignment of text.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-align Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-align , MDN docs}
+ */
+ textAlign: TextAlignValue
+}
+type TextShadowLiteral = `text-shadow-${TextShadowRef1}`
+type TextShadowValue = TextShadowLiteral
+interface TailwindTextShadow {
+ /**
+ * `TextShadow`
+ *
+ * Utilities for controlling the shadow of a text element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-shadow Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow , MDN docs}
+ */
+ textShadow: TextShadowValue
+}
+type TouchActionTouchpanLiteral = `touch-pan-${TouchActionRef1}`
+type TouchActionTouchLiteral = `touch-${TouchActionRef2}`
+type TouchActionValue = TouchActionTouchpanLiteral | TouchActionTouchLiteral
+interface TailwindTouchAction {
+ /**
+ * `TouchAction`
+ *
+ * Utilities for controlling how an element can be scrolled and zoomed on
+ * touchscreens.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/touch-action Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action , MDN docs}
+ */
+ touchAction: TouchActionValue
+}
+type TransformLiteral = `transform-${TransformRef1}`
+type TransformValue = 'transform' | TransformLiteral
+interface TailwindTransform {
+ /**
+ * `Transform`
+ *
+ * Utilities for transforming elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transform Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform , MDN docs}
+ */
+ transform: TransformValue
+}
+type TransformStyleValue =
+ | 'transform-3d'
+ | 'transform-flat'
+ | 'transform-3d'
+ | 'transform-flat'
+interface TailwindTransformStyle {
+ /**
+ * `TransformStyle`
+ *
+ * Utilities for controlling if an elements children are placed in 3D space.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transform-style Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-style , MDN docs}
+ */
+ transformStyle: TransformStyleValue
+}
+type TransformBoxTransformLiteral = `transform-${TransformBoxRef1}`
+type TransformBoxValue = TransformBoxTransformLiteral
+interface TailwindTransformBox {
+ /**
+ * `TransformBox`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-box , MDN docs}
+ */
+ transformBox: TransformBoxValue
+}
+type TransitionPropertyTransitionLiteral =
+ `transition-${TransitionPropertyRef1}`
+type TransitionPropertyValue =
+ | 'transition'
+ | TransitionPropertyTransitionLiteral
+interface TailwindTransitionProperty {
+ /**
+ * `TransitionProperty`
+ *
+ * Utilities for controlling which CSS properties transition.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transition-property Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transition-property , MDN docs}
+ */
+ transitionProperty: TransitionPropertyValue
+}
+type TransitionBehaviorValue =
+ | 'transition-discrete'
+ | 'transition-normal'
+ | 'transition-discrete'
+ | 'transition-normal'
+interface TailwindTransitionBehavior {
+ /**
+ * `TransitionBehavior`
+ *
+ * Utilities to control the behavior of CSS transitions.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transition-behavior Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transition-behavior , MDN docs}
+ */
+ transitionBehavior: TransitionBehaviorValue
+}
+type WhiteSpacePreLiteral = `whitespace-pre-${WhiteSpaceRef1}`
+type WhiteSpaceLiteral = `whitespace-${WhiteSpaceRef2}`
+type WhiteSpaceValue = WhiteSpacePreLiteral | WhiteSpaceLiteral
+interface TailwindWhiteSpace {
+ /**
+ * `WhiteSpace`
+ *
+ * Utilities for controlling an element's white-space property.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/white-space Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/white-space , MDN docs}
+ */
+ whiteSpace: WhiteSpaceValue
+}
+type WillChangeLiteral = `will-change-${WillChangeRef1}`
+type WillChangeValue = WillChangeLiteral
+interface TailwindWillChange {
+ /**
+ * `WillChange`
+ *
+ * Utilities for optimizing upcoming animations of elements that are expected
+ * to change.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/will-change Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/will-change , MDN docs}
+ */
+ willChange: WillChangeValue
+}
+export interface Tailwind
+ extends TailwindBackgroundImage,
+ TailwindBottom,
+ TailwindGridColumn,
+ TailwindEnd,
+ TailwindTextIndent,
+ TailwindInset,
+ TailwindLeft,
+ TailwindMargin,
+ TailwindMaskImage,
+ TailwindOrder,
+ TailwindOutlineOffset,
+ TailwindRight,
+ TailwindRotate,
+ TailwindGridRow,
+ TailwindScale,
+ TailwindScrollMargin,
+ TailwindSkew,
+ TailwindCustom,
+ TailwindStart,
+ TailwindTop,
+ TailwindLetterSpacing,
+ TailwindTranslate,
+ TailwindTextUnderlineOffset,
+ TailwindZIndex,
+ TailwindContainerType,
+ TailwindPosition,
+ TailwindAccentColor,
+ TailwindVerticalAlign,
+ TailwindAnimation,
+ TailwindFontSmoothing,
+ TailwindAppearance,
+ TailwindAspectRatio,
+ TailwindGridAutoColumns,
+ TailwindGridAutoRows,
+ TailwindBackdropFilter,
+ TailwindBackfaceVisibility,
+ TailwindFlexBasis,
+ TailwindBackgroundColor,
+ TailwindBackgroundSize,
+ TailwindBackgroundBlendMode,
+ TailwindBackgroundPosition,
+ TailwindBackgroundClip,
+ TailwindBackgroundAttachment,
+ TailwindBackgroundRepeat,
+ TailwindBackgroundOrigin,
+ TailwindDisplay,
+ TailwindFilter,
+ TailwindBorderWidth,
+ TailwindBorderColor,
+ TailwindBorderCollapse,
+ TailwindBorderStyle,
+ TailwindBorderSpacing,
+ TailwindBoxSizing,
+ TailwindBoxDecorationBreak,
+ TailwindBreakAfter,
+ TailwindWordBreak,
+ TailwindBreakBefore,
+ TailwindBreakInside,
+ TailwindOverflowWrap,
+ TailwindTextTransform,
+ TailwindCaptionSide,
+ TailwindCaretColor,
+ TailwindClear,
+ TailwindVisibility,
+ TailwindColumns,
+ TailwindContain,
+ TailwindMaxWidth,
+ TailwindAlignContent,
+ TailwindContent,
+ TailwindCursor,
+ TailwindTextDecorationThickness,
+ TailwindTextDecorationColor,
+ TailwindTextDecorationStyle,
+ TailwindTransitionDelay,
+ TailwindFontVariantNumeric,
+ TailwindTransitionDuration,
+ TailwindTransitionTimingFunction,
+ TailwindFieldSizing,
+ TailwindFill,
+ TailwindFlex,
+ TailwindFlexDirection,
+ TailwindFlexWrap,
+ TailwindFloat,
+ TailwindFontWeight,
+ TailwindFontFamily,
+ TailwindFontStretch,
+ TailwindForcedColorAdjust,
+ TailwindGap,
+ TailwindGridTemplateColumns,
+ TailwindGridAutoFlow,
+ TailwindGridTemplateRows,
+ TailwindFlexGrow,
+ TailwindHeight,
+ TailwindHyphens,
+ TailwindBoxShadow,
+ TailwindIsolation,
+ TailwindFontStyle,
+ TailwindAlignItems,
+ TailwindJustifyContent,
+ TailwindJustifyItems,
+ TailwindJustifySelf,
+ TailwindLineHeight,
+ TailwindLineClamp,
+ TailwindTextDecorationLine,
+ TailwindListStyleType,
+ TailwindListStyleImage,
+ TailwindListStylePosition,
+ TailwindMaskComposite,
+ TailwindMaskMode,
+ TailwindMaskSize,
+ TailwindMaskPosition,
+ TailwindMaskClip,
+ TailwindMaskRepeat,
+ TailwindMaskOrigin,
+ TailwindMaskType,
+ TailwindMaxHeight,
+ TailwindMinHeight,
+ TailwindMinWidth,
+ TailwindMixBlendMode,
+ TailwindObjectPosition,
+ TailwindObjectFit,
+ TailwindOpacity,
+ TailwindTransformOrigin,
+ TailwindOutlineWidth,
+ TailwindOutlineColor,
+ TailwindOutlineStyle,
+ TailwindOverflow,
+ TailwindTextOverflow,
+ TailwindOverscrollBehavior,
+ TailwindPadding,
+ TailwindPerspective,
+ TailwindPerspectiveOrigin,
+ TailwindPlaceContent,
+ TailwindPlaceItems,
+ TailwindPlaceSelf,
+ TailwindColor,
+ TailwindPointerEvents,
+ TailwindResize,
+ TailwindBorderRadius,
+ TailwindColorScheme,
+ TailwindScrollBehavior,
+ TailwindScrollPadding,
+ TailwindUserSelect,
+ TailwindAlignSelf,
+ TailwindFlexShrink,
+ TailwindWidth,
+ TailwindScrollSnapAlign,
+ TailwindScrollSnapStop,
+ TailwindScrollSnapType,
+ TailwindStrokeWidth,
+ TailwindStroke,
+ TailwindTableLayout,
+ TailwindFontSize,
+ TailwindTextWrap,
+ TailwindTextAlign,
+ TailwindTextShadow,
+ TailwindTouchAction,
+ TailwindTransform,
+ TailwindTransformStyle,
+ TailwindTransformBox,
+ TailwindTransitionProperty,
+ TailwindTransitionBehavior,
+ TailwindWhiteSpace,
+ TailwindWillChange {}
+/**
+ * Tailwind nest groups
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ */
+export type TailwindNestGroups =
+ | '*'
+ | '**'
+ | 'not-first'
+ | 'not-last'
+ | 'not-only'
+ | 'not-odd'
+ | 'not-even'
+ | 'not-first-of-type'
+ | 'not-last-of-type'
+ | 'not-only-of-type'
+ | 'not-visited'
+ | 'not-target'
+ | 'not-open'
+ | 'not-default'
+ | 'not-checked'
+ | 'not-indeterminate'
+ | 'not-placeholder-shown'
+ | 'not-autofill'
+ | 'not-optional'
+ | 'not-required'
+ | 'not-valid'
+ | 'not-invalid'
+ | 'not-user-valid'
+ | 'not-user-invalid'
+ | 'not-in-range'
+ | 'not-out-of-range'
+ | 'not-read-only'
+ | 'not-empty'
+ | 'not-focus-within'
+ | 'not-hover'
+ | 'not-focus'
+ | 'not-focus-visible'
+ | 'not-active'
+ | 'not-enabled'
+ | 'not-disabled'
+ | 'not-inert'
+ | 'not-in'
+ | 'not-has'
+ | 'not-aria'
+ | 'not-data'
+ | 'not-nth'
+ | 'not-nth-last'
+ | 'not-nth-of-type'
+ | 'not-nth-last-of-type'
+ | 'not-supports'
+ | 'not-motion-safe'
+ | 'not-motion-reduce'
+ | 'not-contrast-more'
+ | 'not-contrast-less'
+ | 'not-max'
+ | 'not-sm'
+ | 'not-md'
+ | 'not-lg'
+ | 'not-xl'
+ | 'not-2xl'
+ | 'not-min'
+ | 'not-@max'
+ | 'not-@'
+ | 'not-@min'
+ | 'not-portrait'
+ | 'not-landscape'
+ | 'not-ltr'
+ | 'not-rtl'
+ | 'not-dark'
+ | 'not-print'
+ | 'not-forced-colors'
+ | 'not-inverted-colors'
+ | 'not-pointer-none'
+ | 'not-pointer-coarse'
+ | 'not-pointer-fine'
+ | 'not-any-pointer-none'
+ | 'not-any-pointer-coarse'
+ | 'not-any-pointer-fine'
+ | 'not-noscript'
+ | 'not-prose-headings'
+ | 'not-prose-h1'
+ | 'not-prose-h2'
+ | 'not-prose-h3'
+ | 'not-prose-h4'
+ | 'not-prose-h5'
+ | 'not-prose-h6'
+ | 'not-prose-p'
+ | 'not-prose-a'
+ | 'not-prose-blockquote'
+ | 'not-prose-figure'
+ | 'not-prose-figcaption'
+ | 'not-prose-strong'
+ | 'not-prose-em'
+ | 'not-prose-kbd'
+ | 'not-prose-code'
+ | 'not-prose-pre'
+ | 'not-prose-ol'
+ | 'not-prose-ul'
+ | 'not-prose-li'
+ | 'not-prose-table'
+ | 'not-prose-thead'
+ | 'not-prose-tr'
+ | 'not-prose-th'
+ | 'not-prose-td'
+ | 'not-prose-img'
+ | 'not-prose-video'
+ | 'not-prose-hr'
+ | 'not-prose-lead'
+ | 'not-on-root'
+ | 'group-first'
+ | 'group-last'
+ | 'group-only'
+ | 'group-odd'
+ | 'group-even'
+ | 'group-first-of-type'
+ | 'group-last-of-type'
+ | 'group-only-of-type'
+ | 'group-visited'
+ | 'group-target'
+ | 'group-open'
+ | 'group-default'
+ | 'group-checked'
+ | 'group-indeterminate'
+ | 'group-placeholder-shown'
+ | 'group-autofill'
+ | 'group-optional'
+ | 'group-required'
+ | 'group-valid'
+ | 'group-invalid'
+ | 'group-user-valid'
+ | 'group-user-invalid'
+ | 'group-in-range'
+ | 'group-out-of-range'
+ | 'group-read-only'
+ | 'group-empty'
+ | 'group-focus-within'
+ | 'group-hover'
+ | 'group-focus'
+ | 'group-focus-visible'
+ | 'group-active'
+ | 'group-enabled'
+ | 'group-disabled'
+ | 'group-inert'
+ | 'group-in'
+ | 'group-has'
+ | 'group-aria'
+ | 'group-data'
+ | 'group-nth'
+ | 'group-nth-last'
+ | 'group-nth-of-type'
+ | 'group-nth-last-of-type'
+ | 'group-ltr'
+ | 'group-rtl'
+ | 'group-dark'
+ | 'group-prose-headings'
+ | 'group-prose-h1'
+ | 'group-prose-h2'
+ | 'group-prose-h3'
+ | 'group-prose-h4'
+ | 'group-prose-h5'
+ | 'group-prose-h6'
+ | 'group-prose-p'
+ | 'group-prose-a'
+ | 'group-prose-blockquote'
+ | 'group-prose-figure'
+ | 'group-prose-figcaption'
+ | 'group-prose-strong'
+ | 'group-prose-em'
+ | 'group-prose-kbd'
+ | 'group-prose-code'
+ | 'group-prose-pre'
+ | 'group-prose-ol'
+ | 'group-prose-ul'
+ | 'group-prose-li'
+ | 'group-prose-table'
+ | 'group-prose-thead'
+ | 'group-prose-tr'
+ | 'group-prose-th'
+ | 'group-prose-td'
+ | 'group-prose-img'
+ | 'group-prose-video'
+ | 'group-prose-hr'
+ | 'group-prose-lead'
+ | 'group-on-root'
+ | 'peer-first'
+ | 'peer-last'
+ | 'peer-only'
+ | 'peer-odd'
+ | 'peer-even'
+ | 'peer-first-of-type'
+ | 'peer-last-of-type'
+ | 'peer-only-of-type'
+ | 'peer-visited'
+ | 'peer-target'
+ | 'peer-open'
+ | 'peer-default'
+ | 'peer-checked'
+ | 'peer-indeterminate'
+ | 'peer-placeholder-shown'
+ | 'peer-autofill'
+ | 'peer-optional'
+ | 'peer-required'
+ | 'peer-valid'
+ | 'peer-invalid'
+ | 'peer-user-valid'
+ | 'peer-user-invalid'
+ | 'peer-in-range'
+ | 'peer-out-of-range'
+ | 'peer-read-only'
+ | 'peer-empty'
+ | 'peer-focus-within'
+ | 'peer-hover'
+ | 'peer-focus'
+ | 'peer-focus-visible'
+ | 'peer-active'
+ | 'peer-enabled'
+ | 'peer-disabled'
+ | 'peer-inert'
+ | 'peer-in'
+ | 'peer-has'
+ | 'peer-aria'
+ | 'peer-data'
+ | 'peer-nth'
+ | 'peer-nth-last'
+ | 'peer-nth-of-type'
+ | 'peer-nth-last-of-type'
+ | 'peer-ltr'
+ | 'peer-rtl'
+ | 'peer-dark'
+ | 'peer-prose-headings'
+ | 'peer-prose-h1'
+ | 'peer-prose-h2'
+ | 'peer-prose-h3'
+ | 'peer-prose-h4'
+ | 'peer-prose-h5'
+ | 'peer-prose-h6'
+ | 'peer-prose-p'
+ | 'peer-prose-a'
+ | 'peer-prose-blockquote'
+ | 'peer-prose-figure'
+ | 'peer-prose-figcaption'
+ | 'peer-prose-strong'
+ | 'peer-prose-em'
+ | 'peer-prose-kbd'
+ | 'peer-prose-code'
+ | 'peer-prose-pre'
+ | 'peer-prose-ol'
+ | 'peer-prose-ul'
+ | 'peer-prose-li'
+ | 'peer-prose-table'
+ | 'peer-prose-thead'
+ | 'peer-prose-tr'
+ | 'peer-prose-th'
+ | 'peer-prose-td'
+ | 'peer-prose-img'
+ | 'peer-prose-video'
+ | 'peer-prose-hr'
+ | 'peer-prose-lead'
+ | 'peer-on-root'
+ | 'first-letter'
+ | 'first-line'
+ | 'marker'
+ | 'selection'
+ | 'file'
+ | 'placeholder'
+ | 'backdrop'
+ | 'details-content'
+ | 'before'
+ | 'after'
+ | 'first'
+ | 'last'
+ | 'only'
+ | 'odd'
+ | 'even'
+ | 'first-of-type'
+ | 'last-of-type'
+ | 'only-of-type'
+ | 'visited'
+ | 'target'
+ | 'open'
+ | 'default'
+ | 'checked'
+ | 'indeterminate'
+ | 'placeholder-shown'
+ | 'autofill'
+ | 'optional'
+ | 'required'
+ | 'valid'
+ | 'invalid'
+ | 'user-valid'
+ | 'user-invalid'
+ | 'in-range'
+ | 'out-of-range'
+ | 'read-only'
+ | 'empty'
+ | 'focus-within'
+ | 'hover'
+ | 'focus'
+ | 'focus-visible'
+ | 'active'
+ | 'enabled'
+ | 'disabled'
+ | 'inert'
+ | 'in-first'
+ | 'in-last'
+ | 'in-only'
+ | 'in-odd'
+ | 'in-even'
+ | 'in-first-of-type'
+ | 'in-last-of-type'
+ | 'in-only-of-type'
+ | 'in-visited'
+ | 'in-target'
+ | 'in-open'
+ | 'in-default'
+ | 'in-checked'
+ | 'in-indeterminate'
+ | 'in-placeholder-shown'
+ | 'in-autofill'
+ | 'in-optional'
+ | 'in-required'
+ | 'in-valid'
+ | 'in-invalid'
+ | 'in-user-valid'
+ | 'in-user-invalid'
+ | 'in-in-range'
+ | 'in-out-of-range'
+ | 'in-read-only'
+ | 'in-empty'
+ | 'in-focus-within'
+ | 'in-hover'
+ | 'in-focus'
+ | 'in-focus-visible'
+ | 'in-active'
+ | 'in-enabled'
+ | 'in-disabled'
+ | 'in-inert'
+ | 'in-in'
+ | 'in-has'
+ | 'in-aria'
+ | 'in-data'
+ | 'in-nth'
+ | 'in-nth-last'
+ | 'in-nth-of-type'
+ | 'in-nth-last-of-type'
+ | 'in-ltr'
+ | 'in-rtl'
+ | 'in-dark'
+ | 'in-prose-headings'
+ | 'in-prose-h1'
+ | 'in-prose-h2'
+ | 'in-prose-h3'
+ | 'in-prose-h4'
+ | 'in-prose-h5'
+ | 'in-prose-h6'
+ | 'in-prose-p'
+ | 'in-prose-a'
+ | 'in-prose-blockquote'
+ | 'in-prose-figure'
+ | 'in-prose-figcaption'
+ | 'in-prose-strong'
+ | 'in-prose-em'
+ | 'in-prose-kbd'
+ | 'in-prose-code'
+ | 'in-prose-pre'
+ | 'in-prose-ol'
+ | 'in-prose-ul'
+ | 'in-prose-li'
+ | 'in-prose-table'
+ | 'in-prose-thead'
+ | 'in-prose-tr'
+ | 'in-prose-th'
+ | 'in-prose-td'
+ | 'in-prose-img'
+ | 'in-prose-video'
+ | 'in-prose-hr'
+ | 'in-prose-lead'
+ | 'in-on-root'
+ | 'has-first'
+ | 'has-last'
+ | 'has-only'
+ | 'has-odd'
+ | 'has-even'
+ | 'has-first-of-type'
+ | 'has-last-of-type'
+ | 'has-only-of-type'
+ | 'has-visited'
+ | 'has-target'
+ | 'has-open'
+ | 'has-default'
+ | 'has-checked'
+ | 'has-indeterminate'
+ | 'has-placeholder-shown'
+ | 'has-autofill'
+ | 'has-optional'
+ | 'has-required'
+ | 'has-valid'
+ | 'has-invalid'
+ | 'has-user-valid'
+ | 'has-user-invalid'
+ | 'has-in-range'
+ | 'has-out-of-range'
+ | 'has-read-only'
+ | 'has-empty'
+ | 'has-focus-within'
+ | 'has-hover'
+ | 'has-focus'
+ | 'has-focus-visible'
+ | 'has-active'
+ | 'has-enabled'
+ | 'has-disabled'
+ | 'has-inert'
+ | 'has-in'
+ | 'has-has'
+ | 'has-aria'
+ | 'has-data'
+ | 'has-nth'
+ | 'has-nth-last'
+ | 'has-nth-of-type'
+ | 'has-nth-last-of-type'
+ | 'has-ltr'
+ | 'has-rtl'
+ | 'has-dark'
+ | 'has-prose-headings'
+ | 'has-prose-h1'
+ | 'has-prose-h2'
+ | 'has-prose-h3'
+ | 'has-prose-h4'
+ | 'has-prose-h5'
+ | 'has-prose-h6'
+ | 'has-prose-p'
+ | 'has-prose-a'
+ | 'has-prose-blockquote'
+ | 'has-prose-figure'
+ | 'has-prose-figcaption'
+ | 'has-prose-strong'
+ | 'has-prose-em'
+ | 'has-prose-kbd'
+ | 'has-prose-code'
+ | 'has-prose-pre'
+ | 'has-prose-ol'
+ | 'has-prose-ul'
+ | 'has-prose-li'
+ | 'has-prose-table'
+ | 'has-prose-thead'
+ | 'has-prose-tr'
+ | 'has-prose-th'
+ | 'has-prose-td'
+ | 'has-prose-img'
+ | 'has-prose-video'
+ | 'has-prose-hr'
+ | 'has-prose-lead'
+ | 'has-on-root'
+ | 'aria-busy'
+ | 'aria-checked'
+ | 'aria-disabled'
+ | 'aria-expanded'
+ | 'aria-hidden'
+ | 'aria-pressed'
+ | 'aria-readonly'
+ | 'aria-required'
+ | 'aria-selected'
+ | 'data'
+ | 'nth'
+ | 'nth-last'
+ | 'nth-of-type'
+ | 'nth-last-of-type'
+ | 'supports'
+ | 'motion-safe'
+ | 'motion-reduce'
+ | 'contrast-more'
+ | 'contrast-less'
+ | 'max-sm'
+ | 'max-md'
+ | 'max-lg'
+ | 'max-xl'
+ | 'max-2xl'
+ | 'sm'
+ | 'md'
+ | 'lg'
+ | 'xl'
+ | '2xl'
+ | 'min-sm'
+ | 'min-md'
+ | 'min-lg'
+ | 'min-xl'
+ | 'min-2xl'
+ | '@max-3xs'
+ | '@max-2xs'
+ | '@max-xs'
+ | '@max-sm'
+ | '@max-md'
+ | '@max-lg'
+ | '@max-xl'
+ | '@max-2xl'
+ | '@max-3xl'
+ | '@max-4xl'
+ | '@max-5xl'
+ | '@max-6xl'
+ | '@max-7xl'
+ | '@3xs'
+ | '@2xs'
+ | '@xs'
+ | '@sm'
+ | '@md'
+ | '@lg'
+ | '@xl'
+ | '@2xl'
+ | '@3xl'
+ | '@4xl'
+ | '@5xl'
+ | '@6xl'
+ | '@7xl'
+ | '@min-3xs'
+ | '@min-2xs'
+ | '@min-xs'
+ | '@min-sm'
+ | '@min-md'
+ | '@min-lg'
+ | '@min-xl'
+ | '@min-2xl'
+ | '@min-3xl'
+ | '@min-4xl'
+ | '@min-5xl'
+ | '@min-6xl'
+ | '@min-7xl'
+ | 'portrait'
+ | 'landscape'
+ | 'ltr'
+ | 'rtl'
+ | 'dark'
+ | 'starting'
+ | 'print'
+ | 'forced-colors'
+ | 'inverted-colors'
+ | 'pointer-none'
+ | 'pointer-coarse'
+ | 'pointer-fine'
+ | 'any-pointer-none'
+ | 'any-pointer-coarse'
+ | 'any-pointer-fine'
+ | 'noscript'
+ | 'prose-headings'
+ | 'prose-h1'
+ | 'prose-h2'
+ | 'prose-h3'
+ | 'prose-h4'
+ | 'prose-h5'
+ | 'prose-h6'
+ | 'prose-p'
+ | 'prose-a'
+ | 'prose-blockquote'
+ | 'prose-figure'
+ | 'prose-figcaption'
+ | 'prose-strong'
+ | 'prose-em'
+ | 'prose-kbd'
+ | 'prose-code'
+ | 'prose-pre'
+ | 'prose-ol'
+ | 'prose-ul'
+ | 'prose-li'
+ | 'prose-table'
+ | 'prose-thead'
+ | 'prose-tr'
+ | 'prose-th'
+ | 'prose-td'
+ | 'prose-img'
+ | 'prose-video'
+ | 'prose-hr'
+ | 'prose-lead'
+ | 'on-root'
diff --git a/packages/web/src/lib/utils/tw.ts b/packages/web/src/lib/utils/tw.ts
new file mode 100644
index 0000000..8deee9b
--- /dev/null
+++ b/packages/web/src/lib/utils/tw.ts
@@ -0,0 +1,30 @@
+import { type ClassValue, clsx } from 'clsx'
+import { twMerge } from 'tailwind-merge'
+import {
+ type CreateTailwindest,
+ type CreateTailwindLiteral,
+ createTools,
+} from 'tailwindest'
+import type { Tailwind, TailwindNestGroups } from './tailwind'
+
+export type Tailwindest = CreateTailwindest<{
+ tailwind: Tailwind
+ tailwindNestGroups: TailwindNestGroups
+ useArbitrary: true // <-- enable arbitrary values, type-hinting is available for this option
+ // groupPrefix: "$" <-- prefix for group variants
+}>
+
+// Create a literal type for all possible Tailwind classes
+export type TailwindLiteral = CreateTailwindLiteral
+
+// Create the tools
+export const tw = createTools<{
+ tailwindest: Tailwindest
+ tailwindLiteral: TailwindLiteral
+ useArbitrary: true
+ // useTypedLiteral: true <-- enables typed literal classes at tw.style().class(...typed literals)
+}>()
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs))
+}
diff --git a/packages/web/src/mdx_components.tsx b/packages/web/src/mdx_components.tsx
new file mode 100644
index 0000000..205e889
--- /dev/null
+++ b/packages/web/src/mdx_components.tsx
@@ -0,0 +1,22 @@
+import { createGenerator } from 'fumadocs-typescript'
+import { AutoTypeTable } from 'fumadocs-typescript/ui'
+import { Callout } from 'fumadocs-ui/components/callout'
+import * as TabsComponents from 'fumadocs-ui/components/tabs'
+import defaultMdxComponents from 'fumadocs-ui/mdx'
+import type { MDXComponents } from 'mdx/types'
+import { Mermaid } from '@/components/ui/mermaid'
+
+const generator = createGenerator()
+
+export function getMDXComponents(components?: MDXComponents): MDXComponents {
+ return {
+ ...defaultMdxComponents,
+ AutoTypeTable: (props) => (
+
+ ),
+ Mermaid,
+ blockquote: Callout,
+ ...TabsComponents,
+ ...components,
+ }
+}
diff --git a/packages/web/src/middleware/i18n_middleware.ts b/packages/web/src/middleware/i18n_middleware.ts
new file mode 100644
index 0000000..2b5e435
--- /dev/null
+++ b/packages/web/src/middleware/i18n_middleware.ts
@@ -0,0 +1,10 @@
+import { createI18nMiddleware } from 'fumadocs-core/i18n/middleware'
+import { i18n } from '@/lib/i18n' // This path is correct for your structure
+
+export const config = {
+ // Matcher-Eintrรคge ignorieren `/_next/` und `/api/`
+ // Mรถglicherweise mรผssen Sie dies anpassen, um statische Assets im `/public`-Ordner zu ignorieren
+ matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
+}
+
+export default createI18nMiddleware(i18n)
diff --git a/packages/web/tailwind.ts b/packages/web/tailwind.ts
new file mode 100644
index 0000000..39ea2a1
--- /dev/null
+++ b/packages/web/tailwind.ts
@@ -0,0 +1,9568 @@
+/** Tailwind global color property */
+export type TailwindGlobalColor =
+ | 'red-50'
+ | 'red-100'
+ | 'red-200'
+ | 'red-300'
+ | 'red-400'
+ | 'red-500'
+ | 'red-600'
+ | 'red-700'
+ | 'red-800'
+ | 'red-900'
+ | 'red-950'
+ | 'orange-50'
+ | 'orange-100'
+ | 'orange-200'
+ | 'orange-300'
+ | 'orange-400'
+ | 'orange-500'
+ | 'orange-600'
+ | 'orange-700'
+ | 'orange-800'
+ | 'orange-900'
+ | 'orange-950'
+ | 'amber-50'
+ | 'amber-100'
+ | 'amber-200'
+ | 'amber-300'
+ | 'amber-400'
+ | 'amber-500'
+ | 'amber-600'
+ | 'amber-700'
+ | 'amber-800'
+ | 'amber-900'
+ | 'amber-950'
+ | 'yellow-50'
+ | 'yellow-100'
+ | 'yellow-200'
+ | 'yellow-300'
+ | 'yellow-400'
+ | 'yellow-500'
+ | 'yellow-600'
+ | 'yellow-700'
+ | 'yellow-800'
+ | 'yellow-900'
+ | 'yellow-950'
+ | 'lime-50'
+ | 'lime-100'
+ | 'lime-200'
+ | 'lime-300'
+ | 'lime-400'
+ | 'lime-500'
+ | 'lime-600'
+ | 'lime-700'
+ | 'lime-800'
+ | 'lime-900'
+ | 'lime-950'
+ | 'green-50'
+ | 'green-100'
+ | 'green-200'
+ | 'green-300'
+ | 'green-400'
+ | 'green-500'
+ | 'green-600'
+ | 'green-700'
+ | 'green-800'
+ | 'green-900'
+ | 'green-950'
+ | 'emerald-50'
+ | 'emerald-100'
+ | 'emerald-200'
+ | 'emerald-300'
+ | 'emerald-400'
+ | 'emerald-500'
+ | 'emerald-600'
+ | 'emerald-700'
+ | 'emerald-800'
+ | 'emerald-900'
+ | 'emerald-950'
+ | 'teal-50'
+ | 'teal-100'
+ | 'teal-200'
+ | 'teal-300'
+ | 'teal-400'
+ | 'teal-500'
+ | 'teal-600'
+ | 'teal-700'
+ | 'teal-800'
+ | 'teal-900'
+ | 'teal-950'
+ | 'cyan-50'
+ | 'cyan-100'
+ | 'cyan-200'
+ | 'cyan-300'
+ | 'cyan-400'
+ | 'cyan-500'
+ | 'cyan-600'
+ | 'cyan-700'
+ | 'cyan-800'
+ | 'cyan-900'
+ | 'cyan-950'
+ | 'sky-50'
+ | 'sky-100'
+ | 'sky-200'
+ | 'sky-300'
+ | 'sky-400'
+ | 'sky-500'
+ | 'sky-600'
+ | 'sky-700'
+ | 'sky-800'
+ | 'sky-900'
+ | 'sky-950'
+ | 'blue-50'
+ | 'blue-100'
+ | 'blue-200'
+ | 'blue-300'
+ | 'blue-400'
+ | 'blue-500'
+ | 'blue-600'
+ | 'blue-700'
+ | 'blue-800'
+ | 'blue-900'
+ | 'blue-950'
+ | 'indigo-50'
+ | 'indigo-100'
+ | 'indigo-200'
+ | 'indigo-300'
+ | 'indigo-400'
+ | 'indigo-500'
+ | 'indigo-600'
+ | 'indigo-700'
+ | 'indigo-800'
+ | 'indigo-900'
+ | 'indigo-950'
+ | 'violet-50'
+ | 'violet-100'
+ | 'violet-200'
+ | 'violet-300'
+ | 'violet-400'
+ | 'violet-500'
+ | 'violet-600'
+ | 'violet-700'
+ | 'violet-800'
+ | 'violet-900'
+ | 'violet-950'
+ | 'purple-50'
+ | 'purple-100'
+ | 'purple-200'
+ | 'purple-300'
+ | 'purple-400'
+ | 'purple-500'
+ | 'purple-600'
+ | 'purple-700'
+ | 'purple-800'
+ | 'purple-900'
+ | 'purple-950'
+ | 'fuchsia-50'
+ | 'fuchsia-100'
+ | 'fuchsia-200'
+ | 'fuchsia-300'
+ | 'fuchsia-400'
+ | 'fuchsia-500'
+ | 'fuchsia-600'
+ | 'fuchsia-700'
+ | 'fuchsia-800'
+ | 'fuchsia-900'
+ | 'fuchsia-950'
+ | 'pink-50'
+ | 'pink-100'
+ | 'pink-200'
+ | 'pink-300'
+ | 'pink-400'
+ | 'pink-500'
+ | 'pink-600'
+ | 'pink-700'
+ | 'pink-800'
+ | 'pink-900'
+ | 'pink-950'
+ | 'rose-50'
+ | 'rose-100'
+ | 'rose-200'
+ | 'rose-300'
+ | 'rose-400'
+ | 'rose-500'
+ | 'rose-600'
+ | 'rose-700'
+ | 'rose-800'
+ | 'rose-900'
+ | 'rose-950'
+ | 'slate-50'
+ | 'slate-100'
+ | 'slate-200'
+ | 'slate-300'
+ | 'slate-400'
+ | 'slate-500'
+ | 'slate-600'
+ | 'slate-700'
+ | 'slate-800'
+ | 'slate-900'
+ | 'slate-950'
+ | 'gray-50'
+ | 'gray-100'
+ | 'gray-200'
+ | 'gray-300'
+ | 'gray-400'
+ | 'gray-500'
+ | 'gray-600'
+ | 'gray-700'
+ | 'gray-800'
+ | 'gray-900'
+ | 'gray-950'
+ | 'zinc-50'
+ | 'zinc-100'
+ | 'zinc-200'
+ | 'zinc-300'
+ | 'zinc-400'
+ | 'zinc-500'
+ | 'zinc-600'
+ | 'zinc-700'
+ | 'zinc-800'
+ | 'zinc-900'
+ | 'zinc-950'
+ | 'neutral-50'
+ | 'neutral-100'
+ | 'neutral-200'
+ | 'neutral-300'
+ | 'neutral-400'
+ | 'neutral-500'
+ | 'neutral-600'
+ | 'neutral-700'
+ | 'neutral-800'
+ | 'neutral-900'
+ | 'neutral-950'
+ | 'stone-50'
+ | 'stone-100'
+ | 'stone-200'
+ | 'stone-300'
+ | 'stone-400'
+ | 'stone-500'
+ | 'stone-600'
+ | 'stone-700'
+ | 'stone-800'
+ | 'stone-900'
+ | 'stone-950'
+ | 'black'
+ | 'white'
+ | 'fd-background'
+ | 'fd-foreground'
+ | 'fd-muted'
+ | 'fd-muted-foreground'
+ | 'fd-popover'
+ | 'fd-popover-foreground'
+ | 'fd-card'
+ | 'fd-card-foreground'
+ | 'fd-border'
+ | 'fd-primary'
+ | 'fd-primary-foreground'
+ | 'fd-secondary'
+ | 'fd-secondary-foreground'
+ | 'fd-accent'
+ | 'fd-accent-foreground'
+ | 'fd-ring'
+ | 'fd-overlay'
+ | 'fd-info'
+ | 'fd-warning'
+ | 'fd-error'
+ | 'fd-success'
+ | 'fd-diff-remove'
+ | 'fd-diff-remove-symbol'
+ | 'fd-diff-add'
+ | 'fd-diff-add-symbol'
+type BackgroundImageRef1 =
+ | '0'
+ | '30'
+ | '60'
+ | '90'
+ | '120'
+ | '150'
+ | '180'
+ | '210'
+ | '240'
+ | '270'
+ | '300'
+ | '330'
+type BackgroundImageRef2 = 'b' | 'bl' | 'br' | 'l' | 'r' | 't' | 'tl' | 'tr'
+type BackgroundImageRef3 = 'foreground'
+type BackgroundImageRef4 = 'foreground'
+type BackgroundImageRef5 = '1' | '2' | '3' | '4' | '5'
+type BackgroundImageRef6 = 'foreground'
+type BackgroundImageRef7 = 'foreground'
+type BackgroundImageRef8 = 'foreground'
+type BackgroundImageRef9 = 'foreground'
+type BackgroundImageRef10 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type BackgroundImageRef11 = 'foreground'
+type BackgroundImageRef12 = 'foreground'
+type BackgroundImageRef13 = '1' | '2' | '3' | '4' | '5'
+type BackgroundImageRef14 = 'foreground'
+type BackgroundImageRef15 = 'foreground'
+type BackgroundImageRef16 = 'foreground'
+type BackgroundImageRef17 = 'foreground'
+type BackgroundImageRef18 = 'foreground'
+type BackgroundImageRef19 = 'foreground'
+type BackgroundImageRef20 = '1' | '2' | '3' | '4' | '5'
+type BackgroundImageRef21 = 'foreground'
+type BackgroundImageRef22 = 'foreground'
+type BackgroundImageRef23 = 'foreground'
+type BackgroundImageRef24 = 'foreground'
+type BackgroundImageRef25 = 'conic' | 'none' | 'radial'
+type BackgroundImageRef26 =
+ | '0%'
+ | '5%'
+ | '10%'
+ | '15%'
+ | '20%'
+ | '25%'
+ | '30%'
+ | '35%'
+ | '40%'
+ | '45%'
+ | '50%'
+ | '55%'
+ | '60%'
+ | '65%'
+ | '70%'
+ | '75%'
+ | '80%'
+ | '85%'
+ | '90%'
+ | '95%'
+ | '100%'
+ | 'accent'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'current'
+ | 'destructive'
+ | 'foreground'
+ | 'inherit'
+ | 'input'
+ | 'muted'
+ | 'popover'
+ | 'primary'
+ | 'ring'
+ | 'secondary'
+ | 'sidebar'
+ | 'transparent'
+ | TailwindGlobalColor
+type BottomRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type GridColumnRef1 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '13'
+ | 'auto'
+type GridColumnRef2 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | 'full'
+type GridColumnRef3 = 'auto'
+type EndRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type TextIndentRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type InsetRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type LeftRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type MarginRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+ | 'auto'
+type MarginRef2 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'px'
+ | 'reverse'
+type MaskImageRef1 = 'foreground'
+type MaskImageRef2 = 'foreground'
+type MaskImageRef3 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef4 = 'foreground'
+type MaskImageRef5 = 'foreground'
+type MaskImageRef6 = 'foreground'
+type MaskImageRef7 = 'foreground'
+type MaskImageRef8 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type MaskImageRef9 = 'foreground'
+type MaskImageRef10 = 'foreground'
+type MaskImageRef11 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef12 = 'foreground'
+type MaskImageRef13 = 'foreground'
+type MaskImageRef14 = 'foreground'
+type MaskImageRef15 = 'foreground'
+type MaskImageRef16 = 'foreground'
+type MaskImageRef17 = 'foreground'
+type MaskImageRef18 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef19 = 'foreground'
+type MaskImageRef20 = 'foreground'
+type MaskImageRef21 = 'foreground'
+type MaskImageRef22 = 'foreground'
+type MaskImageRef23 = 'foreground'
+type MaskImageRef24 = 'foreground'
+type MaskImageRef25 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef26 = 'foreground'
+type MaskImageRef27 = 'foreground'
+type MaskImageRef28 = 'foreground'
+type MaskImageRef29 = 'foreground'
+type MaskImageRef30 = 'foreground'
+type MaskImageRef31 = 'foreground'
+type MaskImageRef32 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef33 = 'foreground'
+type MaskImageRef34 = 'foreground'
+type MaskImageRef35 = 'foreground'
+type MaskImageRef36 = 'foreground'
+type MaskImageRef37 = 'foreground'
+type MaskImageRef38 = 'foreground'
+type MaskImageRef39 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef40 = 'foreground'
+type MaskImageRef41 = 'foreground'
+type MaskImageRef42 = 'foreground'
+type MaskImageRef43 = 'foreground'
+type MaskImageRef44 = 'foreground'
+type MaskImageRef45 = 'foreground'
+type MaskImageRef46 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef47 = 'foreground'
+type MaskImageRef48 = 'foreground'
+type MaskImageRef49 = 'foreground'
+type MaskImageRef50 = 'foreground'
+type MaskImageRef51 = 'foreground'
+type MaskImageRef52 = 'foreground'
+type MaskImageRef53 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef54 = 'foreground'
+type MaskImageRef55 = 'foreground'
+type MaskImageRef56 = 'foreground'
+type MaskImageRef57 = 'foreground'
+type MaskImageRef58 = 'foreground'
+type MaskImageRef59 = 'foreground'
+type MaskImageRef60 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef61 = 'foreground'
+type MaskImageRef62 = 'foreground'
+type MaskImageRef63 = 'foreground'
+type MaskImageRef64 = 'foreground'
+type MaskImageRef65 = 'foreground'
+type MaskImageRef66 = 'foreground'
+type MaskImageRef67 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef68 = 'foreground'
+type MaskImageRef69 = 'foreground'
+type MaskImageRef70 = 'foreground'
+type MaskImageRef71 = 'foreground'
+type MaskImageRef72 = 'left' | 'right'
+type MaskImageRef73 = 'left' | 'right'
+type MaskImageRef74 = 'foreground'
+type MaskImageRef75 = 'foreground'
+type MaskImageRef76 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef77 = 'foreground'
+type MaskImageRef78 = 'foreground'
+type MaskImageRef79 = 'foreground'
+type MaskImageRef80 = 'foreground'
+type MaskImageRef81 = 'foreground'
+type MaskImageRef82 = 'foreground'
+type MaskImageRef83 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef84 = 'foreground'
+type MaskImageRef85 = 'foreground'
+type MaskImageRef86 = 'foreground'
+type MaskImageRef87 = 'foreground'
+type MaskImageRef88 = 'foreground'
+type MaskImageRef89 = 'foreground'
+type MaskImageRef90 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef91 = 'foreground'
+type MaskImageRef92 = 'foreground'
+type MaskImageRef93 = 'foreground'
+type MaskImageRef94 = 'foreground'
+type MaskImageRef95 = 'foreground'
+type MaskImageRef96 = 'foreground'
+type MaskImageRef97 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef98 = 'foreground'
+type MaskImageRef99 = 'foreground'
+type MaskImageRef100 = 'foreground'
+type MaskImageRef101 = 'foreground'
+type MaskImageRef102 = 'foreground'
+type MaskImageRef103 = 'foreground'
+type MaskImageRef104 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef105 = 'foreground'
+type MaskImageRef106 = 'foreground'
+type MaskImageRef107 = 'foreground'
+type MaskImageRef108 = 'foreground'
+type MaskImageRef109 = 'foreground'
+type MaskImageRef110 = 'foreground'
+type MaskImageRef111 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef112 = 'foreground'
+type MaskImageRef113 = 'foreground'
+type MaskImageRef114 = 'foreground'
+type MaskImageRef115 = 'foreground'
+type MaskImageRef116 = 'foreground'
+type MaskImageRef117 = 'foreground'
+type MaskImageRef118 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef119 = 'foreground'
+type MaskImageRef120 = 'foreground'
+type MaskImageRef121 = 'foreground'
+type MaskImageRef122 = 'foreground'
+type MaskImageRef123 = 'foreground'
+type MaskImageRef124 = 'foreground'
+type MaskImageRef125 = '1' | '2' | '3' | '4' | '5'
+type MaskImageRef126 = 'foreground'
+type MaskImageRef127 = 'foreground'
+type MaskImageRef128 = 'foreground'
+type MaskImageRef129 = 'foreground'
+type MaskImageRef130 = 'bottom' | 'center' | 'left' | 'right' | 'top'
+type MaskImageRef131 =
+ | '0'
+ | '0%'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '5%'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '10%'
+ | '11'
+ | '12'
+ | '14'
+ | '15%'
+ | '16'
+ | '20'
+ | '20%'
+ | '24'
+ | '25%'
+ | '28'
+ | '30%'
+ | '32'
+ | '35%'
+ | '36'
+ | '40'
+ | '40%'
+ | '44'
+ | '45%'
+ | '48'
+ | '50%'
+ | '52'
+ | '55%'
+ | '56'
+ | '60'
+ | '60%'
+ | '64'
+ | '65%'
+ | '70%'
+ | '72'
+ | '75%'
+ | '80'
+ | '80%'
+ | '85%'
+ | '90%'
+ | '95%'
+ | '96'
+ | '100%'
+ | 'accent'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'current'
+ | 'destructive'
+ | 'foreground'
+ | 'inherit'
+ | 'input'
+ | 'muted'
+ | 'popover'
+ | 'primary'
+ | 'ring'
+ | 'secondary'
+ | 'sidebar'
+ | 'transparent'
+ | TailwindGlobalColor
+type MaskImageRef132 =
+ | 'closest-corner'
+ | 'closest-side'
+ | 'farthest-corner'
+ | 'farthest-side'
+type MaskImageRef133 = '0' | '1' | '2' | '3' | '6' | '12' | '45' | '90' | '180'
+type MaskImageRef134 = 'circle' | 'ellipse' | 'none'
+type OrderRef1 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | 'first'
+ | 'last'
+ | 'none'
+type OutlineOffsetRef1 = '0' | '1' | '2' | '4' | '8'
+type RightRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type RotateRef1 = '0' | '1' | '2' | '3' | '6' | '12' | '45' | '90' | '180'
+type GridRowRef1 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '13'
+ | 'auto'
+type GridRowRef2 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | 'full'
+type GridRowRef3 = 'auto'
+type ScaleRef1 =
+ | '0'
+ | '50'
+ | '75'
+ | '90'
+ | '95'
+ | '100'
+ | '105'
+ | '110'
+ | '125'
+ | '150'
+ | '200'
+type ScrollMarginRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type SkewRef1 = '0' | '1' | '2' | '3' | '6' | '12'
+type CustomRef1 = 'x-fd-container' | 'y-fd-container'
+type CustomRef2 = 'in' | 'out'
+type CustomRef3 =
+ | '0'
+ | '5'
+ | '10'
+ | '15'
+ | '20'
+ | '25'
+ | '30'
+ | '35'
+ | '40'
+ | '45'
+ | '50'
+ | '55'
+ | '60'
+ | '65'
+ | '70'
+ | '75'
+ | '80'
+ | '85'
+ | '90'
+ | '95'
+ | '100'
+ | 'translate-full'
+type CustomRef4 = '2xl' | '3xl' | 'lg' | 'md' | 'sm' | 'xl' | 'xs'
+type CustomRef5 = 'in' | 'out'
+type CustomRef6 = 'in' | 'out'
+type CustomRef7 = 'in' | 'out'
+type CustomRef8 = 'bottom' | 'end' | 'left' | 'right' | 'start' | 'top'
+type StartRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type TopRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'full'
+ | 'px'
+ | 'auto'
+type LetterSpacingRef1 =
+ | 'normal'
+ | 'tight'
+ | 'tighter'
+ | 'wide'
+ | 'wider'
+ | 'widest'
+type TranslateRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type TextUnderlineOffsetRef1 = '0' | '1' | '2' | '4' | '8' | 'auto'
+type ZIndexRef1 = '0' | '10' | '20' | '30' | '40' | '50' | 'auto'
+type AccentColorRef1 = 'foreground'
+type AccentColorRef2 = '1' | '2' | '3' | '4' | '5'
+type AccentColorRef3 = 'foreground'
+type AccentColorRef4 = 'foreground'
+type AccentColorRef5 = 'foreground'
+type AccentColorRef6 = 'foreground'
+type AccentColorRef7 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type AccentColorRef8 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'auto'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'current'
+ | 'destructive'
+ | 'foreground'
+ | 'inherit'
+ | 'input'
+ | 'muted'
+ | 'popover'
+ | 'primary'
+ | 'ring'
+ | 'secondary'
+ | 'sidebar'
+ | 'transparent'
+ | TailwindGlobalColor
+type VerticalAlignRef1 =
+ | 'baseline'
+ | 'bottom'
+ | 'middle'
+ | 'sub'
+ | 'super'
+ | 'text-bottom'
+ | 'text-top'
+ | 'top'
+type AnimationRef1 = 'down' | 'up'
+type AnimationRef2 = 'down' | 'up'
+type AnimationRef3 =
+ | 'bounce'
+ | 'caret-blink'
+ | 'fd-accordion-down'
+ | 'fd-accordion-up'
+ | 'fd-collapsible-down'
+ | 'fd-collapsible-up'
+ | 'fd-dialog-in'
+ | 'fd-dialog-out'
+ | 'fd-enterFromLeft'
+ | 'fd-enterFromRight'
+ | 'fd-exitToLeft'
+ | 'fd-exitToRight'
+ | 'fd-fade-in'
+ | 'fd-fade-out'
+ | 'fd-nav-menu-in'
+ | 'fd-nav-menu-out'
+ | 'fd-popover-in'
+ | 'fd-popover-out'
+ | 'fd-sidebar-in'
+ | 'fd-sidebar-out'
+ | 'in'
+ | 'none'
+ | 'out'
+ | 'ping'
+ | 'pulse'
+ | 'spin'
+type AspectRatioRef1 = 'auto' | 'square' | 'video'
+type GridAutoColumnsRef1 = 'auto' | 'fr' | 'max' | 'min'
+type GridAutoRowsRef1 = 'auto' | 'fr' | 'max' | 'min'
+type BackdropFilterRef1 =
+ | '2xl'
+ | '3xl'
+ | 'lg'
+ | 'md'
+ | 'none'
+ | 'sm'
+ | 'xl'
+ | 'xs'
+type BackdropFilterRef2 = '0' | '50' | '75' | '100' | '125' | '150' | '200'
+type BackdropFilterRef3 = '0' | '25' | '50' | '75' | '100'
+type BackdropFilterRef4 = '0' | '15' | '30' | '60' | '90' | '180'
+type BackdropFilterRef5 = '0' | '25' | '50' | '75' | '100'
+type BackdropFilterRef6 =
+ | '0'
+ | '5'
+ | '10'
+ | '15'
+ | '20'
+ | '25'
+ | '30'
+ | '35'
+ | '40'
+ | '45'
+ | '50'
+ | '55'
+ | '60'
+ | '65'
+ | '70'
+ | '75'
+ | '80'
+ | '85'
+ | '90'
+ | '95'
+ | '100'
+type BackdropFilterRef7 = '0' | '50' | '100' | '150' | '200'
+type BackdropFilterRef8 = '0' | '50' | '100'
+type BackdropFilterRef9 = 'grayscale' | 'invert' | 'sepia'
+type FlexBasisRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '2xl'
+ | '2xs'
+ | '3'
+ | '3.5'
+ | '3xl'
+ | '3xs'
+ | '4'
+ | '4xl'
+ | '5'
+ | '5xl'
+ | '6'
+ | '6xl'
+ | '7'
+ | '7xl'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'auto'
+ | 'fd-container'
+ | 'full'
+ | 'lg'
+ | 'md'
+ | 'px'
+ | 'sm'
+ | 'xl'
+ | 'xs'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+type BackgroundColorRef1 = 'foreground'
+type BackgroundColorRef2 = 'foreground'
+type BackgroundColorRef3 = '1' | '2' | '3' | '4' | '5'
+type BackgroundColorRef4 = 'foreground'
+type BackgroundColorRef5 = 'foreground'
+type BackgroundColorRef6 = 'foreground'
+type BackgroundColorRef7 = 'foreground'
+type BackgroundColorRef8 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type BackgroundColorRef9 =
+ | 'accent'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'current'
+ | 'destructive'
+ | 'foreground'
+ | 'inherit'
+ | 'input'
+ | 'left-bottom'
+ | 'left-top'
+ | 'muted'
+ | 'popover'
+ | 'primary'
+ | 'right-bottom'
+ | 'right-top'
+ | 'ring'
+ | 'secondary'
+ | 'sidebar'
+ | 'transparent'
+ | TailwindGlobalColor
+type BackgroundSizeRef1 = 'auto' | 'contain' | 'cover'
+type BackgroundBlendModeRef1 =
+ | 'color'
+ | 'darken'
+ | 'difference'
+ | 'exclusion'
+ | 'hard-light'
+ | 'hue'
+ | 'lighten'
+ | 'luminosity'
+ | 'multiply'
+ | 'normal'
+ | 'overlay'
+ | 'saturation'
+ | 'screen'
+ | 'soft-light'
+type BackgroundBlendModeRef2 = 'burn' | 'dodge'
+type BackgroundPositionRef1 = 'left' | 'right'
+type BackgroundPositionRef2 = 'left' | 'right'
+type BackgroundPositionRef3 = 'bottom' | 'center' | 'left' | 'right' | 'top'
+type BackgroundClipRef1 = 'border' | 'content' | 'padding' | 'text'
+type BackgroundAttachmentRef1 = 'fixed' | 'local' | 'scroll'
+type BackgroundRepeatRef1 = 'round' | 'space' | 'x' | 'y'
+type BackgroundRepeatRef2 = 'no-repeat' | 'repeat'
+type BackgroundOriginRef1 = 'border' | 'content' | 'padding'
+type DisplayRef1 = 'block' | 'flex' | 'grid' | 'table'
+type DisplayRef2 =
+ | 'caption'
+ | 'cell'
+ | 'column'
+ | 'column-group'
+ | 'footer-group'
+ | 'header-group'
+ | 'row'
+ | 'row-group'
+type FilterRef1 = '2xl' | '3xl' | 'lg' | 'md' | 'none' | 'sm' | 'xl' | 'xs'
+type FilterRef2 = '0' | '50' | '75' | '100' | '125' | '150' | '200'
+type FilterRef3 = 'foreground'
+type FilterRef4 = 'foreground'
+type FilterRef5 = '1' | '2' | '3' | '4' | '5'
+type FilterRef6 = 'foreground'
+type FilterRef7 = 'foreground'
+type FilterRef8 = 'foreground'
+type FilterRef9 = 'foreground'
+type FilterRef10 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type FilterRef11 = '0' | '25' | '50' | '75' | '100'
+type FilterRef12 = '0' | '15' | '30' | '60' | '90' | '180'
+type FilterRef13 = '0' | '25' | '50' | '75' | '100'
+type FilterRef14 = '0' | '50' | '100' | '150' | '200'
+type FilterRef15 = '0' | '50' | '100'
+type FilterRef16 =
+ | '2xl'
+ | 'accent'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'current'
+ | 'destructive'
+ | 'foreground'
+ | 'inherit'
+ | 'input'
+ | 'lg'
+ | 'md'
+ | 'muted'
+ | 'none'
+ | 'popover'
+ | 'primary'
+ | 'ring'
+ | 'secondary'
+ | 'sidebar'
+ | 'sm'
+ | 'transparent'
+ | 'xl'
+ | 'xs'
+ | TailwindGlobalColor
+type BorderWidthRef1 = 'foreground'
+type BorderWidthRef2 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type BorderWidthRef3 = 'foreground'
+type BorderWidthRef4 = '1' | '2' | '3' | '4' | '5'
+type BorderWidthRef5 = 'foreground'
+type BorderWidthRef6 = 'foreground'
+type BorderWidthRef7 = 'foreground'
+type BorderWidthRef8 = 'foreground'
+type BorderWidthRef9 = '0' | '2' | '4' | '8' | 'reverse'
+type BorderWidthRef10 = '0' | '2' | '4' | '8' | 'reverse'
+type BorderWidthRef11 =
+ | '0'
+ | '2'
+ | '4'
+ | '8'
+ | 'accent'
+ | 'b'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'destructive'
+ | 'e'
+ | 'foreground'
+ | 'input'
+ | 'l'
+ | 'muted'
+ | 'popover'
+ | 'primary'
+ | 'r'
+ | 'ring'
+ | 's'
+ | 'secondary'
+ | 'sidebar'
+ | 't'
+ | 'x'
+ | 'y'
+type BorderWidthRef12 = 'x' | 'y'
+type BorderColorRef1 =
+ | 'current'
+ | 'inherit'
+ | 'transparent'
+ | TailwindGlobalColor
+type BorderColorRef2 = 'foreground'
+type BorderColorRef3 = 'foreground'
+type BorderColorRef4 = '1' | '2' | '3' | '4' | '5'
+type BorderColorRef5 = 'foreground'
+type BorderColorRef6 = 'foreground'
+type BorderColorRef7 = 'foreground'
+type BorderColorRef8 = 'foreground'
+type BorderColorRef9 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type BorderStyleRef1 =
+ | 'dashed'
+ | 'dotted'
+ | 'double'
+ | 'hidden'
+ | 'none'
+ | 'solid'
+type BorderStyleRef2 = 'dashed' | 'dotted' | 'double' | 'none' | 'solid'
+type BorderSpacingRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type BreakAfterRef1 =
+ | 'all'
+ | 'auto'
+ | 'avoid'
+ | 'avoid-page'
+ | 'column'
+ | 'left'
+ | 'page'
+ | 'right'
+type WordBreakRef1 = 'all' | 'keep' | 'normal'
+type BreakBeforeRef1 =
+ | 'all'
+ | 'auto'
+ | 'avoid'
+ | 'avoid-page'
+ | 'column'
+ | 'left'
+ | 'page'
+ | 'right'
+type BreakInsideRef1 = 'auto' | 'avoid'
+type BreakInsideRef2 = 'column' | 'page'
+type OverflowWrapRef1 = 'anywhere' | 'break-word' | 'normal'
+type CaretColorRef1 = 'foreground'
+type CaretColorRef2 = 'foreground'
+type CaretColorRef3 = '1' | '2' | '3' | '4' | '5'
+type CaretColorRef4 = 'foreground'
+type CaretColorRef5 = 'foreground'
+type CaretColorRef6 = 'foreground'
+type CaretColorRef7 = 'foreground'
+type CaretColorRef8 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type CaretColorRef9 =
+ | 'accent'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'current'
+ | 'destructive'
+ | 'foreground'
+ | 'inherit'
+ | 'input'
+ | 'muted'
+ | 'popover'
+ | 'primary'
+ | 'ring'
+ | 'secondary'
+ | 'sidebar'
+ | 'transparent'
+ | TailwindGlobalColor
+type ClearRef1 = 'both' | 'end' | 'left' | 'none' | 'right' | 'start'
+type ColumnsRef1 =
+ | '1'
+ | '2'
+ | '2xl'
+ | '2xs'
+ | '3'
+ | '3xl'
+ | '3xs'
+ | '4'
+ | '4xl'
+ | '5'
+ | '5xl'
+ | '6'
+ | '6xl'
+ | '7'
+ | '7xl'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | 'auto'
+ | 'lg'
+ | 'md'
+ | 'sm'
+ | 'xl'
+ | 'xs'
+type ContainRef1 =
+ | 'content'
+ | 'inline-size'
+ | 'layout'
+ | 'none'
+ | 'paint'
+ | 'size'
+ | 'strict'
+ | 'style'
+type MaxWidthRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '2xl'
+ | '2xs'
+ | '3'
+ | '3.5'
+ | '3xl'
+ | '3xs'
+ | '4'
+ | '4xl'
+ | '5'
+ | '5xl'
+ | '6'
+ | '6xl'
+ | '7'
+ | '7xl'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'dvh'
+ | 'dvw'
+ | 'fd-container'
+ | 'fit'
+ | 'full'
+ | 'lg'
+ | 'lvh'
+ | 'lvw'
+ | 'max'
+ | 'md'
+ | 'min'
+ | 'none'
+ | 'prose'
+ | 'px'
+ | 'screen'
+ | 'sm'
+ | 'svh'
+ | 'svw'
+ | 'xl'
+ | 'xs'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+type AlignContentRef1 =
+ | 'around'
+ | 'baseline'
+ | 'between'
+ | 'center'
+ | 'end'
+ | 'evenly'
+ | 'normal'
+ | 'start'
+ | 'stretch'
+type ContentRef1 = 'center-safe' | 'end-safe' | 'none'
+type CursorRef1 = 'resize'
+type CursorRef2 = 'resize'
+type CursorRef3 = 'resize'
+type CursorRef4 = 'drop'
+type CursorRef5 = 'resize'
+type CursorRef6 = 'resize'
+type CursorRef7 =
+ | 'alias'
+ | 'all-scroll'
+ | 'auto'
+ | 'cell'
+ | 'col-resize'
+ | 'context-menu'
+ | 'copy'
+ | 'crosshair'
+ | 'default'
+ | 'ew-resize'
+ | 'grab'
+ | 'grabbing'
+ | 'help'
+ | 'move'
+ | 'nesw-resize'
+ | 'none'
+ | 'not-allowed'
+ | 'ns-resize'
+ | 'nw-resize'
+ | 'nwse-resize'
+ | 'pointer'
+ | 'progress'
+ | 'row-resize'
+ | 'se-resize'
+ | 'sw-resize'
+ | 'text'
+ | 'vertical-text'
+ | 'wait'
+ | 'zoom-in'
+ | 'zoom-out'
+type TextDecorationThicknessRef1 = 'foreground'
+type TextDecorationThicknessRef2 = '1' | '2' | '3' | '4' | '5'
+type TextDecorationThicknessRef3 = 'foreground'
+type TextDecorationThicknessRef4 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type TextDecorationThicknessRef5 =
+ | '0'
+ | '1'
+ | '2'
+ | 'accent'
+ | 'auto'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'card-foreground'
+ | 'clone'
+ | 'destructive'
+ | 'foreground'
+ | 'from-font'
+ | 'input'
+ | 'muted'
+ | 'muted-foreground'
+ | 'popover'
+ | 'popover-foreground'
+ | 'primary'
+ | 'ring'
+ | 'secondary'
+ | 'secondary-foreground'
+ | 'sidebar'
+ | 'slice'
+type TextDecorationColorRef1 =
+ | 'current'
+ | 'inherit'
+ | 'transparent'
+ | TailwindGlobalColor
+type TextDecorationStyleRef1 = 'dashed' | 'dotted' | 'double' | 'solid' | 'wavy'
+type TransitionDelayRef1 =
+ | '0'
+ | '75'
+ | '100'
+ | '150'
+ | '200'
+ | '300'
+ | '500'
+ | '700'
+ | '1000'
+ | 'initial'
+type AnimationDirectionRef1 =
+ | 'alternate'
+ | 'alternate-reverse'
+ | 'initial'
+ | 'normal'
+ | 'reverse'
+type TransitionDurationRef1 =
+ | '75'
+ | '100'
+ | '150'
+ | '200'
+ | '300'
+ | '500'
+ | '700'
+ | '1000'
+ | 'initial'
+type TransitionTimingFunctionRef1 = 'out'
+type TransitionTimingFunctionRef2 = 'in' | 'initial' | 'linear' | 'out'
+type FillRef1 = 'foreground'
+type FillRef2 = 'foreground'
+type FillRef3 = '1' | '2' | '3' | '4' | '5'
+type FillRef4 = 'backwards' | 'both' | 'forwards' | 'initial' | 'none'
+type FillRef5 = 'foreground'
+type FillRef6 = 'foreground'
+type FillRef7 = 'foreground'
+type FillRef8 = 'foreground'
+type FillRef9 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type FillRef10 =
+ | 'accent'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'current'
+ | 'destructive'
+ | 'foreground'
+ | 'inherit'
+ | 'input'
+ | 'muted'
+ | 'none'
+ | 'popover'
+ | 'primary'
+ | 'ring'
+ | 'secondary'
+ | 'sidebar'
+ | 'transparent'
+ | TailwindGlobalColor
+type FlexRef1 =
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'auto'
+ | 'initial'
+ | 'none'
+type FlexDirectionRef1 = 'col' | 'col-reverse' | 'row' | 'row-reverse'
+type FlexWrapRef1 = 'reverse'
+type FlexWrapRef2 = 'nowrap' | 'wrap'
+type FloatRef1 = 'end' | 'left' | 'none' | 'right' | 'start'
+type FontWeightRef1 =
+ | 'black'
+ | 'bold'
+ | 'extrabold'
+ | 'extralight'
+ | 'light'
+ | 'medium'
+ | 'normal'
+ | 'semibold'
+ | 'thin'
+type FontFamilyRef1 = 'mono' | 'sans' | 'serif'
+type FontStretchRef1 =
+ | '50%'
+ | '75%'
+ | '90%'
+ | '95%'
+ | '100%'
+ | '105%'
+ | '110%'
+ | '125%'
+ | '150%'
+ | '200%'
+ | 'condensed'
+ | 'expanded'
+ | 'extra-condensed'
+ | 'extra-expanded'
+ | 'normal'
+ | 'semi-condensed'
+ | 'semi-expanded'
+ | 'ultra-condensed'
+ | 'ultra-expanded'
+type GapRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type GridTemplateColumnsRef1 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | 'none'
+ | 'subgrid'
+type GridAutoFlowRef1 = 'col' | 'col-dense' | 'dense' | 'row' | 'row-dense'
+type GridTemplateRowsRef1 =
+ | '1'
+ | '2'
+ | '3'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | 'none'
+ | 'subgrid'
+type HeightRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'auto'
+ | 'dvh'
+ | 'dvw'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'fit'
+ | 'full'
+ | 'lvh'
+ | 'lvw'
+ | 'max'
+ | 'min'
+ | 'px'
+ | 'svh'
+ | 'svw'
+type HyphensRef1 = 'auto' | 'manual' | 'none'
+type BoxShadowRef1 =
+ | 'ring'
+ | 'ring-0'
+ | 'ring-1'
+ | 'ring-2'
+ | 'ring-4'
+ | 'ring-8'
+ | 'ring-accent'
+ | 'ring-accent-foreground'
+ | 'ring-amber-50'
+ | 'ring-amber-100'
+ | 'ring-amber-200'
+ | 'ring-amber-300'
+ | 'ring-amber-400'
+ | 'ring-amber-500'
+ | 'ring-amber-600'
+ | 'ring-amber-700'
+ | 'ring-amber-800'
+ | 'ring-amber-900'
+ | 'ring-amber-950'
+ | 'ring-background'
+ | 'ring-black'
+ | 'ring-blue-50'
+ | 'ring-blue-100'
+ | 'ring-blue-200'
+ | 'ring-blue-300'
+ | 'ring-blue-400'
+ | 'ring-blue-500'
+ | 'ring-blue-600'
+ | 'ring-blue-700'
+ | 'ring-blue-800'
+ | 'ring-blue-900'
+ | 'ring-blue-950'
+ | 'ring-border'
+ | 'ring-card'
+ | 'ring-card-foreground'
+ | 'ring-chart-1'
+ | 'ring-chart-2'
+ | 'ring-chart-3'
+ | 'ring-chart-4'
+ | 'ring-chart-5'
+ | 'ring-current'
+ | 'ring-cyan-50'
+ | 'ring-cyan-100'
+ | 'ring-cyan-200'
+ | 'ring-cyan-300'
+ | 'ring-cyan-400'
+ | 'ring-cyan-500'
+ | 'ring-cyan-600'
+ | 'ring-cyan-700'
+ | 'ring-cyan-800'
+ | 'ring-cyan-900'
+ | 'ring-cyan-950'
+ | 'ring-destructive'
+ | 'ring-emerald-50'
+ | 'ring-emerald-100'
+ | 'ring-emerald-200'
+ | 'ring-emerald-300'
+ | 'ring-emerald-400'
+ | 'ring-emerald-500'
+ | 'ring-emerald-600'
+ | 'ring-emerald-700'
+ | 'ring-emerald-800'
+ | 'ring-emerald-900'
+ | 'ring-emerald-950'
+ | 'ring-fd-accent'
+ | 'ring-fd-accent-foreground'
+ | 'ring-fd-background'
+ | 'ring-fd-border'
+ | 'ring-fd-card'
+ | 'ring-fd-card-foreground'
+ | 'ring-fd-diff-add'
+ | 'ring-fd-diff-add-symbol'
+ | 'ring-fd-diff-remove'
+ | 'ring-fd-diff-remove-symbol'
+ | 'ring-fd-error'
+ | 'ring-fd-foreground'
+ | 'ring-fd-info'
+ | 'ring-fd-muted'
+ | 'ring-fd-muted-foreground'
+ | 'ring-fd-overlay'
+ | 'ring-fd-popover'
+ | 'ring-fd-popover-foreground'
+ | 'ring-fd-primary'
+ | 'ring-fd-primary-foreground'
+ | 'ring-fd-ring'
+ | 'ring-fd-secondary'
+ | 'ring-fd-secondary-foreground'
+ | 'ring-fd-success'
+ | 'ring-fd-warning'
+ | 'ring-foreground'
+ | 'ring-fuchsia-50'
+ | 'ring-fuchsia-100'
+ | 'ring-fuchsia-200'
+ | 'ring-fuchsia-300'
+ | 'ring-fuchsia-400'
+ | 'ring-fuchsia-500'
+ | 'ring-fuchsia-600'
+ | 'ring-fuchsia-700'
+ | 'ring-fuchsia-800'
+ | 'ring-fuchsia-900'
+ | 'ring-fuchsia-950'
+ | 'ring-gray-50'
+ | 'ring-gray-100'
+ | 'ring-gray-200'
+ | 'ring-gray-300'
+ | 'ring-gray-400'
+ | 'ring-gray-500'
+ | 'ring-gray-600'
+ | 'ring-gray-700'
+ | 'ring-gray-800'
+ | 'ring-gray-900'
+ | 'ring-gray-950'
+ | 'ring-green-50'
+ | 'ring-green-100'
+ | 'ring-green-200'
+ | 'ring-green-300'
+ | 'ring-green-400'
+ | 'ring-green-500'
+ | 'ring-green-600'
+ | 'ring-green-700'
+ | 'ring-green-800'
+ | 'ring-green-900'
+ | 'ring-green-950'
+ | 'ring-indigo-50'
+ | 'ring-indigo-100'
+ | 'ring-indigo-200'
+ | 'ring-indigo-300'
+ | 'ring-indigo-400'
+ | 'ring-indigo-500'
+ | 'ring-indigo-600'
+ | 'ring-indigo-700'
+ | 'ring-indigo-800'
+ | 'ring-indigo-900'
+ | 'ring-indigo-950'
+ | 'ring-inherit'
+ | 'ring-input'
+ | 'ring-lime-50'
+ | 'ring-lime-100'
+ | 'ring-lime-200'
+ | 'ring-lime-300'
+ | 'ring-lime-400'
+ | 'ring-lime-500'
+ | 'ring-lime-600'
+ | 'ring-lime-700'
+ | 'ring-lime-800'
+ | 'ring-lime-900'
+ | 'ring-lime-950'
+ | 'ring-muted'
+ | 'ring-muted-foreground'
+ | 'ring-neutral-50'
+ | 'ring-neutral-100'
+ | 'ring-neutral-200'
+ | 'ring-neutral-300'
+ | 'ring-neutral-400'
+ | 'ring-neutral-500'
+ | 'ring-neutral-600'
+ | 'ring-neutral-700'
+ | 'ring-neutral-800'
+ | 'ring-neutral-900'
+ | 'ring-neutral-950'
+ | 'ring-orange-50'
+ | 'ring-orange-100'
+ | 'ring-orange-200'
+ | 'ring-orange-300'
+ | 'ring-orange-400'
+ | 'ring-orange-500'
+ | 'ring-orange-600'
+ | 'ring-orange-700'
+ | 'ring-orange-800'
+ | 'ring-orange-900'
+ | 'ring-orange-950'
+ | 'ring-pink-50'
+ | 'ring-pink-100'
+ | 'ring-pink-200'
+ | 'ring-pink-300'
+ | 'ring-pink-400'
+ | 'ring-pink-500'
+ | 'ring-pink-600'
+ | 'ring-pink-700'
+ | 'ring-pink-800'
+ | 'ring-pink-900'
+ | 'ring-pink-950'
+ | 'ring-popover'
+ | 'ring-popover-foreground'
+ | 'ring-primary'
+ | 'ring-primary-foreground'
+ | 'ring-purple-50'
+ | 'ring-purple-100'
+ | 'ring-purple-200'
+ | 'ring-purple-300'
+ | 'ring-purple-400'
+ | 'ring-purple-500'
+ | 'ring-purple-600'
+ | 'ring-purple-700'
+ | 'ring-purple-800'
+ | 'ring-purple-900'
+ | 'ring-purple-950'
+ | 'ring-red-50'
+ | 'ring-red-100'
+ | 'ring-red-200'
+ | 'ring-red-300'
+ | 'ring-red-400'
+ | 'ring-red-500'
+ | 'ring-red-600'
+ | 'ring-red-700'
+ | 'ring-red-800'
+ | 'ring-red-900'
+ | 'ring-red-950'
+ | 'ring-ring'
+ | 'ring-rose-50'
+ | 'ring-rose-100'
+ | 'ring-rose-200'
+ | 'ring-rose-300'
+ | 'ring-rose-400'
+ | 'ring-rose-500'
+ | 'ring-rose-600'
+ | 'ring-rose-700'
+ | 'ring-rose-800'
+ | 'ring-rose-900'
+ | 'ring-rose-950'
+ | 'ring-secondary'
+ | 'ring-secondary-foreground'
+ | 'ring-sidebar'
+ | 'ring-sidebar-accent'
+ | 'ring-sidebar-accent-foreground'
+ | 'ring-sidebar-border'
+ | 'ring-sidebar-foreground'
+ | 'ring-sidebar-primary'
+ | 'ring-sidebar-primary-foreground'
+ | 'ring-sidebar-ring'
+ | 'ring-sky-50'
+ | 'ring-sky-100'
+ | 'ring-sky-200'
+ | 'ring-sky-300'
+ | 'ring-sky-400'
+ | 'ring-sky-500'
+ | 'ring-sky-600'
+ | 'ring-sky-700'
+ | 'ring-sky-800'
+ | 'ring-sky-900'
+ | 'ring-sky-950'
+ | 'ring-slate-50'
+ | 'ring-slate-100'
+ | 'ring-slate-200'
+ | 'ring-slate-300'
+ | 'ring-slate-400'
+ | 'ring-slate-500'
+ | 'ring-slate-600'
+ | 'ring-slate-700'
+ | 'ring-slate-800'
+ | 'ring-slate-900'
+ | 'ring-slate-950'
+ | 'ring-stone-50'
+ | 'ring-stone-100'
+ | 'ring-stone-200'
+ | 'ring-stone-300'
+ | 'ring-stone-400'
+ | 'ring-stone-500'
+ | 'ring-stone-600'
+ | 'ring-stone-700'
+ | 'ring-stone-800'
+ | 'ring-stone-900'
+ | 'ring-stone-950'
+ | 'ring-teal-50'
+ | 'ring-teal-100'
+ | 'ring-teal-200'
+ | 'ring-teal-300'
+ | 'ring-teal-400'
+ | 'ring-teal-500'
+ | 'ring-teal-600'
+ | 'ring-teal-700'
+ | 'ring-teal-800'
+ | 'ring-teal-900'
+ | 'ring-teal-950'
+ | 'ring-transparent'
+ | 'ring-violet-50'
+ | 'ring-violet-100'
+ | 'ring-violet-200'
+ | 'ring-violet-300'
+ | 'ring-violet-400'
+ | 'ring-violet-500'
+ | 'ring-violet-600'
+ | 'ring-violet-700'
+ | 'ring-violet-800'
+ | 'ring-violet-900'
+ | 'ring-violet-950'
+ | 'ring-white'
+ | 'ring-yellow-50'
+ | 'ring-yellow-100'
+ | 'ring-yellow-200'
+ | 'ring-yellow-300'
+ | 'ring-yellow-400'
+ | 'ring-yellow-500'
+ | 'ring-yellow-600'
+ | 'ring-yellow-700'
+ | 'ring-yellow-800'
+ | 'ring-yellow-900'
+ | 'ring-yellow-950'
+ | 'ring-zinc-50'
+ | 'ring-zinc-100'
+ | 'ring-zinc-200'
+ | 'ring-zinc-300'
+ | 'ring-zinc-400'
+ | 'ring-zinc-500'
+ | 'ring-zinc-600'
+ | 'ring-zinc-700'
+ | 'ring-zinc-800'
+ | 'ring-zinc-900'
+ | 'ring-zinc-950'
+ | 'shadow-2xs'
+ | 'shadow-accent'
+ | 'shadow-accent-foreground'
+ | 'shadow-amber-50'
+ | 'shadow-amber-100'
+ | 'shadow-amber-200'
+ | 'shadow-amber-300'
+ | 'shadow-amber-400'
+ | 'shadow-amber-500'
+ | 'shadow-amber-600'
+ | 'shadow-amber-700'
+ | 'shadow-amber-800'
+ | 'shadow-amber-900'
+ | 'shadow-amber-950'
+ | 'shadow-background'
+ | 'shadow-black'
+ | 'shadow-blue-50'
+ | 'shadow-blue-100'
+ | 'shadow-blue-200'
+ | 'shadow-blue-300'
+ | 'shadow-blue-400'
+ | 'shadow-blue-500'
+ | 'shadow-blue-600'
+ | 'shadow-blue-700'
+ | 'shadow-blue-800'
+ | 'shadow-blue-900'
+ | 'shadow-blue-950'
+ | 'shadow-border'
+ | 'shadow-card'
+ | 'shadow-card-foreground'
+ | 'shadow-chart-1'
+ | 'shadow-chart-2'
+ | 'shadow-chart-3'
+ | 'shadow-chart-4'
+ | 'shadow-chart-5'
+ | 'shadow-current'
+ | 'shadow-cyan-50'
+ | 'shadow-cyan-100'
+ | 'shadow-cyan-200'
+ | 'shadow-cyan-300'
+ | 'shadow-cyan-400'
+ | 'shadow-cyan-500'
+ | 'shadow-cyan-600'
+ | 'shadow-cyan-700'
+ | 'shadow-cyan-800'
+ | 'shadow-cyan-900'
+ | 'shadow-cyan-950'
+ | 'shadow-destructive'
+ | 'shadow-emerald-50'
+ | 'shadow-emerald-100'
+ | 'shadow-emerald-200'
+ | 'shadow-emerald-300'
+ | 'shadow-emerald-400'
+ | 'shadow-emerald-500'
+ | 'shadow-emerald-600'
+ | 'shadow-emerald-700'
+ | 'shadow-emerald-800'
+ | 'shadow-emerald-900'
+ | 'shadow-emerald-950'
+ | 'shadow-fd-accent'
+ | 'shadow-fd-accent-foreground'
+ | 'shadow-fd-background'
+ | 'shadow-fd-border'
+ | 'shadow-fd-card'
+ | 'shadow-fd-card-foreground'
+ | 'shadow-fd-diff-add'
+ | 'shadow-fd-diff-add-symbol'
+ | 'shadow-fd-diff-remove'
+ | 'shadow-fd-diff-remove-symbol'
+ | 'shadow-fd-error'
+ | 'shadow-fd-foreground'
+ | 'shadow-fd-info'
+ | 'shadow-fd-muted'
+ | 'shadow-fd-muted-foreground'
+ | 'shadow-fd-overlay'
+ | 'shadow-fd-popover'
+ | 'shadow-fd-popover-foreground'
+ | 'shadow-fd-primary'
+ | 'shadow-fd-primary-foreground'
+ | 'shadow-fd-ring'
+ | 'shadow-fd-secondary'
+ | 'shadow-fd-secondary-foreground'
+ | 'shadow-fd-success'
+ | 'shadow-fd-warning'
+ | 'shadow-foreground'
+ | 'shadow-fuchsia-50'
+ | 'shadow-fuchsia-100'
+ | 'shadow-fuchsia-200'
+ | 'shadow-fuchsia-300'
+ | 'shadow-fuchsia-400'
+ | 'shadow-fuchsia-500'
+ | 'shadow-fuchsia-600'
+ | 'shadow-fuchsia-700'
+ | 'shadow-fuchsia-800'
+ | 'shadow-fuchsia-900'
+ | 'shadow-fuchsia-950'
+ | 'shadow-gray-50'
+ | 'shadow-gray-100'
+ | 'shadow-gray-200'
+ | 'shadow-gray-300'
+ | 'shadow-gray-400'
+ | 'shadow-gray-500'
+ | 'shadow-gray-600'
+ | 'shadow-gray-700'
+ | 'shadow-gray-800'
+ | 'shadow-gray-900'
+ | 'shadow-gray-950'
+ | 'shadow-green-50'
+ | 'shadow-green-100'
+ | 'shadow-green-200'
+ | 'shadow-green-300'
+ | 'shadow-green-400'
+ | 'shadow-green-500'
+ | 'shadow-green-600'
+ | 'shadow-green-700'
+ | 'shadow-green-800'
+ | 'shadow-green-900'
+ | 'shadow-green-950'
+ | 'shadow-indigo-50'
+ | 'shadow-indigo-100'
+ | 'shadow-indigo-200'
+ | 'shadow-indigo-300'
+ | 'shadow-indigo-400'
+ | 'shadow-indigo-500'
+ | 'shadow-indigo-600'
+ | 'shadow-indigo-700'
+ | 'shadow-indigo-800'
+ | 'shadow-indigo-900'
+ | 'shadow-indigo-950'
+ | 'shadow-inherit'
+ | 'shadow-initial'
+ | 'shadow-input'
+ | 'shadow-lime-50'
+ | 'shadow-lime-100'
+ | 'shadow-lime-200'
+ | 'shadow-lime-300'
+ | 'shadow-lime-400'
+ | 'shadow-lime-500'
+ | 'shadow-lime-600'
+ | 'shadow-lime-700'
+ | 'shadow-lime-800'
+ | 'shadow-lime-900'
+ | 'shadow-lime-950'
+ | 'shadow-muted'
+ | 'shadow-muted-foreground'
+ | 'shadow-neutral-50'
+ | 'shadow-neutral-100'
+ | 'shadow-neutral-200'
+ | 'shadow-neutral-300'
+ | 'shadow-neutral-400'
+ | 'shadow-neutral-500'
+ | 'shadow-neutral-600'
+ | 'shadow-neutral-700'
+ | 'shadow-neutral-800'
+ | 'shadow-neutral-900'
+ | 'shadow-neutral-950'
+ | 'shadow-none'
+ | 'shadow-orange-50'
+ | 'shadow-orange-100'
+ | 'shadow-orange-200'
+ | 'shadow-orange-300'
+ | 'shadow-orange-400'
+ | 'shadow-orange-500'
+ | 'shadow-orange-600'
+ | 'shadow-orange-700'
+ | 'shadow-orange-800'
+ | 'shadow-orange-900'
+ | 'shadow-orange-950'
+ | 'shadow-pink-50'
+ | 'shadow-pink-100'
+ | 'shadow-pink-200'
+ | 'shadow-pink-300'
+ | 'shadow-pink-400'
+ | 'shadow-pink-500'
+ | 'shadow-pink-600'
+ | 'shadow-pink-700'
+ | 'shadow-pink-800'
+ | 'shadow-pink-900'
+ | 'shadow-pink-950'
+ | 'shadow-popover'
+ | 'shadow-popover-foreground'
+ | 'shadow-primary'
+ | 'shadow-primary-foreground'
+ | 'shadow-purple-50'
+ | 'shadow-purple-100'
+ | 'shadow-purple-200'
+ | 'shadow-purple-300'
+ | 'shadow-purple-400'
+ | 'shadow-purple-500'
+ | 'shadow-purple-600'
+ | 'shadow-purple-700'
+ | 'shadow-purple-800'
+ | 'shadow-purple-900'
+ | 'shadow-purple-950'
+ | 'shadow-red-50'
+ | 'shadow-red-100'
+ | 'shadow-red-200'
+ | 'shadow-red-300'
+ | 'shadow-red-400'
+ | 'shadow-red-500'
+ | 'shadow-red-600'
+ | 'shadow-red-700'
+ | 'shadow-red-800'
+ | 'shadow-red-900'
+ | 'shadow-red-950'
+ | 'shadow-ring'
+ | 'shadow-rose-50'
+ | 'shadow-rose-100'
+ | 'shadow-rose-200'
+ | 'shadow-rose-300'
+ | 'shadow-rose-400'
+ | 'shadow-rose-500'
+ | 'shadow-rose-600'
+ | 'shadow-rose-700'
+ | 'shadow-rose-800'
+ | 'shadow-rose-900'
+ | 'shadow-rose-950'
+ | 'shadow-secondary'
+ | 'shadow-secondary-foreground'
+ | 'shadow-sidebar'
+ | 'shadow-sidebar-accent'
+ | 'shadow-sidebar-accent-foreground'
+ | 'shadow-sidebar-border'
+ | 'shadow-sidebar-foreground'
+ | 'shadow-sidebar-primary'
+ | 'shadow-sidebar-primary-foreground'
+ | 'shadow-sidebar-ring'
+ | 'shadow-sky-50'
+ | 'shadow-sky-100'
+ | 'shadow-sky-200'
+ | 'shadow-sky-300'
+ | 'shadow-sky-400'
+ | 'shadow-sky-500'
+ | 'shadow-sky-600'
+ | 'shadow-sky-700'
+ | 'shadow-sky-800'
+ | 'shadow-sky-900'
+ | 'shadow-sky-950'
+ | 'shadow-slate-50'
+ | 'shadow-slate-100'
+ | 'shadow-slate-200'
+ | 'shadow-slate-300'
+ | 'shadow-slate-400'
+ | 'shadow-slate-500'
+ | 'shadow-slate-600'
+ | 'shadow-slate-700'
+ | 'shadow-slate-800'
+ | 'shadow-slate-900'
+ | 'shadow-slate-950'
+ | 'shadow-sm'
+ | 'shadow-stone-50'
+ | 'shadow-stone-100'
+ | 'shadow-stone-200'
+ | 'shadow-stone-300'
+ | 'shadow-stone-400'
+ | 'shadow-stone-500'
+ | 'shadow-stone-600'
+ | 'shadow-stone-700'
+ | 'shadow-stone-800'
+ | 'shadow-stone-900'
+ | 'shadow-stone-950'
+ | 'shadow-teal-50'
+ | 'shadow-teal-100'
+ | 'shadow-teal-200'
+ | 'shadow-teal-300'
+ | 'shadow-teal-400'
+ | 'shadow-teal-500'
+ | 'shadow-teal-600'
+ | 'shadow-teal-700'
+ | 'shadow-teal-800'
+ | 'shadow-teal-900'
+ | 'shadow-teal-950'
+ | 'shadow-transparent'
+ | 'shadow-violet-50'
+ | 'shadow-violet-100'
+ | 'shadow-violet-200'
+ | 'shadow-violet-300'
+ | 'shadow-violet-400'
+ | 'shadow-violet-500'
+ | 'shadow-violet-600'
+ | 'shadow-violet-700'
+ | 'shadow-violet-800'
+ | 'shadow-violet-900'
+ | 'shadow-violet-950'
+ | 'shadow-white'
+ | 'shadow-xs'
+ | 'shadow-yellow-50'
+ | 'shadow-yellow-100'
+ | 'shadow-yellow-200'
+ | 'shadow-yellow-300'
+ | 'shadow-yellow-400'
+ | 'shadow-yellow-500'
+ | 'shadow-yellow-600'
+ | 'shadow-yellow-700'
+ | 'shadow-yellow-800'
+ | 'shadow-yellow-900'
+ | 'shadow-yellow-950'
+ | 'shadow-zinc-50'
+ | 'shadow-zinc-100'
+ | 'shadow-zinc-200'
+ | 'shadow-zinc-300'
+ | 'shadow-zinc-400'
+ | 'shadow-zinc-500'
+ | 'shadow-zinc-600'
+ | 'shadow-zinc-700'
+ | 'shadow-zinc-800'
+ | 'shadow-zinc-900'
+ | 'shadow-zinc-950'
+type BoxShadowRef2 = 'foreground'
+type BoxShadowRef3 = 'foreground'
+type BoxShadowRef4 = '1' | '2' | '3' | '4' | '5'
+type BoxShadowRef5 = 'foreground'
+type BoxShadowRef6 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type BoxShadowRef7 = 'foreground'
+type BoxShadowRef8 = 'foreground'
+type BoxShadowRef9 = 'foreground'
+type BoxShadowRef10 = 'foreground'
+type BoxShadowRef11 = 'foreground'
+type BoxShadowRef12 = '1' | '2' | '3' | '4' | '5'
+type BoxShadowRef13 = 'foreground'
+type BoxShadowRef14 = 'foreground'
+type BoxShadowRef15 = 'foreground'
+type BoxShadowRef16 = 'foreground'
+type BoxShadowRef17 =
+ | '0'
+ | '1'
+ | '2'
+ | '4'
+ | '8'
+ | 'accent'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'current'
+ | 'destructive'
+ | 'foreground'
+ | 'inherit'
+ | 'input'
+ | 'inset'
+ | 'muted'
+ | 'popover'
+ | 'primary'
+ | 'ring'
+ | 'secondary'
+ | 'sidebar'
+ | 'transparent'
+ | TailwindGlobalColor
+type BoxShadowRef18 =
+ | '2xl'
+ | '2xs'
+ | 'accent'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'current'
+ | 'destructive'
+ | 'foreground'
+ | 'inherit'
+ | 'initial'
+ | 'inner'
+ | 'input'
+ | 'lg'
+ | 'md'
+ | 'muted'
+ | 'none'
+ | 'popover'
+ | 'primary'
+ | 'ring'
+ | 'secondary'
+ | 'sidebar'
+ | 'sm'
+ | 'transparent'
+ | 'xl'
+ | 'xs'
+ | TailwindGlobalColor
+type AlignItemsRef1 =
+ | 'baseline'
+ | 'baseline-last'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'start'
+ | 'stretch'
+type JustifyContentRef1 =
+ | 'around'
+ | 'baseline'
+ | 'between'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'evenly'
+ | 'normal'
+ | 'start'
+ | 'stretch'
+type JustifyItemsRef1 =
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'normal'
+ | 'start'
+ | 'stretch'
+type JustifySelfRef1 =
+ | 'auto'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'start'
+ | 'stretch'
+type LineHeightRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'loose'
+ | 'none'
+ | 'normal'
+ | 'px'
+ | 'relaxed'
+ | 'snug'
+ | 'tight'
+type LineClampRef1 = '1' | '2' | '3' | '4' | '5' | '6' | 'none'
+type TextDecorationLineRef1 = 'through'
+type ListStyleTypeRef1 = 'decimal' | 'disc' | 'none'
+type MaskCompositeRef1 = 'add' | 'exclude' | 'intersect' | 'subtract'
+type MaskModeRef1 = 'alpha' | 'luminance' | 'match'
+type MaskSizeRef1 = 'auto' | 'contain' | 'cover'
+type MaskPositionRef1 = 'left' | 'right'
+type MaskPositionRef2 = 'left' | 'right'
+type MaskPositionRef3 = 'bottom' | 'center' | 'left' | 'right' | 'top'
+type MaskClipRef1 =
+ | 'border'
+ | 'content'
+ | 'fill'
+ | 'padding'
+ | 'stroke'
+ | 'view'
+type MaskClipRef2 = 'no-clip'
+type MaskRepeatRef1 = 'round' | 'space' | 'x' | 'y'
+type MaskRepeatRef2 = 'no-repeat' | 'repeat'
+type MaskOriginRef1 =
+ | 'border'
+ | 'content'
+ | 'fill'
+ | 'padding'
+ | 'stroke'
+ | 'view'
+type MaxHeightRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'dvh'
+ | 'dvw'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'fit'
+ | 'full'
+ | 'lvh'
+ | 'lvw'
+ | 'max'
+ | 'min'
+ | 'none'
+ | 'px'
+ | 'screen'
+ | 'svh'
+ | 'svw'
+type MinHeightRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'auto'
+ | 'dvh'
+ | 'dvw'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'fit'
+ | 'full'
+ | 'lvh'
+ | 'lvw'
+ | 'max'
+ | 'min'
+ | 'px'
+ | 'screen'
+ | 'svh'
+ | 'svw'
+type MinWidthRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '2xl'
+ | '2xs'
+ | '3'
+ | '3.5'
+ | '3xl'
+ | '3xs'
+ | '4'
+ | '4xl'
+ | '5'
+ | '5xl'
+ | '6'
+ | '6xl'
+ | '7'
+ | '7xl'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'auto'
+ | 'dvh'
+ | 'dvw'
+ | 'fd-container'
+ | 'fit'
+ | 'full'
+ | 'lg'
+ | 'lvh'
+ | 'lvw'
+ | 'max'
+ | 'md'
+ | 'min'
+ | 'px'
+ | 'screen'
+ | 'sm'
+ | 'svh'
+ | 'svw'
+ | 'xl'
+ | 'xs'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+type MixBlendModeRef1 =
+ | 'color'
+ | 'darken'
+ | 'difference'
+ | 'exclusion'
+ | 'hard-light'
+ | 'hue'
+ | 'lighten'
+ | 'luminosity'
+ | 'multiply'
+ | 'normal'
+ | 'overlay'
+ | 'plus-darker'
+ | 'plus-lighter'
+ | 'saturation'
+ | 'screen'
+ | 'soft-light'
+type MixBlendModeRef2 = 'burn' | 'dodge'
+type ObjectPositionRef1 = 'left' | 'right'
+type ObjectPositionRef2 = 'bottom' | 'top'
+type ObjectPositionRef3 = 'bottom' | 'top'
+type ObjectPositionRef4 = 'left' | 'right'
+type ObjectPositionRef5 = 'bottom' | 'center' | 'left' | 'right' | 'top'
+type ObjectFitRef1 = 'contain' | 'cover' | 'fill' | 'none' | 'scale-down'
+type OpacityRef1 =
+ | '0'
+ | '5'
+ | '10'
+ | '15'
+ | '20'
+ | '25'
+ | '30'
+ | '35'
+ | '40'
+ | '45'
+ | '50'
+ | '55'
+ | '60'
+ | '65'
+ | '70'
+ | '75'
+ | '80'
+ | '85'
+ | '90'
+ | '95'
+ | '100'
+type TransformOriginRef1 = 'left' | 'right'
+type TransformOriginRef2 = 'left' | 'right'
+type TransformOriginRef3 = 'bottom' | 'center' | 'left' | 'right' | 'top'
+type OutlineWidthRef1 = 'foreground'
+type OutlineWidthRef2 = '1' | '2' | '3' | '4' | '5'
+type OutlineWidthRef3 = 'foreground'
+type OutlineWidthRef4 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type OutlineWidthRef5 =
+ | '0'
+ | '1'
+ | '2'
+ | '4'
+ | '8'
+ | 'accent'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'card-foreground'
+ | 'destructive'
+ | 'foreground'
+ | 'input'
+ | 'muted'
+ | 'muted-foreground'
+ | 'popover'
+ | 'popover-foreground'
+ | 'primary'
+ | 'ring'
+ | 'secondary'
+ | 'secondary-foreground'
+ | 'sidebar'
+type OutlineColorRef1 =
+ | 'current'
+ | 'inherit'
+ | 'transparent'
+ | TailwindGlobalColor
+type OutlineStyleRef1 =
+ | 'dashed'
+ | 'dotted'
+ | 'double'
+ | 'hidden'
+ | 'none'
+ | 'solid'
+type OverflowRef1 = 'auto' | 'clip' | 'hidden' | 'scroll' | 'visible'
+type OverflowRef2 = 'auto' | 'clip' | 'hidden' | 'scroll' | 'visible'
+type OverflowRef3 = 'auto' | 'clip' | 'hidden' | 'scroll' | 'visible'
+type OverscrollBehaviorRef1 = 'auto' | 'contain' | 'none'
+type OverscrollBehaviorRef2 = 'auto' | 'contain' | 'none'
+type OverscrollBehaviorRef3 = 'auto' | 'contain' | 'none'
+type PaddingRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type PerspectiveRef1 =
+ | 'distant'
+ | 'dramatic'
+ | 'midrange'
+ | 'near'
+ | 'none'
+ | 'normal'
+type PerspectiveOriginRef1 = 'left' | 'right'
+type PerspectiveOriginRef2 = 'left' | 'right'
+type PerspectiveOriginRef3 = 'bottom' | 'center' | 'left' | 'right' | 'top'
+type PlaceContentRef1 =
+ | 'around'
+ | 'baseline'
+ | 'between'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'evenly'
+ | 'start'
+ | 'stretch'
+type PlaceItemsRef1 =
+ | 'baseline'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'start'
+ | 'stretch'
+type PlaceSelfRef1 =
+ | 'auto'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'start'
+ | 'stretch'
+type ColorRef1 = 'foreground'
+type ColorRef2 = 'foreground'
+type ColorRef3 = '1' | '2' | '3' | '4' | '5'
+type ColorRef4 = 'foreground'
+type ColorRef5 = 'foreground'
+type ColorRef6 = 'foreground'
+type ColorRef7 = 'foreground'
+type ColorRef8 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type ColorRef9 = 'foreground'
+type ColorRef10 = 'foreground'
+type ColorRef11 = '1' | '2' | '3' | '4' | '5'
+type ColorRef12 = 'foreground'
+type ColorRef13 = 'foreground'
+type ColorRef14 = 'foreground'
+type ColorRef15 = 'foreground'
+type ColorRef16 =
+ | 'accent'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'current'
+ | 'destructive'
+ | 'foreground'
+ | 'inherit'
+ | 'input'
+ | 'muted'
+ | 'popover'
+ | 'primary'
+ | 'ring'
+ | 'secondary'
+ | 'sidebar'
+ | 'transparent'
+ | TailwindGlobalColor
+type AnimationIterationCountRef1 = '0' | '1' | 'infinite' | 'initial'
+type ResizeRef1 = 'none' | 'x' | 'y'
+type BorderRadiusRef1 =
+ | '2xl'
+ | '3xl'
+ | '4xl'
+ | 'full'
+ | 'lg'
+ | 'md'
+ | 'none'
+ | 'sm'
+ | 'xl'
+ | 'xs'
+type ColorSchemeRef1 = 'dark'
+type ColorSchemeRef2 = 'dark' | 'light' | 'normal' | 'only-dark' | 'only-light'
+type ScrollPaddingRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'fd-container'
+ | 'px'
+type UserSelectRef1 = 'all' | 'auto' | 'none' | 'text'
+type AlignSelfRef1 =
+ | 'auto'
+ | 'baseline'
+ | 'baseline-last'
+ | 'center'
+ | 'center-safe'
+ | 'end'
+ | 'end-safe'
+ | 'start'
+ | 'stretch'
+type WidthRef1 =
+ | '0'
+ | '0.5'
+ | '1'
+ | '1.5'
+ | '2'
+ | '2.5'
+ | '3'
+ | '3.5'
+ | '4'
+ | '5'
+ | '6'
+ | '7'
+ | '8'
+ | '9'
+ | '10'
+ | '11'
+ | '12'
+ | '14'
+ | '16'
+ | '20'
+ | '24'
+ | '28'
+ | '32'
+ | '36'
+ | '40'
+ | '44'
+ | '48'
+ | '52'
+ | '56'
+ | '60'
+ | '64'
+ | '72'
+ | '80'
+ | '96'
+ | 'auto'
+ | 'dvh'
+ | 'dvw'
+ | 'fd-container'
+ | '1/2'
+ | '1/3'
+ | '1/4'
+ | '1/5'
+ | '1/6'
+ | '1/12'
+ | '2/3'
+ | '2/4'
+ | '2/5'
+ | '2/6'
+ | '2/12'
+ | '3/4'
+ | '3/5'
+ | '3/6'
+ | '3/12'
+ | '4/5'
+ | '4/6'
+ | '4/12'
+ | '5/6'
+ | '5/12'
+ | '6/12'
+ | '7/12'
+ | '8/12'
+ | '9/12'
+ | '10/12'
+ | '11/12'
+ | 'fit'
+ | 'full'
+ | 'lvh'
+ | 'lvw'
+ | 'max'
+ | 'min'
+ | 'px'
+ | 'svh'
+ | 'svw'
+type ScrollSnapAlignRef1 = 'align-none' | 'center' | 'end' | 'start'
+type ScrollSnapTypeRef1 =
+ | 'both'
+ | 'mandatory'
+ | 'none'
+ | 'proximity'
+ | 'x'
+ | 'y'
+type StrokeWidthRef1 = 'foreground'
+type StrokeWidthRef2 = '1' | '2' | '3' | '4' | '5'
+type StrokeWidthRef3 = 'foreground'
+type StrokeWidthRef4 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type StrokeWidthRef5 =
+ | '0'
+ | '1'
+ | '2'
+ | '3'
+ | 'accent'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'card-foreground'
+ | 'destructive'
+ | 'foreground'
+ | 'input'
+ | 'muted'
+ | 'muted-foreground'
+ | 'popover'
+ | 'popover-foreground'
+ | 'primary'
+ | 'ring'
+ | 'secondary'
+ | 'secondary-foreground'
+ | 'sidebar'
+type StrokeRef1 =
+ | 'current'
+ | 'inherit'
+ | 'none'
+ | 'transparent'
+ | TailwindGlobalColor
+type FontSizeRef1 =
+ | '2xl'
+ | '3xl'
+ | '4xl'
+ | '5xl'
+ | '6xl'
+ | '7xl'
+ | '8xl'
+ | '9xl'
+ | 'base'
+ | 'lg'
+ | 'sm'
+ | 'xl'
+ | 'xs'
+type TextWrapRef1 = 'balance' | 'nowrap' | 'pretty' | 'wrap'
+type TextAlignRef1 = 'center' | 'end' | 'justify' | 'left' | 'right' | 'start'
+type TextShadowRef1 = 'foreground'
+type TextShadowRef2 = 'foreground'
+type TextShadowRef3 = '1' | '2' | '3' | '4' | '5'
+type TextShadowRef4 = 'foreground'
+type TextShadowRef5 = 'foreground'
+type TextShadowRef6 = 'foreground'
+type TextShadowRef7 = 'foreground'
+type TextShadowRef8 =
+ | 'accent'
+ | 'accent-foreground'
+ | 'border'
+ | 'foreground'
+ | 'primary'
+ | 'primary-foreground'
+ | 'ring'
+type TextShadowRef9 =
+ | '2xs'
+ | 'accent'
+ | 'background'
+ | 'border'
+ | 'card'
+ | 'current'
+ | 'destructive'
+ | 'foreground'
+ | 'inherit'
+ | 'initial'
+ | 'input'
+ | 'lg'
+ | 'md'
+ | 'muted'
+ | 'none'
+ | 'popover'
+ | 'primary'
+ | 'ring'
+ | 'secondary'
+ | 'sidebar'
+ | 'sm'
+ | 'transparent'
+ | 'xs'
+ | TailwindGlobalColor
+type TouchActionRef1 = 'down' | 'left' | 'right' | 'up' | 'x' | 'y'
+type TouchActionRef2 = 'auto' | 'manipulation' | 'none' | 'pinch-zoom'
+type TransformRef1 = 'cpu' | 'gpu' | 'none'
+type TransformBoxRef1 = 'border' | 'content' | 'fill' | 'stroke' | 'view'
+type TransitionPropertyRef1 =
+ | 'all'
+ | 'colors'
+ | 'none'
+ | 'opacity'
+ | 'shadow'
+ | 'transform'
+type WhiteSpaceRef1 = 'line' | 'wrap'
+type WhiteSpaceRef2 = 'break-spaces' | 'normal' | 'nowrap' | 'pre'
+type WillChangeRef1 = 'auto' | 'contents' | 'scroll' | 'transform'
+type BackgroundImageBgconicLiteral = `bg-conic-${BackgroundImageRef1}`
+type BackgroundImageBgconicLiteralWithSign =
+ | BackgroundImageBgconicLiteral
+ | `-${BackgroundImageBgconicLiteral}`
+type BackgroundImageBglinearLiteral = `bg-linear-${BackgroundImageRef1}`
+type BackgroundImageBglinearLiteralWithSign =
+ | BackgroundImageBglinearLiteral
+ | `-${BackgroundImageBglinearLiteral}`
+type BackgroundImageBglineartoLiteral = `bg-linear-to-${BackgroundImageRef2}`
+type BackgroundImageBglineartoLiteralWithSign =
+ | BackgroundImageBglineartoLiteral
+ | `-${BackgroundImageBglineartoLiteral}`
+type BackgroundImageFromaccentLiteral = `from-accent-${BackgroundImageRef3}`
+type BackgroundImageFromaccentLiteralWithSign =
+ | BackgroundImageFromaccentLiteral
+ | `-${BackgroundImageFromaccentLiteral}`
+type BackgroundImageFromcardLiteral = `from-card-${BackgroundImageRef4}`
+type BackgroundImageFromcardLiteralWithSign =
+ | BackgroundImageFromcardLiteral
+ | `-${BackgroundImageFromcardLiteral}`
+type BackgroundImageFromchartLiteral = `from-chart-${BackgroundImageRef5}`
+type BackgroundImageFromchartLiteralWithSign =
+ | BackgroundImageFromchartLiteral
+ | `-${BackgroundImageFromchartLiteral}`
+type BackgroundImageFrommutedLiteral = `from-muted-${BackgroundImageRef6}`
+type BackgroundImageFrommutedLiteralWithSign =
+ | BackgroundImageFrommutedLiteral
+ | `-${BackgroundImageFrommutedLiteral}`
+type BackgroundImageFrompopoverLiteral = `from-popover-${BackgroundImageRef7}`
+type BackgroundImageFrompopoverLiteralWithSign =
+ | BackgroundImageFrompopoverLiteral
+ | `-${BackgroundImageFrompopoverLiteral}`
+type BackgroundImageFromprimaryLiteral = `from-primary-${BackgroundImageRef8}`
+type BackgroundImageFromprimaryLiteralWithSign =
+ | BackgroundImageFromprimaryLiteral
+ | `-${BackgroundImageFromprimaryLiteral}`
+type BackgroundImageFromsecondaryLiteral =
+ `from-secondary-${BackgroundImageRef9}`
+type BackgroundImageFromsecondaryLiteralWithSign =
+ | BackgroundImageFromsecondaryLiteral
+ | `-${BackgroundImageFromsecondaryLiteral}`
+type BackgroundImageFromsidebarLiteral = `from-sidebar-${BackgroundImageRef10}`
+type BackgroundImageFromsidebarLiteralWithSign =
+ | BackgroundImageFromsidebarLiteral
+ | `-${BackgroundImageFromsidebarLiteral}`
+type BackgroundImageToaccentLiteral = `to-accent-${BackgroundImageRef11}`
+type BackgroundImageToaccentLiteralWithSign =
+ | BackgroundImageToaccentLiteral
+ | `-${BackgroundImageToaccentLiteral}`
+type BackgroundImageTocardLiteral = `to-card-${BackgroundImageRef12}`
+type BackgroundImageTocardLiteralWithSign =
+ | BackgroundImageTocardLiteral
+ | `-${BackgroundImageTocardLiteral}`
+type BackgroundImageTochartLiteral = `to-chart-${BackgroundImageRef13}`
+type BackgroundImageTochartLiteralWithSign =
+ | BackgroundImageTochartLiteral
+ | `-${BackgroundImageTochartLiteral}`
+type BackgroundImageTomutedLiteral = `to-muted-${BackgroundImageRef14}`
+type BackgroundImageTomutedLiteralWithSign =
+ | BackgroundImageTomutedLiteral
+ | `-${BackgroundImageTomutedLiteral}`
+type BackgroundImageTopopoverLiteral = `to-popover-${BackgroundImageRef15}`
+type BackgroundImageTopopoverLiteralWithSign =
+ | BackgroundImageTopopoverLiteral
+ | `-${BackgroundImageTopopoverLiteral}`
+type BackgroundImageToprimaryLiteral = `to-primary-${BackgroundImageRef16}`
+type BackgroundImageToprimaryLiteralWithSign =
+ | BackgroundImageToprimaryLiteral
+ | `-${BackgroundImageToprimaryLiteral}`
+type BackgroundImageTosecondaryLiteral = `to-secondary-${BackgroundImageRef17}`
+type BackgroundImageTosecondaryLiteralWithSign =
+ | BackgroundImageTosecondaryLiteral
+ | `-${BackgroundImageTosecondaryLiteral}`
+type BackgroundImageTosidebarLiteral = `to-sidebar-${BackgroundImageRef10}`
+type BackgroundImageTosidebarLiteralWithSign =
+ | BackgroundImageTosidebarLiteral
+ | `-${BackgroundImageTosidebarLiteral}`
+type BackgroundImageViaaccentLiteral = `via-accent-${BackgroundImageRef18}`
+type BackgroundImageViaaccentLiteralWithSign =
+ | BackgroundImageViaaccentLiteral
+ | `-${BackgroundImageViaaccentLiteral}`
+type BackgroundImageViacardLiteral = `via-card-${BackgroundImageRef19}`
+type BackgroundImageViacardLiteralWithSign =
+ | BackgroundImageViacardLiteral
+ | `-${BackgroundImageViacardLiteral}`
+type BackgroundImageViachartLiteral = `via-chart-${BackgroundImageRef20}`
+type BackgroundImageViachartLiteralWithSign =
+ | BackgroundImageViachartLiteral
+ | `-${BackgroundImageViachartLiteral}`
+type BackgroundImageViamutedLiteral = `via-muted-${BackgroundImageRef21}`
+type BackgroundImageViamutedLiteralWithSign =
+ | BackgroundImageViamutedLiteral
+ | `-${BackgroundImageViamutedLiteral}`
+type BackgroundImageViapopoverLiteral = `via-popover-${BackgroundImageRef22}`
+type BackgroundImageViapopoverLiteralWithSign =
+ | BackgroundImageViapopoverLiteral
+ | `-${BackgroundImageViapopoverLiteral}`
+type BackgroundImageViaprimaryLiteral = `via-primary-${BackgroundImageRef23}`
+type BackgroundImageViaprimaryLiteralWithSign =
+ | BackgroundImageViaprimaryLiteral
+ | `-${BackgroundImageViaprimaryLiteral}`
+type BackgroundImageViasecondaryLiteral =
+ `via-secondary-${BackgroundImageRef24}`
+type BackgroundImageViasecondaryLiteralWithSign =
+ | BackgroundImageViasecondaryLiteral
+ | `-${BackgroundImageViasecondaryLiteral}`
+type BackgroundImageViasidebarLiteral = `via-sidebar-${BackgroundImageRef10}`
+type BackgroundImageViasidebarLiteralWithSign =
+ | BackgroundImageViasidebarLiteral
+ | `-${BackgroundImageViasidebarLiteral}`
+type BackgroundImageBgLiteral = `bg-${BackgroundImageRef25}`
+type BackgroundImageBgLiteralWithSign =
+ | BackgroundImageBgLiteral
+ | `-${BackgroundImageBgLiteral}`
+type BackgroundImageFromLiteral = `from-${BackgroundImageRef26}`
+type BackgroundImageFromLiteralWithSign =
+ | BackgroundImageFromLiteral
+ | `-${BackgroundImageFromLiteral}`
+type BackgroundImageToLiteral = `to-${BackgroundImageRef26}`
+type BackgroundImageToLiteralWithSign =
+ | BackgroundImageToLiteral
+ | `-${BackgroundImageToLiteral}`
+type BackgroundImageViaLiteral = `via-${BackgroundImageRef26}` | 'via-none'
+type BackgroundImageViaLiteralWithSign =
+ | BackgroundImageViaLiteral
+ | `-${BackgroundImageViaLiteral}`
+type BackgroundImageValue =
+ | BackgroundImageBgconicLiteralWithSign
+ | BackgroundImageBglinearLiteralWithSign
+ | BackgroundImageBglineartoLiteralWithSign
+ | BackgroundImageFromaccentLiteralWithSign
+ | BackgroundImageFromcardLiteralWithSign
+ | BackgroundImageFromchartLiteralWithSign
+ | BackgroundImageFrommutedLiteralWithSign
+ | BackgroundImageFrompopoverLiteralWithSign
+ | BackgroundImageFromprimaryLiteralWithSign
+ | BackgroundImageFromsecondaryLiteralWithSign
+ | BackgroundImageFromsidebarLiteralWithSign
+ | BackgroundImageToaccentLiteralWithSign
+ | BackgroundImageTocardLiteralWithSign
+ | BackgroundImageTochartLiteralWithSign
+ | BackgroundImageTomutedLiteralWithSign
+ | BackgroundImageTopopoverLiteralWithSign
+ | BackgroundImageToprimaryLiteralWithSign
+ | BackgroundImageTosecondaryLiteralWithSign
+ | BackgroundImageTosidebarLiteralWithSign
+ | BackgroundImageViaaccentLiteralWithSign
+ | BackgroundImageViacardLiteralWithSign
+ | BackgroundImageViachartLiteralWithSign
+ | BackgroundImageViamutedLiteralWithSign
+ | BackgroundImageViapopoverLiteralWithSign
+ | BackgroundImageViaprimaryLiteralWithSign
+ | BackgroundImageViasecondaryLiteralWithSign
+ | BackgroundImageViasidebarLiteralWithSign
+ | BackgroundImageBgLiteralWithSign
+ | BackgroundImageFromLiteralWithSign
+ | BackgroundImageToLiteralWithSign
+ | BackgroundImageViaLiteralWithSign
+interface TailwindBackgroundImage {
+ /**
+ * `BackgroundImage`
+ *
+ * Utilities for controlling an element's background image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-image Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-image , MDN docs}
+ */
+ backgroundImage: BackgroundImageValue
+}
+type BottomLiteral = `bottom-${BottomRef1}`
+type BottomLiteralWithSign = BottomLiteral | `-${BottomLiteral}`
+type BottomValue = BottomLiteralWithSign
+interface TailwindBottom {
+ /**
+ * `Bottom`
+ *
+ * Utilities for controlling the placement of positioned elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/top-right-bottom-left Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/bottom , MDN docs}
+ */
+ bottom: BottomValue
+}
+type GridColumnColendLiteral = `col-end-${GridColumnRef1}`
+type GridColumnColendLiteralWithSign =
+ | GridColumnColendLiteral
+ | `-${GridColumnColendLiteral}`
+type GridColumnColstartLiteral = `col-start-${GridColumnRef1}`
+type GridColumnColstartLiteralWithSign =
+ | GridColumnColstartLiteral
+ | `-${GridColumnColstartLiteral}`
+type GridColumnColspanLiteral = `col-span-${GridColumnRef2}`
+type GridColumnColspanLiteralWithSign =
+ | GridColumnColspanLiteral
+ | `-${GridColumnColspanLiteral}`
+type GridColumnColLiteral = `col-${GridColumnRef3}`
+type GridColumnColLiteralWithSign =
+ | GridColumnColLiteral
+ | `-${GridColumnColLiteral}`
+type GridColumnValue =
+ | GridColumnColendLiteralWithSign
+ | GridColumnColstartLiteralWithSign
+ | GridColumnColspanLiteralWithSign
+ | GridColumnColLiteralWithSign
+interface TailwindGridColumn {
+ /**
+ * `GridColumn`
+ *
+ * Utilities for controlling how elements are sized and placed across grid
+ * columns.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-column Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-column , MDN docs}
+ */
+ gridColumn: GridColumnValue
+}
+type EndLiteral = `end-${EndRef1}`
+type EndLiteralWithSign = EndLiteral | `-${EndLiteral}`
+type EndValue = EndLiteralWithSign
+interface TailwindEnd {
+ /**
+ * `End`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/end , MDN docs}
+ */
+ end: EndValue
+}
+type TextIndentIndentLiteral = `indent-${TextIndentRef1}`
+type TextIndentIndentLiteralWithSign =
+ | TextIndentIndentLiteral
+ | `-${TextIndentIndentLiteral}`
+type TextIndentValue = TextIndentIndentLiteralWithSign
+interface TailwindTextIndent {
+ /**
+ * `TextIndent`
+ *
+ * Utilities for controlling the amount of empty space shown before text in a
+ * block.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-indent Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-indent , MDN docs}
+ */
+ textIndent: TextIndentValue
+}
+type InsetXLiteral = `inset-x-${InsetRef1}`
+type InsetXLiteralWithSign = InsetXLiteral | `-${InsetXLiteral}`
+type InsetYLiteral = `inset-y-${InsetRef1}`
+type InsetYLiteralWithSign = InsetYLiteral | `-${InsetYLiteral}`
+type InsetLiteral = `inset-${InsetRef1}`
+type InsetLiteralWithSign = InsetLiteral | `-${InsetLiteral}`
+type InsetValue =
+ | InsetXLiteralWithSign
+ | InsetYLiteralWithSign
+ | InsetLiteralWithSign
+interface TailwindInset {
+ /**
+ * `Inset`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/inset , MDN docs}
+ */
+ inset: InsetValue
+}
+type LeftLiteral = `left-${LeftRef1}`
+type LeftLiteralWithSign = LeftLiteral | `-${LeftLiteral}`
+type LeftValue = LeftLiteralWithSign
+interface TailwindLeft {
+ /**
+ * `Left`
+ *
+ * Utilities for controlling the placement of positioned elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/top-right-bottom-left Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/left , MDN docs}
+ */
+ left: LeftValue
+}
+type MarginMLiteral = `m-${MarginRef1}`
+type MarginMLiteralWithSign = MarginMLiteral | `-${MarginMLiteral}`
+type MarginMbLiteral = `mb-${MarginRef1}`
+type MarginMbLiteralWithSign = MarginMbLiteral | `-${MarginMbLiteral}`
+type MarginMeLiteral = `me-${MarginRef1}`
+type MarginMeLiteralWithSign = MarginMeLiteral | `-${MarginMeLiteral}`
+type MarginMlLiteral = `ml-${MarginRef1}`
+type MarginMlLiteralWithSign = MarginMlLiteral | `-${MarginMlLiteral}`
+type MarginMrLiteral = `mr-${MarginRef1}`
+type MarginMrLiteralWithSign = MarginMrLiteral | `-${MarginMrLiteral}`
+type MarginMsLiteral = `ms-${MarginRef1}`
+type MarginMsLiteralWithSign = MarginMsLiteral | `-${MarginMsLiteral}`
+type MarginMtLiteral = `mt-${MarginRef1}`
+type MarginMtLiteralWithSign = MarginMtLiteral | `-${MarginMtLiteral}`
+type MarginMxLiteral = `mx-${MarginRef1}`
+type MarginMxLiteralWithSign = MarginMxLiteral | `-${MarginMxLiteral}`
+type MarginMyLiteral = `my-${MarginRef1}`
+type MarginMyLiteralWithSign = MarginMyLiteral | `-${MarginMyLiteral}`
+type MarginSpacexLiteral = `space-x-${MarginRef2}`
+type MarginSpacexLiteralWithSign =
+ | MarginSpacexLiteral
+ | `-${MarginSpacexLiteral}`
+type MarginSpaceyLiteral = `space-y-${MarginRef2}`
+type MarginSpaceyLiteralWithSign =
+ | MarginSpaceyLiteral
+ | `-${MarginSpaceyLiteral}`
+type MarginValue =
+ | MarginMLiteralWithSign
+ | MarginMbLiteralWithSign
+ | MarginMeLiteralWithSign
+ | MarginMlLiteralWithSign
+ | MarginMrLiteralWithSign
+ | MarginMsLiteralWithSign
+ | MarginMtLiteralWithSign
+ | MarginMxLiteralWithSign
+ | MarginMyLiteralWithSign
+ | MarginSpacexLiteralWithSign
+ | MarginSpaceyLiteralWithSign
+interface TailwindMargin {
+ /**
+ * `Margin`
+ *
+ * Utilities for controlling an element's margin.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/margin Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/margin , MDN docs}
+ */
+ margin: MarginValue
+}
+type MaskImageMaskconicfromaccentLiteral =
+ `mask-conic-from-accent-${MaskImageRef1}`
+type MaskImageMaskconicfromaccentLiteralWithSign =
+ | MaskImageMaskconicfromaccentLiteral
+ | `-${MaskImageMaskconicfromaccentLiteral}`
+type MaskImageMaskconicfromcardLiteral = `mask-conic-from-card-${MaskImageRef2}`
+type MaskImageMaskconicfromcardLiteralWithSign =
+ | MaskImageMaskconicfromcardLiteral
+ | `-${MaskImageMaskconicfromcardLiteral}`
+type MaskImageMaskconicfromchartLiteral =
+ `mask-conic-from-chart-${MaskImageRef3}`
+type MaskImageMaskconicfromchartLiteralWithSign =
+ | MaskImageMaskconicfromchartLiteral
+ | `-${MaskImageMaskconicfromchartLiteral}`
+type MaskImageMaskconicfrommutedLiteral =
+ `mask-conic-from-muted-${MaskImageRef4}`
+type MaskImageMaskconicfrommutedLiteralWithSign =
+ | MaskImageMaskconicfrommutedLiteral
+ | `-${MaskImageMaskconicfrommutedLiteral}`
+type MaskImageMaskconicfrompopoverLiteral =
+ `mask-conic-from-popover-${MaskImageRef5}`
+type MaskImageMaskconicfrompopoverLiteralWithSign =
+ | MaskImageMaskconicfrompopoverLiteral
+ | `-${MaskImageMaskconicfrompopoverLiteral}`
+type MaskImageMaskconicfromprimaryLiteral =
+ `mask-conic-from-primary-${MaskImageRef6}`
+type MaskImageMaskconicfromprimaryLiteralWithSign =
+ | MaskImageMaskconicfromprimaryLiteral
+ | `-${MaskImageMaskconicfromprimaryLiteral}`
+type MaskImageMaskconicfromsecondaryLiteral =
+ `mask-conic-from-secondary-${MaskImageRef7}`
+type MaskImageMaskconicfromsecondaryLiteralWithSign =
+ | MaskImageMaskconicfromsecondaryLiteral
+ | `-${MaskImageMaskconicfromsecondaryLiteral}`
+type MaskImageMaskconicfromsidebarLiteral =
+ `mask-conic-from-sidebar-${MaskImageRef8}`
+type MaskImageMaskconicfromsidebarLiteralWithSign =
+ | MaskImageMaskconicfromsidebarLiteral
+ | `-${MaskImageMaskconicfromsidebarLiteral}`
+type MaskImageMaskconictoaccentLiteral = `mask-conic-to-accent-${MaskImageRef9}`
+type MaskImageMaskconictoaccentLiteralWithSign =
+ | MaskImageMaskconictoaccentLiteral
+ | `-${MaskImageMaskconictoaccentLiteral}`
+type MaskImageMaskconictocardLiteral = `mask-conic-to-card-${MaskImageRef10}`
+type MaskImageMaskconictocardLiteralWithSign =
+ | MaskImageMaskconictocardLiteral
+ | `-${MaskImageMaskconictocardLiteral}`
+type MaskImageMaskconictochartLiteral = `mask-conic-to-chart-${MaskImageRef11}`
+type MaskImageMaskconictochartLiteralWithSign =
+ | MaskImageMaskconictochartLiteral
+ | `-${MaskImageMaskconictochartLiteral}`
+type MaskImageMaskconictomutedLiteral = `mask-conic-to-muted-${MaskImageRef12}`
+type MaskImageMaskconictomutedLiteralWithSign =
+ | MaskImageMaskconictomutedLiteral
+ | `-${MaskImageMaskconictomutedLiteral}`
+type MaskImageMaskconictopopoverLiteral =
+ `mask-conic-to-popover-${MaskImageRef13}`
+type MaskImageMaskconictopopoverLiteralWithSign =
+ | MaskImageMaskconictopopoverLiteral
+ | `-${MaskImageMaskconictopopoverLiteral}`
+type MaskImageMaskconictoprimaryLiteral =
+ `mask-conic-to-primary-${MaskImageRef14}`
+type MaskImageMaskconictoprimaryLiteralWithSign =
+ | MaskImageMaskconictoprimaryLiteral
+ | `-${MaskImageMaskconictoprimaryLiteral}`
+type MaskImageMaskconictosecondaryLiteral =
+ `mask-conic-to-secondary-${MaskImageRef15}`
+type MaskImageMaskconictosecondaryLiteralWithSign =
+ | MaskImageMaskconictosecondaryLiteral
+ | `-${MaskImageMaskconictosecondaryLiteral}`
+type MaskImageMaskconictosidebarLiteral =
+ `mask-conic-to-sidebar-${MaskImageRef8}`
+type MaskImageMaskconictosidebarLiteralWithSign =
+ | MaskImageMaskconictosidebarLiteral
+ | `-${MaskImageMaskconictosidebarLiteral}`
+type MaskImageMasklinearfromaccentLiteral =
+ `mask-linear-from-accent-${MaskImageRef16}`
+type MaskImageMasklinearfromaccentLiteralWithSign =
+ | MaskImageMasklinearfromaccentLiteral
+ | `-${MaskImageMasklinearfromaccentLiteral}`
+type MaskImageMasklinearfromcardLiteral =
+ `mask-linear-from-card-${MaskImageRef17}`
+type MaskImageMasklinearfromcardLiteralWithSign =
+ | MaskImageMasklinearfromcardLiteral
+ | `-${MaskImageMasklinearfromcardLiteral}`
+type MaskImageMasklinearfromchartLiteral =
+ `mask-linear-from-chart-${MaskImageRef18}`
+type MaskImageMasklinearfromchartLiteralWithSign =
+ | MaskImageMasklinearfromchartLiteral
+ | `-${MaskImageMasklinearfromchartLiteral}`
+type MaskImageMasklinearfrommutedLiteral =
+ `mask-linear-from-muted-${MaskImageRef19}`
+type MaskImageMasklinearfrommutedLiteralWithSign =
+ | MaskImageMasklinearfrommutedLiteral
+ | `-${MaskImageMasklinearfrommutedLiteral}`
+type MaskImageMasklinearfrompopoverLiteral =
+ `mask-linear-from-popover-${MaskImageRef20}`
+type MaskImageMasklinearfrompopoverLiteralWithSign =
+ | MaskImageMasklinearfrompopoverLiteral
+ | `-${MaskImageMasklinearfrompopoverLiteral}`
+type MaskImageMasklinearfromprimaryLiteral =
+ `mask-linear-from-primary-${MaskImageRef21}`
+type MaskImageMasklinearfromprimaryLiteralWithSign =
+ | MaskImageMasklinearfromprimaryLiteral
+ | `-${MaskImageMasklinearfromprimaryLiteral}`
+type MaskImageMasklinearfromsecondaryLiteral =
+ `mask-linear-from-secondary-${MaskImageRef22}`
+type MaskImageMasklinearfromsecondaryLiteralWithSign =
+ | MaskImageMasklinearfromsecondaryLiteral
+ | `-${MaskImageMasklinearfromsecondaryLiteral}`
+type MaskImageMasklinearfromsidebarLiteral =
+ `mask-linear-from-sidebar-${MaskImageRef8}`
+type MaskImageMasklinearfromsidebarLiteralWithSign =
+ | MaskImageMasklinearfromsidebarLiteral
+ | `-${MaskImageMasklinearfromsidebarLiteral}`
+type MaskImageMasklineartoaccentLiteral =
+ `mask-linear-to-accent-${MaskImageRef23}`
+type MaskImageMasklineartoaccentLiteralWithSign =
+ | MaskImageMasklineartoaccentLiteral
+ | `-${MaskImageMasklineartoaccentLiteral}`
+type MaskImageMasklineartocardLiteral = `mask-linear-to-card-${MaskImageRef24}`
+type MaskImageMasklineartocardLiteralWithSign =
+ | MaskImageMasklineartocardLiteral
+ | `-${MaskImageMasklineartocardLiteral}`
+type MaskImageMasklineartochartLiteral =
+ `mask-linear-to-chart-${MaskImageRef25}`
+type MaskImageMasklineartochartLiteralWithSign =
+ | MaskImageMasklineartochartLiteral
+ | `-${MaskImageMasklineartochartLiteral}`
+type MaskImageMasklineartomutedLiteral =
+ `mask-linear-to-muted-${MaskImageRef26}`
+type MaskImageMasklineartomutedLiteralWithSign =
+ | MaskImageMasklineartomutedLiteral
+ | `-${MaskImageMasklineartomutedLiteral}`
+type MaskImageMasklineartopopoverLiteral =
+ `mask-linear-to-popover-${MaskImageRef27}`
+type MaskImageMasklineartopopoverLiteralWithSign =
+ | MaskImageMasklineartopopoverLiteral
+ | `-${MaskImageMasklineartopopoverLiteral}`
+type MaskImageMasklineartoprimaryLiteral =
+ `mask-linear-to-primary-${MaskImageRef28}`
+type MaskImageMasklineartoprimaryLiteralWithSign =
+ | MaskImageMasklineartoprimaryLiteral
+ | `-${MaskImageMasklineartoprimaryLiteral}`
+type MaskImageMasklineartosecondaryLiteral =
+ `mask-linear-to-secondary-${MaskImageRef29}`
+type MaskImageMasklineartosecondaryLiteralWithSign =
+ | MaskImageMasklineartosecondaryLiteral
+ | `-${MaskImageMasklineartosecondaryLiteral}`
+type MaskImageMasklineartosidebarLiteral =
+ `mask-linear-to-sidebar-${MaskImageRef8}`
+type MaskImageMasklineartosidebarLiteralWithSign =
+ | MaskImageMasklineartosidebarLiteral
+ | `-${MaskImageMasklineartosidebarLiteral}`
+type MaskImageMaskbfromaccentLiteral = `mask-b-from-accent-${MaskImageRef30}`
+type MaskImageMaskbfromaccentLiteralWithSign =
+ | MaskImageMaskbfromaccentLiteral
+ | `-${MaskImageMaskbfromaccentLiteral}`
+type MaskImageMaskbfromcardLiteral = `mask-b-from-card-${MaskImageRef31}`
+type MaskImageMaskbfromcardLiteralWithSign =
+ | MaskImageMaskbfromcardLiteral
+ | `-${MaskImageMaskbfromcardLiteral}`
+type MaskImageMaskbfromchartLiteral = `mask-b-from-chart-${MaskImageRef32}`
+type MaskImageMaskbfromchartLiteralWithSign =
+ | MaskImageMaskbfromchartLiteral
+ | `-${MaskImageMaskbfromchartLiteral}`
+type MaskImageMaskbfrommutedLiteral = `mask-b-from-muted-${MaskImageRef33}`
+type MaskImageMaskbfrommutedLiteralWithSign =
+ | MaskImageMaskbfrommutedLiteral
+ | `-${MaskImageMaskbfrommutedLiteral}`
+type MaskImageMaskbfrompopoverLiteral = `mask-b-from-popover-${MaskImageRef34}`
+type MaskImageMaskbfrompopoverLiteralWithSign =
+ | MaskImageMaskbfrompopoverLiteral
+ | `-${MaskImageMaskbfrompopoverLiteral}`
+type MaskImageMaskbfromprimaryLiteral = `mask-b-from-primary-${MaskImageRef35}`
+type MaskImageMaskbfromprimaryLiteralWithSign =
+ | MaskImageMaskbfromprimaryLiteral
+ | `-${MaskImageMaskbfromprimaryLiteral}`
+type MaskImageMaskbfromsecondaryLiteral =
+ `mask-b-from-secondary-${MaskImageRef36}`
+type MaskImageMaskbfromsecondaryLiteralWithSign =
+ | MaskImageMaskbfromsecondaryLiteral
+ | `-${MaskImageMaskbfromsecondaryLiteral}`
+type MaskImageMaskbfromsidebarLiteral = `mask-b-from-sidebar-${MaskImageRef8}`
+type MaskImageMaskbfromsidebarLiteralWithSign =
+ | MaskImageMaskbfromsidebarLiteral
+ | `-${MaskImageMaskbfromsidebarLiteral}`
+type MaskImageMaskbtoaccentLiteral = `mask-b-to-accent-${MaskImageRef37}`
+type MaskImageMaskbtoaccentLiteralWithSign =
+ | MaskImageMaskbtoaccentLiteral
+ | `-${MaskImageMaskbtoaccentLiteral}`
+type MaskImageMaskbtocardLiteral = `mask-b-to-card-${MaskImageRef38}`
+type MaskImageMaskbtocardLiteralWithSign =
+ | MaskImageMaskbtocardLiteral
+ | `-${MaskImageMaskbtocardLiteral}`
+type MaskImageMaskbtochartLiteral = `mask-b-to-chart-${MaskImageRef39}`
+type MaskImageMaskbtochartLiteralWithSign =
+ | MaskImageMaskbtochartLiteral
+ | `-${MaskImageMaskbtochartLiteral}`
+type MaskImageMaskbtomutedLiteral = `mask-b-to-muted-${MaskImageRef40}`
+type MaskImageMaskbtomutedLiteralWithSign =
+ | MaskImageMaskbtomutedLiteral
+ | `-${MaskImageMaskbtomutedLiteral}`
+type MaskImageMaskbtopopoverLiteral = `mask-b-to-popover-${MaskImageRef41}`
+type MaskImageMaskbtopopoverLiteralWithSign =
+ | MaskImageMaskbtopopoverLiteral
+ | `-${MaskImageMaskbtopopoverLiteral}`
+type MaskImageMaskbtoprimaryLiteral = `mask-b-to-primary-${MaskImageRef42}`
+type MaskImageMaskbtoprimaryLiteralWithSign =
+ | MaskImageMaskbtoprimaryLiteral
+ | `-${MaskImageMaskbtoprimaryLiteral}`
+type MaskImageMaskbtosecondaryLiteral = `mask-b-to-secondary-${MaskImageRef43}`
+type MaskImageMaskbtosecondaryLiteralWithSign =
+ | MaskImageMaskbtosecondaryLiteral
+ | `-${MaskImageMaskbtosecondaryLiteral}`
+type MaskImageMaskbtosidebarLiteral = `mask-b-to-sidebar-${MaskImageRef8}`
+type MaskImageMaskbtosidebarLiteralWithSign =
+ | MaskImageMaskbtosidebarLiteral
+ | `-${MaskImageMaskbtosidebarLiteral}`
+type MaskImageMasklfromaccentLiteral = `mask-l-from-accent-${MaskImageRef44}`
+type MaskImageMasklfromaccentLiteralWithSign =
+ | MaskImageMasklfromaccentLiteral
+ | `-${MaskImageMasklfromaccentLiteral}`
+type MaskImageMasklfromcardLiteral = `mask-l-from-card-${MaskImageRef45}`
+type MaskImageMasklfromcardLiteralWithSign =
+ | MaskImageMasklfromcardLiteral
+ | `-${MaskImageMasklfromcardLiteral}`
+type MaskImageMasklfromchartLiteral = `mask-l-from-chart-${MaskImageRef46}`
+type MaskImageMasklfromchartLiteralWithSign =
+ | MaskImageMasklfromchartLiteral
+ | `-${MaskImageMasklfromchartLiteral}`
+type MaskImageMasklfrommutedLiteral = `mask-l-from-muted-${MaskImageRef47}`
+type MaskImageMasklfrommutedLiteralWithSign =
+ | MaskImageMasklfrommutedLiteral
+ | `-${MaskImageMasklfrommutedLiteral}`
+type MaskImageMasklfrompopoverLiteral = `mask-l-from-popover-${MaskImageRef48}`
+type MaskImageMasklfrompopoverLiteralWithSign =
+ | MaskImageMasklfrompopoverLiteral
+ | `-${MaskImageMasklfrompopoverLiteral}`
+type MaskImageMasklfromprimaryLiteral = `mask-l-from-primary-${MaskImageRef49}`
+type MaskImageMasklfromprimaryLiteralWithSign =
+ | MaskImageMasklfromprimaryLiteral
+ | `-${MaskImageMasklfromprimaryLiteral}`
+type MaskImageMasklfromsecondaryLiteral =
+ `mask-l-from-secondary-${MaskImageRef50}`
+type MaskImageMasklfromsecondaryLiteralWithSign =
+ | MaskImageMasklfromsecondaryLiteral
+ | `-${MaskImageMasklfromsecondaryLiteral}`
+type MaskImageMasklfromsidebarLiteral = `mask-l-from-sidebar-${MaskImageRef8}`
+type MaskImageMasklfromsidebarLiteralWithSign =
+ | MaskImageMasklfromsidebarLiteral
+ | `-${MaskImageMasklfromsidebarLiteral}`
+type MaskImageMaskltoaccentLiteral = `mask-l-to-accent-${MaskImageRef51}`
+type MaskImageMaskltoaccentLiteralWithSign =
+ | MaskImageMaskltoaccentLiteral
+ | `-${MaskImageMaskltoaccentLiteral}`
+type MaskImageMaskltocardLiteral = `mask-l-to-card-${MaskImageRef52}`
+type MaskImageMaskltocardLiteralWithSign =
+ | MaskImageMaskltocardLiteral
+ | `-${MaskImageMaskltocardLiteral}`
+type MaskImageMaskltochartLiteral = `mask-l-to-chart-${MaskImageRef53}`
+type MaskImageMaskltochartLiteralWithSign =
+ | MaskImageMaskltochartLiteral
+ | `-${MaskImageMaskltochartLiteral}`
+type MaskImageMaskltomutedLiteral = `mask-l-to-muted-${MaskImageRef54}`
+type MaskImageMaskltomutedLiteralWithSign =
+ | MaskImageMaskltomutedLiteral
+ | `-${MaskImageMaskltomutedLiteral}`
+type MaskImageMaskltopopoverLiteral = `mask-l-to-popover-${MaskImageRef55}`
+type MaskImageMaskltopopoverLiteralWithSign =
+ | MaskImageMaskltopopoverLiteral
+ | `-${MaskImageMaskltopopoverLiteral}`
+type MaskImageMaskltoprimaryLiteral = `mask-l-to-primary-${MaskImageRef56}`
+type MaskImageMaskltoprimaryLiteralWithSign =
+ | MaskImageMaskltoprimaryLiteral
+ | `-${MaskImageMaskltoprimaryLiteral}`
+type MaskImageMaskltosecondaryLiteral = `mask-l-to-secondary-${MaskImageRef57}`
+type MaskImageMaskltosecondaryLiteralWithSign =
+ | MaskImageMaskltosecondaryLiteral
+ | `-${MaskImageMaskltosecondaryLiteral}`
+type MaskImageMaskltosidebarLiteral = `mask-l-to-sidebar-${MaskImageRef8}`
+type MaskImageMaskltosidebarLiteralWithSign =
+ | MaskImageMaskltosidebarLiteral
+ | `-${MaskImageMaskltosidebarLiteral}`
+type MaskImageMaskrfromaccentLiteral = `mask-r-from-accent-${MaskImageRef58}`
+type MaskImageMaskrfromaccentLiteralWithSign =
+ | MaskImageMaskrfromaccentLiteral
+ | `-${MaskImageMaskrfromaccentLiteral}`
+type MaskImageMaskrfromcardLiteral = `mask-r-from-card-${MaskImageRef59}`
+type MaskImageMaskrfromcardLiteralWithSign =
+ | MaskImageMaskrfromcardLiteral
+ | `-${MaskImageMaskrfromcardLiteral}`
+type MaskImageMaskrfromchartLiteral = `mask-r-from-chart-${MaskImageRef60}`
+type MaskImageMaskrfromchartLiteralWithSign =
+ | MaskImageMaskrfromchartLiteral
+ | `-${MaskImageMaskrfromchartLiteral}`
+type MaskImageMaskrfrommutedLiteral = `mask-r-from-muted-${MaskImageRef61}`
+type MaskImageMaskrfrommutedLiteralWithSign =
+ | MaskImageMaskrfrommutedLiteral
+ | `-${MaskImageMaskrfrommutedLiteral}`
+type MaskImageMaskrfrompopoverLiteral = `mask-r-from-popover-${MaskImageRef62}`
+type MaskImageMaskrfrompopoverLiteralWithSign =
+ | MaskImageMaskrfrompopoverLiteral
+ | `-${MaskImageMaskrfrompopoverLiteral}`
+type MaskImageMaskrfromprimaryLiteral = `mask-r-from-primary-${MaskImageRef63}`
+type MaskImageMaskrfromprimaryLiteralWithSign =
+ | MaskImageMaskrfromprimaryLiteral
+ | `-${MaskImageMaskrfromprimaryLiteral}`
+type MaskImageMaskrfromsecondaryLiteral =
+ `mask-r-from-secondary-${MaskImageRef64}`
+type MaskImageMaskrfromsecondaryLiteralWithSign =
+ | MaskImageMaskrfromsecondaryLiteral
+ | `-${MaskImageMaskrfromsecondaryLiteral}`
+type MaskImageMaskrfromsidebarLiteral = `mask-r-from-sidebar-${MaskImageRef8}`
+type MaskImageMaskrfromsidebarLiteralWithSign =
+ | MaskImageMaskrfromsidebarLiteral
+ | `-${MaskImageMaskrfromsidebarLiteral}`
+type MaskImageMaskrtoaccentLiteral = `mask-r-to-accent-${MaskImageRef65}`
+type MaskImageMaskrtoaccentLiteralWithSign =
+ | MaskImageMaskrtoaccentLiteral
+ | `-${MaskImageMaskrtoaccentLiteral}`
+type MaskImageMaskrtocardLiteral = `mask-r-to-card-${MaskImageRef66}`
+type MaskImageMaskrtocardLiteralWithSign =
+ | MaskImageMaskrtocardLiteral
+ | `-${MaskImageMaskrtocardLiteral}`
+type MaskImageMaskrtochartLiteral = `mask-r-to-chart-${MaskImageRef67}`
+type MaskImageMaskrtochartLiteralWithSign =
+ | MaskImageMaskrtochartLiteral
+ | `-${MaskImageMaskrtochartLiteral}`
+type MaskImageMaskrtomutedLiteral = `mask-r-to-muted-${MaskImageRef68}`
+type MaskImageMaskrtomutedLiteralWithSign =
+ | MaskImageMaskrtomutedLiteral
+ | `-${MaskImageMaskrtomutedLiteral}`
+type MaskImageMaskrtopopoverLiteral = `mask-r-to-popover-${MaskImageRef69}`
+type MaskImageMaskrtopopoverLiteralWithSign =
+ | MaskImageMaskrtopopoverLiteral
+ | `-${MaskImageMaskrtopopoverLiteral}`
+type MaskImageMaskrtoprimaryLiteral = `mask-r-to-primary-${MaskImageRef70}`
+type MaskImageMaskrtoprimaryLiteralWithSign =
+ | MaskImageMaskrtoprimaryLiteral
+ | `-${MaskImageMaskrtoprimaryLiteral}`
+type MaskImageMaskrtosecondaryLiteral = `mask-r-to-secondary-${MaskImageRef71}`
+type MaskImageMaskrtosecondaryLiteralWithSign =
+ | MaskImageMaskrtosecondaryLiteral
+ | `-${MaskImageMaskrtosecondaryLiteral}`
+type MaskImageMaskrtosidebarLiteral = `mask-r-to-sidebar-${MaskImageRef8}`
+type MaskImageMaskrtosidebarLiteralWithSign =
+ | MaskImageMaskrtosidebarLiteral
+ | `-${MaskImageMaskrtosidebarLiteral}`
+type MaskImageMaskradialatbottomLiteral =
+ `mask-radial-at-bottom-${MaskImageRef72}`
+type MaskImageMaskradialatbottomLiteralWithSign =
+ | MaskImageMaskradialatbottomLiteral
+ | `-${MaskImageMaskradialatbottomLiteral}`
+type MaskImageMaskradialattopLiteral = `mask-radial-at-top-${MaskImageRef73}`
+type MaskImageMaskradialattopLiteralWithSign =
+ | MaskImageMaskradialattopLiteral
+ | `-${MaskImageMaskradialattopLiteral}`
+type MaskImageMaskradialfromaccentLiteral =
+ `mask-radial-from-accent-${MaskImageRef74}`
+type MaskImageMaskradialfromaccentLiteralWithSign =
+ | MaskImageMaskradialfromaccentLiteral
+ | `-${MaskImageMaskradialfromaccentLiteral}`
+type MaskImageMaskradialfromcardLiteral =
+ `mask-radial-from-card-${MaskImageRef75}`
+type MaskImageMaskradialfromcardLiteralWithSign =
+ | MaskImageMaskradialfromcardLiteral
+ | `-${MaskImageMaskradialfromcardLiteral}`
+type MaskImageMaskradialfromchartLiteral =
+ `mask-radial-from-chart-${MaskImageRef76}`
+type MaskImageMaskradialfromchartLiteralWithSign =
+ | MaskImageMaskradialfromchartLiteral
+ | `-${MaskImageMaskradialfromchartLiteral}`
+type MaskImageMaskradialfrommutedLiteral =
+ `mask-radial-from-muted-${MaskImageRef77}`
+type MaskImageMaskradialfrommutedLiteralWithSign =
+ | MaskImageMaskradialfrommutedLiteral
+ | `-${MaskImageMaskradialfrommutedLiteral}`
+type MaskImageMaskradialfrompopoverLiteral =
+ `mask-radial-from-popover-${MaskImageRef78}`
+type MaskImageMaskradialfrompopoverLiteralWithSign =
+ | MaskImageMaskradialfrompopoverLiteral
+ | `-${MaskImageMaskradialfrompopoverLiteral}`
+type MaskImageMaskradialfromprimaryLiteral =
+ `mask-radial-from-primary-${MaskImageRef79}`
+type MaskImageMaskradialfromprimaryLiteralWithSign =
+ | MaskImageMaskradialfromprimaryLiteral
+ | `-${MaskImageMaskradialfromprimaryLiteral}`
+type MaskImageMaskradialfromsecondaryLiteral =
+ `mask-radial-from-secondary-${MaskImageRef80}`
+type MaskImageMaskradialfromsecondaryLiteralWithSign =
+ | MaskImageMaskradialfromsecondaryLiteral
+ | `-${MaskImageMaskradialfromsecondaryLiteral}`
+type MaskImageMaskradialfromsidebarLiteral =
+ `mask-radial-from-sidebar-${MaskImageRef8}`
+type MaskImageMaskradialfromsidebarLiteralWithSign =
+ | MaskImageMaskradialfromsidebarLiteral
+ | `-${MaskImageMaskradialfromsidebarLiteral}`
+type MaskImageMaskradialtoaccentLiteral =
+ `mask-radial-to-accent-${MaskImageRef81}`
+type MaskImageMaskradialtoaccentLiteralWithSign =
+ | MaskImageMaskradialtoaccentLiteral
+ | `-${MaskImageMaskradialtoaccentLiteral}`
+type MaskImageMaskradialtocardLiteral = `mask-radial-to-card-${MaskImageRef82}`
+type MaskImageMaskradialtocardLiteralWithSign =
+ | MaskImageMaskradialtocardLiteral
+ | `-${MaskImageMaskradialtocardLiteral}`
+type MaskImageMaskradialtochartLiteral =
+ `mask-radial-to-chart-${MaskImageRef83}`
+type MaskImageMaskradialtochartLiteralWithSign =
+ | MaskImageMaskradialtochartLiteral
+ | `-${MaskImageMaskradialtochartLiteral}`
+type MaskImageMaskradialtomutedLiteral =
+ `mask-radial-to-muted-${MaskImageRef84}`
+type MaskImageMaskradialtomutedLiteralWithSign =
+ | MaskImageMaskradialtomutedLiteral
+ | `-${MaskImageMaskradialtomutedLiteral}`
+type MaskImageMaskradialtopopoverLiteral =
+ `mask-radial-to-popover-${MaskImageRef85}`
+type MaskImageMaskradialtopopoverLiteralWithSign =
+ | MaskImageMaskradialtopopoverLiteral
+ | `-${MaskImageMaskradialtopopoverLiteral}`
+type MaskImageMaskradialtoprimaryLiteral =
+ `mask-radial-to-primary-${MaskImageRef86}`
+type MaskImageMaskradialtoprimaryLiteralWithSign =
+ | MaskImageMaskradialtoprimaryLiteral
+ | `-${MaskImageMaskradialtoprimaryLiteral}`
+type MaskImageMaskradialtosecondaryLiteral =
+ `mask-radial-to-secondary-${MaskImageRef87}`
+type MaskImageMaskradialtosecondaryLiteralWithSign =
+ | MaskImageMaskradialtosecondaryLiteral
+ | `-${MaskImageMaskradialtosecondaryLiteral}`
+type MaskImageMaskradialtosidebarLiteral =
+ `mask-radial-to-sidebar-${MaskImageRef8}`
+type MaskImageMaskradialtosidebarLiteralWithSign =
+ | MaskImageMaskradialtosidebarLiteral
+ | `-${MaskImageMaskradialtosidebarLiteral}`
+type MaskImageMasktfromaccentLiteral = `mask-t-from-accent-${MaskImageRef88}`
+type MaskImageMasktfromaccentLiteralWithSign =
+ | MaskImageMasktfromaccentLiteral
+ | `-${MaskImageMasktfromaccentLiteral}`
+type MaskImageMasktfromcardLiteral = `mask-t-from-card-${MaskImageRef89}`
+type MaskImageMasktfromcardLiteralWithSign =
+ | MaskImageMasktfromcardLiteral
+ | `-${MaskImageMasktfromcardLiteral}`
+type MaskImageMasktfromchartLiteral = `mask-t-from-chart-${MaskImageRef90}`
+type MaskImageMasktfromchartLiteralWithSign =
+ | MaskImageMasktfromchartLiteral
+ | `-${MaskImageMasktfromchartLiteral}`
+type MaskImageMasktfrommutedLiteral = `mask-t-from-muted-${MaskImageRef91}`
+type MaskImageMasktfrommutedLiteralWithSign =
+ | MaskImageMasktfrommutedLiteral
+ | `-${MaskImageMasktfrommutedLiteral}`
+type MaskImageMasktfrompopoverLiteral = `mask-t-from-popover-${MaskImageRef92}`
+type MaskImageMasktfrompopoverLiteralWithSign =
+ | MaskImageMasktfrompopoverLiteral
+ | `-${MaskImageMasktfrompopoverLiteral}`
+type MaskImageMasktfromprimaryLiteral = `mask-t-from-primary-${MaskImageRef93}`
+type MaskImageMasktfromprimaryLiteralWithSign =
+ | MaskImageMasktfromprimaryLiteral
+ | `-${MaskImageMasktfromprimaryLiteral}`
+type MaskImageMasktfromsecondaryLiteral =
+ `mask-t-from-secondary-${MaskImageRef94}`
+type MaskImageMasktfromsecondaryLiteralWithSign =
+ | MaskImageMasktfromsecondaryLiteral
+ | `-${MaskImageMasktfromsecondaryLiteral}`
+type MaskImageMasktfromsidebarLiteral = `mask-t-from-sidebar-${MaskImageRef8}`
+type MaskImageMasktfromsidebarLiteralWithSign =
+ | MaskImageMasktfromsidebarLiteral
+ | `-${MaskImageMasktfromsidebarLiteral}`
+type MaskImageMaskttoaccentLiteral = `mask-t-to-accent-${MaskImageRef95}`
+type MaskImageMaskttoaccentLiteralWithSign =
+ | MaskImageMaskttoaccentLiteral
+ | `-${MaskImageMaskttoaccentLiteral}`
+type MaskImageMaskttocardLiteral = `mask-t-to-card-${MaskImageRef96}`
+type MaskImageMaskttocardLiteralWithSign =
+ | MaskImageMaskttocardLiteral
+ | `-${MaskImageMaskttocardLiteral}`
+type MaskImageMaskttochartLiteral = `mask-t-to-chart-${MaskImageRef97}`
+type MaskImageMaskttochartLiteralWithSign =
+ | MaskImageMaskttochartLiteral
+ | `-${MaskImageMaskttochartLiteral}`
+type MaskImageMaskttomutedLiteral = `mask-t-to-muted-${MaskImageRef98}`
+type MaskImageMaskttomutedLiteralWithSign =
+ | MaskImageMaskttomutedLiteral
+ | `-${MaskImageMaskttomutedLiteral}`
+type MaskImageMaskttopopoverLiteral = `mask-t-to-popover-${MaskImageRef99}`
+type MaskImageMaskttopopoverLiteralWithSign =
+ | MaskImageMaskttopopoverLiteral
+ | `-${MaskImageMaskttopopoverLiteral}`
+type MaskImageMaskttoprimaryLiteral = `mask-t-to-primary-${MaskImageRef100}`
+type MaskImageMaskttoprimaryLiteralWithSign =
+ | MaskImageMaskttoprimaryLiteral
+ | `-${MaskImageMaskttoprimaryLiteral}`
+type MaskImageMaskttosecondaryLiteral = `mask-t-to-secondary-${MaskImageRef101}`
+type MaskImageMaskttosecondaryLiteralWithSign =
+ | MaskImageMaskttosecondaryLiteral
+ | `-${MaskImageMaskttosecondaryLiteral}`
+type MaskImageMaskttosidebarLiteral = `mask-t-to-sidebar-${MaskImageRef8}`
+type MaskImageMaskttosidebarLiteralWithSign =
+ | MaskImageMaskttosidebarLiteral
+ | `-${MaskImageMaskttosidebarLiteral}`
+type MaskImageMaskxfromaccentLiteral = `mask-x-from-accent-${MaskImageRef102}`
+type MaskImageMaskxfromaccentLiteralWithSign =
+ | MaskImageMaskxfromaccentLiteral
+ | `-${MaskImageMaskxfromaccentLiteral}`
+type MaskImageMaskxfromcardLiteral = `mask-x-from-card-${MaskImageRef103}`
+type MaskImageMaskxfromcardLiteralWithSign =
+ | MaskImageMaskxfromcardLiteral
+ | `-${MaskImageMaskxfromcardLiteral}`
+type MaskImageMaskxfromchartLiteral = `mask-x-from-chart-${MaskImageRef104}`
+type MaskImageMaskxfromchartLiteralWithSign =
+ | MaskImageMaskxfromchartLiteral
+ | `-${MaskImageMaskxfromchartLiteral}`
+type MaskImageMaskxfrommutedLiteral = `mask-x-from-muted-${MaskImageRef105}`
+type MaskImageMaskxfrommutedLiteralWithSign =
+ | MaskImageMaskxfrommutedLiteral
+ | `-${MaskImageMaskxfrommutedLiteral}`
+type MaskImageMaskxfrompopoverLiteral = `mask-x-from-popover-${MaskImageRef106}`
+type MaskImageMaskxfrompopoverLiteralWithSign =
+ | MaskImageMaskxfrompopoverLiteral
+ | `-${MaskImageMaskxfrompopoverLiteral}`
+type MaskImageMaskxfromprimaryLiteral = `mask-x-from-primary-${MaskImageRef107}`
+type MaskImageMaskxfromprimaryLiteralWithSign =
+ | MaskImageMaskxfromprimaryLiteral
+ | `-${MaskImageMaskxfromprimaryLiteral}`
+type MaskImageMaskxfromsecondaryLiteral =
+ `mask-x-from-secondary-${MaskImageRef108}`
+type MaskImageMaskxfromsecondaryLiteralWithSign =
+ | MaskImageMaskxfromsecondaryLiteral
+ | `-${MaskImageMaskxfromsecondaryLiteral}`
+type MaskImageMaskxfromsidebarLiteral = `mask-x-from-sidebar-${MaskImageRef8}`
+type MaskImageMaskxfromsidebarLiteralWithSign =
+ | MaskImageMaskxfromsidebarLiteral
+ | `-${MaskImageMaskxfromsidebarLiteral}`
+type MaskImageMaskxtoaccentLiteral = `mask-x-to-accent-${MaskImageRef109}`
+type MaskImageMaskxtoaccentLiteralWithSign =
+ | MaskImageMaskxtoaccentLiteral
+ | `-${MaskImageMaskxtoaccentLiteral}`
+type MaskImageMaskxtocardLiteral = `mask-x-to-card-${MaskImageRef110}`
+type MaskImageMaskxtocardLiteralWithSign =
+ | MaskImageMaskxtocardLiteral
+ | `-${MaskImageMaskxtocardLiteral}`
+type MaskImageMaskxtochartLiteral = `mask-x-to-chart-${MaskImageRef111}`
+type MaskImageMaskxtochartLiteralWithSign =
+ | MaskImageMaskxtochartLiteral
+ | `-${MaskImageMaskxtochartLiteral}`
+type MaskImageMaskxtomutedLiteral = `mask-x-to-muted-${MaskImageRef112}`
+type MaskImageMaskxtomutedLiteralWithSign =
+ | MaskImageMaskxtomutedLiteral
+ | `-${MaskImageMaskxtomutedLiteral}`
+type MaskImageMaskxtopopoverLiteral = `mask-x-to-popover-${MaskImageRef113}`
+type MaskImageMaskxtopopoverLiteralWithSign =
+ | MaskImageMaskxtopopoverLiteral
+ | `-${MaskImageMaskxtopopoverLiteral}`
+type MaskImageMaskxtoprimaryLiteral = `mask-x-to-primary-${MaskImageRef114}`
+type MaskImageMaskxtoprimaryLiteralWithSign =
+ | MaskImageMaskxtoprimaryLiteral
+ | `-${MaskImageMaskxtoprimaryLiteral}`
+type MaskImageMaskxtosecondaryLiteral = `mask-x-to-secondary-${MaskImageRef115}`
+type MaskImageMaskxtosecondaryLiteralWithSign =
+ | MaskImageMaskxtosecondaryLiteral
+ | `-${MaskImageMaskxtosecondaryLiteral}`
+type MaskImageMaskxtosidebarLiteral = `mask-x-to-sidebar-${MaskImageRef8}`
+type MaskImageMaskxtosidebarLiteralWithSign =
+ | MaskImageMaskxtosidebarLiteral
+ | `-${MaskImageMaskxtosidebarLiteral}`
+type MaskImageMaskyfromaccentLiteral = `mask-y-from-accent-${MaskImageRef116}`
+type MaskImageMaskyfromaccentLiteralWithSign =
+ | MaskImageMaskyfromaccentLiteral
+ | `-${MaskImageMaskyfromaccentLiteral}`
+type MaskImageMaskyfromcardLiteral = `mask-y-from-card-${MaskImageRef117}`
+type MaskImageMaskyfromcardLiteralWithSign =
+ | MaskImageMaskyfromcardLiteral
+ | `-${MaskImageMaskyfromcardLiteral}`
+type MaskImageMaskyfromchartLiteral = `mask-y-from-chart-${MaskImageRef118}`
+type MaskImageMaskyfromchartLiteralWithSign =
+ | MaskImageMaskyfromchartLiteral
+ | `-${MaskImageMaskyfromchartLiteral}`
+type MaskImageMaskyfrommutedLiteral = `mask-y-from-muted-${MaskImageRef119}`
+type MaskImageMaskyfrommutedLiteralWithSign =
+ | MaskImageMaskyfrommutedLiteral
+ | `-${MaskImageMaskyfrommutedLiteral}`
+type MaskImageMaskyfrompopoverLiteral = `mask-y-from-popover-${MaskImageRef120}`
+type MaskImageMaskyfrompopoverLiteralWithSign =
+ | MaskImageMaskyfrompopoverLiteral
+ | `-${MaskImageMaskyfrompopoverLiteral}`
+type MaskImageMaskyfromprimaryLiteral = `mask-y-from-primary-${MaskImageRef121}`
+type MaskImageMaskyfromprimaryLiteralWithSign =
+ | MaskImageMaskyfromprimaryLiteral
+ | `-${MaskImageMaskyfromprimaryLiteral}`
+type MaskImageMaskyfromsecondaryLiteral =
+ `mask-y-from-secondary-${MaskImageRef122}`
+type MaskImageMaskyfromsecondaryLiteralWithSign =
+ | MaskImageMaskyfromsecondaryLiteral
+ | `-${MaskImageMaskyfromsecondaryLiteral}`
+type MaskImageMaskyfromsidebarLiteral = `mask-y-from-sidebar-${MaskImageRef8}`
+type MaskImageMaskyfromsidebarLiteralWithSign =
+ | MaskImageMaskyfromsidebarLiteral
+ | `-${MaskImageMaskyfromsidebarLiteral}`
+type MaskImageMaskytoaccentLiteral = `mask-y-to-accent-${MaskImageRef123}`
+type MaskImageMaskytoaccentLiteralWithSign =
+ | MaskImageMaskytoaccentLiteral
+ | `-${MaskImageMaskytoaccentLiteral}`
+type MaskImageMaskytocardLiteral = `mask-y-to-card-${MaskImageRef124}`
+type MaskImageMaskytocardLiteralWithSign =
+ | MaskImageMaskytocardLiteral
+ | `-${MaskImageMaskytocardLiteral}`
+type MaskImageMaskytochartLiteral = `mask-y-to-chart-${MaskImageRef125}`
+type MaskImageMaskytochartLiteralWithSign =
+ | MaskImageMaskytochartLiteral
+ | `-${MaskImageMaskytochartLiteral}`
+type MaskImageMaskytomutedLiteral = `mask-y-to-muted-${MaskImageRef126}`
+type MaskImageMaskytomutedLiteralWithSign =
+ | MaskImageMaskytomutedLiteral
+ | `-${MaskImageMaskytomutedLiteral}`
+type MaskImageMaskytopopoverLiteral = `mask-y-to-popover-${MaskImageRef127}`
+type MaskImageMaskytopopoverLiteralWithSign =
+ | MaskImageMaskytopopoverLiteral
+ | `-${MaskImageMaskytopopoverLiteral}`
+type MaskImageMaskytoprimaryLiteral = `mask-y-to-primary-${MaskImageRef128}`
+type MaskImageMaskytoprimaryLiteralWithSign =
+ | MaskImageMaskytoprimaryLiteral
+ | `-${MaskImageMaskytoprimaryLiteral}`
+type MaskImageMaskytosecondaryLiteral = `mask-y-to-secondary-${MaskImageRef129}`
+type MaskImageMaskytosecondaryLiteralWithSign =
+ | MaskImageMaskytosecondaryLiteral
+ | `-${MaskImageMaskytosecondaryLiteral}`
+type MaskImageMaskytosidebarLiteral = `mask-y-to-sidebar-${MaskImageRef8}`
+type MaskImageMaskytosidebarLiteralWithSign =
+ | MaskImageMaskytosidebarLiteral
+ | `-${MaskImageMaskytosidebarLiteral}`
+type MaskImageMaskradialatLiteral = `mask-radial-at-${MaskImageRef130}`
+type MaskImageMaskradialatLiteralWithSign =
+ | MaskImageMaskradialatLiteral
+ | `-${MaskImageMaskradialatLiteral}`
+type MaskImageMasklinearfromLiteral = `mask-linear-from-${MaskImageRef131}`
+type MaskImageMasklinearfromLiteralWithSign =
+ | MaskImageMasklinearfromLiteral
+ | `-${MaskImageMasklinearfromLiteral}`
+type MaskImageMaskradialLiteral = `mask-radial-${MaskImageRef132}`
+type MaskImageMaskradialLiteralWithSign =
+ | MaskImageMaskradialLiteral
+ | `-${MaskImageMaskradialLiteral}`
+type MaskImageMasklinearLiteral = `mask-linear-${MaskImageRef133}`
+type MaskImageMasklinearLiteralWithSign =
+ | MaskImageMasklinearLiteral
+ | `-${MaskImageMasklinearLiteral}`
+type MaskImageMaskLiteral = `mask-${MaskImageRef134}`
+type MaskImageMaskLiteralWithSign =
+ | MaskImageMaskLiteral
+ | `-${MaskImageMaskLiteral}`
+type MaskImageMaskconicfromLiteral = `mask-conic-from-${MaskImageRef131}`
+type MaskImageMaskconicfromLiteralWithSign =
+ | MaskImageMaskconicfromLiteral
+ | `-${MaskImageMaskconicfromLiteral}`
+type MaskImageMaskconicLiteral = `mask-conic-${MaskImageRef133}`
+type MaskImageMaskconicLiteralWithSign =
+ | MaskImageMaskconicLiteral
+ | `-${MaskImageMaskconicLiteral}`
+type MaskImageMaskconictoLiteral = `mask-conic-to-${MaskImageRef131}`
+type MaskImageMaskconictoLiteralWithSign =
+ | MaskImageMaskconictoLiteral
+ | `-${MaskImageMaskconictoLiteral}`
+type MaskImageMasklineartoLiteral = `mask-linear-to-${MaskImageRef131}`
+type MaskImageMasklineartoLiteralWithSign =
+ | MaskImageMasklineartoLiteral
+ | `-${MaskImageMasklineartoLiteral}`
+type MaskImageMaskbfromLiteral = `mask-b-from-${MaskImageRef131}`
+type MaskImageMaskbfromLiteralWithSign =
+ | MaskImageMaskbfromLiteral
+ | `-${MaskImageMaskbfromLiteral}`
+type MaskImageMaskbtoLiteral = `mask-b-to-${MaskImageRef131}`
+type MaskImageMaskbtoLiteralWithSign =
+ | MaskImageMaskbtoLiteral
+ | `-${MaskImageMaskbtoLiteral}`
+type MaskImageMasklfromLiteral = `mask-l-from-${MaskImageRef131}`
+type MaskImageMasklfromLiteralWithSign =
+ | MaskImageMasklfromLiteral
+ | `-${MaskImageMasklfromLiteral}`
+type MaskImageMaskltoLiteral = `mask-l-to-${MaskImageRef131}`
+type MaskImageMaskltoLiteralWithSign =
+ | MaskImageMaskltoLiteral
+ | `-${MaskImageMaskltoLiteral}`
+type MaskImageMaskrfromLiteral = `mask-r-from-${MaskImageRef131}`
+type MaskImageMaskrfromLiteralWithSign =
+ | MaskImageMaskrfromLiteral
+ | `-${MaskImageMaskrfromLiteral}`
+type MaskImageMaskrtoLiteral = `mask-r-to-${MaskImageRef131}`
+type MaskImageMaskrtoLiteralWithSign =
+ | MaskImageMaskrtoLiteral
+ | `-${MaskImageMaskrtoLiteral}`
+type MaskImageMaskradialfromLiteral = `mask-radial-from-${MaskImageRef131}`
+type MaskImageMaskradialfromLiteralWithSign =
+ | MaskImageMaskradialfromLiteral
+ | `-${MaskImageMaskradialfromLiteral}`
+type MaskImageMaskradialtoLiteral = `mask-radial-to-${MaskImageRef131}`
+type MaskImageMaskradialtoLiteralWithSign =
+ | MaskImageMaskradialtoLiteral
+ | `-${MaskImageMaskradialtoLiteral}`
+type MaskImageMasktfromLiteral = `mask-t-from-${MaskImageRef131}`
+type MaskImageMasktfromLiteralWithSign =
+ | MaskImageMasktfromLiteral
+ | `-${MaskImageMasktfromLiteral}`
+type MaskImageMaskttoLiteral = `mask-t-to-${MaskImageRef131}`
+type MaskImageMaskttoLiteralWithSign =
+ | MaskImageMaskttoLiteral
+ | `-${MaskImageMaskttoLiteral}`
+type MaskImageMaskxfromLiteral = `mask-x-from-${MaskImageRef131}`
+type MaskImageMaskxfromLiteralWithSign =
+ | MaskImageMaskxfromLiteral
+ | `-${MaskImageMaskxfromLiteral}`
+type MaskImageMaskxtoLiteral = `mask-x-to-${MaskImageRef131}`
+type MaskImageMaskxtoLiteralWithSign =
+ | MaskImageMaskxtoLiteral
+ | `-${MaskImageMaskxtoLiteral}`
+type MaskImageMaskyfromLiteral = `mask-y-from-${MaskImageRef131}`
+type MaskImageMaskyfromLiteralWithSign =
+ | MaskImageMaskyfromLiteral
+ | `-${MaskImageMaskyfromLiteral}`
+type MaskImageMaskytoLiteral = `mask-y-to-${MaskImageRef131}`
+type MaskImageMaskytoLiteralWithSign =
+ | MaskImageMaskytoLiteral
+ | `-${MaskImageMaskytoLiteral}`
+type MaskImageValue =
+ | MaskImageMaskconicfromaccentLiteralWithSign
+ | MaskImageMaskconicfromcardLiteralWithSign
+ | MaskImageMaskconicfromchartLiteralWithSign
+ | MaskImageMaskconicfrommutedLiteralWithSign
+ | MaskImageMaskconicfrompopoverLiteralWithSign
+ | MaskImageMaskconicfromprimaryLiteralWithSign
+ | MaskImageMaskconicfromsecondaryLiteralWithSign
+ | MaskImageMaskconicfromsidebarLiteralWithSign
+ | MaskImageMaskconictoaccentLiteralWithSign
+ | MaskImageMaskconictocardLiteralWithSign
+ | MaskImageMaskconictochartLiteralWithSign
+ | MaskImageMaskconictomutedLiteralWithSign
+ | MaskImageMaskconictopopoverLiteralWithSign
+ | MaskImageMaskconictoprimaryLiteralWithSign
+ | MaskImageMaskconictosecondaryLiteralWithSign
+ | MaskImageMaskconictosidebarLiteralWithSign
+ | MaskImageMasklinearfromaccentLiteralWithSign
+ | MaskImageMasklinearfromcardLiteralWithSign
+ | MaskImageMasklinearfromchartLiteralWithSign
+ | MaskImageMasklinearfrommutedLiteralWithSign
+ | MaskImageMasklinearfrompopoverLiteralWithSign
+ | MaskImageMasklinearfromprimaryLiteralWithSign
+ | MaskImageMasklinearfromsecondaryLiteralWithSign
+ | MaskImageMasklinearfromsidebarLiteralWithSign
+ | MaskImageMasklineartoaccentLiteralWithSign
+ | MaskImageMasklineartocardLiteralWithSign
+ | MaskImageMasklineartochartLiteralWithSign
+ | MaskImageMasklineartomutedLiteralWithSign
+ | MaskImageMasklineartopopoverLiteralWithSign
+ | MaskImageMasklineartoprimaryLiteralWithSign
+ | MaskImageMasklineartosecondaryLiteralWithSign
+ | MaskImageMasklineartosidebarLiteralWithSign
+ | MaskImageMaskbfromaccentLiteralWithSign
+ | MaskImageMaskbfromcardLiteralWithSign
+ | MaskImageMaskbfromchartLiteralWithSign
+ | MaskImageMaskbfrommutedLiteralWithSign
+ | MaskImageMaskbfrompopoverLiteralWithSign
+ | MaskImageMaskbfromprimaryLiteralWithSign
+ | MaskImageMaskbfromsecondaryLiteralWithSign
+ | MaskImageMaskbfromsidebarLiteralWithSign
+ | MaskImageMaskbtoaccentLiteralWithSign
+ | MaskImageMaskbtocardLiteralWithSign
+ | MaskImageMaskbtochartLiteralWithSign
+ | MaskImageMaskbtomutedLiteralWithSign
+ | MaskImageMaskbtopopoverLiteralWithSign
+ | MaskImageMaskbtoprimaryLiteralWithSign
+ | MaskImageMaskbtosecondaryLiteralWithSign
+ | MaskImageMaskbtosidebarLiteralWithSign
+ | MaskImageMasklfromaccentLiteralWithSign
+ | MaskImageMasklfromcardLiteralWithSign
+ | MaskImageMasklfromchartLiteralWithSign
+ | MaskImageMasklfrommutedLiteralWithSign
+ | MaskImageMasklfrompopoverLiteralWithSign
+ | MaskImageMasklfromprimaryLiteralWithSign
+ | MaskImageMasklfromsecondaryLiteralWithSign
+ | MaskImageMasklfromsidebarLiteralWithSign
+ | MaskImageMaskltoaccentLiteralWithSign
+ | MaskImageMaskltocardLiteralWithSign
+ | MaskImageMaskltochartLiteralWithSign
+ | MaskImageMaskltomutedLiteralWithSign
+ | MaskImageMaskltopopoverLiteralWithSign
+ | MaskImageMaskltoprimaryLiteralWithSign
+ | MaskImageMaskltosecondaryLiteralWithSign
+ | MaskImageMaskltosidebarLiteralWithSign
+ | MaskImageMaskrfromaccentLiteralWithSign
+ | MaskImageMaskrfromcardLiteralWithSign
+ | MaskImageMaskrfromchartLiteralWithSign
+ | MaskImageMaskrfrommutedLiteralWithSign
+ | MaskImageMaskrfrompopoverLiteralWithSign
+ | MaskImageMaskrfromprimaryLiteralWithSign
+ | MaskImageMaskrfromsecondaryLiteralWithSign
+ | MaskImageMaskrfromsidebarLiteralWithSign
+ | MaskImageMaskrtoaccentLiteralWithSign
+ | MaskImageMaskrtocardLiteralWithSign
+ | MaskImageMaskrtochartLiteralWithSign
+ | MaskImageMaskrtomutedLiteralWithSign
+ | MaskImageMaskrtopopoverLiteralWithSign
+ | MaskImageMaskrtoprimaryLiteralWithSign
+ | MaskImageMaskrtosecondaryLiteralWithSign
+ | MaskImageMaskrtosidebarLiteralWithSign
+ | MaskImageMaskradialatbottomLiteralWithSign
+ | MaskImageMaskradialattopLiteralWithSign
+ | MaskImageMaskradialfromaccentLiteralWithSign
+ | MaskImageMaskradialfromcardLiteralWithSign
+ | MaskImageMaskradialfromchartLiteralWithSign
+ | MaskImageMaskradialfrommutedLiteralWithSign
+ | MaskImageMaskradialfrompopoverLiteralWithSign
+ | MaskImageMaskradialfromprimaryLiteralWithSign
+ | MaskImageMaskradialfromsecondaryLiteralWithSign
+ | MaskImageMaskradialfromsidebarLiteralWithSign
+ | MaskImageMaskradialtoaccentLiteralWithSign
+ | MaskImageMaskradialtocardLiteralWithSign
+ | MaskImageMaskradialtochartLiteralWithSign
+ | MaskImageMaskradialtomutedLiteralWithSign
+ | MaskImageMaskradialtopopoverLiteralWithSign
+ | MaskImageMaskradialtoprimaryLiteralWithSign
+ | MaskImageMaskradialtosecondaryLiteralWithSign
+ | MaskImageMaskradialtosidebarLiteralWithSign
+ | MaskImageMasktfromaccentLiteralWithSign
+ | MaskImageMasktfromcardLiteralWithSign
+ | MaskImageMasktfromchartLiteralWithSign
+ | MaskImageMasktfrommutedLiteralWithSign
+ | MaskImageMasktfrompopoverLiteralWithSign
+ | MaskImageMasktfromprimaryLiteralWithSign
+ | MaskImageMasktfromsecondaryLiteralWithSign
+ | MaskImageMasktfromsidebarLiteralWithSign
+ | MaskImageMaskttoaccentLiteralWithSign
+ | MaskImageMaskttocardLiteralWithSign
+ | MaskImageMaskttochartLiteralWithSign
+ | MaskImageMaskttomutedLiteralWithSign
+ | MaskImageMaskttopopoverLiteralWithSign
+ | MaskImageMaskttoprimaryLiteralWithSign
+ | MaskImageMaskttosecondaryLiteralWithSign
+ | MaskImageMaskttosidebarLiteralWithSign
+ | MaskImageMaskxfromaccentLiteralWithSign
+ | MaskImageMaskxfromcardLiteralWithSign
+ | MaskImageMaskxfromchartLiteralWithSign
+ | MaskImageMaskxfrommutedLiteralWithSign
+ | MaskImageMaskxfrompopoverLiteralWithSign
+ | MaskImageMaskxfromprimaryLiteralWithSign
+ | MaskImageMaskxfromsecondaryLiteralWithSign
+ | MaskImageMaskxfromsidebarLiteralWithSign
+ | MaskImageMaskxtoaccentLiteralWithSign
+ | MaskImageMaskxtocardLiteralWithSign
+ | MaskImageMaskxtochartLiteralWithSign
+ | MaskImageMaskxtomutedLiteralWithSign
+ | MaskImageMaskxtopopoverLiteralWithSign
+ | MaskImageMaskxtoprimaryLiteralWithSign
+ | MaskImageMaskxtosecondaryLiteralWithSign
+ | MaskImageMaskxtosidebarLiteralWithSign
+ | MaskImageMaskyfromaccentLiteralWithSign
+ | MaskImageMaskyfromcardLiteralWithSign
+ | MaskImageMaskyfromchartLiteralWithSign
+ | MaskImageMaskyfrommutedLiteralWithSign
+ | MaskImageMaskyfrompopoverLiteralWithSign
+ | MaskImageMaskyfromprimaryLiteralWithSign
+ | MaskImageMaskyfromsecondaryLiteralWithSign
+ | MaskImageMaskyfromsidebarLiteralWithSign
+ | MaskImageMaskytoaccentLiteralWithSign
+ | MaskImageMaskytocardLiteralWithSign
+ | MaskImageMaskytochartLiteralWithSign
+ | MaskImageMaskytomutedLiteralWithSign
+ | MaskImageMaskytopopoverLiteralWithSign
+ | MaskImageMaskytoprimaryLiteralWithSign
+ | MaskImageMaskytosecondaryLiteralWithSign
+ | MaskImageMaskytosidebarLiteralWithSign
+ | MaskImageMaskradialatLiteralWithSign
+ | MaskImageMasklinearfromLiteralWithSign
+ | MaskImageMaskradialLiteralWithSign
+ | MaskImageMasklinearLiteralWithSign
+ | MaskImageMaskLiteralWithSign
+ | MaskImageMaskconicfromLiteralWithSign
+ | MaskImageMaskconicLiteralWithSign
+ | MaskImageMaskconictoLiteralWithSign
+ | MaskImageMasklineartoLiteralWithSign
+ | MaskImageMaskbfromLiteralWithSign
+ | MaskImageMaskbtoLiteralWithSign
+ | MaskImageMasklfromLiteralWithSign
+ | MaskImageMaskltoLiteralWithSign
+ | MaskImageMaskrfromLiteralWithSign
+ | MaskImageMaskrtoLiteralWithSign
+ | MaskImageMaskradialfromLiteralWithSign
+ | MaskImageMaskradialtoLiteralWithSign
+ | MaskImageMasktfromLiteralWithSign
+ | MaskImageMaskttoLiteralWithSign
+ | MaskImageMaskxfromLiteralWithSign
+ | MaskImageMaskxtoLiteralWithSign
+ | MaskImageMaskyfromLiteralWithSign
+ | MaskImageMaskytoLiteralWithSign
+interface TailwindMaskImage {
+ /**
+ * `MaskImage`
+ *
+ * Utilities for controlling an element's mask image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-image Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-image , MDN docs}
+ */
+ maskImage: MaskImageValue
+}
+type OrderLiteral = `order-${OrderRef1}`
+type OrderLiteralWithSign = OrderLiteral | `-${OrderLiteral}`
+type OrderValue = OrderLiteralWithSign
+interface TailwindOrder {
+ /**
+ * `Order`
+ *
+ * Utilities for controlling the order of flex and grid items.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/order Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/order , MDN docs}
+ */
+ order: OrderValue
+}
+type OutlineOffsetLiteral = `outline-offset-${OutlineOffsetRef1}`
+type OutlineOffsetLiteralWithSign =
+ | OutlineOffsetLiteral
+ | `-${OutlineOffsetLiteral}`
+type OutlineOffsetValue = OutlineOffsetLiteralWithSign
+interface TailwindOutlineOffset {
+ /**
+ * `OutlineOffset`
+ *
+ * Utilities for controlling the offset of an element's outline.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/outline-offset Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/outline-offset , MDN docs}
+ */
+ outlineOffset: OutlineOffsetValue
+}
+type RightLiteral = `right-${RightRef1}`
+type RightLiteralWithSign = RightLiteral | `-${RightLiteral}`
+type RightValue = RightLiteralWithSign
+interface TailwindRight {
+ /**
+ * `Right`
+ *
+ * Utilities for controlling the placement of positioned elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/top-right-bottom-left Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/right , MDN docs}
+ */
+ right: RightValue
+}
+type RotateXLiteral = `rotate-x-${RotateRef1}`
+type RotateXLiteralWithSign = RotateXLiteral | `-${RotateXLiteral}`
+type RotateYLiteral = `rotate-y-${RotateRef1}`
+type RotateYLiteralWithSign = RotateYLiteral | `-${RotateYLiteral}`
+type RotateZLiteral = `rotate-z-${RotateRef1}`
+type RotateZLiteralWithSign = RotateZLiteral | `-${RotateZLiteral}`
+type RotateLiteral = `rotate-${RotateRef1}` | 'rotate-none'
+type RotateLiteralWithSign = RotateLiteral | `-${RotateLiteral}`
+type RotateValue =
+ | RotateXLiteralWithSign
+ | RotateYLiteralWithSign
+ | RotateZLiteralWithSign
+ | RotateLiteralWithSign
+interface TailwindRotate {
+ /**
+ * `Rotate`
+ *
+ * Utilities for rotating elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/rotate Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/rotate , MDN docs}
+ */
+ rotate: RotateValue
+}
+type GridRowRowendLiteral = `row-end-${GridRowRef1}`
+type GridRowRowendLiteralWithSign =
+ | GridRowRowendLiteral
+ | `-${GridRowRowendLiteral}`
+type GridRowRowstartLiteral = `row-start-${GridRowRef1}`
+type GridRowRowstartLiteralWithSign =
+ | GridRowRowstartLiteral
+ | `-${GridRowRowstartLiteral}`
+type GridRowRowspanLiteral = `row-span-${GridRowRef2}`
+type GridRowRowspanLiteralWithSign =
+ | GridRowRowspanLiteral
+ | `-${GridRowRowspanLiteral}`
+type GridRowRowLiteral = `row-${GridRowRef3}`
+type GridRowRowLiteralWithSign = GridRowRowLiteral | `-${GridRowRowLiteral}`
+type GridRowValue =
+ | GridRowRowendLiteralWithSign
+ | GridRowRowstartLiteralWithSign
+ | GridRowRowspanLiteralWithSign
+ | GridRowRowLiteralWithSign
+interface TailwindGridRow {
+ /**
+ * `GridRow`
+ *
+ * Utilities for controlling how elements are sized and placed across grid
+ * rows.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-row Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-row , MDN docs}
+ */
+ gridRow: GridRowValue
+}
+type ScaleXLiteral = `scale-x-${ScaleRef1}`
+type ScaleXLiteralWithSign = ScaleXLiteral | `-${ScaleXLiteral}`
+type ScaleYLiteral = `scale-y-${ScaleRef1}`
+type ScaleYLiteralWithSign = ScaleYLiteral | `-${ScaleYLiteral}`
+type ScaleZLiteral = `scale-z-${ScaleRef1}`
+type ScaleZLiteralWithSign = ScaleZLiteral | `-${ScaleZLiteral}`
+type ScaleLiteral = `scale-${ScaleRef1}` | 'scale-3d' | 'scale-none'
+type ScaleLiteralWithSign = ScaleLiteral | `-${ScaleLiteral}`
+type ScaleValue =
+ | ScaleXLiteralWithSign
+ | ScaleYLiteralWithSign
+ | ScaleZLiteralWithSign
+ | ScaleLiteralWithSign
+interface TailwindScale {
+ /**
+ * `Scale`
+ *
+ * Utilities for scaling elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scale Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scale , MDN docs}
+ */
+ scale: ScaleValue
+}
+type ScrollMarginScrollmLiteral = `scroll-m-${ScrollMarginRef1}`
+type ScrollMarginScrollmLiteralWithSign =
+ | ScrollMarginScrollmLiteral
+ | `-${ScrollMarginScrollmLiteral}`
+type ScrollMarginScrollmbLiteral = `scroll-mb-${ScrollMarginRef1}`
+type ScrollMarginScrollmbLiteralWithSign =
+ | ScrollMarginScrollmbLiteral
+ | `-${ScrollMarginScrollmbLiteral}`
+type ScrollMarginScrollmeLiteral = `scroll-me-${ScrollMarginRef1}`
+type ScrollMarginScrollmeLiteralWithSign =
+ | ScrollMarginScrollmeLiteral
+ | `-${ScrollMarginScrollmeLiteral}`
+type ScrollMarginScrollmlLiteral = `scroll-ml-${ScrollMarginRef1}`
+type ScrollMarginScrollmlLiteralWithSign =
+ | ScrollMarginScrollmlLiteral
+ | `-${ScrollMarginScrollmlLiteral}`
+type ScrollMarginScrollmrLiteral = `scroll-mr-${ScrollMarginRef1}`
+type ScrollMarginScrollmrLiteralWithSign =
+ | ScrollMarginScrollmrLiteral
+ | `-${ScrollMarginScrollmrLiteral}`
+type ScrollMarginScrollmsLiteral = `scroll-ms-${ScrollMarginRef1}`
+type ScrollMarginScrollmsLiteralWithSign =
+ | ScrollMarginScrollmsLiteral
+ | `-${ScrollMarginScrollmsLiteral}`
+type ScrollMarginScrollmtLiteral = `scroll-mt-${ScrollMarginRef1}`
+type ScrollMarginScrollmtLiteralWithSign =
+ | ScrollMarginScrollmtLiteral
+ | `-${ScrollMarginScrollmtLiteral}`
+type ScrollMarginScrollmxLiteral = `scroll-mx-${ScrollMarginRef1}`
+type ScrollMarginScrollmxLiteralWithSign =
+ | ScrollMarginScrollmxLiteral
+ | `-${ScrollMarginScrollmxLiteral}`
+type ScrollMarginScrollmyLiteral = `scroll-my-${ScrollMarginRef1}`
+type ScrollMarginScrollmyLiteralWithSign =
+ | ScrollMarginScrollmyLiteral
+ | `-${ScrollMarginScrollmyLiteral}`
+type ScrollMarginValue =
+ | ScrollMarginScrollmLiteralWithSign
+ | ScrollMarginScrollmbLiteralWithSign
+ | ScrollMarginScrollmeLiteralWithSign
+ | ScrollMarginScrollmlLiteralWithSign
+ | ScrollMarginScrollmrLiteralWithSign
+ | ScrollMarginScrollmsLiteralWithSign
+ | ScrollMarginScrollmtLiteralWithSign
+ | ScrollMarginScrollmxLiteralWithSign
+ | ScrollMarginScrollmyLiteralWithSign
+interface TailwindScrollMargin {
+ /**
+ * `ScrollMargin`
+ *
+ * Utilities for controlling the scroll offset around items in a snap
+ * container.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scroll-margin Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-margin , MDN docs}
+ */
+ scrollMargin: ScrollMarginValue
+}
+type SkewXLiteral = `skew-x-${SkewRef1}`
+type SkewXLiteralWithSign = SkewXLiteral | `-${SkewXLiteral}`
+type SkewYLiteral = `skew-y-${SkewRef1}`
+type SkewYLiteralWithSign = SkewYLiteral | `-${SkewYLiteral}`
+type SkewLiteral = `skew-${SkewRef1}`
+type SkewLiteralWithSign = SkewLiteral | `-${SkewLiteral}`
+type SkewValue =
+ | SkewXLiteralWithSign
+ | SkewYLiteralWithSign
+ | SkewLiteralWithSign
+interface TailwindSkew {
+ /**
+ * `Skew`
+ *
+ * Utilities for skewing elements with transform.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/skew Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/skew , MDN docs}
+ */
+ skew: SkewValue
+}
+type CustomSpaceLiteral = `space-${CustomRef1}`
+type CustomSpaceLiteralWithSign = CustomSpaceLiteral | `-${CustomSpaceLiteral}`
+type CustomSpinLiteral = `spin-${CustomRef2}`
+type CustomSpinLiteralWithSign = CustomSpinLiteral | `-${CustomSpinLiteral}`
+type CustomZoominLiteral = `zoom-in-${CustomRef3}`
+type CustomZoominLiteralWithSign =
+ | CustomZoominLiteral
+ | `-${CustomZoominLiteral}`
+type CustomZoomoutLiteral = `zoom-out-${CustomRef3}`
+type CustomZoomoutLiteralWithSign =
+ | CustomZoomoutLiteral
+ | `-${CustomZoomoutLiteral}`
+type CustomBlurinLiteral = `blur-in-${CustomRef4}`
+type CustomBlurinLiteralWithSign =
+ | CustomBlurinLiteral
+ | `-${CustomBlurinLiteral}`
+type CustomBluroutLiteral = `blur-out-${CustomRef4}`
+type CustomBluroutLiteralWithSign =
+ | CustomBluroutLiteral
+ | `-${CustomBluroutLiteral}`
+type CustomFadeinLiteral = `fade-in-${CustomRef3}`
+type CustomFadeinLiteralWithSign =
+ | CustomFadeinLiteral
+ | `-${CustomFadeinLiteral}`
+type CustomFadeoutLiteral = `fade-out-${CustomRef3}`
+type CustomFadeoutLiteralWithSign =
+ | CustomFadeoutLiteral
+ | `-${CustomFadeoutLiteral}`
+type CustomSlideinfrombottomLiteral =
+ | `slide-in-from-bottom-${CustomRef3}`
+ | 'slide-in-from-bottom-full'
+type CustomSlideinfrombottomLiteralWithSign =
+ | CustomSlideinfrombottomLiteral
+ | `-${CustomSlideinfrombottomLiteral}`
+type CustomSlideinfromendLiteral =
+ | `slide-in-from-end-${CustomRef3}`
+ | 'slide-in-from-end-full'
+type CustomSlideinfromendLiteralWithSign =
+ | CustomSlideinfromendLiteral
+ | `-${CustomSlideinfromendLiteral}`
+type CustomSlideinfromleftLiteral =
+ | `slide-in-from-left-${CustomRef3}`
+ | 'slide-in-from-left-full'
+type CustomSlideinfromleftLiteralWithSign =
+ | CustomSlideinfromleftLiteral
+ | `-${CustomSlideinfromleftLiteral}`
+type CustomSlideinfromrightLiteral =
+ | `slide-in-from-right-${CustomRef3}`
+ | 'slide-in-from-right-full'
+type CustomSlideinfromrightLiteralWithSign =
+ | CustomSlideinfromrightLiteral
+ | `-${CustomSlideinfromrightLiteral}`
+type CustomSlideinfromstartLiteral =
+ | `slide-in-from-start-${CustomRef3}`
+ | 'slide-in-from-start-full'
+type CustomSlideinfromstartLiteralWithSign =
+ | CustomSlideinfromstartLiteral
+ | `-${CustomSlideinfromstartLiteral}`
+type CustomSlideinfromtopLiteral =
+ | `slide-in-from-top-${CustomRef3}`
+ | 'slide-in-from-top-full'
+type CustomSlideinfromtopLiteralWithSign =
+ | CustomSlideinfromtopLiteral
+ | `-${CustomSlideinfromtopLiteral}`
+type CustomSlideouttobottomLiteral =
+ | `slide-out-to-bottom-${CustomRef3}`
+ | 'slide-out-to-bottom-full'
+type CustomSlideouttobottomLiteralWithSign =
+ | CustomSlideouttobottomLiteral
+ | `-${CustomSlideouttobottomLiteral}`
+type CustomSlideouttoendLiteral =
+ | `slide-out-to-end-${CustomRef3}`
+ | 'slide-out-to-end-full'
+type CustomSlideouttoendLiteralWithSign =
+ | CustomSlideouttoendLiteral
+ | `-${CustomSlideouttoendLiteral}`
+type CustomSlideouttoleftLiteral =
+ | `slide-out-to-left-${CustomRef3}`
+ | 'slide-out-to-left-full'
+type CustomSlideouttoleftLiteralWithSign =
+ | CustomSlideouttoleftLiteral
+ | `-${CustomSlideouttoleftLiteral}`
+type CustomSlideouttorightLiteral =
+ | `slide-out-to-right-${CustomRef3}`
+ | 'slide-out-to-right-full'
+type CustomSlideouttorightLiteralWithSign =
+ | CustomSlideouttorightLiteral
+ | `-${CustomSlideouttorightLiteral}`
+type CustomSlideouttostartLiteral =
+ | `slide-out-to-start-${CustomRef3}`
+ | 'slide-out-to-start-full'
+type CustomSlideouttostartLiteralWithSign =
+ | CustomSlideouttostartLiteral
+ | `-${CustomSlideouttostartLiteral}`
+type CustomSlideouttotopLiteral =
+ | `slide-out-to-top-${CustomRef3}`
+ | 'slide-out-to-top-full'
+type CustomSlideouttotopLiteralWithSign =
+ | CustomSlideouttotopLiteral
+ | `-${CustomSlideouttotopLiteral}`
+type CustomZoomLiteral = `zoom-${CustomRef5}`
+type CustomZoomLiteralWithSign = CustomZoomLiteral | `-${CustomZoomLiteral}`
+type CustomBlurLiteral = `blur-${CustomRef6}`
+type CustomBlurLiteralWithSign = CustomBlurLiteral | `-${CustomBlurLiteral}`
+type CustomFadeLiteral = `fade-${CustomRef7}`
+type CustomFadeLiteralWithSign = CustomFadeLiteral | `-${CustomFadeLiteral}`
+type CustomSlideinfromLiteral = `slide-in-from-${CustomRef8}`
+type CustomSlideinfromLiteralWithSign =
+ | CustomSlideinfromLiteral
+ | `-${CustomSlideinfromLiteral}`
+type CustomSlideouttoLiteral = `slide-out-to-${CustomRef8}`
+type CustomSlideouttoLiteralWithSign =
+ | CustomSlideouttoLiteral
+ | `-${CustomSlideouttoLiteral}`
+type CustomValue =
+ | 'fd-scroll-container'
+ | 'fd-step'
+ | 'fd-steps'
+ | 'no-scrollbar'
+ | 'prose'
+ | 'prose-no-margin'
+ | CustomSpaceLiteralWithSign
+ | CustomSpinLiteralWithSign
+ | CustomZoominLiteralWithSign
+ | CustomZoomoutLiteralWithSign
+ | CustomBlurinLiteralWithSign
+ | CustomBluroutLiteralWithSign
+ | CustomFadeinLiteralWithSign
+ | CustomFadeoutLiteralWithSign
+ | CustomSlideinfrombottomLiteralWithSign
+ | CustomSlideinfromendLiteralWithSign
+ | CustomSlideinfromleftLiteralWithSign
+ | CustomSlideinfromrightLiteralWithSign
+ | CustomSlideinfromstartLiteralWithSign
+ | CustomSlideinfromtopLiteralWithSign
+ | CustomSlideouttobottomLiteralWithSign
+ | CustomSlideouttoendLiteralWithSign
+ | CustomSlideouttoleftLiteralWithSign
+ | CustomSlideouttorightLiteralWithSign
+ | CustomSlideouttostartLiteralWithSign
+ | CustomSlideouttotopLiteralWithSign
+ | CustomZoomLiteralWithSign
+ | CustomBlurLiteralWithSign
+ | CustomFadeLiteralWithSign
+ | CustomSlideinfromLiteralWithSign
+ | CustomSlideouttoLiteralWithSign
+interface TailwindCustom {
+ /**
+ * `Custom`
+ *
+ * Custom properties, defined by user.
+ */
+ custom: CustomValue
+}
+type StartLiteral = `start-${StartRef1}`
+type StartLiteralWithSign = StartLiteral | `-${StartLiteral}`
+type StartValue = StartLiteralWithSign
+interface TailwindStart {
+ /**
+ * `Start`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/start , MDN docs}
+ */
+ start: StartValue
+}
+type TopLiteral = `top-${TopRef1}`
+type TopLiteralWithSign = TopLiteral | `-${TopLiteral}`
+type TopValue = TopLiteralWithSign
+interface TailwindTop {
+ /**
+ * `Top`
+ *
+ * Utilities for controlling the placement of positioned elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/top-right-bottom-left Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/top , MDN docs}
+ */
+ top: TopValue
+}
+type LetterSpacingTrackingLiteral = `tracking-${LetterSpacingRef1}`
+type LetterSpacingTrackingLiteralWithSign =
+ | LetterSpacingTrackingLiteral
+ | `-${LetterSpacingTrackingLiteral}`
+type LetterSpacingValue = LetterSpacingTrackingLiteralWithSign
+interface TailwindLetterSpacing {
+ /**
+ * `LetterSpacing`
+ *
+ * Utilities for controlling the tracking, or letter spacing, of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/letter-spacing Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/letter-spacing , MDN docs}
+ */
+ letterSpacing: LetterSpacingValue
+}
+type TranslateXLiteral =
+ | `translate-x-${TranslateRef1}`
+ | 'translate-x-1/2'
+ | 'translate-x-1/3'
+ | 'translate-x-1/4'
+ | 'translate-x-1/5'
+ | 'translate-x-1/6'
+ | 'translate-x-1/12'
+ | 'translate-x-2/3'
+ | 'translate-x-2/4'
+ | 'translate-x-2/5'
+ | 'translate-x-2/6'
+ | 'translate-x-2/12'
+ | 'translate-x-3/4'
+ | 'translate-x-3/5'
+ | 'translate-x-3/6'
+ | 'translate-x-3/12'
+ | 'translate-x-4/5'
+ | 'translate-x-4/6'
+ | 'translate-x-4/12'
+ | 'translate-x-5/6'
+ | 'translate-x-5/12'
+ | 'translate-x-6/12'
+ | 'translate-x-7/12'
+ | 'translate-x-8/12'
+ | 'translate-x-9/12'
+ | 'translate-x-10/12'
+ | 'translate-x-11/12'
+ | 'translate-x-full'
+type TranslateXLiteralWithSign = TranslateXLiteral | `-${TranslateXLiteral}`
+type TranslateYLiteral =
+ | `translate-y-${TranslateRef1}`
+ | 'translate-y-1/2'
+ | 'translate-y-1/3'
+ | 'translate-y-1/4'
+ | 'translate-y-1/5'
+ | 'translate-y-1/6'
+ | 'translate-y-1/12'
+ | 'translate-y-2/3'
+ | 'translate-y-2/4'
+ | 'translate-y-2/5'
+ | 'translate-y-2/6'
+ | 'translate-y-2/12'
+ | 'translate-y-3/4'
+ | 'translate-y-3/5'
+ | 'translate-y-3/6'
+ | 'translate-y-3/12'
+ | 'translate-y-4/5'
+ | 'translate-y-4/6'
+ | 'translate-y-4/12'
+ | 'translate-y-5/6'
+ | 'translate-y-5/12'
+ | 'translate-y-6/12'
+ | 'translate-y-7/12'
+ | 'translate-y-8/12'
+ | 'translate-y-9/12'
+ | 'translate-y-10/12'
+ | 'translate-y-11/12'
+ | 'translate-y-full'
+type TranslateYLiteralWithSign = TranslateYLiteral | `-${TranslateYLiteral}`
+type TranslateZLiteral = `translate-z-${TranslateRef1}`
+type TranslateZLiteralWithSign = TranslateZLiteral | `-${TranslateZLiteral}`
+type TranslateLiteral =
+ | `translate-${TranslateRef1}`
+ | 'translate-1/2'
+ | 'translate-1/3'
+ | 'translate-1/4'
+ | 'translate-1/5'
+ | 'translate-1/6'
+ | 'translate-1/12'
+ | 'translate-2/3'
+ | 'translate-2/4'
+ | 'translate-2/5'
+ | 'translate-2/6'
+ | 'translate-2/12'
+ | 'translate-3/4'
+ | 'translate-3/5'
+ | 'translate-3/6'
+ | 'translate-3/12'
+ | 'translate-4/5'
+ | 'translate-4/6'
+ | 'translate-4/12'
+ | 'translate-5/6'
+ | 'translate-5/12'
+ | 'translate-6/12'
+ | 'translate-7/12'
+ | 'translate-8/12'
+ | 'translate-9/12'
+ | 'translate-10/12'
+ | 'translate-11/12'
+ | 'translate-full'
+ | 'translate-3d'
+ | 'translate-none'
+type TranslateLiteralWithSign = TranslateLiteral | `-${TranslateLiteral}`
+type TranslateValue =
+ | TranslateXLiteralWithSign
+ | TranslateYLiteralWithSign
+ | TranslateZLiteralWithSign
+ | TranslateLiteralWithSign
+interface TailwindTranslate {
+ /**
+ * `Translate`
+ *
+ * Utilities for translating elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/translate Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/translate , MDN docs}
+ */
+ translate: TranslateValue
+}
+type TextUnderlineOffsetUnderlineoffsetLiteral =
+ `underline-offset-${TextUnderlineOffsetRef1}`
+type TextUnderlineOffsetUnderlineoffsetLiteralWithSign =
+ | TextUnderlineOffsetUnderlineoffsetLiteral
+ | `-${TextUnderlineOffsetUnderlineoffsetLiteral}`
+type TextUnderlineOffsetValue =
+ TextUnderlineOffsetUnderlineoffsetLiteralWithSign
+interface TailwindTextUnderlineOffset {
+ /**
+ * `TextUnderlineOffset`
+ *
+ * Utilities for controlling the offset of a text underline.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-underline-offset Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-underline-offset , MDN docs}
+ */
+ textUnderlineOffset: TextUnderlineOffsetValue
+}
+type ZIndexZLiteral = `z-${ZIndexRef1}`
+type ZIndexZLiteralWithSign = ZIndexZLiteral | `-${ZIndexZLiteral}`
+type ZIndexValue = ZIndexZLiteralWithSign
+interface TailwindZIndex {
+ /**
+ * `ZIndex`
+ *
+ * Utilities for controlling the stack order of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/z-index Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/z-index , MDN docs}
+ */
+ zIndex: ZIndexValue
+}
+type ContainerTypeValue =
+ | '@container'
+ | '@container-normal'
+ | '@container'
+ | '@container-normal'
+interface TailwindContainerType {
+ /**
+ * `ContainerType`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/container-type , MDN docs}
+ */
+ containerType: ContainerTypeValue
+}
+type PositionValue =
+ | 'absolute'
+ | 'fixed'
+ | 'relative'
+ | 'static'
+ | 'sticky'
+ | 'absolute'
+ | 'fixed'
+ | 'relative'
+ | 'static'
+ | 'sticky'
+interface TailwindPosition {
+ /**
+ * `Position`
+ *
+ * Utilities for controlling how an element is positioned in the document.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/position Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/position , MDN docs}
+ */
+ position: PositionValue
+}
+type AccentColorAccentcardLiteral = `accent-card-${AccentColorRef1}`
+type AccentColorAccentchartLiteral = `accent-chart-${AccentColorRef2}`
+type AccentColorAccentmutedLiteral = `accent-muted-${AccentColorRef3}`
+type AccentColorAccentpopoverLiteral = `accent-popover-${AccentColorRef4}`
+type AccentColorAccentprimaryLiteral = `accent-primary-${AccentColorRef5}`
+type AccentColorAccentsecondaryLiteral = `accent-secondary-${AccentColorRef6}`
+type AccentColorAccentsidebarLiteral = `accent-sidebar-${AccentColorRef7}`
+type AccentColorAccentLiteral = `accent-${AccentColorRef8}`
+type AccentColorValue =
+ | AccentColorAccentcardLiteral
+ | AccentColorAccentchartLiteral
+ | AccentColorAccentmutedLiteral
+ | AccentColorAccentpopoverLiteral
+ | AccentColorAccentprimaryLiteral
+ | AccentColorAccentsecondaryLiteral
+ | AccentColorAccentsidebarLiteral
+ | AccentColorAccentLiteral
+interface TailwindAccentColor {
+ /**
+ * `AccentColor`
+ *
+ * Utilities for controlling the accented color of a form control.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/accent-color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/accent-color , MDN docs}
+ */
+ accentColor: AccentColorValue
+}
+type VerticalAlignAlignLiteral = `align-${VerticalAlignRef1}`
+type VerticalAlignValue = VerticalAlignAlignLiteral
+interface TailwindVerticalAlign {
+ /**
+ * `VerticalAlign`
+ *
+ * Utilities for controlling the vertical alignment of an inline or table-cell
+ * box.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/vertical-align Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align , MDN docs}
+ */
+ verticalAlign: VerticalAlignValue
+}
+type AnimationAnimateaccordionLiteral = `animate-accordion-${AnimationRef1}`
+type AnimationAnimatecollapsibleLiteral = `animate-collapsible-${AnimationRef2}`
+type AnimationAnimateLiteral = `animate-${AnimationRef3}`
+type AnimationValue =
+ | AnimationAnimateaccordionLiteral
+ | AnimationAnimatecollapsibleLiteral
+ | AnimationAnimateLiteral
+interface TailwindAnimation {
+ /**
+ * `Animation`
+ *
+ * Utilities for animating elements with CSS animations.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/animation Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/animation , MDN docs}
+ */
+ animation: AnimationValue
+}
+type AnimationDurationValue =
+ | 'animation-duration-initial'
+ | 'animation-duration-initial'
+interface TailwindAnimationDuration {
+ /**
+ * `AnimationDuration`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/animation-duration , MDN docs}
+ */
+ animationDuration: AnimationDurationValue
+}
+type FontSmoothingValue =
+ | 'antialiased'
+ | 'subpixel-antialiased'
+ | 'antialiased'
+ | 'subpixel-antialiased'
+interface TailwindFontSmoothing {
+ /**
+ * `FontSmoothing`
+ *
+ * Utilities for controlling the font smoothing of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-smoothing Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-smoothing , MDN docs}
+ */
+ fontSmoothing: FontSmoothingValue
+}
+type AppearanceValue =
+ | 'appearance-auto'
+ | 'appearance-none'
+ | 'appearance-auto'
+ | 'appearance-none'
+interface TailwindAppearance {
+ /**
+ * `Appearance`
+ *
+ * Utilities for suppressing native form control styling.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/appearance Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/appearance , MDN docs}
+ */
+ appearance: AppearanceValue
+}
+type AspectRatioAspectLiteral = `aspect-${AspectRatioRef1}`
+type AspectRatioValue = AspectRatioAspectLiteral
+interface TailwindAspectRatio {
+ /**
+ * `AspectRatio`
+ *
+ * Utilities for controlling the aspect ratio of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/aspect-ratio Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio , MDN docs}
+ */
+ aspectRatio: AspectRatioValue
+}
+type GridAutoColumnsAutocolsLiteral = `auto-cols-${GridAutoColumnsRef1}`
+type GridAutoColumnsValue = GridAutoColumnsAutocolsLiteral
+interface TailwindGridAutoColumns {
+ /**
+ * `GridAutoColumns`
+ *
+ * Utilities for controlling the size of implicitly-created grid columns.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-auto-columns Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-columns , MDN docs}
+ */
+ gridAutoColumns: GridAutoColumnsValue
+}
+type GridAutoRowsAutorowsLiteral = `auto-rows-${GridAutoRowsRef1}`
+type GridAutoRowsValue = GridAutoRowsAutorowsLiteral
+interface TailwindGridAutoRows {
+ /**
+ * `GridAutoRows`
+ *
+ * Utilities for controlling the size of implicitly-created grid rows.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-auto-rows Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-rows , MDN docs}
+ */
+ gridAutoRows: GridAutoRowsValue
+}
+type BackdropFilterBackdropblurLiteral = `backdrop-blur-${BackdropFilterRef1}`
+type BackdropFilterBackdropbrightnessLiteral =
+ | `backdrop-brightness-${BackdropFilterRef2}`
+ | 'backdrop-brightness-90'
+ | 'backdrop-brightness-95'
+ | 'backdrop-brightness-105'
+ | 'backdrop-brightness-110'
+type BackdropFilterBackdropcontrastLiteral =
+ `backdrop-contrast-${BackdropFilterRef2}`
+type BackdropFilterBackdropgrayscaleLiteral =
+ `backdrop-grayscale-${BackdropFilterRef3}`
+type BackdropFilterBackdrophuerotateLiteral =
+ `backdrop-hue-rotate-${BackdropFilterRef4}`
+type BackdropFilterBackdropinvertLiteral =
+ `backdrop-invert-${BackdropFilterRef5}`
+type BackdropFilterBackdropopacityLiteral =
+ `backdrop-opacity-${BackdropFilterRef6}`
+type BackdropFilterBackdropsaturateLiteral =
+ `backdrop-saturate-${BackdropFilterRef7}`
+type BackdropFilterBackdropsepiaLiteral = `backdrop-sepia-${BackdropFilterRef8}`
+type BackdropFilterBackdropLiteral = `backdrop-${BackdropFilterRef9}`
+type BackdropFilterValue =
+ | BackdropFilterBackdropblurLiteral
+ | BackdropFilterBackdropbrightnessLiteral
+ | BackdropFilterBackdropcontrastLiteral
+ | BackdropFilterBackdropgrayscaleLiteral
+ | BackdropFilterBackdrophuerotateLiteral
+ | BackdropFilterBackdropinvertLiteral
+ | BackdropFilterBackdropopacityLiteral
+ | BackdropFilterBackdropsaturateLiteral
+ | BackdropFilterBackdropsepiaLiteral
+ | BackdropFilterBackdropLiteral
+interface TailwindBackdropFilter {
+ /**
+ * `BackdropFilter`
+ *
+ * Utilities for applying backdrop filters to an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/backdrop-filter Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter , MDN docs}
+ */
+ backdropFilter: BackdropFilterValue
+}
+type BackfaceVisibilityValue =
+ | 'backface-hidden'
+ | 'backface-visible'
+ | 'backface-hidden'
+ | 'backface-visible'
+interface TailwindBackfaceVisibility {
+ /**
+ * `BackfaceVisibility`
+ *
+ * Utilities for controlling if an element's backface is visible.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/backface-visibility Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/backface-visibility , MDN docs}
+ */
+ backfaceVisibility: BackfaceVisibilityValue
+}
+type FlexBasisBasisLiteral = `basis-${FlexBasisRef1}`
+type FlexBasisValue = FlexBasisBasisLiteral
+interface TailwindFlexBasis {
+ /**
+ * `FlexBasis`
+ *
+ * Utilities for controlling the initial size of flex items.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/flex-basis Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/flex-basis , MDN docs}
+ */
+ flexBasis: FlexBasisValue
+}
+type BackgroundColorBgaccentLiteral = `bg-accent-${BackgroundColorRef1}`
+type BackgroundColorBgcardLiteral = `bg-card-${BackgroundColorRef2}`
+type BackgroundColorBgchartLiteral = `bg-chart-${BackgroundColorRef3}`
+type BackgroundColorBgmutedLiteral = `bg-muted-${BackgroundColorRef4}`
+type BackgroundColorBgpopoverLiteral = `bg-popover-${BackgroundColorRef5}`
+type BackgroundColorBgprimaryLiteral = `bg-primary-${BackgroundColorRef6}`
+type BackgroundColorBgsecondaryLiteral = `bg-secondary-${BackgroundColorRef7}`
+type BackgroundColorBgsidebarLiteral = `bg-sidebar-${BackgroundColorRef8}`
+type BackgroundColorBgLiteral = `bg-${BackgroundColorRef9}`
+type BackgroundColorValue =
+ | BackgroundColorBgaccentLiteral
+ | BackgroundColorBgcardLiteral
+ | BackgroundColorBgchartLiteral
+ | BackgroundColorBgmutedLiteral
+ | BackgroundColorBgpopoverLiteral
+ | BackgroundColorBgprimaryLiteral
+ | BackgroundColorBgsecondaryLiteral
+ | BackgroundColorBgsidebarLiteral
+ | BackgroundColorBgLiteral
+interface TailwindBackgroundColor {
+ /**
+ * `BackgroundColor`
+ *
+ * Utilities for controlling an element's background color.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-color , MDN docs}
+ */
+ backgroundColor: BackgroundColorValue
+}
+type BackgroundSizeBgLiteral = `bg-${BackgroundSizeRef1}`
+type BackgroundSizeValue = BackgroundSizeBgLiteral
+interface TailwindBackgroundSize {
+ /**
+ * `BackgroundSize`
+ *
+ * Utilities for controlling the background size of an element's background
+ * image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-size Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-size , MDN docs}
+ */
+ backgroundSize: BackgroundSizeValue
+}
+type BackgroundBlendModeBgblendLiteral = `bg-blend-${BackgroundBlendModeRef1}`
+type BackgroundBlendModeBgblendcolorLiteral =
+ `bg-blend-color-${BackgroundBlendModeRef2}`
+type BackgroundBlendModeValue =
+ | BackgroundBlendModeBgblendLiteral
+ | BackgroundBlendModeBgblendcolorLiteral
+interface TailwindBackgroundBlendMode {
+ /**
+ * `BackgroundBlendMode`
+ *
+ * Utilities for controlling how an element's background image should blend
+ * with its background color.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-blend-mode Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-blend-mode , MDN docs}
+ */
+ backgroundBlendMode: BackgroundBlendModeValue
+}
+type BackgroundPositionBgbottomLiteral = `bg-bottom-${BackgroundPositionRef1}`
+type BackgroundPositionBgtopLiteral = `bg-top-${BackgroundPositionRef2}`
+type BackgroundPositionBgLiteral = `bg-${BackgroundPositionRef3}`
+type BackgroundPositionValue =
+ | BackgroundPositionBgbottomLiteral
+ | BackgroundPositionBgtopLiteral
+ | BackgroundPositionBgLiteral
+interface TailwindBackgroundPosition {
+ /**
+ * `BackgroundPosition`
+ *
+ * Utilities for controlling the position of an element's background image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-position Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-position , MDN docs}
+ */
+ backgroundPosition: BackgroundPositionValue
+}
+type BackgroundClipBgclipLiteral = `bg-clip-${BackgroundClipRef1}`
+type BackgroundClipValue = BackgroundClipBgclipLiteral
+interface TailwindBackgroundClip {
+ /**
+ * `BackgroundClip`
+ *
+ * Utilities for controlling the bounding box of an element's background.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-clip Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-clip , MDN docs}
+ */
+ backgroundClip: BackgroundClipValue
+}
+type BackgroundAttachmentBgLiteral = `bg-${BackgroundAttachmentRef1}`
+type BackgroundAttachmentValue = BackgroundAttachmentBgLiteral
+interface TailwindBackgroundAttachment {
+ /**
+ * `BackgroundAttachment`
+ *
+ * Utilities for controlling how a background image behaves when scrolling.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-attachment Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-attachment , MDN docs}
+ */
+ backgroundAttachment: BackgroundAttachmentValue
+}
+type BackgroundRepeatBgrepeatLiteral = `bg-repeat-${BackgroundRepeatRef1}`
+type BackgroundRepeatBgLiteral = `bg-${BackgroundRepeatRef2}`
+type BackgroundRepeatValue =
+ | BackgroundRepeatBgrepeatLiteral
+ | BackgroundRepeatBgLiteral
+interface TailwindBackgroundRepeat {
+ /**
+ * `BackgroundRepeat`
+ *
+ * Utilities for controlling the repetition of an element's background image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-repeat Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-repeat , MDN docs}
+ */
+ backgroundRepeat: BackgroundRepeatValue
+}
+type BackgroundOriginBgoriginLiteral = `bg-origin-${BackgroundOriginRef1}`
+type BackgroundOriginValue = BackgroundOriginBgoriginLiteral
+interface TailwindBackgroundOrigin {
+ /**
+ * `BackgroundOrigin`
+ *
+ * Utilities for controlling how an element's background is positioned
+ * relative to borders, padding, and content.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/background-origin Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/background-origin , MDN docs}
+ */
+ backgroundOrigin: BackgroundOriginValue
+}
+type DisplayInlineLiteral = `inline-${DisplayRef1}`
+type DisplayTableLiteral = `table-${DisplayRef2}`
+type DisplayValue =
+ | 'block'
+ | 'contents'
+ | 'flex'
+ | 'flow-root'
+ | 'grid'
+ | 'hidden'
+ | 'inline'
+ | 'list-item'
+ | 'not-sr-only'
+ | 'sr-only'
+ | 'table'
+ | DisplayInlineLiteral
+ | DisplayTableLiteral
+interface TailwindDisplay {
+ /**
+ * `Display`
+ *
+ * Utilities for controlling the display box type of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/display Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/display , MDN docs}
+ */
+ display: DisplayValue
+}
+type FilterBlurLiteral = `blur-${FilterRef1}`
+type FilterBrightnessLiteral =
+ | `brightness-${FilterRef2}`
+ | 'brightness-90'
+ | 'brightness-95'
+ | 'brightness-105'
+ | 'brightness-110'
+type FilterContrastLiteral = `contrast-${FilterRef2}`
+type FilterDropshadowaccentLiteral = `drop-shadow-accent-${FilterRef3}`
+type FilterDropshadowcardLiteral = `drop-shadow-card-${FilterRef4}`
+type FilterDropshadowchartLiteral = `drop-shadow-chart-${FilterRef5}`
+type FilterDropshadowmutedLiteral = `drop-shadow-muted-${FilterRef6}`
+type FilterDropshadowpopoverLiteral = `drop-shadow-popover-${FilterRef7}`
+type FilterDropshadowprimaryLiteral = `drop-shadow-primary-${FilterRef8}`
+type FilterDropshadowsecondaryLiteral = `drop-shadow-secondary-${FilterRef9}`
+type FilterDropshadowsidebarLiteral = `drop-shadow-sidebar-${FilterRef10}`
+type FilterGrayscaleLiteral = `grayscale-${FilterRef11}`
+type FilterHuerotateLiteral = `hue-rotate-${FilterRef12}`
+type FilterInvertLiteral = `invert-${FilterRef13}`
+type FilterSaturateLiteral = `saturate-${FilterRef14}`
+type FilterSepiaLiteral = `sepia-${FilterRef15}`
+type FilterDropshadowLiteral = `drop-shadow-${FilterRef16}`
+type FilterValue =
+ | 'grayscale'
+ | 'invert'
+ | 'sepia'
+ | FilterBlurLiteral
+ | FilterBrightnessLiteral
+ | FilterContrastLiteral
+ | FilterDropshadowaccentLiteral
+ | FilterDropshadowcardLiteral
+ | FilterDropshadowchartLiteral
+ | FilterDropshadowmutedLiteral
+ | FilterDropshadowpopoverLiteral
+ | FilterDropshadowprimaryLiteral
+ | FilterDropshadowsecondaryLiteral
+ | FilterDropshadowsidebarLiteral
+ | FilterGrayscaleLiteral
+ | FilterHuerotateLiteral
+ | FilterInvertLiteral
+ | FilterSaturateLiteral
+ | FilterSepiaLiteral
+ | FilterDropshadowLiteral
+interface TailwindFilter {
+ /**
+ * `Filter`
+ *
+ * Utilities for applying filters to an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/filter Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/filter , MDN docs}
+ */
+ filter: FilterValue
+}
+type BorderWidthBorderaccentLiteral = `border-accent-${BorderWidthRef1}`
+type BorderWidthBorderbLiteral =
+ | `border-b-${BorderWidthRef2}`
+ | 'border-b-0'
+ | 'border-b-2'
+ | 'border-b-4'
+ | 'border-b-8'
+ | 'border-b-background'
+ | 'border-b-card'
+ | 'border-b-card-foreground'
+ | 'border-b-chart-1'
+ | 'border-b-chart-2'
+ | 'border-b-chart-3'
+ | 'border-b-chart-4'
+ | 'border-b-chart-5'
+ | 'border-b-destructive'
+ | 'border-b-input'
+ | 'border-b-muted'
+ | 'border-b-muted-foreground'
+ | 'border-b-popover'
+ | 'border-b-popover-foreground'
+ | 'border-b-secondary'
+ | 'border-b-secondary-foreground'
+ | 'border-b-sidebar'
+ | 'border-b-sidebar-accent'
+ | 'border-b-sidebar-accent-foreground'
+ | 'border-b-sidebar-border'
+ | 'border-b-sidebar-foreground'
+ | 'border-b-sidebar-primary'
+ | 'border-b-sidebar-primary-foreground'
+ | 'border-b-sidebar-ring'
+type BorderWidthBordercardLiteral = `border-card-${BorderWidthRef3}`
+type BorderWidthBorderchartLiteral = `border-chart-${BorderWidthRef4}`
+type BorderWidthBordereLiteral =
+ | `border-e-${BorderWidthRef2}`
+ | 'border-e-0'
+ | 'border-e-2'
+ | 'border-e-4'
+ | 'border-e-8'
+ | 'border-e-background'
+ | 'border-e-card'
+ | 'border-e-card-foreground'
+ | 'border-e-chart-1'
+ | 'border-e-chart-2'
+ | 'border-e-chart-3'
+ | 'border-e-chart-4'
+ | 'border-e-chart-5'
+ | 'border-e-destructive'
+ | 'border-e-input'
+ | 'border-e-muted'
+ | 'border-e-muted-foreground'
+ | 'border-e-popover'
+ | 'border-e-popover-foreground'
+ | 'border-e-secondary'
+ | 'border-e-secondary-foreground'
+ | 'border-e-sidebar'
+ | 'border-e-sidebar-accent'
+ | 'border-e-sidebar-accent-foreground'
+ | 'border-e-sidebar-border'
+ | 'border-e-sidebar-foreground'
+ | 'border-e-sidebar-primary'
+ | 'border-e-sidebar-primary-foreground'
+ | 'border-e-sidebar-ring'
+type BorderWidthBorderlLiteral =
+ | `border-l-${BorderWidthRef2}`
+ | 'border-l-0'
+ | 'border-l-2'
+ | 'border-l-4'
+ | 'border-l-8'
+ | 'border-l-background'
+ | 'border-l-card'
+ | 'border-l-card-foreground'
+ | 'border-l-chart-1'
+ | 'border-l-chart-2'
+ | 'border-l-chart-3'
+ | 'border-l-chart-4'
+ | 'border-l-chart-5'
+ | 'border-l-destructive'
+ | 'border-l-input'
+ | 'border-l-muted'
+ | 'border-l-muted-foreground'
+ | 'border-l-popover'
+ | 'border-l-popover-foreground'
+ | 'border-l-secondary'
+ | 'border-l-secondary-foreground'
+ | 'border-l-sidebar'
+ | 'border-l-sidebar-accent'
+ | 'border-l-sidebar-accent-foreground'
+ | 'border-l-sidebar-border'
+ | 'border-l-sidebar-foreground'
+ | 'border-l-sidebar-primary'
+ | 'border-l-sidebar-primary-foreground'
+ | 'border-l-sidebar-ring'
+type BorderWidthBordermutedLiteral = `border-muted-${BorderWidthRef5}`
+type BorderWidthBorderpopoverLiteral = `border-popover-${BorderWidthRef6}`
+type BorderWidthBorderprimaryLiteral = `border-primary-${BorderWidthRef7}`
+type BorderWidthBordersLiteral =
+ | `border-s-${BorderWidthRef2}`
+ | 'border-s-0'
+ | 'border-s-2'
+ | 'border-s-4'
+ | 'border-s-8'
+ | 'border-s-background'
+ | 'border-s-card'
+ | 'border-s-card-foreground'
+ | 'border-s-chart-1'
+ | 'border-s-chart-2'
+ | 'border-s-chart-3'
+ | 'border-s-chart-4'
+ | 'border-s-chart-5'
+ | 'border-s-destructive'
+ | 'border-s-input'
+ | 'border-s-muted'
+ | 'border-s-muted-foreground'
+ | 'border-s-popover'
+ | 'border-s-popover-foreground'
+ | 'border-s-secondary'
+ | 'border-s-secondary-foreground'
+ | 'border-s-sidebar'
+ | 'border-s-sidebar-accent'
+ | 'border-s-sidebar-accent-foreground'
+ | 'border-s-sidebar-border'
+ | 'border-s-sidebar-foreground'
+ | 'border-s-sidebar-primary'
+ | 'border-s-sidebar-primary-foreground'
+ | 'border-s-sidebar-ring'
+type BorderWidthBordersecondaryLiteral = `border-secondary-${BorderWidthRef8}`
+type BorderWidthBordersidebarLiteral = `border-sidebar-${BorderWidthRef2}`
+type BorderWidthBordertLiteral =
+ | `border-t-${BorderWidthRef2}`
+ | 'border-t-0'
+ | 'border-t-2'
+ | 'border-t-4'
+ | 'border-t-8'
+ | 'border-t-background'
+ | 'border-t-card'
+ | 'border-t-card-foreground'
+ | 'border-t-chart-1'
+ | 'border-t-chart-2'
+ | 'border-t-chart-3'
+ | 'border-t-chart-4'
+ | 'border-t-chart-5'
+ | 'border-t-destructive'
+ | 'border-t-input'
+ | 'border-t-muted'
+ | 'border-t-muted-foreground'
+ | 'border-t-popover'
+ | 'border-t-popover-foreground'
+ | 'border-t-secondary'
+ | 'border-t-secondary-foreground'
+ | 'border-t-sidebar'
+ | 'border-t-sidebar-accent'
+ | 'border-t-sidebar-accent-foreground'
+ | 'border-t-sidebar-border'
+ | 'border-t-sidebar-foreground'
+ | 'border-t-sidebar-primary'
+ | 'border-t-sidebar-primary-foreground'
+ | 'border-t-sidebar-ring'
+type BorderWidthBorderxLiteral =
+ | `border-x-${BorderWidthRef2}`
+ | 'border-x-0'
+ | 'border-x-2'
+ | 'border-x-4'
+ | 'border-x-8'
+ | 'border-x-background'
+ | 'border-x-card'
+ | 'border-x-card-foreground'
+ | 'border-x-chart-1'
+ | 'border-x-chart-2'
+ | 'border-x-chart-3'
+ | 'border-x-chart-4'
+ | 'border-x-chart-5'
+ | 'border-x-destructive'
+ | 'border-x-input'
+ | 'border-x-muted'
+ | 'border-x-muted-foreground'
+ | 'border-x-popover'
+ | 'border-x-popover-foreground'
+ | 'border-x-secondary'
+ | 'border-x-secondary-foreground'
+ | 'border-x-sidebar'
+ | 'border-x-sidebar-accent'
+ | 'border-x-sidebar-accent-foreground'
+ | 'border-x-sidebar-border'
+ | 'border-x-sidebar-foreground'
+ | 'border-x-sidebar-primary'
+ | 'border-x-sidebar-primary-foreground'
+ | 'border-x-sidebar-ring'
+type BorderWidthBorderyLiteral =
+ | `border-y-${BorderWidthRef2}`
+ | 'border-y-0'
+ | 'border-y-2'
+ | 'border-y-4'
+ | 'border-y-8'
+ | 'border-y-background'
+ | 'border-y-card'
+ | 'border-y-card-foreground'
+ | 'border-y-chart-1'
+ | 'border-y-chart-2'
+ | 'border-y-chart-3'
+ | 'border-y-chart-4'
+ | 'border-y-chart-5'
+ | 'border-y-destructive'
+ | 'border-y-input'
+ | 'border-y-muted'
+ | 'border-y-muted-foreground'
+ | 'border-y-popover'
+ | 'border-y-popover-foreground'
+ | 'border-y-secondary'
+ | 'border-y-secondary-foreground'
+ | 'border-y-sidebar'
+ | 'border-y-sidebar-accent'
+ | 'border-y-sidebar-accent-foreground'
+ | 'border-y-sidebar-border'
+ | 'border-y-sidebar-foreground'
+ | 'border-y-sidebar-primary'
+ | 'border-y-sidebar-primary-foreground'
+ | 'border-y-sidebar-ring'
+type BorderWidthDividexLiteral = `divide-x-${BorderWidthRef9}`
+type BorderWidthDivideyLiteral = `divide-y-${BorderWidthRef10}`
+type BorderWidthBorderLiteral = `border-${BorderWidthRef11}`
+type BorderWidthBorderrLiteral =
+ | `border-r-${BorderWidthRef2}`
+ | 'border-r-0'
+ | 'border-r-2'
+ | 'border-r-4'
+ | 'border-r-8'
+ | 'border-r-background'
+ | 'border-r-card'
+ | 'border-r-card-foreground'
+ | 'border-r-chart-1'
+ | 'border-r-chart-2'
+ | 'border-r-chart-3'
+ | 'border-r-chart-4'
+ | 'border-r-chart-5'
+ | 'border-r-destructive'
+ | 'border-r-input'
+ | 'border-r-muted'
+ | 'border-r-muted-foreground'
+ | 'border-r-popover'
+ | 'border-r-popover-foreground'
+ | 'border-r-secondary'
+ | 'border-r-secondary-foreground'
+ | 'border-r-sidebar'
+ | 'border-r-sidebar-accent'
+ | 'border-r-sidebar-accent-foreground'
+ | 'border-r-sidebar-border'
+ | 'border-r-sidebar-foreground'
+ | 'border-r-sidebar-primary'
+ | 'border-r-sidebar-primary-foreground'
+ | 'border-r-sidebar-ring'
+type BorderWidthDivideLiteral = `divide-${BorderWidthRef12}`
+type BorderWidthValue =
+ | 'border'
+ | BorderWidthBorderaccentLiteral
+ | BorderWidthBorderbLiteral
+ | BorderWidthBordercardLiteral
+ | BorderWidthBorderchartLiteral
+ | BorderWidthBordereLiteral
+ | BorderWidthBorderlLiteral
+ | BorderWidthBordermutedLiteral
+ | BorderWidthBorderpopoverLiteral
+ | BorderWidthBorderprimaryLiteral
+ | BorderWidthBordersLiteral
+ | BorderWidthBordersecondaryLiteral
+ | BorderWidthBordersidebarLiteral
+ | BorderWidthBordertLiteral
+ | BorderWidthBorderxLiteral
+ | BorderWidthBorderyLiteral
+ | BorderWidthDividexLiteral
+ | BorderWidthDivideyLiteral
+ | BorderWidthBorderLiteral
+ | BorderWidthBorderrLiteral
+ | BorderWidthDivideLiteral
+interface TailwindBorderWidth {
+ /**
+ * `BorderWidth`
+ *
+ * Utilities for controlling the width of an element's borders.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/border-width Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/border-width , MDN docs}
+ */
+ borderWidth: BorderWidthValue
+}
+type BorderColorBorderbLiteral = `border-b-${BorderColorRef1}`
+type BorderColorBordereLiteral = `border-e-${BorderColorRef1}`
+type BorderColorBorderlLiteral = `border-l-${BorderColorRef1}`
+type BorderColorBorderrLiteral = `border-r-${BorderColorRef1}`
+type BorderColorBordersLiteral = `border-s-${BorderColorRef1}`
+type BorderColorBordertLiteral = `border-t-${BorderColorRef1}`
+type BorderColorBorderxLiteral = `border-x-${BorderColorRef1}`
+type BorderColorBorderyLiteral = `border-y-${BorderColorRef1}`
+type BorderColorDivideaccentLiteral = `divide-accent-${BorderColorRef2}`
+type BorderColorDividecardLiteral = `divide-card-${BorderColorRef3}`
+type BorderColorDividechartLiteral = `divide-chart-${BorderColorRef4}`
+type BorderColorDividemutedLiteral = `divide-muted-${BorderColorRef5}`
+type BorderColorDividepopoverLiteral = `divide-popover-${BorderColorRef6}`
+type BorderColorDivideprimaryLiteral = `divide-primary-${BorderColorRef7}`
+type BorderColorDividesecondaryLiteral = `divide-secondary-${BorderColorRef8}`
+type BorderColorDividesidebarLiteral = `divide-sidebar-${BorderColorRef9}`
+type BorderColorBorderLiteral = `border-${BorderColorRef1}`
+type BorderColorDivideLiteral =
+ | `divide-${BorderColorRef1}`
+ | 'divide-accent'
+ | 'divide-background'
+ | 'divide-border'
+ | 'divide-card'
+ | 'divide-destructive'
+ | 'divide-foreground'
+ | 'divide-input'
+ | 'divide-muted'
+ | 'divide-popover'
+ | 'divide-primary'
+ | 'divide-ring'
+ | 'divide-secondary'
+ | 'divide-sidebar'
+type BorderColorValue =
+ | BorderColorBorderbLiteral
+ | BorderColorBordereLiteral
+ | BorderColorBorderlLiteral
+ | BorderColorBorderrLiteral
+ | BorderColorBordersLiteral
+ | BorderColorBordertLiteral
+ | BorderColorBorderxLiteral
+ | BorderColorBorderyLiteral
+ | BorderColorDivideaccentLiteral
+ | BorderColorDividecardLiteral
+ | BorderColorDividechartLiteral
+ | BorderColorDividemutedLiteral
+ | BorderColorDividepopoverLiteral
+ | BorderColorDivideprimaryLiteral
+ | BorderColorDividesecondaryLiteral
+ | BorderColorDividesidebarLiteral
+ | BorderColorBorderLiteral
+ | BorderColorDivideLiteral
+interface TailwindBorderColor {
+ /**
+ * `BorderColor`
+ *
+ * Utilities for controlling the color of an element's borders.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/border-color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/border-color , MDN docs}
+ */
+ borderColor: BorderColorValue
+}
+type BorderCollapseValue =
+ | 'border-collapse'
+ | 'border-separate'
+ | 'border-collapse'
+ | 'border-separate'
+interface TailwindBorderCollapse {
+ /**
+ * `BorderCollapse`
+ *
+ * Utilities for controlling whether table borders should collapse or be
+ * separated.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/border-collapse Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/border-collapse , MDN docs}
+ */
+ borderCollapse: BorderCollapseValue
+}
+type BorderStyleBorderLiteral = `border-${BorderStyleRef1}`
+type BorderStyleDivideLiteral = `divide-${BorderStyleRef2}`
+type BorderStyleValue = BorderStyleBorderLiteral | BorderStyleDivideLiteral
+interface TailwindBorderStyle {
+ /**
+ * `BorderStyle`
+ *
+ * Utilities for controlling the style of an element's borders.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/border-style Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/border-style , MDN docs}
+ */
+ borderStyle: BorderStyleValue
+}
+type BorderSpacingXLiteral = `border-spacing-x-${BorderSpacingRef1}`
+type BorderSpacingYLiteral = `border-spacing-y-${BorderSpacingRef1}`
+type BorderSpacingLiteral = `border-spacing-${BorderSpacingRef1}`
+type BorderSpacingValue =
+ | BorderSpacingXLiteral
+ | BorderSpacingYLiteral
+ | BorderSpacingLiteral
+interface TailwindBorderSpacing {
+ /**
+ * `BorderSpacing`
+ *
+ * Utilities for controlling the spacing between table borders.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/border-spacing Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/border-spacing , MDN docs}
+ */
+ borderSpacing: BorderSpacingValue
+}
+type BoxSizingValue =
+ | 'box-border'
+ | 'box-content'
+ | 'box-border'
+ | 'box-content'
+interface TailwindBoxSizing {
+ /**
+ * `BoxSizing`
+ *
+ * Utilities for controlling how the browser should calculate an element's
+ * total size.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/box-sizing Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing , MDN docs}
+ */
+ boxSizing: BoxSizingValue
+}
+type BoxDecorationBreakValue =
+ | 'box-decoration-clone'
+ | 'box-decoration-slice'
+ | 'box-decoration-clone'
+ | 'box-decoration-slice'
+interface TailwindBoxDecorationBreak {
+ /**
+ * `BoxDecorationBreak`
+ *
+ * Utilities for controlling how element fragments should be rendered across
+ * multiple lines, columns, or pages.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/box-decoration-break Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/box-decoration-break , MDN docs}
+ */
+ boxDecorationBreak: BoxDecorationBreakValue
+}
+type BreakAfterLiteral = `break-after-${BreakAfterRef1}`
+type BreakAfterValue = BreakAfterLiteral
+interface TailwindBreakAfter {
+ /**
+ * `BreakAfter`
+ *
+ * Utilities for controlling how a column or page should break after an
+ * element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/break-after Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/break-after , MDN docs}
+ */
+ breakAfter: BreakAfterValue
+}
+type WordBreakBreakLiteral = `break-${WordBreakRef1}`
+type WordBreakValue = WordBreakBreakLiteral
+interface TailwindWordBreak {
+ /**
+ * `WordBreak`
+ *
+ * Utilities for controlling word breaks in an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/word-break Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/word-break , MDN docs}
+ */
+ wordBreak: WordBreakValue
+}
+type BreakBeforeLiteral = `break-before-${BreakBeforeRef1}`
+type BreakBeforeValue = BreakBeforeLiteral
+interface TailwindBreakBefore {
+ /**
+ * `BreakBefore`
+ *
+ * Utilities for controlling how a column or page should break before an
+ * element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/break-before Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/break-before , MDN docs}
+ */
+ breakBefore: BreakBeforeValue
+}
+type BreakInsideLiteral = `break-inside-${BreakInsideRef1}`
+type BreakInsideAvoidLiteral = `break-inside-avoid-${BreakInsideRef2}`
+type BreakInsideValue = BreakInsideLiteral | BreakInsideAvoidLiteral
+interface TailwindBreakInside {
+ /**
+ * `BreakInside`
+ *
+ * Utilities for controlling how a column or page should break within an
+ * element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/break-inside Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/break-inside , MDN docs}
+ */
+ breakInside: BreakInsideValue
+}
+type OverflowWrapWrapLiteral = `wrap-${OverflowWrapRef1}`
+type OverflowWrapValue = 'break-words' | OverflowWrapWrapLiteral
+interface TailwindOverflowWrap {
+ /**
+ * `OverflowWrap`
+ *
+ * Utilities for controlling line breaks within words in an overflowing
+ * element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/overflow-wrap Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-wrap , MDN docs}
+ */
+ overflowWrap: OverflowWrapValue
+}
+type TextTransformValue =
+ | 'capitalize'
+ | 'lowercase'
+ | 'normal-case'
+ | 'uppercase'
+ | 'capitalize'
+ | 'lowercase'
+ | 'normal-case'
+ | 'uppercase'
+interface TailwindTextTransform {
+ /**
+ * `TextTransform`
+ *
+ * Utilities for controlling the capitalization of text.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-transform Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-transform , MDN docs}
+ */
+ textTransform: TextTransformValue
+}
+type CaptionSideValue =
+ | 'caption-bottom'
+ | 'caption-top'
+ | 'caption-bottom'
+ | 'caption-top'
+interface TailwindCaptionSide {
+ /**
+ * `CaptionSide`
+ *
+ * Utilities for controlling the alignment of a caption element inside of a
+ * table.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/caption-side Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/caption-side , MDN docs}
+ */
+ captionSide: CaptionSideValue
+}
+type CaretColorCaretaccentLiteral = `caret-accent-${CaretColorRef1}`
+type CaretColorCaretcardLiteral = `caret-card-${CaretColorRef2}`
+type CaretColorCaretchartLiteral = `caret-chart-${CaretColorRef3}`
+type CaretColorCaretmutedLiteral = `caret-muted-${CaretColorRef4}`
+type CaretColorCaretpopoverLiteral = `caret-popover-${CaretColorRef5}`
+type CaretColorCaretprimaryLiteral = `caret-primary-${CaretColorRef6}`
+type CaretColorCaretsecondaryLiteral = `caret-secondary-${CaretColorRef7}`
+type CaretColorCaretsidebarLiteral = `caret-sidebar-${CaretColorRef8}`
+type CaretColorCaretLiteral = `caret-${CaretColorRef9}`
+type CaretColorValue =
+ | CaretColorCaretaccentLiteral
+ | CaretColorCaretcardLiteral
+ | CaretColorCaretchartLiteral
+ | CaretColorCaretmutedLiteral
+ | CaretColorCaretpopoverLiteral
+ | CaretColorCaretprimaryLiteral
+ | CaretColorCaretsecondaryLiteral
+ | CaretColorCaretsidebarLiteral
+ | CaretColorCaretLiteral
+interface TailwindCaretColor {
+ /**
+ * `CaretColor`
+ *
+ * Utilities for controlling the color of the text input cursor.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/caret-color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/caret-color , MDN docs}
+ */
+ caretColor: CaretColorValue
+}
+type ClearLiteral = `clear-${ClearRef1}`
+type ClearValue = ClearLiteral
+interface TailwindClear {
+ /**
+ * `Clear`
+ *
+ * Utilities for controlling the wrapping of content around an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/clear Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/clear , MDN docs}
+ */
+ clear: ClearValue
+}
+type VisibilityValue =
+ | 'collapse'
+ | 'invisible'
+ | 'visible'
+ | 'collapse'
+ | 'invisible'
+ | 'visible'
+interface TailwindVisibility {
+ /**
+ * `Visibility`
+ *
+ * Utilities for controlling the visibility of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/visibility Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/visibility , MDN docs}
+ */
+ visibility: VisibilityValue
+}
+type ColumnsLiteral = `columns-${ColumnsRef1}`
+type ColumnsValue = ColumnsLiteral
+interface TailwindColumns {
+ /**
+ * `Columns`
+ *
+ * Utilities for controlling the number of columns within an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/columns Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/columns , MDN docs}
+ */
+ columns: ColumnsValue
+}
+type ContainLiteral = `contain-${ContainRef1}`
+type ContainValue = ContainLiteral
+interface TailwindContain {
+ /**
+ * `Contain`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/contain , MDN docs}
+ */
+ contain: ContainValue
+}
+type MaxWidthMaxwLiteral = `max-w-${MaxWidthRef1}`
+type MaxWidthValue = 'container' | MaxWidthMaxwLiteral
+interface TailwindMaxWidth {
+ /**
+ * `MaxWidth`
+ *
+ * Utilities for setting the maximum width of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/max-width Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/max-width , MDN docs}
+ */
+ maxWidth: MaxWidthValue
+}
+type AlignContentContentLiteral = `content-${AlignContentRef1}`
+type AlignContentValue = AlignContentContentLiteral
+interface TailwindAlignContent {
+ /**
+ * `AlignContent`
+ *
+ * Utilities for controlling how rows are positioned in multi-row flex and
+ * grid containers.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/align-content Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/align-content , MDN docs}
+ */
+ alignContent: AlignContentValue
+}
+type ContentLiteral = `content-${ContentRef1}`
+type ContentValue = ContentLiteral
+interface TailwindContent {
+ /**
+ * `Content`
+ *
+ * Utilities for controlling the content of the before and after
+ * pseudo-elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/content Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/content , MDN docs}
+ */
+ content: ContentValue
+}
+type CursorELiteral = `cursor-e-${CursorRef1}`
+type CursorNLiteral = `cursor-n-${CursorRef2}`
+type CursorNeLiteral = `cursor-ne-${CursorRef3}`
+type CursorNoLiteral = `cursor-no-${CursorRef4}`
+type CursorSLiteral = `cursor-s-${CursorRef5}`
+type CursorWLiteral = `cursor-w-${CursorRef6}`
+type CursorLiteral = `cursor-${CursorRef7}`
+type CursorValue =
+ | CursorELiteral
+ | CursorNLiteral
+ | CursorNeLiteral
+ | CursorNoLiteral
+ | CursorSLiteral
+ | CursorWLiteral
+ | CursorLiteral
+interface TailwindCursor {
+ /**
+ * `Cursor`
+ *
+ * Utilities for controlling the cursor style when hovering over an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/cursor Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/cursor , MDN docs}
+ */
+ cursor: CursorValue
+}
+type TextDecorationThicknessDecorationaccentLiteral =
+ `decoration-accent-${TextDecorationThicknessRef1}`
+type TextDecorationThicknessDecorationchartLiteral =
+ `decoration-chart-${TextDecorationThicknessRef2}`
+type TextDecorationThicknessDecorationprimaryLiteral =
+ `decoration-primary-${TextDecorationThicknessRef3}`
+type TextDecorationThicknessDecorationsidebarLiteral =
+ `decoration-sidebar-${TextDecorationThicknessRef4}`
+type TextDecorationThicknessDecorationLiteral =
+ `decoration-${TextDecorationThicknessRef5}`
+type TextDecorationThicknessValue =
+ | TextDecorationThicknessDecorationaccentLiteral
+ | TextDecorationThicknessDecorationchartLiteral
+ | TextDecorationThicknessDecorationprimaryLiteral
+ | TextDecorationThicknessDecorationsidebarLiteral
+ | TextDecorationThicknessDecorationLiteral
+interface TailwindTextDecorationThickness {
+ /**
+ * `TextDecorationThickness`
+ *
+ * Utilities for controlling the thickness of text decorations.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-decoration-thickness Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-thickness , MDN docs}
+ */
+ textDecorationThickness: TextDecorationThicknessValue
+}
+type TextDecorationColorDecorationLiteral =
+ `decoration-${TextDecorationColorRef1}`
+type TextDecorationColorValue = TextDecorationColorDecorationLiteral
+interface TailwindTextDecorationColor {
+ /**
+ * `TextDecorationColor`
+ *
+ * Utilities for controlling the color of text decorations.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-decoration-color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-color , MDN docs}
+ */
+ textDecorationColor: TextDecorationColorValue
+}
+type TextDecorationStyleDecorationLiteral =
+ `decoration-${TextDecorationStyleRef1}`
+type TextDecorationStyleValue = TextDecorationStyleDecorationLiteral
+interface TailwindTextDecorationStyle {
+ /**
+ * `TextDecorationStyle`
+ *
+ * Utilities for controlling the style of text decorations.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-decoration-style Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-style , MDN docs}
+ */
+ textDecorationStyle: TextDecorationStyleValue
+}
+type TransitionDelayDelayLiteral = `delay-${TransitionDelayRef1}`
+type TransitionDelayValue = TransitionDelayDelayLiteral
+interface TailwindTransitionDelay {
+ /**
+ * `TransitionDelay`
+ *
+ * Utilities for controlling the delay of CSS transitions.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transition-delay Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transition-delay , MDN docs}
+ */
+ transitionDelay: TransitionDelayValue
+}
+type FontVariantNumericValue =
+ | 'diagonal-fractions'
+ | 'lining-nums'
+ | 'normal-nums'
+ | 'oldstyle-nums'
+ | 'ordinal'
+ | 'proportional-nums'
+ | 'slashed-zero'
+ | 'stacked-fractions'
+ | 'tabular-nums'
+ | 'diagonal-fractions'
+ | 'lining-nums'
+ | 'normal-nums'
+ | 'oldstyle-nums'
+ | 'ordinal'
+ | 'proportional-nums'
+ | 'slashed-zero'
+ | 'stacked-fractions'
+ | 'tabular-nums'
+interface TailwindFontVariantNumeric {
+ /**
+ * `FontVariantNumeric`
+ *
+ * Utilities for controlling the variant of numbers.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-variant-numeric Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant-numeric , MDN docs}
+ */
+ fontVariantNumeric: FontVariantNumericValue
+}
+type AnimationDirectionDirectionLiteral = `direction-${AnimationDirectionRef1}`
+type AnimationDirectionValue = AnimationDirectionDirectionLiteral
+interface TailwindAnimationDirection {
+ /**
+ * `AnimationDirection`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/animation-direction , MDN docs}
+ */
+ animationDirection: AnimationDirectionValue
+}
+type TransitionDurationDurationLiteral = `duration-${TransitionDurationRef1}`
+type TransitionDurationValue = TransitionDurationDurationLiteral
+interface TailwindTransitionDuration {
+ /**
+ * `TransitionDuration`
+ *
+ * Utilities for controlling the duration of CSS transitions.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transition-duration Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transition-duration , MDN docs}
+ */
+ transitionDuration: TransitionDurationValue
+}
+type TransitionTimingFunctionEaseinLiteral =
+ `ease-in-${TransitionTimingFunctionRef1}`
+type TransitionTimingFunctionEaseLiteral =
+ `ease-${TransitionTimingFunctionRef2}`
+type TransitionTimingFunctionValue =
+ | TransitionTimingFunctionEaseinLiteral
+ | TransitionTimingFunctionEaseLiteral
+interface TailwindTransitionTimingFunction {
+ /**
+ * `TransitionTimingFunction`
+ *
+ * Utilities for controlling the easing of CSS transitions.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transition-timing-function Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transition-timing-function , MDN docs}
+ */
+ transitionTimingFunction: TransitionTimingFunctionValue
+}
+type FieldSizingValue =
+ | 'field-sizing-content'
+ | 'field-sizing-fixed'
+ | 'field-sizing-content'
+ | 'field-sizing-fixed'
+interface TailwindFieldSizing {
+ /**
+ * `FieldSizing`
+ *
+ * Utilities for controlling the sizing of form controls.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/field-sizing Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/field-sizing , MDN docs}
+ */
+ fieldSizing: FieldSizingValue
+}
+type FillAccentLiteral = `fill-accent-${FillRef1}`
+type FillCardLiteral = `fill-card-${FillRef2}`
+type FillChartLiteral = `fill-chart-${FillRef3}`
+type FillModeLiteral = `fill-mode-${FillRef4}`
+type FillMutedLiteral = `fill-muted-${FillRef5}`
+type FillPopoverLiteral = `fill-popover-${FillRef6}`
+type FillPrimaryLiteral = `fill-primary-${FillRef7}`
+type FillSecondaryLiteral = `fill-secondary-${FillRef8}`
+type FillSidebarLiteral = `fill-sidebar-${FillRef9}`
+type FillLiteral = `fill-${FillRef10}`
+type FillValue =
+ | FillAccentLiteral
+ | FillCardLiteral
+ | FillChartLiteral
+ | FillModeLiteral
+ | FillMutedLiteral
+ | FillPopoverLiteral
+ | FillPrimaryLiteral
+ | FillSecondaryLiteral
+ | FillSidebarLiteral
+ | FillLiteral
+interface TailwindFill {
+ /**
+ * `Fill`
+ *
+ * Utilities for styling the fill of SVG elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/fill Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/fill , MDN docs}
+ */
+ fill: FillValue
+}
+type FlexLiteral = `flex-${FlexRef1}`
+type FlexValue = FlexLiteral
+interface TailwindFlex {
+ /**
+ * `Flex`
+ *
+ * Utilities for controlling how flex items both grow and shrink.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/flex Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/flex , MDN docs}
+ */
+ flex: FlexValue
+}
+type FlexDirectionFlexLiteral = `flex-${FlexDirectionRef1}`
+type FlexDirectionValue = FlexDirectionFlexLiteral
+interface TailwindFlexDirection {
+ /**
+ * `FlexDirection`
+ *
+ * Utilities for controlling the direction of flex items.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/flex-direction Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/flex-direction , MDN docs}
+ */
+ flexDirection: FlexDirectionValue
+}
+type FlexWrapLiteral = `flex-wrap-${FlexWrapRef1}`
+type FlexWrapFlexLiteral = `flex-${FlexWrapRef2}`
+type FlexWrapValue = FlexWrapLiteral | FlexWrapFlexLiteral
+interface TailwindFlexWrap {
+ /**
+ * `FlexWrap`
+ *
+ * Utilities for controlling how flex items wrap.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/flex-wrap Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/flex-wrap , MDN docs}
+ */
+ flexWrap: FlexWrapValue
+}
+type FloatLiteral = `float-${FloatRef1}`
+type FloatValue = FloatLiteral
+interface TailwindFloat {
+ /**
+ * `Float`
+ *
+ * Utilities for controlling the wrapping of content around an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/float Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/float , MDN docs}
+ */
+ float: FloatValue
+}
+type FontWeightFontLiteral = `font-${FontWeightRef1}`
+type FontWeightValue = FontWeightFontLiteral
+interface TailwindFontWeight {
+ /**
+ * `FontWeight`
+ *
+ * Utilities for controlling the font weight of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-weight Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight , MDN docs}
+ */
+ fontWeight: FontWeightValue
+}
+type FontFamilyFontLiteral = `font-${FontFamilyRef1}`
+type FontFamilyValue = FontFamilyFontLiteral
+interface TailwindFontFamily {
+ /**
+ * `FontFamily`
+ *
+ * Utilities for controlling the font family of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-family Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-family , MDN docs}
+ */
+ fontFamily: FontFamilyValue
+}
+type FontStretchLiteral = `font-stretch-${FontStretchRef1}`
+type FontStretchValue = FontStretchLiteral
+interface TailwindFontStretch {
+ /**
+ * `FontStretch`
+ *
+ * Utilities for selecting the width of a font face.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-stretch Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-stretch , MDN docs}
+ */
+ fontStretch: FontStretchValue
+}
+type ForcedColorAdjustValue =
+ | 'forced-color-adjust-auto'
+ | 'forced-color-adjust-none'
+ | 'forced-color-adjust-auto'
+ | 'forced-color-adjust-none'
+interface TailwindForcedColorAdjust {
+ /**
+ * `ForcedColorAdjust`
+ *
+ * Utilities for opting in and out of forced colors.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/forced-color-adjust Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/forced-color-adjust , MDN docs}
+ */
+ forcedColorAdjust: ForcedColorAdjustValue
+}
+type GapXLiteral = `gap-x-${GapRef1}`
+type GapYLiteral = `gap-y-${GapRef1}`
+type GapLiteral = `gap-${GapRef1}`
+type GapValue = GapXLiteral | GapYLiteral | GapLiteral
+interface TailwindGap {
+ /**
+ * `Gap`
+ *
+ * Utilities for controlling gutters between grid and flexbox items.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/gap Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/gap , MDN docs}
+ */
+ gap: GapValue
+}
+type GridTemplateColumnsGridcolsLiteral = `grid-cols-${GridTemplateColumnsRef1}`
+type GridTemplateColumnsValue = GridTemplateColumnsGridcolsLiteral
+interface TailwindGridTemplateColumns {
+ /**
+ * `GridTemplateColumns`
+ *
+ * Utilities for specifying the columns in a grid layout.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-template-columns Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns , MDN docs}
+ */
+ gridTemplateColumns: GridTemplateColumnsValue
+}
+type GridAutoFlowGridflowLiteral = `grid-flow-${GridAutoFlowRef1}`
+type GridAutoFlowValue = GridAutoFlowGridflowLiteral
+interface TailwindGridAutoFlow {
+ /**
+ * `GridAutoFlow`
+ *
+ * Utilities for controlling how elements in a grid are auto-placed.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-auto-flow Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-auto-flow , MDN docs}
+ */
+ gridAutoFlow: GridAutoFlowValue
+}
+type GridTemplateRowsGridrowsLiteral = `grid-rows-${GridTemplateRowsRef1}`
+type GridTemplateRowsValue = GridTemplateRowsGridrowsLiteral
+interface TailwindGridTemplateRows {
+ /**
+ * `GridTemplateRows`
+ *
+ * Utilities for specifying the rows in a grid layout.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/grid-template-rows Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-rows , MDN docs}
+ */
+ gridTemplateRows: GridTemplateRowsValue
+}
+type FlexGrowValue = 'grow' | 'grow-0' | 'grow' | 'grow-0'
+interface TailwindFlexGrow {
+ /**
+ * `FlexGrow`
+ *
+ * Utilities for controlling how flex items grow.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/flex-grow Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/flex-grow , MDN docs}
+ */
+ flexGrow: FlexGrowValue
+}
+type HeightHLiteral = `h-${HeightRef1}` | 'h-screen'
+type HeightSizeLiteral = `size-${HeightRef1}`
+type HeightValue = HeightHLiteral | HeightSizeLiteral
+interface TailwindHeight {
+ /**
+ * `Height`
+ *
+ * Utilities for setting the height of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/height Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/height , MDN docs}
+ */
+ height: HeightValue
+}
+type HyphensLiteral = `hyphens-${HyphensRef1}`
+type HyphensValue = HyphensLiteral
+interface TailwindHyphens {
+ /**
+ * `Hyphens`
+ *
+ * Utilities for controlling how words should be hyphenated.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/hyphens Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/hyphens , MDN docs}
+ */
+ hyphens: HyphensValue
+}
+type BoxShadowInsetLiteral = `inset-${BoxShadowRef1}`
+type BoxShadowRingaccentLiteral = `ring-accent-${BoxShadowRef2}`
+type BoxShadowRingcardLiteral = `ring-card-${BoxShadowRef3}`
+type BoxShadowRingchartLiteral = `ring-chart-${BoxShadowRef4}`
+type BoxShadowRingmutedLiteral = `ring-muted-${BoxShadowRef5}`
+type BoxShadowRingoffsetLiteral =
+ | `ring-offset-${BoxShadowRef6}`
+ | 'ring-offset-0'
+ | 'ring-offset-1'
+ | 'ring-offset-2'
+ | 'ring-offset-4'
+ | 'ring-offset-8'
+ | 'ring-offset-amber-50'
+ | 'ring-offset-amber-100'
+ | 'ring-offset-amber-200'
+ | 'ring-offset-amber-300'
+ | 'ring-offset-amber-400'
+ | 'ring-offset-amber-500'
+ | 'ring-offset-amber-600'
+ | 'ring-offset-amber-700'
+ | 'ring-offset-amber-800'
+ | 'ring-offset-amber-900'
+ | 'ring-offset-amber-950'
+ | 'ring-offset-background'
+ | 'ring-offset-black'
+ | 'ring-offset-blue-50'
+ | 'ring-offset-blue-100'
+ | 'ring-offset-blue-200'
+ | 'ring-offset-blue-300'
+ | 'ring-offset-blue-400'
+ | 'ring-offset-blue-500'
+ | 'ring-offset-blue-600'
+ | 'ring-offset-blue-700'
+ | 'ring-offset-blue-800'
+ | 'ring-offset-blue-900'
+ | 'ring-offset-blue-950'
+ | 'ring-offset-card'
+ | 'ring-offset-card-foreground'
+ | 'ring-offset-chart-1'
+ | 'ring-offset-chart-2'
+ | 'ring-offset-chart-3'
+ | 'ring-offset-chart-4'
+ | 'ring-offset-chart-5'
+ | 'ring-offset-current'
+ | 'ring-offset-cyan-50'
+ | 'ring-offset-cyan-100'
+ | 'ring-offset-cyan-200'
+ | 'ring-offset-cyan-300'
+ | 'ring-offset-cyan-400'
+ | 'ring-offset-cyan-500'
+ | 'ring-offset-cyan-600'
+ | 'ring-offset-cyan-700'
+ | 'ring-offset-cyan-800'
+ | 'ring-offset-cyan-900'
+ | 'ring-offset-cyan-950'
+ | 'ring-offset-destructive'
+ | 'ring-offset-emerald-50'
+ | 'ring-offset-emerald-100'
+ | 'ring-offset-emerald-200'
+ | 'ring-offset-emerald-300'
+ | 'ring-offset-emerald-400'
+ | 'ring-offset-emerald-500'
+ | 'ring-offset-emerald-600'
+ | 'ring-offset-emerald-700'
+ | 'ring-offset-emerald-800'
+ | 'ring-offset-emerald-900'
+ | 'ring-offset-emerald-950'
+ | 'ring-offset-fd-accent'
+ | 'ring-offset-fd-accent-foreground'
+ | 'ring-offset-fd-background'
+ | 'ring-offset-fd-border'
+ | 'ring-offset-fd-card'
+ | 'ring-offset-fd-card-foreground'
+ | 'ring-offset-fd-diff-add'
+ | 'ring-offset-fd-diff-add-symbol'
+ | 'ring-offset-fd-diff-remove'
+ | 'ring-offset-fd-diff-remove-symbol'
+ | 'ring-offset-fd-error'
+ | 'ring-offset-fd-foreground'
+ | 'ring-offset-fd-info'
+ | 'ring-offset-fd-muted'
+ | 'ring-offset-fd-muted-foreground'
+ | 'ring-offset-fd-overlay'
+ | 'ring-offset-fd-popover'
+ | 'ring-offset-fd-popover-foreground'
+ | 'ring-offset-fd-primary'
+ | 'ring-offset-fd-primary-foreground'
+ | 'ring-offset-fd-ring'
+ | 'ring-offset-fd-secondary'
+ | 'ring-offset-fd-secondary-foreground'
+ | 'ring-offset-fd-success'
+ | 'ring-offset-fd-warning'
+ | 'ring-offset-fuchsia-50'
+ | 'ring-offset-fuchsia-100'
+ | 'ring-offset-fuchsia-200'
+ | 'ring-offset-fuchsia-300'
+ | 'ring-offset-fuchsia-400'
+ | 'ring-offset-fuchsia-500'
+ | 'ring-offset-fuchsia-600'
+ | 'ring-offset-fuchsia-700'
+ | 'ring-offset-fuchsia-800'
+ | 'ring-offset-fuchsia-900'
+ | 'ring-offset-fuchsia-950'
+ | 'ring-offset-gray-50'
+ | 'ring-offset-gray-100'
+ | 'ring-offset-gray-200'
+ | 'ring-offset-gray-300'
+ | 'ring-offset-gray-400'
+ | 'ring-offset-gray-500'
+ | 'ring-offset-gray-600'
+ | 'ring-offset-gray-700'
+ | 'ring-offset-gray-800'
+ | 'ring-offset-gray-900'
+ | 'ring-offset-gray-950'
+ | 'ring-offset-green-50'
+ | 'ring-offset-green-100'
+ | 'ring-offset-green-200'
+ | 'ring-offset-green-300'
+ | 'ring-offset-green-400'
+ | 'ring-offset-green-500'
+ | 'ring-offset-green-600'
+ | 'ring-offset-green-700'
+ | 'ring-offset-green-800'
+ | 'ring-offset-green-900'
+ | 'ring-offset-green-950'
+ | 'ring-offset-indigo-50'
+ | 'ring-offset-indigo-100'
+ | 'ring-offset-indigo-200'
+ | 'ring-offset-indigo-300'
+ | 'ring-offset-indigo-400'
+ | 'ring-offset-indigo-500'
+ | 'ring-offset-indigo-600'
+ | 'ring-offset-indigo-700'
+ | 'ring-offset-indigo-800'
+ | 'ring-offset-indigo-900'
+ | 'ring-offset-indigo-950'
+ | 'ring-offset-inherit'
+ | 'ring-offset-input'
+ | 'ring-offset-lime-50'
+ | 'ring-offset-lime-100'
+ | 'ring-offset-lime-200'
+ | 'ring-offset-lime-300'
+ | 'ring-offset-lime-400'
+ | 'ring-offset-lime-500'
+ | 'ring-offset-lime-600'
+ | 'ring-offset-lime-700'
+ | 'ring-offset-lime-800'
+ | 'ring-offset-lime-900'
+ | 'ring-offset-lime-950'
+ | 'ring-offset-muted'
+ | 'ring-offset-muted-foreground'
+ | 'ring-offset-neutral-50'
+ | 'ring-offset-neutral-100'
+ | 'ring-offset-neutral-200'
+ | 'ring-offset-neutral-300'
+ | 'ring-offset-neutral-400'
+ | 'ring-offset-neutral-500'
+ | 'ring-offset-neutral-600'
+ | 'ring-offset-neutral-700'
+ | 'ring-offset-neutral-800'
+ | 'ring-offset-neutral-900'
+ | 'ring-offset-neutral-950'
+ | 'ring-offset-orange-50'
+ | 'ring-offset-orange-100'
+ | 'ring-offset-orange-200'
+ | 'ring-offset-orange-300'
+ | 'ring-offset-orange-400'
+ | 'ring-offset-orange-500'
+ | 'ring-offset-orange-600'
+ | 'ring-offset-orange-700'
+ | 'ring-offset-orange-800'
+ | 'ring-offset-orange-900'
+ | 'ring-offset-orange-950'
+ | 'ring-offset-pink-50'
+ | 'ring-offset-pink-100'
+ | 'ring-offset-pink-200'
+ | 'ring-offset-pink-300'
+ | 'ring-offset-pink-400'
+ | 'ring-offset-pink-500'
+ | 'ring-offset-pink-600'
+ | 'ring-offset-pink-700'
+ | 'ring-offset-pink-800'
+ | 'ring-offset-pink-900'
+ | 'ring-offset-pink-950'
+ | 'ring-offset-popover'
+ | 'ring-offset-popover-foreground'
+ | 'ring-offset-purple-50'
+ | 'ring-offset-purple-100'
+ | 'ring-offset-purple-200'
+ | 'ring-offset-purple-300'
+ | 'ring-offset-purple-400'
+ | 'ring-offset-purple-500'
+ | 'ring-offset-purple-600'
+ | 'ring-offset-purple-700'
+ | 'ring-offset-purple-800'
+ | 'ring-offset-purple-900'
+ | 'ring-offset-purple-950'
+ | 'ring-offset-red-50'
+ | 'ring-offset-red-100'
+ | 'ring-offset-red-200'
+ | 'ring-offset-red-300'
+ | 'ring-offset-red-400'
+ | 'ring-offset-red-500'
+ | 'ring-offset-red-600'
+ | 'ring-offset-red-700'
+ | 'ring-offset-red-800'
+ | 'ring-offset-red-900'
+ | 'ring-offset-red-950'
+ | 'ring-offset-rose-50'
+ | 'ring-offset-rose-100'
+ | 'ring-offset-rose-200'
+ | 'ring-offset-rose-300'
+ | 'ring-offset-rose-400'
+ | 'ring-offset-rose-500'
+ | 'ring-offset-rose-600'
+ | 'ring-offset-rose-700'
+ | 'ring-offset-rose-800'
+ | 'ring-offset-rose-900'
+ | 'ring-offset-rose-950'
+ | 'ring-offset-secondary'
+ | 'ring-offset-secondary-foreground'
+ | 'ring-offset-sidebar'
+ | 'ring-offset-sidebar-accent'
+ | 'ring-offset-sidebar-accent-foreground'
+ | 'ring-offset-sidebar-border'
+ | 'ring-offset-sidebar-foreground'
+ | 'ring-offset-sidebar-primary'
+ | 'ring-offset-sidebar-primary-foreground'
+ | 'ring-offset-sidebar-ring'
+ | 'ring-offset-sky-50'
+ | 'ring-offset-sky-100'
+ | 'ring-offset-sky-200'
+ | 'ring-offset-sky-300'
+ | 'ring-offset-sky-400'
+ | 'ring-offset-sky-500'
+ | 'ring-offset-sky-600'
+ | 'ring-offset-sky-700'
+ | 'ring-offset-sky-800'
+ | 'ring-offset-sky-900'
+ | 'ring-offset-sky-950'
+ | 'ring-offset-slate-50'
+ | 'ring-offset-slate-100'
+ | 'ring-offset-slate-200'
+ | 'ring-offset-slate-300'
+ | 'ring-offset-slate-400'
+ | 'ring-offset-slate-500'
+ | 'ring-offset-slate-600'
+ | 'ring-offset-slate-700'
+ | 'ring-offset-slate-800'
+ | 'ring-offset-slate-900'
+ | 'ring-offset-slate-950'
+ | 'ring-offset-stone-50'
+ | 'ring-offset-stone-100'
+ | 'ring-offset-stone-200'
+ | 'ring-offset-stone-300'
+ | 'ring-offset-stone-400'
+ | 'ring-offset-stone-500'
+ | 'ring-offset-stone-600'
+ | 'ring-offset-stone-700'
+ | 'ring-offset-stone-800'
+ | 'ring-offset-stone-900'
+ | 'ring-offset-stone-950'
+ | 'ring-offset-teal-50'
+ | 'ring-offset-teal-100'
+ | 'ring-offset-teal-200'
+ | 'ring-offset-teal-300'
+ | 'ring-offset-teal-400'
+ | 'ring-offset-teal-500'
+ | 'ring-offset-teal-600'
+ | 'ring-offset-teal-700'
+ | 'ring-offset-teal-800'
+ | 'ring-offset-teal-900'
+ | 'ring-offset-teal-950'
+ | 'ring-offset-transparent'
+ | 'ring-offset-violet-50'
+ | 'ring-offset-violet-100'
+ | 'ring-offset-violet-200'
+ | 'ring-offset-violet-300'
+ | 'ring-offset-violet-400'
+ | 'ring-offset-violet-500'
+ | 'ring-offset-violet-600'
+ | 'ring-offset-violet-700'
+ | 'ring-offset-violet-800'
+ | 'ring-offset-violet-900'
+ | 'ring-offset-violet-950'
+ | 'ring-offset-white'
+ | 'ring-offset-yellow-50'
+ | 'ring-offset-yellow-100'
+ | 'ring-offset-yellow-200'
+ | 'ring-offset-yellow-300'
+ | 'ring-offset-yellow-400'
+ | 'ring-offset-yellow-500'
+ | 'ring-offset-yellow-600'
+ | 'ring-offset-yellow-700'
+ | 'ring-offset-yellow-800'
+ | 'ring-offset-yellow-900'
+ | 'ring-offset-yellow-950'
+ | 'ring-offset-zinc-50'
+ | 'ring-offset-zinc-100'
+ | 'ring-offset-zinc-200'
+ | 'ring-offset-zinc-300'
+ | 'ring-offset-zinc-400'
+ | 'ring-offset-zinc-500'
+ | 'ring-offset-zinc-600'
+ | 'ring-offset-zinc-700'
+ | 'ring-offset-zinc-800'
+ | 'ring-offset-zinc-900'
+ | 'ring-offset-zinc-950'
+type BoxShadowRingpopoverLiteral = `ring-popover-${BoxShadowRef7}`
+type BoxShadowRingprimaryLiteral = `ring-primary-${BoxShadowRef8}`
+type BoxShadowRingsecondaryLiteral = `ring-secondary-${BoxShadowRef9}`
+type BoxShadowRingsidebarLiteral = `ring-sidebar-${BoxShadowRef6}`
+type BoxShadowShadowaccentLiteral = `shadow-accent-${BoxShadowRef10}`
+type BoxShadowShadowcardLiteral = `shadow-card-${BoxShadowRef11}`
+type BoxShadowShadowchartLiteral = `shadow-chart-${BoxShadowRef12}`
+type BoxShadowShadowmutedLiteral = `shadow-muted-${BoxShadowRef13}`
+type BoxShadowShadowpopoverLiteral = `shadow-popover-${BoxShadowRef14}`
+type BoxShadowShadowprimaryLiteral = `shadow-primary-${BoxShadowRef15}`
+type BoxShadowShadowsecondaryLiteral = `shadow-secondary-${BoxShadowRef16}`
+type BoxShadowShadowsidebarLiteral = `shadow-sidebar-${BoxShadowRef6}`
+type BoxShadowRingLiteral = `ring-${BoxShadowRef17}`
+type BoxShadowShadowLiteral = `shadow-${BoxShadowRef18}`
+type BoxShadowValue =
+ | 'ring'
+ | 'shadow'
+ | BoxShadowInsetLiteral
+ | BoxShadowRingaccentLiteral
+ | BoxShadowRingcardLiteral
+ | BoxShadowRingchartLiteral
+ | BoxShadowRingmutedLiteral
+ | BoxShadowRingoffsetLiteral
+ | BoxShadowRingpopoverLiteral
+ | BoxShadowRingprimaryLiteral
+ | BoxShadowRingsecondaryLiteral
+ | BoxShadowRingsidebarLiteral
+ | BoxShadowShadowaccentLiteral
+ | BoxShadowShadowcardLiteral
+ | BoxShadowShadowchartLiteral
+ | BoxShadowShadowmutedLiteral
+ | BoxShadowShadowpopoverLiteral
+ | BoxShadowShadowprimaryLiteral
+ | BoxShadowShadowsecondaryLiteral
+ | BoxShadowShadowsidebarLiteral
+ | BoxShadowRingLiteral
+ | BoxShadowShadowLiteral
+interface TailwindBoxShadow {
+ /**
+ * `BoxShadow`
+ *
+ * Utilities for controlling the box shadow of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/box-shadow Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow , MDN docs}
+ */
+ boxShadow: BoxShadowValue
+}
+type IsolationValue =
+ | 'isolate'
+ | 'isolation-auto'
+ | 'isolate'
+ | 'isolation-auto'
+interface TailwindIsolation {
+ /**
+ * `Isolation`
+ *
+ * Utilities for controlling whether an element should explicitly create a new
+ * stacking context.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/isolation Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/isolation , MDN docs}
+ */
+ isolation: IsolationValue
+}
+type FontStyleValue = 'italic' | 'not-italic' | 'italic' | 'not-italic'
+interface TailwindFontStyle {
+ /**
+ * `FontStyle`
+ *
+ * Utilities for controlling the style of text.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-style Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-style , MDN docs}
+ */
+ fontStyle: FontStyleValue
+}
+type AlignItemsItemsLiteral = `items-${AlignItemsRef1}`
+type AlignItemsValue = AlignItemsItemsLiteral
+interface TailwindAlignItems {
+ /**
+ * `AlignItems`
+ *
+ * Utilities for controlling how flex and grid items are positioned along a
+ * container's cross axis.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/align-items Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/align-items , MDN docs}
+ */
+ alignItems: AlignItemsValue
+}
+type JustifyContentJustifyLiteral = `justify-${JustifyContentRef1}`
+type JustifyContentValue = JustifyContentJustifyLiteral
+interface TailwindJustifyContent {
+ /**
+ * `JustifyContent`
+ *
+ * Utilities for controlling how flex and grid items are positioned along a
+ * container's main axis.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/justify-content Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/justify-content , MDN docs}
+ */
+ justifyContent: JustifyContentValue
+}
+type JustifyItemsLiteral = `justify-items-${JustifyItemsRef1}`
+type JustifyItemsValue = JustifyItemsLiteral
+interface TailwindJustifyItems {
+ /**
+ * `JustifyItems`
+ *
+ * Utilities for controlling how grid items are aligned along their inline
+ * axis.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/justify-items Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/justify-items , MDN docs}
+ */
+ justifyItems: JustifyItemsValue
+}
+type JustifySelfLiteral = `justify-self-${JustifySelfRef1}`
+type JustifySelfValue = JustifySelfLiteral
+interface TailwindJustifySelf {
+ /**
+ * `JustifySelf`
+ *
+ * Utilities for controlling how an individual grid item is aligned along its
+ * inline axis.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/justify-self Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/justify-self , MDN docs}
+ */
+ justifySelf: JustifySelfValue
+}
+type LineHeightLeadingLiteral = `leading-${LineHeightRef1}`
+type LineHeightValue = LineHeightLeadingLiteral
+interface TailwindLineHeight {
+ /**
+ * `LineHeight`
+ *
+ * Utilities for controlling the leading, or line height, of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/line-height Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/line-height , MDN docs}
+ */
+ lineHeight: LineHeightValue
+}
+type LineClampLiteral = `line-clamp-${LineClampRef1}`
+type LineClampValue = LineClampLiteral
+interface TailwindLineClamp {
+ /**
+ * `LineClamp`
+ *
+ * Utilities for clamping text to a specific number of lines.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/line-clamp Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/line-clamp , MDN docs}
+ */
+ lineClamp: LineClampValue
+}
+type TextDecorationLineLineLiteral = `line-${TextDecorationLineRef1}`
+type TextDecorationLineValue =
+ | 'no-underline'
+ | 'overline'
+ | 'underline'
+ | TextDecorationLineLineLiteral
+interface TailwindTextDecorationLine {
+ /**
+ * `TextDecorationLine`
+ *
+ * Utilities for controlling the decoration of text.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-decoration-line Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-decoration-line , MDN docs}
+ */
+ textDecorationLine: TextDecorationLineValue
+}
+type ListStyleTypeListLiteral = `list-${ListStyleTypeRef1}`
+type ListStyleTypeValue = ListStyleTypeListLiteral
+interface TailwindListStyleType {
+ /**
+ * `ListStyleType`
+ *
+ * Utilities for controlling the marker style of a list.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/list-style-type Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type , MDN docs}
+ */
+ listStyleType: ListStyleTypeValue
+}
+type ListStyleImageValue = 'list-image-none' | 'list-image-none'
+interface TailwindListStyleImage {
+ /**
+ * `ListStyleImage`
+ *
+ * Utilities for controlling the marker images for list items.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/list-style-image Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-image , MDN docs}
+ */
+ listStyleImage: ListStyleImageValue
+}
+type ListStylePositionValue =
+ | 'list-inside'
+ | 'list-outside'
+ | 'list-inside'
+ | 'list-outside'
+interface TailwindListStylePosition {
+ /**
+ * `ListStylePosition`
+ *
+ * Utilities for controlling the position of bullets and numbers in lists.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/list-style-position Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-position , MDN docs}
+ */
+ listStylePosition: ListStylePositionValue
+}
+type MaskCompositeMaskLiteral = `mask-${MaskCompositeRef1}`
+type MaskCompositeValue = MaskCompositeMaskLiteral
+interface TailwindMaskComposite {
+ /**
+ * `MaskComposite`
+ *
+ * Utilities for controlling how multiple masks are combined together.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-composite Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-composite , MDN docs}
+ */
+ maskComposite: MaskCompositeValue
+}
+type MaskModeMaskLiteral = `mask-${MaskModeRef1}`
+type MaskModeValue = MaskModeMaskLiteral
+interface TailwindMaskMode {
+ /**
+ * `MaskMode`
+ *
+ * Utilities for controlling an element's mask mode.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-mode Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-mode , MDN docs}
+ */
+ maskMode: MaskModeValue
+}
+type MaskSizeMaskLiteral = `mask-${MaskSizeRef1}`
+type MaskSizeValue = MaskSizeMaskLiteral
+interface TailwindMaskSize {
+ /**
+ * `MaskSize`
+ *
+ * Utilities for controlling the size of an element's mask image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-size Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-size , MDN docs}
+ */
+ maskSize: MaskSizeValue
+}
+type MaskPositionMaskbottomLiteral = `mask-bottom-${MaskPositionRef1}`
+type MaskPositionMasktopLiteral = `mask-top-${MaskPositionRef2}`
+type MaskPositionMaskLiteral = `mask-${MaskPositionRef3}`
+type MaskPositionValue =
+ | MaskPositionMaskbottomLiteral
+ | MaskPositionMasktopLiteral
+ | MaskPositionMaskLiteral
+interface TailwindMaskPosition {
+ /**
+ * `MaskPosition`
+ *
+ * Utilities for controlling the position of an element's mask image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-position Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-position , MDN docs}
+ */
+ maskPosition: MaskPositionValue
+}
+type MaskClipLiteral = `mask-clip-${MaskClipRef1}`
+type MaskClipMaskLiteral = `mask-${MaskClipRef2}`
+type MaskClipValue = MaskClipLiteral | MaskClipMaskLiteral
+interface TailwindMaskClip {
+ /**
+ * `MaskClip`
+ *
+ * Utilities for controlling the bounding box of an element's mask.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-clip Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-clip , MDN docs}
+ */
+ maskClip: MaskClipValue
+}
+type MaskRepeatLiteral = `mask-repeat-${MaskRepeatRef1}`
+type MaskRepeatMaskLiteral = `mask-${MaskRepeatRef2}`
+type MaskRepeatValue = MaskRepeatLiteral | MaskRepeatMaskLiteral
+interface TailwindMaskRepeat {
+ /**
+ * `MaskRepeat`
+ *
+ * Utilities for controlling the repetition of an element's mask image.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-repeat Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-repeat , MDN docs}
+ */
+ maskRepeat: MaskRepeatValue
+}
+type MaskOriginLiteral = `mask-origin-${MaskOriginRef1}`
+type MaskOriginValue = MaskOriginLiteral
+interface TailwindMaskOrigin {
+ /**
+ * `MaskOrigin`
+ *
+ * Utilities for controlling how an element's mask image is positioned
+ * relative to borders, padding, and content.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-origin Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-origin , MDN docs}
+ */
+ maskOrigin: MaskOriginValue
+}
+type MaskTypeValue =
+ | 'mask-type-alpha'
+ | 'mask-type-luminance'
+ | 'mask-type-alpha'
+ | 'mask-type-luminance'
+interface TailwindMaskType {
+ /**
+ * `MaskType`
+ *
+ * Utilities for controlling how an SVG mask is interpreted.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mask-type Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mask-type , MDN docs}
+ */
+ maskType: MaskTypeValue
+}
+type MaxHeightMaxhLiteral = `max-h-${MaxHeightRef1}`
+type MaxHeightValue = MaxHeightMaxhLiteral
+interface TailwindMaxHeight {
+ /**
+ * `MaxHeight`
+ *
+ * Utilities for setting the maximum height of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/max-height Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/max-height , MDN docs}
+ */
+ maxHeight: MaxHeightValue
+}
+type MinHeightMinhLiteral = `min-h-${MinHeightRef1}`
+type MinHeightValue = MinHeightMinhLiteral
+interface TailwindMinHeight {
+ /**
+ * `MinHeight`
+ *
+ * Utilities for setting the minimum height of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/min-height Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/min-height , MDN docs}
+ */
+ minHeight: MinHeightValue
+}
+type MinWidthMinwLiteral = `min-w-${MinWidthRef1}`
+type MinWidthValue = MinWidthMinwLiteral
+interface TailwindMinWidth {
+ /**
+ * `MinWidth`
+ *
+ * Utilities for setting the minimum width of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/min-width Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/min-width , MDN docs}
+ */
+ minWidth: MinWidthValue
+}
+type MixBlendModeMixblendLiteral = `mix-blend-${MixBlendModeRef1}`
+type MixBlendModeMixblendcolorLiteral = `mix-blend-color-${MixBlendModeRef2}`
+type MixBlendModeValue =
+ | MixBlendModeMixblendLiteral
+ | MixBlendModeMixblendcolorLiteral
+interface TailwindMixBlendMode {
+ /**
+ * `MixBlendMode`
+ *
+ * Utilities for controlling how an element should blend with the background.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/mix-blend-mode Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode , MDN docs}
+ */
+ mixBlendMode: MixBlendModeValue
+}
+type ObjectPositionObjectbottomLiteral = `object-bottom-${ObjectPositionRef1}`
+type ObjectPositionObjectleftLiteral = `object-left-${ObjectPositionRef2}`
+type ObjectPositionObjectrightLiteral = `object-right-${ObjectPositionRef3}`
+type ObjectPositionObjecttopLiteral = `object-top-${ObjectPositionRef4}`
+type ObjectPositionObjectLiteral = `object-${ObjectPositionRef5}`
+type ObjectPositionValue =
+ | ObjectPositionObjectbottomLiteral
+ | ObjectPositionObjectleftLiteral
+ | ObjectPositionObjectrightLiteral
+ | ObjectPositionObjecttopLiteral
+ | ObjectPositionObjectLiteral
+interface TailwindObjectPosition {
+ /**
+ * `ObjectPosition`
+ *
+ * Utilities for controlling how a replaced element's content should be
+ * positioned within its container.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/object-position Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/object-position , MDN docs}
+ */
+ objectPosition: ObjectPositionValue
+}
+type ObjectFitObjectLiteral = `object-${ObjectFitRef1}`
+type ObjectFitValue = ObjectFitObjectLiteral
+interface TailwindObjectFit {
+ /**
+ * `ObjectFit`
+ *
+ * Utilities for controlling how a replaced element's content should be
+ * resized.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/object-fit Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit , MDN docs}
+ */
+ objectFit: ObjectFitValue
+}
+type OpacityLiteral = `opacity-${OpacityRef1}`
+type OpacityValue = OpacityLiteral
+interface TailwindOpacity {
+ /**
+ * `Opacity`
+ *
+ * Utilities for controlling the opacity of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/opacity Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/opacity , MDN docs}
+ */
+ opacity: OpacityValue
+}
+type TransformOriginOriginbottomLiteral = `origin-bottom-${TransformOriginRef1}`
+type TransformOriginOrigintopLiteral = `origin-top-${TransformOriginRef2}`
+type TransformOriginOriginLiteral = `origin-${TransformOriginRef3}`
+type TransformOriginValue =
+ | TransformOriginOriginbottomLiteral
+ | TransformOriginOrigintopLiteral
+ | TransformOriginOriginLiteral
+interface TailwindTransformOrigin {
+ /**
+ * `TransformOrigin`
+ *
+ * Utilities for specifying the origin for an element's transformations.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transform-origin Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-origin , MDN docs}
+ */
+ transformOrigin: TransformOriginValue
+}
+type OutlineWidthOutlineaccentLiteral = `outline-accent-${OutlineWidthRef1}`
+type OutlineWidthOutlinechartLiteral = `outline-chart-${OutlineWidthRef2}`
+type OutlineWidthOutlineprimaryLiteral = `outline-primary-${OutlineWidthRef3}`
+type OutlineWidthOutlinesidebarLiteral = `outline-sidebar-${OutlineWidthRef4}`
+type OutlineWidthOutlineLiteral = `outline-${OutlineWidthRef5}`
+type OutlineWidthValue =
+ | 'outline'
+ | OutlineWidthOutlineaccentLiteral
+ | OutlineWidthOutlinechartLiteral
+ | OutlineWidthOutlineprimaryLiteral
+ | OutlineWidthOutlinesidebarLiteral
+ | OutlineWidthOutlineLiteral
+interface TailwindOutlineWidth {
+ /**
+ * `OutlineWidth`
+ *
+ * Utilities for controlling the width of an element's outline.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/outline-width Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/outline-width , MDN docs}
+ */
+ outlineWidth: OutlineWidthValue
+}
+type OutlineColorOutlineLiteral = `outline-${OutlineColorRef1}`
+type OutlineColorValue = OutlineColorOutlineLiteral
+interface TailwindOutlineColor {
+ /**
+ * `OutlineColor`
+ *
+ * Utilities for controlling the color of an element's outline.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/outline-color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/outline-color , MDN docs}
+ */
+ outlineColor: OutlineColorValue
+}
+type OutlineStyleOutlineLiteral = `outline-${OutlineStyleRef1}`
+type OutlineStyleValue = OutlineStyleOutlineLiteral
+interface TailwindOutlineStyle {
+ /**
+ * `OutlineStyle`
+ *
+ * Utilities for controlling the style of an element's outline.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/outline-style Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/outline-style , MDN docs}
+ */
+ outlineStyle: OutlineStyleValue
+}
+type OverflowXLiteral = `overflow-x-${OverflowRef1}`
+type OverflowYLiteral = `overflow-y-${OverflowRef2}`
+type OverflowLiteral = `overflow-${OverflowRef3}`
+type OverflowValue = OverflowXLiteral | OverflowYLiteral | OverflowLiteral
+interface TailwindOverflow {
+ /**
+ * `Overflow`
+ *
+ * Utilities for controlling how an element handles content that is too large
+ * for the container.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/overflow Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/overflow , MDN docs}
+ */
+ overflow: OverflowValue
+}
+type TextOverflowValue =
+ | 'overflow-ellipsis'
+ | 'text-clip'
+ | 'text-ellipsis'
+ | 'truncate'
+ | 'overflow-ellipsis'
+ | 'text-clip'
+ | 'text-ellipsis'
+ | 'truncate'
+interface TailwindTextOverflow {
+ /**
+ * `TextOverflow`
+ *
+ * Utilities for controlling how the text of an element overflows.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-overflow Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-overflow , MDN docs}
+ */
+ textOverflow: TextOverflowValue
+}
+type OverscrollBehaviorOverscrollxLiteral =
+ `overscroll-x-${OverscrollBehaviorRef1}`
+type OverscrollBehaviorOverscrollyLiteral =
+ `overscroll-y-${OverscrollBehaviorRef2}`
+type OverscrollBehaviorOverscrollLiteral =
+ `overscroll-${OverscrollBehaviorRef3}`
+type OverscrollBehaviorValue =
+ | OverscrollBehaviorOverscrollxLiteral
+ | OverscrollBehaviorOverscrollyLiteral
+ | OverscrollBehaviorOverscrollLiteral
+interface TailwindOverscrollBehavior {
+ /**
+ * `OverscrollBehavior`
+ *
+ * Utilities for controlling how the browser behaves when reaching the
+ * boundary of a scrolling area.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/overscroll-behavior Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior , MDN docs}
+ */
+ overscrollBehavior: OverscrollBehaviorValue
+}
+type PaddingPbLiteral = `pb-${PaddingRef1}`
+type PaddingPLiteral = `p-${PaddingRef1}`
+type PaddingPeLiteral = `pe-${PaddingRef1}`
+type PaddingPlLiteral = `pl-${PaddingRef1}`
+type PaddingPrLiteral = `pr-${PaddingRef1}`
+type PaddingPsLiteral = `ps-${PaddingRef1}`
+type PaddingPtLiteral = `pt-${PaddingRef1}`
+type PaddingPxLiteral = `px-${PaddingRef1}`
+type PaddingPyLiteral = `py-${PaddingRef1}`
+type PaddingValue =
+ | PaddingPbLiteral
+ | PaddingPLiteral
+ | PaddingPeLiteral
+ | PaddingPlLiteral
+ | PaddingPrLiteral
+ | PaddingPsLiteral
+ | PaddingPtLiteral
+ | PaddingPxLiteral
+ | PaddingPyLiteral
+interface TailwindPadding {
+ /**
+ * `Padding`
+ *
+ * Utilities for controlling an element's padding.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/padding Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/padding , MDN docs}
+ */
+ padding: PaddingValue
+}
+type AnimationPlayStateValue =
+ | 'paused'
+ | 'play-state-initial'
+ | 'running'
+ | 'paused'
+ | 'play-state-initial'
+ | 'running'
+interface TailwindAnimationPlayState {
+ /**
+ * `AnimationPlayState`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/animation-play-state , MDN docs}
+ */
+ animationPlayState: AnimationPlayStateValue
+}
+type PerspectiveLiteral = `perspective-${PerspectiveRef1}`
+type PerspectiveValue = PerspectiveLiteral
+interface TailwindPerspective {
+ /**
+ * `Perspective`
+ *
+ * Utilities for controlling an element's perspective when placed in 3D space.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/perspective Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/perspective , MDN docs}
+ */
+ perspective: PerspectiveValue
+}
+type PerspectiveOriginBottomLiteral =
+ `perspective-origin-bottom-${PerspectiveOriginRef1}`
+type PerspectiveOriginTopLiteral =
+ `perspective-origin-top-${PerspectiveOriginRef2}`
+type PerspectiveOriginLiteral = `perspective-origin-${PerspectiveOriginRef3}`
+type PerspectiveOriginValue =
+ | PerspectiveOriginBottomLiteral
+ | PerspectiveOriginTopLiteral
+ | PerspectiveOriginLiteral
+interface TailwindPerspectiveOrigin {
+ /**
+ * `PerspectiveOrigin`
+ *
+ * Utilities for controlling an element's perspective origin when placed in 3D
+ * space.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/perspective-origin Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/perspective-origin , MDN docs}
+ */
+ perspectiveOrigin: PerspectiveOriginValue
+}
+type PlaceContentLiteral = `place-content-${PlaceContentRef1}`
+type PlaceContentValue = PlaceContentLiteral
+interface TailwindPlaceContent {
+ /**
+ * `PlaceContent`
+ *
+ * Utilities for controlling how content is justified and aligned at the same
+ * time.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/place-content Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/place-content , MDN docs}
+ */
+ placeContent: PlaceContentValue
+}
+type PlaceItemsLiteral = `place-items-${PlaceItemsRef1}`
+type PlaceItemsValue = PlaceItemsLiteral
+interface TailwindPlaceItems {
+ /**
+ * `PlaceItems`
+ *
+ * Utilities for controlling how items are justified and aligned at the same
+ * time.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/place-items Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/place-items , MDN docs}
+ */
+ placeItems: PlaceItemsValue
+}
+type PlaceSelfLiteral = `place-self-${PlaceSelfRef1}`
+type PlaceSelfValue = PlaceSelfLiteral
+interface TailwindPlaceSelf {
+ /**
+ * `PlaceSelf`
+ *
+ * Utilities for controlling how an individual item is justified and aligned
+ * at the same time.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/place-self Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/place-self , MDN docs}
+ */
+ placeSelf: PlaceSelfValue
+}
+type ColorPlaceholderaccentLiteral = `placeholder-accent-${ColorRef1}`
+type ColorPlaceholdercardLiteral = `placeholder-card-${ColorRef2}`
+type ColorPlaceholderchartLiteral = `placeholder-chart-${ColorRef3}`
+type ColorPlaceholdermutedLiteral = `placeholder-muted-${ColorRef4}`
+type ColorPlaceholderpopoverLiteral = `placeholder-popover-${ColorRef5}`
+type ColorPlaceholderprimaryLiteral = `placeholder-primary-${ColorRef6}`
+type ColorPlaceholdersecondaryLiteral = `placeholder-secondary-${ColorRef7}`
+type ColorPlaceholdersidebarLiteral = `placeholder-sidebar-${ColorRef8}`
+type ColorTextaccentLiteral = `text-accent-${ColorRef9}`
+type ColorTextcardLiteral = `text-card-${ColorRef10}`
+type ColorTextchartLiteral = `text-chart-${ColorRef11}`
+type ColorTextmutedLiteral = `text-muted-${ColorRef12}`
+type ColorTextpopoverLiteral = `text-popover-${ColorRef13}`
+type ColorTextprimaryLiteral = `text-primary-${ColorRef14}`
+type ColorTextsecondaryLiteral = `text-secondary-${ColorRef15}`
+type ColorTextsidebarLiteral = `text-sidebar-${ColorRef8}`
+type ColorPlaceholderLiteral = `placeholder-${ColorRef16}`
+type ColorTextLiteral = `text-${ColorRef16}`
+type ColorValue =
+ | ColorPlaceholderaccentLiteral
+ | ColorPlaceholdercardLiteral
+ | ColorPlaceholderchartLiteral
+ | ColorPlaceholdermutedLiteral
+ | ColorPlaceholderpopoverLiteral
+ | ColorPlaceholderprimaryLiteral
+ | ColorPlaceholdersecondaryLiteral
+ | ColorPlaceholdersidebarLiteral
+ | ColorTextaccentLiteral
+ | ColorTextcardLiteral
+ | ColorTextchartLiteral
+ | ColorTextmutedLiteral
+ | ColorTextpopoverLiteral
+ | ColorTextprimaryLiteral
+ | ColorTextsecondaryLiteral
+ | ColorTextsidebarLiteral
+ | ColorPlaceholderLiteral
+ | ColorTextLiteral
+interface TailwindColor {
+ /**
+ * `Color`
+ *
+ * Utilities for controlling the text color of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/color Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/color , MDN docs}
+ */
+ color: ColorValue
+}
+type PointerEventsValue =
+ | 'pointer-events-auto'
+ | 'pointer-events-none'
+ | 'pointer-events-auto'
+ | 'pointer-events-none'
+interface TailwindPointerEvents {
+ /**
+ * `PointerEvents`
+ *
+ * Utilities for controlling whether an element responds to pointer events.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/pointer-events Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events , MDN docs}
+ */
+ pointerEvents: PointerEventsValue
+}
+type AnimationIterationCountRepeatLiteral =
+ `repeat-${AnimationIterationCountRef1}`
+type AnimationIterationCountValue = AnimationIterationCountRepeatLiteral
+interface TailwindAnimationIterationCount {
+ /**
+ * `AnimationIterationCount`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/animation-iteration-count , MDN docs}
+ */
+ animationIterationCount: AnimationIterationCountValue
+}
+type ResizeLiteral = `resize-${ResizeRef1}`
+type ResizeValue = 'resize' | ResizeLiteral
+interface TailwindResize {
+ /**
+ * `Resize`
+ *
+ * Utilities for controlling how an element can be resized.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/resize Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/resize , MDN docs}
+ */
+ resize: ResizeValue
+}
+type BorderRadiusRoundedbLiteral = `rounded-b-${BorderRadiusRef1}`
+type BorderRadiusRoundedblLiteral = `rounded-bl-${BorderRadiusRef1}`
+type BorderRadiusRoundedbrLiteral = `rounded-br-${BorderRadiusRef1}`
+type BorderRadiusRoundedeLiteral = `rounded-e-${BorderRadiusRef1}`
+type BorderRadiusRoundedeeLiteral = `rounded-ee-${BorderRadiusRef1}`
+type BorderRadiusRoundedesLiteral = `rounded-es-${BorderRadiusRef1}`
+type BorderRadiusRoundedlLiteral = `rounded-l-${BorderRadiusRef1}`
+type BorderRadiusRoundedrLiteral = `rounded-r-${BorderRadiusRef1}`
+type BorderRadiusRoundedsLiteral = `rounded-s-${BorderRadiusRef1}`
+type BorderRadiusRoundedseLiteral = `rounded-se-${BorderRadiusRef1}`
+type BorderRadiusRoundedssLiteral = `rounded-ss-${BorderRadiusRef1}`
+type BorderRadiusRoundedtLiteral = `rounded-t-${BorderRadiusRef1}`
+type BorderRadiusRoundedtlLiteral = `rounded-tl-${BorderRadiusRef1}`
+type BorderRadiusRoundedtrLiteral = `rounded-tr-${BorderRadiusRef1}`
+type BorderRadiusRoundedLiteral = `rounded-${BorderRadiusRef1}`
+type BorderRadiusValue =
+ | BorderRadiusRoundedbLiteral
+ | BorderRadiusRoundedblLiteral
+ | BorderRadiusRoundedbrLiteral
+ | BorderRadiusRoundedeLiteral
+ | BorderRadiusRoundedeeLiteral
+ | BorderRadiusRoundedesLiteral
+ | BorderRadiusRoundedlLiteral
+ | BorderRadiusRoundedrLiteral
+ | BorderRadiusRoundedsLiteral
+ | BorderRadiusRoundedseLiteral
+ | BorderRadiusRoundedssLiteral
+ | BorderRadiusRoundedtLiteral
+ | BorderRadiusRoundedtlLiteral
+ | BorderRadiusRoundedtrLiteral
+ | BorderRadiusRoundedLiteral
+interface TailwindBorderRadius {
+ /**
+ * `BorderRadius`
+ *
+ * Utilities for controlling the border radius of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/border-radius Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius , MDN docs}
+ */
+ borderRadius: BorderRadiusValue
+}
+type ColorSchemeSchemelightLiteral = `scheme-light-${ColorSchemeRef1}`
+type ColorSchemeSchemeLiteral = `scheme-${ColorSchemeRef2}`
+type ColorSchemeValue = ColorSchemeSchemelightLiteral | ColorSchemeSchemeLiteral
+interface TailwindColorScheme {
+ /**
+ * `ColorScheme`
+ *
+ * Utilities for controlling the color scheme of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/color-scheme Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme , MDN docs}
+ */
+ colorScheme: ColorSchemeValue
+}
+type ScrollBehaviorValue =
+ | 'scroll-auto'
+ | 'scroll-smooth'
+ | 'scroll-auto'
+ | 'scroll-smooth'
+interface TailwindScrollBehavior {
+ /**
+ * `ScrollBehavior`
+ *
+ * Utilities for controlling the scroll behavior of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scroll-behavior Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-behavior , MDN docs}
+ */
+ scrollBehavior: ScrollBehaviorValue
+}
+type ScrollPaddingScrollpLiteral = `scroll-p-${ScrollPaddingRef1}`
+type ScrollPaddingScrollpbLiteral = `scroll-pb-${ScrollPaddingRef1}`
+type ScrollPaddingScrollpeLiteral = `scroll-pe-${ScrollPaddingRef1}`
+type ScrollPaddingScrollplLiteral = `scroll-pl-${ScrollPaddingRef1}`
+type ScrollPaddingScrollprLiteral = `scroll-pr-${ScrollPaddingRef1}`
+type ScrollPaddingScrollpsLiteral = `scroll-ps-${ScrollPaddingRef1}`
+type ScrollPaddingScrollptLiteral = `scroll-pt-${ScrollPaddingRef1}`
+type ScrollPaddingScrollpxLiteral = `scroll-px-${ScrollPaddingRef1}`
+type ScrollPaddingScrollpyLiteral = `scroll-py-${ScrollPaddingRef1}`
+type ScrollPaddingValue =
+ | ScrollPaddingScrollpLiteral
+ | ScrollPaddingScrollpbLiteral
+ | ScrollPaddingScrollpeLiteral
+ | ScrollPaddingScrollplLiteral
+ | ScrollPaddingScrollprLiteral
+ | ScrollPaddingScrollpsLiteral
+ | ScrollPaddingScrollptLiteral
+ | ScrollPaddingScrollpxLiteral
+ | ScrollPaddingScrollpyLiteral
+interface TailwindScrollPadding {
+ /**
+ * `ScrollPadding`
+ *
+ * Utilities for controlling an element's scroll offset within a snap
+ * container.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scroll-padding Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-padding , MDN docs}
+ */
+ scrollPadding: ScrollPaddingValue
+}
+type UserSelectSelectLiteral = `select-${UserSelectRef1}`
+type UserSelectValue = UserSelectSelectLiteral
+interface TailwindUserSelect {
+ /**
+ * `UserSelect`
+ *
+ * Utilities for controlling whether the user can select text in an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/user-select Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/user-select , MDN docs}
+ */
+ userSelect: UserSelectValue
+}
+type AlignSelfSelfLiteral = `self-${AlignSelfRef1}`
+type AlignSelfValue = AlignSelfSelfLiteral
+interface TailwindAlignSelf {
+ /**
+ * `AlignSelf`
+ *
+ * Utilities for controlling how an individual flex or grid item is positioned
+ * along its container's cross axis.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/align-self Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/align-self , MDN docs}
+ */
+ alignSelf: AlignSelfValue
+}
+type FlexShrinkValue = 'shrink' | 'shrink-0' | 'shrink' | 'shrink-0'
+interface TailwindFlexShrink {
+ /**
+ * `FlexShrink`
+ *
+ * Utilities for controlling how flex items shrink.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/flex-shrink Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/flex-shrink , MDN docs}
+ */
+ flexShrink: FlexShrinkValue
+}
+type WidthSizeLiteral = `size-${WidthRef1}`
+type WidthWLiteral =
+ | `w-${WidthRef1}`
+ | 'w-2xl'
+ | 'w-2xs'
+ | 'w-3xl'
+ | 'w-3xs'
+ | 'w-4xl'
+ | 'w-5xl'
+ | 'w-6xl'
+ | 'w-7xl'
+ | 'w-lg'
+ | 'w-md'
+ | 'w-screen'
+ | 'w-sm'
+ | 'w-xl'
+ | 'w-xs'
+type WidthValue = WidthSizeLiteral | WidthWLiteral
+interface TailwindWidth {
+ /**
+ * `Width`
+ *
+ * Utilities for setting the width of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/width Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/width , MDN docs}
+ */
+ width: WidthValue
+}
+type ScrollSnapAlignSnapLiteral = `snap-${ScrollSnapAlignRef1}`
+type ScrollSnapAlignValue = ScrollSnapAlignSnapLiteral
+interface TailwindScrollSnapAlign {
+ /**
+ * `ScrollSnapAlign`
+ *
+ * Utilities for controlling the scroll snap alignment of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scroll-snap-align Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-align , MDN docs}
+ */
+ scrollSnapAlign: ScrollSnapAlignValue
+}
+type ScrollSnapStopValue =
+ | 'snap-always'
+ | 'snap-normal'
+ | 'snap-always'
+ | 'snap-normal'
+interface TailwindScrollSnapStop {
+ /**
+ * `ScrollSnapStop`
+ *
+ * Utilities for controlling whether you can skip past possible snap
+ * positions.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scroll-snap-stop Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-stop , MDN docs}
+ */
+ scrollSnapStop: ScrollSnapStopValue
+}
+type ScrollSnapTypeSnapLiteral = `snap-${ScrollSnapTypeRef1}`
+type ScrollSnapTypeValue = ScrollSnapTypeSnapLiteral
+interface TailwindScrollSnapType {
+ /**
+ * `ScrollSnapType`
+ *
+ * Utilities for controlling how strictly snap points are enforced in a snap
+ * container.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/scroll-snap-type Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/scroll-snap-type , MDN docs}
+ */
+ scrollSnapType: ScrollSnapTypeValue
+}
+type StrokeWidthStrokeaccentLiteral = `stroke-accent-${StrokeWidthRef1}`
+type StrokeWidthStrokechartLiteral = `stroke-chart-${StrokeWidthRef2}`
+type StrokeWidthStrokeprimaryLiteral = `stroke-primary-${StrokeWidthRef3}`
+type StrokeWidthStrokesidebarLiteral = `stroke-sidebar-${StrokeWidthRef4}`
+type StrokeWidthStrokeLiteral = `stroke-${StrokeWidthRef5}`
+type StrokeWidthValue =
+ | StrokeWidthStrokeaccentLiteral
+ | StrokeWidthStrokechartLiteral
+ | StrokeWidthStrokeprimaryLiteral
+ | StrokeWidthStrokesidebarLiteral
+ | StrokeWidthStrokeLiteral
+interface TailwindStrokeWidth {
+ /**
+ * `StrokeWidth`
+ *
+ * Utilities for styling the stroke width of SVG elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/stroke-width Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/stroke-width , MDN docs}
+ */
+ strokeWidth: StrokeWidthValue
+}
+type StrokeLiteral = `stroke-${StrokeRef1}`
+type StrokeValue = StrokeLiteral
+interface TailwindStroke {
+ /**
+ * `Stroke`
+ *
+ * Utilities for styling the stroke of SVG elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/stroke Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/stroke , MDN docs}
+ */
+ stroke: StrokeValue
+}
+type TableLayoutValue =
+ | 'table-auto'
+ | 'table-fixed'
+ | 'table-auto'
+ | 'table-fixed'
+interface TailwindTableLayout {
+ /**
+ * `TableLayout`
+ *
+ * Utilities for controlling the table layout algorithm.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/table-layout Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/table-layout , MDN docs}
+ */
+ tableLayout: TableLayoutValue
+}
+type FontSizeTextLiteral = `text-${FontSizeRef1}`
+type FontSizeValue = FontSizeTextLiteral
+interface TailwindFontSize {
+ /**
+ * `FontSize`
+ *
+ * Utilities for controlling the font size of an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/font-size Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/font-size , MDN docs}
+ */
+ fontSize: FontSizeValue
+}
+type TextWrapTextLiteral = `text-${TextWrapRef1}`
+type TextWrapValue = TextWrapTextLiteral
+interface TailwindTextWrap {
+ /**
+ * `TextWrap`
+ *
+ * Utilities for controlling how text wraps within an element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-wrap Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-wrap , MDN docs}
+ */
+ textWrap: TextWrapValue
+}
+type TextAlignTextLiteral = `text-${TextAlignRef1}`
+type TextAlignValue = TextAlignTextLiteral
+interface TailwindTextAlign {
+ /**
+ * `TextAlign`
+ *
+ * Utilities for controlling the alignment of text.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-align Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-align , MDN docs}
+ */
+ textAlign: TextAlignValue
+}
+type TextShadowAccentLiteral = `text-shadow-accent-${TextShadowRef1}`
+type TextShadowCardLiteral = `text-shadow-card-${TextShadowRef2}`
+type TextShadowChartLiteral = `text-shadow-chart-${TextShadowRef3}`
+type TextShadowMutedLiteral = `text-shadow-muted-${TextShadowRef4}`
+type TextShadowPopoverLiteral = `text-shadow-popover-${TextShadowRef5}`
+type TextShadowPrimaryLiteral = `text-shadow-primary-${TextShadowRef6}`
+type TextShadowSecondaryLiteral = `text-shadow-secondary-${TextShadowRef7}`
+type TextShadowSidebarLiteral = `text-shadow-sidebar-${TextShadowRef8}`
+type TextShadowLiteral = `text-shadow-${TextShadowRef9}`
+type TextShadowValue =
+ | TextShadowAccentLiteral
+ | TextShadowCardLiteral
+ | TextShadowChartLiteral
+ | TextShadowMutedLiteral
+ | TextShadowPopoverLiteral
+ | TextShadowPrimaryLiteral
+ | TextShadowSecondaryLiteral
+ | TextShadowSidebarLiteral
+ | TextShadowLiteral
+interface TailwindTextShadow {
+ /**
+ * `TextShadow`
+ *
+ * Utilities for controlling the shadow of a text element.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/text-shadow Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/text-shadow , MDN docs}
+ */
+ textShadow: TextShadowValue
+}
+type TouchActionTouchpanLiteral = `touch-pan-${TouchActionRef1}`
+type TouchActionTouchLiteral = `touch-${TouchActionRef2}`
+type TouchActionValue = TouchActionTouchpanLiteral | TouchActionTouchLiteral
+interface TailwindTouchAction {
+ /**
+ * `TouchAction`
+ *
+ * Utilities for controlling how an element can be scrolled and zoomed on
+ * touchscreens.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/touch-action Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action , MDN docs}
+ */
+ touchAction: TouchActionValue
+}
+type TransformLiteral = `transform-${TransformRef1}`
+type TransformValue = 'transform' | TransformLiteral
+interface TailwindTransform {
+ /**
+ * `Transform`
+ *
+ * Utilities for transforming elements.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transform Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform , MDN docs}
+ */
+ transform: TransformValue
+}
+type TransformStyleValue =
+ | 'transform-3d'
+ | 'transform-flat'
+ | 'transform-3d'
+ | 'transform-flat'
+interface TailwindTransformStyle {
+ /**
+ * `TransformStyle`
+ *
+ * Utilities for controlling if an elements children are placed in 3D space.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transform-style Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-style , MDN docs}
+ */
+ transformStyle: TransformStyleValue
+}
+type TransformBoxTransformLiteral = `transform-${TransformBoxRef1}`
+type TransformBoxValue = TransformBoxTransformLiteral
+interface TailwindTransformBox {
+ /**
+ * `TransformBox`
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transform-box , MDN docs}
+ */
+ transformBox: TransformBoxValue
+}
+type TransitionPropertyTransitionLiteral =
+ `transition-${TransitionPropertyRef1}`
+type TransitionPropertyValue =
+ | 'transition'
+ | TransitionPropertyTransitionLiteral
+interface TailwindTransitionProperty {
+ /**
+ * `TransitionProperty`
+ *
+ * Utilities for controlling which CSS properties transition.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transition-property Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transition-property , MDN docs}
+ */
+ transitionProperty: TransitionPropertyValue
+}
+type TransitionBehaviorValue =
+ | 'transition-discrete'
+ | 'transition-normal'
+ | 'transition-discrete'
+ | 'transition-normal'
+interface TailwindTransitionBehavior {
+ /**
+ * `TransitionBehavior`
+ *
+ * Utilities to control the behavior of CSS transitions.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/transition-behavior Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/transition-behavior , MDN docs}
+ */
+ transitionBehavior: TransitionBehaviorValue
+}
+type WhiteSpacePreLiteral = `whitespace-pre-${WhiteSpaceRef1}`
+type WhiteSpaceLiteral = `whitespace-${WhiteSpaceRef2}`
+type WhiteSpaceValue = WhiteSpacePreLiteral | WhiteSpaceLiteral
+interface TailwindWhiteSpace {
+ /**
+ * `WhiteSpace`
+ *
+ * Utilities for controlling an element's white-space property.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/white-space Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/white-space , MDN docs}
+ */
+ whiteSpace: WhiteSpaceValue
+}
+type WillChangeLiteral = `will-change-${WillChangeRef1}`
+type WillChangeValue = WillChangeLiteral
+interface TailwindWillChange {
+ /**
+ * `WillChange`
+ *
+ * Utilities for optimizing upcoming animations of elements that are expected
+ * to change.
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs/will-change Tailwind docs}
+ * {@link https://developer.mozilla.org/en-US/docs/Web/CSS/will-change , MDN docs}
+ */
+ willChange: WillChangeValue
+}
+export interface Tailwind
+ extends TailwindBackgroundImage,
+ TailwindBottom,
+ TailwindGridColumn,
+ TailwindEnd,
+ TailwindTextIndent,
+ TailwindInset,
+ TailwindLeft,
+ TailwindMargin,
+ TailwindMaskImage,
+ TailwindOrder,
+ TailwindOutlineOffset,
+ TailwindRight,
+ TailwindRotate,
+ TailwindGridRow,
+ TailwindScale,
+ TailwindScrollMargin,
+ TailwindSkew,
+ TailwindCustom,
+ TailwindStart,
+ TailwindTop,
+ TailwindLetterSpacing,
+ TailwindTranslate,
+ TailwindTextUnderlineOffset,
+ TailwindZIndex,
+ TailwindContainerType,
+ TailwindPosition,
+ TailwindAccentColor,
+ TailwindVerticalAlign,
+ TailwindAnimation,
+ TailwindAnimationDuration,
+ TailwindFontSmoothing,
+ TailwindAppearance,
+ TailwindAspectRatio,
+ TailwindGridAutoColumns,
+ TailwindGridAutoRows,
+ TailwindBackdropFilter,
+ TailwindBackfaceVisibility,
+ TailwindFlexBasis,
+ TailwindBackgroundColor,
+ TailwindBackgroundSize,
+ TailwindBackgroundBlendMode,
+ TailwindBackgroundPosition,
+ TailwindBackgroundClip,
+ TailwindBackgroundAttachment,
+ TailwindBackgroundRepeat,
+ TailwindBackgroundOrigin,
+ TailwindDisplay,
+ TailwindFilter,
+ TailwindBorderWidth,
+ TailwindBorderColor,
+ TailwindBorderCollapse,
+ TailwindBorderStyle,
+ TailwindBorderSpacing,
+ TailwindBoxSizing,
+ TailwindBoxDecorationBreak,
+ TailwindBreakAfter,
+ TailwindWordBreak,
+ TailwindBreakBefore,
+ TailwindBreakInside,
+ TailwindOverflowWrap,
+ TailwindTextTransform,
+ TailwindCaptionSide,
+ TailwindCaretColor,
+ TailwindClear,
+ TailwindVisibility,
+ TailwindColumns,
+ TailwindContain,
+ TailwindMaxWidth,
+ TailwindAlignContent,
+ TailwindContent,
+ TailwindCursor,
+ TailwindTextDecorationThickness,
+ TailwindTextDecorationColor,
+ TailwindTextDecorationStyle,
+ TailwindTransitionDelay,
+ TailwindFontVariantNumeric,
+ TailwindAnimationDirection,
+ TailwindTransitionDuration,
+ TailwindTransitionTimingFunction,
+ TailwindFieldSizing,
+ TailwindFill,
+ TailwindFlex,
+ TailwindFlexDirection,
+ TailwindFlexWrap,
+ TailwindFloat,
+ TailwindFontWeight,
+ TailwindFontFamily,
+ TailwindFontStretch,
+ TailwindForcedColorAdjust,
+ TailwindGap,
+ TailwindGridTemplateColumns,
+ TailwindGridAutoFlow,
+ TailwindGridTemplateRows,
+ TailwindFlexGrow,
+ TailwindHeight,
+ TailwindHyphens,
+ TailwindBoxShadow,
+ TailwindIsolation,
+ TailwindFontStyle,
+ TailwindAlignItems,
+ TailwindJustifyContent,
+ TailwindJustifyItems,
+ TailwindJustifySelf,
+ TailwindLineHeight,
+ TailwindLineClamp,
+ TailwindTextDecorationLine,
+ TailwindListStyleType,
+ TailwindListStyleImage,
+ TailwindListStylePosition,
+ TailwindMaskComposite,
+ TailwindMaskMode,
+ TailwindMaskSize,
+ TailwindMaskPosition,
+ TailwindMaskClip,
+ TailwindMaskRepeat,
+ TailwindMaskOrigin,
+ TailwindMaskType,
+ TailwindMaxHeight,
+ TailwindMinHeight,
+ TailwindMinWidth,
+ TailwindMixBlendMode,
+ TailwindObjectPosition,
+ TailwindObjectFit,
+ TailwindOpacity,
+ TailwindTransformOrigin,
+ TailwindOutlineWidth,
+ TailwindOutlineColor,
+ TailwindOutlineStyle,
+ TailwindOverflow,
+ TailwindTextOverflow,
+ TailwindOverscrollBehavior,
+ TailwindPadding,
+ TailwindAnimationPlayState,
+ TailwindPerspective,
+ TailwindPerspectiveOrigin,
+ TailwindPlaceContent,
+ TailwindPlaceItems,
+ TailwindPlaceSelf,
+ TailwindColor,
+ TailwindPointerEvents,
+ TailwindAnimationIterationCount,
+ TailwindResize,
+ TailwindBorderRadius,
+ TailwindColorScheme,
+ TailwindScrollBehavior,
+ TailwindScrollPadding,
+ TailwindUserSelect,
+ TailwindAlignSelf,
+ TailwindFlexShrink,
+ TailwindWidth,
+ TailwindScrollSnapAlign,
+ TailwindScrollSnapStop,
+ TailwindScrollSnapType,
+ TailwindStrokeWidth,
+ TailwindStroke,
+ TailwindTableLayout,
+ TailwindFontSize,
+ TailwindTextWrap,
+ TailwindTextAlign,
+ TailwindTextShadow,
+ TailwindTouchAction,
+ TailwindTransform,
+ TailwindTransformStyle,
+ TailwindTransformBox,
+ TailwindTransitionProperty,
+ TailwindTransitionBehavior,
+ TailwindWhiteSpace,
+ TailwindWillChange {}
+/**
+ * Tailwind nest groups
+ *
+ * @see
+ * {@link https://tailwindcss.com/docs Tailwind docs}
+ */
+export type TailwindNestGroups =
+ | '*'
+ | '**'
+ | 'not-first'
+ | 'not-last'
+ | 'not-only'
+ | 'not-odd'
+ | 'not-even'
+ | 'not-first-of-type'
+ | 'not-last-of-type'
+ | 'not-only-of-type'
+ | 'not-visited'
+ | 'not-target'
+ | 'not-open'
+ | 'not-default'
+ | 'not-checked'
+ | 'not-indeterminate'
+ | 'not-placeholder-shown'
+ | 'not-autofill'
+ | 'not-optional'
+ | 'not-required'
+ | 'not-valid'
+ | 'not-invalid'
+ | 'not-user-valid'
+ | 'not-user-invalid'
+ | 'not-in-range'
+ | 'not-out-of-range'
+ | 'not-read-only'
+ | 'not-empty'
+ | 'not-focus-within'
+ | 'not-hover'
+ | 'not-focus'
+ | 'not-focus-visible'
+ | 'not-active'
+ | 'not-enabled'
+ | 'not-disabled'
+ | 'not-inert'
+ | 'not-in'
+ | 'not-has'
+ | 'not-aria'
+ | 'not-data'
+ | 'not-nth'
+ | 'not-nth-last'
+ | 'not-nth-of-type'
+ | 'not-nth-last-of-type'
+ | 'not-supports'
+ | 'not-motion-safe'
+ | 'not-motion-reduce'
+ | 'not-contrast-more'
+ | 'not-contrast-less'
+ | 'not-max'
+ | 'not-sm'
+ | 'not-md'
+ | 'not-lg'
+ | 'not-xl'
+ | 'not-2xl'
+ | 'not-min'
+ | 'not-@max'
+ | 'not-@'
+ | 'not-@min'
+ | 'not-portrait'
+ | 'not-landscape'
+ | 'not-ltr'
+ | 'not-rtl'
+ | 'not-dark'
+ | 'not-print'
+ | 'not-forced-colors'
+ | 'not-inverted-colors'
+ | 'not-pointer-none'
+ | 'not-pointer-coarse'
+ | 'not-pointer-fine'
+ | 'not-any-pointer-none'
+ | 'not-any-pointer-coarse'
+ | 'not-any-pointer-fine'
+ | 'not-noscript'
+ | 'not-prose-headings'
+ | 'not-prose-h1'
+ | 'not-prose-h2'
+ | 'not-prose-h3'
+ | 'not-prose-h4'
+ | 'not-prose-h5'
+ | 'not-prose-h6'
+ | 'not-prose-p'
+ | 'not-prose-a'
+ | 'not-prose-blockquote'
+ | 'not-prose-figure'
+ | 'not-prose-figcaption'
+ | 'not-prose-strong'
+ | 'not-prose-em'
+ | 'not-prose-kbd'
+ | 'not-prose-code'
+ | 'not-prose-pre'
+ | 'not-prose-ol'
+ | 'not-prose-ul'
+ | 'not-prose-li'
+ | 'not-prose-table'
+ | 'not-prose-thead'
+ | 'not-prose-tr'
+ | 'not-prose-th'
+ | 'not-prose-td'
+ | 'not-prose-img'
+ | 'not-prose-video'
+ | 'not-prose-hr'
+ | 'not-prose-lead'
+ | 'not-on-root'
+ | 'group-first'
+ | 'group-last'
+ | 'group-only'
+ | 'group-odd'
+ | 'group-even'
+ | 'group-first-of-type'
+ | 'group-last-of-type'
+ | 'group-only-of-type'
+ | 'group-visited'
+ | 'group-target'
+ | 'group-open'
+ | 'group-default'
+ | 'group-checked'
+ | 'group-indeterminate'
+ | 'group-placeholder-shown'
+ | 'group-autofill'
+ | 'group-optional'
+ | 'group-required'
+ | 'group-valid'
+ | 'group-invalid'
+ | 'group-user-valid'
+ | 'group-user-invalid'
+ | 'group-in-range'
+ | 'group-out-of-range'
+ | 'group-read-only'
+ | 'group-empty'
+ | 'group-focus-within'
+ | 'group-hover'
+ | 'group-focus'
+ | 'group-focus-visible'
+ | 'group-active'
+ | 'group-enabled'
+ | 'group-disabled'
+ | 'group-inert'
+ | 'group-in'
+ | 'group-has'
+ | 'group-aria'
+ | 'group-data'
+ | 'group-nth'
+ | 'group-nth-last'
+ | 'group-nth-of-type'
+ | 'group-nth-last-of-type'
+ | 'group-ltr'
+ | 'group-rtl'
+ | 'group-dark'
+ | 'group-prose-headings'
+ | 'group-prose-h1'
+ | 'group-prose-h2'
+ | 'group-prose-h3'
+ | 'group-prose-h4'
+ | 'group-prose-h5'
+ | 'group-prose-h6'
+ | 'group-prose-p'
+ | 'group-prose-a'
+ | 'group-prose-blockquote'
+ | 'group-prose-figure'
+ | 'group-prose-figcaption'
+ | 'group-prose-strong'
+ | 'group-prose-em'
+ | 'group-prose-kbd'
+ | 'group-prose-code'
+ | 'group-prose-pre'
+ | 'group-prose-ol'
+ | 'group-prose-ul'
+ | 'group-prose-li'
+ | 'group-prose-table'
+ | 'group-prose-thead'
+ | 'group-prose-tr'
+ | 'group-prose-th'
+ | 'group-prose-td'
+ | 'group-prose-img'
+ | 'group-prose-video'
+ | 'group-prose-hr'
+ | 'group-prose-lead'
+ | 'group-on-root'
+ | 'peer-first'
+ | 'peer-last'
+ | 'peer-only'
+ | 'peer-odd'
+ | 'peer-even'
+ | 'peer-first-of-type'
+ | 'peer-last-of-type'
+ | 'peer-only-of-type'
+ | 'peer-visited'
+ | 'peer-target'
+ | 'peer-open'
+ | 'peer-default'
+ | 'peer-checked'
+ | 'peer-indeterminate'
+ | 'peer-placeholder-shown'
+ | 'peer-autofill'
+ | 'peer-optional'
+ | 'peer-required'
+ | 'peer-valid'
+ | 'peer-invalid'
+ | 'peer-user-valid'
+ | 'peer-user-invalid'
+ | 'peer-in-range'
+ | 'peer-out-of-range'
+ | 'peer-read-only'
+ | 'peer-empty'
+ | 'peer-focus-within'
+ | 'peer-hover'
+ | 'peer-focus'
+ | 'peer-focus-visible'
+ | 'peer-active'
+ | 'peer-enabled'
+ | 'peer-disabled'
+ | 'peer-inert'
+ | 'peer-in'
+ | 'peer-has'
+ | 'peer-aria'
+ | 'peer-data'
+ | 'peer-nth'
+ | 'peer-nth-last'
+ | 'peer-nth-of-type'
+ | 'peer-nth-last-of-type'
+ | 'peer-ltr'
+ | 'peer-rtl'
+ | 'peer-dark'
+ | 'peer-prose-headings'
+ | 'peer-prose-h1'
+ | 'peer-prose-h2'
+ | 'peer-prose-h3'
+ | 'peer-prose-h4'
+ | 'peer-prose-h5'
+ | 'peer-prose-h6'
+ | 'peer-prose-p'
+ | 'peer-prose-a'
+ | 'peer-prose-blockquote'
+ | 'peer-prose-figure'
+ | 'peer-prose-figcaption'
+ | 'peer-prose-strong'
+ | 'peer-prose-em'
+ | 'peer-prose-kbd'
+ | 'peer-prose-code'
+ | 'peer-prose-pre'
+ | 'peer-prose-ol'
+ | 'peer-prose-ul'
+ | 'peer-prose-li'
+ | 'peer-prose-table'
+ | 'peer-prose-thead'
+ | 'peer-prose-tr'
+ | 'peer-prose-th'
+ | 'peer-prose-td'
+ | 'peer-prose-img'
+ | 'peer-prose-video'
+ | 'peer-prose-hr'
+ | 'peer-prose-lead'
+ | 'peer-on-root'
+ | 'first-letter'
+ | 'first-line'
+ | 'marker'
+ | 'selection'
+ | 'file'
+ | 'placeholder'
+ | 'backdrop'
+ | 'details-content'
+ | 'before'
+ | 'after'
+ | 'first'
+ | 'last'
+ | 'only'
+ | 'odd'
+ | 'even'
+ | 'first-of-type'
+ | 'last-of-type'
+ | 'only-of-type'
+ | 'visited'
+ | 'target'
+ | 'open'
+ | 'default'
+ | 'checked'
+ | 'indeterminate'
+ | 'placeholder-shown'
+ | 'autofill'
+ | 'optional'
+ | 'required'
+ | 'valid'
+ | 'invalid'
+ | 'user-valid'
+ | 'user-invalid'
+ | 'in-range'
+ | 'out-of-range'
+ | 'read-only'
+ | 'empty'
+ | 'focus-within'
+ | 'hover'
+ | 'focus'
+ | 'focus-visible'
+ | 'active'
+ | 'enabled'
+ | 'disabled'
+ | 'inert'
+ | 'in-first'
+ | 'in-last'
+ | 'in-only'
+ | 'in-odd'
+ | 'in-even'
+ | 'in-first-of-type'
+ | 'in-last-of-type'
+ | 'in-only-of-type'
+ | 'in-visited'
+ | 'in-target'
+ | 'in-open'
+ | 'in-default'
+ | 'in-checked'
+ | 'in-indeterminate'
+ | 'in-placeholder-shown'
+ | 'in-autofill'
+ | 'in-optional'
+ | 'in-required'
+ | 'in-valid'
+ | 'in-invalid'
+ | 'in-user-valid'
+ | 'in-user-invalid'
+ | 'in-in-range'
+ | 'in-out-of-range'
+ | 'in-read-only'
+ | 'in-empty'
+ | 'in-focus-within'
+ | 'in-hover'
+ | 'in-focus'
+ | 'in-focus-visible'
+ | 'in-active'
+ | 'in-enabled'
+ | 'in-disabled'
+ | 'in-inert'
+ | 'in-in'
+ | 'in-has'
+ | 'in-aria'
+ | 'in-data'
+ | 'in-nth'
+ | 'in-nth-last'
+ | 'in-nth-of-type'
+ | 'in-nth-last-of-type'
+ | 'in-ltr'
+ | 'in-rtl'
+ | 'in-dark'
+ | 'in-prose-headings'
+ | 'in-prose-h1'
+ | 'in-prose-h2'
+ | 'in-prose-h3'
+ | 'in-prose-h4'
+ | 'in-prose-h5'
+ | 'in-prose-h6'
+ | 'in-prose-p'
+ | 'in-prose-a'
+ | 'in-prose-blockquote'
+ | 'in-prose-figure'
+ | 'in-prose-figcaption'
+ | 'in-prose-strong'
+ | 'in-prose-em'
+ | 'in-prose-kbd'
+ | 'in-prose-code'
+ | 'in-prose-pre'
+ | 'in-prose-ol'
+ | 'in-prose-ul'
+ | 'in-prose-li'
+ | 'in-prose-table'
+ | 'in-prose-thead'
+ | 'in-prose-tr'
+ | 'in-prose-th'
+ | 'in-prose-td'
+ | 'in-prose-img'
+ | 'in-prose-video'
+ | 'in-prose-hr'
+ | 'in-prose-lead'
+ | 'in-on-root'
+ | 'has-first'
+ | 'has-last'
+ | 'has-only'
+ | 'has-odd'
+ | 'has-even'
+ | 'has-first-of-type'
+ | 'has-last-of-type'
+ | 'has-only-of-type'
+ | 'has-visited'
+ | 'has-target'
+ | 'has-open'
+ | 'has-default'
+ | 'has-checked'
+ | 'has-indeterminate'
+ | 'has-placeholder-shown'
+ | 'has-autofill'
+ | 'has-optional'
+ | 'has-required'
+ | 'has-valid'
+ | 'has-invalid'
+ | 'has-user-valid'
+ | 'has-user-invalid'
+ | 'has-in-range'
+ | 'has-out-of-range'
+ | 'has-read-only'
+ | 'has-empty'
+ | 'has-focus-within'
+ | 'has-hover'
+ | 'has-focus'
+ | 'has-focus-visible'
+ | 'has-active'
+ | 'has-enabled'
+ | 'has-disabled'
+ | 'has-inert'
+ | 'has-in'
+ | 'has-has'
+ | 'has-aria'
+ | 'has-data'
+ | 'has-nth'
+ | 'has-nth-last'
+ | 'has-nth-of-type'
+ | 'has-nth-last-of-type'
+ | 'has-ltr'
+ | 'has-rtl'
+ | 'has-dark'
+ | 'has-prose-headings'
+ | 'has-prose-h1'
+ | 'has-prose-h2'
+ | 'has-prose-h3'
+ | 'has-prose-h4'
+ | 'has-prose-h5'
+ | 'has-prose-h6'
+ | 'has-prose-p'
+ | 'has-prose-a'
+ | 'has-prose-blockquote'
+ | 'has-prose-figure'
+ | 'has-prose-figcaption'
+ | 'has-prose-strong'
+ | 'has-prose-em'
+ | 'has-prose-kbd'
+ | 'has-prose-code'
+ | 'has-prose-pre'
+ | 'has-prose-ol'
+ | 'has-prose-ul'
+ | 'has-prose-li'
+ | 'has-prose-table'
+ | 'has-prose-thead'
+ | 'has-prose-tr'
+ | 'has-prose-th'
+ | 'has-prose-td'
+ | 'has-prose-img'
+ | 'has-prose-video'
+ | 'has-prose-hr'
+ | 'has-prose-lead'
+ | 'has-on-root'
+ | 'aria-busy'
+ | 'aria-checked'
+ | 'aria-disabled'
+ | 'aria-expanded'
+ | 'aria-hidden'
+ | 'aria-pressed'
+ | 'aria-readonly'
+ | 'aria-required'
+ | 'aria-selected'
+ | 'data'
+ | 'nth'
+ | 'nth-last'
+ | 'nth-of-type'
+ | 'nth-last-of-type'
+ | 'supports'
+ | 'motion-safe'
+ | 'motion-reduce'
+ | 'contrast-more'
+ | 'contrast-less'
+ | 'max-sm'
+ | 'max-md'
+ | 'max-lg'
+ | 'max-xl'
+ | 'max-2xl'
+ | 'sm'
+ | 'md'
+ | 'lg'
+ | 'xl'
+ | '2xl'
+ | 'min-sm'
+ | 'min-md'
+ | 'min-lg'
+ | 'min-xl'
+ | 'min-2xl'
+ | '@max-3xs'
+ | '@max-2xs'
+ | '@max-xs'
+ | '@max-sm'
+ | '@max-md'
+ | '@max-lg'
+ | '@max-xl'
+ | '@max-2xl'
+ | '@max-3xl'
+ | '@max-4xl'
+ | '@max-5xl'
+ | '@max-6xl'
+ | '@max-7xl'
+ | '@3xs'
+ | '@2xs'
+ | '@xs'
+ | '@sm'
+ | '@md'
+ | '@lg'
+ | '@xl'
+ | '@2xl'
+ | '@3xl'
+ | '@4xl'
+ | '@5xl'
+ | '@6xl'
+ | '@7xl'
+ | '@min-3xs'
+ | '@min-2xs'
+ | '@min-xs'
+ | '@min-sm'
+ | '@min-md'
+ | '@min-lg'
+ | '@min-xl'
+ | '@min-2xl'
+ | '@min-3xl'
+ | '@min-4xl'
+ | '@min-5xl'
+ | '@min-6xl'
+ | '@min-7xl'
+ | 'portrait'
+ | 'landscape'
+ | 'ltr'
+ | 'rtl'
+ | 'dark'
+ | 'starting'
+ | 'print'
+ | 'forced-colors'
+ | 'inverted-colors'
+ | 'pointer-none'
+ | 'pointer-coarse'
+ | 'pointer-fine'
+ | 'any-pointer-none'
+ | 'any-pointer-coarse'
+ | 'any-pointer-fine'
+ | 'noscript'
+ | 'prose-headings'
+ | 'prose-h1'
+ | 'prose-h2'
+ | 'prose-h3'
+ | 'prose-h4'
+ | 'prose-h5'
+ | 'prose-h6'
+ | 'prose-p'
+ | 'prose-a'
+ | 'prose-blockquote'
+ | 'prose-figure'
+ | 'prose-figcaption'
+ | 'prose-strong'
+ | 'prose-em'
+ | 'prose-kbd'
+ | 'prose-code'
+ | 'prose-pre'
+ | 'prose-ol'
+ | 'prose-ul'
+ | 'prose-li'
+ | 'prose-table'
+ | 'prose-thead'
+ | 'prose-tr'
+ | 'prose-th'
+ | 'prose-td'
+ | 'prose-img'
+ | 'prose-video'
+ | 'prose-hr'
+ | 'prose-lead'
+ | 'on-root'
diff --git a/packages/web/tsconfig.json b/packages/web/tsconfig.json
new file mode 100644
index 0000000..06390d5
--- /dev/null
+++ b/packages/web/tsconfig.json
@@ -0,0 +1,36 @@
+{
+ "compilerOptions": {
+ "baseUrl": ".",
+ "target": "ESNext",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "react-jsx",
+ "incremental": true,
+ "paths": {
+ "@/*": ["./src/*"],
+ "@/.source": [".source"]
+ },
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ]
+ },
+ "include": [
+ "next-env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts",
+ ".next/dev/types/**/*.ts"
+ ],
+ "exclude": ["node_modules"]
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index fd23137..3eeea00 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,117 +8,295 @@ importers:
.:
devDependencies:
+ '@biomejs/biome':
+ specifier: latest
+ version: 2.3.7
'@changesets/cli':
- specifier: ^2.27.11
- version: 2.29.5
- '@metal-box/type':
- specifier: ^0.2.0
- version: 0.2.0
- '@typescript-eslint/eslint-plugin':
- specifier: ^8.20.0
- version: 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0)(typescript@5.8.3))(eslint@9.31.0)(typescript@5.8.3)
- '@typescript-eslint/parser':
- specifier: ^8.20.0
- version: 8.37.0(eslint@9.31.0)(typescript@5.8.3)
+ specifier: latest
+ version: 2.29.7(@types/node@24.10.1)
+ '@freestylejs/config':
+ specifier: latest
+ version: 1.2.5(@biomejs/biome@2.3.7)(typescript@5.9.3)
+ '@types/node':
+ specifier: latest
+ version: 24.10.1
'@vitest/coverage-v8':
- specifier: ^3.0.0
- version: 3.2.4(vitest@3.2.4(msw@2.10.4(typescript@5.8.3))(yaml@2.8.0))
- chalk:
- specifier: ^5.4.1
- version: 5.4.1
- eslint:
- specifier: ^9.18.0
- version: 9.31.0
- eslint-config-prettier:
- specifier: ^10.0.1
- version: 10.1.5(eslint@9.31.0)
- eslint-config-turbo:
- specifier: ^2.3.3
- version: 2.5.4(eslint@9.31.0)(turbo@2.5.4)
- eslint-plugin-import:
- specifier: ^2.31.0
- version: 2.32.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0)(typescript@5.8.3))(eslint@9.31.0)
- eslint-plugin-prettier:
- specifier: ^5.2.2
- version: 5.5.1(eslint-config-prettier@10.1.5(eslint@9.31.0))(eslint@9.31.0)(prettier@3.6.2)
+ specifier: 4.0.6
+ version: 4.0.6(vitest@4.0.13(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(msw@2.12.3(@types/node@24.10.1)(typescript@5.9.3))(yaml@2.8.1))
husky:
- specifier: ^9.1.7
+ specifier: latest
version: 9.1.7
lint-staged:
- specifier: ^15.4.0
- version: 15.5.2
+ specifier: latest
+ version: 16.2.7
msw:
- specifier: ^2.7.0
- version: 2.10.4(typescript@5.8.3)
- prettier:
- specifier: ^3.4.2
- version: 3.6.2
+ specifier: ^2.12.3
+ version: 2.12.3(@types/node@24.10.1)(typescript@5.9.3)
rimraf:
- specifier: ^6.0.1
- version: 6.0.1
- ts-expect:
- specifier: ^1.3.0
- version: 1.3.0
+ specifier: latest
+ version: 6.1.2
tsup:
- specifier: ^8.3.5
- version: 8.5.0(postcss@8.5.6)(typescript@5.8.3)(yaml@2.8.0)
+ specifier: latest
+ version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1)
turbo:
- specifier: ^2.3.3
- version: 2.5.4
+ specifier: latest
+ version: 2.6.1
typescript:
- specifier: ^5.7.3
- version: 5.8.3
+ specifier: latest
+ version: 5.9.3
+ vite:
+ specifier: latest
+ version: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)
vite-tsconfig-paths:
- specifier: ^5.1.4
- version: 5.1.4(typescript@5.8.3)(vite@7.0.4(yaml@2.8.0))
+ specifier: latest
+ version: 5.1.4(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1))
vitest:
- specifier: ^3.0.0
- version: 3.2.4(msw@2.10.4(typescript@5.8.3))(yaml@2.8.0)
+ specifier: latest
+ version: 4.0.13(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(msw@2.12.3(@types/node@24.10.1)(typescript@5.9.3))(yaml@2.8.1)
packages/fetch: {}
+ packages/openapi_generator:
+ dependencies:
+ '@freestylejs/fetch':
+ specifier: workspace:^
+ version: link:../fetch
+ chalk:
+ specifier: ^5.6.2
+ version: 5.6.2
+ commander:
+ specifier: ^14.0.2
+ version: 14.0.2
+ fs-extra:
+ specifier: ^11.3.2
+ version: 11.3.2
+ openapi-types:
+ specifier: ^12.1.3
+ version: 12.1.3
+ swagger-parser:
+ specifier: ^10.0.3
+ version: 10.0.3(openapi-types@12.1.3)
+ zod:
+ specifier: ^4.1.13
+ version: 4.1.13
+ devDependencies:
+ '@types/fs-extra':
+ specifier: ^11.0.4
+ version: 11.0.4
+ '@types/node':
+ specifier: ^20.14.2
+ version: 20.19.25
+ ts-expect:
+ specifier: ^1.3.0
+ version: 1.3.0
+
+ packages/web:
+ dependencies:
+ '@freestylejs/ani-core':
+ specifier: ^1.2.0
+ version: 1.2.0
+ '@freestylejs/ani-react':
+ specifier: ^1.1.0
+ version: 1.1.0(react@19.2.0)
+ '@freestylejs/fetch':
+ specifier: workspace:^
+ version: link:../fetch
+ '@radix-ui/react-slot':
+ specifier: ^1.2.4
+ version: 1.2.4(@types/react@19.2.7)(react@19.2.0)
+ class-variance-authority:
+ specifier: ^0.7.1
+ version: 0.7.1
+ clsx:
+ specifier: ^2.1.1
+ version: 2.1.1
+ fumadocs-core:
+ specifier: 16.0.8
+ version: 16.0.8(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ fumadocs-mdx:
+ specifier: 13.0.5
+ version: 13.0.5(fumadocs-core@16.0.8(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1))
+ fumadocs-twoslash:
+ specifier: ^3.1.10
+ version: 3.1.10(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(fumadocs-ui@16.0.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.17))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ fumadocs-typescript:
+ specifier: ^4.0.13
+ version: 4.0.13(@types/react@19.2.7)(fumadocs-core@16.0.8(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(fumadocs-ui@16.0.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.17))(typescript@5.9.3)
+ fumadocs-ui:
+ specifier: 16.0.8
+ version: 16.0.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.17)
+ lucide-react:
+ specifier: ^0.552.0
+ version: 0.552.0(react@19.2.0)
+ mermaid:
+ specifier: ^11.12.1
+ version: 11.12.1
+ next:
+ specifier: 16.0.1
+ version: 16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ octokit:
+ specifier: ^5.0.5
+ version: 5.0.5
+ react:
+ specifier: ^19.2.0
+ version: 19.2.0
+ react-dom:
+ specifier: ^19.2.0
+ version: 19.2.0(react@19.2.0)
+ tailwind-merge:
+ specifier: ^3.4.0
+ version: 3.4.0
+ tailwindest:
+ specifier: ^3.2.2
+ version: 3.2.2
+ twoslash:
+ specifier: ^0.3.4
+ version: 0.3.4(typescript@5.9.3)
+ devDependencies:
+ '@tailwindcss/postcss':
+ specifier: ^4.1.16
+ version: 4.1.17
+ '@takumi-rs/image-response':
+ specifier: ^0.51.0
+ version: 0.51.1
+ '@types/mdx':
+ specifier: ^2.0.13
+ version: 2.0.13
+ '@types/node':
+ specifier: ^24.10.0
+ version: 24.10.1
+ '@types/react':
+ specifier: ^19.2.2
+ version: 19.2.7
+ '@types/react-dom':
+ specifier: ^19.2.2
+ version: 19.2.3(@types/react@19.2.7)
+ feed:
+ specifier: ^5.1.0
+ version: 5.1.0
+ postcss:
+ specifier: ^8.5.6
+ version: 8.5.6
+ tailwindcss:
+ specifier: ^4.1.16
+ version: 4.1.17
+ tw-animate-css:
+ specifier: ^1.4.0
+ version: 1.4.0
+ typescript:
+ specifier: ^5.9.3
+ version: 5.9.3
+
packages:
- '@ampproject/remapping@2.3.0':
- resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
- engines: {node: '>=6.0.0'}
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
+
+ '@antfu/install-pkg@1.1.0':
+ resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
+
+ '@antfu/utils@9.3.0':
+ resolution: {integrity: sha512-9hFT4RauhcUzqOE4f1+frMKLZrgNog5b06I7VmZQV1BkvwvqrbC8EBZf3L1eEL2AKb6rNKjER0sEvJiSP1FXEA==}
+
+ '@apidevtools/json-schema-ref-parser@9.1.2':
+ resolution: {integrity: sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==}
+
+ '@apidevtools/openapi-schemas@2.1.0':
+ resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==}
+ engines: {node: '>=10'}
+
+ '@apidevtools/swagger-methods@3.0.2':
+ resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==}
+
+ '@apidevtools/swagger-parser@10.0.3':
+ resolution: {integrity: sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==}
+ peerDependencies:
+ openapi-types: '>=7'
'@babel/helper-string-parser@7.27.1':
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.27.1':
- resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.28.0':
- resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
+ '@babel/parser@7.28.5':
+ resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/runtime@7.27.6':
- resolution: {integrity: sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==}
+ '@babel/runtime@7.28.4':
+ resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.28.1':
- resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==}
+ '@babel/types@7.28.5':
+ resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
'@bcoe/v8-coverage@1.0.2':
resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
engines: {node: '>=18'}
- '@bundled-es-modules/cookie@2.0.1':
- resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==}
+ '@biomejs/biome@2.3.7':
+ resolution: {integrity: sha512-CTbAS/jNAiUc6rcq94BrTB8z83O9+BsgWj2sBCQg9rD6Wkh2gjfR87usjx0Ncx0zGXP1NKgT7JNglay5Zfs9jw==}
+ engines: {node: '>=14.21.3'}
+ hasBin: true
+
+ '@biomejs/cli-darwin-arm64@2.3.7':
+ resolution: {integrity: sha512-LirkamEwzIUULhXcf2D5b+NatXKeqhOwilM+5eRkbrnr6daKz9rsBL0kNZ16Hcy4b8RFq22SG4tcLwM+yx/wFA==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@biomejs/cli-darwin-x64@2.3.7':
+ resolution: {integrity: sha512-Q4TO633kvrMQkKIV7wmf8HXwF0dhdTD9S458LGE24TYgBjSRbuhvio4D5eOQzirEYg6eqxfs53ga/rbdd8nBKg==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@biomejs/cli-linux-arm64-musl@2.3.7':
+ resolution: {integrity: sha512-/afy8lto4CB8scWfMdt+NoCZtatBUF62Tk3ilWH2w8ENd5spLhM77zKlFZEvsKJv9AFNHknMl03zO67CiklL2Q==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@biomejs/cli-linux-arm64@2.3.7':
+ resolution: {integrity: sha512-inHOTdlstUBzgjDcx0ge71U4SVTbwAljmkfi3MC5WzsYCRhancqfeL+sa4Ke6v2ND53WIwCFD5hGsYExoI3EZQ==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@biomejs/cli-linux-x64-musl@2.3.7':
+ resolution: {integrity: sha512-CQUtgH1tIN6e5wiYSJqzSwJumHYolNtaj1dwZGCnZXm2PZU1jOJof9TsyiP3bXNDb+VOR7oo7ZvY01If0W3iFQ==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [linux]
+
+ '@biomejs/cli-linux-x64@2.3.7':
+ resolution: {integrity: sha512-fJMc3ZEuo/NaMYo5rvoWjdSS5/uVSW+HPRQujucpZqm2ZCq71b8MKJ9U4th9yrv2L5+5NjPF0nqqILCl8HY/fg==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [linux]
+
+ '@biomejs/cli-win32-arm64@2.3.7':
+ resolution: {integrity: sha512-aJAE8eCNyRpcfx2JJAtsPtISnELJ0H4xVVSwnxm13bzI8RwbXMyVtxy2r5DV1xT3WiSP+7LxORcApWw0LM8HiA==}
+ engines: {node: '>=14.21.3'}
+ cpu: [arm64]
+ os: [win32]
- '@bundled-es-modules/statuses@1.0.1':
- resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==}
+ '@biomejs/cli-win32-x64@2.3.7':
+ resolution: {integrity: sha512-pulzUshqv9Ed//MiE8MOUeeEkbkSHVDVY5Cz5wVAnH1DUqliCQG3j6s1POaITTFqFfo7AVIx2sWdKpx/GS+Nqw==}
+ engines: {node: '>=14.21.3'}
+ cpu: [x64]
+ os: [win32]
- '@bundled-es-modules/tough-cookie@0.1.6':
- resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==}
+ '@braintree/sanitize-url@7.1.1':
+ resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==}
- '@changesets/apply-release-plan@7.0.12':
- resolution: {integrity: sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==}
+ '@changesets/apply-release-plan@7.0.13':
+ resolution: {integrity: sha512-BIW7bofD2yAWoE8H4V40FikC+1nNFEKBisMECccS16W1rt6qqhNTBDmIw5HaqmMgtLNz9e7oiALiEUuKrQ4oHg==}
'@changesets/assemble-release-plan@6.0.9':
resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==}
@@ -126,8 +304,8 @@ packages:
'@changesets/changelog-git@0.2.1':
resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==}
- '@changesets/cli@2.29.5':
- resolution: {integrity: sha512-0j0cPq3fgxt2dPdFsg4XvO+6L66RC0pZybT9F4dG5TBrLA3jA/1pNkdTXH9IBBVHkgsKrNKenI3n1mPyPlIydg==}
+ '@changesets/cli@2.29.7':
+ resolution: {integrity: sha512-R7RqWoaksyyKXbKXBTbT4REdy22yH81mcFK6sWtqSanxUCbUi9Uf+6aqxZtDQouIqPdem2W56CdxXgsxdq7FLQ==}
hasBin: true
'@changesets/config@3.1.1':
@@ -172,222 +350,526 @@ packages:
'@changesets/write@0.4.0':
resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==}
- '@esbuild/aix-ppc64@0.25.6':
- resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==}
+ '@chevrotain/cst-dts-gen@11.0.3':
+ resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==}
+
+ '@chevrotain/gast@11.0.3':
+ resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==}
+
+ '@chevrotain/regexp-to-ast@11.0.3':
+ resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==}
+
+ '@chevrotain/types@11.0.3':
+ resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==}
+
+ '@chevrotain/utils@11.0.3':
+ resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==}
+
+ '@emnapi/runtime@1.7.1':
+ resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
+
+ '@esbuild/aix-ppc64@0.25.12':
+ resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/aix-ppc64@0.27.0':
+ resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.25.6':
- resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==}
+ '@esbuild/android-arm64@0.25.12':
+ resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.27.0':
+ resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.25.6':
- resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==}
+ '@esbuild/android-arm@0.25.12':
+ resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.27.0':
+ resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.25.6':
- resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==}
+ '@esbuild/android-x64@0.25.12':
+ resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.27.0':
+ resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.25.6':
- resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==}
+ '@esbuild/darwin-arm64@0.25.12':
+ resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.27.0':
+ resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.25.6':
- resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==}
+ '@esbuild/darwin-x64@0.25.12':
+ resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.27.0':
+ resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.25.6':
- resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==}
+ '@esbuild/freebsd-arm64@0.25.12':
+ resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.27.0':
+ resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.25.6':
- resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==}
+ '@esbuild/freebsd-x64@0.25.12':
+ resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.0':
+ resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.25.6':
- resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==}
+ '@esbuild/linux-arm64@0.25.12':
+ resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.27.0':
+ resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.25.6':
- resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==}
+ '@esbuild/linux-arm@0.25.12':
+ resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.0':
+ resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.25.6':
- resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==}
+ '@esbuild/linux-ia32@0.25.12':
+ resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.0':
+ resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.25.6':
- resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==}
+ '@esbuild/linux-loong64@0.25.12':
+ resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.0':
+ resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.25.6':
- resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==}
+ '@esbuild/linux-mips64el@0.25.12':
+ resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.0':
+ resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.25.6':
- resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==}
+ '@esbuild/linux-ppc64@0.25.12':
+ resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.0':
+ resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.25.6':
- resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==}
+ '@esbuild/linux-riscv64@0.25.12':
+ resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.0':
+ resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.25.6':
- resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==}
+ '@esbuild/linux-s390x@0.25.12':
+ resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.0':
+ resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.25.6':
- resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==}
+ '@esbuild/linux-x64@0.25.12':
+ resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.0':
+ resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.25.6':
- resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==}
+ '@esbuild/netbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-arm64@0.27.0':
+ resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.25.6':
- resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==}
+ '@esbuild/netbsd-x64@0.25.12':
+ resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.27.0':
+ resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.25.6':
- resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==}
+ '@esbuild/openbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-arm64@0.27.0':
+ resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.25.6':
- resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==}
+ '@esbuild/openbsd-x64@0.25.12':
+ resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.27.0':
+ resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/openharmony-arm64@0.25.6':
- resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==}
+ '@esbuild/openharmony-arm64@0.25.12':
+ resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/openharmony-arm64@0.27.0':
+ resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
- '@esbuild/sunos-x64@0.25.6':
- resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==}
+ '@esbuild/sunos-x64@0.25.12':
+ resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.27.0':
+ resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.25.6':
- resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==}
+ '@esbuild/win32-arm64@0.25.12':
+ resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.27.0':
+ resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.25.6':
- resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==}
+ '@esbuild/win32-ia32@0.25.12':
+ resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.27.0':
+ resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.25.6':
- resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==}
+ '@esbuild/win32-x64@0.25.12':
+ resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
- '@eslint-community/eslint-utils@4.7.0':
- resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@esbuild/win32-x64@0.27.0':
+ resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@floating-ui/core@1.7.3':
+ resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==}
+
+ '@floating-ui/dom@1.7.4':
+ resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==}
+
+ '@floating-ui/react-dom@2.1.6':
+ resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ '@floating-ui/utils@0.2.10':
+ resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
+
+ '@formatjs/intl-localematcher@0.6.2':
+ resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==}
+
+ '@freestylejs/ani-core@1.2.0':
+ resolution: {integrity: sha512-UTajXBfmryTY0VfMJPmnq3Cjm7cNofgxseCrjlEVxmdPhNTNFFuOdzSPctMfh7eOsyA2z1W/UHhuiNMju6iY1Q==}
+
+ '@freestylejs/ani-react@1.1.0':
+ resolution: {integrity: sha512-BF9mO7Q6gz54nsDX8o4JRkcH03lZUuyEg4GchmhbnArGYCcP4WQFSpyz0kJYfQjQEyYN9qqxoBpJ868WghB5eQ==}
+ peerDependencies:
+ react: '>=18.0.0'
+
+ '@freestylejs/config@1.2.5':
+ resolution: {integrity: sha512-Oh3WVf3ZLjW/C9Mxn2YTQNFGRm2Yl6rIUkJJJjY9N3uAeU7poPNyrBMTmOkiDGZRfSdh20fIa6iQ/FiKji2vyA==}
peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+ '@biomejs/biome': '>=2.0.0'
+ typescript: '>=5.0.0'
+
+ '@iconify/types@2.0.0':
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+
+ '@iconify/utils@3.0.2':
+ resolution: {integrity: sha512-EfJS0rLfVuRuJRn4psJHtK2A9TqVnkxPpHY6lYHiB9+8eSuudsxbwMiavocG45ujOo6FJ+CIRlRnlOGinzkaGQ==}
+
+ '@img/colour@1.0.0':
+ resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==}
+ engines: {node: '>=18'}
+
+ '@img/sharp-darwin-arm64@0.34.5':
+ resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-darwin-x64@0.34.5':
+ resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-arm64@1.2.4':
+ resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-x64@1.2.4':
+ resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-linux-arm64@1.2.4':
+ resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
+ cpu: [arm64]
+ os: [linux]
- '@eslint-community/regexpp@4.12.1':
- resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
- engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ '@img/sharp-libvips-linux-arm@1.2.4':
+ resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-ppc64@1.2.4':
+ resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-riscv64@1.2.4':
+ resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-s390x@1.2.4':
+ resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-x64@1.2.4':
+ resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
+ resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-libvips-linuxmusl-x64@1.2.4':
+ resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@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]
+
+ '@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]
- '@eslint/config-array@0.21.0':
- resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@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]
- '@eslint/config-helpers@0.3.0':
- resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@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]
- '@eslint/core@0.15.1':
- resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@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]
- '@eslint/eslintrc@3.3.1':
- resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@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]
- '@eslint/js@9.31.0':
- resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@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]
- '@eslint/object-schema@2.1.6':
- resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@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]
- '@eslint/plugin-kit@0.3.3':
- resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@img/sharp-wasm32@0.34.5':
+ resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [wasm32]
- '@humanfs/core@0.19.1':
- resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
- engines: {node: '>=18.18.0'}
+ '@img/sharp-win32-arm64@0.34.5':
+ resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [win32]
- '@humanfs/node@0.16.6':
- resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
- engines: {node: '>=18.18.0'}
+ '@img/sharp-win32-ia32@0.34.5':
+ resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ia32]
+ os: [win32]
- '@humanwhocodes/module-importer@1.0.1':
- resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
- engines: {node: '>=12.22'}
+ '@img/sharp-win32-x64@0.34.5':
+ resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [win32]
- '@humanwhocodes/retry@0.3.1':
- resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
- engines: {node: '>=18.18'}
+ '@inquirer/ansi@1.0.2':
+ resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==}
+ engines: {node: '>=18'}
- '@humanwhocodes/retry@0.4.3':
- resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
- engines: {node: '>=18.18'}
+ '@inquirer/confirm@5.1.21':
+ resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
- '@inquirer/confirm@5.1.13':
- resolution: {integrity: sha512-EkCtvp67ICIVVzjsquUiVSd+V5HRGOGQfsqA4E4vMWhYnB7InUL0pa0TIWt1i+OfP16Gkds8CdIu6yGZwOM1Yw==}
+ '@inquirer/core@10.3.2':
+ resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -395,8 +877,8 @@ packages:
'@types/node':
optional: true
- '@inquirer/core@10.1.14':
- resolution: {integrity: sha512-Ma+ZpOJPewtIYl6HZHZckeX1STvDnHTCB2GVINNUlSEn2Am6LddWwfPkIGY0IUFVjUUrr/93XlBwTK6mfLjf0A==}
+ '@inquirer/external-editor@1.0.3':
+ resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -404,12 +886,12 @@ packages:
'@types/node':
optional: true
- '@inquirer/figures@1.0.12':
- resolution: {integrity: sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==}
+ '@inquirer/figures@1.0.15':
+ resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==}
engines: {node: '>=18'}
- '@inquirer/type@3.0.7':
- resolution: {integrity: sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==}
+ '@inquirer/type@3.0.10':
+ resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==}
engines: {node: '>=18'}
peerDependencies:
'@types/node': '>=18'
@@ -425,26 +907,24 @@ packages:
resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
engines: {node: 20 || >=22}
- '@isaacs/cliui@8.0.2':
- resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
- engines: {node: '>=12'}
-
- '@istanbuljs/schema@0.1.3':
- resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
- engines: {node: '>=8'}
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
- '@jridgewell/gen-mapping@0.3.12':
- resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
- '@jridgewell/sourcemap-codec@1.5.4':
- resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==}
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
- '@jridgewell/trace-mapping@0.3.29':
- resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@jsdevtools/ono@7.1.3':
+ resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==}
'@manypkg/find-root@1.1.0':
resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
@@ -452,25 +932,186 @@ packages:
'@manypkg/get-packages@1.1.3':
resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==}
- '@metal-box/type@0.2.0':
- resolution: {integrity: sha512-JPmJ85QaE1H0sSAAZXSP69AEabRfDTE+iOYTtYz0bvJX6SHx0RV7XlYRS526M5qc2uFysTHYmKYMm/6uyNfhzw==}
+ '@mdx-js/mdx@3.1.1':
+ resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
+
+ '@mermaid-js/parser@0.6.3':
+ resolution: {integrity: sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==}
- '@mswjs/interceptors@0.39.2':
- resolution: {integrity: sha512-RuzCup9Ct91Y7V79xwCb146RaBRHZ7NBbrIUySumd1rpKqHL5OonaqrGIbug5hNwP/fRyxFMA6ISgw4FTtYFYg==}
+ '@mswjs/interceptors@0.40.0':
+ resolution: {integrity: sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ==}
engines: {node: '>=18'}
- '@nodelib/fs.scandir@2.1.5':
- resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
- engines: {node: '>= 8'}
+ '@next/env@16.0.1':
+ resolution: {integrity: sha512-LFvlK0TG2L3fEOX77OC35KowL8D7DlFF45C0OvKMC4hy8c/md1RC4UMNDlUGJqfCoCS2VWrZ4dSE6OjaX5+8mw==}
- '@nodelib/fs.stat@2.0.5':
- resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
- engines: {node: '>= 8'}
+ '@next/swc-darwin-arm64@16.0.1':
+ resolution: {integrity: sha512-R0YxRp6/4W7yG1nKbfu41bp3d96a0EalonQXiMe+1H9GTHfKxGNCGFNWUho18avRBPsO8T3RmdWuzmfurlQPbg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@next/swc-darwin-x64@16.0.1':
+ resolution: {integrity: sha512-kETZBocRux3xITiZtOtVoVvXyQLB7VBxN7L6EPqgI5paZiUlnsgYv4q8diTNYeHmF9EiehydOBo20lTttCbHAg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@next/swc-linux-arm64-gnu@16.0.1':
+ resolution: {integrity: sha512-hWg3BtsxQuSKhfe0LunJoqxjO4NEpBmKkE+P2Sroos7yB//OOX3jD5ISP2wv8QdUwtRehMdwYz6VB50mY6hqAg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@next/swc-linux-arm64-musl@16.0.1':
+ resolution: {integrity: sha512-UPnOvYg+fjAhP3b1iQStcYPWeBFRLrugEyK/lDKGk7kLNua8t5/DvDbAEFotfV1YfcOY6bru76qN9qnjLoyHCQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@next/swc-linux-x64-gnu@16.0.1':
+ resolution: {integrity: sha512-Et81SdWkcRqAJziIgFtsFyJizHoWne4fzJkvjd6V4wEkWTB4MX6J0uByUb0peiJQ4WeAt6GGmMszE5KrXK6WKg==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@next/swc-linux-x64-musl@16.0.1':
+ resolution: {integrity: sha512-qBbgYEBRrC1egcG03FZaVfVxrJm8wBl7vr8UFKplnxNRprctdP26xEv9nJ07Ggq4y1adwa0nz2mz83CELY7N6Q==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@next/swc-win32-arm64-msvc@16.0.1':
+ resolution: {integrity: sha512-cPuBjYP6I699/RdbHJonb3BiRNEDm5CKEBuJ6SD8k3oLam2fDRMKAvmrli4QMDgT2ixyRJ0+DTkiODbIQhRkeQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@next/swc-win32-x64-msvc@16.0.1':
+ resolution: {integrity: sha512-XeEUJsE4JYtfrXe/LaJn3z1pD19fK0Q6Er8Qoufi+HqvdO4LEPyCxLUt4rxA+4RfYo6S9gMlmzCMU2F+AatFqQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
'@nodelib/fs.walk@1.2.8':
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
+ '@octokit/app@16.1.2':
+ resolution: {integrity: sha512-8j7sEpUYVj18dxvh0KWj6W/l6uAiVRBl1JBDVRqH1VHKAO/G5eRVl4yEoYACjakWers1DjUkcCHyJNQK47JqyQ==}
+ engines: {node: '>= 20'}
+
+ '@octokit/auth-app@8.1.2':
+ resolution: {integrity: sha512-db8VO0PqXxfzI6GdjtgEFHY9tzqUql5xMFXYA12juq8TeTgPAuiiP3zid4h50lwlIP457p5+56PnJOgd2GGBuw==}
+ engines: {node: '>= 20'}
+
+ '@octokit/auth-oauth-app@9.0.3':
+ resolution: {integrity: sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg==}
+ engines: {node: '>= 20'}
+
+ '@octokit/auth-oauth-device@8.0.3':
+ resolution: {integrity: sha512-zh2W0mKKMh/VWZhSqlaCzY7qFyrgd9oTWmTmHaXnHNeQRCZr/CXy2jCgHo4e4dJVTiuxP5dLa0YM5p5QVhJHbw==}
+ engines: {node: '>= 20'}
+
+ '@octokit/auth-oauth-user@6.0.2':
+ resolution: {integrity: sha512-qLoPPc6E6GJoz3XeDG/pnDhJpTkODTGG4kY0/Py154i/I003O9NazkrwJwRuzgCalhzyIeWQ+6MDvkUmKXjg/A==}
+ engines: {node: '>= 20'}
+
+ '@octokit/auth-token@6.0.0':
+ resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==}
+ engines: {node: '>= 20'}
+
+ '@octokit/auth-unauthenticated@7.0.3':
+ resolution: {integrity: sha512-8Jb1mtUdmBHL7lGmop9mU9ArMRUTRhg8vp0T1VtZ4yd9vEm3zcLwmjQkhNEduKawOOORie61xhtYIhTDN+ZQ3g==}
+ engines: {node: '>= 20'}
+
+ '@octokit/core@7.0.6':
+ resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==}
+ engines: {node: '>= 20'}
+
+ '@octokit/endpoint@11.0.2':
+ resolution: {integrity: sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==}
+ engines: {node: '>= 20'}
+
+ '@octokit/graphql@9.0.3':
+ resolution: {integrity: sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==}
+ engines: {node: '>= 20'}
+
+ '@octokit/oauth-app@8.0.3':
+ resolution: {integrity: sha512-jnAjvTsPepyUaMu9e69hYBuozEPgYqP4Z3UnpmvoIzHDpf8EXDGvTY1l1jK0RsZ194oRd+k6Hm13oRU8EoDFwg==}
+ engines: {node: '>= 20'}
+
+ '@octokit/oauth-authorization-url@8.0.0':
+ resolution: {integrity: sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ==}
+ engines: {node: '>= 20'}
+
+ '@octokit/oauth-methods@6.0.2':
+ resolution: {integrity: sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng==}
+ engines: {node: '>= 20'}
+
+ '@octokit/openapi-types@27.0.0':
+ resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==}
+
+ '@octokit/openapi-webhooks-types@12.0.3':
+ resolution: {integrity: sha512-90MF5LVHjBedwoHyJsgmaFhEN1uzXyBDRLEBe7jlTYx/fEhPAk3P3DAJsfZwC54m8hAIryosJOL+UuZHB3K3yA==}
+
+ '@octokit/plugin-paginate-graphql@6.0.0':
+ resolution: {integrity: sha512-crfpnIoFiBtRkvPqOyLOsw12XsveYuY2ieP6uYDosoUegBJpSVxGwut9sxUgFFcll3VTOTqpUf8yGd8x1OmAkQ==}
+ engines: {node: '>= 20'}
+ peerDependencies:
+ '@octokit/core': '>=6'
+
+ '@octokit/plugin-paginate-rest@14.0.0':
+ resolution: {integrity: sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==}
+ engines: {node: '>= 20'}
+ peerDependencies:
+ '@octokit/core': '>=6'
+
+ '@octokit/plugin-rest-endpoint-methods@17.0.0':
+ resolution: {integrity: sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==}
+ engines: {node: '>= 20'}
+ peerDependencies:
+ '@octokit/core': '>=6'
+
+ '@octokit/plugin-retry@8.0.3':
+ resolution: {integrity: sha512-vKGx1i3MC0za53IzYBSBXcrhmd+daQDzuZfYDd52X5S0M2otf3kVZTVP8bLA3EkU0lTvd1WEC2OlNNa4G+dohA==}
+ engines: {node: '>= 20'}
+ peerDependencies:
+ '@octokit/core': '>=7'
+
+ '@octokit/plugin-throttling@11.0.3':
+ resolution: {integrity: sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==}
+ engines: {node: '>= 20'}
+ peerDependencies:
+ '@octokit/core': ^7.0.0
+
+ '@octokit/request-error@7.1.0':
+ resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==}
+ engines: {node: '>= 20'}
+
+ '@octokit/request@10.0.7':
+ resolution: {integrity: sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==}
+ engines: {node: '>= 20'}
+
+ '@octokit/types@16.0.0':
+ resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==}
+
+ '@octokit/webhooks-methods@6.0.0':
+ resolution: {integrity: sha512-MFlzzoDJVw/GcbfzVC1RLR36QqkTLUf79vLVO3D+xn7r0QgxnFoLZgtrzxiQErAjFUOdH6fas2KeQJ1yr/qaXQ==}
+ engines: {node: '>= 20'}
+
+ '@octokit/webhooks@14.1.3':
+ resolution: {integrity: sha512-gcK4FNaROM9NjA0mvyfXl0KPusk7a1BeA8ITlYEZVQCXF5gcETTd4yhAU0Kjzd8mXwYHppzJBWgdBVpIR9wUcQ==}
+ engines: {node: '>= 20'}
+
'@open-draft/deferred-promise@2.2.0':
resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==}
@@ -480,240 +1121,890 @@ packages:
'@open-draft/until@2.1.0':
resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==}
- '@pkgjs/parseargs@0.11.0':
- resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
- engines: {node: '>=14'}
+ '@orama/orama@3.1.16':
+ resolution: {integrity: sha512-scSmQBD8eANlMUOglxHrN1JdSW8tDghsPuS83otqealBiIeMukCQMOf/wc0JJjDXomqwNdEQFLXLGHrU6PGxuA==}
+ engines: {node: '>= 20.0.0'}
+
+ '@radix-ui/number@1.1.1':
+ resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
+
+ '@radix-ui/primitive@1.1.3':
+ resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
+
+ '@radix-ui/react-accordion@1.2.12':
+ resolution: {integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-arrow@1.1.7':
+ resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-collapsible@1.1.12':
+ resolution: {integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-collection@1.1.7':
+ resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-compose-refs@1.1.2':
+ resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-context@1.1.2':
+ resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dialog@1.1.15':
+ resolution: {integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-direction@1.1.1':
+ resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-dismissable-layer@1.1.11':
+ resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-focus-guards@1.1.3':
+ resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-focus-scope@1.1.7':
+ resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-id@1.1.1':
+ resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-navigation-menu@1.2.14':
+ resolution: {integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popover@1.1.15':
+ resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-popper@1.2.8':
+ resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-portal@1.1.9':
+ resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-presence@1.1.5':
+ resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-primitive@2.1.3':
+ resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-roving-focus@1.1.11':
+ resolution: {integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-scroll-area@1.2.10':
+ resolution: {integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-slot@1.2.3':
+ resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-slot@1.2.4':
+ resolution: {integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-tabs@1.1.13':
+ resolution: {integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
+
+ '@radix-ui/react-use-callback-ref@1.1.1':
+ resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-controllable-state@1.2.2':
+ resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-effect-event@0.0.2':
+ resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-escape-keydown@1.1.1':
+ resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-layout-effect@1.1.1':
+ resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-previous@1.1.1':
+ resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-rect@1.1.1':
+ resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-use-size@1.1.1':
+ resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@radix-ui/react-visually-hidden@1.2.3':
+ resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==}
+ peerDependencies:
+ '@types/react': '*'
+ '@types/react-dom': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
+ optional: true
- '@pkgr/core@0.2.7':
- resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==}
- engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ '@radix-ui/rect@1.1.1':
+ resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
- '@rollup/rollup-android-arm-eabi@4.45.1':
- resolution: {integrity: sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==}
+ '@rollup/rollup-android-arm-eabi@4.53.3':
+ resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.45.1':
- resolution: {integrity: sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==}
+ '@rollup/rollup-android-arm64@4.53.3':
+ resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.45.1':
- resolution: {integrity: sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==}
+ '@rollup/rollup-darwin-arm64@4.53.3':
+ resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.45.1':
- resolution: {integrity: sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==}
+ '@rollup/rollup-darwin-x64@4.53.3':
+ resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.45.1':
- resolution: {integrity: sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==}
+ '@rollup/rollup-freebsd-arm64@4.53.3':
+ resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.45.1':
- resolution: {integrity: sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==}
+ '@rollup/rollup-freebsd-x64@4.53.3':
+ resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.45.1':
- resolution: {integrity: sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.53.3':
+ resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.45.1':
- resolution: {integrity: sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==}
+ '@rollup/rollup-linux-arm-musleabihf@4.53.3':
+ resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.45.1':
- resolution: {integrity: sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==}
+ '@rollup/rollup-linux-arm64-gnu@4.53.3':
+ resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.45.1':
- resolution: {integrity: sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==}
+ '@rollup/rollup-linux-arm64-musl@4.53.3':
+ resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-loongarch64-gnu@4.45.1':
- resolution: {integrity: sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==}
+ '@rollup/rollup-linux-loong64-gnu@4.53.3':
+ resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==}
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-powerpc64le-gnu@4.45.1':
- resolution: {integrity: sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==}
+ '@rollup/rollup-linux-ppc64-gnu@4.53.3':
+ resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.45.1':
- resolution: {integrity: sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==}
+ '@rollup/rollup-linux-riscv64-gnu@4.53.3':
+ resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-riscv64-musl@4.45.1':
- resolution: {integrity: sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==}
+ '@rollup/rollup-linux-riscv64-musl@4.53.3':
+ resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.45.1':
- resolution: {integrity: sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==}
+ '@rollup/rollup-linux-s390x-gnu@4.53.3':
+ resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.45.1':
- resolution: {integrity: sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==}
+ '@rollup/rollup-linux-x64-gnu@4.53.3':
+ resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.45.1':
- resolution: {integrity: sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==}
+ '@rollup/rollup-linux-x64-musl@4.53.3':
+ resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-win32-arm64-msvc@4.45.1':
- resolution: {integrity: sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==}
+ '@rollup/rollup-openharmony-arm64@4.53.3':
+ resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.53.3':
+ resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.45.1':
- resolution: {integrity: sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==}
+ '@rollup/rollup-win32-ia32-msvc@4.53.3':
+ resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.45.1':
- resolution: {integrity: sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==}
+ '@rollup/rollup-win32-x64-gnu@4.53.3':
+ resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==}
cpu: [x64]
os: [win32]
- '@rtsao/scc@1.1.0':
- resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
-
- '@types/chai@5.2.2':
- resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
-
- '@types/cookie@0.6.0':
- resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
-
- '@types/deep-eql@4.0.2':
- resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+ '@rollup/rollup-win32-x64-msvc@4.53.3':
+ resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==}
+ cpu: [x64]
+ os: [win32]
- '@types/estree@1.0.8':
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@shikijs/core@3.15.0':
+ resolution: {integrity: sha512-8TOG6yG557q+fMsSVa8nkEDOZNTSxjbbR8l6lF2gyr6Np+jrPlslqDxQkN6rMXCECQ3isNPZAGszAfYoJOPGlg==}
- '@types/json-schema@7.0.15':
- resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ '@shikijs/engine-javascript@3.15.0':
+ resolution: {integrity: sha512-ZedbOFpopibdLmvTz2sJPJgns8Xvyabe2QbmqMTz07kt1pTzfEvKZc5IqPVO/XFiEbbNyaOpjPBkkr1vlwS+qg==}
- '@types/json5@0.0.29':
- resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+ '@shikijs/engine-oniguruma@3.15.0':
+ resolution: {integrity: sha512-HnqFsV11skAHvOArMZdLBZZApRSYS4LSztk2K3016Y9VCyZISnlYUYsL2hzlS7tPqKHvNqmI5JSUJZprXloMvA==}
- '@types/node@12.20.55':
- resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+ '@shikijs/langs@3.15.0':
+ resolution: {integrity: sha512-WpRvEFvkVvO65uKYW4Rzxs+IG0gToyM8SARQMtGGsH4GDMNZrr60qdggXrFOsdfOVssG/QQGEl3FnJ3EZ+8w8A==}
- '@types/statuses@2.0.6':
- resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==}
+ '@shikijs/rehype@3.15.0':
+ resolution: {integrity: sha512-U+tqD1oxL+85N8FaW5XYIlMZ8KAa2g9IdplEZxPWflGRJf2gQRiBMMrpdG1USz3PN350YnMUHWcz9Twt3wJjXQ==}
- '@types/tough-cookie@4.0.5':
- resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
+ '@shikijs/themes@3.15.0':
+ resolution: {integrity: sha512-8ow2zWb1IDvCKjYb0KiLNrK4offFdkfNVPXb1OZykpLCzRU6j+efkY+Y7VQjNlNFXonSw+4AOdGYtmqykDbRiQ==}
- '@typescript-eslint/eslint-plugin@8.37.0':
- resolution: {integrity: sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- '@typescript-eslint/parser': ^8.37.0
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <5.9.0'
+ '@shikijs/transformers@3.15.0':
+ resolution: {integrity: sha512-Hmwip5ovvSkg+Kc41JTvSHHVfCYF+C8Cp1omb5AJj4Xvd+y9IXz2rKJwmFRGsuN0vpHxywcXJ1+Y4B9S7EG1/A==}
- '@typescript-eslint/parser@8.37.0':
- resolution: {integrity: sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@shikijs/twoslash@3.15.0':
+ resolution: {integrity: sha512-3GoJvYMm2oj4Mq+yJyXt9vmMFfih34FBlLMYLRAIXNmBrj3/6jsuHKakGHMVza5jui6TmmjbS5bmJI29UHftQQ==}
peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <5.9.0'
+ typescript: '>=5.5.0'
- '@typescript-eslint/project-service@8.37.0':
- resolution: {integrity: sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <5.9.0'
+ '@shikijs/types@3.15.0':
+ resolution: {integrity: sha512-BnP+y/EQnhihgHy4oIAN+6FFtmfTekwOLsQbRw9hOKwqgNy8Bdsjq8B05oAt/ZgvIWWFrshV71ytOrlPfYjIJw==}
- '@typescript-eslint/scope-manager@8.37.0':
- resolution: {integrity: sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@shikijs/vscode-textmate@10.0.2':
+ resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
- '@typescript-eslint/tsconfig-utils@8.37.0':
- resolution: {integrity: sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <5.9.0'
+ '@standard-schema/spec@1.0.0':
+ resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
- '@typescript-eslint/type-utils@8.37.0':
- resolution: {integrity: sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <5.9.0'
+ '@swc/helpers@0.5.15':
+ resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
- '@typescript-eslint/types@8.37.0':
- resolution: {integrity: sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@tailwindcss/node@4.1.17':
+ resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==}
- '@typescript-eslint/typescript-estree@8.37.0':
- resolution: {integrity: sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <5.9.0'
+ '@tailwindcss/oxide-android-arm64@4.1.17':
+ resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [android]
- '@typescript-eslint/utils@8.37.0':
- resolution: {integrity: sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <5.9.0'
+ '@tailwindcss/oxide-darwin-arm64@4.1.17':
+ resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [darwin]
- '@typescript-eslint/visitor-keys@8.37.0':
- resolution: {integrity: sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@tailwindcss/oxide-darwin-x64@4.1.17':
+ resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [darwin]
- '@vitest/coverage-v8@3.2.4':
- resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==}
- peerDependencies:
- '@vitest/browser': 3.2.4
- vitest: 3.2.4
- peerDependenciesMeta:
- '@vitest/browser':
- optional: true
+ '@tailwindcss/oxide-freebsd-x64@4.1.17':
+ resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [freebsd]
- '@vitest/expect@3.2.4':
- resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
+ resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm]
+ os: [linux]
- '@vitest/mocker@3.2.4':
- resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
- peerDependencies:
- msw: ^2.4.9
- vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
- peerDependenciesMeta:
- msw:
- optional: true
- vite:
- optional: true
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
+ resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
- '@vitest/pretty-format@3.2.4':
- resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.17':
+ resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [linux]
- '@vitest/runner@3.2.4':
- resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==}
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.17':
+ resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-x64-musl@4.1.17':
+ resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [linux]
+
+ '@tailwindcss/oxide-wasm32-wasi@4.1.17':
+ resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==}
+ 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.1.17':
+ resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==}
+ engines: {node: '>= 10'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.17':
+ resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==}
+ engines: {node: '>= 10'}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/oxide@4.1.17':
+ resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==}
+ engines: {node: '>= 10'}
+
+ '@tailwindcss/postcss@4.1.17':
+ resolution: {integrity: sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw==}
+
+ '@takumi-rs/core-darwin-arm64@0.51.1':
+ resolution: {integrity: sha512-gL8PbLbMJ2hPL/0snOVBrEWSd6MUX60Q121okHmCRjmnosRnm6rR8bCbulBvPV2LTuHxigE05NxeNEzg0qdGeQ==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@takumi-rs/core-darwin-x64@0.51.1':
+ resolution: {integrity: sha512-yIm6IBbuupuv+NzbtZSENk8BJIOq7lJnfrHYMKhRR9cClYH550EC00AOQyUt0ihIKFX35FzHKK/GaiN728n3hg==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@takumi-rs/core-linux-arm64-gnu@0.51.1':
+ resolution: {integrity: sha512-PGUpozG2lPUsLnKpJ55PG+fsL18MFQwEN0HDRvYXHQ61NKHFFEUuiVp56DpmjWuEvlV6Qai+SL2r2dYg2AOsUw==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@takumi-rs/core-linux-arm64-musl@0.51.1':
+ resolution: {integrity: sha512-9Q/VskN8V9CdOW3A+a81AiMVHaDE77U1ujnRMAmtbKYISZ9amZEg97d1k+CnPJKqpAH/xe0yP5mZYGsEojfRFA==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@takumi-rs/core-linux-x64-gnu@0.51.1':
+ resolution: {integrity: sha512-Ba5AC/v64F0hOEWbwgNENV0zDgg6P1M6Et5h7YOwOM4d7YMa8xpPJ5/T54e+ZyhyCxKjKp1MR795r2EfkpVeCg==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@takumi-rs/core-linux-x64-musl@0.51.1':
+ resolution: {integrity: sha512-xUmTsrLLvMF02oi8OrXP6X+LZje9j+e8nxHzLBbNb4CCSXYQ/ayG5pZ6Tk+QjwHG8Kg5WmQz/cTHFYB5haN63A==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ '@takumi-rs/core-win32-arm64-msvc@0.51.1':
+ resolution: {integrity: sha512-3zIWFaPoB03YEth1C1stPrFtG1WK5S/0MiU/ANIgsOL7VLvrL9f2NaTSjS8jAi3gbkst/lJRnnNf7k5r9Sml0A==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@takumi-rs/core-win32-x64-msvc@0.51.1':
+ resolution: {integrity: sha512-bcrwToUSy+FYGxKKnJjEHssYv4d2n7gb+ikXwuEKYI97c7ku+jFb3HkhlmY8kJSBvxzNn8AmP1l4iJT26SNlpw==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@takumi-rs/core@0.51.1':
+ resolution: {integrity: sha512-vjprC7dIQx/m+tlWbTdWtwmgREUkEKKjmjQMdeCnB3prjS25P4WDH6OlVHEM8N+T/jIWzba0QHsri4YU9kotFw==}
+ engines: {node: '>= 12.22.0 < 13 || >= 14.17.0 < 15 || >= 15.12.0 < 16 || >= 16.0.0'}
+
+ '@takumi-rs/helpers@0.51.1':
+ resolution: {integrity: sha512-WWgqPw5kdA/uzozu9uO7ki+hCn8/oon8+a1LWhsqEvkD7ZoEGy8aA5BFnbclSIxuIySft8qnu2ja2YuB+i+Rlg==}
+
+ '@takumi-rs/image-response@0.51.1':
+ resolution: {integrity: sha512-g1iiMMMMPWdiK6sFghpJ8ATbedHW+EpKcifKxVR5YdSTLE2sQSenUeF3irrAGsUQIDDzUx6hwXY3Ihc2uFB5hA==}
+
+ '@takumi-rs/wasm@0.51.1':
+ resolution: {integrity: sha512-6vgy3j+aOaTr9vsnnFz6fzgNL4rO7oqBTO16Lv5RAsoeovy3t+jiM2c4uY9gV41PTxVYSDC5+frga8EHnyLsqQ==}
+
+ '@ts-morph/common@0.28.1':
+ resolution: {integrity: sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g==}
+
+ '@types/aws-lambda@8.10.159':
+ resolution: {integrity: sha512-SAP22WSGNN12OQ8PlCzGzRCZ7QDCwI85dQZbmpz7+mAk+L7j+wI7qnvmdKh+o7A5LaOp6QnOZ2NJphAZQTTHQg==}
+
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+
+ '@types/d3-array@3.2.2':
+ resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==}
+
+ '@types/d3-axis@3.0.6':
+ resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==}
+
+ '@types/d3-brush@3.0.6':
+ resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==}
+
+ '@types/d3-chord@3.0.6':
+ resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==}
+
+ '@types/d3-color@3.1.3':
+ resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==}
+
+ '@types/d3-contour@3.0.6':
+ resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==}
+
+ '@types/d3-delaunay@6.0.4':
+ resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==}
+
+ '@types/d3-dispatch@3.0.7':
+ resolution: {integrity: sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==}
+
+ '@types/d3-drag@3.0.7':
+ resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==}
+
+ '@types/d3-dsv@3.0.7':
+ resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==}
+
+ '@types/d3-ease@3.0.2':
+ resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==}
+
+ '@types/d3-fetch@3.0.7':
+ resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==}
+
+ '@types/d3-force@3.0.10':
+ resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==}
+
+ '@types/d3-format@3.0.4':
+ resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==}
+
+ '@types/d3-geo@3.1.0':
+ resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==}
+
+ '@types/d3-hierarchy@3.1.7':
+ resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==}
+
+ '@types/d3-interpolate@3.0.4':
+ resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==}
+
+ '@types/d3-path@3.1.1':
+ resolution: {integrity: sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==}
+
+ '@types/d3-polygon@3.0.2':
+ resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==}
+
+ '@types/d3-quadtree@3.0.6':
+ resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==}
+
+ '@types/d3-random@3.0.3':
+ resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==}
+
+ '@types/d3-scale-chromatic@3.1.0':
+ resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==}
+
+ '@types/d3-scale@4.0.9':
+ resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==}
+
+ '@types/d3-selection@3.0.11':
+ resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==}
+
+ '@types/d3-shape@3.1.7':
+ resolution: {integrity: sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==}
+
+ '@types/d3-time-format@4.0.3':
+ resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==}
+
+ '@types/d3-time@3.0.4':
+ resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==}
+
+ '@types/d3-timer@3.0.2':
+ resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==}
+
+ '@types/d3-transition@3.0.9':
+ resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==}
+
+ '@types/d3-zoom@3.0.8':
+ resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==}
+
+ '@types/d3@7.4.3':
+ resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==}
+
+ '@types/debug@4.1.12':
+ resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
+ '@types/estree-jsx@1.0.5':
+ resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/fs-extra@11.0.4':
+ resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
+
+ '@types/geojson@7946.0.16':
+ resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
+
+ '@types/hast@3.0.4':
+ resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/jsonfile@6.1.4':
+ resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+
+ '@types/mdast@4.0.4':
+ resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+
+ '@types/mdx@2.0.13':
+ resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
+
+ '@types/ms@2.1.0':
+ resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+
+ '@types/node@12.20.55':
+ resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
+
+ '@types/node@20.19.25':
+ resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==}
+
+ '@types/node@24.10.1':
+ resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
+
+ '@types/react-dom@19.2.3':
+ resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
+ peerDependencies:
+ '@types/react': ^19.2.0
+
+ '@types/react@19.2.7':
+ resolution: {integrity: sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==}
+
+ '@types/statuses@2.0.6':
+ resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==}
+
+ '@types/trusted-types@2.0.7':
+ resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+
+ '@types/unist@2.0.11':
+ resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
+
+ '@types/unist@3.0.3':
+ resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
+ '@typescript/vfs@1.6.2':
+ resolution: {integrity: sha512-hoBwJwcbKHmvd2QVebiytN1aELvpk9B74B4L1mFm/XT1Q/VOYAWl2vQ9AWRFtQq8zmz6enTpfTV8WRc4ATjW/g==}
+ peerDependencies:
+ typescript: '*'
+
+ '@ungap/structured-clone@1.3.0':
+ resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+
+ '@vitest/coverage-v8@4.0.6':
+ resolution: {integrity: sha512-cv6pFXj9/Otk7q1Ocoj8k3BUVVwnFr3jqcqpwYrU5LkKClU9DpaMEdX+zptx/RyIJS+/VpoxMWmfISXchmVDPQ==}
+ peerDependencies:
+ '@vitest/browser': 4.0.6
+ vitest: 4.0.6
+ peerDependenciesMeta:
+ '@vitest/browser':
+ optional: true
+
+ '@vitest/expect@4.0.13':
+ resolution: {integrity: sha512-zYtcnNIBm6yS7Gpr7nFTmq8ncowlMdOJkWLqYvhr/zweY6tFbDkDi8BPPOeHxEtK1rSI69H7Fd4+1sqvEGli6w==}
+
+ '@vitest/mocker@4.0.13':
+ resolution: {integrity: sha512-eNCwzrI5djoauklwP1fuslHBjrbR8rqIVbvNlAnkq1OTa6XT+lX68mrtPirNM9TnR69XUPt4puBCx2Wexseylg==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@4.0.13':
+ resolution: {integrity: sha512-ooqfze8URWbI2ozOeLDMh8YZxWDpGXoeY3VOgcDnsUxN0jPyPWSUvjPQWqDGCBks+opWlN1E4oP1UYl3C/2EQA==}
+
+ '@vitest/pretty-format@4.0.6':
+ resolution: {integrity: sha512-4vptgNkLIA1W1Nn5X4x8rLJBzPiJwnPc+awKtfBE5hNMVsoAl/JCCPPzNrbf+L4NKgklsis5Yp2gYa+XAS442g==}
+
+ '@vitest/runner@4.0.13':
+ resolution: {integrity: sha512-9IKlAru58wcVaWy7hz6qWPb2QzJTKt+IOVKjAx5vb5rzEFPTL6H4/R9BMvjZ2ppkxKgTrFONEJFtzvnyEpiT+A==}
- '@vitest/snapshot@3.2.4':
- resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==}
+ '@vitest/snapshot@4.0.13':
+ resolution: {integrity: sha512-hb7Usvyika1huG6G6l191qu1urNPsq1iFc2hmdzQY3F5/rTgqQnwwplyf8zoYHkpt7H6rw5UfIw6i/3qf9oSxQ==}
- '@vitest/spy@3.2.4':
- resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
+ '@vitest/spy@4.0.13':
+ resolution: {integrity: sha512-hSu+m4se0lDV5yVIcNWqjuncrmBgwaXa2utFLIrBkQCQkt+pSwyZTPFQAZiiF/63j8jYa8uAeUZ3RSfcdWaYWw==}
- '@vitest/utils@3.2.4':
- resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
+ '@vitest/utils@4.0.13':
+ resolution: {integrity: sha512-ydozWyQ4LZuu8rLp47xFUWis5VOKMdHjXCWhs1LuJsTNKww+pTHQNK4e0assIB9K80TxFyskENL6vCu3j34EYA==}
+
+ '@vitest/utils@4.0.6':
+ resolution: {integrity: sha512-bG43VS3iYKrMIZXBo+y8Pti0O7uNju3KvNn6DrQWhQQKcLavMB+0NZfO1/QBAEbq0MaQ3QjNsnnXlGQvsh0Z6A==}
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
@@ -725,35 +2016,28 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
- ajv@6.12.6:
- resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
-
ansi-colors@4.1.3:
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
engines: {node: '>=6'}
- ansi-escapes@4.3.2:
- resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
- engines: {node: '>=8'}
-
- ansi-escapes@7.0.0:
- resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==}
+ ansi-escapes@7.2.0:
+ resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==}
engines: {node: '>=18'}
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
- ansi-regex@6.1.0:
- resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
engines: {node: '>=12'}
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
- ansi-styles@6.2.1:
- resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
any-promise@1.3.0:
@@ -765,61 +2049,37 @@ packages:
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
- array-buffer-byte-length@1.0.2:
- resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
- engines: {node: '>= 0.4'}
-
- array-includes@3.1.9:
- resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
- engines: {node: '>= 0.4'}
+ aria-hidden@1.2.6:
+ resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
+ engines: {node: '>=10'}
array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
- array.prototype.findlastindex@1.2.6:
- resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==}
- engines: {node: '>= 0.4'}
-
- array.prototype.flat@1.3.3:
- resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
- engines: {node: '>= 0.4'}
-
- array.prototype.flatmap@1.3.3:
- resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
- engines: {node: '>= 0.4'}
-
- arraybuffer.prototype.slice@1.0.4:
- resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
- engines: {node: '>= 0.4'}
-
assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
- ast-v8-to-istanbul@0.3.3:
- resolution: {integrity: sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==}
+ ast-v8-to-istanbul@0.3.8:
+ resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==}
- async-function@1.0.0:
- resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
- engines: {node: '>= 0.4'}
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
- available-typed-arrays@1.0.7:
- resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
- engines: {node: '>= 0.4'}
+ bail@2.0.2:
+ resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
- balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ before-after-hook@4.0.0:
+ resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==}
better-path-resolve@1.0.0:
resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
engines: {node: '>=4'}
- brace-expansion@1.1.12:
- resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
-
- brace-expansion@2.0.2:
- resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+ bottleneck@2.19.5:
+ resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
@@ -835,40 +2095,45 @@ packages:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
- call-bind-apply-helpers@1.0.2:
- resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
- engines: {node: '>= 0.4'}
+ call-me-maybe@1.0.2:
+ resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==}
- call-bind@1.0.8:
- resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
- engines: {node: '>= 0.4'}
+ caniuse-lite@1.0.30001757:
+ resolution: {integrity: sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==}
- call-bound@1.0.4:
- resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
- engines: {node: '>= 0.4'}
+ ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
- callsites@3.1.0:
- resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
- engines: {node: '>=6'}
-
- chai@5.2.1:
- resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==}
+ chai@6.2.1:
+ resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==}
engines: {node: '>=18'}
- chalk@4.1.2:
- resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
- engines: {node: '>=10'}
-
- chalk@5.4.1:
- resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ chalk@5.6.2:
+ resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
- chardet@0.7.0:
- resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+ character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
- check-error@2.1.1:
- resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
- engines: {node: '>= 16'}
+ character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+
+ character-entities@2.0.2:
+ resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+
+ character-reference-invalid@2.0.1:
+ resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
+
+ chardet@2.1.1:
+ resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
+
+ chevrotain-allstar@0.3.1:
+ resolution: {integrity: sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==}
+ peerDependencies:
+ chevrotain: ^11.0.0
+
+ chevrotain@11.0.3:
+ resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==}
chokidar@4.0.3:
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
@@ -878,22 +2143,38 @@ packages:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
+ class-variance-authority@0.7.1:
+ resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
+
cli-cursor@5.0.0:
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
engines: {node: '>=18'}
- cli-truncate@4.0.0:
- resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
- engines: {node: '>=18'}
+ cli-truncate@5.1.1:
+ resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==}
+ engines: {node: '>=20'}
cli-width@4.1.0:
resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
engines: {node: '>= 12'}
+ client-only@0.0.1:
+ resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+
cliui@8.0.1:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+
+ code-block-writer@13.0.3:
+ resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==}
+
+ collapse-white-space@2.1.0:
+ resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
+
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@@ -904,324 +2185,375 @@ packages:
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
- commander@13.1.0:
- resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
- engines: {node: '>=18'}
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
+ commander@14.0.2:
+ resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
+ engines: {node: '>=20'}
commander@4.1.1:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
- concat-map@0.0.1:
- resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+
+ commander@8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+ engines: {node: '>= 12'}
+
+ commander@9.5.0:
+ resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
+ engines: {node: ^12.20.0 || >=14}
+
+ compute-scroll-into-view@3.1.1:
+ resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==}
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+ confbox@0.2.2:
+ resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
+
consola@3.4.2:
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
- cookie@0.7.2:
- resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
- engines: {node: '>= 0.6'}
+ cookie@1.0.2:
+ resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
+ engines: {node: '>=18'}
+
+ cose-base@1.0.3:
+ resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
+
+ cose-base@2.2.0:
+ resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==}
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
- data-view-buffer@1.0.2:
- resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
- engines: {node: '>= 0.4'}
-
- data-view-byte-length@1.0.2:
- resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
- engines: {node: '>= 0.4'}
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
- data-view-byte-offset@1.0.1:
- resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
- engines: {node: '>= 0.4'}
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
- debug@3.2.7:
- resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+ cytoscape-cose-bilkent@4.1.0:
+ resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==}
peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
+ cytoscape: ^3.2.0
- debug@4.4.1:
- resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
- engines: {node: '>=6.0'}
+ cytoscape-fcose@2.2.0:
+ resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==}
peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
+ cytoscape: ^3.2.0
- deep-eql@5.0.2:
- resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
- engines: {node: '>=6'}
+ cytoscape@3.33.1:
+ resolution: {integrity: sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==}
+ engines: {node: '>=0.10'}
- deep-is@0.1.4:
- resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ d3-array@2.12.1:
+ resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==}
- define-data-property@1.1.4:
- resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
- engines: {node: '>= 0.4'}
+ d3-array@3.2.4:
+ resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
+ engines: {node: '>=12'}
- define-properties@1.2.1:
- resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
- engines: {node: '>= 0.4'}
+ d3-axis@3.0.0:
+ resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==}
+ engines: {node: '>=12'}
- detect-indent@6.1.0:
- resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
- engines: {node: '>=8'}
+ d3-brush@3.0.0:
+ resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==}
+ engines: {node: '>=12'}
- dir-glob@3.0.1:
- resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
- engines: {node: '>=8'}
+ d3-chord@3.0.1:
+ resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==}
+ engines: {node: '>=12'}
- doctrine@2.1.0:
- resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
- engines: {node: '>=0.10.0'}
+ d3-color@3.1.0:
+ resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
+ engines: {node: '>=12'}
- dotenv@16.0.3:
- resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
+ d3-contour@4.0.2:
+ resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==}
engines: {node: '>=12'}
- dunder-proto@1.0.1:
- resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
- engines: {node: '>= 0.4'}
+ d3-delaunay@6.0.4:
+ resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==}
+ engines: {node: '>=12'}
- eastasianwidth@0.2.0:
- resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ d3-dispatch@3.0.1:
+ resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
+ engines: {node: '>=12'}
- emoji-regex@10.4.0:
- resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
+ d3-drag@3.0.0:
+ resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
+ engines: {node: '>=12'}
- emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ d3-dsv@3.0.1:
+ resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==}
+ engines: {node: '>=12'}
+ hasBin: true
- emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ d3-ease@3.0.1:
+ resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
+ engines: {node: '>=12'}
- enquirer@2.4.1:
- resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
- engines: {node: '>=8.6'}
+ d3-fetch@3.0.1:
+ resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==}
+ engines: {node: '>=12'}
- environment@1.1.0:
- resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
- engines: {node: '>=18'}
+ d3-force@3.0.0:
+ resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==}
+ engines: {node: '>=12'}
- es-abstract@1.24.0:
- resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==}
- engines: {node: '>= 0.4'}
+ d3-format@3.1.0:
+ resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==}
+ engines: {node: '>=12'}
- es-define-property@1.0.1:
- resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
- engines: {node: '>= 0.4'}
+ d3-geo@3.1.1:
+ resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==}
+ engines: {node: '>=12'}
- es-errors@1.3.0:
- resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
- engines: {node: '>= 0.4'}
+ d3-hierarchy@3.1.2:
+ resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==}
+ engines: {node: '>=12'}
- es-module-lexer@1.7.0:
- resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+ d3-interpolate@3.0.1:
+ resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
+ engines: {node: '>=12'}
- es-object-atoms@1.1.1:
- resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
- engines: {node: '>= 0.4'}
+ d3-path@1.0.9:
+ resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==}
- es-set-tostringtag@2.1.0:
- resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
- engines: {node: '>= 0.4'}
+ d3-path@3.1.0:
+ resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
+ engines: {node: '>=12'}
- es-shim-unscopables@1.1.0:
- resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
- engines: {node: '>= 0.4'}
+ d3-polygon@3.0.1:
+ resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==}
+ engines: {node: '>=12'}
- es-to-primitive@1.3.0:
- resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
- engines: {node: '>= 0.4'}
+ d3-quadtree@3.0.1:
+ resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==}
+ engines: {node: '>=12'}
- esbuild@0.25.6:
- resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==}
- engines: {node: '>=18'}
- hasBin: true
+ d3-random@3.0.1:
+ resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==}
+ engines: {node: '>=12'}
- escalade@3.2.0:
- resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
- engines: {node: '>=6'}
+ d3-sankey@0.12.3:
+ resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==}
- escape-string-regexp@4.0.0:
- resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
- engines: {node: '>=10'}
+ d3-scale-chromatic@3.1.0:
+ resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==}
+ engines: {node: '>=12'}
- eslint-config-prettier@10.1.5:
- resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==}
- hasBin: true
- peerDependencies:
- eslint: '>=7.0.0'
+ d3-scale@4.0.2:
+ resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
+ engines: {node: '>=12'}
- eslint-config-turbo@2.5.4:
- resolution: {integrity: sha512-OpjpDLXIaus0N/Y+pMj17K430xjpd6WTo0xPUESqYZ9BkMngv2n0ZdjktgJTbJVnDmK7gHrXgJAljtdIMcYBIg==}
- peerDependencies:
- eslint: '>6.6.0'
- turbo: '>2.0.0'
+ d3-selection@3.0.0:
+ resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
+ engines: {node: '>=12'}
- eslint-import-resolver-node@0.3.9:
- resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+ d3-shape@1.3.7:
+ resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==}
- eslint-module-utils@2.12.1:
- resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==}
- engines: {node: '>=4'}
- peerDependencies:
- '@typescript-eslint/parser': '*'
- eslint: '*'
- eslint-import-resolver-node: '*'
- eslint-import-resolver-typescript: '*'
- eslint-import-resolver-webpack: '*'
- peerDependenciesMeta:
- '@typescript-eslint/parser':
- optional: true
- eslint:
- optional: true
- eslint-import-resolver-node:
- optional: true
- eslint-import-resolver-typescript:
- optional: true
- eslint-import-resolver-webpack:
- optional: true
+ d3-shape@3.2.0:
+ resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
+ engines: {node: '>=12'}
- 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
+ d3-time-format@4.1.0:
+ resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
+ engines: {node: '>=12'}
- eslint-plugin-prettier@5.5.1:
- resolution: {integrity: sha512-dobTkHT6XaEVOo8IO90Q4DOSxnm3Y151QxPJlM/vKC0bVy+d6cVWQZLlFiuZPP0wS6vZwSKeJgKkcS+KfMBlRw==}
- engines: {node: ^14.18.0 || >=16.0.0}
- peerDependencies:
- '@types/eslint': '>=8.0.0'
- eslint: '>=8.0.0'
- eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0'
- prettier: '>=3.0.0'
- peerDependenciesMeta:
- '@types/eslint':
- optional: true
- eslint-config-prettier:
- optional: true
+ d3-time@3.1.0:
+ resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
+ engines: {node: '>=12'}
+
+ d3-timer@3.0.1:
+ resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
+ engines: {node: '>=12'}
- eslint-plugin-turbo@2.5.4:
- resolution: {integrity: sha512-IZsW61DFj5mLMMaCJxhh1VE4HvNhfdnHnAaXajgne+LUzdyHk2NvYT0ECSa/1SssArcqgTvV74MrLL68hWLLFw==}
+ d3-transition@3.0.1:
+ resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
+ engines: {node: '>=12'}
peerDependencies:
- eslint: '>6.6.0'
- turbo: '>2.0.0'
+ d3-selection: 2 - 3
- eslint-scope@8.4.0:
- resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ d3-zoom@3.0.0:
+ resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
+ engines: {node: '>=12'}
- 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}
+ d3@7.9.0:
+ resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==}
+ engines: {node: '>=12'}
- 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}
+ dagre-d3-es@7.0.13:
+ resolution: {integrity: sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==}
- eslint@9.31.0:
- resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- hasBin: true
+ dayjs@1.11.19:
+ resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
peerDependencies:
- jiti: '*'
+ supports-color: '*'
peerDependenciesMeta:
- jiti:
+ supports-color:
optional: true
- espree@10.4.0:
- resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ decode-named-character-reference@1.2.0:
+ resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
+
+ delaunator@5.0.1:
+ resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==}
+
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
+ detect-indent@6.1.0:
+ resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
+ engines: {node: '>=8'}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ detect-node-es@1.1.0:
+ resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+
+ devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+
+ dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+
+ dompurify@3.3.0:
+ resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==}
+
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ enhanced-resolve@5.18.3:
+ resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
+ engines: {node: '>=10.13.0'}
+
+ enquirer@2.4.1:
+ resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
+ engines: {node: '>=8.6'}
+
+ environment@1.1.0:
+ resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
+ engines: {node: '>=18'}
+
+ es-module-lexer@1.7.0:
+ resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+
+ esast-util-from-estree@2.0.0:
+ resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
+
+ esast-util-from-js@2.0.1:
+ resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
+
+ esbuild@0.25.12:
+ resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ esbuild@0.27.0:
+ resolution: {integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
- esquery@1.6.0:
- resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
- engines: {node: '>=0.10'}
+ estree-util-attach-comments@3.0.0:
+ resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
+
+ estree-util-build-jsx@3.0.1:
+ resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
- esrecurse@4.3.0:
- resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
- engines: {node: '>=4.0'}
+ estree-util-is-identifier-name@3.0.0:
+ resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
- estraverse@5.3.0:
- resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
- engines: {node: '>=4.0'}
+ estree-util-scope@1.0.0:
+ resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==}
+
+ estree-util-to-js@2.0.0:
+ resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
+
+ estree-util-value-to-estree@3.5.0:
+ resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==}
+
+ estree-util-visit@2.0.0:
+ resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
- esutils@2.0.3:
- resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
- engines: {node: '>=0.10.0'}
-
eventemitter3@5.0.1:
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
- execa@8.0.1:
- resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
- engines: {node: '>=16.17'}
-
expect-type@1.2.2:
resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==}
engines: {node: '>=12.0.0'}
- extendable-error@0.1.7:
- resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
+ exsolve@1.0.8:
+ resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
- external-editor@3.1.0:
- resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
- engines: {node: '>=4'}
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
- fast-deep-equal@3.1.3:
- resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ extendable-error@0.1.7:
+ resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
- fast-diff@1.3.0:
- resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
+ fast-content-type-parse@3.0.0:
+ resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==}
fast-glob@3.3.3:
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines: {node: '>=8.6.0'}
- fast-json-stable-stringify@2.1.0:
- resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
-
- fast-levenshtein@2.0.6:
- resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
-
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
- fdir@6.4.6:
- resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
peerDependencies:
picomatch: ^3 || ^4
peerDependenciesMeta:
picomatch:
optional: true
- file-entry-cache@8.0.0:
- resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
- engines: {node: '>=16.0.0'}
+ feed@5.1.0:
+ resolution: {integrity: sha512-qGNhgYygnefSkAHHrNHqC7p3R8J0/xQDS/cYUud8er/qD9EFGWyCdUDfULHTJQN1d3H3WprzVwMc9MfB4J50Wg==}
+ engines: {node: '>=20', pnpm: '>=10'}
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
@@ -1231,27 +2563,12 @@ packages:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
- find-up@5.0.0:
- resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
- engines: {node: '>=10'}
-
fix-dts-default-cjs-exports@1.0.1:
resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==}
- flat-cache@4.0.1:
- resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
- engines: {node: '>=16'}
-
- flatted@3.3.3:
- resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
-
- for-each@0.3.5:
- resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
- engines: {node: '>= 0.4'}
-
- foreground-child@3.3.1:
- resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
- engines: {node: '>=14'}
+ fs-extra@11.3.2:
+ resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==}
+ engines: {node: '>=14.14'}
fs-extra@7.0.1:
resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
@@ -1266,65 +2583,129 @@ packages:
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
- function-bind@1.1.2:
- resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+ fumadocs-core@16.0.8:
+ resolution: {integrity: sha512-nWWwEfcHxn4tmx/knvDlbRUUkbGc6ChNEpLymV5cmQCSAazG0FkgksF5aOxoDq1wPG0THoEMBVD320spe4QWHw==}
+ peerDependencies:
+ '@mixedbread/sdk': ^0.19.0
+ '@orama/core': 1.x.x
+ '@tanstack/react-router': 1.x.x
+ '@types/react': '*'
+ algoliasearch: 5.x.x
+ lucide-react: '*'
+ next: 16.x.x
+ react: ^19.2.0
+ react-dom: ^19.2.0
+ react-router: 7.x.x
+ waku: ^0.26.0
+ peerDependenciesMeta:
+ '@mixedbread/sdk':
+ optional: true
+ '@orama/core':
+ optional: true
+ '@tanstack/react-router':
+ optional: true
+ '@types/react':
+ optional: true
+ algoliasearch:
+ optional: true
+ lucide-react:
+ optional: true
+ next:
+ optional: true
+ react:
+ optional: true
+ react-dom:
+ optional: true
+ react-router:
+ optional: true
+ waku:
+ optional: true
+
+ fumadocs-mdx@13.0.5:
+ resolution: {integrity: sha512-ERhPxQzoTwEdtuel5dN5OmUItOhGGXTLR1uCjiGPABYeVkc57vAexyTRQSYZMxGlcfjkJaYqt3qY1p5j7i4g7A==}
+ hasBin: true
+ peerDependencies:
+ '@fumadocs/mdx-remote': ^1.4.0
+ fumadocs-core: ^15.0.0 || ^16.0.0
+ next: ^15.3.0 || ^16.0.0
+ react: '*'
+ vite: 6.x.x || 7.x.x
+ peerDependenciesMeta:
+ '@fumadocs/mdx-remote':
+ optional: true
+ next:
+ optional: true
+ react:
+ optional: true
+ vite:
+ optional: true
+
+ fumadocs-twoslash@3.1.10:
+ resolution: {integrity: sha512-x45dgfCRyUSjqd/APhf4EWJBnqoEqNH7kp7P4GbVWJqvptNsr5kQtRjMRTbhbg28XsrsBNHRTa8q1/w+rDfm1Q==}
+ peerDependencies:
+ '@types/react': '*'
+ fumadocs-ui: ^15.0.0 || ^16.0.0
+ react: 18.x.x || 19.x.x
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
- function.prototype.name@1.1.8:
- resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
- engines: {node: '>= 0.4'}
+ fumadocs-typescript@4.0.13:
+ resolution: {integrity: sha512-zmpmqsS2DZeH2wn17X0V5NOQ77mqnjlKjyUcgjNQk/vDPQkdFRxuoLNNBFnGGMizoKMQ30hjRgdGukVSVDgy+g==}
+ peerDependencies:
+ '@types/react': '*'
+ fumadocs-core: ^15.7.0 || ^16.0.0
+ fumadocs-ui: ^15.7.0 || ^16.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ fumadocs-ui:
+ optional: true
- functions-have-names@1.2.3:
- resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+ fumadocs-ui@16.0.8:
+ resolution: {integrity: sha512-NyqAiYJnseXYy6ah/rI67Luy5mssSOwOMv03Xy2SHaDrH588Xjtbx84DwnaJXDlu2L/evHMJ+Bvt5/WIdBQbWQ==}
+ peerDependencies:
+ '@types/react': '*'
+ next: 16.x.x
+ react: ^19.2.0
+ react-dom: ^19.2.0
+ tailwindcss: ^4.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ next:
+ optional: true
+ tailwindcss:
+ optional: true
get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
- get-east-asian-width@1.3.0:
- resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
+ get-east-asian-width@1.4.0:
+ resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==}
engines: {node: '>=18'}
- get-intrinsic@1.3.0:
- resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
- engines: {node: '>= 0.4'}
-
- get-proto@1.0.1:
- resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
- engines: {node: '>= 0.4'}
-
- get-stream@8.0.1:
- resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
- engines: {node: '>=16'}
+ get-nonce@1.0.1:
+ resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
+ engines: {node: '>=6'}
- get-symbol-description@1.1.0:
- resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
- engines: {node: '>= 0.4'}
+ github-slugger@2.0.0:
+ resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
- glob-parent@6.0.2:
- resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
- engines: {node: '>=10.13.0'}
-
- glob@10.4.5:
- resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
- hasBin: true
-
- glob@11.0.3:
- resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==}
+ glob@13.0.0:
+ resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==}
engines: {node: 20 || >=22}
- hasBin: true
- globals@14.0.0:
- resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ globals@15.15.0:
+ resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
engines: {node: '>=18'}
- globalthis@1.0.4:
- resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
- engines: {node: '>= 0.4'}
-
globby@11.1.0:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
engines: {node: '>=10'}
@@ -1332,46 +2713,34 @@ packages:
globrex@0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
- gopd@1.2.0:
- resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
- engines: {node: '>= 0.4'}
-
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
- graphemer@1.4.0:
- resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
-
- graphql@16.11.0:
- resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==}
+ graphql@16.12.0:
+ resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==}
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
- has-bigints@1.1.0:
- resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
- engines: {node: '>= 0.4'}
+ hachure-fill@0.5.2:
+ resolution: {integrity: sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==}
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
- has-property-descriptors@1.0.2:
- resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+ hast-util-to-estree@3.1.3:
+ resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==}
- has-proto@1.2.0:
- resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
- engines: {node: '>= 0.4'}
+ hast-util-to-html@9.0.5:
+ resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
- has-symbols@1.1.0:
- resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
- engines: {node: '>= 0.4'}
+ hast-util-to-jsx-runtime@2.3.6:
+ resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
- has-tostringtag@1.0.2:
- resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
- engines: {node: '>= 0.4'}
+ hast-util-to-string@3.0.1:
+ resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==}
- hasown@2.0.2:
- resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
- engines: {node: '>= 0.4'}
+ hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
headers-polyfill@4.0.3:
resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==}
@@ -1379,173 +2748,92 @@ packages:
html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
- human-id@4.1.1:
- resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==}
- hasBin: true
+ html-void-elements@3.0.0:
+ resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
- human-signals@5.0.0:
- resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
- engines: {node: '>=16.17.0'}
+ human-id@4.1.2:
+ resolution: {integrity: sha512-v/J+4Z/1eIJovEBdlV5TYj1IR+ZiohcYGRY+qN/oC9dAfKzVT023N/Bgw37hrKCoVRBvk3bqyzpr2PP5YeTMSg==}
+ hasBin: true
husky@9.1.7:
resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
engines: {node: '>=18'}
hasBin: true
- iconv-lite@0.4.24:
- resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
+ iconv-lite@0.7.0:
+ resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==}
engines: {node: '>=0.10.0'}
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
- ignore@7.0.5:
- resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
- engines: {node: '>= 4'}
-
- import-fresh@3.3.1:
- resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
- engines: {node: '>=6'}
-
- imurmurhash@0.1.4:
- resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
- engines: {node: '>=0.8.19'}
-
- internal-slot@1.1.0:
- resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
- engines: {node: '>= 0.4'}
-
- is-array-buffer@3.0.5:
- resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
- engines: {node: '>= 0.4'}
-
- is-async-function@2.1.1:
- resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
- engines: {node: '>= 0.4'}
+ image-size@2.0.2:
+ resolution: {integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==}
+ engines: {node: '>=16.x'}
+ hasBin: true
- is-bigint@1.1.0:
- resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
- engines: {node: '>= 0.4'}
+ inline-style-parser@0.2.7:
+ resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
- is-boolean-object@1.2.2:
- resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
- engines: {node: '>= 0.4'}
+ internmap@1.0.1:
+ resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==}
- is-callable@1.2.7:
- resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
- engines: {node: '>= 0.4'}
+ internmap@2.0.3:
+ resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
+ engines: {node: '>=12'}
- is-core-module@2.16.1:
- resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
- engines: {node: '>= 0.4'}
+ is-alphabetical@2.0.1:
+ resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
- is-data-view@1.0.2:
- resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
- engines: {node: '>= 0.4'}
+ is-alphanumerical@2.0.1:
+ resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
- is-date-object@1.1.0:
- resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
- engines: {node: '>= 0.4'}
+ is-decimal@2.0.1:
+ resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
- is-finalizationregistry@1.1.1:
- resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
- engines: {node: '>= 0.4'}
-
is-fullwidth-code-point@3.0.0:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
- is-fullwidth-code-point@4.0.0:
- resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
- engines: {node: '>=12'}
-
- is-fullwidth-code-point@5.0.0:
- resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
+ is-fullwidth-code-point@5.1.0:
+ resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
engines: {node: '>=18'}
- is-generator-function@1.1.0:
- resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
- engines: {node: '>= 0.4'}
-
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
- is-map@2.0.3:
- resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
- engines: {node: '>= 0.4'}
-
- is-negative-zero@2.0.3:
- resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
- engines: {node: '>= 0.4'}
+ is-hexadecimal@2.0.1:
+ resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
is-node-process@1.2.0:
resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==}
- is-number-object@1.1.1:
- resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
- engines: {node: '>= 0.4'}
-
is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
- is-regex@1.2.1:
- resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
- engines: {node: '>= 0.4'}
-
- is-set@2.0.3:
- resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
- engines: {node: '>= 0.4'}
-
- is-shared-array-buffer@1.0.4:
- resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
- engines: {node: '>= 0.4'}
-
- is-stream@3.0.0:
- resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- is-string@1.1.1:
- resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
- engines: {node: '>= 0.4'}
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
is-subdir@1.2.0:
resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==}
engines: {node: '>=4'}
- is-symbol@1.1.1:
- resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
- engines: {node: '>= 0.4'}
-
- is-typed-array@1.1.15:
- resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
- engines: {node: '>= 0.4'}
-
- is-weakmap@2.0.2:
- resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
- engines: {node: '>= 0.4'}
-
- is-weakref@1.1.1:
- resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
- engines: {node: '>= 0.4'}
-
- is-weakset@2.0.4:
- resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
- engines: {node: '>= 0.4'}
-
is-windows@1.0.2:
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
engines: {node: '>=0.10.0'}
- isarray@2.0.5:
- resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
-
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
@@ -1561,16 +2849,13 @@ packages:
resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==}
engines: {node: '>=10'}
- istanbul-reports@3.1.7:
- resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
+ istanbul-reports@3.2.0:
+ resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
engines: {node: '>=8'}
- jackspeak@3.4.3:
- resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
-
- jackspeak@4.1.1:
- resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
- engines: {node: 20 || >=22}
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
joycon@3.1.1:
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
@@ -1579,36 +2864,109 @@ packages:
js-tokens@9.0.1:
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
- js-yaml@3.14.1:
- resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
+ js-yaml@3.14.2:
+ resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
hasBin: true
- js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
- json-buffer@3.0.1:
- resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
-
- json-schema-traverse@0.4.1:
- resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ jsonfile@4.0.0:
+ resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
- json-stable-stringify-without-jsonify@1.0.1:
- resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ jsonfile@6.2.0:
+ resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
- json5@1.0.2:
- resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+ katex@0.16.25:
+ resolution: {integrity: sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==}
hasBin: true
- jsonfile@4.0.0:
- resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+ khroma@2.1.0:
+ resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
+
+ kolorist@1.8.0:
+ resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+
+ langium@3.3.1:
+ resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==}
+ engines: {node: '>=16.0.0'}
+
+ layout-base@1.0.2:
+ resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==}
+
+ layout-base@2.0.1:
+ resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==}
+
+ lightningcss-android-arm64@1.30.2:
+ resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.30.2:
+ resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.30.2:
+ resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.30.2:
+ resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.30.2:
+ resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.30.2:
+ resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-arm64-musl@1.30.2:
+ resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-x64-gnu@1.30.2:
+ resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-linux-x64-musl@1.30.2:
+ resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
- keyv@4.5.4:
- resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ lightningcss-win32-arm64-msvc@1.30.2:
+ resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.30.2:
+ resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
- levn@0.4.1:
- resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
- engines: {node: '>= 0.8.0'}
+ lightningcss@1.30.2:
+ resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
+ engines: {node: '>= 12.0.0'}
lilconfig@3.1.3:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
@@ -1617,33 +2975,41 @@ packages:
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
- lint-staged@15.5.2:
- resolution: {integrity: sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==}
- engines: {node: '>=18.12.0'}
+ lint-staged@16.2.7:
+ resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==}
+ engines: {node: '>=20.17'}
hasBin: true
- listr2@8.3.3:
- resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==}
- engines: {node: '>=18.0.0'}
+ listr2@9.0.5:
+ resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==}
+ engines: {node: '>=20.0.0'}
load-tsconfig@0.2.5:
resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ local-pkg@1.1.2:
+ resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
+ engines: {node: '>=14'}
+
locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
- locate-path@6.0.0:
- resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
- engines: {node: '>=10'}
+ lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+
+ lodash.get@4.4.2:
+ resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
+ deprecated: This package is deprecated. Use the optional chaining (?.) operator instead.
+
+ lodash.isequal@4.5.0:
+ resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+ deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
- lodash.sortby@4.7.0:
- resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
-
lodash.startcase@4.4.0:
resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
@@ -1651,18 +3017,20 @@ packages:
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
engines: {node: '>=18'}
- loupe@3.1.4:
- resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==}
-
- lru-cache@10.4.3:
- resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+ longest-streak@3.1.0:
+ resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
- lru-cache@11.1.0:
- resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==}
+ lru-cache@11.2.2:
+ resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==}
engines: {node: 20 || >=22}
- magic-string@0.30.17:
- resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+ lucide-react@0.552.0:
+ resolution: {integrity: sha512-g9WCjmfwqbexSnZE+2cl21PCfXOcqnGeWeMTNAOGEfpPbm/ZF4YIq77Z8qWrxbu660EKuLB4nSLggoKnCb+isw==}
+ peerDependencies:
+ react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
magicast@0.3.5:
resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
@@ -1671,129 +3039,285 @@ packages:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'}
- math-intrinsics@1.1.0:
- resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
- engines: {node: '>= 0.4'}
+ markdown-extensions@2.0.0:
+ resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
+ engines: {node: '>=16'}
- merge-stream@2.0.0:
- resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+ markdown-table@3.0.4:
+ resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
- merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
+ marked@16.4.2:
+ resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==}
+ engines: {node: '>= 20'}
+ hasBin: true
- micromatch@4.0.8:
- resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
- engines: {node: '>=8.6'}
+ mdast-util-find-and-replace@3.0.2:
+ resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
- mimic-fn@4.0.0:
- resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
- engines: {node: '>=12'}
+ mdast-util-from-markdown@2.0.2:
+ resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
- mimic-function@5.0.1:
- resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
- engines: {node: '>=18'}
+ mdast-util-gfm-autolink-literal@2.0.1:
+ resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
- minimatch@10.0.3:
- resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
- engines: {node: 20 || >=22}
+ mdast-util-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
- minimatch@3.1.2:
- resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ mdast-util-gfm-strikethrough@2.0.0:
+ resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
- minimatch@9.0.5:
- resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
- engines: {node: '>=16 || 14 >=14.17'}
+ mdast-util-gfm-table@2.0.0:
+ resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
- minimist@1.2.8:
- resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ mdast-util-gfm-task-list-item@2.0.0:
+ resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
- minipass@7.1.2:
- resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
- engines: {node: '>=16 || 14 >=14.17'}
+ mdast-util-gfm@3.1.0:
+ resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
- mlly@1.7.4:
- resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
+ mdast-util-mdx-expression@2.0.1:
+ resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
- mri@1.2.0:
- resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
- engines: {node: '>=4'}
+ mdast-util-mdx-jsx@3.2.0:
+ resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
- ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ mdast-util-mdx@3.0.0:
+ resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
- msw@2.10.4:
- resolution: {integrity: sha512-6R1or/qyele7q3RyPwNuvc0IxO8L8/Aim6Sz5ncXEgcWUNxSKE+udriTOWHtpMwmfkLYlacA2y7TIx4cL5lgHA==}
- engines: {node: '>=18'}
- hasBin: true
- peerDependencies:
- typescript: '>= 4.8.x'
- peerDependenciesMeta:
- typescript:
- optional: true
+ mdast-util-mdxjs-esm@2.0.1:
+ resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
- mute-stream@2.0.0:
- resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
- engines: {node: ^18.17.0 || >=20.5.0}
+ mdast-util-phrasing@4.1.0:
+ resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
- mz@2.7.0:
- resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+ mdast-util-to-hast@13.2.1:
+ resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
- nanoid@3.3.11:
- resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
+ mdast-util-to-markdown@2.1.2:
+ resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
- natural-compare@1.4.0:
- resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ mdast-util-to-string@4.0.0:
+ resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
- npm-run-path@5.3.0:
- resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
- object-assign@4.1.1:
- resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
- engines: {node: '>=0.10.0'}
+ mermaid@11.12.1:
+ resolution: {integrity: sha512-UlIZrRariB11TY1RtTgUWp65tphtBv4CSq7vyS2ZZ2TgoMjs2nloq+wFqxiwcxlhHUvs7DPGgMjs2aeQxz5h9g==}
- object-inspect@1.13.4:
- resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
- engines: {node: '>= 0.4'}
+ micromark-core-commonmark@2.0.3:
+ resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
- object-keys@1.1.1:
- resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
- engines: {node: '>= 0.4'}
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
- object.assign@4.1.7:
- resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
- engines: {node: '>= 0.4'}
+ micromark-extension-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
- object.fromentries@2.0.8:
- resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
- engines: {node: '>= 0.4'}
+ micromark-extension-gfm-strikethrough@2.1.0:
+ resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
- object.groupby@1.0.3:
- resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
- engines: {node: '>= 0.4'}
+ micromark-extension-gfm-table@2.1.1:
+ resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
- object.values@1.2.1:
- resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
- engines: {node: '>= 0.4'}
+ micromark-extension-gfm-tagfilter@2.0.0:
+ resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
- onetime@6.0.0:
- resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
- engines: {node: '>=12'}
+ micromark-extension-gfm-task-list-item@2.1.0:
+ resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
+
+ micromark-extension-gfm@3.0.0:
+ resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
+
+ micromark-extension-mdx-expression@3.0.1:
+ resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==}
+
+ micromark-extension-mdx-jsx@3.0.2:
+ resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==}
+
+ micromark-extension-mdx-md@2.0.0:
+ resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
+
+ micromark-extension-mdxjs-esm@3.0.0:
+ resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
+
+ micromark-extension-mdxjs@3.0.0:
+ resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
+
+ micromark-factory-destination@2.0.1:
+ resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
+
+ micromark-factory-label@2.0.1:
+ resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
+
+ micromark-factory-mdx-expression@2.0.3:
+ resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==}
+
+ micromark-factory-space@2.0.1:
+ resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
+
+ micromark-factory-title@2.0.1:
+ resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
+
+ micromark-factory-whitespace@2.0.1:
+ resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
+
+ micromark-util-character@2.1.1:
+ resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
+
+ micromark-util-chunked@2.0.1:
+ resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
+
+ micromark-util-classify-character@2.0.1:
+ resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
+
+ micromark-util-combine-extensions@2.0.1:
+ resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
+
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
+
+ micromark-util-decode-string@2.0.1:
+ resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
+
+ micromark-util-encode@2.0.1:
+ resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
+
+ micromark-util-events-to-acorn@2.0.3:
+ resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==}
+
+ micromark-util-html-tag-name@2.0.1:
+ resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
+
+ micromark-util-normalize-identifier@2.0.1:
+ resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
+
+ micromark-util-resolve-all@2.0.1:
+ resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
+
+ micromark-util-sanitize-uri@2.0.1:
+ resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
+
+ micromark-util-subtokenize@2.1.0:
+ resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
+
+ micromark-util-symbol@2.0.1:
+ resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
+
+ micromark-util-types@2.0.2:
+ resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
+
+ micromark@4.0.2:
+ resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mimic-function@5.0.1:
+ resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
+ engines: {node: '>=18'}
+
+ minimatch@10.1.1:
+ resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
+ engines: {node: 20 || >=22}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ mlly@1.8.0:
+ resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
+
+ mri@1.2.0:
+ resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+ engines: {node: '>=4'}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ msw@2.12.3:
+ resolution: {integrity: sha512-/5rpGC0eK8LlFqsHaBmL19/PVKxu/CCt8pO1vzp9X6SDLsRDh/Ccudkf3Ur5lyaKxJz9ndAx+LaThdv0ySqB6A==}
+ engines: {node: '>=18'}
+ hasBin: true
+ peerDependencies:
+ typescript: '>= 4.8.x'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ mute-stream@2.0.0:
+ resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ mz@2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
+ nano-spawn@2.0.0:
+ resolution: {integrity: sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw==}
+ engines: {node: '>=20.17'}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ negotiator@1.0.0:
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
+
+ next-themes@0.4.6:
+ resolution: {integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
+ peerDependencies:
+ react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+ react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
+
+ next@16.0.1:
+ resolution: {integrity: sha512-e9RLSssZwd35p7/vOa+hoDFggUZIUbZhIUSLZuETCwrCVvxOs87NamoUzT+vbcNAL8Ld9GobBnWOA6SbV/arOw==}
+ 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
+
+ npm-to-yarn@3.0.1:
+ resolution: {integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ octokit@5.0.5:
+ resolution: {integrity: sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw==}
+ engines: {node: '>= 20'}
onetime@7.0.0:
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
engines: {node: '>=18'}
- optionator@0.9.4:
- resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
- engines: {node: '>= 0.8.0'}
+ oniguruma-parser@0.12.1:
+ resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
- os-tmpdir@1.0.2:
- resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
- engines: {node: '>=0.10.0'}
+ oniguruma-to-es@4.3.4:
+ resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==}
+
+ openapi-types@12.1.3:
+ resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==}
outdent@0.5.0:
resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==}
@@ -1801,10 +3325,6 @@ packages:
outvariant@1.4.3:
resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==}
- own-keys@1.0.1:
- resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
- engines: {node: '>= 0.4'}
-
p-filter@2.1.0:
resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==}
engines: {node: '>=8'}
@@ -1813,18 +3333,10 @@ packages:
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
engines: {node: '>=6'}
- p-limit@3.1.0:
- resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
- engines: {node: '>=10'}
-
p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
- p-locate@5.0.0:
- resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
- engines: {node: '>=10'}
-
p-map@2.1.0:
resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
engines: {node: '>=6'}
@@ -1839,9 +3351,17 @@ packages:
package-manager-detector@0.2.11:
resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==}
- parent-module@1.0.1:
- resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
- engines: {node: '>=6'}
+ package-manager-detector@1.5.0:
+ resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==}
+
+ parse-entities@4.0.2:
+ resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
+
+ path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+
+ path-data-parser@0.1.0:
+ resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==}
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
@@ -1851,24 +3371,16 @@ packages:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
- path-key@4.0.0:
- resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
- engines: {node: '>=12'}
-
- path-parse@1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-
- path-scurry@1.11.1:
- resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
- engines: {node: '>=16 || 14 >=14.18'}
-
- path-scurry@2.0.0:
- resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
+ path-scurry@2.0.1:
+ resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==}
engines: {node: 20 || >=22}
path-to-regexp@6.3.0:
resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==}
+ path-to-regexp@8.3.0:
+ resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
+
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -1876,10 +3388,6 @@ packages:
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
- pathval@2.0.1:
- resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
- engines: {node: '>= 14.16'}
-
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -1907,9 +3415,14 @@ packages:
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
- possible-typed-array-names@1.1.0:
- resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
- engines: {node: '>= 0.4'}
+ pkg-types@2.3.0:
+ resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
+
+ points-on-curve@0.2.0:
+ resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==}
+
+ points-on-path@0.2.1:
+ resolution: {integrity: sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==}
postcss-load-config@6.0.1:
resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
@@ -1929,43 +3442,76 @@ packages:
yaml:
optional: true
+ postcss-selector-parser@7.1.0:
+ resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
+ engines: {node: '>=4'}
+
+ postcss@8.4.31:
+ resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
+ engines: {node: ^10 || ^12 || >=14}
+
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
- prelude-ls@1.2.1:
- resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
- engines: {node: '>= 0.8.0'}
-
- prettier-linter-helpers@1.0.0:
- resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
- engines: {node: '>=6.0.0'}
-
prettier@2.8.8:
resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
engines: {node: '>=10.13.0'}
hasBin: true
- prettier@3.6.2:
- resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
- engines: {node: '>=14'}
- hasBin: true
+ property-information@7.1.0:
+ resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
- psl@1.15.0:
- resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==}
+ quansync@0.2.11:
+ resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
- punycode@2.3.1:
- resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
- engines: {node: '>=6'}
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- quansync@0.2.10:
- resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
+ react-dom@19.2.0:
+ resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==}
+ peerDependencies:
+ react: ^19.2.0
- querystringify@2.2.0:
- resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
+ react-medium-image-zoom@5.4.0:
+ resolution: {integrity: sha512-BsE+EnFVQzFIlyuuQrZ9iTwyKpKkqdFZV1ImEQN573QPqGrIUuNni7aF+sZwDcxlsuOMayCr6oO/PZR/yJnbRg==}
+ 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
- queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ react-remove-scroll-bar@2.3.8:
+ resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-remove-scroll@2.7.1:
+ resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-style-singleton@2.2.3:
+ resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react@19.2.0:
+ resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==}
+ engines: {node: '>=0.10.0'}
read-yaml-file@1.1.0:
resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==}
@@ -1975,38 +3521,65 @@ packages:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
engines: {node: '>= 14.18.0'}
- reflect.getprototypeof@1.0.10:
- resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
- engines: {node: '>= 0.4'}
+ recma-build-jsx@1.0.0:
+ resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
+
+ recma-jsx@1.0.1:
+ resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ recma-parse@1.0.0:
+ resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==}
+
+ recma-stringify@1.0.0:
+ resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==}
+
+ regex-recursion@6.0.2:
+ resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
+
+ regex-utilities@2.3.0:
+ resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
+
+ regex@6.0.1:
+ resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==}
+
+ rehype-recma@1.0.0:
+ resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
+
+ remark-gfm@4.0.1:
+ resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
- regexp.prototype.flags@1.5.4:
- resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
- engines: {node: '>= 0.4'}
+ remark-mdx@3.1.1:
+ resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==}
+
+ remark-parse@11.0.0:
+ resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
+
+ remark-rehype@11.1.2:
+ resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==}
+
+ remark-stringify@11.0.0:
+ resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
+
+ remark@15.0.1:
+ resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==}
require-directory@2.1.1:
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
engines: {node: '>=0.10.0'}
- requires-port@1.0.0:
- resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
-
- resolve-from@4.0.0:
- resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
- engines: {node: '>=4'}
-
resolve-from@5.0.0:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
engines: {node: '>=8'}
- resolve@1.22.10:
- resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
- engines: {node: '>= 0.4'}
- hasBin: true
-
restore-cursor@5.1.0:
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
engines: {node: '>=18'}
+ rettime@0.7.0:
+ resolution: {integrity: sha512-LPRKoHnLKd/r3dVxcwO7vhCW+orkOGj9ViueosEBK6ie89CijnfRlhaDhHq/3Hxu4CkWQtxwlBG0mzTQY6uQjw==}
+
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -2014,54 +3587,48 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
- rimraf@6.0.1:
- resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
+ rimraf@6.1.2:
+ resolution: {integrity: sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==}
engines: {node: 20 || >=22}
hasBin: true
- rollup@4.45.1:
- resolution: {integrity: sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==}
+ robust-predicates@3.0.2:
+ resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
+
+ rollup@4.53.3:
+ resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ roughjs@4.6.6:
+ resolution: {integrity: sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==}
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
- safe-array-concat@1.1.3:
- resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
- engines: {node: '>=0.4'}
-
- safe-push-apply@1.0.0:
- resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
- engines: {node: '>= 0.4'}
-
- safe-regex-test@1.1.0:
- resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
- engines: {node: '>= 0.4'}
+ rw@1.3.3:
+ resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
- semver@6.3.1:
- resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
- hasBin: true
+ sax@1.4.3:
+ resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==}
- semver@7.7.2:
- resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
- engines: {node: '>=10'}
- hasBin: true
+ scheduler@0.27.0:
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
- set-function-length@1.2.2:
- resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
- engines: {node: '>= 0.4'}
+ scroll-into-view-if-needed@3.1.0:
+ resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==}
- set-function-name@2.0.2:
- resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
- engines: {node: '>= 0.4'}
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
+ hasBin: true
- set-proto@1.0.0:
- resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
- engines: {node: '>= 0.4'}
+ sharp@0.34.5:
+ resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
@@ -2071,21 +3638,8 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
- side-channel-list@1.0.0:
- resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
- engines: {node: '>= 0.4'}
-
- side-channel-map@1.0.1:
- resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
- engines: {node: '>= 0.4'}
-
- side-channel-weakmap@1.0.2:
- resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
- engines: {node: '>= 0.4'}
-
- side-channel@1.1.0:
- resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
- engines: {node: '>= 0.4'}
+ shiki@3.15.0:
+ resolution: {integrity: sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw==}
siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
@@ -2098,21 +3652,20 @@ packages:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
- slice-ansi@5.0.0:
- resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
- engines: {node: '>=12'}
-
- slice-ansi@7.1.0:
- resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
+ slice-ansi@7.1.2:
+ resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==}
engines: {node: '>=18'}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
- source-map@0.8.0-beta.0:
- resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
- engines: {node: '>= 8'}
+ source-map@0.7.6:
+ resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
+ engines: {node: '>= 12'}
+
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
spawndamnit@3.0.1:
resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==}
@@ -2127,12 +3680,8 @@ packages:
resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
engines: {node: '>= 0.8'}
- std-env@3.9.0:
- resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
-
- stop-iteration-iterator@1.1.0:
- resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
- engines: {node: '>= 0.4'}
+ std-env@3.10.0:
+ resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
strict-event-emitter@0.5.1:
resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==}
@@ -2145,51 +3694,53 @@ packages:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
- string-width@5.1.2:
- resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
- engines: {node: '>=12'}
-
string-width@7.2.0:
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines: {node: '>=18'}
- string.prototype.trim@1.2.10:
- resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
- engines: {node: '>= 0.4'}
+ string-width@8.1.0:
+ resolution: {integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==}
+ engines: {node: '>=20'}
- string.prototype.trimend@1.0.9:
- resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
- engines: {node: '>= 0.4'}
-
- string.prototype.trimstart@1.0.8:
- resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
- engines: {node: '>= 0.4'}
+ stringify-entities@4.0.4:
+ resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
strip-ansi@6.0.1:
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
- strip-ansi@7.1.0:
- resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ strip-ansi@7.1.2:
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
engines: {node: '>=12'}
strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
- strip-final-newline@3.0.0:
- resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
- engines: {node: '>=12'}
+ style-to-js@1.1.21:
+ resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
- strip-json-comments@3.1.1:
- resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
- engines: {node: '>=8'}
+ style-to-object@1.0.14:
+ resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
+
+ 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
- strip-literal@3.0.0:
- resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
+ stylis@4.3.6:
+ resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
- sucrase@3.35.0:
- resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+ sucrase@3.35.1:
+ resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==}
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
@@ -2197,22 +3748,31 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
- supports-preserve-symlinks-flag@1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
+ swagger-parser@10.0.3:
+ resolution: {integrity: sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==}
+ engines: {node: '>=10'}
+
+ tagged-tag@1.0.0:
+ resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
+ engines: {node: '>=20'}
- synckit@0.11.8:
- resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==}
- engines: {node: ^14.18.0 || >=16.0.0}
+ tailwind-merge@3.4.0:
+ resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==}
+
+ tailwindcss@4.1.17:
+ resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==}
+
+ tailwindest@3.2.2:
+ resolution: {integrity: sha512-6Kk9ff2MUtiQ6OPUnamqHutEKrxnZBSC6vOhySaOka9Y06zI+JRSzi6EK8MFY/x7+26GTpXRAsW0niBzQZlMvA==}
+
+ tapable@2.3.0:
+ resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
+ engines: {node: '>=6'}
term-size@2.2.1:
resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
engines: {node: '>=8'}
- test-exclude@7.0.1:
- resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
- engines: {node: '>=18'}
-
thenify-all@1.6.0:
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines: {node: '>=0.8'}
@@ -2226,46 +3786,50 @@ packages:
tinyexec@0.3.2:
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
- tinyglobby@0.2.14:
- resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
- engines: {node: '>=12.0.0'}
+ tinyexec@1.0.2:
+ resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
+ engines: {node: '>=18'}
- tinypool@1.1.1:
- resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
- engines: {node: ^18.0.0 || >=20.0.0}
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
- tinyrainbow@2.0.0:
- resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
+ tinyrainbow@3.0.3:
+ resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==}
engines: {node: '>=14.0.0'}
- tinyspy@4.0.3:
- resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==}
- engines: {node: '>=14.0.0'}
+ tldts-core@7.0.19:
+ resolution: {integrity: sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==}
- tmp@0.0.33:
- resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
- engines: {node: '>=0.6.0'}
+ tldts@7.0.19:
+ resolution: {integrity: sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==}
+ hasBin: true
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
- tough-cookie@4.1.4:
- resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==}
- engines: {node: '>=6'}
+ toad-cache@3.7.0:
+ resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==}
+ engines: {node: '>=12'}
- tr46@1.0.1:
- resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
+ tough-cookie@6.0.0:
+ resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==}
+ engines: {node: '>=16'}
tree-kill@1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
- ts-api-utils@2.1.0:
- resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==}
- engines: {node: '>=18.12'}
- peerDependencies:
- typescript: '>=4.8.4'
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
+ trough@2.2.0:
+ resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
+
+ ts-dedent@2.2.0:
+ resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
+ engines: {node: '>=6.10'}
ts-expect@1.3.0:
resolution: {integrity: sha512-e4g0EJtAjk64xgnFPD6kTBUtpnMVzDrMb12N1YZV0VvSlhnVT3SGxiYTLdGy8Q5cYHOIC/FAHmZ10eGrAguicQ==}
@@ -2273,6 +3837,9 @@ packages:
ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+ ts-morph@27.0.2:
+ resolution: {integrity: sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w==}
+
tsconfck@3.1.6:
resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==}
engines: {node: ^18 || >=20}
@@ -2283,11 +3850,11 @@ packages:
typescript:
optional: true
- tsconfig-paths@3.15.0:
- resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
- tsup@8.5.0:
- resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==}
+ tsup@8.5.1:
+ resolution: {integrity: sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==}
engines: {node: '>=18'}
hasBin: true
peerDependencies:
@@ -2305,99 +3872,147 @@ packages:
typescript:
optional: true
- turbo-darwin-64@2.5.4:
- resolution: {integrity: sha512-ah6YnH2dErojhFooxEzmvsoZQTMImaruZhFPfMKPBq8sb+hALRdvBNLqfc8NWlZq576FkfRZ/MSi4SHvVFT9PQ==}
+ turbo-darwin-64@2.6.1:
+ resolution: {integrity: sha512-Dm0HwhyZF4J0uLqkhUyCVJvKM9Rw7M03v3J9A7drHDQW0qAbIGBrUijQ8g4Q9Cciw/BXRRd8Uzkc3oue+qn+ZQ==}
cpu: [x64]
os: [darwin]
- turbo-darwin-arm64@2.5.4:
- resolution: {integrity: sha512-2+Nx6LAyuXw2MdXb7pxqle3MYignLvS7OwtsP9SgtSBaMlnNlxl9BovzqdYAgkUW3AsYiQMJ/wBRb7d+xemM5A==}
+ turbo-darwin-arm64@2.6.1:
+ resolution: {integrity: sha512-U0PIPTPyxdLsrC3jN7jaJUwgzX5sVUBsKLO7+6AL+OASaa1NbT1pPdiZoTkblBAALLP76FM0LlnsVQOnmjYhyw==}
cpu: [arm64]
os: [darwin]
- turbo-linux-64@2.5.4:
- resolution: {integrity: sha512-5May2kjWbc8w4XxswGAl74GZ5eM4Gr6IiroqdLhXeXyfvWEdm2mFYCSWOzz0/z5cAgqyGidF1jt1qzUR8hTmOA==}
+ turbo-linux-64@2.6.1:
+ resolution: {integrity: sha512-eM1uLWgzv89bxlK29qwQEr9xYWBhmO/EGiH22UGfq+uXr+QW1OvNKKMogSN65Ry8lElMH4LZh0aX2DEc7eC0Mw==}
cpu: [x64]
os: [linux]
- turbo-linux-arm64@2.5.4:
- resolution: {integrity: sha512-/2yqFaS3TbfxV3P5yG2JUI79P7OUQKOUvAnx4MV9Bdz6jqHsHwc9WZPpO4QseQm+NvmgY6ICORnoVPODxGUiJg==}
+ turbo-linux-arm64@2.6.1:
+ resolution: {integrity: sha512-MFFh7AxAQAycXKuZDrbeutfWM5Ep0CEZ9u7zs4Hn2FvOViTCzIfEhmuJou3/a5+q5VX1zTxQrKGy+4Lf5cdpsA==}
cpu: [arm64]
os: [linux]
- turbo-windows-64@2.5.4:
- resolution: {integrity: sha512-EQUO4SmaCDhO6zYohxIjJpOKRN3wlfU7jMAj3CgcyTPvQR/UFLEKAYHqJOnJtymbQmiiM/ihX6c6W6Uq0yC7mA==}
+ turbo-windows-64@2.6.1:
+ resolution: {integrity: sha512-buq7/VAN7KOjMYi4tSZT5m+jpqyhbRU2EUTTvp6V0Ii8dAkY2tAAjQN1q5q2ByflYWKecbQNTqxmVploE0LVwQ==}
cpu: [x64]
os: [win32]
- turbo-windows-arm64@2.5.4:
- resolution: {integrity: sha512-oQ8RrK1VS8lrxkLriotFq+PiF7iiGgkZtfLKF4DDKsmdbPo0O9R2mQxm7jHLuXraRCuIQDWMIw6dpcr7Iykf4A==}
+ turbo-windows-arm64@2.6.1:
+ resolution: {integrity: sha512-7w+AD5vJp3R+FB0YOj1YJcNcOOvBior7bcHTodqp90S3x3bLgpr7tE6xOea1e8JkP7GK6ciKVUpQvV7psiwU5Q==}
cpu: [arm64]
os: [win32]
- turbo@2.5.4:
- resolution: {integrity: sha512-kc8ZibdRcuWUG1pbYSBFWqmIjynlD8Lp7IB6U3vIzvOv9VG+6Sp8bzyeBWE3Oi8XV5KsQrznyRTBPvrf99E4mA==}
+ turbo@2.6.1:
+ resolution: {integrity: sha512-qBwXXuDT3rA53kbNafGbT5r++BrhRgx3sAo0cHoDAeG9g1ItTmUMgltz3Hy7Hazy1ODqNpR+C7QwqL6DYB52yA==}
hasBin: true
- type-check@0.4.0:
- resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
- engines: {node: '>= 0.8.0'}
-
- type-fest@0.21.3:
- resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
- engines: {node: '>=10'}
-
- type-fest@4.41.0:
- resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
- engines: {node: '>=16'}
-
- typed-array-buffer@1.0.3:
- resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
- engines: {node: '>= 0.4'}
+ tw-animate-css@1.4.0:
+ resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==}
- typed-array-byte-length@1.0.3:
- resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
- engines: {node: '>= 0.4'}
+ twoslash-protocol@0.3.4:
+ resolution: {integrity: sha512-HHd7lzZNLUvjPzG/IE6js502gEzLC1x7HaO1up/f72d8G8ScWAs9Yfa97igelQRDl5h9tGcdFsRp+lNVre1EeQ==}
- typed-array-byte-offset@1.0.4:
- resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
- engines: {node: '>= 0.4'}
+ twoslash@0.3.4:
+ resolution: {integrity: sha512-RtJURJlGRxrkJmTcZMjpr7jdYly1rfgpujJr1sBM9ch7SKVht/SjFk23IOAyvwT1NLCk+SJiMrvW4rIAUM2Wug==}
+ peerDependencies:
+ typescript: ^5.5.0
- typed-array-length@1.0.7:
- resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
- engines: {node: '>= 0.4'}
+ type-fest@5.2.0:
+ resolution: {integrity: sha512-xxCJm+Bckc6kQBknN7i9fnP/xobQRsRQxR01CztFkp/h++yfVxUUcmMgfR2HttJx/dpWjS9ubVuyspJv24Q9DA==}
+ engines: {node: '>=20'}
- typescript@5.8.3:
- resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
hasBin: true
ufo@1.6.1:
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
- unbox-primitive@1.1.0:
- resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
- engines: {node: '>= 0.4'}
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
+
+ unified@11.0.5:
+ resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
+
+ unist-util-is@6.0.1:
+ resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
+
+ unist-util-position-from-estree@2.0.0:
+ resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
+
+ unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+
+ unist-util-remove-position@5.0.0:
+ resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
+
+ unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+
+ unist-util-visit-parents@6.0.2:
+ resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
+
+ unist-util-visit@5.0.0:
+ resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
+
+ universal-github-app-jwt@2.2.2:
+ resolution: {integrity: sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw==}
+
+ universal-user-agent@7.0.3:
+ resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==}
universalify@0.1.2:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
- universalify@0.2.0:
- resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
- engines: {node: '>= 4.0.0'}
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ until-async@3.0.2:
+ resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==}
+
+ use-callback-ref@1.3.3:
+ resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
- uri-js@4.4.1:
- resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ use-sidecar@1.1.3:
+ resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@types/react': '*'
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
- url-parse@1.5.10:
- resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- vite-node@3.2.4:
- resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
- engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ uuid@11.1.0:
+ resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
hasBin: true
+ validator@13.15.23:
+ resolution: {integrity: sha512-4yoz1kEWqUjzi5zsPbAS/903QXSYp0UOtHsPpp7p9rHAw/W+dkInskAE386Fat3oKRROwO98d9ZB0G4cObgUyw==}
+ engines: {node: '>= 0.10'}
+
+ vfile-message@4.0.3:
+ resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
+
+ vfile@6.0.3:
+ resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+
vite-tsconfig-paths@5.1.4:
resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==}
peerDependencies:
@@ -2406,8 +4021,8 @@ packages:
vite:
optional: true
- vite@7.0.4:
- resolution: {integrity: sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==}
+ vite@7.2.4:
+ resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -2446,26 +4061,35 @@ packages:
yaml:
optional: true
- vitest@3.2.4:
- resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==}
- engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ vitest@4.0.13:
+ resolution: {integrity: sha512-QSD4I0fN6uZQfftryIXuqvqgBxTvJ3ZNkF6RWECd82YGAYAfhcppBLFXzXJHQAAhVFyYEuFTrq6h0hQqjB7jIQ==}
+ engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
+ '@opentelemetry/api': ^1.9.0
'@types/debug': ^4.1.12
- '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
- '@vitest/browser': 3.2.4
- '@vitest/ui': 3.2.4
+ '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
+ '@vitest/browser-playwright': 4.0.13
+ '@vitest/browser-preview': 4.0.13
+ '@vitest/browser-webdriverio': 4.0.13
+ '@vitest/ui': 4.0.13
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
'@edge-runtime/vm':
optional: true
+ '@opentelemetry/api':
+ optional: true
'@types/debug':
optional: true
'@types/node':
optional: true
- '@vitest/browser':
+ '@vitest/browser-playwright':
+ optional: true
+ '@vitest/browser-preview':
+ optional: true
+ '@vitest/browser-webdriverio':
optional: true
'@vitest/ui':
optional: true
@@ -2474,27 +4098,25 @@ packages:
jsdom:
optional: true
- webidl-conversions@4.0.2:
- resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
+ vscode-jsonrpc@8.2.0:
+ resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==}
+ engines: {node: '>=14.0.0'}
- whatwg-url@7.1.0:
- resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
+ vscode-languageserver-protocol@3.17.5:
+ resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==}
- which-boxed-primitive@1.1.1:
- resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
- engines: {node: '>= 0.4'}
+ vscode-languageserver-textdocument@1.0.12:
+ resolution: {integrity: sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==}
- which-builtin-type@1.2.1:
- resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
- engines: {node: '>= 0.4'}
+ vscode-languageserver-types@3.17.5:
+ resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==}
- which-collection@1.0.2:
- resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
- engines: {node: '>= 0.4'}
+ vscode-languageserver@9.0.1:
+ resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==}
+ hasBin: true
- which-typed-array@1.1.19:
- resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==}
- engines: {node: '>= 0.4'}
+ vscode-uri@3.0.8:
+ resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
which@2.0.2:
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
@@ -2506,10 +4128,6 @@ packages:
engines: {node: '>=8'}
hasBin: true
- word-wrap@1.2.5:
- resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
- engines: {node: '>=0.10.0'}
-
wrap-ansi@6.2.0:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
@@ -2518,20 +4136,20 @@ packages:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
- wrap-ansi@8.1.0:
- resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
- engines: {node: '>=12'}
-
- wrap-ansi@9.0.0:
- resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+ wrap-ansi@9.0.2:
+ resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
engines: {node: '>=18'}
+ xml-js@1.6.11:
+ resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==}
+ hasBin: true
+
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
- yaml@2.8.0:
- resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==}
+ yaml@2.8.1:
+ resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==}
engines: {node: '>= 14.6'}
hasBin: true
@@ -2543,52 +4161,108 @@ packages:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
- yocto-queue@0.1.0:
- resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
- engines: {node: '>=10'}
-
- yoctocolors-cjs@2.1.2:
- resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
+ yoctocolors-cjs@2.1.3:
+ resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
engines: {node: '>=18'}
-snapshots:
+ z-schema@5.0.5:
+ resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==}
+ engines: {node: '>=8.0.0'}
+ hasBin: true
+
+ zod@4.1.13:
+ resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==}
+
+ zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+
+snapshots:
+
+ '@alloc/quick-lru@5.2.0': {}
+
+ '@antfu/install-pkg@1.1.0':
+ dependencies:
+ package-manager-detector: 1.5.0
+ tinyexec: 1.0.2
- '@ampproject/remapping@2.3.0':
+ '@antfu/utils@9.3.0': {}
+
+ '@apidevtools/json-schema-ref-parser@9.1.2':
+ dependencies:
+ '@jsdevtools/ono': 7.1.3
+ '@types/json-schema': 7.0.15
+ call-me-maybe: 1.0.2
+ js-yaml: 4.1.1
+
+ '@apidevtools/openapi-schemas@2.1.0': {}
+
+ '@apidevtools/swagger-methods@3.0.2': {}
+
+ '@apidevtools/swagger-parser@10.0.3(openapi-types@12.1.3)':
dependencies:
- '@jridgewell/gen-mapping': 0.3.12
- '@jridgewell/trace-mapping': 0.3.29
+ '@apidevtools/json-schema-ref-parser': 9.1.2
+ '@apidevtools/openapi-schemas': 2.1.0
+ '@apidevtools/swagger-methods': 3.0.2
+ '@jsdevtools/ono': 7.1.3
+ call-me-maybe: 1.0.2
+ openapi-types: 12.1.3
+ z-schema: 5.0.5
'@babel/helper-string-parser@7.27.1': {}
- '@babel/helper-validator-identifier@7.27.1': {}
+ '@babel/helper-validator-identifier@7.28.5': {}
- '@babel/parser@7.28.0':
+ '@babel/parser@7.28.5':
dependencies:
- '@babel/types': 7.28.1
+ '@babel/types': 7.28.5
- '@babel/runtime@7.27.6': {}
+ '@babel/runtime@7.28.4': {}
- '@babel/types@7.28.1':
+ '@babel/types@7.28.5':
dependencies:
'@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
'@bcoe/v8-coverage@1.0.2': {}
- '@bundled-es-modules/cookie@2.0.1':
- dependencies:
- cookie: 0.7.2
+ '@biomejs/biome@2.3.7':
+ optionalDependencies:
+ '@biomejs/cli-darwin-arm64': 2.3.7
+ '@biomejs/cli-darwin-x64': 2.3.7
+ '@biomejs/cli-linux-arm64': 2.3.7
+ '@biomejs/cli-linux-arm64-musl': 2.3.7
+ '@biomejs/cli-linux-x64': 2.3.7
+ '@biomejs/cli-linux-x64-musl': 2.3.7
+ '@biomejs/cli-win32-arm64': 2.3.7
+ '@biomejs/cli-win32-x64': 2.3.7
+
+ '@biomejs/cli-darwin-arm64@2.3.7':
+ optional: true
- '@bundled-es-modules/statuses@1.0.1':
- dependencies:
- statuses: 2.0.2
+ '@biomejs/cli-darwin-x64@2.3.7':
+ optional: true
- '@bundled-es-modules/tough-cookie@0.1.6':
- dependencies:
- '@types/tough-cookie': 4.0.5
- tough-cookie: 4.1.4
+ '@biomejs/cli-linux-arm64-musl@2.3.7':
+ optional: true
+
+ '@biomejs/cli-linux-arm64@2.3.7':
+ optional: true
+
+ '@biomejs/cli-linux-x64-musl@2.3.7':
+ optional: true
+
+ '@biomejs/cli-linux-x64@2.3.7':
+ optional: true
+
+ '@biomejs/cli-win32-arm64@2.3.7':
+ optional: true
+
+ '@biomejs/cli-win32-x64@2.3.7':
+ optional: true
- '@changesets/apply-release-plan@7.0.12':
+ '@braintree/sanitize-url@7.1.1': {}
+
+ '@changesets/apply-release-plan@7.0.13':
dependencies:
'@changesets/config': 3.1.1
'@changesets/get-version-range-type': 0.4.0
@@ -2602,7 +4276,7 @@ snapshots:
outdent: 0.5.0
prettier: 2.8.8
resolve-from: 5.0.0
- semver: 7.7.2
+ semver: 7.7.3
'@changesets/assemble-release-plan@6.0.9':
dependencies:
@@ -2611,15 +4285,15 @@ snapshots:
'@changesets/should-skip-package': 0.1.2
'@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
- semver: 7.7.2
+ semver: 7.7.3
'@changesets/changelog-git@0.2.1':
dependencies:
'@changesets/types': 6.1.0
- '@changesets/cli@2.29.5':
+ '@changesets/cli@2.29.7(@types/node@24.10.1)':
dependencies:
- '@changesets/apply-release-plan': 7.0.12
+ '@changesets/apply-release-plan': 7.0.13
'@changesets/assemble-release-plan': 6.0.9
'@changesets/changelog-git': 0.2.1
'@changesets/config': 3.1.1
@@ -2633,20 +4307,22 @@ snapshots:
'@changesets/should-skip-package': 0.1.2
'@changesets/types': 6.1.0
'@changesets/write': 0.4.0
+ '@inquirer/external-editor': 1.0.3(@types/node@24.10.1)
'@manypkg/get-packages': 1.1.3
ansi-colors: 4.1.3
ci-info: 3.9.0
enquirer: 2.4.1
- external-editor: 3.1.0
fs-extra: 7.0.1
mri: 1.2.0
p-limit: 2.3.0
package-manager-detector: 0.2.11
picocolors: 1.1.1
resolve-from: 5.0.0
- semver: 7.7.2
+ semver: 7.7.3
spawndamnit: 3.0.1
term-size: 2.2.1
+ transitivePeerDependencies:
+ - '@types/node'
'@changesets/config@3.1.1':
dependencies:
@@ -2667,7 +4343,7 @@ snapshots:
'@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
picocolors: 1.1.1
- semver: 7.7.2
+ semver: 7.7.3
'@changesets/get-release-plan@4.0.13':
dependencies:
@@ -2695,7 +4371,7 @@ snapshots:
'@changesets/parse@0.4.1':
dependencies:
'@changesets/types': 6.1.0
- js-yaml: 3.14.1
+ js-yaml: 3.14.2
'@changesets/pre@2.0.2':
dependencies:
@@ -2727,484 +4403,1515 @@ snapshots:
dependencies:
'@changesets/types': 6.1.0
fs-extra: 7.0.1
- human-id: 4.1.1
+ human-id: 4.1.2
prettier: 2.8.8
- '@esbuild/aix-ppc64@0.25.6':
+ '@chevrotain/cst-dts-gen@11.0.3':
+ dependencies:
+ '@chevrotain/gast': 11.0.3
+ '@chevrotain/types': 11.0.3
+ lodash-es: 4.17.21
+
+ '@chevrotain/gast@11.0.3':
+ dependencies:
+ '@chevrotain/types': 11.0.3
+ lodash-es: 4.17.21
+
+ '@chevrotain/regexp-to-ast@11.0.3': {}
+
+ '@chevrotain/types@11.0.3': {}
+
+ '@chevrotain/utils@11.0.3': {}
+
+ '@emnapi/runtime@1.7.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@esbuild/aix-ppc64@0.25.12':
+ optional: true
+
+ '@esbuild/aix-ppc64@0.27.0':
+ optional: true
+
+ '@esbuild/android-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/android-arm64@0.27.0':
+ optional: true
+
+ '@esbuild/android-arm@0.25.12':
+ optional: true
+
+ '@esbuild/android-arm@0.27.0':
+ optional: true
+
+ '@esbuild/android-x64@0.25.12':
+ optional: true
+
+ '@esbuild/android-x64@0.27.0':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.27.0':
+ optional: true
+
+ '@esbuild/darwin-x64@0.25.12':
+ optional: true
+
+ '@esbuild/darwin-x64@0.27.0':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.27.0':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.25.12':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.27.0':
+ optional: true
+
+ '@esbuild/linux-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-arm64@0.27.0':
+ optional: true
+
+ '@esbuild/linux-arm@0.25.12':
+ optional: true
+
+ '@esbuild/linux-arm@0.27.0':
+ optional: true
+
+ '@esbuild/linux-ia32@0.25.12':
+ optional: true
+
+ '@esbuild/linux-ia32@0.27.0':
+ optional: true
+
+ '@esbuild/linux-loong64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-loong64@0.27.0':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.25.12':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.27.0':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.0':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.0':
+ optional: true
+
+ '@esbuild/linux-s390x@0.25.12':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.0':
+ optional: true
+
+ '@esbuild/linux-x64@0.25.12':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.0':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.0':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.25.12':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.0':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.0':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.25.12':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.0':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.0':
+ optional: true
+
+ '@esbuild/sunos-x64@0.25.12':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.0':
+ optional: true
+
+ '@esbuild/win32-arm64@0.25.12':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.0':
+ optional: true
+
+ '@esbuild/win32-ia32@0.25.12':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.0':
+ optional: true
+
+ '@esbuild/win32-x64@0.25.12':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.0':
+ optional: true
+
+ '@floating-ui/core@1.7.3':
+ dependencies:
+ '@floating-ui/utils': 0.2.10
+
+ '@floating-ui/dom@1.7.4':
+ dependencies:
+ '@floating-ui/core': 1.7.3
+ '@floating-ui/utils': 0.2.10
+
+ '@floating-ui/react-dom@2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@floating-ui/dom': 1.7.4
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+
+ '@floating-ui/utils@0.2.10': {}
+
+ '@formatjs/intl-localematcher@0.6.2':
+ dependencies:
+ tslib: 2.8.1
+
+ '@freestylejs/ani-core@1.2.0': {}
+
+ '@freestylejs/ani-react@1.1.0(react@19.2.0)':
+ dependencies:
+ '@freestylejs/ani-core': 1.2.0
+ react: 19.2.0
+
+ '@freestylejs/config@1.2.5(@biomejs/biome@2.3.7)(typescript@5.9.3)':
+ dependencies:
+ '@biomejs/biome': 2.3.7
+ typescript: 5.9.3
+
+ '@iconify/types@2.0.0': {}
+
+ '@iconify/utils@3.0.2':
+ dependencies:
+ '@antfu/install-pkg': 1.1.0
+ '@antfu/utils': 9.3.0
+ '@iconify/types': 2.0.0
+ debug: 4.4.3
+ globals: 15.15.0
+ kolorist: 1.8.0
+ local-pkg: 1.1.2
+ mlly: 1.8.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@img/colour@1.0.0':
+ optional: true
+
+ '@img/sharp-darwin-arm64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.2.4
+ optional: true
+
+ '@img/sharp-darwin-x64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.2.4
+ optional: true
+
+ '@img/sharp-libvips-darwin-arm64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-darwin-x64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-ppc64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-riscv64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-s390x@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-x64@1.2.4':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.2.4':
optional: true
- '@esbuild/android-arm64@0.25.6':
- optional: true
+ '@img/sharp-libvips-linuxmusl-x64@1.2.4':
+ optional: true
+
+ '@img/sharp-linux-arm64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-arm@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-ppc64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-ppc64': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-riscv64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-riscv64': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-s390x@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.2.4
+ optional: true
+
+ '@img/sharp-linux-x64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.2.4
+ optional: true
+
+ '@img/sharp-linuxmusl-arm64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
+ optional: true
+
+ '@img/sharp-linuxmusl-x64@0.34.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.4
+ optional: true
+
+ '@img/sharp-wasm32@0.34.5':
+ dependencies:
+ '@emnapi/runtime': 1.7.1
+ optional: true
+
+ '@img/sharp-win32-arm64@0.34.5':
+ optional: true
+
+ '@img/sharp-win32-ia32@0.34.5':
+ optional: true
+
+ '@img/sharp-win32-x64@0.34.5':
+ optional: true
+
+ '@inquirer/ansi@1.0.2': {}
+
+ '@inquirer/confirm@5.1.21(@types/node@24.10.1)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@24.10.1)
+ '@inquirer/type': 3.0.10(@types/node@24.10.1)
+ optionalDependencies:
+ '@types/node': 24.10.1
+
+ '@inquirer/core@10.3.2(@types/node@24.10.1)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@24.10.1)
+ cli-width: 4.1.0
+ mute-stream: 2.0.0
+ signal-exit: 4.1.0
+ wrap-ansi: 6.2.0
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 24.10.1
+
+ '@inquirer/external-editor@1.0.3(@types/node@24.10.1)':
+ dependencies:
+ chardet: 2.1.1
+ iconv-lite: 0.7.0
+ optionalDependencies:
+ '@types/node': 24.10.1
+
+ '@inquirer/figures@1.0.15': {}
+
+ '@inquirer/type@3.0.10(@types/node@24.10.1)':
+ optionalDependencies:
+ '@types/node': 24.10.1
+
+ '@isaacs/balanced-match@4.0.1': {}
+
+ '@isaacs/brace-expansion@5.0.0':
+ dependencies:
+ '@isaacs/balanced-match': 4.0.1
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@jsdevtools/ono@7.1.3': {}
+
+ '@manypkg/find-root@1.1.0':
+ dependencies:
+ '@babel/runtime': 7.28.4
+ '@types/node': 12.20.55
+ find-up: 4.1.0
+ fs-extra: 8.1.0
+
+ '@manypkg/get-packages@1.1.3':
+ dependencies:
+ '@babel/runtime': 7.28.4
+ '@changesets/types': 4.1.0
+ '@manypkg/find-root': 1.1.0
+ fs-extra: 8.1.0
+ globby: 11.1.0
+ read-yaml-file: 1.1.0
+
+ '@mdx-js/mdx@3.1.1':
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdx': 2.0.13
+ acorn: 8.15.0
+ collapse-white-space: 2.1.0
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-util-scope: 1.0.0
+ estree-walker: 3.0.3
+ hast-util-to-jsx-runtime: 2.3.6
+ markdown-extensions: 2.0.0
+ recma-build-jsx: 1.0.0
+ recma-jsx: 1.0.1(acorn@8.15.0)
+ recma-stringify: 1.0.0
+ rehype-recma: 1.0.0
+ remark-mdx: 3.1.1
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.2
+ source-map: 0.7.6
+ unified: 11.0.5
+ unist-util-position-from-estree: 2.0.0
+ unist-util-stringify-position: 4.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@mermaid-js/parser@0.6.3':
+ dependencies:
+ langium: 3.3.1
+
+ '@mswjs/interceptors@0.40.0':
+ dependencies:
+ '@open-draft/deferred-promise': 2.2.0
+ '@open-draft/logger': 0.3.0
+ '@open-draft/until': 2.1.0
+ is-node-process: 1.2.0
+ outvariant: 1.4.3
+ strict-event-emitter: 0.5.1
+
+ '@next/env@16.0.1': {}
+
+ '@next/swc-darwin-arm64@16.0.1':
+ optional: true
+
+ '@next/swc-darwin-x64@16.0.1':
+ optional: true
+
+ '@next/swc-linux-arm64-gnu@16.0.1':
+ optional: true
+
+ '@next/swc-linux-arm64-musl@16.0.1':
+ optional: true
+
+ '@next/swc-linux-x64-gnu@16.0.1':
+ optional: true
+
+ '@next/swc-linux-x64-musl@16.0.1':
+ optional: true
+
+ '@next/swc-win32-arm64-msvc@16.0.1':
+ optional: true
+
+ '@next/swc-win32-x64-msvc@16.0.1':
+ optional: true
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.19.1
+
+ '@octokit/app@16.1.2':
+ dependencies:
+ '@octokit/auth-app': 8.1.2
+ '@octokit/auth-unauthenticated': 7.0.3
+ '@octokit/core': 7.0.6
+ '@octokit/oauth-app': 8.0.3
+ '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6)
+ '@octokit/types': 16.0.0
+ '@octokit/webhooks': 14.1.3
+
+ '@octokit/auth-app@8.1.2':
+ dependencies:
+ '@octokit/auth-oauth-app': 9.0.3
+ '@octokit/auth-oauth-user': 6.0.2
+ '@octokit/request': 10.0.7
+ '@octokit/request-error': 7.1.0
+ '@octokit/types': 16.0.0
+ toad-cache: 3.7.0
+ universal-github-app-jwt: 2.2.2
+ universal-user-agent: 7.0.3
+
+ '@octokit/auth-oauth-app@9.0.3':
+ dependencies:
+ '@octokit/auth-oauth-device': 8.0.3
+ '@octokit/auth-oauth-user': 6.0.2
+ '@octokit/request': 10.0.7
+ '@octokit/types': 16.0.0
+ universal-user-agent: 7.0.3
+
+ '@octokit/auth-oauth-device@8.0.3':
+ dependencies:
+ '@octokit/oauth-methods': 6.0.2
+ '@octokit/request': 10.0.7
+ '@octokit/types': 16.0.0
+ universal-user-agent: 7.0.3
+
+ '@octokit/auth-oauth-user@6.0.2':
+ dependencies:
+ '@octokit/auth-oauth-device': 8.0.3
+ '@octokit/oauth-methods': 6.0.2
+ '@octokit/request': 10.0.7
+ '@octokit/types': 16.0.0
+ universal-user-agent: 7.0.3
+
+ '@octokit/auth-token@6.0.0': {}
+
+ '@octokit/auth-unauthenticated@7.0.3':
+ dependencies:
+ '@octokit/request-error': 7.1.0
+ '@octokit/types': 16.0.0
+
+ '@octokit/core@7.0.6':
+ dependencies:
+ '@octokit/auth-token': 6.0.0
+ '@octokit/graphql': 9.0.3
+ '@octokit/request': 10.0.7
+ '@octokit/request-error': 7.1.0
+ '@octokit/types': 16.0.0
+ before-after-hook: 4.0.0
+ universal-user-agent: 7.0.3
+
+ '@octokit/endpoint@11.0.2':
+ dependencies:
+ '@octokit/types': 16.0.0
+ universal-user-agent: 7.0.3
+
+ '@octokit/graphql@9.0.3':
+ dependencies:
+ '@octokit/request': 10.0.7
+ '@octokit/types': 16.0.0
+ universal-user-agent: 7.0.3
+
+ '@octokit/oauth-app@8.0.3':
+ dependencies:
+ '@octokit/auth-oauth-app': 9.0.3
+ '@octokit/auth-oauth-user': 6.0.2
+ '@octokit/auth-unauthenticated': 7.0.3
+ '@octokit/core': 7.0.6
+ '@octokit/oauth-authorization-url': 8.0.0
+ '@octokit/oauth-methods': 6.0.2
+ '@types/aws-lambda': 8.10.159
+ universal-user-agent: 7.0.3
+
+ '@octokit/oauth-authorization-url@8.0.0': {}
+
+ '@octokit/oauth-methods@6.0.2':
+ dependencies:
+ '@octokit/oauth-authorization-url': 8.0.0
+ '@octokit/request': 10.0.7
+ '@octokit/request-error': 7.1.0
+ '@octokit/types': 16.0.0
+
+ '@octokit/openapi-types@27.0.0': {}
+
+ '@octokit/openapi-webhooks-types@12.0.3': {}
+
+ '@octokit/plugin-paginate-graphql@6.0.0(@octokit/core@7.0.6)':
+ dependencies:
+ '@octokit/core': 7.0.6
+
+ '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)':
+ dependencies:
+ '@octokit/core': 7.0.6
+ '@octokit/types': 16.0.0
+
+ '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.6)':
+ dependencies:
+ '@octokit/core': 7.0.6
+ '@octokit/types': 16.0.0
+
+ '@octokit/plugin-retry@8.0.3(@octokit/core@7.0.6)':
+ dependencies:
+ '@octokit/core': 7.0.6
+ '@octokit/request-error': 7.1.0
+ '@octokit/types': 16.0.0
+ bottleneck: 2.19.5
+
+ '@octokit/plugin-throttling@11.0.3(@octokit/core@7.0.6)':
+ dependencies:
+ '@octokit/core': 7.0.6
+ '@octokit/types': 16.0.0
+ bottleneck: 2.19.5
+
+ '@octokit/request-error@7.1.0':
+ dependencies:
+ '@octokit/types': 16.0.0
+
+ '@octokit/request@10.0.7':
+ dependencies:
+ '@octokit/endpoint': 11.0.2
+ '@octokit/request-error': 7.1.0
+ '@octokit/types': 16.0.0
+ fast-content-type-parse: 3.0.0
+ universal-user-agent: 7.0.3
+
+ '@octokit/types@16.0.0':
+ dependencies:
+ '@octokit/openapi-types': 27.0.0
+
+ '@octokit/webhooks-methods@6.0.0': {}
+
+ '@octokit/webhooks@14.1.3':
+ dependencies:
+ '@octokit/openapi-webhooks-types': 12.0.3
+ '@octokit/request-error': 7.1.0
+ '@octokit/webhooks-methods': 6.0.0
+
+ '@open-draft/deferred-promise@2.2.0': {}
+
+ '@open-draft/logger@0.3.0':
+ dependencies:
+ is-node-process: 1.2.0
+ outvariant: 1.4.3
+
+ '@open-draft/until@2.1.0': {}
+
+ '@orama/orama@3.1.16': {}
+
+ '@radix-ui/number@1.1.1': {}
+
+ '@radix-ui/primitive@1.1.3': {}
+
+ '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-context@1.1.2(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.0)
+ aria-hidden: 1.2.6
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-remove-scroll: 2.7.1(@types/react@19.2.7)(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-direction@1.1.1(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-id@1.1.1(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.0)
+ aria-hidden: 1.2.6
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-remove-scroll: 2.7.1(@types/react@19.2.7)(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/rect': 1.1.1
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/number': 1.1.1
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-slot@1.2.3(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-slot@1.2.4(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ '@radix-ui/rect': 1.1.1
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-use-size@1.1.1(@types/react@19.2.7)(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ react: 19.2.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ '@types/react-dom': 19.2.3(@types/react@19.2.7)
+
+ '@radix-ui/rect@1.1.1': {}
+
+ '@rollup/rollup-android-arm-eabi@4.53.3':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.53.3':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.53.3':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.53.3':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.53.3':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.53.3':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.53.3':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.53.3':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.53.3':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.53.3':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.53.3':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.53.3':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.53.3':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.53.3':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.53.3':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.53.3':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.53.3':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.53.3':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.53.3':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.53.3':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.53.3':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.53.3':
+ optional: true
+
+ '@shikijs/core@3.15.0':
+ dependencies:
+ '@shikijs/types': 3.15.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.5
+
+ '@shikijs/engine-javascript@3.15.0':
+ dependencies:
+ '@shikijs/types': 3.15.0
+ '@shikijs/vscode-textmate': 10.0.2
+ oniguruma-to-es: 4.3.4
+
+ '@shikijs/engine-oniguruma@3.15.0':
+ dependencies:
+ '@shikijs/types': 3.15.0
+ '@shikijs/vscode-textmate': 10.0.2
+
+ '@shikijs/langs@3.15.0':
+ dependencies:
+ '@shikijs/types': 3.15.0
+
+ '@shikijs/rehype@3.15.0':
+ dependencies:
+ '@shikijs/types': 3.15.0
+ '@types/hast': 3.0.4
+ hast-util-to-string: 3.0.1
+ shiki: 3.15.0
+ unified: 11.0.5
+ unist-util-visit: 5.0.0
+
+ '@shikijs/themes@3.15.0':
+ dependencies:
+ '@shikijs/types': 3.15.0
+
+ '@shikijs/transformers@3.15.0':
+ dependencies:
+ '@shikijs/core': 3.15.0
+ '@shikijs/types': 3.15.0
+
+ '@shikijs/twoslash@3.15.0(typescript@5.9.3)':
+ dependencies:
+ '@shikijs/core': 3.15.0
+ '@shikijs/types': 3.15.0
+ twoslash: 0.3.4(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@shikijs/types@3.15.0':
+ dependencies:
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+
+ '@shikijs/vscode-textmate@10.0.2': {}
- '@esbuild/android-arm@0.25.6':
- optional: true
+ '@standard-schema/spec@1.0.0': {}
- '@esbuild/android-x64@0.25.6':
- optional: true
+ '@swc/helpers@0.5.15':
+ dependencies:
+ tslib: 2.8.1
- '@esbuild/darwin-arm64@0.25.6':
- optional: true
+ '@tailwindcss/node@4.1.17':
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.18.3
+ jiti: 2.6.1
+ lightningcss: 1.30.2
+ magic-string: 0.30.21
+ source-map-js: 1.2.1
+ tailwindcss: 4.1.17
- '@esbuild/darwin-x64@0.25.6':
+ '@tailwindcss/oxide-android-arm64@4.1.17':
optional: true
- '@esbuild/freebsd-arm64@0.25.6':
+ '@tailwindcss/oxide-darwin-arm64@4.1.17':
optional: true
- '@esbuild/freebsd-x64@0.25.6':
+ '@tailwindcss/oxide-darwin-x64@4.1.17':
optional: true
- '@esbuild/linux-arm64@0.25.6':
+ '@tailwindcss/oxide-freebsd-x64@4.1.17':
optional: true
- '@esbuild/linux-arm@0.25.6':
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
optional: true
- '@esbuild/linux-ia32@0.25.6':
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
optional: true
- '@esbuild/linux-loong64@0.25.6':
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.17':
optional: true
- '@esbuild/linux-mips64el@0.25.6':
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.17':
optional: true
- '@esbuild/linux-ppc64@0.25.6':
+ '@tailwindcss/oxide-linux-x64-musl@4.1.17':
optional: true
- '@esbuild/linux-riscv64@0.25.6':
+ '@tailwindcss/oxide-wasm32-wasi@4.1.17':
optional: true
- '@esbuild/linux-s390x@0.25.6':
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.17':
optional: true
- '@esbuild/linux-x64@0.25.6':
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.17':
optional: true
- '@esbuild/netbsd-arm64@0.25.6':
- optional: true
+ '@tailwindcss/oxide@4.1.17':
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.1.17
+ '@tailwindcss/oxide-darwin-arm64': 4.1.17
+ '@tailwindcss/oxide-darwin-x64': 4.1.17
+ '@tailwindcss/oxide-freebsd-x64': 4.1.17
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.1.17
+ '@tailwindcss/oxide-linux-arm64-musl': 4.1.17
+ '@tailwindcss/oxide-linux-x64-gnu': 4.1.17
+ '@tailwindcss/oxide-linux-x64-musl': 4.1.17
+ '@tailwindcss/oxide-wasm32-wasi': 4.1.17
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.1.17
+ '@tailwindcss/oxide-win32-x64-msvc': 4.1.17
+
+ '@tailwindcss/postcss@4.1.17':
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ '@tailwindcss/node': 4.1.17
+ '@tailwindcss/oxide': 4.1.17
+ postcss: 8.5.6
+ tailwindcss: 4.1.17
- '@esbuild/netbsd-x64@0.25.6':
+ '@takumi-rs/core-darwin-arm64@0.51.1':
optional: true
- '@esbuild/openbsd-arm64@0.25.6':
+ '@takumi-rs/core-darwin-x64@0.51.1':
optional: true
- '@esbuild/openbsd-x64@0.25.6':
+ '@takumi-rs/core-linux-arm64-gnu@0.51.1':
optional: true
- '@esbuild/openharmony-arm64@0.25.6':
+ '@takumi-rs/core-linux-arm64-musl@0.51.1':
optional: true
- '@esbuild/sunos-x64@0.25.6':
+ '@takumi-rs/core-linux-x64-gnu@0.51.1':
optional: true
- '@esbuild/win32-arm64@0.25.6':
+ '@takumi-rs/core-linux-x64-musl@0.51.1':
optional: true
- '@esbuild/win32-ia32@0.25.6':
+ '@takumi-rs/core-win32-arm64-msvc@0.51.1':
optional: true
- '@esbuild/win32-x64@0.25.6':
+ '@takumi-rs/core-win32-x64-msvc@0.51.1':
optional: true
- '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0)':
- dependencies:
- eslint: 9.31.0
- eslint-visitor-keys: 3.4.3
-
- '@eslint-community/regexpp@4.12.1': {}
-
- '@eslint/config-array@0.21.0':
- dependencies:
- '@eslint/object-schema': 2.1.6
- debug: 4.4.1
- minimatch: 3.1.2
- transitivePeerDependencies:
- - supports-color
-
- '@eslint/config-helpers@0.3.0': {}
+ '@takumi-rs/core@0.51.1':
+ optionalDependencies:
+ '@takumi-rs/core-darwin-arm64': 0.51.1
+ '@takumi-rs/core-darwin-x64': 0.51.1
+ '@takumi-rs/core-linux-arm64-gnu': 0.51.1
+ '@takumi-rs/core-linux-arm64-musl': 0.51.1
+ '@takumi-rs/core-linux-x64-gnu': 0.51.1
+ '@takumi-rs/core-linux-x64-musl': 0.51.1
+ '@takumi-rs/core-win32-arm64-msvc': 0.51.1
+ '@takumi-rs/core-win32-x64-msvc': 0.51.1
- '@eslint/core@0.15.1':
- dependencies:
- '@types/json-schema': 7.0.15
+ '@takumi-rs/helpers@0.51.1': {}
- '@eslint/eslintrc@3.3.1':
+ '@takumi-rs/image-response@0.51.1':
dependencies:
- ajv: 6.12.6
- debug: 4.4.1
- espree: 10.4.0
- globals: 14.0.0
- ignore: 5.3.2
- import-fresh: 3.3.1
- js-yaml: 4.1.0
- minimatch: 3.1.2
- strip-json-comments: 3.1.1
- transitivePeerDependencies:
- - supports-color
-
- '@eslint/js@9.31.0': {}
+ '@takumi-rs/core': 0.51.1
+ '@takumi-rs/helpers': 0.51.1
+ '@takumi-rs/wasm': 0.51.1
- '@eslint/object-schema@2.1.6': {}
+ '@takumi-rs/wasm@0.51.1': {}
- '@eslint/plugin-kit@0.3.3':
+ '@ts-morph/common@0.28.1':
dependencies:
- '@eslint/core': 0.15.1
- levn: 0.4.1
+ minimatch: 10.1.1
+ path-browserify: 1.0.1
+ tinyglobby: 0.2.15
- '@humanfs/core@0.19.1': {}
+ '@types/aws-lambda@8.10.159': {}
- '@humanfs/node@0.16.6':
+ '@types/chai@5.2.3':
dependencies:
- '@humanfs/core': 0.19.1
- '@humanwhocodes/retry': 0.3.1
-
- '@humanwhocodes/module-importer@1.0.1': {}
-
- '@humanwhocodes/retry@0.3.1': {}
-
- '@humanwhocodes/retry@0.4.3': {}
+ '@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
- '@inquirer/confirm@5.1.13':
- dependencies:
- '@inquirer/core': 10.1.14
- '@inquirer/type': 3.0.7
+ '@types/d3-array@3.2.2': {}
- '@inquirer/core@10.1.14':
+ '@types/d3-axis@3.0.6':
dependencies:
- '@inquirer/figures': 1.0.12
- '@inquirer/type': 3.0.7
- ansi-escapes: 4.3.2
- cli-width: 4.1.0
- mute-stream: 2.0.0
- signal-exit: 4.1.0
- wrap-ansi: 6.2.0
- yoctocolors-cjs: 2.1.2
-
- '@inquirer/figures@1.0.12': {}
-
- '@inquirer/type@3.0.7': {}
+ '@types/d3-selection': 3.0.11
- '@isaacs/balanced-match@4.0.1': {}
-
- '@isaacs/brace-expansion@5.0.0':
+ '@types/d3-brush@3.0.6':
dependencies:
- '@isaacs/balanced-match': 4.0.1
+ '@types/d3-selection': 3.0.11
- '@isaacs/cliui@8.0.2':
- dependencies:
- string-width: 5.1.2
- string-width-cjs: string-width@4.2.3
- strip-ansi: 7.1.0
- strip-ansi-cjs: strip-ansi@6.0.1
- wrap-ansi: 8.1.0
- wrap-ansi-cjs: wrap-ansi@7.0.0
+ '@types/d3-chord@3.0.6': {}
- '@istanbuljs/schema@0.1.3': {}
+ '@types/d3-color@3.1.3': {}
- '@jridgewell/gen-mapping@0.3.12':
+ '@types/d3-contour@3.0.6':
dependencies:
- '@jridgewell/sourcemap-codec': 1.5.4
- '@jridgewell/trace-mapping': 0.3.29
-
- '@jridgewell/resolve-uri@3.1.2': {}
+ '@types/d3-array': 3.2.2
+ '@types/geojson': 7946.0.16
- '@jridgewell/sourcemap-codec@1.5.4': {}
+ '@types/d3-delaunay@6.0.4': {}
- '@jridgewell/trace-mapping@0.3.29':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.4
+ '@types/d3-dispatch@3.0.7': {}
- '@manypkg/find-root@1.1.0':
+ '@types/d3-drag@3.0.7':
dependencies:
- '@babel/runtime': 7.27.6
- '@types/node': 12.20.55
- find-up: 4.1.0
- fs-extra: 8.1.0
+ '@types/d3-selection': 3.0.11
- '@manypkg/get-packages@1.1.3':
- dependencies:
- '@babel/runtime': 7.27.6
- '@changesets/types': 4.1.0
- '@manypkg/find-root': 1.1.0
- fs-extra: 8.1.0
- globby: 11.1.0
- read-yaml-file: 1.1.0
+ '@types/d3-dsv@3.0.7': {}
- '@metal-box/type@0.2.0': {}
+ '@types/d3-ease@3.0.2': {}
- '@mswjs/interceptors@0.39.2':
+ '@types/d3-fetch@3.0.7':
dependencies:
- '@open-draft/deferred-promise': 2.2.0
- '@open-draft/logger': 0.3.0
- '@open-draft/until': 2.1.0
- is-node-process: 1.2.0
- outvariant: 1.4.3
- strict-event-emitter: 0.5.1
+ '@types/d3-dsv': 3.0.7
- '@nodelib/fs.scandir@2.1.5':
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
+ '@types/d3-force@3.0.10': {}
- '@nodelib/fs.stat@2.0.5': {}
+ '@types/d3-format@3.0.4': {}
- '@nodelib/fs.walk@1.2.8':
+ '@types/d3-geo@3.1.0':
dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.19.1
+ '@types/geojson': 7946.0.16
- '@open-draft/deferred-promise@2.2.0': {}
+ '@types/d3-hierarchy@3.1.7': {}
- '@open-draft/logger@0.3.0':
+ '@types/d3-interpolate@3.0.4':
dependencies:
- is-node-process: 1.2.0
- outvariant: 1.4.3
-
- '@open-draft/until@2.1.0': {}
-
- '@pkgjs/parseargs@0.11.0':
- optional: true
-
- '@pkgr/core@0.2.7': {}
-
- '@rollup/rollup-android-arm-eabi@4.45.1':
- optional: true
+ '@types/d3-color': 3.1.3
- '@rollup/rollup-android-arm64@4.45.1':
- optional: true
+ '@types/d3-path@3.1.1': {}
- '@rollup/rollup-darwin-arm64@4.45.1':
- optional: true
+ '@types/d3-polygon@3.0.2': {}
- '@rollup/rollup-darwin-x64@4.45.1':
- optional: true
+ '@types/d3-quadtree@3.0.6': {}
- '@rollup/rollup-freebsd-arm64@4.45.1':
- optional: true
+ '@types/d3-random@3.0.3': {}
- '@rollup/rollup-freebsd-x64@4.45.1':
- optional: true
+ '@types/d3-scale-chromatic@3.1.0': {}
- '@rollup/rollup-linux-arm-gnueabihf@4.45.1':
- optional: true
+ '@types/d3-scale@4.0.9':
+ dependencies:
+ '@types/d3-time': 3.0.4
- '@rollup/rollup-linux-arm-musleabihf@4.45.1':
- optional: true
+ '@types/d3-selection@3.0.11': {}
- '@rollup/rollup-linux-arm64-gnu@4.45.1':
- optional: true
+ '@types/d3-shape@3.1.7':
+ dependencies:
+ '@types/d3-path': 3.1.1
- '@rollup/rollup-linux-arm64-musl@4.45.1':
- optional: true
+ '@types/d3-time-format@4.0.3': {}
- '@rollup/rollup-linux-loongarch64-gnu@4.45.1':
- optional: true
+ '@types/d3-time@3.0.4': {}
- '@rollup/rollup-linux-powerpc64le-gnu@4.45.1':
- optional: true
+ '@types/d3-timer@3.0.2': {}
- '@rollup/rollup-linux-riscv64-gnu@4.45.1':
- optional: true
+ '@types/d3-transition@3.0.9':
+ dependencies:
+ '@types/d3-selection': 3.0.11
- '@rollup/rollup-linux-riscv64-musl@4.45.1':
- optional: true
+ '@types/d3-zoom@3.0.8':
+ dependencies:
+ '@types/d3-interpolate': 3.0.4
+ '@types/d3-selection': 3.0.11
- '@rollup/rollup-linux-s390x-gnu@4.45.1':
- optional: true
+ '@types/d3@7.4.3':
+ dependencies:
+ '@types/d3-array': 3.2.2
+ '@types/d3-axis': 3.0.6
+ '@types/d3-brush': 3.0.6
+ '@types/d3-chord': 3.0.6
+ '@types/d3-color': 3.1.3
+ '@types/d3-contour': 3.0.6
+ '@types/d3-delaunay': 6.0.4
+ '@types/d3-dispatch': 3.0.7
+ '@types/d3-drag': 3.0.7
+ '@types/d3-dsv': 3.0.7
+ '@types/d3-ease': 3.0.2
+ '@types/d3-fetch': 3.0.7
+ '@types/d3-force': 3.0.10
+ '@types/d3-format': 3.0.4
+ '@types/d3-geo': 3.1.0
+ '@types/d3-hierarchy': 3.1.7
+ '@types/d3-interpolate': 3.0.4
+ '@types/d3-path': 3.1.1
+ '@types/d3-polygon': 3.0.2
+ '@types/d3-quadtree': 3.0.6
+ '@types/d3-random': 3.0.3
+ '@types/d3-scale': 4.0.9
+ '@types/d3-scale-chromatic': 3.1.0
+ '@types/d3-selection': 3.0.11
+ '@types/d3-shape': 3.1.7
+ '@types/d3-time': 3.0.4
+ '@types/d3-time-format': 4.0.3
+ '@types/d3-timer': 3.0.2
+ '@types/d3-transition': 3.0.9
+ '@types/d3-zoom': 3.0.8
- '@rollup/rollup-linux-x64-gnu@4.45.1':
- optional: true
+ '@types/debug@4.1.12':
+ dependencies:
+ '@types/ms': 2.1.0
- '@rollup/rollup-linux-x64-musl@4.45.1':
- optional: true
+ '@types/deep-eql@4.0.2': {}
- '@rollup/rollup-win32-arm64-msvc@4.45.1':
- optional: true
+ '@types/estree-jsx@1.0.5':
+ dependencies:
+ '@types/estree': 1.0.8
- '@rollup/rollup-win32-ia32-msvc@4.45.1':
- optional: true
+ '@types/estree@1.0.8': {}
- '@rollup/rollup-win32-x64-msvc@4.45.1':
- optional: true
+ '@types/fs-extra@11.0.4':
+ dependencies:
+ '@types/jsonfile': 6.1.4
+ '@types/node': 24.10.1
- '@rtsao/scc@1.1.0': {}
+ '@types/geojson@7946.0.16': {}
- '@types/chai@5.2.2':
+ '@types/hast@3.0.4':
dependencies:
- '@types/deep-eql': 4.0.2
+ '@types/unist': 3.0.3
- '@types/cookie@0.6.0': {}
+ '@types/json-schema@7.0.15': {}
- '@types/deep-eql@4.0.2': {}
+ '@types/jsonfile@6.1.4':
+ dependencies:
+ '@types/node': 24.10.1
- '@types/estree@1.0.8': {}
+ '@types/mdast@4.0.4':
+ dependencies:
+ '@types/unist': 3.0.3
- '@types/json-schema@7.0.15': {}
+ '@types/mdx@2.0.13': {}
- '@types/json5@0.0.29': {}
+ '@types/ms@2.1.0': {}
'@types/node@12.20.55': {}
- '@types/statuses@2.0.6': {}
-
- '@types/tough-cookie@4.0.5': {}
-
- '@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0)(typescript@5.8.3))(eslint@9.31.0)(typescript@5.8.3)':
- dependencies:
- '@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.37.0(eslint@9.31.0)(typescript@5.8.3)
- '@typescript-eslint/scope-manager': 8.37.0
- '@typescript-eslint/type-utils': 8.37.0(eslint@9.31.0)(typescript@5.8.3)
- '@typescript-eslint/utils': 8.37.0(eslint@9.31.0)(typescript@5.8.3)
- '@typescript-eslint/visitor-keys': 8.37.0
- eslint: 9.31.0
- graphemer: 1.4.0
- ignore: 7.0.5
- natural-compare: 1.4.0
- ts-api-utils: 2.1.0(typescript@5.8.3)
- typescript: 5.8.3
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/parser@8.37.0(eslint@9.31.0)(typescript@5.8.3)':
+ '@types/node@20.19.25':
dependencies:
- '@typescript-eslint/scope-manager': 8.37.0
- '@typescript-eslint/types': 8.37.0
- '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3)
- '@typescript-eslint/visitor-keys': 8.37.0
- debug: 4.4.1
- eslint: 9.31.0
- typescript: 5.8.3
- transitivePeerDependencies:
- - supports-color
+ undici-types: 6.21.0
- '@typescript-eslint/project-service@8.37.0(typescript@5.8.3)':
+ '@types/node@24.10.1':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3)
- '@typescript-eslint/types': 8.37.0
- debug: 4.4.1
- typescript: 5.8.3
- transitivePeerDependencies:
- - supports-color
+ undici-types: 7.16.0
- '@typescript-eslint/scope-manager@8.37.0':
+ '@types/react-dom@19.2.3(@types/react@19.2.7)':
dependencies:
- '@typescript-eslint/types': 8.37.0
- '@typescript-eslint/visitor-keys': 8.37.0
+ '@types/react': 19.2.7
- '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.8.3)':
+ '@types/react@19.2.7':
dependencies:
- typescript: 5.8.3
+ csstype: 3.2.3
- '@typescript-eslint/type-utils@8.37.0(eslint@9.31.0)(typescript@5.8.3)':
- dependencies:
- '@typescript-eslint/types': 8.37.0
- '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3)
- '@typescript-eslint/utils': 8.37.0(eslint@9.31.0)(typescript@5.8.3)
- debug: 4.4.1
- eslint: 9.31.0
- ts-api-utils: 2.1.0(typescript@5.8.3)
- typescript: 5.8.3
- transitivePeerDependencies:
- - supports-color
+ '@types/statuses@2.0.6': {}
- '@typescript-eslint/types@8.37.0': {}
+ '@types/trusted-types@2.0.7':
+ optional: true
- '@typescript-eslint/typescript-estree@8.37.0(typescript@5.8.3)':
- dependencies:
- '@typescript-eslint/project-service': 8.37.0(typescript@5.8.3)
- '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3)
- '@typescript-eslint/types': 8.37.0
- '@typescript-eslint/visitor-keys': 8.37.0
- debug: 4.4.1
- fast-glob: 3.3.3
- is-glob: 4.0.3
- minimatch: 9.0.5
- semver: 7.7.2
- ts-api-utils: 2.1.0(typescript@5.8.3)
- typescript: 5.8.3
- transitivePeerDependencies:
- - supports-color
+ '@types/unist@2.0.11': {}
+
+ '@types/unist@3.0.3': {}
- '@typescript-eslint/utils@8.37.0(eslint@9.31.0)(typescript@5.8.3)':
+ '@typescript/vfs@1.6.2(typescript@5.9.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0)
- '@typescript-eslint/scope-manager': 8.37.0
- '@typescript-eslint/types': 8.37.0
- '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3)
- eslint: 9.31.0
- typescript: 5.8.3
+ debug: 4.4.3
+ typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.37.0':
- dependencies:
- '@typescript-eslint/types': 8.37.0
- eslint-visitor-keys: 4.2.1
+ '@ungap/structured-clone@1.3.0': {}
- '@vitest/coverage-v8@3.2.4(vitest@3.2.4(msw@2.10.4(typescript@5.8.3))(yaml@2.8.0))':
+ '@vitest/coverage-v8@4.0.6(vitest@4.0.13(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(msw@2.12.3(@types/node@24.10.1)(typescript@5.9.3))(yaml@2.8.1))':
dependencies:
- '@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 1.0.2
- ast-v8-to-istanbul: 0.3.3
- debug: 4.4.1
+ '@vitest/utils': 4.0.6
+ ast-v8-to-istanbul: 0.3.8
+ debug: 4.4.3
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-lib-source-maps: 5.0.6
- istanbul-reports: 3.1.7
- magic-string: 0.30.17
+ istanbul-reports: 3.2.0
magicast: 0.3.5
- std-env: 3.9.0
- test-exclude: 7.0.1
- tinyrainbow: 2.0.0
- vitest: 3.2.4(msw@2.10.4(typescript@5.8.3))(yaml@2.8.0)
+ std-env: 3.10.0
+ tinyrainbow: 3.0.3
+ vitest: 4.0.13(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(msw@2.12.3(@types/node@24.10.1)(typescript@5.9.3))(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
- '@vitest/expect@3.2.4':
+ '@vitest/expect@4.0.13':
dependencies:
- '@types/chai': 5.2.2
- '@vitest/spy': 3.2.4
- '@vitest/utils': 3.2.4
- chai: 5.2.1
- tinyrainbow: 2.0.0
+ '@standard-schema/spec': 1.0.0
+ '@types/chai': 5.2.3
+ '@vitest/spy': 4.0.13
+ '@vitest/utils': 4.0.13
+ chai: 6.2.1
+ tinyrainbow: 3.0.3
- '@vitest/mocker@3.2.4(msw@2.10.4(typescript@5.8.3))(vite@7.0.4(yaml@2.8.0))':
+ '@vitest/mocker@4.0.13(msw@2.12.3(@types/node@24.10.1)(typescript@5.9.3))(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1))':
dependencies:
- '@vitest/spy': 3.2.4
+ '@vitest/spy': 4.0.13
estree-walker: 3.0.3
- magic-string: 0.30.17
+ magic-string: 0.30.21
optionalDependencies:
- msw: 2.10.4(typescript@5.8.3)
- vite: 7.0.4(yaml@2.8.0)
+ msw: 2.12.3(@types/node@24.10.1)(typescript@5.9.3)
+ vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)
+
+ '@vitest/pretty-format@4.0.13':
+ dependencies:
+ tinyrainbow: 3.0.3
- '@vitest/pretty-format@3.2.4':
+ '@vitest/pretty-format@4.0.6':
dependencies:
- tinyrainbow: 2.0.0
+ tinyrainbow: 3.0.3
- '@vitest/runner@3.2.4':
+ '@vitest/runner@4.0.13':
dependencies:
- '@vitest/utils': 3.2.4
+ '@vitest/utils': 4.0.13
pathe: 2.0.3
- strip-literal: 3.0.0
- '@vitest/snapshot@3.2.4':
+ '@vitest/snapshot@4.0.13':
dependencies:
- '@vitest/pretty-format': 3.2.4
- magic-string: 0.30.17
+ '@vitest/pretty-format': 4.0.13
+ magic-string: 0.30.21
pathe: 2.0.3
- '@vitest/spy@3.2.4':
+ '@vitest/spy@4.0.13': {}
+
+ '@vitest/utils@4.0.13':
dependencies:
- tinyspy: 4.0.3
+ '@vitest/pretty-format': 4.0.13
+ tinyrainbow: 3.0.3
- '@vitest/utils@3.2.4':
+ '@vitest/utils@4.0.6':
dependencies:
- '@vitest/pretty-format': 3.2.4
- loupe: 3.1.4
- tinyrainbow: 2.0.0
+ '@vitest/pretty-format': 4.0.6
+ tinyrainbow: 3.0.3
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
@@ -3212,32 +5919,21 @@ snapshots:
acorn@8.15.0: {}
- ajv@6.12.6:
- dependencies:
- fast-deep-equal: 3.1.3
- fast-json-stable-stringify: 2.1.0
- json-schema-traverse: 0.4.1
- uri-js: 4.4.1
-
ansi-colors@4.1.3: {}
- ansi-escapes@4.3.2:
- dependencies:
- type-fest: 0.21.3
-
- ansi-escapes@7.0.0:
+ ansi-escapes@7.2.0:
dependencies:
environment: 1.1.0
ansi-regex@5.0.1: {}
- ansi-regex@6.1.0: {}
+ ansi-regex@6.2.2: {}
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
- ansi-styles@6.2.1: {}
+ ansi-styles@6.2.3: {}
any-promise@1.3.0: {}
@@ -3247,135 +5943,76 @@ snapshots:
argparse@2.0.1: {}
- array-buffer-byte-length@1.0.2:
- dependencies:
- call-bound: 1.0.4
- is-array-buffer: 3.0.5
-
- array-includes@3.1.9:
+ aria-hidden@1.2.6:
dependencies:
- 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
+ tslib: 2.8.1
array-union@2.1.0: {}
- array.prototype.findlastindex@1.2.6:
- 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
- es-shim-unscopables: 1.1.0
-
- array.prototype.flat@1.3.3:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.0
- es-shim-unscopables: 1.1.0
-
- array.prototype.flatmap@1.3.3:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.0
- es-shim-unscopables: 1.1.0
-
- arraybuffer.prototype.slice@1.0.4:
- dependencies:
- 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
-
assertion-error@2.0.1: {}
- ast-v8-to-istanbul@0.3.3:
+ ast-v8-to-istanbul@0.3.8:
dependencies:
- '@jridgewell/trace-mapping': 0.3.29
+ '@jridgewell/trace-mapping': 0.3.31
estree-walker: 3.0.3
js-tokens: 9.0.1
- async-function@1.0.0: {}
+ astring@1.9.0: {}
- available-typed-arrays@1.0.7:
- dependencies:
- possible-typed-array-names: 1.1.0
+ bail@2.0.2: {}
- balanced-match@1.0.2: {}
+ before-after-hook@4.0.0: {}
better-path-resolve@1.0.0:
dependencies:
is-windows: 1.0.2
- brace-expansion@1.1.12:
- dependencies:
- balanced-match: 1.0.2
- concat-map: 0.0.1
-
- brace-expansion@2.0.2:
- dependencies:
- balanced-match: 1.0.2
+ bottleneck@2.19.5: {}
braces@3.0.3:
dependencies:
fill-range: 7.1.1
- bundle-require@5.1.0(esbuild@0.25.6):
+ bundle-require@5.1.0(esbuild@0.27.0):
dependencies:
- esbuild: 0.25.6
+ esbuild: 0.27.0
load-tsconfig: 0.2.5
cac@6.7.14: {}
- call-bind-apply-helpers@1.0.2:
- dependencies:
- es-errors: 1.3.0
- function-bind: 1.1.2
+ call-me-maybe@1.0.2: {}
- 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
+ caniuse-lite@1.0.30001757: {}
- call-bound@1.0.4:
- dependencies:
- call-bind-apply-helpers: 1.0.2
- get-intrinsic: 1.3.0
+ ccount@2.0.1: {}
- callsites@3.1.0: {}
+ chai@6.2.1: {}
- chai@5.2.1:
- dependencies:
- assertion-error: 2.0.1
- check-error: 2.1.1
- deep-eql: 5.0.2
- loupe: 3.1.4
- pathval: 2.0.1
+ chalk@5.6.2: {}
- chalk@4.1.2:
- dependencies:
- ansi-styles: 4.3.0
- supports-color: 7.2.0
+ character-entities-html4@2.1.0: {}
- chalk@5.4.1: {}
+ character-entities-legacy@3.0.0: {}
- chardet@0.7.0: {}
+ character-entities@2.0.2: {}
- check-error@2.1.1: {}
+ character-reference-invalid@2.0.1: {}
+
+ chardet@2.1.1: {}
+
+ chevrotain-allstar@0.3.1(chevrotain@11.0.3):
+ dependencies:
+ chevrotain: 11.0.3
+ lodash-es: 4.17.21
+
+ chevrotain@11.0.3:
+ dependencies:
+ '@chevrotain/cst-dts-gen': 11.0.3
+ '@chevrotain/gast': 11.0.3
+ '@chevrotain/regexp-to-ast': 11.0.3
+ '@chevrotain/types': 11.0.3
+ '@chevrotain/utils': 11.0.3
+ lodash-es: 4.17.21
chokidar@4.0.3:
dependencies:
@@ -3383,23 +6020,35 @@ snapshots:
ci-info@3.9.0: {}
+ class-variance-authority@0.7.1:
+ dependencies:
+ clsx: 2.1.1
+
cli-cursor@5.0.0:
dependencies:
restore-cursor: 5.1.0
- cli-truncate@4.0.0:
+ cli-truncate@5.1.1:
dependencies:
- slice-ansi: 5.0.0
- string-width: 7.2.0
+ slice-ansi: 7.1.2
+ string-width: 8.1.0
cli-width@4.1.0: {}
+ client-only@0.0.1: {}
+
cliui@8.0.1:
dependencies:
string-width: 4.2.3
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
+ clsx@2.1.1: {}
+
+ code-block-writer@13.0.3: {}
+
+ collapse-white-space@2.1.0: {}
+
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
@@ -3408,17 +6057,36 @@ snapshots:
colorette@2.0.20: {}
- commander@13.1.0: {}
+ comma-separated-tokens@2.0.3: {}
+
+ commander@14.0.2: {}
commander@4.1.1: {}
- concat-map@0.0.1: {}
+ commander@7.2.0: {}
+
+ commander@8.3.0: {}
+
+ commander@9.5.0:
+ optional: true
+
+ compute-scroll-into-view@3.1.1: {}
confbox@0.1.8: {}
+ confbox@0.2.2: {}
+
consola@3.4.2: {}
- cookie@0.7.2: {}
+ cookie@1.0.2: {}
+
+ cose-base@1.0.3:
+ dependencies:
+ layout-base: 1.0.2
+
+ cose-base@2.2.0:
+ dependencies:
+ layout-base: 2.0.1
cross-spawn@7.0.6:
dependencies:
@@ -3426,370 +6094,372 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
- data-view-buffer@1.0.2:
+ cssesc@3.0.0: {}
+
+ csstype@3.2.3: {}
+
+ cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1):
dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-data-view: 1.0.2
+ cose-base: 1.0.3
+ cytoscape: 3.33.1
- data-view-byte-length@1.0.2:
+ cytoscape-fcose@2.2.0(cytoscape@3.33.1):
dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-data-view: 1.0.2
+ cose-base: 2.2.0
+ cytoscape: 3.33.1
- data-view-byte-offset@1.0.1:
+ cytoscape@3.33.1: {}
+
+ d3-array@2.12.1:
dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-data-view: 1.0.2
+ internmap: 1.0.1
- debug@3.2.7:
+ d3-array@3.2.4:
dependencies:
- ms: 2.1.3
+ internmap: 2.0.3
- debug@4.4.1:
+ d3-axis@3.0.0: {}
+
+ d3-brush@3.0.0:
dependencies:
- ms: 2.1.3
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1(d3-selection@3.0.0)
- deep-eql@5.0.2: {}
+ d3-chord@3.0.1:
+ dependencies:
+ d3-path: 3.1.0
- deep-is@0.1.4: {}
+ d3-color@3.1.0: {}
- define-data-property@1.1.4:
+ d3-contour@4.0.2:
dependencies:
- es-define-property: 1.0.1
- es-errors: 1.3.0
- gopd: 1.2.0
+ d3-array: 3.2.4
- define-properties@1.2.1:
+ d3-delaunay@6.0.4:
dependencies:
- define-data-property: 1.1.4
- has-property-descriptors: 1.0.2
- object-keys: 1.1.1
+ delaunator: 5.0.1
- detect-indent@6.1.0: {}
+ d3-dispatch@3.0.1: {}
- dir-glob@3.0.1:
+ d3-drag@3.0.0:
dependencies:
- path-type: 4.0.0
+ d3-dispatch: 3.0.1
+ d3-selection: 3.0.0
- doctrine@2.1.0:
+ d3-dsv@3.0.1:
dependencies:
- esutils: 2.0.3
+ commander: 7.2.0
+ iconv-lite: 0.6.3
+ rw: 1.3.3
- dotenv@16.0.3: {}
+ d3-ease@3.0.1: {}
- dunder-proto@1.0.1:
+ d3-fetch@3.0.1:
dependencies:
- call-bind-apply-helpers: 1.0.2
- es-errors: 1.3.0
- gopd: 1.2.0
+ d3-dsv: 3.0.1
- eastasianwidth@0.2.0: {}
+ d3-force@3.0.0:
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-quadtree: 3.0.1
+ d3-timer: 3.0.1
- emoji-regex@10.4.0: {}
+ d3-format@3.1.0: {}
- emoji-regex@8.0.0: {}
+ d3-geo@3.1.1:
+ dependencies:
+ d3-array: 3.2.4
- emoji-regex@9.2.2: {}
+ d3-hierarchy@3.1.2: {}
- enquirer@2.4.1:
+ d3-interpolate@3.0.1:
dependencies:
- ansi-colors: 4.1.3
- strip-ansi: 6.0.1
+ d3-color: 3.1.0
- environment@1.1.0: {}
+ d3-path@1.0.9: {}
- 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: {}
+ d3-path@3.1.0: {}
- es-module-lexer@1.7.0: {}
+ d3-polygon@3.0.1: {}
+
+ d3-quadtree@3.0.1: {}
+
+ d3-random@3.0.1: {}
+
+ d3-sankey@0.12.3:
+ dependencies:
+ d3-array: 2.12.1
+ d3-shape: 1.3.7
+
+ d3-scale-chromatic@3.1.0:
+ dependencies:
+ d3-color: 3.1.0
+ d3-interpolate: 3.0.1
+
+ d3-scale@4.0.2:
+ dependencies:
+ d3-array: 3.2.4
+ d3-format: 3.1.0
+ d3-interpolate: 3.0.1
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
+
+ d3-selection@3.0.0: {}
+
+ d3-shape@1.3.7:
+ dependencies:
+ d3-path: 1.0.9
+
+ d3-shape@3.2.0:
+ dependencies:
+ d3-path: 3.1.0
+
+ d3-time-format@4.1.0:
+ dependencies:
+ d3-time: 3.1.0
+
+ d3-time@3.1.0:
+ dependencies:
+ d3-array: 3.2.4
+
+ d3-timer@3.0.1: {}
+
+ d3-transition@3.0.1(d3-selection@3.0.0):
+ dependencies:
+ d3-color: 3.1.0
+ d3-dispatch: 3.0.1
+ d3-ease: 3.0.1
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-timer: 3.0.1
+
+ d3-zoom@3.0.0:
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+
+ d3@7.9.0:
+ dependencies:
+ d3-array: 3.2.4
+ d3-axis: 3.0.0
+ d3-brush: 3.0.0
+ d3-chord: 3.0.1
+ d3-color: 3.1.0
+ d3-contour: 4.0.2
+ d3-delaunay: 6.0.4
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-dsv: 3.0.1
+ d3-ease: 3.0.1
+ d3-fetch: 3.0.1
+ d3-force: 3.0.0
+ d3-format: 3.1.0
+ d3-geo: 3.1.1
+ d3-hierarchy: 3.1.2
+ d3-interpolate: 3.0.1
+ d3-path: 3.1.0
+ d3-polygon: 3.0.1
+ d3-quadtree: 3.0.1
+ d3-random: 3.0.1
+ d3-scale: 4.0.2
+ d3-scale-chromatic: 3.1.0
+ d3-selection: 3.0.0
+ d3-shape: 3.2.0
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
+ d3-timer: 3.0.1
+ d3-transition: 3.0.1(d3-selection@3.0.0)
+ d3-zoom: 3.0.0
- es-object-atoms@1.1.1:
+ dagre-d3-es@7.0.13:
dependencies:
- es-errors: 1.3.0
+ d3: 7.9.0
+ lodash-es: 4.17.21
- es-set-tostringtag@2.1.0:
+ dayjs@1.11.19: {}
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ decode-named-character-reference@1.2.0:
dependencies:
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
- has-tostringtag: 1.0.2
- hasown: 2.0.2
+ character-entities: 2.0.2
+
+ delaunator@5.0.1:
+ dependencies:
+ robust-predicates: 3.0.2
+
+ dequal@2.0.3: {}
+
+ detect-indent@6.1.0: {}
+
+ detect-libc@2.1.2: {}
- es-shim-unscopables@1.1.0:
+ detect-node-es@1.1.0: {}
+
+ devlop@1.1.0:
dependencies:
- hasown: 2.0.2
+ dequal: 2.0.3
- es-to-primitive@1.3.0:
+ dir-glob@3.0.1:
dependencies:
- is-callable: 1.2.7
- is-date-object: 1.1.0
- is-symbol: 1.1.1
+ path-type: 4.0.0
- esbuild@0.25.6:
+ dompurify@3.3.0:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.6
- '@esbuild/android-arm': 0.25.6
- '@esbuild/android-arm64': 0.25.6
- '@esbuild/android-x64': 0.25.6
- '@esbuild/darwin-arm64': 0.25.6
- '@esbuild/darwin-x64': 0.25.6
- '@esbuild/freebsd-arm64': 0.25.6
- '@esbuild/freebsd-x64': 0.25.6
- '@esbuild/linux-arm': 0.25.6
- '@esbuild/linux-arm64': 0.25.6
- '@esbuild/linux-ia32': 0.25.6
- '@esbuild/linux-loong64': 0.25.6
- '@esbuild/linux-mips64el': 0.25.6
- '@esbuild/linux-ppc64': 0.25.6
- '@esbuild/linux-riscv64': 0.25.6
- '@esbuild/linux-s390x': 0.25.6
- '@esbuild/linux-x64': 0.25.6
- '@esbuild/netbsd-arm64': 0.25.6
- '@esbuild/netbsd-x64': 0.25.6
- '@esbuild/openbsd-arm64': 0.25.6
- '@esbuild/openbsd-x64': 0.25.6
- '@esbuild/openharmony-arm64': 0.25.6
- '@esbuild/sunos-x64': 0.25.6
- '@esbuild/win32-arm64': 0.25.6
- '@esbuild/win32-ia32': 0.25.6
- '@esbuild/win32-x64': 0.25.6
+ '@types/trusted-types': 2.0.7
- escalade@3.2.0: {}
+ emoji-regex@10.6.0: {}
+
+ emoji-regex@8.0.0: {}
- escape-string-regexp@4.0.0: {}
+ enhanced-resolve@5.18.3:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.0
- eslint-config-prettier@10.1.5(eslint@9.31.0):
+ enquirer@2.4.1:
dependencies:
- eslint: 9.31.0
+ ansi-colors: 4.1.3
+ strip-ansi: 6.0.1
+
+ environment@1.1.0: {}
+
+ es-module-lexer@1.7.0: {}
- eslint-config-turbo@2.5.4(eslint@9.31.0)(turbo@2.5.4):
+ esast-util-from-estree@2.0.0:
dependencies:
- eslint: 9.31.0
- eslint-plugin-turbo: 2.5.4(eslint@9.31.0)(turbo@2.5.4)
- turbo: 2.5.4
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ unist-util-position-from-estree: 2.0.0
- eslint-import-resolver-node@0.3.9:
+ esast-util-from-js@2.0.1:
dependencies:
- debug: 3.2.7
- is-core-module: 2.16.1
- resolve: 1.22.10
- transitivePeerDependencies:
- - supports-color
+ '@types/estree-jsx': 1.0.5
+ acorn: 8.15.0
+ esast-util-from-estree: 2.0.0
+ vfile-message: 4.0.3
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.37.0(eslint@9.31.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.31.0):
- dependencies:
- debug: 3.2.7
+ esbuild@0.25.12:
optionalDependencies:
- '@typescript-eslint/parser': 8.37.0(eslint@9.31.0)(typescript@5.8.3)
- eslint: 9.31.0
- eslint-import-resolver-node: 0.3.9
- transitivePeerDependencies:
- - supports-color
-
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0)(typescript@5.8.3))(eslint@9.31.0):
- 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.31.0
- eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.37.0(eslint@9.31.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.31.0)
- 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
+ '@esbuild/aix-ppc64': 0.25.12
+ '@esbuild/android-arm': 0.25.12
+ '@esbuild/android-arm64': 0.25.12
+ '@esbuild/android-x64': 0.25.12
+ '@esbuild/darwin-arm64': 0.25.12
+ '@esbuild/darwin-x64': 0.25.12
+ '@esbuild/freebsd-arm64': 0.25.12
+ '@esbuild/freebsd-x64': 0.25.12
+ '@esbuild/linux-arm': 0.25.12
+ '@esbuild/linux-arm64': 0.25.12
+ '@esbuild/linux-ia32': 0.25.12
+ '@esbuild/linux-loong64': 0.25.12
+ '@esbuild/linux-mips64el': 0.25.12
+ '@esbuild/linux-ppc64': 0.25.12
+ '@esbuild/linux-riscv64': 0.25.12
+ '@esbuild/linux-s390x': 0.25.12
+ '@esbuild/linux-x64': 0.25.12
+ '@esbuild/netbsd-arm64': 0.25.12
+ '@esbuild/netbsd-x64': 0.25.12
+ '@esbuild/openbsd-arm64': 0.25.12
+ '@esbuild/openbsd-x64': 0.25.12
+ '@esbuild/openharmony-arm64': 0.25.12
+ '@esbuild/sunos-x64': 0.25.12
+ '@esbuild/win32-arm64': 0.25.12
+ '@esbuild/win32-ia32': 0.25.12
+ '@esbuild/win32-x64': 0.25.12
+
+ esbuild@0.27.0:
optionalDependencies:
- '@typescript-eslint/parser': 8.37.0(eslint@9.31.0)(typescript@5.8.3)
- transitivePeerDependencies:
- - eslint-import-resolver-typescript
- - eslint-import-resolver-webpack
- - supports-color
+ '@esbuild/aix-ppc64': 0.27.0
+ '@esbuild/android-arm': 0.27.0
+ '@esbuild/android-arm64': 0.27.0
+ '@esbuild/android-x64': 0.27.0
+ '@esbuild/darwin-arm64': 0.27.0
+ '@esbuild/darwin-x64': 0.27.0
+ '@esbuild/freebsd-arm64': 0.27.0
+ '@esbuild/freebsd-x64': 0.27.0
+ '@esbuild/linux-arm': 0.27.0
+ '@esbuild/linux-arm64': 0.27.0
+ '@esbuild/linux-ia32': 0.27.0
+ '@esbuild/linux-loong64': 0.27.0
+ '@esbuild/linux-mips64el': 0.27.0
+ '@esbuild/linux-ppc64': 0.27.0
+ '@esbuild/linux-riscv64': 0.27.0
+ '@esbuild/linux-s390x': 0.27.0
+ '@esbuild/linux-x64': 0.27.0
+ '@esbuild/netbsd-arm64': 0.27.0
+ '@esbuild/netbsd-x64': 0.27.0
+ '@esbuild/openbsd-arm64': 0.27.0
+ '@esbuild/openbsd-x64': 0.27.0
+ '@esbuild/openharmony-arm64': 0.27.0
+ '@esbuild/sunos-x64': 0.27.0
+ '@esbuild/win32-arm64': 0.27.0
+ '@esbuild/win32-ia32': 0.27.0
+ '@esbuild/win32-x64': 0.27.0
- eslint-plugin-prettier@5.5.1(eslint-config-prettier@10.1.5(eslint@9.31.0))(eslint@9.31.0)(prettier@3.6.2):
- dependencies:
- eslint: 9.31.0
- prettier: 3.6.2
- prettier-linter-helpers: 1.0.0
- synckit: 0.11.8
- optionalDependencies:
- eslint-config-prettier: 10.1.5(eslint@9.31.0)
+ escalade@3.2.0: {}
- eslint-plugin-turbo@2.5.4(eslint@9.31.0)(turbo@2.5.4):
- dependencies:
- dotenv: 16.0.3
- eslint: 9.31.0
- turbo: 2.5.4
+ escape-string-regexp@5.0.0: {}
+
+ esprima@4.0.1: {}
- eslint-scope@8.4.0:
+ estree-util-attach-comments@3.0.0:
dependencies:
- esrecurse: 4.3.0
- estraverse: 5.3.0
+ '@types/estree': 1.0.8
- eslint-visitor-keys@3.4.3: {}
+ estree-util-build-jsx@3.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-walker: 3.0.3
- eslint-visitor-keys@4.2.1: {}
+ estree-util-is-identifier-name@3.0.0: {}
- eslint@9.31.0:
+ estree-util-scope@1.0.0:
dependencies:
- '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0)
- '@eslint-community/regexpp': 4.12.1
- '@eslint/config-array': 0.21.0
- '@eslint/config-helpers': 0.3.0
- '@eslint/core': 0.15.1
- '@eslint/eslintrc': 3.3.1
- '@eslint/js': 9.31.0
- '@eslint/plugin-kit': 0.3.3
- '@humanfs/node': 0.16.6
- '@humanwhocodes/module-importer': 1.0.1
- '@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.8
- '@types/json-schema': 7.0.15
- ajv: 6.12.6
- chalk: 4.1.2
- cross-spawn: 7.0.6
- debug: 4.4.1
- 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
+ devlop: 1.1.0
- espree@10.4.0:
+ estree-util-to-js@2.0.0:
dependencies:
- acorn: 8.15.0
- acorn-jsx: 5.3.2(acorn@8.15.0)
- eslint-visitor-keys: 4.2.1
-
- esprima@4.0.1: {}
+ '@types/estree-jsx': 1.0.5
+ astring: 1.9.0
+ source-map: 0.7.6
- esquery@1.6.0:
+ estree-util-value-to-estree@3.5.0:
dependencies:
- estraverse: 5.3.0
+ '@types/estree': 1.0.8
- esrecurse@4.3.0:
+ estree-util-visit@2.0.0:
dependencies:
- estraverse: 5.3.0
-
- estraverse@5.3.0: {}
+ '@types/estree-jsx': 1.0.5
+ '@types/unist': 3.0.3
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.8
- esutils@2.0.3: {}
-
eventemitter3@5.0.1: {}
- execa@8.0.1:
- dependencies:
- cross-spawn: 7.0.6
- get-stream: 8.0.1
- human-signals: 5.0.0
- is-stream: 3.0.0
- merge-stream: 2.0.0
- npm-run-path: 5.3.0
- onetime: 6.0.0
- signal-exit: 4.1.0
- strip-final-newline: 3.0.0
-
expect-type@1.2.2: {}
- extendable-error@0.1.7: {}
+ exsolve@1.0.8: {}
- external-editor@3.1.0:
- dependencies:
- chardet: 0.7.0
- iconv-lite: 0.4.24
- tmp: 0.0.33
+ extend@3.0.2: {}
- fast-deep-equal@3.1.3: {}
+ extendable-error@0.1.7: {}
- fast-diff@1.3.0: {}
+ fast-content-type-parse@3.0.0: {}
fast-glob@3.3.3:
dependencies:
@@ -3799,21 +6469,17 @@ snapshots:
merge2: 1.4.1
micromatch: 4.0.8
- fast-json-stable-stringify@2.1.0: {}
-
- fast-levenshtein@2.0.6: {}
-
fastq@1.19.1:
dependencies:
reusify: 1.1.0
- fdir@6.4.6(picomatch@4.0.3):
+ fdir@6.5.0(picomatch@4.0.3):
optionalDependencies:
picomatch: 4.0.3
- file-entry-cache@8.0.0:
+ feed@5.1.0:
dependencies:
- flat-cache: 4.0.1
+ xml-js: 1.6.11
fill-range@7.1.1:
dependencies:
@@ -3824,32 +6490,17 @@ snapshots:
locate-path: 5.0.0
path-exists: 4.0.0
- find-up@5.0.0:
- dependencies:
- locate-path: 6.0.0
- path-exists: 4.0.0
-
fix-dts-default-cjs-exports@1.0.1:
dependencies:
- magic-string: 0.30.17
- mlly: 1.7.4
- rollup: 4.45.1
-
- flat-cache@4.0.1:
- dependencies:
- flatted: 3.3.3
- keyv: 4.5.4
+ magic-string: 0.30.21
+ mlly: 1.8.0
+ rollup: 4.53.3
- flatted@3.3.3: {}
-
- for-each@0.3.5:
- dependencies:
- is-callable: 1.2.7
-
- foreground-child@3.3.1:
+ fs-extra@11.3.2:
dependencies:
- cross-spawn: 7.0.6
- signal-exit: 4.1.0
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
fs-extra@7.0.1:
dependencies:
@@ -3866,81 +6517,156 @@ snapshots:
fsevents@2.3.3:
optional: true
- function-bind@1.1.2: {}
+ fumadocs-core@16.0.8(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
+ dependencies:
+ '@formatjs/intl-localematcher': 0.6.2
+ '@orama/orama': 3.1.16
+ '@shikijs/rehype': 3.15.0
+ '@shikijs/transformers': 3.15.0
+ estree-util-value-to-estree: 3.5.0
+ github-slugger: 2.0.0
+ hast-util-to-estree: 3.1.3
+ hast-util-to-jsx-runtime: 2.3.6
+ image-size: 2.0.2
+ negotiator: 1.0.0
+ npm-to-yarn: 3.0.1
+ path-to-regexp: 8.3.0
+ remark: 15.0.1
+ remark-gfm: 4.0.1
+ remark-rehype: 11.1.2
+ scroll-into-view-if-needed: 3.1.0
+ shiki: 3.15.0
+ unist-util-visit: 5.0.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+ lucide-react: 0.552.0(react@19.2.0)
+ next: 16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ transitivePeerDependencies:
+ - supports-color
- function.prototype.name@1.1.8:
+ fumadocs-mdx@13.0.5(fumadocs-core@16.0.8(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)):
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
+ '@mdx-js/mdx': 3.1.1
+ '@standard-schema/spec': 1.0.0
+ chokidar: 4.0.3
+ esbuild: 0.25.12
+ estree-util-value-to-estree: 3.5.0
+ fumadocs-core: 16.0.8(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ js-yaml: 4.1.1
+ lru-cache: 11.2.2
+ mdast-util-to-markdown: 2.1.2
+ picocolors: 1.1.1
+ picomatch: 4.0.3
+ remark-mdx: 3.1.1
+ tinyexec: 1.0.2
+ tinyglobby: 0.2.15
+ unified: 11.0.5
+ unist-util-remove-position: 5.0.0
+ unist-util-visit: 5.0.0
+ zod: 4.1.13
+ optionalDependencies:
+ next: 16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)
+ transitivePeerDependencies:
+ - supports-color
- functions-have-names@1.2.3: {}
+ fumadocs-twoslash@3.1.10(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(fumadocs-ui@16.0.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.17))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3):
+ dependencies:
+ '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@shikijs/twoslash': 3.15.0(typescript@5.9.3)
+ fumadocs-ui: 16.0.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.17)
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm: 3.1.0
+ mdast-util-to-hast: 13.2.1
+ react: 19.2.0
+ shiki: 3.15.0
+ tailwind-merge: 3.4.0
+ twoslash: 0.3.4(typescript@5.9.3)
+ optionalDependencies:
+ '@types/react': 19.2.7
+ transitivePeerDependencies:
+ - '@types/react-dom'
+ - react-dom
+ - supports-color
+ - typescript
- get-caller-file@2.0.5: {}
+ fumadocs-typescript@4.0.13(@types/react@19.2.7)(fumadocs-core@16.0.8(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(fumadocs-ui@16.0.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.17))(typescript@5.9.3):
+ dependencies:
+ estree-util-value-to-estree: 3.5.0
+ fumadocs-core: 16.0.8(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ hast-util-to-estree: 3.1.3
+ hast-util-to-jsx-runtime: 2.3.6
+ remark: 15.0.1
+ remark-rehype: 11.1.2
+ tinyglobby: 0.2.15
+ ts-morph: 27.0.2
+ typescript: 5.9.3
+ unist-util-visit: 5.0.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+ fumadocs-ui: 16.0.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.17)
+ transitivePeerDependencies:
+ - supports-color
- get-east-asian-width@1.3.0: {}
+ fumadocs-ui@16.0.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.17):
+ dependencies:
+ '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-slot': 1.2.4(@types/react@19.2.7)(react@19.2.0)
+ '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ class-variance-authority: 0.7.1
+ fumadocs-core: 16.0.8(@types/react@19.2.7)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ lodash.merge: 4.6.2
+ next-themes: 0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ postcss-selector-parser: 7.1.0
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-medium-image-zoom: 5.4.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ scroll-into-view-if-needed: 3.1.0
+ tailwind-merge: 3.4.0
+ optionalDependencies:
+ '@types/react': 19.2.7
+ next: 16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ tailwindcss: 4.1.17
+ transitivePeerDependencies:
+ - '@mixedbread/sdk'
+ - '@orama/core'
+ - '@tanstack/react-router'
+ - '@types/react-dom'
+ - algoliasearch
+ - lucide-react
+ - react-router
+ - supports-color
+ - waku
- get-intrinsic@1.3.0:
- dependencies:
- 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
+ get-caller-file@2.0.5: {}
- get-proto@1.0.1:
- dependencies:
- dunder-proto: 1.0.1
- es-object-atoms: 1.1.1
+ get-east-asian-width@1.4.0: {}
- get-stream@8.0.1: {}
+ get-nonce@1.0.1: {}
- get-symbol-description@1.1.0:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- get-intrinsic: 1.3.0
+ github-slugger@2.0.0: {}
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
- glob-parent@6.0.2:
- dependencies:
- is-glob: 4.0.3
-
- glob@10.4.5:
- dependencies:
- foreground-child: 3.3.1
- jackspeak: 3.4.3
- minimatch: 9.0.5
- minipass: 7.1.2
- package-json-from-dist: 1.0.1
- path-scurry: 1.11.1
-
- glob@11.0.3:
+ glob@13.0.0:
dependencies:
- foreground-child: 3.3.1
- jackspeak: 4.1.1
- minimatch: 10.0.3
+ minimatch: 10.1.1
minipass: 7.1.2
- package-json-from-dist: 1.0.1
- path-scurry: 2.0.0
-
- globals@14.0.0: {}
+ path-scurry: 2.0.1
- globalthis@1.0.4:
- dependencies:
- define-properties: 1.2.1
- gopd: 1.2.0
+ globals@15.15.0: {}
globby@11.1.0:
dependencies:
@@ -3953,367 +6679,806 @@ snapshots:
globrex@0.1.2: {}
- gopd@1.2.0: {}
-
graceful-fs@4.2.11: {}
- graphemer@1.4.0: {}
+ graphql@16.12.0: {}
- graphql@16.11.0: {}
-
- has-bigints@1.1.0: {}
+ hachure-fill@0.5.2: {}
has-flag@4.0.0: {}
- has-property-descriptors@1.0.2:
+ hast-util-to-estree@3.1.3:
dependencies:
- es-define-property: 1.0.1
+ '@types/estree': 1.0.8
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-attach-comments: 3.0.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 7.1.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ zwitch: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
- has-proto@1.2.0:
+ hast-util-to-html@9.0.5:
dependencies:
- dunder-proto: 1.0.1
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.2.1
+ property-information: 7.1.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
- has-symbols@1.1.0: {}
+ hast-util-to-jsx-runtime@2.3.6:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 7.1.0
+ space-separated-tokens: 2.0.2
+ style-to-js: 1.1.21
+ unist-util-position: 5.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
- has-tostringtag@1.0.2:
+ hast-util-to-string@3.0.1:
dependencies:
- has-symbols: 1.1.0
+ '@types/hast': 3.0.4
- hasown@2.0.2:
+ hast-util-whitespace@3.0.0:
dependencies:
- function-bind: 1.1.2
+ '@types/hast': 3.0.4
headers-polyfill@4.0.3: {}
html-escaper@2.0.2: {}
- human-id@4.1.1: {}
+ html-void-elements@3.0.0: {}
- human-signals@5.0.0: {}
+ human-id@4.1.2: {}
husky@9.1.7: {}
- iconv-lite@0.4.24:
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ iconv-lite@0.7.0:
dependencies:
safer-buffer: 2.1.2
ignore@5.3.2: {}
- ignore@7.0.5: {}
+ image-size@2.0.2: {}
- import-fresh@3.3.1:
- dependencies:
- parent-module: 1.0.1
- resolve-from: 4.0.0
+ inline-style-parser@0.2.7: {}
+
+ internmap@1.0.1: {}
+
+ internmap@2.0.3: {}
- imurmurhash@0.1.4: {}
+ is-alphabetical@2.0.1: {}
- internal-slot@1.1.0:
+ is-alphanumerical@2.0.1:
dependencies:
- es-errors: 1.3.0
- hasown: 2.0.2
- side-channel: 1.1.0
+ is-alphabetical: 2.0.1
+ is-decimal: 2.0.1
- is-array-buffer@3.0.5:
+ is-decimal@2.0.1: {}
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-fullwidth-code-point@5.1.0:
dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- get-intrinsic: 1.3.0
+ get-east-asian-width: 1.4.0
- is-async-function@2.1.1:
+ is-glob@4.0.3:
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
+ is-extglob: 2.1.1
+
+ is-hexadecimal@2.0.1: {}
- is-bigint@1.1.0:
+ is-node-process@1.2.0: {}
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@4.1.0: {}
+
+ is-subdir@1.2.0:
dependencies:
- has-bigints: 1.1.0
+ better-path-resolve: 1.0.0
+
+ is-windows@1.0.2: {}
+
+ isexe@2.0.0: {}
+
+ istanbul-lib-coverage@3.2.2: {}
- is-boolean-object@1.2.2:
+ istanbul-lib-report@3.0.1:
dependencies:
- call-bound: 1.0.4
- has-tostringtag: 1.0.2
+ istanbul-lib-coverage: 3.2.2
+ make-dir: 4.0.0
+ supports-color: 7.2.0
- is-callable@1.2.7: {}
+ istanbul-lib-source-maps@5.0.6:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ debug: 4.4.3
+ istanbul-lib-coverage: 3.2.2
+ transitivePeerDependencies:
+ - supports-color
- is-core-module@2.16.1:
+ istanbul-reports@3.2.0:
dependencies:
- hasown: 2.0.2
+ html-escaper: 2.0.2
+ istanbul-lib-report: 3.0.1
- is-data-view@1.0.2:
+ jiti@2.6.1: {}
+
+ joycon@3.1.1: {}
+
+ js-tokens@9.0.1: {}
+
+ js-yaml@3.14.2:
dependencies:
- call-bound: 1.0.4
- get-intrinsic: 1.3.0
- is-typed-array: 1.1.15
+ argparse: 1.0.10
+ esprima: 4.0.1
- is-date-object@1.1.0:
+ js-yaml@4.1.1:
dependencies:
- call-bound: 1.0.4
- has-tostringtag: 1.0.2
+ argparse: 2.0.1
- is-extglob@2.1.1: {}
+ jsonfile@4.0.0:
+ optionalDependencies:
+ graceful-fs: 4.2.11
- is-finalizationregistry@1.1.1:
+ jsonfile@6.2.0:
dependencies:
- call-bound: 1.0.4
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
- is-fullwidth-code-point@3.0.0: {}
+ katex@0.16.25:
+ dependencies:
+ commander: 8.3.0
- is-fullwidth-code-point@4.0.0: {}
+ khroma@2.1.0: {}
- is-fullwidth-code-point@5.0.0:
+ kolorist@1.8.0: {}
+
+ langium@3.3.1:
dependencies:
- get-east-asian-width: 1.3.0
+ chevrotain: 11.0.3
+ chevrotain-allstar: 0.3.1(chevrotain@11.0.3)
+ vscode-languageserver: 9.0.1
+ vscode-languageserver-textdocument: 1.0.12
+ vscode-uri: 3.0.8
+
+ layout-base@1.0.2: {}
+
+ layout-base@2.0.1: {}
+
+ lightningcss-android-arm64@1.30.2:
+ optional: true
+
+ lightningcss-darwin-arm64@1.30.2:
+ optional: true
+
+ lightningcss-darwin-x64@1.30.2:
+ optional: true
+
+ lightningcss-freebsd-x64@1.30.2:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.30.2:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.30.2:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.30.2:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.30.2:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.30.2:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.30.2:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.30.2:
+ optional: true
- is-generator-function@1.1.0:
+ lightningcss@1.30.2:
dependencies:
- call-bound: 1.0.4
- get-proto: 1.0.1
- has-tostringtag: 1.0.2
- safe-regex-test: 1.1.0
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.30.2
+ lightningcss-darwin-arm64: 1.30.2
+ lightningcss-darwin-x64: 1.30.2
+ lightningcss-freebsd-x64: 1.30.2
+ lightningcss-linux-arm-gnueabihf: 1.30.2
+ lightningcss-linux-arm64-gnu: 1.30.2
+ lightningcss-linux-arm64-musl: 1.30.2
+ lightningcss-linux-x64-gnu: 1.30.2
+ lightningcss-linux-x64-musl: 1.30.2
+ lightningcss-win32-arm64-msvc: 1.30.2
+ lightningcss-win32-x64-msvc: 1.30.2
- is-glob@4.0.3:
+ lilconfig@3.1.3: {}
+
+ lines-and-columns@1.2.4: {}
+
+ lint-staged@16.2.7:
dependencies:
- is-extglob: 2.1.1
+ commander: 14.0.2
+ listr2: 9.0.5
+ micromatch: 4.0.8
+ nano-spawn: 2.0.0
+ pidtree: 0.6.0
+ string-argv: 0.3.2
+ yaml: 2.8.1
- is-map@2.0.3: {}
+ listr2@9.0.5:
+ dependencies:
+ cli-truncate: 5.1.1
+ colorette: 2.0.20
+ eventemitter3: 5.0.1
+ log-update: 6.1.0
+ rfdc: 1.4.1
+ wrap-ansi: 9.0.2
- is-negative-zero@2.0.3: {}
+ load-tsconfig@0.2.5: {}
- is-node-process@1.2.0: {}
+ local-pkg@1.1.2:
+ dependencies:
+ mlly: 1.8.0
+ pkg-types: 2.3.0
+ quansync: 0.2.11
- is-number-object@1.1.1:
+ locate-path@5.0.0:
dependencies:
- call-bound: 1.0.4
- has-tostringtag: 1.0.2
+ p-locate: 4.1.0
- is-number@7.0.0: {}
+ lodash-es@4.17.21: {}
+
+ lodash.get@4.4.2: {}
+
+ lodash.isequal@4.5.0: {}
- is-regex@1.2.1:
+ lodash.merge@4.6.2: {}
+
+ lodash.startcase@4.4.0: {}
+
+ log-update@6.1.0:
dependencies:
- call-bound: 1.0.4
- gopd: 1.2.0
- has-tostringtag: 1.0.2
- hasown: 2.0.2
+ ansi-escapes: 7.2.0
+ cli-cursor: 5.0.0
+ slice-ansi: 7.1.2
+ strip-ansi: 7.1.2
+ wrap-ansi: 9.0.2
- is-set@2.0.3: {}
+ longest-streak@3.1.0: {}
- is-shared-array-buffer@1.0.4:
+ lru-cache@11.2.2: {}
+
+ lucide-react@0.552.0(react@19.2.0):
dependencies:
- call-bound: 1.0.4
+ react: 19.2.0
- is-stream@3.0.0: {}
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
- is-string@1.1.1:
+ magicast@0.3.5:
dependencies:
- call-bound: 1.0.4
- has-tostringtag: 1.0.2
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ source-map-js: 1.2.1
- is-subdir@1.2.0:
+ make-dir@4.0.0:
dependencies:
- better-path-resolve: 1.0.0
+ semver: 7.7.3
+
+ markdown-extensions@2.0.0: {}
+
+ markdown-table@3.0.4: {}
+
+ marked@16.4.2: {}
- is-symbol@1.1.1:
+ mdast-util-find-and-replace@3.0.2:
dependencies:
- call-bound: 1.0.4
- has-symbols: 1.1.0
- safe-regex-test: 1.1.0
+ '@types/mdast': 4.0.4
+ escape-string-regexp: 5.0.0
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
- is-typed-array@1.1.15:
+ mdast-util-from-markdown@2.0.2:
dependencies:
- which-typed-array: 1.1.19
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ decode-named-character-reference: 1.2.0
+ devlop: 1.1.0
+ mdast-util-to-string: 4.0.0
+ micromark: 4.0.2
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-decode-string: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-stringify-position: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
- is-weakmap@2.0.2: {}
+ mdast-util-gfm-autolink-literal@2.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-find-and-replace: 3.0.2
+ micromark-util-character: 2.1.1
- is-weakref@1.1.1:
+ mdast-util-gfm-footnote@2.1.0:
dependencies:
- call-bound: 1.0.4
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ micromark-util-normalize-identifier: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
- is-weakset@2.0.4:
+ mdast-util-gfm-strikethrough@2.0.0:
dependencies:
- call-bound: 1.0.4
- get-intrinsic: 1.3.0
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- is-windows@1.0.2: {}
+ mdast-util-gfm-table@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ markdown-table: 3.0.4
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- isarray@2.0.5: {}
+ mdast-util-gfm-task-list-item@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- isexe@2.0.0: {}
+ mdast-util-gfm@3.1.0:
+ dependencies:
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm-autolink-literal: 2.0.1
+ mdast-util-gfm-footnote: 2.1.0
+ mdast-util-gfm-strikethrough: 2.0.0
+ mdast-util-gfm-table: 2.0.0
+ mdast-util-gfm-task-list-item: 2.0.0
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- istanbul-lib-coverage@3.2.2: {}
+ mdast-util-mdx-expression@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- istanbul-lib-report@3.0.1:
+ mdast-util-mdx-jsx@3.2.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ parse-entities: 4.0.2
+ stringify-entities: 4.0.4
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx@3.0.0:
dependencies:
- istanbul-lib-coverage: 3.2.2
- make-dir: 4.0.0
- supports-color: 7.2.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-mdxjs-esm: 2.0.1
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
- istanbul-lib-source-maps@5.0.6:
+ mdast-util-mdxjs-esm@2.0.1:
dependencies:
- '@jridgewell/trace-mapping': 0.3.29
- debug: 4.4.1
- istanbul-lib-coverage: 3.2.2
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
transitivePeerDependencies:
- supports-color
- istanbul-reports@3.1.7:
+ mdast-util-phrasing@4.1.0:
dependencies:
- html-escaper: 2.0.2
- istanbul-lib-report: 3.0.1
+ '@types/mdast': 4.0.4
+ unist-util-is: 6.0.1
- jackspeak@3.4.3:
+ mdast-util-to-hast@13.2.1:
dependencies:
- '@isaacs/cliui': 8.0.2
- optionalDependencies:
- '@pkgjs/parseargs': 0.11.0
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.3.0
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.1
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
- jackspeak@4.1.1:
+ mdast-util-to-markdown@2.1.2:
dependencies:
- '@isaacs/cliui': 8.0.2
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ longest-streak: 3.1.0
+ mdast-util-phrasing: 4.1.0
+ mdast-util-to-string: 4.0.0
+ micromark-util-classify-character: 2.0.1
+ micromark-util-decode-string: 2.0.1
+ unist-util-visit: 5.0.0
+ zwitch: 2.0.4
- joycon@3.1.1: {}
+ mdast-util-to-string@4.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+
+ merge2@1.4.1: {}
- js-tokens@9.0.1: {}
+ mermaid@11.12.1:
+ dependencies:
+ '@braintree/sanitize-url': 7.1.1
+ '@iconify/utils': 3.0.2
+ '@mermaid-js/parser': 0.6.3
+ '@types/d3': 7.4.3
+ cytoscape: 3.33.1
+ cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.1)
+ cytoscape-fcose: 2.2.0(cytoscape@3.33.1)
+ d3: 7.9.0
+ d3-sankey: 0.12.3
+ dagre-d3-es: 7.0.13
+ dayjs: 1.11.19
+ dompurify: 3.3.0
+ katex: 0.16.25
+ khroma: 2.1.0
+ lodash-es: 4.17.21
+ marked: 16.4.2
+ roughjs: 4.6.6
+ stylis: 4.3.6
+ ts-dedent: 2.2.0
+ uuid: 11.1.0
+ transitivePeerDependencies:
+ - supports-color
- js-yaml@3.14.1:
+ micromark-core-commonmark@2.0.3:
+ dependencies:
+ decode-named-character-reference: 1.2.0
+ devlop: 1.1.0
+ micromark-factory-destination: 2.0.1
+ micromark-factory-label: 2.0.1
+ micromark-factory-space: 2.0.1
+ micromark-factory-title: 2.0.1
+ micromark-factory-whitespace: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-html-tag-name: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-footnote@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-strikethrough@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-table@2.1.1:
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-tagfilter@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-task-list-item@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm@3.0.0:
+ dependencies:
+ micromark-extension-gfm-autolink-literal: 2.1.0
+ micromark-extension-gfm-footnote: 2.1.0
+ micromark-extension-gfm-strikethrough: 2.1.0
+ micromark-extension-gfm-table: 2.1.1
+ micromark-extension-gfm-tagfilter: 2.0.0
+ micromark-extension-gfm-task-list-item: 2.1.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-mdx-expression@3.0.1:
dependencies:
- argparse: 1.0.10
- esprima: 4.0.1
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- js-yaml@4.1.0:
+ micromark-extension-mdx-jsx@3.0.2:
dependencies:
- argparse: 2.0.1
-
- json-buffer@3.0.1: {}
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ micromark-factory-mdx-expression: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
- json-schema-traverse@0.4.1: {}
+ micromark-extension-mdx-md@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.2
- json-stable-stringify-without-jsonify@1.0.1: {}
+ micromark-extension-mdxjs-esm@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
- json5@1.0.2:
+ micromark-extension-mdxjs@3.0.0:
dependencies:
- minimist: 1.2.8
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ micromark-extension-mdx-expression: 3.0.1
+ micromark-extension-mdx-jsx: 3.0.2
+ micromark-extension-mdx-md: 2.0.0
+ micromark-extension-mdxjs-esm: 3.0.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.2
- jsonfile@4.0.0:
- optionalDependencies:
- graceful-fs: 4.2.11
+ micromark-factory-destination@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- keyv@4.5.4:
+ micromark-factory-label@2.0.1:
dependencies:
- json-buffer: 3.0.1
+ devlop: 1.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- levn@0.4.1:
+ micromark-factory-mdx-expression@2.0.3:
dependencies:
- prelude-ls: 1.2.1
- type-check: 0.4.0
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.3
- lilconfig@3.1.3: {}
+ micromark-factory-space@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-types: 2.0.2
- lines-and-columns@1.2.4: {}
+ micromark-factory-title@2.0.1:
+ dependencies:
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- lint-staged@15.5.2:
+ micromark-factory-whitespace@2.0.1:
dependencies:
- chalk: 5.4.1
- commander: 13.1.0
- debug: 4.4.1
- execa: 8.0.1
- lilconfig: 3.1.3
- listr2: 8.3.3
- micromatch: 4.0.8
- pidtree: 0.6.0
- string-argv: 0.3.2
- yaml: 2.8.0
- transitivePeerDependencies:
- - supports-color
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- listr2@8.3.3:
+ micromark-util-character@2.1.1:
dependencies:
- cli-truncate: 4.0.0
- colorette: 2.0.20
- eventemitter3: 5.0.1
- log-update: 6.1.0
- rfdc: 1.4.1
- wrap-ansi: 9.0.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- load-tsconfig@0.2.5: {}
+ micromark-util-chunked@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
- locate-path@5.0.0:
+ micromark-util-classify-character@2.0.1:
dependencies:
- p-locate: 4.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- locate-path@6.0.0:
+ micromark-util-combine-extensions@2.0.1:
dependencies:
- p-locate: 5.0.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-types: 2.0.2
- lodash.merge@4.6.2: {}
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ dependencies:
+ micromark-util-symbol: 2.0.1
- lodash.sortby@4.7.0: {}
+ micromark-util-decode-string@2.0.1:
+ dependencies:
+ decode-named-character-reference: 1.2.0
+ micromark-util-character: 2.1.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-symbol: 2.0.1
- lodash.startcase@4.4.0: {}
+ micromark-util-encode@2.0.1: {}
- log-update@6.1.0:
+ micromark-util-events-to-acorn@2.0.3:
dependencies:
- ansi-escapes: 7.0.0
- cli-cursor: 5.0.0
- slice-ansi: 7.1.0
- strip-ansi: 7.1.0
- wrap-ansi: 9.0.0
-
- loupe@3.1.4: {}
+ '@types/estree': 1.0.8
+ '@types/unist': 3.0.3
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ vfile-message: 4.0.3
- lru-cache@10.4.3: {}
+ micromark-util-html-tag-name@2.0.1: {}
- lru-cache@11.1.0: {}
+ micromark-util-normalize-identifier@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
- magic-string@0.30.17:
+ micromark-util-resolve-all@2.0.1:
dependencies:
- '@jridgewell/sourcemap-codec': 1.5.4
+ micromark-util-types: 2.0.2
- magicast@0.3.5:
+ micromark-util-sanitize-uri@2.0.1:
dependencies:
- '@babel/parser': 7.28.0
- '@babel/types': 7.28.1
- source-map-js: 1.2.1
+ micromark-util-character: 2.1.1
+ micromark-util-encode: 2.0.1
+ micromark-util-symbol: 2.0.1
- make-dir@4.0.0:
+ micromark-util-subtokenize@2.1.0:
dependencies:
- semver: 7.7.2
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
- math-intrinsics@1.1.0: {}
+ micromark-util-symbol@2.0.1: {}
- merge-stream@2.0.0: {}
+ micromark-util-types@2.0.2: {}
- merge2@1.4.1: {}
+ micromark@4.0.2:
+ dependencies:
+ '@types/debug': 4.1.12
+ debug: 4.4.3
+ decode-named-character-reference: 1.2.0
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.3
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-encode: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-subtokenize: 2.1.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
micromatch@4.0.8:
dependencies:
braces: 3.0.3
picomatch: 2.3.1
- mimic-fn@4.0.0: {}
-
mimic-function@5.0.1: {}
- minimatch@10.0.3:
+ minimatch@10.1.1:
dependencies:
'@isaacs/brace-expansion': 5.0.0
- minimatch@3.1.2:
- dependencies:
- brace-expansion: 1.1.12
-
- minimatch@9.0.5:
- dependencies:
- brace-expansion: 2.0.2
-
- minimist@1.2.8: {}
-
minipass@7.1.2: {}
- mlly@1.7.4:
+ mlly@1.8.0:
dependencies:
acorn: 8.15.0
pathe: 2.0.3
@@ -4324,28 +7489,28 @@ snapshots:
ms@2.1.3: {}
- msw@2.10.4(typescript@5.8.3):
+ msw@2.12.3(@types/node@24.10.1)(typescript@5.9.3):
dependencies:
- '@bundled-es-modules/cookie': 2.0.1
- '@bundled-es-modules/statuses': 1.0.1
- '@bundled-es-modules/tough-cookie': 0.1.6
- '@inquirer/confirm': 5.1.13
- '@mswjs/interceptors': 0.39.2
+ '@inquirer/confirm': 5.1.21(@types/node@24.10.1)
+ '@mswjs/interceptors': 0.40.0
'@open-draft/deferred-promise': 2.2.0
- '@open-draft/until': 2.1.0
- '@types/cookie': 0.6.0
'@types/statuses': 2.0.6
- graphql: 16.11.0
+ cookie: 1.0.2
+ graphql: 16.12.0
headers-polyfill: 4.0.3
is-node-process: 1.2.0
outvariant: 1.4.3
path-to-regexp: 6.3.0
picocolors: 1.1.1
+ rettime: 0.7.0
+ statuses: 2.0.2
strict-event-emitter: 0.5.1
- type-fest: 4.41.0
+ tough-cookie: 6.0.0
+ type-fest: 5.2.0
+ until-async: 3.0.2
yargs: 17.7.2
optionalDependencies:
- typescript: 5.8.3
+ typescript: 5.9.3
transitivePeerDependencies:
- '@types/node'
@@ -4357,78 +7522,76 @@ snapshots:
object-assign: 4.1.1
thenify-all: 1.6.0
- nanoid@3.3.11: {}
-
- natural-compare@1.4.0: {}
-
- npm-run-path@5.3.0:
- dependencies:
- path-key: 4.0.0
-
- object-assign@4.1.1: {}
+ nano-spawn@2.0.0: {}
- object-inspect@1.13.4: {}
+ nanoid@3.3.11: {}
- object-keys@1.1.1: {}
+ negotiator@1.0.0: {}
- object.assign@4.1.7:
+ next-themes@0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
- 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
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
- object.fromentries@2.0.8:
+ next@16.0.1(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.0
- es-object-atoms: 1.1.1
+ '@next/env': 16.0.1
+ '@swc/helpers': 0.5.15
+ caniuse-lite: 1.0.30001757
+ postcss: 8.4.31
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ styled-jsx: 5.1.6(react@19.2.0)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 16.0.1
+ '@next/swc-darwin-x64': 16.0.1
+ '@next/swc-linux-arm64-gnu': 16.0.1
+ '@next/swc-linux-arm64-musl': 16.0.1
+ '@next/swc-linux-x64-gnu': 16.0.1
+ '@next/swc-linux-x64-musl': 16.0.1
+ '@next/swc-win32-arm64-msvc': 16.0.1
+ '@next/swc-win32-x64-msvc': 16.0.1
+ sharp: 0.34.5
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
- object.groupby@1.0.3:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-abstract: 1.24.0
+ npm-to-yarn@3.0.1: {}
- 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
+ object-assign@4.1.1: {}
- onetime@6.0.0:
+ octokit@5.0.5:
dependencies:
- mimic-fn: 4.0.0
+ '@octokit/app': 16.1.2
+ '@octokit/core': 7.0.6
+ '@octokit/oauth-app': 8.0.3
+ '@octokit/plugin-paginate-graphql': 6.0.0(@octokit/core@7.0.6)
+ '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6)
+ '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6)
+ '@octokit/plugin-retry': 8.0.3(@octokit/core@7.0.6)
+ '@octokit/plugin-throttling': 11.0.3(@octokit/core@7.0.6)
+ '@octokit/request-error': 7.1.0
+ '@octokit/types': 16.0.0
+ '@octokit/webhooks': 14.1.3
onetime@7.0.0:
dependencies:
mimic-function: 5.0.1
- optionator@0.9.4:
+ oniguruma-parser@0.12.1: {}
+
+ oniguruma-to-es@4.3.4:
dependencies:
- 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
+ oniguruma-parser: 0.12.1
+ regex: 6.0.1
+ regex-recursion: 6.0.2
- os-tmpdir@1.0.2: {}
+ openapi-types@12.1.3: {}
outdent@0.5.0: {}
outvariant@1.4.3: {}
- own-keys@1.0.1:
- dependencies:
- get-intrinsic: 1.3.0
- object-keys: 1.1.1
- safe-push-apply: 1.0.0
-
p-filter@2.1.0:
dependencies:
p-map: 2.1.0
@@ -4437,18 +7600,10 @@ snapshots:
dependencies:
p-try: 2.2.0
- p-limit@3.1.0:
- dependencies:
- yocto-queue: 0.1.0
-
p-locate@4.1.0:
dependencies:
p-limit: 2.3.0
- p-locate@5.0.0:
- dependencies:
- p-limit: 3.1.0
-
p-map@2.1.0: {}
p-try@2.2.0: {}
@@ -4457,38 +7612,41 @@ snapshots:
package-manager-detector@0.2.11:
dependencies:
- quansync: 0.2.10
+ quansync: 0.2.11
- parent-module@1.0.1:
- dependencies:
- callsites: 3.1.0
+ package-manager-detector@1.5.0: {}
- path-exists@4.0.0: {}
+ parse-entities@4.0.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ character-entities-legacy: 3.0.0
+ character-reference-invalid: 2.0.1
+ decode-named-character-reference: 1.2.0
+ is-alphanumerical: 2.0.1
+ is-decimal: 2.0.1
+ is-hexadecimal: 2.0.1
- path-key@3.1.1: {}
+ path-browserify@1.0.1: {}
- path-key@4.0.0: {}
+ path-data-parser@0.1.0: {}
- path-parse@1.0.7: {}
+ path-exists@4.0.0: {}
- path-scurry@1.11.1:
- dependencies:
- lru-cache: 10.4.3
- minipass: 7.1.2
+ path-key@3.1.1: {}
- path-scurry@2.0.0:
+ path-scurry@2.0.1:
dependencies:
- lru-cache: 11.1.0
+ lru-cache: 11.2.2
minipass: 7.1.2
path-to-regexp@6.3.0: {}
+ path-to-regexp@8.3.0: {}
+
path-type@4.0.0: {}
pathe@2.0.3: {}
- pathval@2.0.1: {}
-
picocolors@1.1.1: {}
picomatch@2.3.1: {}
@@ -4504,179 +7662,306 @@ snapshots:
pkg-types@1.3.1:
dependencies:
confbox: 0.1.8
- mlly: 1.7.4
+ mlly: 1.8.0
+ pathe: 2.0.3
+
+ pkg-types@2.3.0:
+ dependencies:
+ confbox: 0.2.2
+ exsolve: 1.0.8
pathe: 2.0.3
- possible-typed-array-names@1.1.0: {}
+ points-on-curve@0.2.0: {}
+
+ points-on-path@0.2.1:
+ dependencies:
+ path-data-parser: 0.1.0
+ points-on-curve: 0.2.0
- postcss-load-config@6.0.1(postcss@8.5.6)(yaml@2.8.0):
+ postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.8.1):
dependencies:
lilconfig: 3.1.3
optionalDependencies:
+ jiti: 2.6.1
postcss: 8.5.6
- yaml: 2.8.0
+ yaml: 2.8.1
- postcss@8.5.6:
+ postcss-selector-parser@7.1.0:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss@8.4.31:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
- prelude-ls@1.2.1: {}
-
- prettier-linter-helpers@1.0.0:
+ postcss@8.5.6:
dependencies:
- fast-diff: 1.3.0
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
prettier@2.8.8: {}
- prettier@3.6.2: {}
+ property-information@7.1.0: {}
+
+ quansync@0.2.11: {}
- psl@1.15.0:
+ queue-microtask@1.2.3: {}
+
+ react-dom@19.2.0(react@19.2.0):
dependencies:
- punycode: 2.3.1
+ react: 19.2.0
+ scheduler: 0.27.0
- punycode@2.3.1: {}
+ react-medium-image-zoom@5.4.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
+ dependencies:
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
- quansync@0.2.10: {}
+ react-remove-scroll-bar@2.3.8(@types/react@19.2.7)(react@19.2.0):
+ dependencies:
+ react: 19.2.0
+ react-style-singleton: 2.2.3(@types/react@19.2.7)(react@19.2.0)
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.7
- querystringify@2.2.0: {}
+ react-remove-scroll@2.7.1(@types/react@19.2.7)(react@19.2.0):
+ dependencies:
+ react: 19.2.0
+ react-remove-scroll-bar: 2.3.8(@types/react@19.2.7)(react@19.2.0)
+ react-style-singleton: 2.2.3(@types/react@19.2.7)(react@19.2.0)
+ tslib: 2.8.1
+ use-callback-ref: 1.3.3(@types/react@19.2.7)(react@19.2.0)
+ use-sidecar: 1.1.3(@types/react@19.2.7)(react@19.2.0)
+ optionalDependencies:
+ '@types/react': 19.2.7
- queue-microtask@1.2.3: {}
+ react-style-singleton@2.2.3(@types/react@19.2.7)(react@19.2.0):
+ dependencies:
+ get-nonce: 1.0.1
+ react: 19.2.0
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ react@19.2.0: {}
read-yaml-file@1.1.0:
dependencies:
graceful-fs: 4.2.11
- js-yaml: 3.14.1
+ js-yaml: 3.14.2
pify: 4.0.1
strip-bom: 3.0.0
readdirp@4.1.2: {}
- reflect.getprototypeof@1.0.10:
+ recma-build-jsx@1.0.0:
dependencies:
- 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
+ '@types/estree': 1.0.8
+ estree-util-build-jsx: 3.0.1
+ vfile: 6.0.3
- regexp.prototype.flags@1.5.4:
+ recma-jsx@1.0.1(acorn@8.15.0):
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
+ acorn: 8.15.0
+ acorn-jsx: 5.3.2(acorn@8.15.0)
+ estree-util-to-js: 2.0.0
+ recma-parse: 1.0.0
+ recma-stringify: 1.0.0
+ unified: 11.0.5
- require-directory@2.1.1: {}
+ recma-parse@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ esast-util-from-js: 2.0.1
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ recma-stringify@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-util-to-js: 2.0.0
+ unified: 11.0.5
+ vfile: 6.0.3
- requires-port@1.0.0: {}
+ regex-recursion@6.0.2:
+ dependencies:
+ regex-utilities: 2.3.0
- resolve-from@4.0.0: {}
+ regex-utilities@2.3.0: {}
- resolve-from@5.0.0: {}
+ regex@6.0.1:
+ dependencies:
+ regex-utilities: 2.3.0
+
+ rehype-recma@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/hast': 3.0.4
+ hast-util-to-estree: 3.1.3
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-gfm@4.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-gfm: 3.1.0
+ micromark-extension-gfm: 3.0.0
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-mdx@3.1.1:
+ dependencies:
+ mdast-util-mdx: 3.0.0
+ micromark-extension-mdxjs: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-parse@11.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.2
+ micromark-util-types: 2.0.2
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
- resolve@1.22.10:
+ remark-rehype@11.1.2:
dependencies:
- is-core-module: 2.16.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ mdast-util-to-hast: 13.2.1
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ remark-stringify@11.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-to-markdown: 2.1.2
+ unified: 11.0.5
+
+ remark@15.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ require-directory@2.1.1: {}
+
+ resolve-from@5.0.0: {}
restore-cursor@5.1.0:
dependencies:
onetime: 7.0.0
signal-exit: 4.1.0
+ rettime@0.7.0: {}
+
reusify@1.1.0: {}
rfdc@1.4.1: {}
- rimraf@6.0.1:
+ rimraf@6.1.2:
dependencies:
- glob: 11.0.3
+ glob: 13.0.0
package-json-from-dist: 1.0.1
- rollup@4.45.1:
+ robust-predicates@3.0.2: {}
+
+ rollup@4.53.3:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.45.1
- '@rollup/rollup-android-arm64': 4.45.1
- '@rollup/rollup-darwin-arm64': 4.45.1
- '@rollup/rollup-darwin-x64': 4.45.1
- '@rollup/rollup-freebsd-arm64': 4.45.1
- '@rollup/rollup-freebsd-x64': 4.45.1
- '@rollup/rollup-linux-arm-gnueabihf': 4.45.1
- '@rollup/rollup-linux-arm-musleabihf': 4.45.1
- '@rollup/rollup-linux-arm64-gnu': 4.45.1
- '@rollup/rollup-linux-arm64-musl': 4.45.1
- '@rollup/rollup-linux-loongarch64-gnu': 4.45.1
- '@rollup/rollup-linux-powerpc64le-gnu': 4.45.1
- '@rollup/rollup-linux-riscv64-gnu': 4.45.1
- '@rollup/rollup-linux-riscv64-musl': 4.45.1
- '@rollup/rollup-linux-s390x-gnu': 4.45.1
- '@rollup/rollup-linux-x64-gnu': 4.45.1
- '@rollup/rollup-linux-x64-musl': 4.45.1
- '@rollup/rollup-win32-arm64-msvc': 4.45.1
- '@rollup/rollup-win32-ia32-msvc': 4.45.1
- '@rollup/rollup-win32-x64-msvc': 4.45.1
+ '@rollup/rollup-android-arm-eabi': 4.53.3
+ '@rollup/rollup-android-arm64': 4.53.3
+ '@rollup/rollup-darwin-arm64': 4.53.3
+ '@rollup/rollup-darwin-x64': 4.53.3
+ '@rollup/rollup-freebsd-arm64': 4.53.3
+ '@rollup/rollup-freebsd-x64': 4.53.3
+ '@rollup/rollup-linux-arm-gnueabihf': 4.53.3
+ '@rollup/rollup-linux-arm-musleabihf': 4.53.3
+ '@rollup/rollup-linux-arm64-gnu': 4.53.3
+ '@rollup/rollup-linux-arm64-musl': 4.53.3
+ '@rollup/rollup-linux-loong64-gnu': 4.53.3
+ '@rollup/rollup-linux-ppc64-gnu': 4.53.3
+ '@rollup/rollup-linux-riscv64-gnu': 4.53.3
+ '@rollup/rollup-linux-riscv64-musl': 4.53.3
+ '@rollup/rollup-linux-s390x-gnu': 4.53.3
+ '@rollup/rollup-linux-x64-gnu': 4.53.3
+ '@rollup/rollup-linux-x64-musl': 4.53.3
+ '@rollup/rollup-openharmony-arm64': 4.53.3
+ '@rollup/rollup-win32-arm64-msvc': 4.53.3
+ '@rollup/rollup-win32-ia32-msvc': 4.53.3
+ '@rollup/rollup-win32-x64-gnu': 4.53.3
+ '@rollup/rollup-win32-x64-msvc': 4.53.3
fsevents: 2.3.3
- run-parallel@1.2.0:
- dependencies:
- queue-microtask: 1.2.3
-
- safe-array-concat@1.1.3:
+ roughjs@4.6.6:
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
+ hachure-fill: 0.5.2
+ path-data-parser: 0.1.0
+ points-on-curve: 0.2.0
+ points-on-path: 0.2.1
- safe-push-apply@1.0.0:
+ run-parallel@1.2.0:
dependencies:
- es-errors: 1.3.0
- isarray: 2.0.5
+ queue-microtask: 1.2.3
- safe-regex-test@1.1.0:
- dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-regex: 1.2.1
+ rw@1.3.3: {}
safer-buffer@2.1.2: {}
- semver@6.3.1: {}
+ sax@1.4.3: {}
- semver@7.7.2: {}
+ scheduler@0.27.0: {}
- set-function-length@1.2.2:
+ scroll-into-view-if-needed@3.1.0:
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
+ compute-scroll-into-view: 3.1.1
- 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
+ semver@7.7.3: {}
- set-proto@1.0.0:
+ sharp@0.34.5:
dependencies:
- dunder-proto: 1.0.1
- es-errors: 1.3.0
- es-object-atoms: 1.1.1
+ '@img/colour': 1.0.0
+ detect-libc: 2.1.2
+ semver: 7.7.3
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.34.5
+ '@img/sharp-darwin-x64': 0.34.5
+ '@img/sharp-libvips-darwin-arm64': 1.2.4
+ '@img/sharp-libvips-darwin-x64': 1.2.4
+ '@img/sharp-libvips-linux-arm': 1.2.4
+ '@img/sharp-libvips-linux-arm64': 1.2.4
+ '@img/sharp-libvips-linux-ppc64': 1.2.4
+ '@img/sharp-libvips-linux-riscv64': 1.2.4
+ '@img/sharp-libvips-linux-s390x': 1.2.4
+ '@img/sharp-libvips-linux-x64': 1.2.4
+ '@img/sharp-libvips-linuxmusl-arm64': 1.2.4
+ '@img/sharp-libvips-linuxmusl-x64': 1.2.4
+ '@img/sharp-linux-arm': 0.34.5
+ '@img/sharp-linux-arm64': 0.34.5
+ '@img/sharp-linux-ppc64': 0.34.5
+ '@img/sharp-linux-riscv64': 0.34.5
+ '@img/sharp-linux-s390x': 0.34.5
+ '@img/sharp-linux-x64': 0.34.5
+ '@img/sharp-linuxmusl-arm64': 0.34.5
+ '@img/sharp-linuxmusl-x64': 0.34.5
+ '@img/sharp-wasm32': 0.34.5
+ '@img/sharp-win32-arm64': 0.34.5
+ '@img/sharp-win32-ia32': 0.34.5
+ '@img/sharp-win32-x64': 0.34.5
+ optional: true
shebang-command@2.0.0:
dependencies:
@@ -4684,33 +7969,16 @@ snapshots:
shebang-regex@3.0.0: {}
- side-channel-list@1.0.0:
- dependencies:
- es-errors: 1.3.0
- object-inspect: 1.13.4
-
- side-channel-map@1.0.1:
+ shiki@3.15.0:
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
+ '@shikijs/core': 3.15.0
+ '@shikijs/engine-javascript': 3.15.0
+ '@shikijs/engine-oniguruma': 3.15.0
+ '@shikijs/langs': 3.15.0
+ '@shikijs/themes': 3.15.0
+ '@shikijs/types': 3.15.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
siginfo@2.0.0: {}
@@ -4718,21 +7986,16 @@ snapshots:
slash@3.0.0: {}
- slice-ansi@5.0.0:
+ slice-ansi@7.1.2:
dependencies:
- ansi-styles: 6.2.1
- is-fullwidth-code-point: 4.0.0
-
- slice-ansi@7.1.0:
- dependencies:
- ansi-styles: 6.2.1
- is-fullwidth-code-point: 5.0.0
+ ansi-styles: 6.2.3
+ is-fullwidth-code-point: 5.1.0
source-map-js@1.2.1: {}
- source-map@0.8.0-beta.0:
- dependencies:
- whatwg-url: 7.1.0
+ source-map@0.7.6: {}
+
+ space-separated-tokens@2.0.2: {}
spawndamnit@3.0.1:
dependencies:
@@ -4745,12 +8008,7 @@ snapshots:
statuses@2.0.2: {}
- std-env@3.9.0: {}
-
- stop-iteration-iterator@1.1.0:
- dependencies:
- es-errors: 1.3.0
- internal-slot: 1.1.0
+ std-env@3.10.0: {}
strict-event-emitter@0.5.1: {}
@@ -4762,86 +8020,80 @@ snapshots:
is-fullwidth-code-point: 3.0.0
strip-ansi: 6.0.1
- string-width@5.1.2:
- dependencies:
- eastasianwidth: 0.2.0
- emoji-regex: 9.2.2
- strip-ansi: 7.1.0
-
string-width@7.2.0:
dependencies:
- emoji-regex: 10.4.0
- get-east-asian-width: 1.3.0
- strip-ansi: 7.1.0
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.4.0
+ strip-ansi: 7.1.2
- string.prototype.trim@1.2.10:
+ string-width@8.1.0:
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
+ get-east-asian-width: 1.4.0
+ strip-ansi: 7.1.2
- string.prototype.trimend@1.0.9:
+ stringify-entities@4.0.4:
dependencies:
- call-bind: 1.0.8
- call-bound: 1.0.4
- define-properties: 1.2.1
- es-object-atoms: 1.1.1
-
- string.prototype.trimstart@1.0.8:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-object-atoms: 1.1.1
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
strip-ansi@6.0.1:
dependencies:
ansi-regex: 5.0.1
- strip-ansi@7.1.0:
+ strip-ansi@7.1.2:
dependencies:
- ansi-regex: 6.1.0
+ ansi-regex: 6.2.2
strip-bom@3.0.0: {}
- strip-final-newline@3.0.0: {}
+ style-to-js@1.1.21:
+ dependencies:
+ style-to-object: 1.0.14
- strip-json-comments@3.1.1: {}
+ style-to-object@1.0.14:
+ dependencies:
+ inline-style-parser: 0.2.7
- strip-literal@3.0.0:
+ styled-jsx@5.1.6(react@19.2.0):
dependencies:
- js-tokens: 9.0.1
+ client-only: 0.0.1
+ react: 19.2.0
+
+ stylis@4.3.6: {}
- sucrase@3.35.0:
+ sucrase@3.35.1:
dependencies:
- '@jridgewell/gen-mapping': 0.3.12
+ '@jridgewell/gen-mapping': 0.3.13
commander: 4.1.1
- glob: 10.4.5
lines-and-columns: 1.2.4
mz: 2.7.0
pirates: 4.0.7
+ tinyglobby: 0.2.15
ts-interface-checker: 0.1.13
supports-color@7.2.0:
dependencies:
has-flag: 4.0.0
- supports-preserve-symlinks-flag@1.0.0: {}
-
- synckit@0.11.8:
+ swagger-parser@10.0.3(openapi-types@12.1.3):
dependencies:
- '@pkgr/core': 0.2.7
+ '@apidevtools/swagger-parser': 10.0.3(openapi-types@12.1.3)
+ transitivePeerDependencies:
+ - openapi-types
- term-size@2.2.1: {}
+ tagged-tag@1.0.0: {}
+
+ tailwind-merge@3.4.0: {}
- test-exclude@7.0.1:
+ tailwindcss@4.1.17: {}
+
+ tailwindest@3.2.2:
dependencies:
- '@istanbuljs/schema': 0.1.3
- glob: 10.4.5
- minimatch: 9.0.5
+ clsx: 2.1.1
+
+ tapable@2.3.0: {}
+
+ term-size@2.2.1: {}
thenify-all@1.6.0:
dependencies:
@@ -4855,246 +8107,267 @@ snapshots:
tinyexec@0.3.2: {}
- tinyglobby@0.2.14:
+ tinyexec@1.0.2: {}
+
+ tinyglobby@0.2.15:
dependencies:
- fdir: 6.4.6(picomatch@4.0.3)
+ fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
- tinypool@1.1.1: {}
-
- tinyrainbow@2.0.0: {}
+ tinyrainbow@3.0.3: {}
- tinyspy@4.0.3: {}
+ tldts-core@7.0.19: {}
- tmp@0.0.33:
+ tldts@7.0.19:
dependencies:
- os-tmpdir: 1.0.2
+ tldts-core: 7.0.19
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
- tough-cookie@4.1.4:
- dependencies:
- psl: 1.15.0
- punycode: 2.3.1
- universalify: 0.2.0
- url-parse: 1.5.10
+ toad-cache@3.7.0: {}
- tr46@1.0.1:
+ tough-cookie@6.0.0:
dependencies:
- punycode: 2.3.1
+ tldts: 7.0.19
tree-kill@1.2.2: {}
- ts-api-utils@2.1.0(typescript@5.8.3):
- dependencies:
- typescript: 5.8.3
+ trim-lines@3.0.1: {}
+
+ trough@2.2.0: {}
+
+ ts-dedent@2.2.0: {}
ts-expect@1.3.0: {}
ts-interface-checker@0.1.13: {}
- tsconfck@3.1.6(typescript@5.8.3):
+ ts-morph@27.0.2:
+ dependencies:
+ '@ts-morph/common': 0.28.1
+ code-block-writer: 13.0.3
+
+ tsconfck@3.1.6(typescript@5.9.3):
optionalDependencies:
- typescript: 5.8.3
+ typescript: 5.9.3
- tsconfig-paths@3.15.0:
- dependencies:
- '@types/json5': 0.0.29
- json5: 1.0.2
- minimist: 1.2.8
- strip-bom: 3.0.0
+ tslib@2.8.1: {}
- tsup@8.5.0(postcss@8.5.6)(typescript@5.8.3)(yaml@2.8.0):
+ tsup@8.5.1(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1):
dependencies:
- bundle-require: 5.1.0(esbuild@0.25.6)
+ bundle-require: 5.1.0(esbuild@0.27.0)
cac: 6.7.14
chokidar: 4.0.3
consola: 3.4.2
- debug: 4.4.1
- esbuild: 0.25.6
+ debug: 4.4.3
+ esbuild: 0.27.0
fix-dts-default-cjs-exports: 1.0.1
joycon: 3.1.1
picocolors: 1.1.1
- postcss-load-config: 6.0.1(postcss@8.5.6)(yaml@2.8.0)
+ postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.8.1)
resolve-from: 5.0.0
- rollup: 4.45.1
- source-map: 0.8.0-beta.0
- sucrase: 3.35.0
+ rollup: 4.53.3
+ source-map: 0.7.6
+ sucrase: 3.35.1
tinyexec: 0.3.2
- tinyglobby: 0.2.14
+ tinyglobby: 0.2.15
tree-kill: 1.2.2
optionalDependencies:
postcss: 8.5.6
- typescript: 5.8.3
+ typescript: 5.9.3
transitivePeerDependencies:
- jiti
- supports-color
- tsx
- yaml
- turbo-darwin-64@2.5.4:
+ turbo-darwin-64@2.6.1:
optional: true
- turbo-darwin-arm64@2.5.4:
+ turbo-darwin-arm64@2.6.1:
optional: true
- turbo-linux-64@2.5.4:
+ turbo-linux-64@2.6.1:
optional: true
- turbo-linux-arm64@2.5.4:
+ turbo-linux-arm64@2.6.1:
optional: true
- turbo-windows-64@2.5.4:
+ turbo-windows-64@2.6.1:
optional: true
- turbo-windows-arm64@2.5.4:
+ turbo-windows-arm64@2.6.1:
optional: true
- turbo@2.5.4:
+ turbo@2.6.1:
optionalDependencies:
- turbo-darwin-64: 2.5.4
- turbo-darwin-arm64: 2.5.4
- turbo-linux-64: 2.5.4
- turbo-linux-arm64: 2.5.4
- turbo-windows-64: 2.5.4
- turbo-windows-arm64: 2.5.4
+ turbo-darwin-64: 2.6.1
+ turbo-darwin-arm64: 2.6.1
+ turbo-linux-64: 2.6.1
+ turbo-linux-arm64: 2.6.1
+ turbo-windows-64: 2.6.1
+ turbo-windows-arm64: 2.6.1
+
+ tw-animate-css@1.4.0: {}
+
+ twoslash-protocol@0.3.4: {}
+
+ twoslash@0.3.4(typescript@5.9.3):
+ dependencies:
+ '@typescript/vfs': 1.6.2(typescript@5.9.3)
+ twoslash-protocol: 0.3.4
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
- type-check@0.4.0:
+ type-fest@5.2.0:
dependencies:
- prelude-ls: 1.2.1
+ tagged-tag: 1.0.0
+
+ typescript@5.9.3: {}
+
+ ufo@1.6.1: {}
- type-fest@0.21.3: {}
+ undici-types@6.21.0: {}
- type-fest@4.41.0: {}
+ undici-types@7.16.0: {}
- typed-array-buffer@1.0.3:
+ unified@11.0.5:
dependencies:
- call-bound: 1.0.4
- es-errors: 1.3.0
- is-typed-array: 1.1.15
+ '@types/unist': 3.0.3
+ bail: 2.0.2
+ devlop: 1.1.0
+ extend: 3.0.2
+ is-plain-obj: 4.1.0
+ trough: 2.2.0
+ vfile: 6.0.3
- typed-array-byte-length@1.0.3:
+ unist-util-is@6.0.1:
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
+ '@types/unist': 3.0.3
- typed-array-byte-offset@1.0.4:
+ unist-util-position-from-estree@2.0.0:
dependencies:
- 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
+ '@types/unist': 3.0.3
- typed-array-length@1.0.7:
+ unist-util-position@5.0.0:
dependencies:
- 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
+ '@types/unist': 3.0.3
- typescript@5.8.3: {}
+ unist-util-remove-position@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-visit: 5.0.0
- ufo@1.6.1: {}
+ unist-util-stringify-position@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
- unbox-primitive@1.1.0:
+ unist-util-visit-parents@6.0.2:
dependencies:
- call-bound: 1.0.4
- has-bigints: 1.1.0
- has-symbols: 1.1.0
- which-boxed-primitive: 1.1.1
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+
+ unist-util-visit@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
+
+ universal-github-app-jwt@2.2.2: {}
+
+ universal-user-agent@7.0.3: {}
universalify@0.1.2: {}
- universalify@0.2.0: {}
+ universalify@2.0.1: {}
+
+ until-async@3.0.2: {}
+
+ use-callback-ref@1.3.3(@types/react@19.2.7)(react@19.2.0):
+ dependencies:
+ react: 19.2.0
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.7
- uri-js@4.4.1:
+ use-sidecar@1.1.3(@types/react@19.2.7)(react@19.2.0):
dependencies:
- punycode: 2.3.1
+ detect-node-es: 1.1.0
+ react: 19.2.0
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.7
+
+ util-deprecate@1.0.2: {}
+
+ uuid@11.1.0: {}
+
+ validator@13.15.23: {}
- url-parse@1.5.10:
+ vfile-message@4.0.3:
dependencies:
- querystringify: 2.2.0
- requires-port: 1.0.0
+ '@types/unist': 3.0.3
+ unist-util-stringify-position: 4.0.0
- vite-node@3.2.4(yaml@2.8.0):
+ vfile@6.0.3:
dependencies:
- cac: 6.7.14
- debug: 4.4.1
- es-module-lexer: 1.7.0
- pathe: 2.0.3
- vite: 7.0.4(yaml@2.8.0)
- transitivePeerDependencies:
- - '@types/node'
- - jiti
- - less
- - lightningcss
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - supports-color
- - terser
- - tsx
- - yaml
+ '@types/unist': 3.0.3
+ vfile-message: 4.0.3
- vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.4(yaml@2.8.0)):
+ vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)):
dependencies:
- debug: 4.4.1
+ debug: 4.4.3
globrex: 0.1.2
- tsconfck: 3.1.6(typescript@5.8.3)
+ tsconfck: 3.1.6(typescript@5.9.3)
optionalDependencies:
- vite: 7.0.4(yaml@2.8.0)
+ vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
- typescript
- vite@7.0.4(yaml@2.8.0):
+ vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1):
dependencies:
- esbuild: 0.25.6
- fdir: 6.4.6(picomatch@4.0.3)
+ esbuild: 0.25.12
+ fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
- rollup: 4.45.1
- tinyglobby: 0.2.14
+ rollup: 4.53.3
+ tinyglobby: 0.2.15
optionalDependencies:
+ '@types/node': 24.10.1
fsevents: 2.3.3
- yaml: 2.8.0
-
- vitest@3.2.4(msw@2.10.4(typescript@5.8.3))(yaml@2.8.0):
- dependencies:
- '@types/chai': 5.2.2
- '@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(msw@2.10.4(typescript@5.8.3))(vite@7.0.4(yaml@2.8.0))
- '@vitest/pretty-format': 3.2.4
- '@vitest/runner': 3.2.4
- '@vitest/snapshot': 3.2.4
- '@vitest/spy': 3.2.4
- '@vitest/utils': 3.2.4
- chai: 5.2.1
- debug: 4.4.1
+ jiti: 2.6.1
+ lightningcss: 1.30.2
+ yaml: 2.8.1
+
+ vitest@4.0.13(@types/debug@4.1.12)(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(msw@2.12.3(@types/node@24.10.1)(typescript@5.9.3))(yaml@2.8.1):
+ dependencies:
+ '@vitest/expect': 4.0.13
+ '@vitest/mocker': 4.0.13(msw@2.12.3(@types/node@24.10.1)(typescript@5.9.3))(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1))
+ '@vitest/pretty-format': 4.0.13
+ '@vitest/runner': 4.0.13
+ '@vitest/snapshot': 4.0.13
+ '@vitest/spy': 4.0.13
+ '@vitest/utils': 4.0.13
+ debug: 4.4.3
+ es-module-lexer: 1.7.0
expect-type: 1.2.2
- magic-string: 0.30.17
+ magic-string: 0.30.21
pathe: 2.0.3
picomatch: 4.0.3
- std-env: 3.9.0
+ std-env: 3.10.0
tinybench: 2.9.0
tinyexec: 0.3.2
- tinyglobby: 0.2.14
- tinypool: 1.1.1
- tinyrainbow: 2.0.0
- vite: 7.0.4(yaml@2.8.0)
- vite-node: 3.2.4(yaml@2.8.0)
+ tinyglobby: 0.2.15
+ tinyrainbow: 3.0.3
+ vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.1)
why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/debug': 4.1.12
+ '@types/node': 24.10.1
transitivePeerDependencies:
- jiti
- less
@@ -5109,54 +8382,22 @@ snapshots:
- tsx
- yaml
- webidl-conversions@4.0.2: {}
+ vscode-jsonrpc@8.2.0: {}
- whatwg-url@7.1.0:
+ vscode-languageserver-protocol@3.17.5:
dependencies:
- lodash.sortby: 4.7.0
- tr46: 1.0.1
- webidl-conversions: 4.0.2
+ vscode-jsonrpc: 8.2.0
+ vscode-languageserver-types: 3.17.5
- which-boxed-primitive@1.1.1:
- dependencies:
- 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
+ vscode-languageserver-textdocument@1.0.12: {}
- 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.0
- 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
+ vscode-languageserver-types@3.17.5: {}
- which-collection@1.0.2:
+ vscode-languageserver@9.0.1:
dependencies:
- is-map: 2.0.3
- is-set: 2.0.3
- is-weakmap: 2.0.2
- is-weakset: 2.0.4
+ vscode-languageserver-protocol: 3.17.5
- 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
+ vscode-uri@3.0.8: {}
which@2.0.2:
dependencies:
@@ -5167,8 +8408,6 @@ snapshots:
siginfo: 2.0.0
stackback: 0.0.2
- word-wrap@1.2.5: {}
-
wrap-ansi@6.2.0:
dependencies:
ansi-styles: 4.3.0
@@ -5181,21 +8420,19 @@ snapshots:
string-width: 4.2.3
strip-ansi: 6.0.1
- wrap-ansi@8.1.0:
+ wrap-ansi@9.0.2:
dependencies:
- ansi-styles: 6.2.1
- string-width: 5.1.2
- strip-ansi: 7.1.0
+ ansi-styles: 6.2.3
+ string-width: 7.2.0
+ strip-ansi: 7.1.2
- wrap-ansi@9.0.0:
+ xml-js@1.6.11:
dependencies:
- ansi-styles: 6.2.1
- string-width: 7.2.0
- strip-ansi: 7.1.0
+ sax: 1.4.3
y18n@5.0.8: {}
- yaml@2.8.0: {}
+ yaml@2.8.1: {}
yargs-parser@21.1.1: {}
@@ -5209,6 +8446,16 @@ snapshots:
y18n: 5.0.8
yargs-parser: 21.1.1
- yocto-queue@0.1.0: {}
+ yoctocolors-cjs@2.1.3: {}
+
+ z-schema@5.0.5:
+ dependencies:
+ lodash.get: 4.4.2
+ lodash.isequal: 4.5.0
+ validator: 13.15.23
+ optionalDependencies:
+ commander: 9.5.0
+
+ zod@4.1.13: {}
- yoctocolors-cjs@2.1.2: {}
+ zwitch@2.0.4: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 9e07fb6..f41c583 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,3 +1,3 @@
packages:
- - "packages/**"
- - "benchmark/**"
+ - app/*
+ - packages/*
\ No newline at end of file
diff --git a/todo.md b/todo.md
deleted file mode 100644
index 147d56f..0000000
--- a/todo.md
+++ /dev/null
@@ -1,5 +0,0 @@
-1. [ ] Header์ ๋ํ type ์ ์ method ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์
-
- - Authorization header, bearer token ๋ฑ์ structure.
-
-2. [ ] ๋ฐ๋ณต ์์
์ Middleware plugin ์์คํ
์ ๋์
ํ์ฌ, ์๋ํ ํ๊ณ eco-system์ ๊ตฌ์ถํด์ผ ํจ.
diff --git a/tsconfig.json b/tsconfig.json
index 983412b..c652226 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,19 +1,4 @@
{
- "compilerOptions": {
- "strict": true,
- "target": "esnext",
- "lib": ["dom", "dom.iterable", "esnext", "es2020"],
- "baseUrl": ".",
- "esModuleInterop": true,
- "moduleResolution": "node",
- "noUncheckedIndexedAccess": true,
- "exactOptionalPropertyTypes": true,
- "forceConsistentCasingInFileNames": true,
- "noEmit": true,
- "skipLibCheck": true,
- "noImplicitOverride": true,
- "strictNullChecks": true
- },
- "include": ["packages"],
- "exclude": ["node_modules", "dist", "site", "benchmarks"]
+ "extends": "@freestylejs/config/tsconfig",
+ "include": ["packages"]
}
diff --git a/turbo.json b/turbo.json
index e9b5b25..6577611 100644
--- a/turbo.json
+++ b/turbo.json
@@ -1,26 +1,25 @@
{
"$schema": "https://turbo.build/schema.json",
"ui": "tui",
+ "concurrency": "10",
"tasks": {
- "build": {
- "dependsOn": ["^build"],
- "outputs": [".next/**", "!.next/cache/**", "dist/**"]
+ "dev": {
+ "cache": true,
+ "persistent": true
},
- "test": {
+ "build": {
+ "cache": false,
+ "persistent": false,
"dependsOn": ["^build"],
- "outputs": []
- },
- "lint": {
- "outputs": []
- },
- "dev": {
- "cache": false
+ "outputs": ["dist/**"]
},
"start": {
- "cache": false
+ "cache": true
},
- "clean": {
- "cache": false
+
+ "ts:typecheck": {
+ "outputs": [],
+ "dependsOn": ["^ts:typecheck"]
}
}
}
diff --git a/vitest.config.ts b/vitest.config.ts
index d9ef5aa..ec22a0e 100644
--- a/vitest.config.ts
+++ b/vitest.config.ts
@@ -6,6 +6,10 @@ export default defineConfig({
plugins: [tsconfigPaths()],
test: {
root: 'packages',
+ coverage: {
+ reporter: ['html', 'text'],
+ provider: 'v8',
+ },
},
resolve: {},
})