(null);
+
+ useImperativeHandle(ref, () => ({
+ export: async (options) => {
+ if (!superdocRef.current) throw new Error('Editor not ready');
+ return await superdocRef.current.export(options);
+ },
+ setMode: (mode) => {
+ superdocRef.current?.setDocumentMode(mode);
+ },
+ getHTML: () => {
+ return superdocRef.current?.getHTML() || [];
+ }
+ }));
+
+ useEffect(() => {
+ if (!containerRef.current) return;
+
+ const config: SuperDocConfig = {
+ selector: containerRef.current,
+ document,
+ user: {
+ name: userId,
+ email: `${userId}@company.com`
+ },
+ onReady: () => onReady?.(superdocRef.current!)
+ };
+
+ superdocRef.current = new SuperDoc(config);
+
+ return () => {
+ superdocRef.current = null;
+ };
+ }, [document, userId, onReady]);
+
+ return
;
+ }
+);
+```
+
+## SSR Support
+
+For Next.js or other SSR frameworks:
+
+```jsx
+import dynamic from 'next/dynamic';
+
+const DocEditor = dynamic(
+ () => import('./DocEditor'),
+ {
+ ssr: false,
+ loading: () => Loading editor...
+ }
+);
+
+// Or manually check for client-side
+function SafeEditor(props) {
+ const [mounted, setMounted] = useState(false);
+
+ useEffect(() => {
+ setMounted(true);
+ }, []);
+
+ if (!mounted) return Loading...
;
+
+ return ;
+}
+```
+
+## Custom Hook
+
+```jsx
+function useSuperDoc(config) {
+ const [ready, setReady] = useState(false);
+ const superdocRef = useRef(null);
+
+ useEffect(() => {
+ if (!config.selector) return;
+
+ superdocRef.current = new SuperDoc({
+ ...config,
+ onReady: () => {
+ setReady(true);
+ config.onReady?.();
+ }
+ });
+
+ return () => {
+ superdocRef.current = null;
+ setReady(false);
+ };
+ }, [config.selector, config.document]);
+
+ return {
+ editor: superdocRef.current,
+ ready,
+ export: (options) => superdocRef.current?.export(options),
+ setMode: (mode) => superdocRef.current?.setDocumentMode(mode)
+ };
+}
+```
+
+## Next Steps
+
+- [Vue Integration](/getting-started/frameworks/vue) - Vue setup
+- [API Reference](/core/superdoc/configuration) - Configuration options
+- [Examples](https://github.com/Harbour-Enterprises/SuperDoc/tree/main/examples/react-example) - Working examples
diff --git a/apps/docs/getting-started/frameworks/ruby-on-rails.mdx b/apps/docs/getting-started/frameworks/ruby-on-rails.mdx
new file mode 100644
index 0000000000..f821c35f6c
--- /dev/null
+++ b/apps/docs/getting-started/frameworks/ruby-on-rails.mdx
@@ -0,0 +1,141 @@
+---
+title: Ruby on Rails
+keywords: "rails docx editor, ruby word editor, superdoc rails, ruby document editor, rails integration"
+---
+
+SuperDoc integrates with Rails for document storage and serving.
+
+## Installation
+
+Add to your layout:
+
+```erb
+
+<%= stylesheet_link_tag "https://cdn.jsdelivr.net/npm/@harbour-enterprises/superdoc/dist/style.css" %>
+```
+
+## Basic view
+
+```erb
+
+
+
+
+```
+
+## Active Storage integration
+
+```ruby
+# app/models/document.rb
+class Document < ApplicationRecord
+ has_one_attached :file
+ belongs_to :user
+
+ validates :file, content_type: ['application/vnd.openxmlformats-officedocument.wordprocessingml.document']
+end
+
+# app/controllers/documents_controller.rb
+class DocumentsController < ApplicationController
+ before_action :authenticate_user!
+
+ def show
+ @document = Document.find(params[:id])
+
+ respond_to do |format|
+ format.html
+ format.docx { redirect_to rails_blob_path(@document.file, disposition: "inline") }
+ end
+ end
+
+ def create
+ @document = current_user.documents.build(document_params)
+
+ if @document.save
+ redirect_to edit_document_path(@document)
+ else
+ render :new
+ end
+ end
+
+ private
+
+ def document_params
+ params.require(:document).permit(:file)
+ end
+end
+```
+
+## Stimulus controller
+
+```javascript
+// app/javascript/controllers/document_editor_controller.js
+import { Controller } from "@hotwired/stimulus"
+
+export default class extends Controller {
+ static values = {
+ url: String,
+ user: Object
+ }
+
+ async connect() {
+ const { SuperDoc } = await import('@harbour-enterprises/superdoc');
+
+ this.superdoc = new SuperDoc({
+ selector: this.element,
+ document: this.urlValue,
+ user: this.userValue
+ });
+ }
+
+ disconnect() {
+ this.superdoc = null;
+ }
+
+ async export() {
+ if (this.superdoc) {
+ await this.superdoc.export();
+ }
+ }
+}
+```
+
+```erb
+
+
+
+
+Export
+```
+
+## Upload handling
+
+```ruby
+# config/routes.rb
+resources :documents do
+ member do
+ post :upload
+ end
+end
+
+# app/controllers/documents_controller.rb
+def upload
+ @document = Document.find(params[:id])
+ @document.file.attach(params[:file])
+
+ render json: { url: rails_blob_path(@document.file) }
+end
+```
\ No newline at end of file
diff --git a/apps/docs/getting-started/frameworks/svelte.mdx b/apps/docs/getting-started/frameworks/svelte.mdx
new file mode 100644
index 0000000000..d5891a2881
--- /dev/null
+++ b/apps/docs/getting-started/frameworks/svelte.mdx
@@ -0,0 +1,104 @@
+---
+title: Svelte
+keywords: "svelte docx editor, svelte word component, superdoc svelte, svelte document editor, svelte integration"
+---
+
+SuperDoc integrates with Svelte through lifecycle functions.
+
+## Installation
+
+```bash
+npm install @harbour-enterprises/superdoc
+```
+
+## Basic component
+
+```svelte
+
+
+Export
+
+
+
+```
+
+## With props
+
+```svelte
+
+
+
+```
+
+## Store integration
+
+```javascript
+// documentStore.js
+import { writable } from 'svelte/store';
+
+export const superdocInstance = writable(null);
+
+// Component.svelte
+
+```
\ No newline at end of file
diff --git a/apps/docs/getting-started/frameworks/vanilla-js.mdx b/apps/docs/getting-started/frameworks/vanilla-js.mdx
new file mode 100644
index 0000000000..b35d836e41
--- /dev/null
+++ b/apps/docs/getting-started/frameworks/vanilla-js.mdx
@@ -0,0 +1,181 @@
+---
+title: Vanilla JavaScript
+sidebarTitle: Vanilla JS
+keywords: "vanilla javascript docx, plain js word editor, superdoc vanilla, no framework docx, pure javascript editor"
+---
+
+SuperDoc works with plain JavaScript. No framework required.
+
+## Basic Setup
+
+
+
+```html CDN
+
+
+
+
+
+
+
+
+
+
+
+```
+
+```javascript NPM/Bundler
+import { SuperDoc } from '@harbour-enterprises/superdoc';
+import '@harbour-enterprises/superdoc/style.css';
+
+const superdoc = new SuperDoc({
+ selector: '#editor',
+ document: 'contract.docx'
+});
+```
+
+
+
+## Load Documents
+
+
+
+```javascript File Upload
+const fileInput = document.querySelector('input[type="file"]');
+fileInput.addEventListener('change', (e) => {
+ const file = e.target.files[0];
+ if (!file) return;
+
+ new SuperDoc({
+ selector: '#editor',
+ document: file
+ });
+});
+```
+
+```javascript Fetch API
+fetch('/api/documents/123')
+ .then(res => res.blob())
+ .then(blob => {
+ // Convert Blob to File (required)
+ const file = new File([blob], 'document.docx', {
+ type: blob.type || 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
+ });
+
+ new SuperDoc({
+ selector: '#editor',
+ document: file
+ });
+ });
+```
+
+```javascript Direct URL
+new SuperDoc({
+ selector: '#editor',
+ document: 'https://example.com/contract.docx'
+});
+```
+
+
+
+## Complete Example
+
+
+
+```html CDN
+
+
+
+
+
+
+
+
+ Edit
+ Review
+ Export
+
+
+
+
+
+
+
+```
+
+```javascript NPM/Bundler
+import { SuperDoc } from '@harbour-enterprises/superdoc';
+import '@harbour-enterprises/superdoc/style.css';
+
+let superdoc = null;
+
+// File upload
+document.getElementById('file-input').addEventListener('change', (e) => {
+ const file = e.target.files[0];
+ if (!file) return;
+
+ superdoc = new SuperDoc({
+ selector: '#editor',
+ document: file,
+ documentMode: 'editing'
+ });
+});
+
+// Mode controls
+document.getElementById('mode-edit').addEventListener('click', () => {
+ superdoc?.setDocumentMode('editing');
+});
+
+document.getElementById('mode-review').addEventListener('click', () => {
+ superdoc?.setDocumentMode('suggesting');
+});
+
+// Export
+document.getElementById('export-btn').addEventListener('click', async () => {
+ await superdoc?.export({ isFinalDoc: true });
+});
+```
+
+
+
+## Next Steps
+
+- [API Reference](/core/superdoc/configuration) - Configuration options
+- [React Integration](/getting-started/frameworks/react) - Using with React
+- [Vue Integration](/getting-started/frameworks/vue) - Using with Vue
\ No newline at end of file
diff --git a/apps/docs/getting-started/frameworks/vue.mdx b/apps/docs/getting-started/frameworks/vue.mdx
new file mode 100644
index 0000000000..1198fbc8d1
--- /dev/null
+++ b/apps/docs/getting-started/frameworks/vue.mdx
@@ -0,0 +1,209 @@
+---
+title: Vue Integration
+sidebarTitle: Vue
+keywords: "vue docx editor, vue word component, superdoc vue, vue document editor, vue composition api"
+---
+SuperDoc works with Vue 3.0+ using Composition API, Options API, or `
+```
+
+```vue Options API
+
+
+
+
+
+```
+
+
+
+## Full Component
+
+Build a reusable DOCX editor component with controls:
+
+```vue
+
+
+
+ Edit
+ Review
+ View
+ Export Final
+
+
+
+
+
+
+
+
+```
+
+## Handle File Uploads
+
+```vue
+
+
+
+
+
+
+
+
+```
+
+## TypeScript Support
+
+```vue
+
+```
+
+## Next Steps
+
+- [React Integration](/getting-started/frameworks/react) - React setup
+- [API Reference](/core/superdoc/configuration) - Configuration options
+- [Examples](https://github.com/Harbour-Enterprises/SuperDoc/tree/main/examples/vue-example) - Working examples
\ No newline at end of file
diff --git a/apps/docs/getting-started/import-export.mdx b/apps/docs/getting-started/import-export.mdx
new file mode 100644
index 0000000000..b0f97a9ddf
--- /dev/null
+++ b/apps/docs/getting-started/import-export.mdx
@@ -0,0 +1,263 @@
+---
+title: Import/Export
+sidebarTitle: Import/Export
+keywords: "import, export, import types, export types, docx to pdf, markdown to docx"
+---
+
+SuperDoc handles multiple content formats with different levels of support. **We are a Word editor that accepts other formats as input**, not a universal document converter.
+
+## Philosophy
+
+SuperDoc operates on Microsoft Word's document model. HTML and Markdown are normalized into Word concepts on import. For perfect fidelity, use DOCX or JSON formats.
+
+## Supported Formats
+
+| Format | Import Support | Export Support | Round-Trip Fidelity | Primary Use Case |
+|----------|------------------|------------------|-------------------|-------------------------------------|
+| **DOCX** | Full compatibility | Full compatibility | β
Perfect | Word documents, complete fidelity |
+| **JSON** | Full support | Full support | β
Perfect | Automation, programmatic control |
+| **HTML** | Structure only | Structure only | β οΈ Visual only | AI content, migration from web |
+| **Markdown** | CommonMark only | CommonMark only | β οΈ Visual only | Documentation, AI-generated content |
+| **Text** | Plain text only | Plain text only | β
Perfect | Simple content |
+| **PDF** | Not supported | Via API only | N/A | Final output format |
+
+## When to Use Each Format
+
+### Use DOCX/JSON for:
+- Preserving all formatting
+- Round-trip editing
+- Complex documents
+- Production workflows
+
+### Use HTML/Markdown for:
+- Basic content import when JSON isn't available
+- Migrating from legacy systems
+- Simple text with minimal structure
+- **NOT** for complex documents or formatting preservation
+
+## Content Import Methods
+
+### Method 1: Initialize with Content
+
+Load content when creating the editor or SuperDoc instance.
+
+#### SuperDoc Component
+```javascript
+// DOCX file (perfect fidelity)
+new SuperDoc({
+ selector: '#editor',
+ document: docxFile
+});
+
+// HTML content (structure preserved, styles stripped)
+new SuperDoc({
+ selector: '#editor',
+ document: blankDocx, // Must have styles defined
+ html: 'Title Content
'
+});
+
+// Markdown content (converted to Word structure)
+new SuperDoc({
+ selector: '#editor',
+ document: blankDocx,
+ markdown: '# Title\n\nContent with **formatting**'
+});
+
+// JSON schema (full control)
+new SuperDoc({
+ selector: '#editor',
+ document: blankDocx,
+ jsonOverride: documentSchema
+});
+```
+
+### Method 2: Insert into Existing Document
+
+Add content to an already-loaded document using commands.
+
+```javascript
+// Insert at current cursor position
+editor.commands.insertContent(content, {
+ contentType: 'html' // or 'markdown', 'text', 'schema'
+});
+
+// AI content integration example
+const aiResponse = await ai.generate("Create a contract");
+editor.commands.insertContent(aiResponse, {
+ contentType: 'html' // AI output gets converted to Word structure
+});
+```
+
+## HTML Import/Export Behavior
+
+### What Gets Preserved
+
+| HTML Element | Import Result | Export Result | Notes |
+|-------------|--------------|---------------|-------|
+| `` to `` | Word heading styles | Same heading level | Requires styles in document |
+| ` `, `
` | Normal paragraph | `
` | All become paragraphs |
+| ``, `` | Bold mark | `` | Character formatting |
+| ``, `` | Italic mark | `` | Character formatting |
+| `` | Word hyperlink | ` ` | Links preserved |
+| ``, `` | Word lists | Same list type | Basic nesting supported |
+| `` | Quote style | `` | If style exists |
+| `` | Word table | Basic `` | Structure only |
+| ` ` | Word image | ` ` | URL preserved |
+| `
+
+
+
+
+
+
+}
+href="/getting-started/frameworks/ruby-on-rails">
+
+
+
+
+
+
+}
+href="/getting-started/frameworks/blazor">
+
+
+
+
diff --git a/apps/docs/getting-started/introduction.mdx b/apps/docs/getting-started/introduction.mdx
new file mode 100644
index 0000000000..9bcb1c3326
--- /dev/null
+++ b/apps/docs/getting-started/introduction.mdx
@@ -0,0 +1,52 @@
+---
+title: Meet SuperDoc
+sidebarTitle: Introduction
+keywords: "docx editor, microsoft word web, word compatibility, document editing api, contract management software, word documents online"
+---
+
+When your users need Word β not "Word-like" or "compatible" with β but actual DOCX documents with all their complexity, that is what we do.
+
+SuperDoc brings Microsoft Word to the web.
+
+## What We Built
+
+We built a modern JS library for rendering and editing Word documentsβcomplete with comments/tracked changes, complex tables, advanced pagination/headers, realtime collaboration, and and every Word feature users actually use. It was intention-built for advanced documents (e.g., legal contracts) and advanced document workflows and AI integrations.
+
+## What Makes This Work
+
+- **Real DOCX formatting, not rich text**: This isn't another contenteditable wrapper. SuperDoc handles actual `.docx` files with their full complexity.
+- **Seamless integration**: Can be added to React, Vue, vanilla JS, or any modern framework. One API, zero lock-in.
+- **Frontend and backend**: SuperDoc fully runs in the browser or in server-side Node, great for workflow automations and AI uses.
+- **Highly extensible**: Completely customize the UX and add in your own features, plugins, commands, and nodes.
+- **Dual licensed**: Available under AGPLv3 for community use and a Commercial License for enterprise deployments.
+
+## π€οΈ AI Agents & LLMs
+
+SuperDoc is designed from the ground up to work with Large Language Models. Every UI action is available programmatically via commands and helpers. Want your LLM to add tracked changes? No problem!
+
+[Learn about AI Agents β](/getting-started/ai-agents)
+
+## Next Steps
+
+
+
+Get started with SuperDoc in minutes
+
+
+ Complete configuration options
+
+
+ Working demos and templates
+
+
diff --git a/docs/breaking-changes-v1.md b/apps/docs/guides/breaking-changes-v1.mdx
similarity index 98%
rename from docs/breaking-changes-v1.md
rename to apps/docs/guides/breaking-changes-v1.mdx
index d93b422329..2fa6cefd6b 100644
--- a/docs/breaking-changes-v1.md
+++ b/apps/docs/guides/breaking-changes-v1.mdx
@@ -1,3 +1,8 @@
+---
+title: Breaking Changes v1.0.0
+sidebarTitle: "Breaking Changes v1"
+---
+
# SuperDoc v1.0.0 β Breaking Changes & Migration Guide
This document describes all **breaking changes** between SuperDoc `v0.x` and `v1.0.0`. It is intended for **customers upgrading to v1**.
diff --git a/apps/docs/guides/general/accessibility.mdx b/apps/docs/guides/general/accessibility.mdx
new file mode 100644
index 0000000000..6a3b53e07e
--- /dev/null
+++ b/apps/docs/guides/general/accessibility.mdx
@@ -0,0 +1,133 @@
+---
+title: Accessibility
+keywords: "wcag compliance, screen reader support, keyboard navigation, aria labels, accessible documents, ada compliance"
+---
+
+SuperDoc provides accessibility features for keyboard navigation and screen reader compatibility.
+
+## High contrast mode
+
+Enable high contrast for improved visibility:
+
+```javascript
+// During initialization
+const superdoc = new SuperDoc({
+ selector: '#editor',
+ document: 'contract.docx',
+ onReady: ({ superdoc }) => {
+ superdoc.setHighContrastMode(true);
+ }
+});
+
+// Or after initialization
+superdoc.setHighContrastMode(true);
+```
+
+## Keyboard navigation
+
+### Toolbar navigation
+
+Navigate the toolbar without a mouse:
+
+- **Tab** - Move between toolbar groups (left, center, right)
+- **Arrow keys** - Navigate within a group
+- **Enter** - Activate button or open dropdown
+- **Escape** - Close dropdowns
+
+### Return to toolbar
+
+Jump back to toolbar from anywhere in the document:
+
+- **Windows**: `Ctrl + Shift + Alt + M`
+- **macOS**: `Cmd + Shift + Option + M`
+
+### Document navigation
+
+Standard keyboard shortcuts work as expected:
+
+- **Tab** - Move to next field/element
+- **Shift+Tab** - Move to previous field/element
+- **Ctrl/Cmd + Arrow keys** - Navigate by word
+- **Home/End** - Beginning/end of line
+- **Ctrl/Cmd + Home/End** - Beginning/end of document
+
+## Screen reader support
+
+### ARIA implementation
+
+SuperDoc uses semantic ARIA roles for screen readers:
+
+| Role | Element | Purpose |
+|------|---------|---------|
+| `application` | Main container | Identifies the editor application |
+| `document` | Editor area | Document editing region |
+| `toolbar` | Toolbar component | Formatting controls |
+| `button` | Toolbar buttons | Individual controls |
+| `menuitem` | Dropdown items | Menu options |
+| `menu` | Dropdowns | Option containers |
+| `separator` | Dividers | Visual/logical separation |
+
+### ARIA attributes
+
+- **aria-label** - Describes the current focused item
+- **aria-description** - Provides additional context
+- **aria-pressed** - Indicates toggle button state
+- **aria-expanded** - Shows dropdown state
+
+## Semantic HTML
+
+Tables and lists use standard HTML elements that are accessible by default:
+
+```html
+
+
+
+
+ Column Header
+
+
+
+
+ Data Cell
+
+
+
+
+
+
+ List item with meaning
+
+```
+
+## Focus management
+
+- Focus indicators visible on all interactive elements
+- Tab order follows logical document flow
+- Focus trapped in modals/dropdowns when open
+- Focus returns to trigger element when modals close
+
+## Known limitations
+
+- Complex tables may require additional navigation
+- Some advanced formatting options only accessible via toolbar
+- Custom keyboard shortcuts not yet configurable
+
+## Testing your implementation
+
+```javascript
+// Check if high contrast is enabled
+if (superdoc.isHighContrastMode) {
+ console.log('High contrast active');
+}
+
+// Ensure toolbar is keyboard accessible
+document.querySelector('.super-toolbar').setAttribute('tabindex', '0');
+```
+
+## Browser compatibility
+
+Accessibility features tested with:
+- NVDA (Windows)
+- JAWS (Windows)
+- VoiceOver (macOS)
+- Chrome, Firefox, Safari, Edge (latest versions)
\ No newline at end of file
diff --git a/apps/docs/guides/general/security.mdx b/apps/docs/guides/general/security.mdx
new file mode 100644
index 0000000000..3f56a99998
--- /dev/null
+++ b/apps/docs/guides/general/security.mdx
@@ -0,0 +1,69 @@
+---
+title: Trust & Security
+sidebarTitle: Security
+keywords: "SOC2, SOC 2, secure, security, bug bounty, trust, privacy policy, TOS, terms of service"
+---
+
+We utilize enterprise-grade best practices to protect our customers' data, and work with independent experts to verify our security, privacy, and compliance controls, and have achieved SOC 2 Type II compliance and reporting against stringent standards. Through an integration with Drata, we continually monitor hundreds of controls to maintain our security and GDPR compliance.
+
+**SuperDoc Editor (JS library)** is fully open source and self-hosted. Our team has zero access to sensitive document content. Documents are stored on our customers' own infrastructure.
+
+**SuperDoc APIs** are rigorously SOC2 certifed with no persistent document storage (data in, data out model).
+
+
+
+ Full SOC 2 Type II compliance and reporting
+
+
+ Transparent and open code
+
+
+ Full monitoring and alerts
+
+
+
+##
+
+### SOC 2 Report
+We work with an independent auditor to maintain a SOC 2 report, which objectively certifies our controls to ensure the continuous security of our customers' data.
+
+Developed by the Assurance Services Executive Committee (ASEC) of the AICPA, the Trust Services Criteria is the set of control criteria to be used when evaluating the suitability of the design and operating effectiveness of controls relevant to the security, availability, or processing integrity of information and systems, or the confidentiality or privacy of the information processed by the systems at an entity, a division, or an operating unit of an entity.
+
+### Continuous Control Monitoring
+SuperDoc uses Drataβs automation platform to continuously monitor 100+ security and privacy controls across the organization including GDPR compliance. Automated alerts and evidence collection allows SuperDoc to confidently prove its security and compliance posture any day of the year, while fostering a security-first mindset and culture of compliance across the organization.
+
+### Team Access & Trainings
+Security is a company-wide endeavor. All employees are required to use 2-factor authentication for data access, are restricted to only appropriate access levels, and have signed a Non-Disclosure and Confidentiality Agreement when joining the company. In addition, SuperDoc teammates complete an annual security training program and employ best practices when handling customer data.
+
+### Penetration Tests
+SuperDoc works with industry leading security firms to perform annual network and application layer penetration tests.
+
+### Secure Software Development
+SuperDoc utilizes a variety of manual and automatic data security and vulnerability checks throughout the software development lifecycle.
+
+### Data Encryption
+Data is encrypted both in-transit using Transport Layer Security (TLS details) and at rest with AES256 (details).
+
+### Infrastructure
+All of our infrastructure and services run in the cloud. We do not run any routers, load balancers, DNS servers, or physical servers. We extensively use the Google Cloud Platform (GCP) and have no physical infrastructure. Our production data storage systems are Google Spanner and Google Cloud Storage (modelled on Gmail tech stack). GCP provides strong security measures, compliance, and auditing across these systems.
+
+### Multi-region data storage and automated backups
+All of our cloud data is multi-region (within the United States) to avoid any impact from power outages or natural disasters. All our data is also automatically and regularly backed up and replicated across multiple US data center locations.
+
+### Compliance, Audit Logs, and Monitoring
+We directly monitor and use third-party monitoring software for detecting potential attacks or anomalous network behavior. Every user action in the system is logged and fully auditable (details). Our GCP systems are also regularly audited for ongoing security and compliance (e.g., SOC 2). View the full details and reports here.
+
+### Terms of Service and Privacy Policy
+Check out our dedicated [Terms of Service](https://www.harbourshare.com/terms-of-service) and [Privacy Policy](https://www.harbourshare.com/privacy-policy) pages.
+
+### Vulnerability Disclosure Program
+If you believe youβve discovered a bug in SuperDoc's security, please let us know by getting in touch at security@superdoc.dev. Our security team promptly investigates all reported issues.
\ No newline at end of file
diff --git a/apps/docs/guides/general/storage.mdx b/apps/docs/guides/general/storage.mdx
new file mode 100644
index 0000000000..3be56d88bf
--- /dev/null
+++ b/apps/docs/guides/general/storage.mdx
@@ -0,0 +1,92 @@
+---
+title: Storage
+sidebarTitle: Storage
+keywords: "storage, versioning, document storage, S3, cloud storage, Yjs, CRDT, collaboration"
+---
+
+SuperDoc is a self-hosted solution where you decide how and when documents are stored. Existing storage solutions like S3 and Cloud Storage are secure and work well.
+
+## Storage Approaches
+How and when a document is stored often depends on the level of document collaboration needed.
+
+| Collaboration Level | Approach | Complexity | When Changes Are Stored |
+|---------------------|----------|------------|------------------------|
+| [High](#high-collaboration) | Yjs/CRDT | Medium | Continuously (backend) |
+| [Low](#low-collaboration) | Check in/out | Low | User-triggered (frontend) |
+
+### High Collaboration
+
+For real-time, multi-user collaboration (similar to Google Docs) using Yjs/CRDT, each client connects to a [realtime collaboration service](/modules/collaboration/overview) that merges all user updates.
+
+
+**Complexity: Medium** β Requires a server-side [Yjs/CRDT service](/modules/collaboration/self-hosted/overview)
+
+
+**How it works:**
+- Every document edit (as a Yjs byte array) is automatically sent via WebSocket to the Yjs/CRDT service
+- When all changes are merged, the service stores the new document
+- Storage happens continuously on the backend
+
+### Low Collaboration
+
+For scenarios where only one user edits at a time (like SharePoint), implement a locking mechanism where users check out documents before editing.
+
+
+**Complexity: Low** β Requires storing and querying document lock/unlock state
+
+
+**How it works:**
+- When the active user [makes an edit](/core/supereditor/hooks#onupdate), debounced changes are sent to your server which stores the document
+- Alternatively, when a user saves/checks in the document, it is sent to your server for storage
+- Storage is triggered by user actions on the frontend
+
+## What to Store
+
+In both [low collaboration](#low-collaboration) and [high collaboration](#high-collaboration) approaches, when the document arrives at your backend, we recommend:
+
+
+
+ Generate a unique identifier for the document version:
+ ```
+ document_revision1764976265.docx
+ ```
+
+
+
+ Save the full DOCX binary to your cloud storage:
+ ```
+ s3://documents_bucket/versions/document_revision1764976265.docx
+ ```
+
+
+
+ Store the document version ID and its storage path in your database for later retrieval.
+
+
+
+When the document is requested later, look up the latest version in your database and serve it from cloud storage.
+
+## Export Methods
+
+The ways to export a document are covered in [Import/Export](/getting-started/import-export#export-options).
+
+
+We recommend storing the [full DOCX binary](/getting-started/import-export#docx-export-full-fidelity) because it provides the highest fidelity version of the document. Other export options (such as [JSON](/getting-started/import-export#json-export-full-fidelity)) are also available.
+
+
+## Best Practices
+
+
+
+ Include timestamps or UUIDs to ensure uniqueness
+
+
+ Preserves all formatting, comments, and tracked changes
+
+
+ Store multiple versions for audit trails and recovery
+
+
+ S3, Google Cloud Storage, or Azure Blob Storage
+
+
diff --git a/apps/docs/guides/migration/prosemirror.mdx b/apps/docs/guides/migration/prosemirror.mdx
new file mode 100644
index 0000000000..f625b4f49f
--- /dev/null
+++ b/apps/docs/guides/migration/prosemirror.mdx
@@ -0,0 +1,65 @@
+---
+title: Migrate from ProseMirror to SuperDoc
+sidebarTitle: Migrate from ProseMirror
+keywords: "migrate from prosemirror, migrate from tiptap, switch to superdoc, document editor migration, upgrade guide"
+---
+
+SuperDoc is built on ProseMirror but provides a complete document editing solution rather than a framework.
+
+### Key differences
+
+| ProseMirror | SuperDoc |
+| ----------------------------------- | -------------------------------- |
+| Framework requiring extensive setup | Ready-to-use DOCX editor |
+| Manual schema definition | Pre-built Word-compatible schema |
+| DIY file format support | Native DOCX import/export |
+| Custom plugin system | Module-based features |
+
+### What changes
+
+```javascript
+// ProseMirror
+import { EditorState } from "prosemirror-state";
+import { EditorView } from "prosemirror-view";
+import { Schema } from "prosemirror-model";
+// ... 100+ lines of setup
+
+// SuperDoc
+import { SuperDoc } from "@harbour-enterprises/superdoc";
+const superdoc = new SuperDoc({
+ selector: "#editor",
+ document: "document.docx",
+});
+```
+
+### Accessing ProseMirror internals
+
+While SuperDoc doesn't support custom ProseMirror plugins, you can access the underlying instances:
+
+```javascript
+superdoc.on("editorCreate", ({ editor }) => {
+ const view = editor.view; // ProseMirror EditorView
+ const state = view.state; // ProseMirror EditorState
+ const schema = state.schema; // ProseMirror Schema
+});
+```
+
+### Limitations
+
+- **No custom plugins**: SuperDoc modules aren't ProseMirror plugins
+- **Fixed schema**: Can't modify the document schema
+- **Controlled commands**: Use SuperDoc's command set, not raw transactions
+
+### Custom functionality
+
+If you need features SuperDoc doesn't provide, you have limited options:
+
+- Use SuperEditor for lower-level access
+- Request features via GitHub issues
+- Consider if SuperDoc is the right fit
+
+## Need help?
+
+- [GitHub Issues](https://github.com/Harbour-Enterprises/SuperDoc/issues)
+- [Discord Community](https://discord.com/invite/b9UuaZRyaB)
+- Email: q@superdoc.dev
diff --git a/docs/typescript-migration.md b/apps/docs/guides/typescript-migration.mdx
similarity index 98%
rename from docs/typescript-migration.md
rename to apps/docs/guides/typescript-migration.mdx
index 31bfe797b3..83a16acf2b 100644
--- a/docs/typescript-migration.md
+++ b/apps/docs/guides/typescript-migration.mdx
@@ -1,3 +1,8 @@
+---
+title: TypeScript Migration Guide
+sidebarTitle: "TypeScript Migration"
+---
+
# TypeScript Migration Guide
This guide covers the gradual migration of the SuperDoc monorepo from JavaScript to TypeScript.
diff --git a/apps/docs/modules/collaboration/cloud/liveblocks.mdx b/apps/docs/modules/collaboration/cloud/liveblocks.mdx
new file mode 100644
index 0000000000..c4553c6c5d
--- /dev/null
+++ b/apps/docs/modules/collaboration/cloud/liveblocks.mdx
@@ -0,0 +1,256 @@
+---
+title: Liveblocks
+sidebarTitle: Liveblocks
+keywords: "liveblocks collaboration, cloud collaboration, real-time editing, yjs liveblocks"
+---
+
+[Liveblocks](https://liveblocks.io/) is a cloud platform for real-time collaboration. It handles all the infrastructure so you can add collaboration without managing servers.
+
+## Setup
+
+### 1. Create Account
+
+1. Go to [liveblocks.io](https://liveblocks.io/)
+2. Sign up for free
+3. Create a new project
+4. Copy your **Public API Key** (`pk_...`)
+
+### 2. Install Dependencies
+
+```bash
+npm install @liveblocks/client @liveblocks/yjs yjs
+```
+
+### 3. Basic Implementation
+
+```javascript
+import { createClient } from "@liveblocks/client";
+import { LiveblocksYjsProvider } from "@liveblocks/yjs";
+import * as Y from "yjs";
+import { SuperDoc } from "superdoc";
+
+// Create Liveblocks client
+const client = createClient({
+ publicApiKey: "pk_your_public_key",
+});
+
+// Enter a room (each room = one collaborative document)
+const { room, leave } = client.enterRoom("document-123");
+
+// Create Yjs document and provider
+const ydoc = new Y.Doc();
+const provider = new LiveblocksYjsProvider(room, ydoc);
+
+// Wait for initial sync
+provider.on("sync", (synced) => {
+ if (!synced) return;
+
+ const superdoc = new SuperDoc({
+ selector: "#editor",
+ documentMode: "editing",
+ user: {
+ name: "John Smith",
+ email: "john@example.com",
+ },
+ modules: {
+ collaboration: { ydoc, provider },
+ },
+ });
+});
+```
+
+## Room Management
+
+Each **room** represents a collaborative session. Use unique room IDs for different documents:
+
+```javascript
+// Dynamic room based on document ID
+const documentId = route.params.id; // e.g., 'contract-abc-123'
+const { room, leave } = client.enterRoom(documentId);
+```
+
+### Room Naming Best Practices
+
+```javascript
+// Good: Unique, descriptive IDs
+client.enterRoom("contract-abc-123");
+client.enterRoom("proposal-2024-q1");
+client.enterRoom(`user-${userId}-draft`);
+
+// Avoid: Generic names that could conflict
+client.enterRoom("document"); // Too generic
+client.enterRoom("test"); // May conflict with other users
+```
+
+## User Presence
+
+### Showing Active Users
+
+```javascript
+const superdoc = new SuperDoc({
+ // ... config
+ onAwarenessUpdate: ({ states }) => {
+ const activeUsers = states
+ .filter((state) => state.user)
+ .map((state) => ({
+ name: state.user.name,
+ email: state.user.email,
+ color: state.user.color,
+ cursor: state.cursor,
+ }));
+
+ // Update your UI
+ renderUserAvatars(activeUsers);
+ },
+});
+```
+
+### Custom User Colors
+
+```javascript
+new SuperDoc({
+ colors: ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FFEAA7"],
+ // Users automatically get assigned colors from this palette
+ // ...
+});
+```
+
+## Authentication
+
+For production, use **secret keys** with your backend:
+
+### Frontend
+
+```javascript
+const client = createClient({
+ authEndpoint: "/api/liveblocks-auth",
+});
+```
+
+### Backend (Next.js API Route)
+
+```javascript
+// pages/api/liveblocks-auth.js
+import { Liveblocks } from "@liveblocks/node";
+
+const liveblocks = new Liveblocks({
+ secret: process.env.LIVEBLOCKS_SECRET_KEY,
+});
+
+export default async function handler(req, res) {
+ const user = await getUser(req); // Your auth logic
+
+ const session = liveblocks.prepareSession(user.id, {
+ userInfo: {
+ name: user.name,
+ email: user.email,
+ },
+ });
+
+ // Grant access to specific rooms
+ session.allow(`document-*`, session.FULL_ACCESS);
+
+ const { status, body } = await session.authorize();
+ res.status(status).json(body);
+}
+```
+
+## Persistence
+
+Liveblocks automatically persists your Yjs document. Data is stored securely and restored when users rejoin.
+
+
+ Free tier includes 30 days of storage. Paid plans include unlimited storage
+ with custom retention policies.
+
+
+## Error Handling
+
+```javascript
+const { room } = client.enterRoom("my-document");
+
+room.subscribe("error", (error) => {
+ console.error("Liveblocks error:", error);
+
+ if (error.code === 4001) {
+ // Authentication error
+ redirectToLogin();
+ }
+});
+
+room.subscribe("connection", (status) => {
+ // 'connecting' | 'open' | 'closed'
+ updateConnectionIndicator(status);
+});
+```
+
+## Cleanup
+
+Always clean up when the component unmounts:
+
+```javascript
+// React
+useEffect(() => {
+ const { room, leave } = client.enterRoom("document-id");
+ // ... setup
+
+ return () => {
+ superdoc?.destroy();
+ provider?.destroy();
+ leave(); // Important: leave the room
+ };
+}, []);
+```
+
+## Pricing
+
+| Tier | MAU | Price |
+| ------- | ------- | ------- |
+| Free | 250 | $0 |
+| Starter | 10,000 | $99/mo |
+| Pro | 100,000 | Contact |
+
+
+ MAU = Monthly Active Users. Each user who connects to a room counts once per
+ month.
+
+
+## Resources
+
+
+
+ Official documentation
+
+
+
+ Complete source code
+
+
+
+## Next Steps
+
+
+
+ All SuperDoc collaboration options
+
+
+
+ Run your own collaboration server
+
+
diff --git a/apps/docs/modules/collaboration/cloud/tiptap-cloud.mdx b/apps/docs/modules/collaboration/cloud/tiptap-cloud.mdx
new file mode 100644
index 0000000000..09423394a0
--- /dev/null
+++ b/apps/docs/modules/collaboration/cloud/tiptap-cloud.mdx
@@ -0,0 +1,215 @@
+---
+title: TipTap Cloud
+sidebarTitle: TipTap Cloud
+keywords: "tiptap cloud, hocuspocus cloud, managed collaboration, real-time editing"
+---
+
+[TipTap Cloud](https://tiptap.dev/docs/collaboration/getting-started/overview) is a managed collaboration service built on Hocuspocus. It's ideal if you're already using the TipTap ecosystem.
+
+
+ TipTap Cloud requires a TipTap Pro subscription. See [TipTap
+ pricing](https://tiptap.dev/pricing) for details.
+
+
+## Setup
+
+### 1. Get Your Credentials
+
+1. Sign up for [TipTap Pro](https://tiptap.dev/pricing)
+2. Create a new project in the dashboard
+3. Get your **App ID** and **Token**
+
+### 2. Install Dependencies
+
+```bash
+npm install @tiptap-pro/provider yjs
+```
+
+### 3. Implementation
+
+```javascript
+import { TiptapCollabProvider } from "@tiptap-pro/provider";
+import * as Y from "yjs";
+import { SuperDoc } from "superdoc";
+
+const APP_ID = "your-app-id";
+const TOKEN = "your-token";
+const DOCUMENT_NAME = "my-document";
+
+// Create Yjs document
+const ydoc = new Y.Doc();
+
+// Create TipTap Cloud provider
+const provider = new TiptapCollabProvider({
+ appId: APP_ID,
+ name: DOCUMENT_NAME,
+ document: ydoc,
+ token: TOKEN,
+});
+
+// Wait for sync
+provider.on("synced", () => {
+ const superdoc = new SuperDoc({
+ selector: "#editor",
+ documentMode: "editing",
+ user: {
+ name: "John Smith",
+ email: "john@example.com",
+ },
+ modules: {
+ collaboration: { ydoc, provider },
+ },
+ });
+});
+```
+
+## React Example
+
+```tsx
+import { useEffect, useRef, useState } from "react";
+import { TiptapCollabProvider } from "@tiptap-pro/provider";
+import * as Y from "yjs";
+import { SuperDoc } from "superdoc";
+import "superdoc/style.css";
+
+const APP_ID = import.meta.env.VITE_TIPTAP_APP_ID;
+const TOKEN = import.meta.env.VITE_TIPTAP_TOKEN;
+
+export default function Editor() {
+ const superdocRef = useRef(null);
+ const [users, setUsers] = useState([]);
+
+ useEffect(() => {
+ if (!APP_ID || !TOKEN) return;
+
+ const ydoc = new Y.Doc();
+ const provider = new TiptapCollabProvider({
+ appId: APP_ID,
+ name: "document-123",
+ document: ydoc,
+ token: TOKEN,
+ });
+
+ provider.on("synced", () => {
+ superdocRef.current = new SuperDoc({
+ selector: "#superdoc",
+ documentMode: "editing",
+ user: {
+ name: `User ${Math.floor(Math.random() * 1000)}`,
+ email: "user@example.com",
+ },
+ modules: {
+ collaboration: { ydoc, provider },
+ },
+ onAwarenessUpdate: ({ states }) => {
+ setUsers(states.filter((s) => s.user));
+ },
+ });
+ });
+
+ return () => {
+ superdocRef.current?.destroy();
+ provider.destroy();
+ };
+ }, []);
+
+ return (
+
+
+ {users.map((u, i) => (
+
+ {u.user?.name}
+
+ ))}
+
+
+
+ );
+}
+```
+
+## Configuration
+
+
+ Your TipTap Cloud application ID
+
+
+
+ Document name (room identifier)
+
+
+
+ The Yjs document instance
+
+
+
+ Authentication token from TipTap dashboard
+
+
+## Events
+
+```javascript
+// Connection status
+provider.on("status", ({ status }) => {
+ // 'connecting' | 'connected' | 'disconnected'
+ console.log("Connection status:", status);
+});
+
+// Sync status
+provider.on("synced", () => {
+ console.log("Document synced");
+});
+
+// Authentication error
+provider.on("authenticationFailed", ({ reason }) => {
+ console.error("Auth failed:", reason);
+});
+```
+
+## Cleanup
+
+```javascript
+// Always clean up
+provider.destroy();
+superdoc.destroy();
+```
+
+## Resources
+
+
+
+ Official documentation
+
+
+
+ Complete source code
+
+
+
+## Next Steps
+
+
+
+ All SuperDoc collaboration options
+
+
+
+ Run your own collaboration server
+
+
diff --git a/apps/docs/modules/collaboration/configuration.mdx b/apps/docs/modules/collaboration/configuration.mdx
new file mode 100644
index 0000000000..79a00e4a8a
--- /dev/null
+++ b/apps/docs/modules/collaboration/configuration.mdx
@@ -0,0 +1,274 @@
+---
+title: Configuration
+sidebarTitle: Configuration
+keywords: "collaboration configuration, superdoc events, awareness, user presence"
+---
+
+All configuration options, events, and hooks for real-time collaboration.
+
+## Collaboration Config
+
+**You manage the Yjs provider** - works with SuperDoc Yjs, Liveblocks, Hocuspocus, etc.
+
+```javascript
+import * as Y from "yjs";
+import { LiveblocksYjsProvider } from "@liveblocks/yjs";
+
+const ydoc = new Y.Doc();
+const provider = new LiveblocksYjsProvider(room, ydoc);
+
+new SuperDoc({
+ selector: "#editor",
+ modules: {
+ collaboration: { ydoc, provider },
+ },
+});
+```
+
+
+ Your Yjs document instance
+
+
+
+ Any Yjs-compatible provider
+
+
+## User Configuration
+
+
+ Current user information for presence/awareness
+
+```javascript
+user: {
+ name: 'John Smith',
+ email: 'john@example.com',
+ image: 'https://example.com/avatar.jpg' // Optional
+}
+```
+
+
+
+
+ Color palette for user cursors and selections
+
+```javascript
+colors: ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FFEAA7"];
+```
+
+Users are automatically assigned colors from this palette.
+
+
+
+## Events
+
+### onReady
+
+Fired when SuperDoc and collaboration are fully initialized.
+
+```javascript
+new SuperDoc({
+ // ...config
+ onReady: ({ superdoc }) => {
+ console.log("Ready!");
+
+ // Access Yjs document
+ const ydoc = superdoc.ydoc;
+
+ // Access active editor
+ const editor = superdoc.activeEditor;
+ },
+});
+```
+
+### onAwarenessUpdate
+
+Fired when users join, leave, or update their presence.
+
+```javascript
+new SuperDoc({
+ // ...config
+ onAwarenessUpdate: ({ states, added, removed, superdoc }) => {
+ // All connected users
+ const users = states.filter((s) => s.user);
+
+ // Users who just joined
+ added.forEach((clientId) => {
+ const user = states.find((s) => s.clientId === clientId);
+ console.log("User joined:", user?.name);
+ });
+
+ // Users who just left
+ removed.forEach((clientId) => {
+ console.log("User left:", clientId);
+ });
+ },
+});
+```
+
+**User state properties:**
+
+| Property | Type | Description |
+| ----------- | -------- | ----------------------- |
+| `clientId` | `number` | Unique session ID |
+| `name` | `string` | User's display name |
+| `email` | `string` | User's email |
+| `color` | `string` | Assigned cursor color |
+| `cursor` | `Object` | Current cursor position |
+| `selection` | `Object` | Current text selection |
+
+### onEditorCreate
+
+Fired when an editor instance is created.
+
+```javascript
+new SuperDoc({
+ // ...config
+ onEditorCreate: ({ editor }) => {
+ // Check if document is empty
+ const isEmpty = !editor.state.doc.textContent.trim();
+
+ if (isEmpty) {
+ // Load default content
+ await editor.replaceFile(defaultDocument);
+ }
+ }
+});
+```
+
+### onContentError
+
+Fired when document content fails to load.
+
+```javascript
+new SuperDoc({
+ // ...config
+ onContentError: ({ error, documentId }) => {
+ console.error("Failed to load:", documentId, error);
+ showErrorMessage("Document could not be loaded");
+ },
+});
+```
+
+## Provider Events
+
+When using the provider-agnostic API, listen to provider events directly:
+
+```javascript
+// Sync status
+provider.on("sync", (synced) => {
+ if (synced) console.log("Document synced");
+});
+
+// For Hocuspocus/URL-based
+provider.on("status", ({ status }) => {
+ // 'connecting' | 'connected' | 'disconnected'
+ updateConnectionIndicator(status);
+});
+
+provider.on("authenticationFailed", ({ reason }) => {
+ if (reason === "token-expired") {
+ refreshToken();
+ }
+});
+```
+
+## Media Upload
+
+Handle image uploads in collaborative documents:
+
+```javascript
+new SuperDoc({
+ // ...config
+ handleImageUpload: (file) => {
+ return new Promise((resolve, reject) => {
+ const reader = new FileReader();
+
+ reader.onload = (event) => {
+ const dataUrl = event.target.result;
+ const mediaPath = `word/media/${file.name}`;
+
+ // Store in Yjs for sync
+ if (superdoc.ydoc) {
+ const mediaMap = superdoc.ydoc.getMap("media");
+ mediaMap.set(mediaPath, dataUrl);
+ }
+
+ resolve(dataUrl);
+ };
+
+ reader.onerror = reject;
+ reader.readAsDataURL(file);
+ });
+ },
+});
+```
+
+## SuperEditor Usage
+
+For direct SuperEditor usage (without SuperDoc wrapper):
+
+```javascript
+import { Editor } from "superdoc/super-editor";
+
+const editor = new Editor({
+ element: document.querySelector("#editor"),
+ ydoc: ydoc,
+ collaborationProvider: provider,
+ user: { name: "John", email: "john@example.com" },
+});
+```
+
+
+ SuperEditor is the lower-level editor component. Most users should use
+ SuperDoc, which provides document loading, toolbar, and additional features.
+
+
+## Complete Example
+
+```javascript
+import { createClient } from "@liveblocks/client";
+import { LiveblocksYjsProvider } from "@liveblocks/yjs";
+import * as Y from "yjs";
+import { SuperDoc } from "superdoc";
+
+const client = createClient({ publicApiKey: "pk_..." });
+const { room, leave } = client.enterRoom("my-document");
+const ydoc = new Y.Doc();
+const provider = new LiveblocksYjsProvider(room, ydoc);
+
+let superdoc = null;
+
+provider.on("sync", (synced) => {
+ if (!synced) return;
+
+ superdoc = new SuperDoc({
+ selector: "#editor",
+ documentMode: "editing",
+ user: {
+ name: "John Smith",
+ email: "john@example.com",
+ },
+ colors: ["#FF6B6B", "#4ECDC4", "#45B7D1"],
+ modules: {
+ collaboration: { ydoc, provider },
+ },
+ onReady: ({ superdoc }) => {
+ console.log("Collaboration ready");
+ },
+ onAwarenessUpdate: ({ states }) => {
+ const users = states.filter((s) => s.user);
+ renderUserList(users);
+ },
+ onContentError: ({ error }) => {
+ console.error("Content error:", error);
+ },
+ });
+});
+
+// Cleanup
+window.addEventListener("beforeunload", () => {
+ superdoc?.destroy();
+ provider.destroy();
+ leave();
+});
+```
diff --git a/apps/docs/modules/collaboration/overview.mdx b/apps/docs/modules/collaboration/overview.mdx
new file mode 100644
index 0000000000..6a91781d73
--- /dev/null
+++ b/apps/docs/modules/collaboration/overview.mdx
@@ -0,0 +1,151 @@
+---
+title: Collaboration
+sidebarTitle: Overview
+keywords: "real-time document editing, collaborative word editing, websocket docx, multiplayer documents, yjs collaboration"
+---
+
+Enable multiple users to edit the same document simultaneously with real-time collaboration powered by [Yjs](https://docs.yjs.dev/).
+
+
+
+
+
+ Changes appear instantly for all connected users
+
+
+ CRDTs automatically merge concurrent edits
+
+
+ Continue editing offline, sync when reconnected
+
+
+ See who's online with cursors and selections
+
+
+
+## Choose Your Approach
+
+
+
+ No server to manage - get started in 5 minutes.
+
+ | Provider | Best For | Pricing |
+ |----------|----------|---------|
+ | [Liveblocks](/modules/collaboration/cloud/liveblocks) | Quick start, any framework | Free tier available |
+ | [TipTap Cloud](/modules/collaboration/cloud/tiptap-cloud) | TipTap Pro users | Requires subscription |
+
+
+
+
+ Full control over your data and infrastructure.
+
+ | Option | Best For |
+ |--------|----------|
+ | [SuperDoc Yjs](/modules/collaboration/self-hosted/superdoc-yjs) | Recommended - our official package |
+ | [Hocuspocus](/modules/collaboration/self-hosted/hocuspocus) | TipTap ecosystem users |
+ | [Y-Sweet](/modules/collaboration/self-hosted/y-sweet) | High performance, easy deployment |
+
+
+
+
+## Quick Start
+
+Get collaboration working in 5 minutes with Liveblocks:
+
+```bash
+npm install @liveblocks/client @liveblocks/yjs yjs
+```
+
+```javascript
+import { createClient } from "@liveblocks/client";
+import { LiveblocksYjsProvider } from "@liveblocks/yjs";
+import * as Y from "yjs";
+import { SuperDoc } from "superdoc";
+
+// 1. Create Liveblocks client
+const client = createClient({ publicApiKey: "pk_..." });
+
+// 2. Enter a room and create Yjs provider
+const { room } = client.enterRoom("my-document");
+const ydoc = new Y.Doc();
+const provider = new LiveblocksYjsProvider(room, ydoc);
+
+// 3. Wait for sync, then create SuperDoc
+provider.on("sync", (synced) => {
+ if (!synced) return;
+
+ new SuperDoc({
+ selector: "#editor",
+ user: { name: "John", email: "john@example.com" },
+ modules: {
+ collaboration: { ydoc, provider },
+ },
+ });
+});
+```
+
+
+ Step-by-step setup with complete working example
+
+
+## How It Works
+
+SuperDoc uses [Yjs](https://docs.yjs.dev/), a CRDT (Conflict-free Replicated Data Type) library, to enable real-time collaboration. This means:
+
+1. **No central server required** for conflict resolution
+2. **Changes merge automatically** - no data loss
+3. **Works with any Yjs provider** - cloud or self-hosted
+
+```mermaid
+flowchart LR
+ A[User A SuperDoc] <--> P[Provider Yjs sync]
+ P <--> B[User B SuperDoc]
+ P --> D[(Persistence optional)]
+```
+
+## Next Steps
+
+
+
+ Get collaboration working fast with Liveblocks
+
+
+{" "}
+
+ Cloud-hosted collaboration with free tier
+
+
+{" "}
+
+ Full control with your own infrastructure
+
+
+
+ All configuration options and events
+
+
diff --git a/apps/docs/modules/collaboration/quickstart.mdx b/apps/docs/modules/collaboration/quickstart.mdx
new file mode 100644
index 0000000000..193ef4d0a8
--- /dev/null
+++ b/apps/docs/modules/collaboration/quickstart.mdx
@@ -0,0 +1,275 @@
+---
+title: Quickstart
+sidebarTitle: Quickstart
+keywords: "collaboration quickstart, liveblocks setup, real-time editing tutorial, superdoc collaboration"
+---
+
+Get real-time collaboration working in 5 minutes using [Liveblocks](https://liveblocks.io/) - no server required.
+
+
+This guide uses Liveblocks because it's the fastest way to get started. See [all providers](/modules/collaboration/overview#choose-your-approach) for alternatives.
+
+
+## Prerequisites
+
+- SuperDoc installed in your project
+- A [Liveblocks account](https://liveblocks.io/) (free tier available)
+
+## Step 1: Get Your API Key
+
+1. Go to [liveblocks.io](https://liveblocks.io/) and create an account
+2. Create a new project
+3. Copy your **Public API Key** (starts with `pk_`)
+
+## Step 2: Install Dependencies
+
+```bash
+npm install @liveblocks/client @liveblocks/yjs yjs
+```
+
+## Step 3: Add the Code
+
+
+
+ ```tsx
+ import { useEffect, useRef } from 'react';
+ import { createClient } from '@liveblocks/client';
+ import { LiveblocksYjsProvider } from '@liveblocks/yjs';
+ import * as Y from 'yjs';
+ import { SuperDoc } from 'superdoc';
+ import 'superdoc/style.css';
+
+ const client = createClient({
+ publicApiKey: 'pk_your_public_key'
+ });
+
+ export default function Editor() {
+ const superdocRef = useRef(null);
+
+ useEffect(() => {
+ // Enter a room (document ID)
+ const { room, leave } = client.enterRoom('my-document');
+
+ // Create Yjs document and provider
+ const ydoc = new Y.Doc();
+ const provider = new LiveblocksYjsProvider(room, ydoc);
+
+ // Wait for sync before creating editor
+ provider.on('sync', (synced: boolean) => {
+ if (!synced) return;
+
+ superdocRef.current = new SuperDoc({
+ selector: '#superdoc',
+ documentMode: 'editing',
+ user: {
+ name: 'User ' + Math.floor(Math.random() * 1000),
+ email: 'user@example.com'
+ },
+ modules: {
+ collaboration: { ydoc, provider }
+ }
+ });
+ });
+
+ // Cleanup on unmount
+ return () => {
+ superdocRef.current?.destroy();
+ provider.destroy();
+ leave();
+ };
+ }, []);
+
+ return
;
+ }
+ ```
+
+
+
+ ```vue
+
+
+
+
+
+ ```
+
+
+
+ ```html
+
+
+
+
+
+
+
+
+
+
+
+ ```
+
+
+
+## Step 4: Test It!
+
+1. Open your app in two browser windows
+2. Start typing in one window
+3. Watch changes appear in real-time in the other window
+
+
+You now have real-time collaboration working!
+
+
+## What's Happening?
+
+```mermaid
+flowchart LR
+ W1[Window 1 SuperDoc] <--> LB[Liveblocks cloud]
+ LB <--> W2[Window 2 SuperDoc]
+```
+
+1. **Liveblocks** handles the WebSocket connection and data sync
+2. **Yjs** manages the document state and conflict resolution
+3. **SuperDoc** renders the editor and syncs with Yjs
+
+## Adding User Presence
+
+Show who's currently editing:
+
+```javascript
+const superdoc = new SuperDoc({
+ // ... other config
+ onAwarenessUpdate: ({ states }) => {
+ const users = states.filter(s => s.user);
+ console.log('Active users:', users);
+
+ // Update your UI
+ updateUserList(users.map(u => ({
+ name: u.user.name,
+ color: u.user.color
+ })));
+ }
+});
+```
+
+## Environment Variables
+
+For production, use environment variables:
+
+```javascript
+const client = createClient({
+ publicApiKey: import.meta.env.VITE_LIVEBLOCKS_PUBLIC_KEY
+ // or process.env.NEXT_PUBLIC_LIVEBLOCKS_KEY for Next.js
+});
+```
+
+## Next Steps
+
+
+
+ Room management, persistence, and advanced features
+
+
+
+ Run your own collaboration server
+
+
+
+ All events, options, and customization
+
+
+
+ Complete source code on GitHub
+
+
diff --git a/apps/docs/modules/collaboration/self-hosted/hocuspocus.mdx b/apps/docs/modules/collaboration/self-hosted/hocuspocus.mdx
new file mode 100644
index 0000000000..ab4d576d73
--- /dev/null
+++ b/apps/docs/modules/collaboration/self-hosted/hocuspocus.mdx
@@ -0,0 +1,302 @@
+---
+title: Hocuspocus
+sidebarTitle: Hocuspocus
+keywords: "hocuspocus server, tiptap yjs, self-hosted collaboration"
+---
+
+[Hocuspocus](https://tiptap.dev/docs/hocuspocus) is TipTap's open-source Yjs WebSocket server. It's a mature, battle-tested option for self-hosted collaboration.
+
+## Setup
+
+### Server
+
+```bash
+npm install @hocuspocus/server
+```
+
+```typescript
+import { Server } from "@hocuspocus/server";
+
+const server = Server.configure({
+ port: 1234,
+
+ async onLoadDocument(data) {
+ // Load document from database
+ const state = await db.getDocument(data.documentName);
+ if (state) {
+ Y.applyUpdate(data.document, state);
+ }
+ return data.document;
+ },
+
+ async onStoreDocument(data) {
+ // Save document to database
+ const state = Y.encodeStateAsUpdate(data.document);
+ await db.saveDocument(data.documentName, state);
+ },
+
+ async onAuthenticate(data) {
+ // Validate token
+ const user = await validateToken(data.token);
+ if (!user) {
+ throw new Error("Unauthorized");
+ }
+ return { user };
+ },
+});
+
+server.listen();
+```
+
+### Client
+
+Use the provider-agnostic API to connect SuperDoc:
+
+```bash
+npm install @hocuspocus/provider yjs
+```
+
+```typescript
+import { HocuspocusProvider } from "@hocuspocus/provider";
+import * as Y from "yjs";
+import { SuperDoc } from "superdoc";
+
+const ydoc = new Y.Doc();
+const provider = new HocuspocusProvider({
+ url: "ws://localhost:1234",
+ name: "document-123",
+ document: ydoc,
+ token: "auth-token", // Optional
+});
+
+// Wait for sync before creating editor
+provider.on("synced", () => {
+ const superdoc = new SuperDoc({
+ selector: "#editor",
+ documentMode: "editing",
+ user: {
+ name: "John Smith",
+ email: "john@example.com",
+ },
+ modules: {
+ collaboration: { ydoc, provider },
+ },
+ });
+});
+```
+
+## React Example
+
+```tsx
+import { useEffect, useRef, useState } from "react";
+import { HocuspocusProvider } from "@hocuspocus/provider";
+import * as Y from "yjs";
+import { SuperDoc } from "superdoc";
+import "superdoc/style.css";
+
+export default function Editor() {
+ const superdocRef = useRef(null);
+ const [users, setUsers] = useState([]);
+
+ useEffect(() => {
+ const ydoc = new Y.Doc();
+ const provider = new HocuspocusProvider({
+ url: "ws://localhost:1234",
+ name: "my-document",
+ document: ydoc,
+ });
+
+ provider.on("synced", () => {
+ superdocRef.current = new SuperDoc({
+ selector: "#superdoc",
+ documentMode: "editing",
+ user: {
+ name: `User ${Math.floor(Math.random() * 1000)}`,
+ email: "user@example.com",
+ },
+ modules: {
+ collaboration: { ydoc, provider },
+ },
+ onAwarenessUpdate: ({ states }) => {
+ setUsers(states.filter((s) => s.user));
+ },
+ });
+ });
+
+ return () => {
+ superdocRef.current?.destroy();
+ provider.destroy();
+ };
+ }, []);
+
+ return (
+
+
+ {users.map((u, i) => (
+
+ {u.user?.name}
+
+ ))}
+
+
+
+ );
+}
+```
+
+## Server Configuration
+
+### Basic Options
+
+```typescript
+Server.configure({
+ port: 1234,
+ timeout: 30000, // Connection timeout
+ debounce: 2000, // Debounce document saves
+ maxDebounce: 10000, // Max wait before save
+ quiet: false, // Disable logging
+});
+```
+
+### Hooks
+
+| Hook | Purpose |
+| ----------------- | -------------------------- |
+| `onLoadDocument` | Load document from storage |
+| `onStoreDocument` | Save document to storage |
+| `onAuthenticate` | Validate user tokens |
+| `onChange` | React to document changes |
+| `onConnect` | Handle new connections |
+| `onDisconnect` | Handle disconnections |
+
+### Persistence Example
+
+```typescript
+import { Server } from "@hocuspocus/server";
+import { Database } from "@hocuspocus/extension-database";
+
+const server = Server.configure({
+ extensions: [
+ new Database({
+ fetch: async ({ documentName }) => {
+ const doc = await db.findOne({ name: documentName });
+ return doc?.data || null;
+ },
+ store: async ({ documentName, state }) => {
+ await db.upsert({ name: documentName }, { data: state });
+ },
+ }),
+ ],
+});
+```
+
+## Provider Options
+
+```typescript
+const provider = new HocuspocusProvider({
+ url: "ws://localhost:1234",
+ name: "document-id",
+ document: ydoc,
+
+ // Optional
+ token: "auth-token",
+ awareness: awareness, // Custom awareness instance
+ connect: true, // Auto-connect on create
+ preserveConnection: true, // Keep connection on destroy
+ broadcast: true, // Broadcast changes to tabs
+});
+```
+
+## Events
+
+### Provider Events
+
+```typescript
+// Sync status
+provider.on("synced", () => {
+ console.log("Document synced");
+});
+
+// Connection status
+provider.on("status", ({ status }) => {
+ // 'connecting' | 'connected' | 'disconnected'
+});
+
+// Authentication
+provider.on("authenticationFailed", ({ reason }) => {
+ console.error("Auth failed:", reason);
+});
+```
+
+## Production Deployment
+
+### Docker
+
+```dockerfile
+FROM node:18-alpine
+
+WORKDIR /app
+COPY package*.json ./
+RUN npm ci --production
+
+COPY . .
+
+EXPOSE 1234
+CMD ["node", "server.js"]
+```
+
+### With Redis (Scaling)
+
+```typescript
+import { Server } from "@hocuspocus/server";
+import { Redis } from "@hocuspocus/extension-redis";
+
+Server.configure({
+ extensions: [
+ new Redis({
+ host: "localhost",
+ port: 6379,
+ }),
+ ],
+});
+```
+
+## Resources
+
+
+
+ Official documentation
+
+
+
+ Complete source code
+
+
+
+## Next Steps
+
+
+
+ Try our official collaboration package
+
+
+
+ All SuperDoc collaboration options
+
+
diff --git a/apps/docs/modules/collaboration/self-hosted/overview.mdx b/apps/docs/modules/collaboration/self-hosted/overview.mdx
new file mode 100644
index 0000000000..93da1ab9ed
--- /dev/null
+++ b/apps/docs/modules/collaboration/self-hosted/overview.mdx
@@ -0,0 +1,188 @@
+---
+title: Self-Hosted Collaboration
+sidebarTitle: Overview
+keywords: "self-hosted collaboration, on-premise, websocket server, yjs server"
+---
+
+Run your own collaboration infrastructure for full control over data, persistence, and scaling.
+
+## Why Self-Host?
+
+
+
+ Keep all data on your infrastructure
+
+
+ Use your own database (PostgreSQL, S3, Redis)
+
+
+ Deploy behind your firewall
+
+
+ Standard Yjs protocol, portable data
+
+
+
+## Architecture
+
+```mermaid
+flowchart TB
+ subgraph infra[Your Infrastructure]
+ A[User A SuperDoc] <--> WS[WebSocket Server Yjs Provider]
+ WS <--> B[User B SuperDoc]
+ WS --> DB[(Persistence DB, S3, etc.)]
+ end
+```
+
+## Choose Your Approach
+
+| Option | Best For | Setup Time |
+|--------|----------|------------|
+| [SuperDoc Yjs](/modules/collaboration/self-hosted/superdoc-yjs) | New projects, recommended | 30 mins |
+| [Hocuspocus](/modules/collaboration/self-hosted/hocuspocus) | TipTap ecosystem users | 30 mins |
+| [Y-Sweet](/modules/collaboration/self-hosted/y-sweet) | High performance, easy deployment | 30 mins |
+
+## Quick Comparison
+
+
+
+ **Our official collaboration package**
+
+ - Purpose-built for SuperDoc
+ - Builder pattern API
+ - Auto-save with debounce
+ - Memory management
+
+ ```bash
+ npm install @superdoc-dev/superdoc-yjs-collaboration
+ ```
+
+ [Get Started](/modules/collaboration/self-hosted/superdoc-yjs)
+
+
+
+ **TipTap's Yjs server**
+
+ - Mature, battle-tested
+ - Rich extension ecosystem
+ - Good if already using TipTap
+
+ ```bash
+ npm install @hocuspocus/server
+ ```
+
+ [Get Started](/modules/collaboration/self-hosted/hocuspocus)
+
+
+
+ **Jamsocket's Yjs server**
+
+ - High performance, Rust-based
+ - Easy to deploy with `npx`
+ - Optional managed cloud via Jamsocket
+
+ ```bash
+ npx y-sweet@latest serve
+ ```
+
+ [Get Started](/modules/collaboration/self-hosted/y-sweet)
+
+
+
+
+## Client Connection Options
+
+When self-hosting, you have two ways to connect SuperDoc:
+
+### Option 1: URL-based (SuperDoc manages provider)
+
+SuperDoc creates and manages the WebSocket connection:
+
+```javascript
+new SuperDoc({
+ selector: '#editor',
+ modules: {
+ collaboration: {
+ url: 'wss://your-server.com/doc',
+ token: 'auth-token'
+ }
+ }
+});
+```
+
+### Option 2: Provider-agnostic (You manage provider)
+
+You create the Yjs provider yourself:
+
+```javascript
+import { HocuspocusProvider } from '@hocuspocus/provider';
+import * as Y from 'yjs';
+
+const ydoc = new Y.Doc();
+const provider = new HocuspocusProvider({
+ url: 'wss://your-server.com',
+ name: 'document-123',
+ document: ydoc
+});
+
+new SuperDoc({
+ selector: '#editor',
+ modules: {
+ collaboration: { ydoc, provider }
+ }
+});
+```
+
+
+The provider-agnostic approach gives you more control but requires managing the provider lifecycle yourself.
+
+
+## Requirements
+
+### Server
+
+- Node.js 18+
+- WebSocket support (native or via library)
+- Persistent storage for documents
+
+### Network
+
+- WSS (WebSocket Secure) in production
+- Proper CORS configuration
+- Load balancer with sticky sessions (if scaling)
+
+## Next Steps
+
+
+
+ Recommended - our official package
+
+
+
+ Alternative using TipTap's server
+
+
+
+ High performance Rust-based server
+
+
+
+ All client-side options and events
+
+
diff --git a/apps/docs/modules/collaboration/self-hosted/superdoc-yjs.mdx b/apps/docs/modules/collaboration/self-hosted/superdoc-yjs.mdx
new file mode 100644
index 0000000000..b57f5b381c
--- /dev/null
+++ b/apps/docs/modules/collaboration/self-hosted/superdoc-yjs.mdx
@@ -0,0 +1,388 @@
+---
+title: SuperDoc Yjs Collaboration
+sidebarTitle: SuperDoc Yjs
+keywords: "superdoc collaboration server, yjs server, self-hosted, websocket"
+---
+
+Our official collaboration package for self-hosted deployments. Purpose-built for SuperDoc with a simple builder API.
+
+## Installation
+
+```bash
+npm install @superdoc-dev/superdoc-yjs-collaboration
+```
+
+## Quick Start
+
+### Server
+
+```typescript
+import Fastify from 'fastify';
+import websocketPlugin from '@fastify/websocket';
+import { CollaborationBuilder } from '@superdoc-dev/superdoc-yjs-collaboration';
+
+const fastify = Fastify({ logger: true });
+fastify.register(websocketPlugin);
+
+// Build collaboration service
+const collaboration = new CollaborationBuilder()
+ .withName('My Collaboration Server')
+ .withDebounce(2000) // Auto-save every 2 seconds
+ .onLoad(async ({ documentId }) => {
+ // Load document from your database
+ return await db.getDocument(documentId);
+ })
+ .onAutoSave(async ({ documentId, document }) => {
+ // Save document to your database
+ await db.saveDocument(documentId, document);
+ })
+ .build();
+
+// WebSocket endpoint
+fastify.register(async (app) => {
+ app.get('/doc/:documentId', { websocket: true }, (socket, request) => {
+ collaboration.welcome(socket, request);
+ });
+});
+
+fastify.listen({ port: 3050 });
+```
+
+### Client
+
+```javascript
+import { SuperDoc } from 'superdoc';
+
+new SuperDoc({
+ selector: '#editor',
+ document: {
+ id: 'document-123',
+ type: 'docx'
+ },
+ user: {
+ name: 'John Smith',
+ email: 'john@example.com'
+ },
+ modules: {
+ collaboration: {
+ url: 'ws://localhost:3050/doc',
+ token: 'auth-token'
+ }
+ }
+});
+```
+
+## Builder API
+
+The `CollaborationBuilder` provides a fluent interface:
+
+```javascript
+const collaboration = new CollaborationBuilder()
+ .withName('service-name') // Service identifier
+ .withDebounce(2000) // Auto-save interval (ms)
+ .withDocumentExpiryMs(300000) // Cache expiry after disconnect
+ .onAuthenticate(authHandler) // Validate users
+ .onLoad(loadHandler) // Load documents
+ .onAutoSave(saveHandler) // Save documents
+ .onChange(changeHandler) // React to changes
+ .onConfigure(configHandler) // Configure Yjs doc
+ .build();
+```
+
+## Hooks
+
+### onLoad (Required)
+
+Load document state from storage:
+
+```typescript
+.onLoad(async ({ documentId }) => {
+ const state = await db.query(
+ 'SELECT state FROM documents WHERE id = $1',
+ [documentId]
+ );
+
+ if (!state) {
+ // Return null for new documents
+ return null;
+ }
+
+ // Return Uint8Array
+ return state;
+})
+```
+
+### onAutoSave (Required)
+
+Save document state to storage:
+
+```typescript
+import * as Y from 'yjs';
+
+.onAutoSave(async ({ documentId, document }) => {
+ const state = Y.encodeStateAsUpdate(document);
+
+ await db.query(
+ `INSERT INTO documents (id, state, updated_at)
+ VALUES ($1, $2, NOW())
+ ON CONFLICT (id) DO UPDATE SET state = $2, updated_at = NOW()`,
+ [documentId, Buffer.from(state)]
+ );
+})
+```
+
+### onAuthenticate (Optional)
+
+Validate users connecting to documents:
+
+```typescript
+.onAuthenticate(async ({ token, documentId, request }) => {
+ try {
+ const payload = jwt.verify(token, process.env.JWT_SECRET);
+
+ // Check document permissions
+ const hasAccess = await checkAccess(payload.userId, documentId);
+ if (!hasAccess) {
+ throw new Error('Access denied');
+ }
+
+ return {
+ userId: payload.userId,
+ name: payload.name
+ };
+ } catch (error) {
+ throw new Error('Authentication failed');
+ }
+})
+```
+
+### onChange (Optional)
+
+React to document changes (fires on every edit):
+
+```typescript
+.onChange(({ documentId }) => {
+ // Use sparingly - fires frequently
+ metrics.increment('document.edits');
+})
+```
+
+## Storage Examples
+
+
+
+ ```typescript
+ import { Pool } from 'pg';
+ const pool = new Pool();
+
+ // Load
+ .onLoad(async ({ documentId }) => {
+ const { rows } = await pool.query(
+ 'SELECT state FROM documents WHERE id = $1',
+ [documentId]
+ );
+ return rows[0]?.state || null;
+ })
+
+ // Save
+ .onAutoSave(async ({ documentId, document }) => {
+ const state = Y.encodeStateAsUpdate(document);
+ await pool.query(
+ `INSERT INTO documents (id, state, updated_at)
+ VALUES ($1, $2, NOW())
+ ON CONFLICT (id) DO UPDATE SET state = $2, updated_at = NOW()`,
+ [documentId, Buffer.from(state)]
+ );
+ })
+ ```
+
+
+
+ ```typescript
+ import { S3Client, GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3';
+
+ const s3 = new S3Client({ region: 'us-east-1' });
+
+ // Load
+ .onLoad(async ({ documentId }) => {
+ try {
+ const response = await s3.send(new GetObjectCommand({
+ Bucket: 'my-documents',
+ Key: `collab/${documentId}.yjs`
+ }));
+ return await response.Body.transformToByteArray();
+ } catch (error) {
+ if (error.Code === 'NoSuchKey') return null;
+ throw error;
+ }
+ })
+
+ // Save
+ .onAutoSave(async ({ documentId, document }) => {
+ const state = Y.encodeStateAsUpdate(document);
+ await s3.send(new PutObjectCommand({
+ Bucket: 'my-documents',
+ Key: `collab/${documentId}.yjs`,
+ Body: state
+ }));
+ })
+ ```
+
+
+
+ ```typescript
+ import Redis from 'ioredis';
+ const redis = new Redis();
+
+ // Load
+ .onLoad(async ({ documentId }) => {
+ const data = await redis.getBuffer(`doc:${documentId}`);
+ return data || null;
+ })
+
+ // Save
+ .onAutoSave(async ({ documentId, document }) => {
+ const state = Y.encodeStateAsUpdate(document);
+ await redis.set(
+ `doc:${documentId}`,
+ Buffer.from(state),
+ 'EX', 86400 // Expire after 24 hours
+ );
+ })
+ ```
+
+
+
+## Error Handling
+
+```typescript
+const errorHandlers = {
+ LoadError: (error, socket) => {
+ console.log('Document load failed:', error.message);
+ socket.close(1011, 'Document unavailable');
+ },
+ SaveError: (error, socket) => {
+ console.log('Save failed:', error.message);
+ // Don't close connection for save errors
+ },
+ default: (error, socket) => {
+ console.log('Unknown error:', error.message);
+ socket.close(1011, 'Server error');
+ }
+};
+
+app.get('/doc/:documentId', { websocket: true }, async (socket, request) => {
+ try {
+ await collaboration.welcome(socket, request);
+ } catch (error) {
+ const handler = errorHandlers[error.name] || errorHandlers.default;
+ handler(error, socket);
+ }
+});
+```
+
+## Production Deployment
+
+### Docker
+
+```dockerfile
+FROM node:18-alpine
+
+WORKDIR /app
+COPY package*.json ./
+RUN npm ci --production
+
+COPY . .
+
+EXPOSE 3050
+CMD ["node", "server.js"]
+```
+
+### Environment Variables
+
+```bash
+NODE_ENV=production
+PORT=3050
+JWT_SECRET=your-secret-key
+DATABASE_URL=postgres://user:pass@localhost/db
+```
+
+### Health Check
+
+```typescript
+fastify.get('/health', (request, reply) => {
+ reply.send({
+ status: 'healthy',
+ documents: collaboration.getActiveDocumentCount(),
+ connections: collaboration.getConnectionCount()
+ });
+});
+```
+
+## Security
+
+
+
+ Always use encrypted WebSocket (`wss://`) in production
+
+
+
+ Use the `onAuthenticate` hook to validate users
+
+
+
+ ```typescript
+ .onLoad(async ({ documentId }) => {
+ // Prevent path traversal
+ if (!/^[a-zA-Z0-9-]+$/.test(documentId)) {
+ throw new Error('Invalid document ID');
+ }
+ // ... load document
+ })
+ ```
+
+
+
+ Limit connections per user to prevent abuse
+
+
+
+## Resources
+
+
+
+ Complete working example
+
+
+
+ Fastify server setup
+
+
+
+## Next Steps
+
+
+
+ Client-side options, events, and hooks
+
+
+
+ Use TipTap's Yjs server instead
+
+
diff --git a/apps/docs/modules/collaboration/self-hosted/y-sweet.mdx b/apps/docs/modules/collaboration/self-hosted/y-sweet.mdx
new file mode 100644
index 0000000000..23c78cdc27
--- /dev/null
+++ b/apps/docs/modules/collaboration/self-hosted/y-sweet.mdx
@@ -0,0 +1,275 @@
+---
+title: Y-Sweet
+sidebarTitle: Y-Sweet
+keywords: "y-sweet collaboration, jamsocket yjs, self-hosted collaboration, yjs sync server"
+---
+
+[Y-Sweet](https://docs.jamsocket.com/y-sweet) is a standalone Yjs sync server built by [Jamsocket](https://jamsocket.com/). It's designed for high performance and easy deployment.
+
+## Architecture
+
+```mermaid
+flowchart LR
+ Client["Client (React):3000"] --> Auth["Auth Server (Express):3001"]
+ Auth --> YSweet["Y-Sweet Server:8080"]
+```
+
+- **Y-Sweet Server** (port 8080): Handles real-time Yjs sync
+- **Auth Server** (port 3001): Issues client tokens via Y-Sweet SDK
+- **Client** (port 3000): Your app with SuperDoc
+
+## Setup
+
+### 1. Start Y-Sweet Server
+
+The easiest way to run Y-Sweet locally:
+
+```bash
+npx y-sweet@latest serve
+```
+
+To persist data to disk:
+
+```bash
+npx y-sweet@latest serve ./data
+```
+
+### 2. Create Auth Server
+
+Y-Sweet requires a backend to issue authentication tokens.
+
+```bash
+npm install @y-sweet/sdk express cors
+```
+
+```javascript
+import express from "express";
+import cors from "cors";
+import { DocumentManager } from "@y-sweet/sdk";
+
+const CONNECTION_STRING =
+ process.env.CONNECTION_STRING || "ys://127.0.0.1:8080";
+const PORT = process.env.PORT || 3001;
+
+const app = express();
+app.use(cors());
+app.use(express.json());
+
+const manager = new DocumentManager(CONNECTION_STRING);
+
+app.post("/api/auth", async (req, res) => {
+ try {
+ const { docId } = req.body;
+ const clientToken = await manager.getOrCreateDocAndToken(docId);
+ res.json(clientToken);
+ } catch (error) {
+ console.error("Auth error:", error);
+ res.status(500).json({ error: "Failed to get auth token" });
+ }
+});
+
+app.listen(PORT, () => {
+ console.log(`Auth server running on http://localhost:${PORT}`);
+});
+```
+
+### 3. Client Setup
+
+```bash
+npm install @y-sweet/client yjs
+```
+
+```javascript
+import { createYjsProvider } from "@y-sweet/client";
+import * as Y from "yjs";
+import { SuperDoc } from "superdoc";
+
+const AUTH_ENDPOINT = "http://localhost:3001/api/auth";
+const DOC_ID = "my-document";
+
+const ydoc = new Y.Doc();
+const provider = createYjsProvider(ydoc, DOC_ID, AUTH_ENDPOINT);
+
+provider.on("sync", (synced) => {
+ if (!synced) return;
+
+ const superdoc = new SuperDoc({
+ selector: "#editor",
+ documentMode: "editing",
+ user: {
+ name: "John Smith",
+ email: "john@example.com",
+ },
+ modules: {
+ collaboration: { ydoc, provider },
+ },
+ });
+});
+```
+
+## React Example
+
+```tsx
+import { useEffect, useRef, useState } from "react";
+import { createYjsProvider } from "@y-sweet/client";
+import * as Y from "yjs";
+import { SuperDoc } from "superdoc";
+import "superdoc/style.css";
+
+const AUTH_ENDPOINT = "http://localhost:3001/api/auth";
+const DOC_ID = "my-document";
+
+export default function Editor() {
+ const superdocRef = useRef(null);
+ const [users, setUsers] = useState([]);
+
+ useEffect(() => {
+ const ydoc = new Y.Doc();
+ const provider = createYjsProvider(ydoc, DOC_ID, AUTH_ENDPOINT);
+
+ provider.on("sync", (synced: boolean) => {
+ if (!synced) return;
+
+ superdocRef.current = new SuperDoc({
+ selector: "#superdoc",
+ documentMode: "editing",
+ user: {
+ name: `User ${Math.floor(Math.random() * 1000)}`,
+ email: "user@example.com",
+ },
+ modules: {
+ collaboration: { ydoc, provider },
+ },
+ onAwarenessUpdate: ({ states }) => {
+ setUsers(states.filter((s) => s.user));
+ },
+ });
+ });
+
+ return () => {
+ superdocRef.current?.destroy();
+ provider.destroy();
+ };
+ }, []);
+
+ return (
+
+
+ {users.map((u, i) => (
+
+ {u.user?.name}
+
+ ))}
+
+
+
+ );
+}
+```
+
+## Configuration
+
+### Environment Variables
+
+**Auth Server:**
+
+```bash
+CONNECTION_STRING=ys://127.0.0.1:8080 # Y-Sweet server URL
+PORT=3001 # Auth server port
+```
+
+**Client:**
+
+```bash
+VITE_Y_SWEET_AUTH_ENDPOINT=http://localhost:3001/api/auth
+VITE_DOC_ID=my-document
+```
+
+## Events
+
+```javascript
+// Sync status
+provider.on("sync", (synced) => {
+ if (synced) {
+ console.log("Document synced");
+ }
+});
+
+// Connection status
+provider.on("status", ({ status }) => {
+ // 'connecting' | 'connected' | 'disconnected'
+ console.log("Connection:", status);
+});
+```
+
+## Cleanup
+
+```javascript
+// Always clean up
+provider.destroy();
+superdoc.destroy();
+```
+
+## Production Deployment
+
+### Docker
+
+```dockerfile
+FROM node:18-alpine
+
+WORKDIR /app
+COPY package*.json ./
+RUN npm ci --production
+
+COPY . .
+
+EXPOSE 3001
+CMD ["node", "server.js"]
+```
+
+### Running Y-Sweet in Production
+
+For production, consider:
+
+1. **Self-hosted**: Run Y-Sweet on your own infrastructure
+2. **Jamsocket Cloud**: Use [Jamsocket's managed Y-Sweet](https://jamsocket.com/) for automatic scaling
+
+## Resources
+
+
+
+ Official documentation
+
+
+
+ Complete source code
+
+
+
+## Next Steps
+
+
+
+ All SuperDoc collaboration options
+
+
+
+ Managed collaboration solutions
+
+
diff --git a/apps/docs/modules/comments.mdx b/apps/docs/modules/comments.mdx
new file mode 100644
index 0000000000..9c3c48f6d6
--- /dev/null
+++ b/apps/docs/modules/comments.mdx
@@ -0,0 +1,671 @@
+---
+title: Comments
+keywords: "word comments api, document annotations, threaded discussions, comment resolution, docx comments"
+---
+
+Add Word-style commenting to documents with threaded discussions, replies, and resolution workflows.
+
+## Quick Start
+
+```javascript
+const superdoc = new SuperDoc({
+ selector: "#editor",
+ document: "contract.docx",
+ user: {
+ name: "John Smith",
+ email: "john@company.com",
+ },
+ modules: {
+ comments: {
+ readOnly: false,
+ allowResolve: true,
+ element: "#comments",
+ },
+ },
+ onCommentsUpdate: ({ type, comment }) => {
+ console.log("Comment event:", type);
+ },
+});
+```
+
+
+The comments module is **enabled by default**. To disable it entirely, set `modules.comments` to `false`:
+
+```javascript
+modules: {
+ comments: false;
+}
+```
+
+
+
+## Module Configuration
+
+
+ View-only mode, prevents new comments
+
+
+
+ Allow marking comments as resolved
+
+
+
+ Container for comments sidebar
+
+
+
+ Enable dual internal/external comment system
+
+
+
+ Hide internal comments from view
+
+
+
+ Comments-only override for permission checks
+
+
+## Viewing Mode Visibility
+
+Comments are hidden by default when `documentMode` is `viewing`. Use the
+top-level `comments.visible` and `trackChanges.visible` flags to control what
+renders in read-only mode.
+
+```javascript
+new SuperDoc({
+ selector: "#viewer",
+ document: "contract.docx",
+ documentMode: "viewing",
+ comments: { visible: true }, // Standard comment threads
+ trackChanges: { visible: false }, // Tracked-change markup + threads
+});
+```
+
+When `trackChanges.visible` is enabled, tracked-change threads render even if
+standard comments remain hidden.
+
+## Setting Up Comments UI
+
+During initialization
+
+```javascript
+modules: {
+ comments: {
+ element: "#comments-sidebar";
+ }
+}
+```
+
+After initialization
+
+```javascript
+superdoc.on("ready", () => {
+ const sidebar = document.querySelector("#comments-sidebar");
+ superdoc.addCommentsList(sidebar);
+});
+```
+
+## Comment Events
+
+### `onCommentsUpdate`
+
+Fired for all comment changes.
+
+
+ Event type
+
+ - `pending` - User selected text, about to add comment - `add` - New comment
+ created - `update` - Comment text edited - `deleted` - Comment removed -
+ `resolved` - Comment marked resolved - `selected` - Comment clicked/selected
+
+
+
+
+ Comment object
+
+
+
+ Additional metadata
+
+
+```javascript
+onCommentsUpdate: ({ type, comment, meta }) => {
+ switch(type) {
+ case 'pending':
+ showCommentDialog();
+ break;
+ case 'add':
+ await saveComment(comment);
+ break;
+ case 'resolved':
+ await markResolved(comment.id);
+ break;
+ }
+}
+```
+
+## Comment Data Structure
+
+
+ Comment object
+
+
+ ### Core properties
+
+ Unique identifier
+
+
+ HTML content
+
+
+ Parent for replies
+
+
+ Document MIME type
+
+
+ Array of mentioned users
+
+
+ Full JSON representation of comment content with ProseMirror schema
+
+ ```json
+ {
+ "type": "paragraph",
+ "attrs": {
+ "lineHeight": null,
+ "textIndent": null,
+ "paraId": null,
+ "textId": null,
+ "rsidR": null,
+ "rsidRDefault": null,
+ "rsidP": null,
+ "rsidRPr": null,
+ "rsidDel": null,
+ "spacing": {
+ "lineSpaceAfter": 0,
+ "lineSpaceBefore": 0,
+ "line": 0,
+ "lineRule": null
+ },
+ "extraAttrs": {},
+ "marksAttrs": null,
+ "indent": null,
+ "borders": null,
+ "class": null,
+ "styleId": null,
+ "sdBlockId": null,
+ "attributes": null,
+ "filename": null,
+ "keepLines": null,
+ "keepNext": null,
+ "paragraphProperties": null,
+ "dropcap": null,
+ "pageBreakSource": null,
+ "justify": null,
+ "tabStops": null
+ },
+ "content": [
+ {
+ "type": "text",
+ "text": "Could you elaborate on this?"
+ }
+ ]
+ }
+ ```
+
+
+
+ ### Author information
+
+ Author display name
+
+
+ Author email
+
+
+ Unix timestamp
+
+
+ ### Position
+
+ Document ID
+
+
+ Position in document
+
+
+
+ Visual bounds (top, left, bottom, right)
+ ```json
+ {
+ "top": 96,
+ "left": 201.9296875,
+ "right": 241.9609375,
+ "bottom": 19.5
+ }
+ ```
+
+
+ Number of page comment belongs to
+
+
+ Origin of comment
+
+
+ ID of document
+
+
+
+
+
+ ### State
+
+ Internal/external flag
+
+
+ Resolution timestamp
+
+
+ Resolver email
+
+
+ Resolver name
+
+
+ ### Track changes
+
+ Is track change comment
+
+
+ 'trackInsert', 'trackDelete', or 'trackFormat'
+
+
+ Text that was deleted
+
+
+ Text content of tracked changes
+
+
+ ### Import metadata
+
+ Original Word comment ID
+
+
+ Original author info
+
+
+
+
+
+
+```json
+{
+ // Core properties
+ "commentId": "a41eaa19-feb6-4e17-8bf3-d9fbf80e9f06",
+ "commentText": "Could you elaborate on this?",
+ "parentCommentId": null,
+ "fileType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ "mentions": [],
+ "commentJSON": { ... }, // see commentJSON under "Core properties" section
+
+ // Author information
+ "creatorName": "Demo User",
+ "creatorEmail": "demo@example.com",
+ "createdTime": 1762458019942,
+
+ // Position
+ "fileId": "9c4ba8e0-6740-4531-ac8e-b2e8d30c2ffc",
+ "selection": {
+ "selectionBounds": {
+ "top": 369.9765625,
+ "left": 532.21875,
+ "right": 661.7890625,
+ "bottom": 404.875
+ },
+ "page": 1,
+ "source": "super-editor",
+ "documentId": "9c4ba8e0-6740-4531-ac8e-b2e8d30c2ffc"
+ },
+
+ // State
+ "isInternal": false,
+ "resolvedTime": null,
+ "resolvedByEmail": null,
+ "resolvedByName": null,
+
+ // Track changes
+ "trackedChange": null,
+ "trackedChangeType": null,
+ "deletedText": null,
+ "trackedChangeText": null,
+
+ // Import metadata
+ "importedId": null,
+ "importedAuthor": null
+}
+```
+
+
+## Threaded Replies
+
+Comments support nested discussions:
+
+```javascript
+// Parent comment
+const parent = {
+ commentId: "parent-123",
+ commentText: "Should we change this?",
+ parentCommentId: null,
+};
+
+// Reply
+const reply = {
+ commentId: "reply-456",
+ commentText: "Yes, let's update",
+ parentCommentId: "parent-123",
+};
+
+// Nested reply
+const nested = {
+ commentId: "reply-789",
+ commentText: "Done",
+ parentCommentId: "reply-456",
+};
+```
+
+## Resolution Workflow
+
+### Marking Comments Resolved
+
+```javascript
+onCommentsUpdate: ({ type, comment }) => {
+ if (type === 'resolved') {
+ const resolution = {
+ commentId: comment.commentId,
+ resolvedTime: comment.resolvedTime,
+ resolvedByName: comment.resolvedByName,
+ resolvedByEmail: comment.resolvedByEmail
+ };
+
+ await api.resolveComment(resolution);
+ notifyParticipants(comment);
+ }
+}
+```
+
+### Permission Control
+
+```javascript
+const canResolve = (comment, user, role) => {
+ // Document owners can always resolve
+ if (role === "editor") return true;
+
+ // Authors can resolve their own
+ if (comment.creatorEmail === user.email) return true;
+
+ return false;
+};
+```
+
+## Word Import/Export
+
+### Importing Comments
+
+
+ Word comments are automatically imported with the document and marked with
+ `importedId`
+
+
+```javascript
+const importedComment = {
+ commentId: "uuid-generated",
+ importedId: "w15:123", // Original Word ID
+ importedAuthor: {
+ name: "John Smith (imported)",
+ email: "john@company.com",
+ },
+ parentCommentId: "parent-uuid", // Relationships preserved
+};
+```
+
+### Exporting Comments
+
+
+ Export mode
+
+ - `external` - Include comments in DOCX - `clean` - Remove all comments -
+ Custom function for filtering
+
+
+
+```javascript
+// With comments
+const blob = await superdoc.export({
+ commentsType: "external",
+ isFinalDoc: false,
+});
+
+// Clean version
+const cleanBlob = await superdoc.export({
+ commentsType: "clean",
+ isFinalDoc: true,
+});
+```
+
+## Permission Resolver
+
+Customize who can resolve comments or accept tracked changes by returning `false` from a resolver function. The resolver receives the active permission (`RESOLVE_OWN`, `RESOLVE_OTHER`, `REJECT_OWN`, `REJECT_OTHER`), the current user, and any tracked-change metadata linked to the comment.
+
+This controls the Resolve buttons in the comments panel and the Accept/Reject actions shown in tracked-change menus.
+
+```javascript
+const superdoc = new SuperDoc({
+ user: { name: "Alex Editor", email: "alex@example.com" },
+ modules: {
+ comments: {
+ permissionResolver: ({
+ permission,
+ trackedChange,
+ currentUser,
+ defaultDecision,
+ }) => {
+ const authorEmail = trackedChange?.attrs?.authorEmail;
+ const activeUserEmail = currentUser?.email;
+ if (
+ permission === "RESOLVE_OTHER" &&
+ authorEmail &&
+ activeUserEmail !== authorEmail
+ ) {
+ return false; // Hide Accept button for suggestions from other authors
+ }
+ return defaultDecision;
+ },
+ },
+ },
+});
+```
+
+
+ You can set a global resolver with the top-level `permissionResolver` config.
+ Module-level resolvers win when both are defined.
+
+
+## Track Changes Integration
+
+Comments automatically generate for tracked changes:
+
+
+ Special comment for track changes
+
+
+ Always `true`
+
+
+ 'trackInsert', 'trackDelete', or 'trackFormat'
+
+
+ Cannot be edited
+
+
+ Accept change handler
+
+
+ Reject change handler
+
+
+
+
+## API Methods
+
+### Adding Comments
+
+#### `insertComment`
+
+Add comment to selected text.
+
+
+ Comment options
+
+
+ Comment HTML content
+
+
+ Author name
+
+
+ Author email
+
+
+
+
+```javascript
+superdoc.activeEditor.commands.insertComment({
+ commentText: "Review this section",
+ creatorName: "John Smith",
+ creatorEmail: "john@company.com",
+});
+```
+
+### Managing Comments
+
+#### `removeComment`
+
+
+ Comment to remove
+
+
+```javascript
+superdoc.activeEditor.commands.removeComment({
+ commentId: "comment-123",
+});
+```
+
+#### `setActiveComment`
+
+
+ Comment to highlight
+
+
+```javascript
+superdoc.activeEditor.commands.setActiveComment({
+ commentId: "comment-123",
+});
+```
+
+#### `resolveComment`
+
+
+ Comment to resolve
+
+
+```javascript
+superdoc.activeEditor.commands.resolveComment({
+ commentId: "comment-123",
+});
+```
+
+## Common Patterns
+
+### Contract Review Workflow
+
+```javascript
+modules: {
+ comments: {
+ allowResolve: false, // Only owner resolves
+ element: '#legal-comments'
+ }
+}
+
+onCommentsUpdate: ({ type, comment }) => {
+ // Track progress
+ if (type === 'add') stats.total++;
+ if (type === 'resolved') stats.resolved++;
+
+ // Auto-assign
+ if (comment.commentText.match(/\bprice|cost\b/i)) {
+ assignToFinanceTeam(comment);
+ }
+}
+```
+
+### Internal Review System
+
+```javascript
+modules: {
+ comments: {
+ useInternalExternalComments: true;
+ }
+}
+
+onCommentsUpdate: ({ comment }) => {
+ if (comment.isInternal) {
+ syncToInternalTeam(comment);
+ } else {
+ syncToAllUsers(comment);
+ }
+};
+```
+
+### Auto-save Comments
+
+```javascript
+import { debounce } from "lodash";
+
+const saveComment = debounce(async (comment) => {
+ await api.updateComment(comment.commentId, comment);
+}, 1000);
+
+onCommentsUpdate: ({ type, comment }) => {
+ if (type === "update") {
+ saveComment(comment);
+ }
+};
+```
+
+## Performance Considerations
+
+
+ For documents with many comments: - Implement viewport-based loading -
+ Virtualize comment lists - Set reasonable limits (e.g., 500 comments max) -
+ Limit comment length (e.g., 10,000 characters)
+
+
+```javascript
+const MAX_COMMENTS = 500;
+
+onCommentsUpdate: ({ type }) => {
+ if (type === "add" && commentCount >= MAX_COMMENTS) {
+ showWarning("Maximum comments reached");
+ return false;
+ }
+};
+```
diff --git a/apps/docs/modules/overview.mdx b/apps/docs/modules/overview.mdx
new file mode 100644
index 0000000000..ed1f481766
--- /dev/null
+++ b/apps/docs/modules/overview.mdx
@@ -0,0 +1,104 @@
+---
+title: Modules
+sidebarTitle: Overview
+keywords: "superdoc modules, editor modules, document features, modular architecture, plugin system"
+---
+
+SuperDoc ships with core DOCX editing. Modules add specialized features your users need.
+
+## What are modules?
+
+Modules are opt-in features that extend SuperDoc:
+- **Collaboration** - Multiple users editing simultaneously
+- **Comments** - Threaded discussions on document content
+- **Toolbar** - Formatting controls and commands
+
+Each module is self-contained. Enable only what you need.
+
+## Basic usage
+
+```javascript
+const superdoc = new SuperDoc({
+ selector: '#editor',
+ document: 'contract.docx',
+
+ // Enable modules you need
+ modules: {
+ toolbar: { selector: '#toolbar' },
+ comments: { allowResolve: true }
+ }
+});
+```
+
+## Available modules
+
+
+
+ Real-time editing with WebSockets
+
+
+ Threaded discussions and annotations
+
+
+ Customizable formatting controls
+
+
+
+## Modules vs Methods
+
+**Modules** are features you configure at initialization:
+```javascript
+modules: {
+ collaboration: { url: 'wss://server.com' },
+ toolbar: { selector: '#toolbar' }
+}
+```
+
+**Methods** are actions you call after initialization:
+```javascript
+superdoc.search('contract'); // Not a module, just a method
+superdoc.export(); // Not a module, just a method
+```
+
+## Performance considerations
+
+Each module adds weight. For read-only viewing:
+
+```javascript
+// Minimal viewer - no modules
+const viewer = new SuperDoc({
+ selector: '#editor',
+ document: 'contract.docx',
+ documentMode: 'viewing'
+ // No modules configured
+});
+```
+
+For full editing:
+
+```javascript
+// Full editor - all modules
+const editor = new SuperDoc({
+ selector: '#editor',
+ document: 'contract.docx',
+ modules: {
+ toolbar: { selector: '#toolbar' },
+ comments: { allowResolve: true },
+ collaboration: { url: 'wss://server.com' }
+ }
+});
+```
+
+## Module interactions
+
+Some modules work together:
+
+- **Collaboration + Comments** = Comments sync across users
+
+## Next steps
+
+Pick the modules you need:
+
+- [Collaboration](/modules/collaboration) - Set up real-time editing
+- [Comments](/modules/comments) - Add discussions
+- [Toolbar](/modules/toolbar) - Add formatting controls
\ No newline at end of file
diff --git a/apps/docs/modules/toolbar.mdx b/apps/docs/modules/toolbar.mdx
new file mode 100644
index 0000000000..41bd642f80
--- /dev/null
+++ b/apps/docs/modules/toolbar.mdx
@@ -0,0 +1,711 @@
+---
+title: Toolbar
+keywords: "word toolbar, document formatting controls, custom toolbar, editor ui components, formatting buttons"
+---
+
+The toolbar provides a customizable UI for document editing with support for custom buttons, responsive layouts, and role-based controls.
+
+## Quick Start
+
+```javascript
+const superdoc = new SuperDoc({
+ selector: '#editor',
+ document: 'contract.docx',
+ toolbar: '#toolbar' // Simple toolbar with defaults
+});
+```
+
+## Module Configuration
+
+
+ Container element for toolbar
+
+
+
+ Layout regions for button placement
+
+
+
+ Custom button arrangement by group
+
+
+ ```javascript
+ groups: {
+ left: ['undo', 'redo'],
+ center: ['bold', 'italic', 'underline'],
+ right: ['documentMode', 'export']
+ }
+ ```
+
+
+
+
+ Button names to exclude from toolbar
+
+
+
+ Custom SVG icons for buttons
+
+
+
+ Custom tooltips and labels
+
+
+
+ Available font options in font dropdown
+
+
+
+ Auto-hide buttons on small screens
+
+
+
+ Size relative to container instead of window
+
+
+
+ Custom button definitions
+
+
+## Button Categories
+
+
+
+ Bold, italic, underline, strikethrough
+
+
+ Font family, size, color, highlight
+
+
+ Alignment, lists, indentation
+
+
+ Undo, redo, search, links, tables
+
+
+
+## Available Buttons
+
+### Text Formatting
+
+
+ Toggle bold formatting (`Ctrl+B`)
+
+
+
+ Toggle italic formatting (`Ctrl+I`)
+
+
+
+ Toggle underline formatting (`Ctrl+U`)
+
+
+
+ Toggle strikethrough formatting
+
+
+### Font Controls
+
+
+ Font family selector
+
+
+
+ Font size selector
+
+
+
+ Text color picker
+
+
+
+ Background highlight color
+
+
+### Paragraph Formatting
+
+
+ Align text left
+
+
+
+ Center align text
+
+
+
+ Align text right
+
+
+
+ Justify text
+
+
+
+ Toggle bullet list
+
+
+
+ Toggle numbered list
+
+
+
+ Decrease indent
+
+
+
+ Increase indent
+
+
+### Feature Buttons
+
+These buttons appear when their respective modules are enabled
+
+
+ Add comment (requires Comments module)
+
+
+
+ Accept tracked change (requires Track Changes)
+
+
+
+ Reject tracked change (requires Track Changes)
+
+
+
+ Switch between editing/viewing/suggesting modes
+
+
+## Custom Buttons
+
+### Basic Button
+
+
+ Button type: `'button'` or `'dropdown'`
+
+
+
+ Unique button identifier
+
+
+
+ Hover text
+
+
+
+ SVG icon string
+
+
+
+ Layout group: 'left', 'center', or 'right'
+
+
+
+ Command name or handler function.
+ See [CommandItem](#commanditem) type definition.
+
+
+```javascript
+modules: {
+ toolbar: {
+ customButtons: [{
+ type: 'button',
+ name: 'myButton',
+ tooltip: 'My Custom Button',
+ icon: '... ',
+ group: 'center',
+ command: ({ item, argument, option }) => {
+ superdoc.activeEditor.commands.myCommand();
+ }
+ }]
+ }
+}
+```
+
+To implement a custom command that can be called as shown above, [you'll need to create an extension](/extensions/creating-extensions).
+
+### Dropdown Button
+
+
+ Dropdown menu options
+
+
+
+ Display text
+
+
+ Option value
+
+
+ Optional icon
+
+
+
+
+
+ Show dropdown arrow
+
+
+```javascript
+customButtons: [{
+ type: 'dropdown',
+ name: 'templates',
+ tooltip: 'Insert Template',
+ icon: templateIcon,
+ hasCaret: true,
+ options: [
+ { label: 'Contract', key: 'contract' },
+ { label: 'Invoice', key: 'invoice' }
+ ],
+ command: ({ option }) => {
+ if (option) loadTemplate(option.key);
+ }
+}]
+```
+
+### Toggle Button
+
+
+ Initial active state
+
+
+
+ Icon when active (optional)
+
+
+```javascript
+customButtons: [{
+ type: 'button',
+ name: 'darkMode',
+ tooltip: 'Toggle Dark Mode',
+ icon: moonIcon,
+ activeIcon: sunIcon,
+ active: false,
+ command: ({ item }) => {
+ const isActive = !item.active.value;
+ item.active.value = isActive;
+ setDarkMode(isActive);
+ }
+}]
+```
+
+## Command System
+
+### Command Handler
+
+Commands receive these parameters:
+
+
+ The toolbar button object
+
+
+
+ Value passed (e.g., color hex, font name)
+
+
+
+ Selected dropdown option (dropdowns only)
+
+
+```javascript
+command: ({ item, argument, option }) => {
+ const editor = superdoc.activeEditor;
+
+ // Color button passes hex
+ if (item.name === 'color') {
+ editor.commands.setColor(argument); // #FF0000
+ }
+
+ // Dropdown passes selected option
+ if (option) {
+ handleOption(option.key);
+ }
+}
+```
+
+### Built-in Command Names
+
+Use string command names for standard operations
+
+```javascript
+// Text formatting
+command: 'toggleBold'
+command: 'toggleItalic'
+command: 'toggleUnderline'
+
+// Paragraph
+command: 'setTextAlign'
+command: 'toggleBulletList'
+
+// Special handlers
+command: 'setZoom' // Handled by SuperDoc
+command: 'setDocumentMode' // Changes editing state
+```
+
+## Icon Customization
+
+### Replace Built-in Icons
+
+
+ Map of button names to SVG strings
+
+
+```javascript
+modules: {
+ toolbar: {
+ icons: {
+ bold: '... ',
+ italic: '... ',
+ // Function for dynamic icons
+ darkMode: () => isDark ? sunIcon : moonIcon
+ }
+ }
+}
+```
+
+
+Icons should be 24x24 viewBox SVGs with `fill="currentColor"` for proper theming
+
+
+## Font Configuration
+
+
+ Available font options
+
+
+
+ Display name
+
+
+ Font-family CSS value
+
+
+ Font weight (optional)
+
+
+ Additional properties
+
+
+
+
+
+SuperDoc does not load fonts automatically. Custom fonts from imported DOCX files will display in the toolbar, but won't be selectable unless you load them in your application (via CSS `@font-face`, Google Fonts, etc.) and add them to the `fonts` array.
+
+
+```javascript
+fonts: [
+ // System fonts
+ { label: 'Arial', key: 'Arial' },
+ { label: 'Times', key: 'Times New Roman' },
+
+ // Custom web font
+ {
+ label: 'Brand Font',
+ key: 'BrandFont, sans-serif',
+ fontWeight: 400,
+ props: {
+ style: { fontFamily: 'BrandFont' }
+ }
+ }
+]
+```
+
+## Responsive Behavior
+
+### Breakpoints
+
+The toolbar adapts at these widths:
+
+
+ All buttons visible
+
+
+
+ Hide: styles, format painter
+
+
+
+ Hide: separators
+
+
+
+ Hide: zoom, font, redo
+
+
+
+ Show overflow menu
+
+
+### Container-Based Sizing
+
+```javascript
+modules: {
+ toolbar: {
+ responsiveToContainer: true, // Size based on container
+ hideButtons: true // Auto-hide on small screens
+ }
+}
+```
+
+## Role-Based Controls
+
+
+
+ ```javascript
+ role: 'viewer'
+ // Shows: zoom, search, print, export
+ // All editing disabled
+ ```
+
+
+
+ ```javascript
+ role: 'suggester'
+ // Track changes enabled
+ // Regular formatting available
+ // Cannot accept others' changes
+ ```
+
+
+
+ ```javascript
+ role: 'editor'
+ // All buttons available
+ // Full editing capabilities
+ ```
+
+
+
+## Common Configurations
+
+### Contract Review
+
+```javascript
+modules: {
+ toolbar: {
+ groups: {
+ left: ['undo', 'redo', 'search'],
+ center: ['addComment', 'acceptChange', 'rejectChange'],
+ right: ['documentMode', 'export']
+ },
+ customButtons: [{
+ name: 'approve',
+ icon: checkIcon,
+ tooltip: 'Approve Document',
+ group: 'right',
+ command: () => approveDocument()
+ }]
+ }
+}
+```
+
+### Minimal Editor
+
+```javascript
+modules: {
+ toolbar: {
+ groups: {
+ center: [
+ 'bold', 'italic',
+ 'link', 'image',
+ 'list', 'numberedlist'
+ ]
+ },
+ excludeItems: ['zoom', 'ruler', 'pageBreak']
+ }
+}
+```
+
+### AI-Enhanced
+
+```javascript
+modules: {
+ toolbar: {
+ customButtons: [{
+ type: 'dropdown',
+ name: 'aiTools',
+ icon: aiIcon,
+ tooltip: 'AI Tools',
+ options: [
+ { label: 'Improve Writing', key: 'improve' },
+ { label: 'Fix Grammar', key: 'grammar' },
+ { label: 'Make Concise', key: 'concise' }
+ ],
+ command: ({ option }) => {
+ const selection = editor.getSelectedText();
+ aiProcess(option.key, selection);
+ }
+ }]
+ }
+}
+```
+
+## Toolbar State
+
+### Accessing Toolbar
+
+
+ Toolbar instance when configured
+
+
+```javascript
+// Get toolbar instance
+const toolbar = superdoc.toolbar;
+
+// Get specific button
+const boldButton = toolbar.getToolbarItemByName('bold');
+
+// Update button state
+boldButton.active.value = true;
+boldButton.disabled.value = false;
+
+// Update entire toolbar
+toolbar.updateToolbarState();
+```
+
+## Events
+
+### Toolbar Commands
+
+```javascript
+toolbar.on('superdoc-command', ({ item, argument }) => {
+ console.log(`Command: ${item.command}`);
+ console.log(`Argument: ${argument}`);
+});
+```
+
+### State Changes
+
+```javascript
+toolbar.on('state-update', () => {
+ const boldActive = toolbar
+ .getToolbarItemByName('bold')
+ .active.value;
+
+ updateUIIndicator(boldActive);
+});
+```
+
+## Styling
+
+### CSS Variables
+
+```css
+:root {
+ --toolbar-height: 48px;
+ --toolbar-bg: white;
+ --toolbar-border: #e0e0e0;
+ --toolbar-button-size: 32px;
+ --toolbar-button-hover: #f5f5f5;
+ --toolbar-button-active: #e3f2fd;
+}
+
+[data-theme="dark"] {
+ --toolbar-bg: #1e1e1e;
+ --toolbar-border: #444;
+ --toolbar-button-hover: #2a2a2a;
+}
+```
+
+## Performance Tips
+
+
+**Best practices:**
+- Use functions for dynamic icons (lazy loading)
+- Use `responsiveToContainer` for embedded editors
+- Keep command functions lightweight
+- Remove unused buttons via `excludeItems`
+
+
+## Troubleshooting
+
+### Toolbar Not Showing
+
+```javascript
+// Check selector exists
+if (!document.querySelector('#toolbar')) {
+ console.error('Toolbar container not found');
+}
+
+// Wait for ready event
+superdoc.once('ready', () => {
+ console.log(superdoc.toolbar); // Now available
+});
+```
+
+### Buttons Not Working
+
+```javascript
+// Check role permissions
+if (superdoc.config.role === 'viewer') {
+ // Editing buttons disabled
+}
+
+// Check editor connection
+if (!superdoc.activeEditor) {
+ // No editor to execute commands on
+}
+```
+
+
+## Types
+
+### `CommandItem`
+
+
+
+ The item that was clicked. See [ToolbarItem](#toolbaritem).
+
+
+ Any parameters passed to the command
+
+
+
+### `ToolbarItem`
+
+
+ The unique ID of the toolbar item
+ The name of the toolbar item
+ The type of toolbar item (button, options, separator, dropdown, overflow)
+ The group the item belongs to
+ The command to execute
+ The command to execute when no argument is provided (optional)
+ The icon for the item
+ The tooltip for the item
+ Additional attributes for the item
+ Whether the item is disabled
+ Whether the item is active
+ Whether the item is expanded
+ Nested options for the item
+ Custom style for the item
+ Whether the item has narrow styling
+ Whether the item has wide styling
+ Minimum width of the item
+ The argument to pass to the command
+ The parent of this item if nested
+ The child of this item if it has one
+ The color of the icon
+ Whether the item has a dropdown caret
+ Custom styles for dropdown
+ Whether the tooltip is visible
+ Timeout for the tooltip
+ The default label for the item
+ The label for the item
+ Whether to hide the label
+ Whether inline text input is visible
+ Whether the item has inline text input
+ The name of the mark
+ The attribute for the label
+ Whether the item can be used without an editor
+ The key for dropdown value
+ The selected value for the item
+ Reference to an input element
+ Function to get unreferenced values
+ Function to activate the item
+ Function to deactivate the item
+ Function to set the disabled state
+ Function to reset the disabled state
+ Function called when the item is activated
+ Function called when the item is deactivated
+
+
diff --git a/apps/docs/openapi.json b/apps/docs/openapi.json
new file mode 100644
index 0000000000..2ddf92d9dd
--- /dev/null
+++ b/apps/docs/openapi.json
@@ -0,0 +1,2006 @@
+{
+ "openapi": "3.0.3",
+ "info": {
+ "title": "SuperDoc API",
+ "version": "0.9.0",
+ "description": "## Quick Start\n\n1 - **Register**: https://api.superdoc.dev/v1/auth/register?email=you@email.com\n\n2 - **Verify**: Check email, then https://api.superdoc.dev/v1/auth/verify?email=you@email.com&code=123456\n\n3 - **Convert**\n```bash\ncurl -X POST https://api.superdoc.dev/v1/convert?from=docx \\\n -H \"Authorization: Bearer YOUR_API_KEY\" \\\n -F \"file=@document.docx\" \\\n -o converted.pdf\n```\n\n\nOr use our Playground:\nhttps://api.superdoc.dev/docs/#tag/documents/post/v1/convert\n\nThat's it! Your DOCX is now a PDF.\n\n---\n\n[Status](https://status.superdoc.dev) β’ [GitHub](https://github.com/Harbour-Enterprises/SuperDoc)",
+ "contact": {
+ "name": "Support",
+ "email": "api@superdoc.dev",
+ "url": "https://superdoc.dev/contact-us"
+ },
+ "license": {
+ "name": "Commercial",
+ "url": "https://superdoc.dev"
+ }
+ },
+ "components": {
+ "securitySchemes": {
+ "apiKey": {
+ "type": "http",
+ "scheme": "bearer",
+ "bearerFormat": "API Key",
+ "description": "API key authentication. Keys start with `sd_`"
+ }
+ },
+ "schemas": {
+ "Error": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error response format used across all endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request identifier for debugging",
+ "example": "b3d6a4f5-2c1e-4d5f-a6b7-8c9d0e1f2g3h"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ }
+ },
+ "AnnotateRequest": {
+ "type": "object",
+ "required": ["document", "fields"],
+ "additionalProperties": false,
+ "properties": {
+ "document": {
+ "type": "object",
+ "description": "DOCX input provided as either base64 or URL"
+ },
+ "fields": {
+ "type": "array",
+ "description": "Field entries containing id/group, type, value, and optional options",
+ "items": {
+ "type": "object",
+ "required": ["id/group", "value", "type"],
+ "properties": {
+ "id/group": {
+ "type": "string",
+ "description": "Field identifier. Use `id` to target a single specific field in the template, or use `group` to populate multiple fields with the same group identifier. Only one is required."
+ },
+ "value": {
+ "oneOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "array",
+ "items": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ ],
+ "description": "Value to populate the field with. String for text/image/signature fields, array of arrays for table type"
+ },
+ "type": {
+ "type": "string",
+ "enum": ["text", "image", "signature", "table"],
+ "description": "Type of field being populated"
+ },
+ "options": {
+ "type": "object",
+ "description": "Optional configuration for field rendering.\n\n**Options by field type:**\n\n| Field Type | Supported Options |\n|------------|------------------|\n| `text` | `keepTextNodeStyles` |\n| `image` | `dimensions` |\n| `signature` | `dimensions`, `arcElement`, `topLabel`, `bottomLabel` |\n| `table` | `copyRowStyle` |",
+ "properties": {
+ "keepTextNodeStyles": {
+ "type": "boolean",
+ "description": "For text fields: Whether to keep the existing text node styles when replacing content. Defaults to true.",
+ "default": true
+ },
+ "copyRowStyle": {
+ "type": "boolean",
+ "description": "For table fields: Copy the style from the template row to populated rows"
+ },
+ "dimensions": {
+ "type": "object",
+ "description": "For image/signature fields: Specify the dimensions of the rendered element",
+ "properties": {
+ "width": {
+ "type": "string",
+ "description": "Width in pixels",
+ "example": "180"
+ },
+ "height": {
+ "type": "string",
+ "description": "Height in pixels",
+ "example": "250"
+ }
+ }
+ },
+ "arcElement": {
+ "type": "object",
+ "description": "For signature fields: Styling for the signature arc element",
+ "properties": {
+ "color": {
+ "type": "string",
+ "description": "Hex color code for the arc",
+ "example": "#3bc0f1"
+ }
+ }
+ },
+ "topLabel": {
+ "type": "object",
+ "description": "For signature fields: Styling for the top label",
+ "properties": {
+ "color": {
+ "type": "string",
+ "description": "Hex color code for the top label text",
+ "example": "#002fff"
+ }
+ }
+ },
+ "bottomLabel": {
+ "type": "object",
+ "description": "For signature fields: Styling and content for the bottom label",
+ "properties": {
+ "color": {
+ "type": "string",
+ "description": "Hex color code for the bottom label text",
+ "example": "#ff0000"
+ },
+ "text": {
+ "type": "string",
+ "description": "Custom text for the bottom label",
+ "example": "ip: 192.168.0.1"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "SignRequest": {
+ "type": "object",
+ "title": "Sign Request",
+ "required": ["document", "signer", "auditTrail"],
+ "additionalProperties": false,
+ "properties": {
+ "eventId": {
+ "type": "string",
+ "description": "Unique identifier for this signing event"
+ },
+ "document": {
+ "type": "object",
+ "description": "PDF or DOCX input provided as either base64 or URL"
+ },
+ "signer": {
+ "type": "object",
+ "description": "Signer details (name, email, etc.)"
+ },
+ "auditTrail": {
+ "type": "array",
+ "description": "Array of signing events and user interactions"
+ },
+ "metadata": {
+ "type": "object",
+ "description": "Optional metadata (IP, user agent, custom fields)"
+ }
+ }
+ },
+ "SignResponse": {
+ "type": "object",
+ "required": ["document"],
+ "properties": {
+ "document": {
+ "type": "object",
+ "required": ["base64", "contentType"],
+ "properties": {
+ "base64": {
+ "type": "string",
+ "description": "Signed PDF as base64"
+ },
+ "contentType": {
+ "type": "string",
+ "description": "Content type (application/pdf)"
+ }
+ }
+ }
+ }
+ },
+ "VerifyRequest": {
+ "type": "object",
+ "title": "Verify Request",
+ "required": ["document"],
+ "properties": {
+ "document": {
+ "type": "object",
+ "description": "Signed PDF provided as either base64 or URL"
+ }
+ }
+ },
+ "VerifyResponse": {
+ "type": "object",
+ "title": "Verify Response",
+ "required": ["valid"],
+ "properties": {
+ "valid": {
+ "type": "boolean",
+ "description": "Whether the signature is valid"
+ },
+ "reason": {
+ "type": "string",
+ "description": "Explanation of verification result"
+ },
+ "signer": {
+ "description": "Primary signer information"
+ },
+ "signers": {
+ "type": "array",
+ "description": "All signers (only when valid)"
+ },
+ "document": {
+ "type": "object",
+ "description": "Document metadata (only when valid)"
+ }
+ }
+ }
+ },
+ "responses": {
+ "Unauthorized": {
+ "description": "Authentication required or invalid API key",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error"
+ },
+ "example": {
+ "code": "AUTHENTICATION_ERROR",
+ "error": "Unauthorized",
+ "message": "Authentication required",
+ "requestId": "req_123abc"
+ }
+ }
+ }
+ },
+ "RateLimited": {
+ "description": "Rate limit exceeded",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/Error"
+ },
+ "example": {
+ "code": "RATE_LIMIT_ERROR",
+ "error": "Too Many Requests",
+ "message": "Rate limit exceeded. Try again in 60 seconds",
+ "requestId": "req_456def"
+ }
+ }
+ }
+ }
+ }
+ },
+ "paths": {
+ "/openapi.json": {
+ "get": {
+ "responses": {
+ "200": {
+ "description": "Default Response"
+ }
+ }
+ }
+ },
+ "/docs": {
+ "get": {
+ "responses": {
+ "200": {
+ "description": "Default Response"
+ }
+ }
+ }
+ },
+ "/documentation": {
+ "get": {
+ "responses": {
+ "200": {
+ "description": "Default Response"
+ }
+ }
+ }
+ },
+ "/": {
+ "get": {
+ "summary": "API Information",
+ "tags": ["System"],
+ "description": "Returns basic API information and quick start guide.\n\n## Response format\n- **JSON**: For programmatic access\n- **Plain text**: When called with curl/wget (developer-friendly)",
+ "responses": {
+ "200": {
+ "description": "API information",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": ["name", "version", "message", "endpoints", "authentication", "example", "links"],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ },
+ "endpoints": {
+ "type": "object",
+ "properties": {
+ "convert": {
+ "type": "string"
+ },
+ "health": {
+ "type": "string"
+ },
+ "docs": {
+ "type": "string"
+ }
+ },
+ "required": ["convert", "health", "docs"]
+ },
+ "authentication": {
+ "type": "string"
+ },
+ "example": {
+ "type": "string"
+ },
+ "links": {
+ "type": "object",
+ "properties": {
+ "documentation": {
+ "type": "string"
+ },
+ "github": {
+ "type": "string"
+ },
+ "support": {
+ "type": "string"
+ }
+ },
+ "required": ["documentation", "github", "support"]
+ }
+ }
+ },
+ "example": {
+ "name": "SuperDoc API",
+ "version": "v1",
+ "message": "Document processing API for developers",
+ "endpoints": {
+ "convert": "POST /v1/convert",
+ "health": "GET /v1/health",
+ "docs": "GET /docs"
+ },
+ "quickstart": {
+ "authentication": "Include your API key in the Authorization header",
+ "example": "curl -H \"Authorization: Bearer YOUR_API_KEY\" https://api.superdoc.dev/v1/health"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/health": {
+ "get": {
+ "operationId": "checkHealth",
+ "summary": "Health Check",
+ "tags": ["System"],
+ "description": "Check API availability. No authentication required. Returns 200 when healthy.",
+ "responses": {
+ "200": {
+ "description": "Service is healthy",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": ["status", "timestamp", "version"],
+ "properties": {
+ "status": {
+ "type": "string",
+ "enum": ["healthy"]
+ },
+ "timestamp": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "version": {
+ "type": "string"
+ },
+ "deployment": {
+ "type": "object",
+ "properties": {
+ "service": {
+ "type": "string"
+ },
+ "revision": {
+ "type": "string"
+ },
+ "configuration": {
+ "type": "string"
+ }
+ }
+ },
+ "instance": {
+ "type": "object",
+ "properties": {
+ "startTime": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "uptime": {
+ "type": "number"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "status": "healthy",
+ "timestamp": "2024-01-15T10:30:00Z",
+ "version": "1.2.3",
+ "deployment": {
+ "region": "us-east1",
+ "environment": "production"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/convert": {
+ "post": {
+ "operationId": "convertDocument",
+ "summary": "Convert",
+ "tags": ["Documents"],
+ "description": "Convert documents between formats.\n\n## Supported Conversions\n- **DOCX β PDF**: Convert Word documents to PDF\n- **Markdown β DOCX**: Convert Markdown to Word documents\n- **HTML β DOCX**: Convert HTML to Word documents\n\n## Examples\n```bash\n# Convert DOCX to PDF\ncurl -X POST \"https://api.superdoc.dev/v1/convert?from=docx&to=pdf\" \\\n -H \"Authorization: Bearer YOUR_API_KEY\" \\\n -F \"file=@document.docx\" \\\n -o output.pdf\n\n# Convert Markdown to DOCX\ncurl -X POST \"https://api.superdoc.dev/v1/convert?from=md&to=docx\" \\\n -H \"Authorization: Bearer YOUR_API_KEY\" \\\n -F \"file=@document.md\" \\\n -o output.docx\n\n# Convert HTML to DOCX\ncurl -X POST \"https://api.superdoc.dev/v1/convert?from=html&to=docx\" \\\n -H \"Authorization: Bearer YOUR_API_KEY\" \\\n -F \"file=@document.html\" \\\n -o output.docx\n```\n\n## Limitations\n- File size: 25MB maximum\n- Concurrent requests: 10 per API key",
+ "parameters": [
+ {
+ "schema": {
+ "type": "string",
+ "enum": ["docx", "md", "html"]
+ },
+ "in": "query",
+ "name": "from",
+ "required": true,
+ "description": "Format of the uploaded file"
+ },
+ {
+ "schema": {
+ "type": "string",
+ "enum": ["pdf", "docx"],
+ "default": "pdf"
+ },
+ "in": "query",
+ "name": "to",
+ "required": false,
+ "description": "Target format for conversion. Defaults to PDF for backward compatibility"
+ }
+ ],
+ "security": [
+ {
+ "apiKey": []
+ }
+ ],
+ "x-code-samples": [
+ {
+ "lang": "cURL",
+ "label": "Basic conversion",
+ "source": "curl -X POST https://api.superdoc.dev/v1/convert?from=docx \\\n -H \"Authorization: Bearer YOUR_API_KEY\" \\\n -F \"file=@document.docx\" \\\n -o output.pdf"
+ },
+ {
+ "lang": "JavaScript",
+ "label": "Browser upload",
+ "source": "const formData = new FormData();\nformData.append('file', fileInput.files[0]);\n\nconst response = await fetch('https://api.superdoc.dev/v1/convert?from=docx', {\n method: 'POST',\n headers: { 'Authorization': 'Bearer YOUR_API_KEY' },\n body: formData\n});\n\nconst pdf = await response.blob();\ndownloadBlob(pdf, 'converted.pdf');"
+ },
+ {
+ "lang": "Python",
+ "label": "Python requests",
+ "source": "import requests\n\nwith open('document.docx', 'rb') as f:\n response = requests.post(\n 'https://api.superdoc.dev/v1/convert?from=docx',\n headers={'Authorization': 'Bearer YOUR_API_KEY'},\n files={'file': f}\n )\n \nwith open('converted.pdf', 'wb') as pdf:\n pdf.write(response.content)"
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Converted file",
+ "content": {
+ "application/pdf": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ },
+ "413": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ },
+ "429": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/sign": {
+ "post": {
+ "summary": "Sign",
+ "tags": ["Signature"],
+ "description": "Sign a PDF or DOCX document with a cryptographic signature.\n\nSend a JSON request body with:\n- `document`: object containing either `base64` or `url`\n- `signer`: object with signer details (name, email, etc.)\n- `auditTrail`: array of signing events\n- `eventId`: optional unique identifier\n- `metadata`: optional metadata (IP, user agent, custom fields)\n\nThe response returns the signed PDF as base64.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SignRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "security": [
+ {
+ "apiKey": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Default Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SignResponse"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ },
+ "422": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/verify": {
+ "post": {
+ "summary": "Verify",
+ "tags": ["Verification"],
+ "description": "Verify the signature and integrity of a signed PDF.\n\nSend a JSON request body with:\n- `document`: object containing either `base64` or `url`\n\nThe response includes verification status, signer information, and document metadata.",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/VerifyRequest"
+ }
+ }
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "Default Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/VerifyResponse"
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ },
+ "413": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/verify/key": {
+ "get": {
+ "summary": "Get public signing key",
+ "tags": ["Verification"],
+ "description": "Returns the current public key used for document signing.",
+ "responses": {
+ "200": {
+ "description": "Default Response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "required": ["version", "algorithm", "publicKey", "fingerprint", "validFrom", "validTo", "issuer"],
+ "properties": {
+ "version": {
+ "type": "string",
+ "description": "Key version identifier",
+ "example": "v2025"
+ },
+ "algorithm": {
+ "type": "string",
+ "description": "Signature algorithm",
+ "example": "RSA-SHA256"
+ },
+ "publicKey": {
+ "type": "string",
+ "description": "PEM-encoded public key",
+ "example": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"
+ },
+ "fingerprint": {
+ "type": "string",
+ "description": "SHA-256 fingerprint",
+ "pattern": "^([A-F0-9]{2}:)+[A-F0-9]{2}$",
+ "example": "A7:B9:C2:F4:E1:D8:6C:3A:..."
+ },
+ "validFrom": {
+ "type": "string",
+ "format": "date",
+ "description": "Start of validity period"
+ },
+ "validTo": {
+ "type": "string",
+ "format": "date",
+ "description": "End of validity period"
+ },
+ "issuer": {
+ "type": "string",
+ "description": "Issuing organization",
+ "example": "SuperDoc, Inc."
+ }
+ }
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/auth/register": {
+ "get": {
+ "summary": "Register",
+ "tags": ["Authentication"],
+ "description": "Start here! Register with your email to get a verification code.\n\n## Flow\n1. Call this endpoint with your email\n2. Check your email for 6-digit code (expires in 15 minutes)\n3. Call [/verify](#tag/authentication/get/v1/auth/verify) with email and code to get your API key\n\n## No spam promise\nWe only send: verification codes, API keys, and critical service updates.",
+ "parameters": [
+ {
+ "schema": {
+ "type": "string",
+ "format": "email"
+ },
+ "in": "query",
+ "name": "email",
+ "required": true,
+ "description": "Email address for account registration"
+ }
+ ],
+ "x-code-samples": [
+ {
+ "lang": "cURL",
+ "source": "curl \"https://api.superdoc.dev/v1/auth/register?email=developer@company.com\""
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Status message",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "description": "Status message",
+ "example": "Check your email for verification code."
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/auth/verify": {
+ "get": {
+ "summary": "Verify",
+ "tags": ["Authentication"],
+ "description": "Complete registration by submitting your verification code.\n \n## Returns\nYour API key (also sent to your email for safekeeping)\n \n## Security\nWe don't store keys in plain text - save yours securely.",
+ "parameters": [
+ {
+ "schema": {
+ "type": "string",
+ "format": "email"
+ },
+ "in": "query",
+ "name": "email",
+ "required": true,
+ "description": "Email address for verification"
+ },
+ {
+ "schema": {
+ "type": "string",
+ "pattern": "^[0-9]{6}$"
+ },
+ "in": "query",
+ "name": "code",
+ "required": true,
+ "description": "6-digit verification code"
+ }
+ ],
+ "x-code-samples": [
+ {
+ "lang": "cURL",
+ "source": "curl \"https://api.superdoc.dev/v1/auth/verify?email=developer@company.com&code=123456\""
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Your API key",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "string",
+ "description": "Your API key",
+ "example": "sd_sk_abc123xyz789..."
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/v1/annotate": {
+ "post": {
+ "operationId": "annotateDocument",
+ "summary": "Annotate",
+ "tags": ["Documents"],
+ "description": "Populate fields inside a DOCX template using SuperDoc annotations.\n\nSend a JSON request body with:\n- `document`: object containing either `base64` or `url`\n- `fields`: array of field objects (id/group, type, value, optional options)\n\n> **Note:** Each field requires either `id` or `group`:\n> - **id**: Targets a single specific field in the template\n> - **group**: Targets multiple fields with the same group identifier\n\nThe response returns the annotated DOCX/PDF file as a base64 data URI.\n\n## Example Request\n\n```json\n{\n \"document\": {\n \"url\": \"https://example.com/template.docx\"\n },\n \"fields\": [\n {\n \"id\": \"customer_name\",\n \"type\": \"text\",\n \"value\": \"John Doe\"\n },\n {\n \"id\": \"author\",\n \"type\": \"image\",\n \"value\": \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...\",\n \"options\": {\n \"dimensions\": {\n \"width\": 200,\n \"height\": 100\n }\n }\n }\n ]\n}\n```\n\nAlternative using base64 document input:\n```json\n{\n \"document\": {\n \"base64\": \"UEsDBBQAAAAIAL+H...\"\n },\n \"fields\": [\n {\n \"id\": \"title\",\n \"type\": \"text\",\n \"value\": \"Annual Report 2024\"\n }\n ]\n}\n```\n\nUsing group to populate multiple fields:\n```json\n{\n \"document\": {\n \"url\": \"https://example.com/template.docx\"\n },\n \"fields\": [\n {\n \"group\": \"company_logo\",\n \"type\": \"image\",\n \"value\": \"https://example.com/logo.png\"\n }\n ]\n}\n```",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AnnotateRequest"
+ },
+ "examples": {
+ "text-field": {
+ "summary": "Text field",
+ "value": {
+ "document": {
+ "url": "https://example.com/template.docx"
+ },
+ "fields": [
+ {
+ "id": "customer_name",
+ "type": "text",
+ "value": "John Doe"
+ }
+ ]
+ }
+ },
+ "image-field": {
+ "summary": "Image field with dimensions",
+ "value": {
+ "document": {
+ "base64": "UEsDBBQAAAAIAL+H..."
+ },
+ "fields": [
+ {
+ "id": "author_photo",
+ "type": "image",
+ "value": "https://example.com/image.jpg",
+ "options": {
+ "dimensions": {
+ "width": "180",
+ "height": "250"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "signature-field": {
+ "summary": "Signature field with styling",
+ "value": {
+ "document": {
+ "url": "https://example.com/contract.docx"
+ },
+ "fields": [
+ {
+ "id": "client_signature",
+ "type": "signature",
+ "value": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
+ "options": {
+ "dimensions": {
+ "width": "150",
+ "height": "80"
+ },
+ "arcElement": {
+ "color": "#3bc0f1"
+ },
+ "topLabel": {
+ "color": "#002fff"
+ },
+ "bottomLabel": {
+ "color": "#ff0000",
+ "text": "ip: 192.168.0.1"
+ }
+ }
+ }
+ ]
+ }
+ },
+ "table-field": {
+ "summary": "Table field with data",
+ "value": {
+ "document": {
+ "url": "https://example.com/report.docx"
+ },
+ "fields": [
+ {
+ "id": "invoice_items",
+ "type": "table",
+ "value": [
+ ["SuperDoc", "Frontend"],
+ ["SuperDoc Services", "Backend"]
+ ],
+ "options": {
+ "copyRowStyle": true
+ }
+ }
+ ]
+ }
+ },
+ "group-field": {
+ "summary": "Group field affecting multiple elements",
+ "value": {
+ "document": {
+ "url": "https://example.com/template.docx"
+ },
+ "fields": [
+ {
+ "group": "company_logo",
+ "type": "image",
+ "value": "https://example.com/logo.png",
+ "options": {
+ "dimensions": {
+ "width": "150",
+ "height": "150"
+ }
+ }
+ },
+ {
+ "group": "footer_text",
+ "type": "text",
+ "value": "Β© 2024 Acme Corporation. All rights reserved."
+ }
+ ]
+ }
+ },
+ "mixed-fields": {
+ "summary": "Multiple field types",
+ "value": {
+ "document": {
+ "url": "https://example.com/template.docx"
+ },
+ "fields": [
+ {
+ "group": "company_name",
+ "type": "text",
+ "value": "Acme Corporation"
+ },
+ {
+ "id": "logo",
+ "type": "image",
+ "value": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
+ "options": {
+ "dimensions": {
+ "width": "200",
+ "height": "100"
+ }
+ }
+ },
+ {
+ "id": "items_table",
+ "type": "table",
+ "value": [
+ ["Product A", "$100"],
+ ["Product B", "$200"]
+ ],
+ "options": {
+ "copyRowStyle": true
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ },
+ "required": true
+ },
+ "parameters": [
+ {
+ "schema": {
+ "type": "string",
+ "enum": ["docx", "pdf"]
+ },
+ "in": "query",
+ "name": "to",
+ "required": false,
+ "description": "Output format for the annotated document (defaults to docx)"
+ }
+ ],
+ "security": [
+ {
+ "apiKey": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Annotated DOCX output encoded as a base64 data URI",
+ "content": {
+ "application/json": {
+ "schema": {
+ "description": "Annotated DOCX output encoded as a base64 data URI",
+ "type": "object",
+ "required": ["document"],
+ "additionalProperties": false,
+ "properties": {
+ "document": {
+ "type": "object",
+ "required": ["base64"],
+ "additionalProperties": false,
+ "properties": {
+ "base64": {
+ "type": "string",
+ "minLength": 1,
+ "description": "Data URI containing the annotated file contents"
+ },
+ "contentType": {
+ "type": "string",
+ "minLength": 1,
+ "description": "Content type of the annotated file"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "400": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ },
+ "401": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ },
+ "500": {
+ "description": "Standard error format used across all API endpoints",
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "object",
+ "title": "Error Response",
+ "description": "Standard error format used across all API endpoints",
+ "required": ["code", "error", "message"],
+ "properties": {
+ "code": {
+ "type": "string",
+ "description": "Machine-readable error code for programmatic handling",
+ "example": "VALIDATION_ERROR"
+ },
+ "error": {
+ "type": "string",
+ "description": "HTTP error category",
+ "example": "Bad Request"
+ },
+ "message": {
+ "type": "string",
+ "description": "Human-readable error description",
+ "example": "The provided document format is not supported"
+ },
+ "requestId": {
+ "type": "string",
+ "description": "Unique request ID for support",
+ "example": "req_abc123"
+ },
+ "details": {
+ "type": "array",
+ "description": "Additional error details for validation errors",
+ "items": {
+ "type": "object",
+ "properties": {
+ "field": {
+ "type": "string",
+ "description": "Field that caused the error"
+ },
+ "issue": {
+ "type": "string",
+ "description": "Description of the issue"
+ }
+ }
+ }
+ }
+ },
+ "example": {
+ "code": "INVALID_FILE_FORMAT",
+ "error": "Bad Request",
+ "message": "File is not a valid DOCX",
+ "requestId": "req_abc123"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "servers": [
+ {
+ "url": "https://api.superdoc.dev",
+ "description": "Production"
+ }
+ ],
+ "tags": [
+ {
+ "name": "Documents",
+ "description": "Document conversion and transformation"
+ },
+ {
+ "name": "Authentication",
+ "description": "Registration and API key management"
+ },
+ {
+ "name": "System",
+ "description": "Health and service information"
+ }
+ ],
+ "x-tagGroups": [
+ {
+ "name": "Core API",
+ "tags": ["Documents", "Authentication"]
+ },
+ {
+ "name": "System",
+ "tags": ["System"]
+ }
+ ]
+}
diff --git a/apps/docs/package.json b/apps/docs/package.json
new file mode 100644
index 0000000000..e596425ce1
--- /dev/null
+++ b/apps/docs/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "@superdoc/docs",
+ "private": true,
+ "scripts": {
+ "dev": "mintlify dev --port 3001",
+ "validate": "mintlify validate",
+ "gen:api": "node scripts/sync-api-docs.js",
+ "gen:docs": "node scripts/sync-sdk-docs.js",
+ "gen:all": "pnpm run gen:api && pnpm run gen:docs",
+ "check:links": "mintlify broken-links"
+ },
+ "devDependencies": {
+ "documentation": "^14.0.3",
+ "mintlify": "^4.2.295"
+ }
+}
diff --git a/apps/docs/public/icons/react.svg b/apps/docs/public/icons/react.svg
new file mode 100644
index 0000000000..3a27f7ce1b
--- /dev/null
+++ b/apps/docs/public/icons/react.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/docs/public/icons/vanilla-js.svg b/apps/docs/public/icons/vanilla-js.svg
new file mode 100644
index 0000000000..ab749ea42c
--- /dev/null
+++ b/apps/docs/public/icons/vanilla-js.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/docs/public/icons/vue.svg b/apps/docs/public/icons/vue.svg
new file mode 100644
index 0000000000..8d00e8c918
--- /dev/null
+++ b/apps/docs/public/icons/vue.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/docs/public/images/extensions/dropcursor.svg b/apps/docs/public/images/extensions/dropcursor.svg
new file mode 100644
index 0000000000..f6fe93d68c
--- /dev/null
+++ b/apps/docs/public/images/extensions/dropcursor.svg
@@ -0,0 +1,35 @@
+
+ Draggable demo badge (minimal)
+ Blue rounded square with a dashed white border, the text DRAG ME!, and a minimal white cursor indicating draggability.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DRAG ME!
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/docs/public/images/extensions/dropcursor2.svg b/apps/docs/public/images/extensions/dropcursor2.svg
new file mode 100644
index 0000000000..ac3e951986
--- /dev/null
+++ b/apps/docs/public/images/extensions/dropcursor2.svg
@@ -0,0 +1,52 @@
+
+ Draggable demo badge
+ Blue rounded square with dashed white border, the text DRAG ME!, a smiling box and a cursor pointing to indicate draggability.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DRAG ME!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/docs/public/images/extensions/image-chart.png b/apps/docs/public/images/extensions/image-chart.png
new file mode 100644
index 0000000000..aa10726357
Binary files /dev/null and b/apps/docs/public/images/extensions/image-chart.png differ
diff --git a/apps/docs/public/images/extensions/image-icon.png b/apps/docs/public/images/extensions/image-icon.png
new file mode 100644
index 0000000000..91861655a4
Binary files /dev/null and b/apps/docs/public/images/extensions/image-icon.png differ
diff --git a/apps/docs/public/images/extensions/image-landscape.png b/apps/docs/public/images/extensions/image-landscape.png
new file mode 100644
index 0000000000..57ac8eca40
Binary files /dev/null and b/apps/docs/public/images/extensions/image-landscape.png differ
diff --git a/apps/docs/public/images/favicon.png b/apps/docs/public/images/favicon.png
new file mode 100644
index 0000000000..a88bb4fc66
Binary files /dev/null and b/apps/docs/public/images/favicon.png differ
diff --git a/apps/docs/public/images/logo-dark.png b/apps/docs/public/images/logo-dark.png
new file mode 100644
index 0000000000..023c364bfb
Binary files /dev/null and b/apps/docs/public/images/logo-dark.png differ
diff --git a/apps/docs/public/images/logo-light.png b/apps/docs/public/images/logo-light.png
new file mode 100644
index 0000000000..6910f0f756
Binary files /dev/null and b/apps/docs/public/images/logo-light.png differ
diff --git a/apps/docs/public/images/og-image.png b/apps/docs/public/images/og-image.png
new file mode 100644
index 0000000000..c3de3b319a
Binary files /dev/null and b/apps/docs/public/images/og-image.png differ
diff --git a/apps/docs/public/images/og-image2.png b/apps/docs/public/images/og-image2.png
new file mode 100644
index 0000000000..255c4ed394
Binary files /dev/null and b/apps/docs/public/images/og-image2.png differ
diff --git a/apps/docs/public/images/og-image3.png b/apps/docs/public/images/og-image3.png
new file mode 100644
index 0000000000..fc290bae38
Binary files /dev/null and b/apps/docs/public/images/og-image3.png differ
diff --git a/apps/docs/public/images/template-builder/demo.gif b/apps/docs/public/images/template-builder/demo.gif
new file mode 100644
index 0000000000..73b3b79f89
Binary files /dev/null and b/apps/docs/public/images/template-builder/demo.gif differ
diff --git a/apps/docs/public/images/twitter-image.png b/apps/docs/public/images/twitter-image.png
new file mode 100644
index 0000000000..df6641ff2a
Binary files /dev/null and b/apps/docs/public/images/twitter-image.png differ
diff --git a/apps/docs/resources/guides.mdx b/apps/docs/resources/guides.mdx
new file mode 100644
index 0000000000..461e18203e
--- /dev/null
+++ b/apps/docs/resources/guides.mdx
@@ -0,0 +1,5 @@
+---
+title: Guides
+---
+
+{(() => { window.location.href = '/guides/general/storage'; })()}
diff --git a/apps/docs/resources/license.mdx b/apps/docs/resources/license.mdx
new file mode 100644
index 0000000000..a0f106c650
--- /dev/null
+++ b/apps/docs/resources/license.mdx
@@ -0,0 +1,17 @@
+SuperDoc is available under dual licensing:
+
+- **Open Source**: [GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html)
+- **Commercial**: [Enterprise License](https://www.harbourshare.com/request-a-demo)
+
+For questions about licensing, please contact [q@superdoc.dev](mailto:q@superdoc.dev).
+
+## Contributing
+
+We welcome contributions from the community! Here's how you can help:
+
+1. Check our [issue tracker](https://github.com/Harbour-Enterprises/SuperDoc/issues) for open issues
+2. Fork the repository and create a feature/bugfix branch
+3. Write clear, documented code following our style guidelines
+4. Submit a PR with detailed description of your changes
+
+See our [Contributing Guide](https://github.com/Harbour-Enterprises/SuperDoc/blob/main/CONTRIBUTING.md) for more details.
diff --git a/apps/docs/scripts/add-keywords.js b/apps/docs/scripts/add-keywords.js
new file mode 100644
index 0000000000..fe1f380f3c
--- /dev/null
+++ b/apps/docs/scripts/add-keywords.js
@@ -0,0 +1,205 @@
+#!/usr/bin/env node
+const fs = require('fs');
+const path = require('path');
+
+/**
+ * Keyword mappings for different page types
+ */
+const KEYWORD_MAPPINGS = {
+ // Getting Started Pages
+ 'getting-started/introduction.mdx':
+ 'docx editor, microsoft word web, word compatibility, document editing api, contract management software, word documents online',
+ 'getting-started/ai-agents.mdx':
+ 'ai document editing, llm docx, chatgpt word documents, cursor integration, document automation ai, programmatic word editing',
+ 'getting-started/installation.mdx':
+ 'superdoc npm, docx editor install, word editor sdk, javascript document editor, react word editor, vue docx editor',
+ 'getting-started/configuration.mdx':
+ 'superdoc config, document editor setup, word editor options, docx api configuration, document modes, editor roles',
+
+ // Framework Pages
+ 'getting-started/frameworks/react.mdx':
+ 'react docx editor, react word component, superdoc react, microsoft word react, document editor react hooks',
+ 'getting-started/frameworks/nextjs.mdx':
+ 'nextjs docx editor, next word editor, superdoc nextjs, ssr document editor, dynamic import docx',
+ 'getting-started/frameworks/vue.mdx':
+ 'vue docx editor, vue word component, superdoc vue, vue document editor, vue composition api',
+ 'getting-started/frameworks/angular.mdx':
+ 'angular docx editor, angular word component, superdoc angular, angular document editor, angular integration',
+ 'getting-started/frameworks/svelte.mdx':
+ 'svelte docx editor, svelte word component, superdoc svelte, svelte document editor, svelte integration',
+ 'getting-started/frameworks/vanilla-js.mdx':
+ 'vanilla javascript docx, plain js word editor, superdoc vanilla, no framework docx, pure javascript editor',
+ 'getting-started/frameworks/nuxt.mdx':
+ 'nuxt docx editor, nuxt word editor, superdoc nuxt, nuxt3 document editor, vue ssr docx',
+ 'getting-started/frameworks/blazor.mdx':
+ 'blazor docx editor, blazor word component, superdoc blazor, .net docx editor, c# document editor',
+ 'getting-started/frameworks/php.mdx':
+ 'php docx editor, php word editor, superdoc php, server side docx, php document editor',
+ 'getting-started/frameworks/ruby-on-rails.mdx':
+ 'rails docx editor, ruby word editor, superdoc rails, ruby document editor, rails integration',
+
+ // Core Pages
+ 'core/superdoc/overview.mdx':
+ 'superdoc class, document editor api, docx sdk methods, word editor instance, document initialization',
+ 'core/superdoc/configuration.mdx':
+ 'superdoc configuration, editor config options, document settings, word editor setup, api configuration',
+ 'core/superdoc/methods.mdx':
+ 'superdoc methods, document api methods, editor functions, word document api, programmatic control',
+ 'core/superdoc/properties.mdx':
+ 'superdoc properties, editor state, document properties, word editor attributes, api properties',
+ 'core/superdoc/events.mdx':
+ 'superdoc events, document events, editor callbacks, word editor listeners, event handling',
+
+ 'core/supereditor/overview.mdx':
+ 'supereditor class, prosemirror docx, tiptap alternative, editor commands, document manipulation api',
+ 'core/supereditor/configuration.mdx':
+ 'supereditor config, editor configuration, prosemirror setup, document editor options, advanced config',
+ 'core/supereditor/methods.mdx':
+ 'supereditor methods, editor commands, prosemirror commands, document manipulation, editor api',
+ 'core/supereditor/hooks.mdx':
+ 'supereditor hooks, editor lifecycle, prosemirror hooks, document events, editor callbacks',
+
+ 'core/superdoc-ai/overview.mdx':
+ 'superdoc ai overview, ai document automation, llm document workflows, intelligent docx agent, ai-driven editing',
+ 'core/superdoc-ai/configuration.mdx':
+ 'superdoc ai configuration, ai workflow setup, llm integration options, automation settings, ai agent config',
+ 'core/superdoc-ai/methods.mdx':
+ 'superdoc ai methods, ai document actions, automation commands, llm task api, docx ai controls',
+ 'core/superdoc-ai/hooks.mdx':
+ 'superdoc ai hooks, ai lifecycle events, automation callbacks, llm response handling, intelligent document triggers',
+
+ // Module Pages
+ 'modules/overview.mdx': 'superdoc modules, editor modules, document features, modular architecture, plugin system',
+ 'modules/collaboration/overview.mdx':
+ 'real-time document editing, collaborative word editing, websocket docx, multiplayer documents, yjs alternative',
+ 'modules/collaboration/backend.mdx':
+ 'collaboration backend, websocket server, real-time sync, document conflict resolution, collaborative editing server',
+ 'modules/comments.mdx':
+ 'word comments api, document annotations, threaded discussions, comment resolution, docx comments',
+ 'modules/toolbar.mdx':
+ 'word toolbar, document formatting controls, custom toolbar, editor ui components, formatting buttons',
+
+ // API Reference Pages
+ 'api-reference/introduction.mdx':
+ 'superdoc api, docx api reference, word editor api, document editor sdk, api documentation',
+ 'api-reference/authentication.mdx':
+ 'superdoc auth, api authentication, bearer token, api key management, secure api access',
+ 'api-reference/quickstart.mdx':
+ 'superdoc quickstart, api quick start, docx api tutorial, word editor guide, getting started api',
+
+ // Dev Pages
+ 'dev/api/editor.mdx':
+ 'editor api development, custom editor api, superdoc development, word editor customization, api development',
+ 'dev/ai/overview.mdx':
+ 'ai development, llm integration, ai document processing, intelligent document editing, ai-powered editing',
+ 'dev/solutions/legal/contracts.mdx':
+ 'legal document editing, contract management, legal tech solution, document automation legal, contract editor',
+
+ // Resource Pages
+ 'resources/accessibility.mdx':
+ 'wcag compliance, screen reader support, keyboard navigation, aria labels, accessible documents, ada compliance',
+ 'resources/migration.mdx':
+ 'migrate from prosemirror, migrate from tiptap, switch to superdoc, document editor migration, upgrade guide',
+ 'resources/license.mdx':
+ 'agpl license, commercial license, open source docx, enterprise licensing, dual license, superdoc pricing',
+};
+
+/**
+ * Add keywords to a file if they don't already exist
+ */
+function addKeywords(filePath, keywords) {
+ if (!fs.existsSync(filePath)) {
+ console.log(`β οΈ File not found: ${filePath}`);
+ return false;
+ }
+
+ let content = fs.readFileSync(filePath, 'utf8');
+
+ // Check if keywords already exist
+ if (content.includes('keywords:')) {
+ console.log(` Already has keywords: ${filePath}`);
+ return false;
+ }
+
+ // Check if file has frontmatter
+ if (!content.startsWith('---')) {
+ console.log(` No frontmatter found: ${filePath}`);
+ return false;
+ }
+
+ // Add keywords after title (or before closing ---)
+ const frontmatterMatch = content.match(/^(---\n(?:.*\n)*?)(---)/m);
+ if (!frontmatterMatch) {
+ console.log(` Invalid frontmatter: ${filePath}`);
+ return false;
+ }
+
+ const frontmatter = frontmatterMatch[1];
+ const rest = content.substring(frontmatterMatch[0].length);
+
+ // Add keywords before the closing ---
+ const newFrontmatter = frontmatter + `keywords: "${keywords}"\n`;
+ const newContent = newFrontmatter + '---' + rest;
+
+ fs.writeFileSync(filePath, newContent);
+ console.log(` β Added keywords: ${filePath}`);
+ return true;
+}
+
+/**
+ * Process all files in a directory recursively
+ */
+function processDirectory(dirPath, basePath = '') {
+ const items = fs.readdirSync(dirPath);
+ let processedCount = 0;
+
+ for (const item of items) {
+ const fullPath = path.join(dirPath, item);
+ const relativePath = path.join(basePath, item);
+ const stat = fs.statSync(fullPath);
+
+ if (stat.isDirectory()) {
+ // Skip node_modules and other irrelevant directories
+ if (['node_modules', 'public', '.git', 'scripts', 'snippets'].includes(item)) {
+ continue;
+ }
+ processedCount += processDirectory(fullPath, relativePath);
+ } else if (item.endsWith('.mdx')) {
+ const keywords = KEYWORD_MAPPINGS[relativePath];
+ if (keywords) {
+ if (addKeywords(fullPath, keywords)) {
+ processedCount++;
+ }
+ } else {
+ console.log(` No keywords defined for: ${relativePath}`);
+ }
+ }
+ }
+
+ return processedCount;
+}
+
+/**
+ * Main function
+ */
+async function main() {
+ console.log('π Adding keywords to documentation pages\n');
+
+ try {
+ const processedCount = processDirectory('.');
+
+ console.log(`\nβ
Complete! Added keywords to ${processedCount} files.`);
+ console.log('\nπ Note: Extension files will get keywords automatically when you run sync-sdk-docs.js');
+ } catch (error) {
+ console.error('β Error:', error.message);
+ console.error(error.stack);
+ process.exit(1);
+ }
+}
+
+// Run if called directly
+if (require.main === module) {
+ main();
+}
+
+module.exports = { addKeywords, KEYWORD_MAPPINGS };
diff --git a/apps/docs/scripts/sync-api-docs.js b/apps/docs/scripts/sync-api-docs.js
new file mode 100755
index 0000000000..9fa68ee051
--- /dev/null
+++ b/apps/docs/scripts/sync-api-docs.js
@@ -0,0 +1,37 @@
+#!/usr/bin/env node
+const fs = require('fs');
+const https = require('https');
+
+// Fetch OpenAPI spec from API repo
+function fetchOpenAPI() {
+ return new Promise((resolve, reject) => {
+ https
+ .get('https://raw.githubusercontent.com/Harbour-Enterprises/SuperDoc-API/main/openapi.yaml', (res) => {
+ let data = '';
+ res.on('data', (chunk) => (data += chunk));
+ res.on('end', () => resolve(data));
+ })
+ .on('error', reject);
+ });
+}
+
+async function syncAPIDocs() {
+ console.log('π₯ Fetching OpenAPI spec...');
+ const spec = await fetchOpenAPI();
+
+ // Save for Mintlify to process
+ fs.writeFileSync('openapi.yaml', spec);
+
+ // Create meta file for navigation
+ const meta = {
+ title: 'API Reference',
+ description: 'SuperDoc REST API endpoints',
+ };
+
+ fs.mkdirSync('api-reference', { recursive: true });
+ fs.writeFileSync('api-reference/_meta.json', JSON.stringify(meta, null, 2));
+
+ console.log('β
API docs synced');
+}
+
+syncAPIDocs().catch(console.error);
diff --git a/apps/docs/scripts/sync-sdk-docs.js b/apps/docs/scripts/sync-sdk-docs.js
new file mode 100644
index 0000000000..9488f1f1db
--- /dev/null
+++ b/apps/docs/scripts/sync-sdk-docs.js
@@ -0,0 +1,557 @@
+#!/usr/bin/env node
+const fs = require('fs');
+const path = require('path');
+// When running from apps/docs/ directory within the monorepo, look up to packages/
+const sourceDir = process.argv[2] || path.join(__dirname, '../../../packages/super-editor/src/extensions');
+const outputDir = 'extensions';
+
+// Extensions to process
+const SUPPORTED = [
+ 'block-node',
+ 'bold',
+ 'bullet-list',
+ 'color',
+ 'content-block',
+ 'custom-selection',
+ 'document',
+ 'dropcursor',
+ 'font-family',
+ 'font-size',
+ 'format-commands',
+ 'gapcursor',
+ 'heading',
+ 'highlight',
+ 'history',
+ 'image',
+ 'italic',
+ 'line-break',
+ 'line-height',
+ 'link',
+ 'linked-styles',
+ 'list-item',
+ 'mention',
+ 'noderesizer',
+ 'ordered-list',
+ 'page-number',
+ 'paragraph',
+ 'placeholder',
+ 'popover-plugin',
+ 'run-item',
+ 'search',
+ 'shape-container',
+ 'shape-textbox',
+ 'slash-menu',
+ 'strike',
+ 'structured-content', // contains document-section
+ 'tab',
+ 'table',
+ 'table-cell',
+ 'table-header',
+ 'table-row',
+ // 'text', // not to be documented
+ 'text-align',
+ 'text-indent',
+ 'text-style',
+ 'text-transform',
+ 'underline',
+];
+
+const SKIP_FILES = ['index.js', '*View.js', '*-impl.js', '*.test.js', 'document-section.js'];
+
+function shouldSkip(filename) {
+ return SKIP_FILES.some((pattern) => {
+ if (pattern.includes('*')) {
+ return new RegExp('^' + pattern.replace('*', '.*') + '$').test(filename);
+ }
+ return filename === pattern;
+ });
+}
+
+function getFiles(dir) {
+ const files = [];
+ const items = fs.readdirSync(dir);
+ for (const item of items) {
+ const fullPath = path.join(dir, item);
+ const stat = fs.statSync(fullPath);
+ if (stat.isDirectory()) {
+ files.push(...getFiles(fullPath));
+ } else if (item.endsWith('.js') && !shouldSkip(item)) {
+ files.push(fullPath);
+ }
+ }
+ return files;
+}
+
+function hasCategory(item, categoryName) {
+ return (
+ item.tags?.some((t) => t.title === 'category' && t.description?.toLowerCase() === categoryName.toLowerCase()) ||
+ false
+ );
+}
+
+function extractText(desc) {
+ if (!desc) return '';
+ if (typeof desc === 'string') return desc;
+ if (typeof desc === 'object' && !desc.type && !desc.children) return String(desc);
+
+ if (desc.type === 'root' && desc.children) {
+ return desc.children
+ .map((child) => {
+ if (child.type === 'paragraph' && child.children) {
+ return child.children
+ .filter((n) => n.type === 'text')
+ .map((n) => n.value)
+ .join('');
+ }
+ return '';
+ })
+ .join('\n');
+ }
+ return '';
+}
+
+function formatType(type) {
+ if (!type) return 'any';
+ if (typeof type === 'string') return type;
+
+ switch (type.type) {
+ case 'NameExpression':
+ return type.name;
+ case 'TypeApplication':
+ const base = type.expression?.name || 'unknown';
+ const args = type.applications?.map(formatType).join(', ');
+ return args ? `${base}<${args}>` : base;
+ case 'UnionType':
+ return type.elements.map(formatType).join(' | ');
+ case 'OptionalType':
+ return formatType(type.expression);
+ default:
+ return type.name || 'any';
+ }
+}
+
+function extractProperties(td) {
+ const propertyTags = td.tags?.filter((tag) => tag.title === 'property') || [];
+
+ return propertyTags
+ .filter((tag) => {
+ // Only filter out if @internal is at the very start of the description
+ const desc = extractText(tag.description);
+ return !desc.match(/^@(internal|private)\s/);
+ })
+ .map((tag) => {
+ const isOptional = tag.type?.type === 'OptionalType';
+ const actualType = isOptional ? tag.type.expression : tag.type;
+ let defaultValue = tag.default?.replace(/^['"]|['"]$/g, '');
+ // Remove @internal/@private prefix from description if it exists elsewhere
+ let description = extractText(tag.description).replace(/@(internal|private)\s+/gi, '');
+
+ return {
+ name: tag.name,
+ type: formatType(actualType),
+ description,
+ optional: isOptional,
+ default: defaultValue,
+ };
+ });
+}
+
+function extractTags(item) {
+ if (!item?.tags) return {};
+
+ const tags = {};
+ item.tags.forEach((tag) => {
+ if (['sidebartitle', 'snippetpath', 'shortcut', 'note', 'usage', 'example'].includes(tag.title.toLowerCase())) {
+ const key = tag.title.toLowerCase();
+ if (key === 'shortcut') {
+ // Handle multiple shortcuts
+ if (!tags.shortcuts) tags.shortcuts = [];
+ tags.shortcuts.push(tag.description);
+ } else {
+ tags[key] = tag.description || '';
+ }
+ }
+ });
+
+ return tags;
+}
+
+/**
+ * Get SEO keywords for an extension
+ */
+function getKeywordsForExtension(name) {
+ const keywordMap = {
+ 'block-node': 'block node, block elements, document structure, word block, document blocks',
+ bold: 'bold text, text formatting, strong emphasis, font weight, document styling, word bold',
+ 'bullet-list': 'bullet points, unordered lists, list formatting, document lists, word bullet lists',
+ bookmarks: 'document bookmarks, navigation markers, word bookmarks, document anchors, internal links',
+ 'content-block': 'content blocks, structured content, document sections, block elements, word content blocks',
+ color: 'text color, font color, document styling, color picker, word text color',
+ 'custom-selection': 'text selection, custom selection, document selection, word selection, editor selection',
+ document: 'document management, docx document, word document, document api, document editor',
+ dropcursor: 'drop cursor, drop selection, drop navigation, text drop, word drop cursor',
+ 'font-family': 'font family, typeface, font selection, text fonts, word fonts, typography',
+ 'font-size': 'font size, text size, typography, text formatting, word font size',
+ 'format-commands': 'formatting commands, text formatting, document formatting, word commands, editor commands',
+ gapcursor: 'gap cursor, gap selection, gap navigation, text gap, word gap cursor',
+ heading: 'document headings, h1 h2 h3, document structure, heading levels, word headings, document hierarchy',
+ history: 'undo redo, edit history, document history, version control, word undo, document revisions',
+ highlight: 'text highlighting, background color, mark text, document annotation, word highlight',
+ italic: 'italic text, text emphasis, oblique font, document formatting, word italic, text style',
+ image: 'image insertion, image insertion, image insertion, image insertion, image insertion, image insertion',
+ 'line-break': 'line breaks, paragraph breaks, document formatting, word line breaks, text breaks',
+ 'line-height': 'line height, line spacing, text spacing, paragraph spacing, word line height',
+ link: 'hyperlinks, web links, document links, word hyperlinks, url links, external links',
+ 'linked-styles': 'linked styles, style inheritance, document styles, word linked styles, style inheritance',
+ // 'list-item': 'list items, list formatting, document lists, word list items, list numbering',
+ table: 'word tables, complex tables, merge cells, split cells, table borders, docx tables, nested tables',
+ 'table-cell': 'table cells, cell formatting, table data, word table cells, cell properties',
+ 'table-header': 'table headers, table headings, table structure, word table headers, table formatting',
+ 'table-row': 'table rows, row formatting, table structure, word table rows, table layout',
+ 'text-align': 'text alignment, paragraph alignment, document alignment, word alignment, text justify',
+ 'text-indent': 'text indentation, paragraph indentation, document indentation, word indentation, text indent',
+ 'text-style': 'text styling, font formatting, text appearance, document formatting, word text style',
+ 'text-transform':
+ 'text transformation, case conversion, document transformation, word text transform, text capitalization',
+ underline: 'underline text, text decoration, underlined words, document formatting, word underline',
+ search: 'document search, find replace, regex search, text search, word search, document navigation',
+ strike: 'strikethrough text, crossed out text, deletion mark, document editing, word strikethrough',
+ // 'link': 'hyperlinks, web links, document links, word hyperlinks, url links, external links',
+ // 'structured-content': 'structured content, document structure, content organization, document sections, word structure',
+ // 'track-changes': 'tracked changes, revision tracking, document revisions, change history, word track changes, document collaboration',
+ // 'field-annotation': 'form fields, document fields, fillable forms, docx forms, word form fields, document automation',
+ // 'document-section': 'document sections, locked sections, content controls, section protection, word sections, document structure',
+ // 'comments': 'word comments api, document annotations, threaded discussions, comment resolution, docx comments'
+ };
+
+ return keywordMap[name] || `${name} extension, superdoc ${name}, word ${name}, document ${name}, docx ${name}`;
+}
+
+/**
+ * Extract GitHub path from full file path
+ */
+function getGithubPath(fullPath) {
+ if (!fullPath) return null;
+
+ // Normalize path separators
+ const normalized = fullPath.replace(/\\/g, '/');
+
+ // Extract from 'packages/' onward
+ const match = normalized.match(/(packages\/.+)/);
+ return match ? match[1] : null;
+}
+
+async function parseExtension(name, files) {
+ const documentation = await import('documentation');
+ const data = await documentation.build(files, {
+ shallow: false,
+ inferPrivate: '^_',
+ github: false,
+ });
+
+ if (!data?.length) return null;
+
+ const moduleDoc = data.find((d) => d.kind === 'module');
+ const allTypedefs = data.filter((d) => d.kind === 'typedef' && !d.tags?.some((t) => t.title === 'private'));
+
+ const ext = {
+ name: moduleDoc?.name || name,
+ description: extractText(moduleDoc?.description),
+ tags: extractTags(moduleDoc),
+ options: allTypedefs.find((td) => hasCategory(td, 'Options')),
+ attributes: allTypedefs.find((td) => hasCategory(td, 'Attributes')),
+ typedefs: allTypedefs.filter(
+ (td) => !hasCategory(td, 'Options') && !hasCategory(td, 'Attributes') && !hasCategory(td, 'Commands'),
+ ),
+ commands: data.filter((d) => d.kind === 'function' && hasCategory(d, 'Command')),
+ helpers: data.filter((d) => d.kind === 'function' && hasCategory(d, 'Helper')),
+ githubPath: getGithubPath(moduleDoc?.context?.file) || `packages/super-editor/src/extensions/${name}`,
+ };
+
+ // Process typedefs
+ if (ext.options)
+ ext.options = { ...ext.options, properties: extractProperties(ext.options), examples: ext.options.examples || [] };
+ if (ext.attributes) ext.attributes = { ...ext.attributes, properties: extractProperties(ext.attributes) };
+ ext.typedefs = ext.typedefs.map((td) => ({
+ ...td,
+ properties: extractProperties(td),
+ description: extractText(td.description),
+ }));
+
+ // Process functions
+ ext.commands = ext.commands.map((cmd) => ({
+ name: cmd.name,
+ description: extractText(cmd.description),
+ params: (cmd.params || []).map((p) => ({
+ name: p.name,
+ type: formatType(p.type),
+ description: extractText(p.description),
+ optional: p.optional || false,
+ default: p.default,
+ })),
+ returns: cmd.returns?.[0]
+ ? {
+ type: formatType(cmd.returns[0].type),
+ description: extractText(cmd.returns[0].description),
+ }
+ : undefined,
+ examples: (cmd.examples || []).map((e) => e.description),
+ tags: extractTags(cmd),
+ }));
+
+ ext.helpers = ext.helpers.map((h) => ({
+ name: h.name,
+ description: extractText(h.description),
+ params: (h.params || []).map((p) => ({
+ name: p.name,
+ type: formatType(p.type),
+ description: extractText(p.description),
+ optional: p.optional || false,
+ })),
+ returns: h.returns?.[0]
+ ? {
+ type: formatType(h.returns[0].type),
+ description: extractText(h.returns[0].description),
+ }
+ : undefined,
+ examples: (h.examples || []).map((e) => e.description),
+ tags: extractTags(h),
+ }));
+
+ return ext;
+}
+
+/**
+ * Generate Mintlify MDX
+ */
+function generateMDX(ext) {
+ const lines = [];
+
+ // Frontmatter
+ lines.push('---');
+ lines.push(`title: ${ext.name} extension`);
+ lines.push(`sidebarTitle: "${ext.tags.sidebartitle || ext.name}"`);
+ lines.push(`keywords: "${getKeywordsForExtension(ext.name)}"`);
+ lines.push('---\n');
+
+ // Snippet
+ if (ext.tags.snippetpath) {
+ lines.push(`import Description from '${ext.tags.snippetpath}'\n`);
+ lines.push(' \n');
+ }
+
+ // Options
+ if (ext.options?.properties?.length > 0) {
+ lines.push('## Options\n');
+ lines.push('Configure the extension behavior:\n');
+
+ ext.options.properties.forEach((prop) => {
+ lines.push(
+ ``,
+ );
+ lines.push(` ${prop.description}`);
+ lines.push(' \n');
+ });
+
+ // Options from JSDoc @example
+ if (ext.options.examples?.length > 0) {
+ lines.push('**Example:**\n');
+ lines.push('```javascript');
+ lines.push(ext.options.examples[0].description);
+ lines.push('```\n');
+ }
+ }
+
+ // Attributes
+ if (ext.attributes?.properties?.length > 0) {
+ lines.push('## Attributes\n');
+ lines.push('Node attributes that can be set and retrieved:\n');
+
+ ext.attributes.properties.forEach((prop) => {
+ lines.push(
+ ``,
+ );
+ lines.push(` ${prop.description}`);
+ lines.push(' \n');
+ });
+ }
+
+ // Commands
+ if (ext.commands.length > 0) {
+ lines.push('## Commands\n');
+
+ ext.commands.forEach((cmd) => {
+ lines.push(`### \`${cmd.name}\`\n`);
+ lines.push(cmd.description + '\n');
+
+ if (cmd.tags.note) {
+ lines.push('');
+ lines.push(cmd.tags.note);
+ lines.push(' \n');
+ }
+
+ if (cmd.examples?.length) {
+ lines.push('**Example:**\n');
+ lines.push('```javascript');
+ // Ensure examples have editor.commands prefix if not already present
+ let example = cmd.examples[0].trim();
+ if (!example.includes('editor.commands.') && !example.includes('//')) {
+ // If it's a simple command call without editor prefix, add it
+ example = example.replace(/^([a-zA-Z]+)/, 'editor.commands.$1');
+ }
+ lines.push(example);
+ lines.push('```\n');
+ }
+
+ if (cmd.params?.length) {
+ lines.push('**Parameters:**\n');
+ cmd.params.forEach((param) => {
+ lines.push(``);
+ lines.push(` ${param.description || ''}`);
+ lines.push(' ');
+ });
+ lines.push('');
+ }
+
+ if (cmd.returns) {
+ lines.push(`**Returns:** \`${cmd.returns.type}\` ${cmd.returns.description || ''}\n`);
+ }
+ });
+ }
+
+ // Helpers section
+ if (ext.helpers.length > 0) {
+ lines.push('## Helpers\n');
+ ext.helpers.forEach((helper) => {
+ lines.push(`### \`${helper.name}\`\n`);
+ lines.push(helper.description + '\n');
+
+ // Examples (if available)
+ if (helper.examples?.length) {
+ lines.push('**Example:**\n');
+ lines.push('```javascript');
+ lines.push(helper.examples[0].trim());
+ lines.push('```\n');
+ }
+
+ // Parameters (if any)
+ if (helper.params?.length) {
+ lines.push('**Parameters:**\n');
+ helper.params.forEach((param) => {
+ lines.push(``);
+ lines.push(` ${param.description || ''}`);
+ lines.push(' ');
+ });
+ lines.push('');
+ }
+
+ // Returns - check if it's a typedef
+ if (helper.returns) {
+ const returnType = helper.returns.type;
+ // Check if the return type references a typedef (like Array)
+ const typedefMatch = returnType.match(/(?:Array<)?(\w+)>?/);
+ const baseType = typedefMatch ? typedefMatch[1] : returnType;
+ const isTypedef = ext.typedefs?.some((t) => t.name === baseType);
+
+ lines.push('**Returns:**\n');
+
+ if (isTypedef) {
+ // Link to the typedef instead of duplicating description
+ lines.push(``);
+ lines.push(` See [${baseType}](#${baseType.toLowerCase()}) type definition`);
+ lines.push(' \n');
+ } else {
+ // Simple type, include description
+ lines.push(``);
+ lines.push(` ${helper.returns.description || ''}`);
+ lines.push(' \n');
+ }
+ }
+ });
+ }
+
+ // Shortcuts
+ if (ext.tags.shortcuts?.length > 0) {
+ lines.push('## Keyboard Shortcuts\n');
+ lines.push('| Command | Shortcut | Description |');
+ lines.push('|---------|----------|-------------|');
+ ext.tags.shortcuts.forEach((shortcut) => {
+ const [key, command, description] = shortcut.split('|').map((s) => s.trim());
+ lines.push(`| ${command}() | \`${key.replace(/Mod/g, 'β/Ctrl')}\` | ${description} |`);
+ });
+ lines.push('');
+ }
+
+ // Types
+ if (ext.typedefs?.length > 0) {
+ lines.push('## Types\n');
+ ext.typedefs.forEach((typedef) => {
+ lines.push(`### \`${typedef.name}\`\n`);
+ if (typedef.description) lines.push(typedef.description + '\n');
+
+ // Show properties if they exist
+ if (typedef.properties?.length > 0) {
+ lines.push(``);
+ typedef.properties.forEach((prop) => {
+ lines.push(``);
+ lines.push(` ${prop.description || ''}`);
+ lines.push(' ');
+ });
+ lines.push(` \n`);
+ }
+ });
+ }
+
+ // Add source code section at the very end
+ lines.push('\n## Source Code\n');
+ lines.push(`import { SourceCodeLink } from '/snippets/components/source-code-link.jsx'\n`);
+ lines.push(` \n`);
+
+ return lines.join('\n');
+}
+
+/**
+ * Main
+ */
+async function main() {
+ console.log('π Syncing SDK documentation\n');
+
+ try {
+ fs.mkdirSync(outputDir, { recursive: true });
+
+ for (const name of SUPPORTED) {
+ const extPath = path.join(sourceDir, name);
+ if (!fs.existsSync(extPath)) {
+ console.log(`β οΈ ${name} not found`);
+ continue;
+ }
+
+ console.log(`π Processing ${name}...`);
+ const files = getFiles(extPath);
+ const extension = await parseExtension(name, files);
+
+ if (!extension) {
+ console.log(` No module found`);
+ continue;
+ }
+
+ const content = generateMDX(extension);
+ fs.writeFileSync(path.join(outputDir, `${name}.mdx`), content);
+
+ const stats = [];
+ if (extension.options) stats.push('options');
+ if (extension.attributes) stats.push('attributes');
+ if (extension.commands.length) stats.push(`${extension.commands.length} commands`);
+ if (extension.helpers.length) stats.push(`${extension.helpers.length} helpers`);
+
+ console.log(` β ${stats.join(', ')}`);
+ }
+
+ console.log('\nβ
Complete!');
+ } catch (error) {
+ console.error('β Error:', error.message);
+ process.exit(1);
+ }
+}
+
+main();
diff --git a/apps/docs/snippets/components/source-code-link.jsx b/apps/docs/snippets/components/source-code-link.jsx
new file mode 100644
index 0000000000..51b3da5130
--- /dev/null
+++ b/apps/docs/snippets/components/source-code-link.jsx
@@ -0,0 +1,15 @@
+export const SourceCodeLink = ({ extension, path }) => {
+ // Default to standard extension path if no custom path provided
+ const githubPath = path || `packages/super-editor/src/extensions/${extension.toLowerCase()}`;
+ const githubUrl = `https://github.com/Harbour-Enterprises/SuperDoc/tree/main/${githubPath}`;
+
+ return (
+
+ );
+};
diff --git a/apps/docs/snippets/components/superdoc-editor.jsx b/apps/docs/snippets/components/superdoc-editor.jsx
new file mode 100644
index 0000000000..5e33eba190
--- /dev/null
+++ b/apps/docs/snippets/components/superdoc-editor.jsx
@@ -0,0 +1,119 @@
+export const SuperDocEditor = ({
+ html = 'Start editing...
',
+ height = '400px',
+ maxHeight = '400px',
+ onReady = null,
+ showExport = true,
+ customButtons = null, // Array of {label, onClick, className}
+}) => {
+ const [ready, setReady] = useState(false);
+ const editorRef = useRef(null);
+ const containerIdRef = useRef(`editor-${Math.random().toString(36).substr(2, 9)}`);
+
+ useEffect(() => {
+ const link = document.createElement('link');
+ link.rel = 'stylesheet';
+ link.href = 'https://unpkg.com/@harbour-enterprises/superdoc@latest/dist/style.css';
+ document.head.appendChild(link);
+
+ const script = document.createElement('script');
+ script.src = 'https://unpkg.com/@harbour-enterprises/superdoc@latest/dist/superdoc.umd.js';
+ script.onload = () => {
+ setTimeout(() => {
+ if (window.SuperDocLibrary) {
+ editorRef.current = new window.SuperDocLibrary.SuperDoc({
+ selector: `#${containerIdRef.current}`,
+ html,
+ rulers: true,
+ onReady: () => {
+ setReady(true);
+ if (onReady) onReady(editorRef.current);
+ },
+ });
+ }
+ }, 100);
+ };
+ document.body.appendChild(script);
+
+ return () => editorRef.current?.destroy?.();
+ }, []);
+
+ const exportDocx = () => {
+ if (editorRef.current?.export) {
+ editorRef.current.export();
+ }
+ };
+
+ return (
+
+ {ready && (showExport || customButtons) && (
+
+ {customButtons && (
+
+ {customButtons.map((row, rowIndex) => (
+
+ {row.map((btn, i) => (
+ btn.onClick(editorRef.current)}
+ className={
+ btn.className || 'flex-1 px-2 py-1 bg-gray-100 text-gray-700 text-xs rounded hover:bg-gray-200'
+ }
+ >
+ {btn.label}
+
+ ))}
+
+ ))}
+
+ )}
+ {showExport && (
+
+
+ Export DOCX
+
+
+ )}
+
+ )}
+
+
+
+ );
+};
diff --git a/apps/docs/snippets/extensions/block-node.mdx b/apps/docs/snippets/extensions/block-node.mdx
new file mode 100644
index 0000000000..909c97560a
--- /dev/null
+++ b/apps/docs/snippets/extensions/block-node.mdx
@@ -0,0 +1,133 @@
+Automatically tracks block-level nodes with unique IDs for precise document manipulation.
+
+Essential for collaborative editing, change tracking, and programmatic document updates.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Document TitleFirst paragraph with some content.
Second paragraph to demonstrate block operations.
Section Heading Another paragraph in the section.
`}
+ height="400px"
+ onReady={(superdoc) => {
+ // Make editor accessible for console experiments
+ window.testEditor = superdoc?.activeEditor || superdoc?.editor;
+ }}
+ customButtons={[
+ [
+ {
+ label: 'Show Block IDs',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.helpers) return
+
+ const blocks = editor.helpers.blockNode.getBlockNodes()
+ const info = blocks.map((b, i) =>
+ `${i + 1}. ${b.node.type.name}: "${b.node.textContent.substring(0, 30)}..." (ID: ${b.node.attrs.sdBlockId?.substring(0, 8)}...)`
+ ).join('\n')
+
+ alert(`Found ${blocks.length} blocks:\n\n${info}`)
+ }
+ },
+ {
+ label: 'Count by Type',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.helpers) return
+
+ const paragraphs = editor.helpers.blockNode.getBlockNodesByType('paragraph')
+ const headings = editor.helpers.blockNode.getBlockNodesByType('heading')
+
+ alert(`Document structure:\nβ’ ${paragraphs.length} paragraphs\nβ’ ${headings.length} headings`)
+ }
+ }
+ ],
+ [
+ {
+ label: 'Center First Block',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.helpers || !editor?.commands) return
+
+ const blocks = editor.helpers.blockNode.getBlockNodes()
+ if (!blocks.length) return
+
+ const firstId = blocks[0].node.attrs.sdBlockId
+ editor.commands.updateBlockNodeAttributes(firstId, {
+ textAlign: 'center'
+ })
+ }
+ },
+ {
+ label: 'Delete Last Block',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.helpers || !editor?.commands) return
+
+ const blocks = editor.helpers.blockNode.getBlockNodes()
+ if (!blocks.length) return
+
+ const lastId = blocks[blocks.length - 1].node.attrs.sdBlockId
+ if (confirm('Delete the last block?')) {
+ editor.commands.deleteBlockNodeById(lastId)
+ }
+ }
+ },
+ {
+ label: 'Replace Second Block',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.helpers || !editor?.commands) return
+
+ const blocks = editor.helpers.blockNode.getBlockNodes()
+ if (blocks.length < 2) return
+
+ const secondBlock = blocks[1]
+ const id = secondBlock.node.attrs.sdBlockId
+ const type = secondBlock.node.type.name
+
+ const newNode = editor.schema.nodes[type].create(
+ { sdBlockId: id + '-new' },
+ editor.schema.text('β¨ This block was replaced programmatically!')
+ )
+
+ editor.commands.replaceBlockNodeById(id, newNode)
+ }
+ }
+ ],
+ [
+ {
+ label: 'Blocks in Selection',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.helpers) return
+
+ const { from, to } = editor.state.selection
+ const blocks = editor.helpers.blockNode.getBlockNodesInRange(from, to)
+
+ if (blocks.length) {
+ const types = blocks.map(b => b.node.type.name).join(', ')
+ alert(`${blocks.length} blocks in selection:\n${types}`)
+ } else {
+ alert('No blocks in current selection')
+ }
+ }
+ }
+ ]
+ ]}
+/>
+
+## How It Works
+
+Every block-level node (paragraphs, headings, etc.) automatically receives a unique `sdBlockId` attribute. This enables:
+
+1. **Precise targeting** - Manipulate specific blocks even as document changes
+2. **Change tracking** - Know exactly which blocks were modified
+3. **Collaborative editing** - Reference blocks consistently across clients
+4. **Programmatic updates** - Update document structure via APIs
+
+## Use Case
+
+- **Document APIs** - Build REST APIs that manipulate specific blocks
+- **Collaboration** - Track who edited which blocks in real-time
+- **Comments & Annotations** - Attach metadata to specific blocks
+- **Version Control** - Diff documents at the block level
+- **Templates** - Replace placeholder blocks with dynamic content
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/bold.mdx b/apps/docs/snippets/extensions/bold.mdx
new file mode 100644
index 0000000000..e7e4df68e0
--- /dev/null
+++ b/apps/docs/snippets/extensions/bold.mdx
@@ -0,0 +1,56 @@
+Apply bold emphasis to make text stand out.
+
+The most fundamental text formatting, preserving perfectly through Word import/export.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+"Be bold and mighty forces will come to your aid." Basil King `}
+ height="250px"
+ customButtons={[
+ [
+ {
+ label: 'Toggle Bold',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.toggleBold()
+ }
+ },
+ {
+ label: 'Set Bold',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setBold()
+ }
+ },
+ {
+ label: 'Unset Bold',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.unsetBold()
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+ Bold text
+
+```
+
+## Use Case
+
+- **Headings** - Visual hierarchy without changing size
+- **Key terms** - Highlight important concepts
+- **Warnings** - Draw immediate attention
+- **Emphasis** - Stronger than italic
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/bookmarks.mdx b/apps/docs/snippets/extensions/bookmarks.mdx
new file mode 100644
index 0000000000..16f3e84ba4
--- /dev/null
+++ b/apps/docs/snippets/extensions/bookmarks.mdx
@@ -0,0 +1,86 @@
+Create invisible navigation anchors for cross-references and document navigation.
+
+Essential for long documents, table of contents, and internal hyperlinks with perfect Word compatibility.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+This document demonstrates bookmark functionality. Bookmarks are invisible navigation anchors.Introduction
This is the introduction section. Click "Add Bookmark Here" to place a bookmark at your cursor position.
Chapter 1: Getting Started
Content for chapter one goes here. Bookmarks enable quick navigation through long documents.
Chapter 2: Advanced Topics
More content here. You can create as many bookmarks as needed.
Conclusion
The conclusion wraps up the document. Use the navigation buttons after adding bookmarks to jump between them.
`}
+ height="400px"
+ customButtons={[
+ [
+ {
+ label: 'π Add Bookmark Here',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ const name = prompt('Enter bookmark name:')
+ if (name) {
+ editor.commands.insertBookmark({
+ name,
+ id: `${Date.now()}`
+ })
+ alert(`Bookmark "${name}" added at current position`)
+ }
+ }
+ },
+ {
+ label: 'π List Bookmarks',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor) return
+ const bookmarks = []
+ editor.state.doc.descendants((node) => {
+ if (node.type.name === 'bookmarkStart') {
+ bookmarks.push(node.attrs.name)
+ }
+ })
+ if (bookmarks.length) {
+ alert('Bookmarks in document:\n' + bookmarks.join('\n'))
+ } else {
+ alert('No bookmarks found. Add some first!')
+ }
+ }
+ }
+ ],
+ [
+ {
+ label: 'β Go to Bookmark',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ const name = prompt('Enter bookmark name to navigate to:')
+ if (name) {
+ editor.commands.goToBookmark(name)
+ }
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+ Chapter content here
+
+
+
+
+
+
+ Go to Chapter 1
+
+
+```
+
+## Use Case
+
+- **Table of Contents** - Create clickable TOC entries that jump to chapters
+- **Cross-References** - Link to figures, tables, or sections elsewhere
+- **Navigation** - Quick jumps in long documents without scrolling
+- **Index Creation** - Mark important terms for automated index generation
+- **Document Automation** - Programmatic navigation and content updates
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/bullet-list.mdx b/apps/docs/snippets/extensions/bullet-list.mdx
new file mode 100644
index 0000000000..2349310340
--- /dev/null
+++ b/apps/docs/snippets/extensions/bullet-list.mdx
@@ -0,0 +1,105 @@
+Organize content with clean, structured bullet points.
+
+Type `- `, `* `, or `+ ` to start a list automatically. Create nested lists with Tab/Shift+Tab. Lists preserve perfectly through Word import/export.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Essential project tasks:
+
+ Define clear objectives
+
+ Set measurable goals
+ Align with strategy
+
+
+ Set realistic deadlines
+ Allocate resources wisely
+ Track progress regularly
+
+ Try selecting text and using the buttons below to modify the list.
+ `}
+ height="350px"
+ customButtons={[
+ [
+ {
+ label: 'Toggle Bullet List',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.toggleBulletList()
+ }
+ },
+ {
+ label: 'Split List Item',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.splitListItem('listItem')
+ }
+ },
+ {
+ label: 'Indent (Tab)',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.view) return
+
+ // Simulate Tab key press
+ const event = new KeyboardEvent('keydown', {
+ key: 'Tab',
+ code: 'Tab',
+ keyCode: 9,
+ which: 9,
+ bubbles: true,
+ cancelable: true
+ })
+ editor.view.dom.dispatchEvent(event)
+ }
+ },
+ {
+ label: 'Outdent (Shift+Tab)',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.view) return
+
+ // Simulate Shift+Tab key press
+ const event = new KeyboardEvent('keydown', {
+ key: 'Tab',
+ code: 'Tab',
+ keyCode: 9,
+ which: 9,
+ shiftKey: true,
+ bubbles: true,
+ cancelable: true
+ })
+ editor.view.dom.dispatchEvent(event)
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+
+
+
+ List item text
+
+
+```
+
+## Use Case
+
+- **Action items** - Track tasks and responsibilities
+- **Feature lists** - Showcase product capabilities
+- **Key points** - Summarize important information
+- **Requirements** - Document specifications clearly
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/color.mdx b/apps/docs/snippets/extensions/color.mdx
new file mode 100644
index 0000000000..8cf4665fda
--- /dev/null
+++ b/apps/docs/snippets/extensions/color.mdx
@@ -0,0 +1,110 @@
+Apply custom text colors for emphasis, branding, and visual hierarchy.
+
+Colors preserve perfectly through Word import/export, maintaining your document's visual design across formats.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Color enhances communication through visual hierarchy:
+
+ Red text for warnings and critical information
+ Green text for success and positive outcomes
+ Blue text for links and references
+ Purple text for special terminology
+ Orange text for important notes
+
+ Select any text and apply colors using the buttons below.
+ `}
+ height="350px"
+ customButtons={[
+ [
+ {
+ label: 'π΄ Red',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setColor('#dc2626')
+ }
+ },
+ {
+ label: 'π’ Green',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setColor('#059669')
+ }
+ },
+ {
+ label: 'π΅ Blue',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setColor('#2563eb')
+ }
+ },
+ {
+ label: 'π£ Purple',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setColor('#7c3aed')
+ }
+ },
+ {
+ label: 'π Orange',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setColor('#ea580c')
+ }
+ },
+ {
+ label: 'Remove Color',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.unsetColor()
+ }
+ },
+ {
+ label: 'Custom Color',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ const color = prompt('Enter color (hex, rgb, or name):', '#000000')
+ if (color) {
+ editor.commands.setColor(color)
+ }
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+ Red colored text
+
+```
+
+## Use Case
+
+- **Status indicators** - Red for errors, green for success, yellow for warnings
+- **Document sections** - Color-code different types of content
+- **Emphasis** - Draw attention without changing font size or weight
+- **Brand consistency** - Match company colors in documents
+- **Legal markup** - Highlight changes, additions, deletions
+
+## Best practices
+
+- **Accessibility** - Ensure sufficient contrast ratios (WCAG 2.1 AA: 4.5:1)
+- **Print-friendly** - Test colors in both digital and printed formats
+- **Consistency** - Use the same color for the same meaning throughout
+- **Restraint** - Too many colors reduce effectiveness
+- **Fallbacks** - Don't rely solely on color to convey meaning
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/content-block.mdx b/apps/docs/snippets/extensions/content-block.mdx
new file mode 100644
index 0000000000..1c4aa59e6c
--- /dev/null
+++ b/apps/docs/snippets/extensions/content-block.mdx
@@ -0,0 +1,102 @@
+Flexible inline blocks for horizontal rules, spacers, and custom dividers.
+
+Preserves special Word content like shapes and drawings through import/export.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Content blocks create visual breaks and spacing in your document.
They can be horizontal rules, spacers, or custom dividers.
Use them to organize content visually.
`}
+ height="300px"
+ customButtons={[
+ [
+ {
+ label: 'β Horizontal Rule',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.insertHorizontalRule()
+ }
+ },
+ {
+ label: 'β Spacer (20px)',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.insertContentBlock({
+ size: { height: 20, width: '100%' }
+ })
+ }
+ },
+ {
+ label: 'β Thick Blue',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.insertContentBlock({
+ size: { width: '100%', height: 4 },
+ background: '#2563eb'
+ })
+ }
+ }
+ ],
+ [
+ {
+ label: 'β¬ 50% Red',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.insertContentBlock({
+ size: { width: '50%', height: 2 },
+ background: '#dc2626'
+ })
+ }
+ },
+ {
+ label: 'β Block (100x50)',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.insertContentBlock({
+ size: { width: 100, height: 50 },
+ background: '#f3f4f6'
+ })
+ }
+ },
+ {
+ label: 'β’ β’ β’ Dotted',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.insertContentBlock({
+ size: { width: '100%', height: 1 },
+ background: 'repeating-linear-gradient(90deg, #6b7280 0px, #6b7280 5px, transparent 5px, transparent 10px)'
+ })
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+
+
+```
+
+## Use Case
+
+- **Section Breaks** - Visually separate different parts of your document
+- **Horizontal Rules** - Classic divider between content sections
+- **Spacers** - Add precise vertical spacing without empty paragraphs
+- **Custom Dividers** - Brand-colored separators for professional documents
+- **Shape Preservation** - Maintains Word shapes and drawings through import/export
+- **Layout Control** - Fine-tune document appearance with inline blocks
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/custom-selection.mdx b/apps/docs/snippets/extensions/custom-selection.mdx
new file mode 100644
index 0000000000..a58957a6e7
--- /dev/null
+++ b/apps/docs/snippets/extensions/custom-selection.mdx
@@ -0,0 +1,60 @@
+Keep text selection visible when clicking toolbar buttons.
+
+Select text and click the toolbar - your selection stays highlighted for a seamless editing experience.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Select any text in this paragraph, then click the toolbar buttons.
+
+ Your selection remains visible even when the editor loses focus.
+
+ This creates the polished interaction you expect from professional editors.
+ `}
+ height="250px"
+ customButtons={[
+ [
+ {
+ label: 'Apply Bold',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.restorePreservedSelection()
+ editor.commands.toggleBold()
+ }
+ },
+ {
+ label: 'Apply Italic',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.restorePreservedSelection()
+ editor.commands.toggleItalic()
+ }
+ },
+ {
+ label: 'Change Color',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ const color = prompt('Enter color:', '#3b82f6')
+ if (color) {
+ editor.commands.restorePreservedSelection()
+ editor.commands.setColor(color)
+ }
+ }
+ }
+ ]
+ ]}
+/>
+
+## Use Case
+
+- **Professional UX** - Selection doesn't disappear when using toolbars
+- **Seamless editing** - Apply multiple formats without reselecting
+- **User expectations** - Matches desktop word processor behavior
+
+## Integration
+
+Add `toolbar-button` class to toolbar elements. Call `restorePreservedSelection()` before applying commands.
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/document-section.mdx b/apps/docs/snippets/extensions/document-section.mdx
new file mode 100644
index 0000000000..607f2ca4dc
--- /dev/null
+++ b/apps/docs/snippets/extensions/document-section.mdx
@@ -0,0 +1,68 @@
+Break documents into discrete, lockable parts.
+
+Each section is an independent Word SDT (`w:sdt`) element that preserves state through import/export.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+"People will forget what you said, people will forget what you did, but
+people will never forget how you made them feel." Maya Angelou `}
+ height="300px"
+ customButtons={[
+ [
+ {
+ label: 'Add Section',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.createDocumentSection({
+ title: `Section`,
+ id: 'legal-1',
+ description: 'This is a new section created from the button click from mock html data.',
+ html: 'Content...
'
+ })
+ }
+ },
+ {
+ label: 'Toggle Lock',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.lockSectionById({ id: 'legal-1' })
+ }
+ },
+ {
+ label: 'Remove Section',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.removeSectionAtSelection()
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+
+
+
+
+```
+
+## Use Case
+
+- Contract management - Lock legal clauses, leave business terms editable
+- Multi-team documents - Each team owns their section
+- Form templates - Some parts fixed, some parts fillable
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/document.mdx b/apps/docs/snippets/extensions/document.mdx
new file mode 100644
index 0000000000..8d3fdc8a93
--- /dev/null
+++ b/apps/docs/snippets/extensions/document.mdx
@@ -0,0 +1,50 @@
+The root container for all document content.
+
+Every editor starts with a Document node that contains all blocks like paragraphs, headings, and lists.
+
+{/* The Document node is the top-level container that holds all your content.
+ It ensures at least one block element exists and provides document-level operations.
+ `}
+ height="250px"
+ customButtons={[
+ [
+ {
+ label: 'Document Stats',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ const stats = editor.commands.getDocumentStats()
+ alert(`Words: ${stats.words}\nCharacters: ${stats.characters}\nParagraphs: ${stats.paragraphs}`)
+ }
+ },
+ {
+ label: 'Clear Document',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ if (confirm('Clear all content?')) {
+ editor.commands.clearDocument()
+ }
+ }
+ }
+ ]
+ ]}
+/> */}
+
+## Structure
+
+```xml
+
+ First paragraph
+ Second paragraph
+
+
+```
+
+## Why it's essential
+
+- **Required root** - Every editor needs exactly one document node
+- **Content validation** - Ensures at least one block element exists
+- **Document operations** - Enables document-level commands and queries
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/dropcursor.mdx b/apps/docs/snippets/extensions/dropcursor.mdx
new file mode 100644
index 0000000000..7976724fdd
--- /dev/null
+++ b/apps/docs/snippets/extensions/dropcursor.mdx
@@ -0,0 +1,40 @@
+Visual indicator showing where dragged content will be inserted.
+
+The drop cursor appears as a vertical line when dragging content over the editor.
+
+
+
+
+ π Drag this image into the editor below to see the drop cursor
+
+
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+As you drag the image above over different positions in this text, you'll see a vertical line (the drop cursor) indicating where the image would be inserted.The drop cursor helps you position content precisely between words, at the start of paragraphs, or between paragraphs.
Try dragging the image to different positions to see how the cursor moves!
`}
+ height="250px"
+/>
+
+## Use Case
+
+- **Visual Feedback** - Shows exactly where content will drop
+- **Precision Placement** - Position images and files accurately
+- **Better UX** - Clear indicator prevents placement mistakes
+- **Professional Feel** - Matches modern editor behavior
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/font-family.mdx b/apps/docs/snippets/extensions/font-family.mdx
new file mode 100644
index 0000000000..09b10a3ce5
--- /dev/null
+++ b/apps/docs/snippets/extensions/font-family.mdx
@@ -0,0 +1,77 @@
+Change text font to match your document's style and tone.
+
+Select text and apply different fonts for headers, quotes, or emphasis. Preserves perfectly through Word import/export.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+This is Arial - clean and modern.
+ This is Georgia - classic and readable.
+ This is Courier - perfect for code.
+ Select any text and change its font using the buttons below.
+ `}
+ height="250px"
+ customButtons={[
+ [
+ {
+ label: 'Arial',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setFontFamily('Arial, sans-serif')
+ }
+ },
+ {
+ label: 'Times',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setFontFamily('Times New Roman, serif')
+ }
+ },
+ {
+ label: 'Georgia',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setFontFamily('Georgia, serif')
+ }
+ },
+ {
+ label: 'Courier',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setFontFamily('Courier New, monospace')
+ }
+ },
+ {
+ label: 'Reset Font',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.unsetFontFamily()
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+ Text in Arial font
+
+```
+
+## Use Case
+
+- **Brand consistency** - Match company typography guidelines
+- **Document hierarchy** - Different fonts for headers vs body text
+- **Code snippets** - Monospace fonts for technical content
+- **Readability** - Choose fonts optimized for screen or print
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/font-size.mdx b/apps/docs/snippets/extensions/font-size.mdx
new file mode 100644
index 0000000000..f8fb827674
--- /dev/null
+++ b/apps/docs/snippets/extensions/font-size.mdx
@@ -0,0 +1,85 @@
+Adjust text size for emphasis and readability.
+
+Select text and apply different sizes. Supports pt, px, em, and rem units with automatic min/max clamping.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Small text for footnotes and captions.
+ Regular body text for comfortable reading.
+ Large text for headings and emphasis.
+ Select any text and resize it using the buttons below.
+ `}
+ height="250px"
+ customButtons={[
+ [
+ {
+ label: '10pt',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setFontSize('10pt')
+ }
+ },
+ {
+ label: '12pt',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setFontSize('12pt')
+ }
+ },
+ {
+ label: '14pt',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setFontSize('14pt')
+ }
+ },
+ {
+ label: '18pt',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setFontSize('18pt')
+ }
+ },
+ {
+ label: '24pt',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setFontSize('24pt')
+ }
+ },
+ {
+ label: 'Reset',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.unsetFontSize()
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+ 14pt text
+
+```
+
+## Use Case
+
+- **Visual hierarchy** - Different sizes for headers, body, and footnotes
+- **Emphasis** - Larger text draws attention without bold
+- **Readability** - Adjust size for screen distance and user preference
+- **Professional documents** - Match specific formatting requirements
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/format-commands.mdx b/apps/docs/snippets/extensions/format-commands.mdx
new file mode 100644
index 0000000000..addb3eba16
--- /dev/null
+++ b/apps/docs/snippets/extensions/format-commands.mdx
@@ -0,0 +1,51 @@
+Copy and paste text formatting like Word's format painter.
+
+Select styled text, copy its format, then apply to other text - all in two clicks.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Styled source text with multiple formats.
+ Target text - select this to apply the format.
+ Another paragraph to test format painting.
+ `}
+ height="200px"
+ customButtons={[
+ [
+ {
+ label: 'Format Painter',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ const isStoring = !editor.storage.formatCommands?.storedStyle
+ editor.commands.copyFormat()
+ if (isStoring) {
+ alert('Format copied! Select other text and click again to apply.')
+ }
+ }
+ },
+ {
+ label: 'Clear Format',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.clearFormat()
+ }
+ }
+ ]
+ ]}
+/>
+
+## How it works
+
+1. Select text with formatting you want to copy
+2. Click Format Painter (format is now stored)
+3. Select target text
+4. Click Format Painter again to apply
+
+## Use Case
+
+- **Consistency** - Apply the same styling across multiple sections
+- **Speed** - Faster than manually applying multiple formats
+- **Cleanup** - Use Clear Format to remove unwanted styling
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/gapcursor.mdx b/apps/docs/snippets/extensions/gapcursor.mdx
new file mode 100644
index 0000000000..69ec9971b3
--- /dev/null
+++ b/apps/docs/snippets/extensions/gapcursor.mdx
@@ -0,0 +1,56 @@
+Enables cursor placement at normally unreachable positions.
+
+Shows a horizontal line cursor before/after tables, images, and other block elements where text cursors can't normally go.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Use arrow keys to navigate around this table:
+
+
+ Cell 1
+ Cell 2
+
+
+ Cell 3
+ Cell 4
+
+
+ When you reach the edge of the table, the gap cursor appears as a horizontal line, allowing you to add content before or after the table.
+
+ Gap cursors also appear around other block elements like horizontal rules (above) or images where normal text selection isn't possible.
+ `}
+ height="350px"
+/>
+
+
+**How to see it:** Use arrow keys to navigate to the edges of tables or around block elements. The gap cursor appears as a thin horizontal line where normal cursors can't go.
+
+
+## When Gap Cursor Appears
+
+The gap cursor activates at positions that are:
+- **Before/after tables** - Add content outside table boundaries
+- **Around images** - Insert text before or after inline images
+- **Near horizontal rules** - Place cursor at hard-to-reach positions
+- **Between void blocks** - Navigate between non-editable elements
+- **Document boundaries** - Start/end of document near block elements
+
+## Visual Appearance
+
+```
+Normal cursor (vertical): Gap cursor (horizontal):
+
+ Text here| ββββββββββββ
+ [Table here]
+ More text ββββββββββββ
+```
+
+## Use Case
+
+- **Table Navigation** - Add content before/after tables without complex workarounds
+- **Image Positioning** - Insert text around images and media
+- **Better UX** - Eliminate "stuck cursor" frustrations
+- **Document Structure** - Navigate complex layouts with nested blocks
+- **Accessibility** - Keyboard-only users can reach all document positions
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/heading.mdx b/apps/docs/snippets/extensions/heading.mdx
new file mode 100644
index 0000000000..82510514e5
--- /dev/null
+++ b/apps/docs/snippets/extensions/heading.mdx
@@ -0,0 +1,95 @@
+Create document structure with six heading levels.
+
+Use headings to organize content hierarchically. Press Cmd+Option+1-6 for quick heading shortcuts.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Heading 1 - Main Title
+ Heading 2 - Section
+ Heading 3 - Subsection
+ Regular paragraph text. Select this line and apply different heading levels.
+ `}
+ height="300px"
+ customButtons={[
+ [
+ {
+ label: 'H1',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.toggleHeading({ level: 1 })
+ }
+ },
+ {
+ label: 'H2',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.toggleHeading({ level: 2 })
+ }
+ },
+ {
+ label: 'H3',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.toggleHeading({ level: 3 })
+ }
+ },
+ {
+ label: 'H4',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.toggleHeading({ level: 4 })
+ }
+ },
+ {
+ label: 'H5',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.toggleHeading({ level: 5 })
+ }
+ },
+ {
+ label: 'H6',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.toggleHeading({ level: 6 })
+ }
+ },
+ {
+ label: 'Normal',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setParagraph()
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+ Heading text
+
+
+```
+
+## Use Case
+
+- **Document structure** - Create logical hierarchy and navigation
+- **Accessibility** - Screen readers use headings for navigation
+- **SEO** - Search engines parse heading structure
+- **Table of contents** - Auto-generate from heading levels
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/highlight.mdx b/apps/docs/snippets/extensions/highlight.mdx
new file mode 100644
index 0000000000..2c5355a265
--- /dev/null
+++ b/apps/docs/snippets/extensions/highlight.mdx
@@ -0,0 +1,81 @@
+Apply background colors to emphasize important text.
+
+Color-coded highlighting for review, categorization, and emphasis.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Key point: Highlights draw attention
+β Approved content
+β Needs review
+βΉ Additional information `}
+ height="250px"
+ customButtons={[
+ [
+ {
+ label: 'Yellow',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.setHighlight('#FFEB3B')
+ }
+ },
+ {
+ label: 'Green',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.setHighlight('#81C784')
+ }
+ },
+ {
+ label: 'Blue',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.setHighlight('#64B5F6')
+ }
+ },
+ {
+ label: 'Orange',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.setHighlight('#FF8A65')
+ }
+ },
+ {
+ label: 'Clear',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.unsetHighlight()
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+ Highlighted text
+
+```
+
+## Use Case
+
+- **Document review** - Color-code feedback
+- **Study notes** - Highlight key concepts
+- **Status tracking** - Visual progress indicators
+- **Multi-reviewer** - Each person uses different color
+- **Categorization** - Group related content by color
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/history.mdx b/apps/docs/snippets/extensions/history.mdx
new file mode 100644
index 0000000000..a9940861df
--- /dev/null
+++ b/apps/docs/snippets/extensions/history.mdx
@@ -0,0 +1,45 @@
+Undo and redo document changes with familiar keyboard shortcuts.
+
+Track up to 100 editing actions. Press Cmd+Z to undo, Cmd+Shift+Z to redo.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Make some edits to this text, then use undo/redo to navigate through your changes.
+ Try typing, deleting, or formatting text to build up a history.
+ `}
+ height="200px"
+ customButtons={[
+ [
+ {
+ label: 'βΆ Undo',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.undo()
+ }
+ },
+ {
+ label: 'β· Redo',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.redo()
+ }
+ }
+ ]
+ ]}
+/>
+
+## How it works
+
+- **Automatic grouping** - Changes within 500ms are grouped as one action
+- **Deep history** - Stores up to 100 undo steps by default
+- **Smart tracking** - Preserves selection and cursor position
+
+## Use Case
+
+- **Mistake recovery** - Quickly undo accidental deletions or changes
+- **Experimentation** - Try different edits knowing you can revert
+- **User confidence** - Standard feature users expect in any editor
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/image.mdx b/apps/docs/snippets/extensions/image.mdx
new file mode 100644
index 0000000000..529e2f1178
--- /dev/null
+++ b/apps/docs/snippets/extensions/image.mdx
@@ -0,0 +1,79 @@
+Insert and manage images with perfect Word compatibility.
+
+Supports URLs, base64 data, and maintains positioning for Word export.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Images can be inserted inline with text.
Images automatically scale and position correctly in both the editor and Word export.
`}
+ height="350px"
+ customButtons={[
+ [
+ {
+ label: 'Add from URL',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setImage({
+ src: 'https://picsum.photos/id/237/200/150',
+ alt: 'External image from URL',
+ size: { width: 200 }
+ })
+ }
+ },
+ {
+ label: 'Add Local Image',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setImage({
+ src: '/public/images/extensions/image-chart.png',
+ alt: 'Chart visualization',
+ size: { width: 250 }
+ })
+ }
+ },
+ {
+ label: 'Add with Padding',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setImage({
+ src: '/public/images/extensions/image-icon.png',
+ alt: 'Document icon',
+ size: { width: 100 },
+ padding: { left: 20, right: 20, top: 10, bottom: 10 }
+ })
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+## Use Case
+
+- **Document illustrations** - Add diagrams, charts, and screenshots
+- **Product documentation** - Include product images and UI screenshots
+- **Reports** - Embed data visualizations and infographics
+- **Branding** - Insert logos and company graphics
+- **Base64 support** - Embed images directly without external files
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/italic.mdx b/apps/docs/snippets/extensions/italic.mdx
new file mode 100644
index 0000000000..c51084c83a
--- /dev/null
+++ b/apps/docs/snippets/extensions/italic.mdx
@@ -0,0 +1,60 @@
+Add subtle emphasis with italic styling.
+
+Classic slanted text for emphasis, thoughts, or citations.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+ The word emphasis comes from Greek, meaning "appearance" or "showing" . Use italics for subtle stress rather than bold assertion.`}
+ height="250px"
+ customButtons={[
+ [
+ {
+ label: 'Toggle Italic',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.toggleItalic()
+ }
+ },
+ {
+ label: 'Set Italic',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.setItalic()
+ }
+ },
+ {
+ label: 'Unset Italic',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.unsetItalic()
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+ Italic text
+
+```
+
+## Use Case
+
+- **Emphasis** - Softer than bold
+- **Foreign words** - *Lorem ipsum*, *c'est la vie*
+- **Thoughts** - Internal dialogue or asides
+- **Citations** - Book titles, publications
+- **Technical terms** - First usage of terminology
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/line-break.mdx b/apps/docs/snippets/extensions/line-break.mdx
new file mode 100644
index 0000000000..b169249c1d
--- /dev/null
+++ b/apps/docs/snippets/extensions/line-break.mdx
@@ -0,0 +1,46 @@
+Insert soft line breaks and page breaks in your document.
+
+Use line breaks to control text flow without creating new paragraphs. Page breaks force new pages when printing.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+First line Second line in same paragraph Third line still together
+ This is a separate paragraph after pressing Enter.
+
+ This content starts on a new page when printed.
+ `}
+ height="250px"
+ customButtons={[
+ [
+ {
+ label: 'β΅ Line Break',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.insertLineBreak()
+ }
+ },
+ {
+ label: 'π Page Break',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.insertPageBreak()
+ }
+ }
+ ]
+ ]}
+/>
+
+## Types of breaks
+
+- **Line Break** - Moves to next line within same paragraph (Shift+Enter)
+- **Page Break** - Forces content to start on new page when printing
+
+## Use Case
+
+- **Address formatting** - Multiple lines without paragraph spacing
+- **Poetry/verses** - Maintain line structure without gaps
+- **Print control** - Start chapters or sections on new pages
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/line-height.mdx b/apps/docs/snippets/extensions/line-height.mdx
new file mode 100644
index 0000000000..5b6f248459
--- /dev/null
+++ b/apps/docs/snippets/extensions/line-height.mdx
@@ -0,0 +1,65 @@
+Adjust spacing between lines for better readability.
+
+Control line height for paragraphs and headings. Perfect for improving document readability and meeting formatting requirements.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Single spacing makes text compact but can be harder to read in long paragraphs.
+ Normal 1.5x spacing provides comfortable reading for most documents.
+ Double spacing is often required for academic papers and manuscripts.
+ `}
+ height="250px"
+ customButtons={[
+ [
+ {
+ label: '1.0',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setLineHeight(1)
+ }
+ },
+ {
+ label: '1.5',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setLineHeight(1.5)
+ }
+ },
+ {
+ label: '2.0',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setLineHeight(2)
+ }
+ },
+ {
+ label: '2.5',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setLineHeight(2.5)
+ }
+ },
+ {
+ label: 'Reset',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.unsetLineHeight()
+ }
+ }
+ ]
+ ]}
+/>
+
+## Use Case
+
+- **Readability** - Increase spacing for easier reading
+- **Academic requirements** - Double spacing for papers and theses
+- **Accessibility** - Better spacing helps users with dyslexia
+- **Design control** - Match brand guidelines or style requirements
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/link.mdx b/apps/docs/snippets/extensions/link.mdx
new file mode 100644
index 0000000000..1509466f43
--- /dev/null
+++ b/apps/docs/snippets/extensions/link.mdx
@@ -0,0 +1,65 @@
+Create hyperlinks with automatic formatting and Word compatibility.
+
+Links automatically get underline styling and proper color, with full export support.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Select any text to turn it into a link. For example, this is a link to an external website.You can also create links with custom display text or remove existing links.
`}
+ height="200px"
+ customButtons={[
+ [
+ {
+ label: 'Link Selection',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setLink({
+ href: 'https://www.example.com'
+ })
+ }
+ },
+ {
+ label: 'Link with Text',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setLink({
+ href: 'https://docs.example.com',
+ text: 'View Documentation'
+ })
+ }
+ },
+ {
+ label: 'Remove Link',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.unsetLink()
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+ Link text
+
+
+```
+
+## Use Case
+
+- **External links** - Connect to websites and online resources
+- **Document navigation** - Create internal anchor links
+- **Email links** - Add mailto: links for contact information
+- **References** - Link to sources and citations
+- **Non-inclusive** - Links don't expand when typing at edges, preventing accidental link extension
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/linked-styles.mdx b/apps/docs/snippets/extensions/linked-styles.mdx
new file mode 100644
index 0000000000..957f692b4b
--- /dev/null
+++ b/apps/docs/snippets/extensions/linked-styles.mdx
@@ -0,0 +1,129 @@
+Apply Word document styles to maintain consistent formatting across your document.
+
+Linked styles preserve the original Word styling system, including style inheritance and formatting rules.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+
+**Important:** Linked Styles work with Word documents. This demo simulates the visual effect.
+
+
+Select text and apply Word styles. Each style clears existing formatting and applies its complete definition.This paragraph has inline styles that will be replaced when you apply a style.
Try different styles to see how they transform the text appearance.
`}
+ height="350px"
+ customButtons={[
+ [
+ {
+ label: 'Normal',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ // Clear all formatting to simulate Normal style
+ editor.commands.clearNodes()
+ editor.commands.unsetAllMarks()
+ editor.commands.setNodeAttributes('paragraph', { styleId: 'Normal' })
+ }
+ },
+ {
+ label: 'Heading 1',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ // Simulate Heading 1 style
+ editor.commands.clearNodes()
+ editor.commands.unsetAllMarks()
+ editor.commands.setHeading({ level: 1 })
+ editor.commands.setNodeAttributes('heading', { styleId: 'Heading1' })
+ }
+ },
+ {
+ label: 'Heading 2',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ // Simulate Heading 2 style
+ editor.commands.clearNodes()
+ editor.commands.unsetAllMarks()
+ editor.commands.setHeading({ level: 2 })
+ editor.commands.setNodeAttributes('heading', { styleId: 'Heading2' })
+ }
+ }
+ ],
+ [
+ {
+ label: 'Title',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ // Simulate Title style with large text
+ editor.commands.clearNodes()
+ editor.commands.unsetAllMarks()
+ editor.commands.setHeading({ level: 1 })
+ editor.commands.updateAttributes('heading', {
+ styleId: 'Title',
+ level: 1
+ })
+ // Apply visual formatting
+ editor.chain()
+ .setMark('textStyle', { fontSize: '28pt' })
+ .run()
+ }
+ },
+ {
+ label: 'Subtitle',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ // Simulate Subtitle style
+ editor.commands.clearNodes()
+ editor.commands.unsetAllMarks()
+ editor.commands.setHeading({ level: 2 })
+ editor.commands.updateAttributes('heading', {
+ styleId: 'Subtitle',
+ level: 2
+ })
+ editor.chain()
+ .setMark('textStyle', { fontSize: '15pt', color: '#5A5A5A' })
+ .run()
+ }
+ }
+ ]
+ ]}
+/>
+
+## Real-World Usage
+
+When a Word document is loaded:
+
+```javascript
+// Styles are automatically imported from styles.xml
+const styles = editor.helpers.linkedStyles.getStyles()
+
+// Apply a style by ID
+editor.commands.setStyleById('Heading1')
+
+// Or with the style object
+const titleStyle = editor.helpers.linkedStyles.getStyleById('Title')
+editor.commands.setLinkedStyle(titleStyle)
+```
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+ Text with Heading 1 style
+
+
+```
+
+## Use Case
+
+- **Document Templates** - Maintain corporate style guides
+- **Consistency** - Uniform formatting across large documents
+- **Quick Formatting** - One-click style application
+- **Word Compatibility** - Preserves Word's style system
+- **Style Updates** - Change all instances by updating the style definition
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/list-item.mdx b/apps/docs/snippets/extensions/list-item.mdx
new file mode 100644
index 0000000000..e5e44151a1
--- /dev/null
+++ b/apps/docs/snippets/extensions/list-item.mdx
@@ -0,0 +1,131 @@
+The foundation node for both bullet and numbered lists with Word-compatible formatting.
+
+Handles numbering, indentation, styling, and keyboard navigation for professional list creation.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+
+ Basic bullet list item with standard formatting
+ Second item - press Tab to indent, Shift-Tab to outdent
+ Press Enter to create a new item, Shift-Enter for line break within item
+
+
+ Numbered lists automatically track numbering
+ Supports multiple numbering formats from Word:
+
+ Decimal numbers (1, 2, 3)
+ Letters (a, b, c) or (A, B, C)
+ Roman numerals (i, ii, iii) or (I, II, III)
+
+
+ Maintains Word numbering definitions and styles
+
+ `}
+ height="400px"
+ customButtons={[
+ [
+ {
+ label: 'Bullet List',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.toggleBulletList()
+ }
+ },
+ {
+ label: 'Numbered List',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.toggleOrderedList()
+ }
+ },
+ {
+ label: 'Indent β',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.increaseListIndent()
+ }
+ },
+ {
+ label: 'β Outdent',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.decreaseListIndent()
+ }
+ }
+ ]
+ ]}
+/>
+
+## Key Features
+
+### Custom Node View
+The list item uses a custom node view that provides:
+- **Visual numbering/bullets** - Rendered separately from content
+- **Smart indentation** - Calculates proper spacing based on Word styles
+- **Font inheritance** - Respects document and paragraph styles
+- **Marker alignment** - Handles left, right, and centered numbering
+
+### Word Compatibility Attributes
+
+The list item maintains numerous Word-specific attributes:
+- `numId` - Links to Word numbering definition
+- `level` - Tracks nesting depth (0-8)
+- `lvlText` - Format string for numbering
+- `listNumberingType` - decimal, upperRoman, lowerAlpha, etc.
+- `indent` - Precise indentation values
+- `spacing` - Line and paragraph spacing
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+
+
+ List item content
+
+
+```
+
+## Keyboard Shortcuts
+
+| Action | Shortcut | Description |
+|--------|----------|-------------|
+| New Item | `Enter` | Creates a new list item at the same level |
+| Line Break | `Shift+Enter` | Adds a line break within the current item |
+| Indent | `Tab` | Increases nesting level |
+| Outdent | `Shift+Tab` | Decreases nesting level |
+| Exit List | `Enter` twice | Creates a paragraph after the list |
+
+## Numbering Formats
+
+### Standard Formats
+- **Decimal** - 1, 2, 3, 4...
+- **Lower Alpha** - a, b, c, d...
+- **Upper Alpha** - A, B, C, D...
+- **Lower Roman** - i, ii, iii, iv...
+- **Upper Roman** - I, II, III, IV...
+
+### Custom Formats
+Word supports complex numbering like:
+- **Legal** - 1.1, 1.2, 1.2.1, 1.2.2...
+- **Outline** - I.A.1.a.i...
+- **Custom** - Chapter 1, Section A, Article i...
+
+## Use Case
+
+- **Document Structure** - Organize content hierarchically
+- **Instructions** - Step-by-step procedures
+- **Outlines** - Multi-level document planning
+- **Legal Documents** - Complex numbered sections
+- **Word Import/Export** - Perfect numbering preservation
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/mention.mdx b/apps/docs/snippets/extensions/mention.mdx
new file mode 100644
index 0000000000..bb873d3f08
--- /dev/null
+++ b/apps/docs/snippets/extensions/mention.mdx
@@ -0,0 +1,37 @@
+Add @mentions to tag people in documents.
+
+Creates inline references to users with automatic formatting and data attributes.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+You can mention team members in documents. For example, @John Smith reviewed this section and @jane.doe@example.com provided feedback.Mentions are preserved through Word import/export cycles.
`}
+ height="200px"
+ customButtons={[
+ [
+ {
+ label: 'Add Mention',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ // In real usage, this would be from a user selection UI
+ editor.commands.insertContent({
+ type: 'mention',
+ attrs: {
+ name: 'John Doe',
+ email: 'john@example.com'
+ }
+ })
+ }
+ }
+ ]
+ ]}
+/>
+
+## Use Case
+
+- **Document reviews** - Tag reviewers and approvers
+- **Collaboration** - Notify specific team members
+- **Task assignment** - Assign sections to individuals
+- **Comments** - Direct responses to specific people
+- **Audit trails** - Track who contributed what
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/node-resizer.mdx b/apps/docs/snippets/extensions/node-resizer.mdx
new file mode 100644
index 0000000000..1d8bfdc9c5
--- /dev/null
+++ b/apps/docs/snippets/extensions/node-resizer.mdx
@@ -0,0 +1,20 @@
+Resize images and other nodes with visual handles.
+
+Click to select, then drag corner handles to resize while maintaining aspect ratio.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Select an image to see resize handles:
+
+Drag the corner handles to resize. The aspect ratio is automatically maintained.
`}
+ height="400px"
+/>
+
+## Use Case
+
+- **Image sizing** - Adjust images to fit layout
+- **Maintain quality** - Aspect ratio preservation
+- **Visual feedback** - See size while dragging
+- **Precise control** - Pixel-perfect sizing
+- **Word compatibility** - Size data exports correctly
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/ordered-list.mdx b/apps/docs/snippets/extensions/ordered-list.mdx
new file mode 100644
index 0000000000..5e54ba3cec
--- /dev/null
+++ b/apps/docs/snippets/extensions/ordered-list.mdx
@@ -0,0 +1,66 @@
+Create numbered lists with automatic sequencing.
+
+Full support for nested lists, custom numbering styles, and Word list definitions.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Type "1. " to start a numbered list:
+
+ First item
+ Second item
+ Third item with nested list:
+
+ Nested item a
+ Nested item b
+
+
+ Fourth item continues numbering
+ `}
+ height="300px"
+ customButtons={[
+ [
+ {
+ label: 'Toggle List',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.toggleOrderedList()
+ }
+ },
+ {
+ label: 'Restart Numbering',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ // This would restart numbering at current position
+ editor.commands.restartListNodes([], 0)
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+
+
+ List item text
+
+
+```
+
+## Use Case
+
+- **Instructions** - Step-by-step procedures
+- **Legal documents** - Numbered clauses and sections
+- **Outlines** - Hierarchical document structure
+- **Requirements** - Enumerated specifications
+- **Nested lists** - Multi-level organization with a, b, c or i, ii, iii
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/page-number.mdx b/apps/docs/snippets/extensions/page-number.mdx
new file mode 100644
index 0000000000..d08f3acee0
--- /dev/null
+++ b/apps/docs/snippets/extensions/page-number.mdx
@@ -0,0 +1,60 @@
+Insert automatic page numbers in headers and footers.
+
+Dynamic page numbering that updates as document changes, with total page count support.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Page numbers automatically update in headers/footers:
+Page 1 of 5
+These special fields maintain formatting from surrounding text and update during pagination.
`}
+ height="200px"
+ customButtons={[
+ [
+ {
+ label: 'Insert Page Number',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ // Note: Only works in header/footer context
+ editor.commands.addAutoPageNumber()
+ }
+ },
+ {
+ label: 'Insert Total Pages',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ // Note: Only works in header/footer context
+ editor.commands.addTotalPageCount()
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+ 1
+
+
+
+
+
+
+ 10
+
+
+```
+
+## Use Case
+
+- **Professional documents** - Standard page numbering
+- **Reports** - Page X of Y format
+- **Legal documents** - Required pagination
+- **Print layouts** - Automatic page tracking
+- **Dynamic updates** - Numbers adjust as content changes
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/paragraph.mdx b/apps/docs/snippets/extensions/paragraph.mdx
new file mode 100644
index 0000000000..9cac8ac0a4
--- /dev/null
+++ b/apps/docs/snippets/extensions/paragraph.mdx
@@ -0,0 +1,38 @@
+The foundation of document structure.
+
+Paragraphs support extensive styling including spacing, indentation, borders, and Word styles.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+This paragraph has custom indentation and spacing. It demonstrates how paragraph-level formatting is preserved through Word import/export.
+Centered paragraph with bottom border
+Justified text fills the entire width of the line by adjusting word spacing. This creates clean edges on both left and right sides of the paragraph.
`}
+ height="250px"
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+
+
+
+
+ Paragraph content
+
+
+```
+
+## Use Case
+
+- **Document structure** - Basic building blocks of content
+- **Formatting control** - Spacing, alignment, indentation
+- **Style application** - Heading styles, body text styles
+- **Borders & shading** - Visual separation and emphasis
+- **Keep with next** - Control page breaks between paragraphs
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/placeholder.mdx b/apps/docs/snippets/extensions/placeholder.mdx
new file mode 100644
index 0000000000..3d1b529b03
--- /dev/null
+++ b/apps/docs/snippets/extensions/placeholder.mdx
@@ -0,0 +1,18 @@
+Show helpful placeholder text in empty editors.
+
+Guides users with customizable prompts when the document is empty.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+`}
+ height="150px"
+/>
+
+## Use Case
+
+- **User guidance** - Prompt what content to add
+- **Form fields** - Indicate expected input
+- **Templates** - Show where to fill in content
+- **Empty states** - Better UX than blank editor
+- **Custom messages** - Context-specific instructions
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/popover-plugin.mdx b/apps/docs/snippets/extensions/popover-plugin.mdx
new file mode 100644
index 0000000000..978f43d6c2
--- /dev/null
+++ b/apps/docs/snippets/extensions/popover-plugin.mdx
@@ -0,0 +1,20 @@
+Contextual popovers for mentions and suggestions.
+
+Shows floating UI for @mentions and other interactive features.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Type "@" to trigger the mention popover.
+The popover shows available users and filters as you type.
+Select with arrow keys or mouse click.
`}
+ height="200px"
+/>
+
+## Use Case
+
+- **User mentions** - Select from user list
+- **Autocomplete** - Smart suggestions as you type
+- **Emoji picker** - Insert emojis from panel
+- **Command palette** - Quick action selection
+- **Contextual help** - Show relevant options
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/run-item.mdx b/apps/docs/snippets/extensions/run-item.mdx
new file mode 100644
index 0000000000..baf99426be
--- /dev/null
+++ b/apps/docs/snippets/extensions/run-item.mdx
@@ -0,0 +1,28 @@
+Low-level text run container.
+
+Internal node for managing text runs with consistent formatting.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Run items are internal nodes that group text with the same formatting. They're created automatically when importing Word documents.`}
+ height="150px"
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+ Text content
+
+```
+
+## Use Case
+
+- **Word import** - Preserve exact run structure
+- **Format boundaries** - Maintain formatting breaks
+- **Internal structure** - Framework implementation detail
+- **OOXML fidelity** - Match Word's internal model
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/search.mdx b/apps/docs/snippets/extensions/search.mdx
new file mode 100644
index 0000000000..91854ae9cf
--- /dev/null
+++ b/apps/docs/snippets/extensions/search.mdx
@@ -0,0 +1,56 @@
+Search for text/pattern in SuperEditor content.
+
+Select text and apply different sizes. Supports pt, px, em, and rem units with automatic min/max clamping.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+The editor is where your ideas take shape.
+ You can type freely, format your text, and structure content the way you need.
+ But once the document grows larger, it becomes harder to find what you are looking for.
+ That is where the search feature helps.
+
+ With search, you can jump directly to a word or phrase without scrolling line by line.
+ Imagine you are reviewing a long draft and want to find every place the word "editor" appears.
+ Instead of scanning manually, the search function highlights each match.
+ From there, you can quickly navigate through results or replace the text with a new term.
+
+ This makes editing faster and more reliable.
+ Writers use search to replace names across a story.
+ Developers use search to verify that a technical term is consistent.
+ All of these tasks become easier when the editor supports search and replace.
+ `}
+ maxHeight="300px"
+ customButtons={[
+ [
+ {
+ label: 'Search',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.search('search');
+ }
+ },
+ {
+ label: 'Go to match',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ const result = editor.commands.search('search');
+ editor.commands.goToSearchResult(result[5]);
+ }
+ }
+ ]
+ ]}
+/>
+
+
+## Use Case
+
+- Find and replace: quickly locate words or phrases and replace them.
+- Content navigation: jump to the next or previous match without scrolling manually.
+- Highlighting: visually emphasize search results for the user.
+- Custom workflows: integrate search into toolbars, command palettes, or keyboard shortcuts.
diff --git a/apps/docs/snippets/extensions/shape-container.mdx b/apps/docs/snippets/extensions/shape-container.mdx
new file mode 100644
index 0000000000..b93152fe86
--- /dev/null
+++ b/apps/docs/snippets/extensions/shape-container.mdx
@@ -0,0 +1,40 @@
+Container for Word shapes and drawing objects.
+
+Preserves shape formatting and positioning from Word documents.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+
+ This container preserves Word shape properties including:
+
+ Background colors and gradients
+ Borders and effects
+ Positioning and wrapping
+
+`}
+ height="250px"
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+
+
+
+```
+
+## Use Case
+
+- **Callout boxes** - Highlight important information
+- **Diagrams** - Preserve complex Word drawings
+- **Text boxes** - Floating or anchored content
+- **Decorative elements** - Shapes and backgrounds
+- **Layout control** - Position content precisely
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/shape-textbox.mdx b/apps/docs/snippets/extensions/shape-textbox.mdx
new file mode 100644
index 0000000000..eccdfef670
--- /dev/null
+++ b/apps/docs/snippets/extensions/shape-textbox.mdx
@@ -0,0 +1,33 @@
+Text boxes from Word documents.
+
+Maintains Word text box content and formatting through import/export.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+
+ Important Note:
+ This text box preserves its content and styling when exported to Word.
+`}
+ height="200px"
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+ Text box content
+
+
+
+```
+
+## Use Case
+
+- **Sidebars** - Additional information alongside main text
+- **Callouts** - Highlight key points
+- **Forms** - Fixed-position form fields
+- **Annotations** - Comments or notes
+- **Layout elements** - Complex page designs
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/slash-menu.mdx b/apps/docs/snippets/extensions/slash-menu.mdx
new file mode 100644
index 0000000000..cba30cc77d
--- /dev/null
+++ b/apps/docs/snippets/extensions/slash-menu.mdx
@@ -0,0 +1,20 @@
+Quick command access with the / key.
+
+Type "/" in an empty paragraph to trigger a contextual menu for inserting elements.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Type "/" at the start of any paragraph to see available commands.
+The menu appears contextually and can be navigated with keyboard or mouse.
+Press Escape or arrow keys to dismiss the menu.
`}
+ height="200px"
+/>
+
+## Use Case
+
+- **Quick inserts** - Fast access to blocks and formatting
+- **Discoverability** - Users learn available features
+- **Keyboard-first** - No need to use toolbar
+- **Contextual** - Shows relevant options based on position
+- **Productivity** - Speeds up document creation
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/strike.mdx b/apps/docs/snippets/extensions/strike.mdx
new file mode 100644
index 0000000000..795dc60140
--- /dev/null
+++ b/apps/docs/snippets/extensions/strike.mdx
@@ -0,0 +1,60 @@
+Show deletions and changes with strikethrough text.
+
+Visual indication of removed content while maintaining readability.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+ Original price: $99.99 Now only $49.99! Tasks: Write documentation β Review code β Deploy to production`}
+ height="250px"
+ customButtons={[
+ [
+ {
+ label: 'Toggle Strike',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.toggleStrike()
+ }
+ },
+ {
+ label: 'Set Strike',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.setStrike()
+ }
+ },
+ {
+ label: 'Unset Strike',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.unsetStrike()
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+ Struck through text
+
+```
+
+## Use Case
+
+- **Price changes** - Show original vs sale price
+- **Task lists** - Mark completed items
+- **Legal documents** - Show deleted clauses
+- **Editing** - Track changes visually
+- **Humor** - ~~Bad ideas~~ Good ideas
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/structured-content.mdx b/apps/docs/snippets/extensions/structured-content.mdx
new file mode 100644
index 0000000000..8f7ea93ab6
--- /dev/null
+++ b/apps/docs/snippets/extensions/structured-content.mdx
@@ -0,0 +1,116 @@
+Native Word SDT (w:sdt) fields for documents. Supports inline and block structured content tags for dynamic templates with full Word compatibility.
+
+## Use Case
+
+- Form templates - Create fillable documents with inline text fields and block content areas
+- Contract generation - Dynamic clauses and terms that map to Word content controls
+- Document automation - Programmatically update specific sections while preserving structure
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+"People will forget what you said, people will forget what you did, but
+people will never forget how you made them feel." Maya Angelou `}
+ height="300px"
+ customButtons={[
+ [
+ {
+ label: 'Insert inline field',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.insertStructuredContentInline({
+ attrs: {
+ id: '1',
+ alias: 'Customer Name',
+ },
+ text: 'Enter your name',
+ });
+ }
+ },
+ {
+ label: 'Insert block field',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.insertStructuredContentBlock({
+ attrs: {
+ id: '2',
+ alias: 'Terms & Conditions',
+ },
+ json: { type: 'paragraph', content: [{ type: 'text', text: 'Legal content...' }] }
+ });
+ },
+ },
+ {
+ label: 'Update inline field',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.updateStructuredContentById('1', { text: 'Jane Doe' });
+ }
+ },
+ {
+ label: 'Update block field',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.updateStructuredContentById('2', {
+ json: { type: 'paragraph', content: [{ type: 'text', text: 'Updated legal content...' }] }
+ });
+ }
+ },
+ {
+ label: 'Delete all fields',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ const fields = editor.helpers.structuredContentCommands.getStructuredContentTags(editor.state);
+ editor.commands.deleteStructuredContent(fields);
+ }
+ },
+ ]
+ ]}
+/>
+
+## Quick Start
+
+```javascript
+// Insert inline field for customer name
+editor.commands.insertStructuredContentInline({
+ attrs: {
+ id: '1',
+ alias: 'Customer Name'
+ },
+ text: 'John Doe'
+});
+
+// Insert block field for terms section
+editor.commands.insertStructuredContentBlock({
+ attrs: {
+ id: '2',
+ alias: 'Terms & Conditions'
+ },
+ html: 'Please review the terms...
'
+});
+
+// Update inline field content
+editor.commands.updateStructuredContentById('1', {
+ text: 'Jane Smith'
+});
+
+// Update block field content and attributes
+editor.commands.updateStructuredContentById('2', {
+ html: 'Updated terms and conditions...
',
+ attrs: { alias: 'Legal Terms' }
+});
+
+// Get all structured content tags
+const allTags = editor.helpers.structuredContentCommands.getStructuredContentTags(editor.state);
+console.log(`Document contains ${allTags.length} SDT fields`);
+```
diff --git a/apps/docs/snippets/extensions/tab.mdx b/apps/docs/snippets/extensions/tab.mdx
new file mode 100644
index 0000000000..4e1b895176
--- /dev/null
+++ b/apps/docs/snippets/extensions/tab.mdx
@@ -0,0 +1,43 @@
+Insert and control tab stops in documents.
+
+Advanced tab support including leaders, decimal alignment, and custom positions.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Name Position Department
+John Doe Manager Sales
+Jane Smith Developer Engineering
+ Tabs provide precise alignment without using tables.
`}
+ height="250px"
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+
+
+ Text
+
+
+
+
+
+ After tab
+
+
+```
+
+## Use Case
+
+- **Lists without bullets** - Align text in columns
+- **Forms** - Create fill-in areas with dot leaders
+- **Tables of contents** - Page numbers with dot leaders
+- **Financial documents** - Decimal-aligned numbers
+- **Headers/footers** - Left, center, right alignment
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/table-cell.mdx b/apps/docs/snippets/extensions/table-cell.mdx
new file mode 100644
index 0000000000..7dc0dcb071
--- /dev/null
+++ b/apps/docs/snippets/extensions/table-cell.mdx
@@ -0,0 +1,25 @@
+Cell node for table content. Supports formatting, spans, and borders.
+
+Created automatically by table commands - see [Table extension](/extensions/table).
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Header text
+
+
+
+```
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/table-header.mdx b/apps/docs/snippets/extensions/table-header.mdx
new file mode 100644
index 0000000000..2f2a5d0a7a
--- /dev/null
+++ b/apps/docs/snippets/extensions/table-header.mdx
@@ -0,0 +1,26 @@
+Semantic header cell with built-in styling.
+
+Created via `insertTable({ withHeaderRow: true })` or toggle commands. See [Table extension](/extensions/table).
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Header text
+
+
+
+```
+
diff --git a/apps/docs/snippets/extensions/table-row.mdx b/apps/docs/snippets/extensions/table-row.mdx
new file mode 100644
index 0000000000..221045bde2
--- /dev/null
+++ b/apps/docs/snippets/extensions/table-row.mdx
@@ -0,0 +1,17 @@
+Container for cells and headers.
+
+Managed via Table commands. See [Table extension](/extensions/table).
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+ ...
+ ...
+
+```
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/table.mdx b/apps/docs/snippets/extensions/table.mdx
new file mode 100644
index 0000000000..9a18797669
--- /dev/null
+++ b/apps/docs/snippets/extensions/table.mdx
@@ -0,0 +1,120 @@
+Create structured data with full Word table compatibility.
+
+Professional tables with merge/split capabilities, preserving all formatting through Word import/export.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+
+
+ Product
+ Q1
+ Q2
+ Total
+
+
+ Revenue
+ $45,000
+ $52,000
+ $97,000
+
+
+ Costs
+ $30,000
+ $28,000
+ $58,000
+
+
`}
+ height="350px"
+ customButtons={[
+ [
+ {
+ label: 'Insert 3x3',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.insertTable({ rows: 3, cols: 3, withHeaderRow: true })
+ }
+ },
+ {
+ label: 'Add Row',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.addRowAfter()
+ }
+ },
+ {
+ label: 'Add Column',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.addColumnAfter()
+ }
+ },
+ {
+ label: 'Merge Cells',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.mergeCells()
+ }
+ },
+ {
+ label: 'Split Cell',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.splitCell()
+ }
+ },
+ {
+ label: 'Color Cell',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.setCellBackground('#E3F2FD')
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cell content
+
+
+
+```
+
+## Use Case
+
+- **Financial reports** - Quarterly data with totals
+- **Comparison matrices** - Feature/pricing tables
+- **Schedules** - Time-based planning with merged headers
+- **Data organization** - Structured content that needs alignment
+- **Complex layouts** - Merged cells for sophisticated designs
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/text-align.mdx b/apps/docs/snippets/extensions/text-align.mdx
new file mode 100644
index 0000000000..ca3aaca094
--- /dev/null
+++ b/apps/docs/snippets/extensions/text-align.mdx
@@ -0,0 +1,75 @@
+Control paragraph and heading alignment for professional document layouts.
+
+Perfect Word import/export compatibility for all alignment options.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+This is a regular paragraph. Select it and use the alignment buttons above to change how it aligns.Here's another paragraph to test alignment. Try centering this one!
Justified text spreads evenly between both margins, creating clean edges on both sides of the paragraph. This creates a formal, professional appearance commonly used in books and official documents.
Right-aligned text can be useful for signatures, dates, or special formatting needs in your documents.
`}
+ height="300px"
+ customButtons={[
+ [
+ {
+ label: 'β¬
Left',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setTextAlign('left')
+ }
+ },
+ {
+ label: 'β Center',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setTextAlign('center')
+ }
+ },
+ {
+ label: 'β‘ Right',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setTextAlign('right')
+ }
+ },
+ {
+ label: 'β¬ Justify',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setTextAlign('justify')
+ }
+ },
+ {
+ label: 'Reset',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.unsetTextAlign()
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+ Centered text
+
+
+```
+
+## Use Case
+
+- **Titles & Headings** - Center important headings for emphasis
+- **Quotes** - Right-align attributions or center block quotes
+- **Formal Documents** - Justify body text for professional appearance
+- **Letters** - Right-align dates and signatures
+- **Poetry** - Center verses for artistic presentation
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/text-indent.mdx b/apps/docs/snippets/extensions/text-indent.mdx
new file mode 100644
index 0000000000..b85a56ad17
--- /dev/null
+++ b/apps/docs/snippets/extensions/text-indent.mdx
@@ -0,0 +1,76 @@
+Add professional first-line indentation to paragraphs.
+
+Essential for academic papers, books, and formal documents with perfect Word compatibility.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+This paragraph has no indentation. It starts flush with the left margin like most modern web content.This paragraph has a half-inch first-line indent. This is the standard for most printed books and academic papers, making it easy to identify where new paragraphs begin.
This paragraph has a full inch indent. Larger indents can be used for special formatting like block quotes or nested content structures.
This paragraph uses a quarter-inch indent. Smaller indents work well for documents with narrow columns or when space is at a premium.
`}
+ height="350px"
+ customButtons={[
+ [
+ {
+ label: 'β Increase',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.increaseTextIndent()
+ }
+ },
+ {
+ label: 'β Decrease',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.decreaseTextIndent()
+ }
+ },
+ {
+ label: 'Set 0.5"',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setTextIndent('0.5in')
+ }
+ },
+ {
+ label: 'Set 1cm',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setTextIndent('1cm')
+ }
+ },
+ {
+ label: 'Remove',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.unsetTextIndent()
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+ Indented paragraph text
+
+
+```
+
+## Use Case
+
+- **Academic Papers** - MLA/APA format requires 0.5" first-line indents
+- **Books & Novels** - Standard typography for fiction and non-fiction
+- **Business Letters** - Professional correspondence formatting
+- **Block Quotes** - Distinguish quoted material with deeper indents
+- **Outlines** - Create visual hierarchy with progressive indentation
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/text-style.mdx b/apps/docs/snippets/extensions/text-style.mdx
new file mode 100644
index 0000000000..a70e39abcb
--- /dev/null
+++ b/apps/docs/snippets/extensions/text-style.mdx
@@ -0,0 +1,78 @@
+Foundation mark for applying multiple text formatting attributes.
+
+Enables combining font, color, and other text properties while maintaining Word compatibility.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Select text and apply multiple styles at once. The text style mark is the foundation that enables all text formatting.Try combining different styles on this text to see how they work together.
Text style ensures clean markup by managing all formatting attributes in a single span element.
`}
+ height="300px"
+ customButtons={[
+ [
+ {
+ label: 'Red + Large',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setMark('textStyle', { color: '#dc2626', fontSize: '18pt' })
+ }
+ },
+ {
+ label: 'Blue + Mono',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setMark('textStyle', { color: '#2563eb', fontFamily: 'monospace' })
+ }
+ },
+ {
+ label: 'Green + Small',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setMark('textStyle', { color: '#16a34a', fontSize: '10pt' })
+ }
+ }
+ ],
+ [
+ {
+ label: 'Custom Style ID',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setMark('textStyle', { styleId: 'Heading1Char' })
+ }
+ },
+ {
+ label: 'Clear Styles',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.unsetMark('textStyle')
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+
+
+ Styled text
+
+```
+
+## Use Case
+
+- **Style Foundation** - Base layer for combining multiple text properties
+- **Clean Markup** - Prevents empty span elements in your HTML
+- **Style References** - Apply predefined Word styles via styleId
+- **Extension Bridge** - Enables font, color, and size extensions to work together
+- **Word Compatibility** - Maps directly to Word's character styles
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/text-transform.mdx b/apps/docs/snippets/extensions/text-transform.mdx
new file mode 100644
index 0000000000..f9fe5716a3
--- /dev/null
+++ b/apps/docs/snippets/extensions/text-transform.mdx
@@ -0,0 +1,66 @@
+Apply uppercase, lowercase, or capitalization without changing the source text.
+
+Preserves original text while controlling display formatting through Word-compatible styles.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Select text and apply transformations. All CSS transforms work in the editor, but only UPPERCASE exports to Word.this text can be transformed to any case.
John Smith And Other Proper Names.
`}
+ height="250px"
+ customButtons={[
+ [
+ {
+ label: 'UPPERCASE',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setMark('textStyle', { textTransform: 'uppercase' })
+ }
+ },
+ {
+ label: 'lowercase',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setMark('textStyle', { textTransform: 'lowercase' })
+ }
+ },
+ {
+ label: 'Capitalize',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setMark('textStyle', { textTransform: 'capitalize' })
+ }
+ },
+ {
+ label: 'None',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+ editor.commands.setMark('textStyle', { textTransform: 'none' })
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+
+ Text with transform
+
+```
+
+## Use Case
+
+- **Headings** - Consistent uppercase styling without CAPS LOCK
+- **Acronyms** - Ensure abbreviations display correctly
+- **Legal Documents** - Emphasize key terms in uppercase
+- **Design Consistency** - Control display without editing source
+- **Dynamic Content** - Apply consistent casing to user-generated text
\ No newline at end of file
diff --git a/apps/docs/snippets/extensions/underline.mdx b/apps/docs/snippets/extensions/underline.mdx
new file mode 100644
index 0000000000..6cbef7d52b
--- /dev/null
+++ b/apps/docs/snippets/extensions/underline.mdx
@@ -0,0 +1,60 @@
+Draw attention with underlined text.
+
+Traditional emphasis technique, automatically applied to links.
+
+import { SuperDocEditor } from '/snippets/components/superdoc-editor.jsx'
+
+Important: Underlines traditionally indicate hyperlinks on the web. In documents, use underlines to emphasize key points or indicate blank fields .`}
+ height="250px"
+ customButtons={[
+ [
+ {
+ label: 'Toggle Underline',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.toggleUnderline()
+ }
+ },
+ {
+ label: 'Set Underline',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.setUnderline()
+ }
+ },
+ {
+ label: 'Unset Underline',
+ onClick: (superdoc) => {
+ const editor = superdoc?.activeEditor || superdoc?.editor
+ if (!editor?.commands) return
+
+ editor.commands.unsetUnderline()
+ }
+ }
+ ]
+ ]}
+/>
+
+## OOXML Structure
+
+```xml
+
+
+
+
+ Underlined text
+
+```
+
+## Use Case
+
+- **Legal documents** - Emphasize terms and conditions
+- **Forms** - Indicate fill-in areas: _____________
+- **Headings** - Alternative to bold
+- **Links** - Automatic with hyperlinks
+- **Emphasis** - Triple emphasis with bold + italic + underline
\ No newline at end of file
diff --git a/apps/docs/solutions/esign/api-reference.mdx b/apps/docs/solutions/esign/api-reference.mdx
new file mode 100644
index 0000000000..15002fad55
--- /dev/null
+++ b/apps/docs/solutions/esign/api-reference.mdx
@@ -0,0 +1,304 @@
+---
+title: API Reference
+---
+
+Complete eSign component API
+
+## Component Props
+
+### Required Props
+
+
+ Unique identifier for this signing session
+
+
+
+ Document configuration
+
+
+
+ Document to display
+
+
+
+ Display mode: `'full'`
+
+
+
+ Require scrolling to bottom before signing
+
+
+
+
+
+ Called when document is signed
+
+ ```typescript
+ (data: SubmitData) => void | Promise
+ ```
+
+
+### Optional Props
+
+
+ Field configuration
+
+
+
+ Values to inject into document
+
+
+
+ Interactive fields for user to complete
+
+
+
+
+
+ Download button configuration
+
+
+
+ Filename for download
+
+
+
+ Button text
+
+
+
+ Custom button component
+
+
+
+
+
+ Submit button configuration
+
+
+
+ Button text
+
+
+
+ Custom button component
+
+
+
+
+
+ Handle download action
+
+ ```typescript
+ (data: DownloadData) => void | Promise
+ ```
+
+
+
+ Monitor state changes
+
+ ```typescript
+ (state: SigningState) => void
+ ```
+
+
+
+ Track field changes
+
+ ```typescript
+ (field: FieldChange) => void
+ ```
+
+
+
+ Called when document fields are found
+
+ ```typescript
+ (fields: FieldInfo[]) => void
+ ```
+
+
+
+ Disable all interactions
+
+
+
+ CSS class for container
+
+
+
+ Inline styles for container
+
+
+
+ Height of document viewer (default: `'600px'`)
+
+
+## Types
+
+### SubmitData
+
+Data passed to `onSubmit`:
+
+```typescript
+interface SubmitData {
+ eventId: string; // Your session ID
+ timestamp: string; // ISO timestamp
+ duration: number; // Time spent in ms
+ auditTrail: AuditEvent[]; // All events
+ documentFields: DocumentField[]; // Injected values
+ signerFields: SignerFieldValue[]; // User inputs
+ isFullyCompleted: boolean; // All requirements met
+}
+```
+
+### DownloadData
+
+Data passed to `onDownload`:
+
+```typescript
+interface DownloadData {
+ eventId: string; // Your session ID
+ documentSource: string | File | Blob; // Original .docx file
+ fileName: string; // Suggested filename
+}
+```
+
+### DocumentField
+
+Values injected into document:
+
+```typescript
+interface DocumentField {
+ id: string; // Unique field ID
+ value: FieldValue; // The value
+}
+```
+
+### SignerField
+
+Interactive field definition:
+
+```typescript
+interface SignerField {
+ id: string; // Required unique ID
+ type: 'signature' | 'checkbox' | 'text';
+ label?: string; // Display label
+ validation?: {
+ required?: boolean;
+ };
+ component?: React.ComponentType;
+}
+```
+
+### SigningState
+
+Current state passed to `onStateChange`:
+
+```typescript
+interface SigningState {
+ scrolled: boolean; // Has scrolled
+ fields: Map; // Current values
+ isValid: boolean; // Can submit
+ isSubmitting: boolean; // Currently submitting
+}
+```
+
+### AuditEvent
+
+Timestamped interaction log:
+
+```typescript
+interface AuditEvent {
+ timestamp: string;
+ type: 'ready' | 'scroll' | 'field_change' | 'submit';
+ data?: Record;
+}
+```
+
+## Ref Methods
+
+Access via ref:
+
+```jsx
+const ref = useRef();
+
+// Get current state
+const state = ref.current.getState();
+
+// Get audit trail
+const audit = ref.current.getAuditTrail();
+
+// Reset everything
+ref.current.reset();
+
+return
+```
+
+### Available methods
+
+- `getState()` - Returns current SigningState
+- `getAuditTrail()` - Returns audit events array
+- `reset()` - Clear all state and start over
+
+## Field Components
+
+### Default Components
+
+The component provides default implementations for all field types. You can import and extend them:
+
+```jsx
+import { SignatureInput, CheckboxInput } from '@superdoc-dev/esign';
+
+// Use directly
+
+```
+
+### Custom Component Props
+
+All custom field components receive:
+
+```typescript
+interface FieldComponentProps {
+ value: FieldValue; // Current value
+ onChange: (value: FieldValue) => void;
+ isDisabled: boolean; // Disabled state
+ isValid?: boolean; // Validation state
+ label?: string; // Field label
+ error?: string; // Error message
+}
+```
+
+## CSS Classes
+
+Target these classes for styling:
+
+- `.superdoc-esign-container` - Main wrapper
+- `.superdoc-esign-document` - Document viewer area
+- `.superdoc-esign-controls` - Controls section
+- `.superdoc-esign-fields` - Field container
+- `.superdoc-esign-actions` - Button container
+- `.superdoc-esign-btn` - Default buttons
+
+## Import Types
+
+All types are exported:
+
+```typescript
+import type {
+ SuperDocESignProps,
+ SubmitData,
+ DownloadData,
+ SigningState,
+ DocumentField,
+ SignerField,
+ FieldChange,
+ AuditEvent,
+ FieldComponentProps
+} from '@superdoc-dev/esign';
+```
\ No newline at end of file
diff --git a/apps/docs/solutions/esign/backend.mdx b/apps/docs/solutions/esign/backend.mdx
new file mode 100644
index 0000000000..8d19adbc08
--- /dev/null
+++ b/apps/docs/solutions/esign/backend.mdx
@@ -0,0 +1,254 @@
+---
+title: Backend Implementation
+sidebarTitle: Backend
+---
+
+After the user signs, your backend creates the final PDF using the SuperDoc API.
+
+## Flow
+
+```
+Frontend sends β Backend processes β PDF created
+ β β β
+Signing data 1. Annotate fields Stored
+ 2. Apply signature
+```
+
+## Complete Example
+
+
+
+```javascript Node.js
+const express = require('express');
+const multer = require('multer');
+const upload = multer();
+
+app.post('/api/sign', upload.single('document'), async (req, res) => {
+ try {
+ const { eventId, auditTrail, documentFields, signerFields } = req.body;
+ const document = req.file.buffer.toString('base64');
+
+ // 1. Fill document fields
+ const annotated = await fetch('https://api.superdoc.dev/v1/annotate', {
+ method: 'POST',
+ headers: {
+ 'Authorization': `Bearer ${process.env.SUPERDOC_API_KEY}`,
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({
+ document,
+ fields: [...documentFields, ...signerFields]
+ })
+ });
+
+ if (!annotated.ok) throw new Error('Annotation failed');
+
+ // 2. Apply digital signature
+ const annotatedBlob = await annotated.blob();
+ const signed = await fetch('https://api.superdoc.dev/v1/sign', {
+ method: 'POST',
+ headers: {
+ 'Authorization': `Bearer ${process.env.SUPERDOC_API_KEY}`,
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({
+ document: Buffer.from(await annotatedBlob.arrayBuffer()).toString('base64'),
+ auditTrail
+ })
+ });
+
+ if (!signed.ok) throw new Error('Signing failed');
+
+ // 3. Save signed PDF
+ const signedPdf = await signed.blob();
+ await saveToS3(signedPdf, `signed/${eventId}.pdf`);
+
+ // 4. Log for compliance
+ await db.signatures.create({
+ eventId,
+ signerName: signerFields.find(f => f.id === 'signature')?.value,
+ signedAt: new Date(),
+ auditTrail: JSON.stringify(auditTrail)
+ });
+
+ res.json({ success: true, documentId: eventId });
+
+ } catch (error) {
+ console.error('Signing failed:', error);
+ res.status(500).json({ error: 'Failed to sign document' });
+ }
+});
+```
+
+```python Python
+from flask import Flask, request, jsonify
+import requests
+import base64
+import boto3
+
+app = Flask(__name__)
+s3 = boto3.client('s3')
+
+@app.route('/api/sign', methods=['POST'])
+def sign():
+ try:
+ # Get file and data
+ document_file = request.files['document']
+ document = base64.b64encode(document_file.read()).decode()
+ data = request.json
+
+ # 1. Fill document fields
+ annotated = requests.post(
+ 'https://api.superdoc.dev/v1/annotate',
+ headers={'Authorization': f'Bearer {API_KEY}'},
+ json={
+ 'document': document,
+ 'fields': data['documentFields'] + data['signerFields']
+ }
+ )
+
+ if annotated.status_code != 200:
+ raise Exception('Annotation failed')
+
+ # 2. Apply digital signature
+ signed = requests.post(
+ 'https://api.superdoc.dev/v1/sign',
+ headers={'Authorization': f'Bearer {API_KEY}'},
+ json={
+ 'document': base64.b64encode(annotated.content).decode(),
+ 'auditTrail': data['auditTrail']
+ }
+ )
+
+ if signed.status_code != 200:
+ raise Exception('Signing failed')
+
+ # 3. Save signed PDF
+ s3.put_object(
+ Bucket='signed-documents',
+ Key=f"signed/{data['eventId']}.pdf",
+ Body=signed.content
+ )
+
+ # 4. Log for compliance
+ db.signatures.insert({
+ 'event_id': data['eventId'],
+ 'signer_name': next((f['value'] for f in data['signerFields']
+ if f['id'] == 'signature'), None),
+ 'signed_at': datetime.now(),
+ 'audit_trail': json.dumps(data['auditTrail'])
+ })
+
+ return jsonify({'success': True, 'documentId': data['eventId']})
+
+ except Exception as e:
+ print(f'Signing failed: {e}')
+ return jsonify({'error': 'Failed to sign document'}), 500
+```
+
+
+
+## Download/PDF Generation
+
+Handle download requests to generate PDFs on-demand:
+
+
+
+```javascript Node.js
+app.post('/api/generate-pdf', async (req, res) => {
+ const { documentSource, fileName } = req.body;
+
+ // If documentSource is URL, fetch it
+ let document;
+ if (typeof documentSource === 'string' && documentSource.startsWith('http')) {
+ const docResponse = await fetch(documentSource);
+ document = Buffer.from(await docResponse.arrayBuffer()).toString('base64');
+ } else {
+ document = documentSource; // Already base64 or will be handled
+ }
+
+ // 1. Convert to PDF
+ const result = await fetch('https://api.superdoc.dev/v1/convert?from=docx&to=pdf', {
+ method: 'POST',
+ headers: {
+ 'Authorization': `Bearer ${process.env.SUPERDOC_API_KEY}`,
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({
+ document,
+ })
+ });
+
+ if (!result.ok) throw new Error('PDF generation failed');
+
+ // Send PDF back to frontend
+ const pdf = await result.blob();
+ res.type('application/pdf');
+ res.send(Buffer.from(await pdf.arrayBuffer()));
+});
+```
+
+```python Python
+@app.route('/api/generate-pdf', methods=['POST'])
+def generate_pdf():
+ data = request.json
+
+ # Handle document source (URL or base64)
+ if data['documentSource'].startswith('http'):
+ doc_response = requests.get(data['documentSource'])
+ document = base64.b64encode(doc_response.content).decode()
+ else:
+ document = data['documentSource']
+
+ # Fill fields and convert to PDF
+ result = requests.post(
+ 'https://api.superdoc.dev/v1/convert?from=docx&to=pdf',
+ headers={'Authorization': f'Bearer {API_KEY}'},
+ json={
+ 'document': document
+ }
+ )
+
+ if result.status_code != 200:
+ raise Exception('PDF generation failed')
+
+ # Return PDF
+ return result.content, 200, {'Content-Type': 'application/pdf'}
+```
+
+
+
+## Data Structure
+
+The frontend sends this data to your backend:
+
+```json
+{
+ "eventId": "session-123",
+ "document": "...", // If uploading file
+ "documentFields": [
+ { "id": "employee_name", "value": "Jane Smith" }
+ ],
+ "signerFields": [
+ { "id": "signature", "value": "Jane Smith" },
+ { "id": "accept_terms", "value": true }
+ ],
+ "auditTrail": [
+ { "type": "ready", "timestamp": "2024-01-15T10:30:00Z" },
+ { "type": "scroll", "timestamp": "2024-01-15T10:30:15Z",
+ "data": { "percent": 100 } },
+ { "type": "field_change", "timestamp": "2024-01-15T10:30:30Z",
+ "data": { "fieldId": "signature", "value": "Jane Smith" } },
+ { "type": "submit", "timestamp": "2024-01-15T10:30:45Z" }
+ ],
+ "timestamp": "2024-01-15T10:30:45Z",
+ "duration": 45000,
+ "isFullyCompleted": true
+}
+```
+
+## API Reference
+
+- [Authentication](/api-reference/authentication) - Get your API key
+- [Annotate endpoint](/api-reference/documents/annotate) - Fill fields
+- [Sign endpoint](/api-reference/signature/sign) - Apply signature
\ No newline at end of file
diff --git a/apps/docs/solutions/esign/configuration.mdx b/apps/docs/solutions/esign/configuration.mdx
new file mode 100644
index 0000000000..820a4918ad
--- /dev/null
+++ b/apps/docs/solutions/esign/configuration.mdx
@@ -0,0 +1,349 @@
+---
+title: Configuration
+---
+
+All eSign options and customization
+
+## Document options
+
+Control how the document is displayed and what's required:
+
+```jsx
+document={{
+ // Required - the document to display
+ source: File | Blob | string,
+
+ // Display mode
+ mode: 'full', // Default: full editor
+
+ // Layout mode (for mobile/accessibility)
+ layoutMode: 'responsive', // 'paginated' (default) or 'responsive'
+ layoutMargins: { top: 10, bottom: 10, left: 10, right: 10 },
+
+ // Requirements
+ validation: {
+ scroll: { required: true } // Must scroll to bottom
+ }
+}}
+```
+
+### Layout modes
+
+Control how the document is displayed:
+
+- **`paginated`** (default) - Fixed page width with page breaks
+- **`responsive`** - 100% width, text reflows to fit container
+
+Use `responsive` for mobile devices or WCAG AA accessibility compliance. Optional `layoutMargins` sets custom margins (in pixels) for responsive mode.
+
+## Field system
+
+Fields use a unique `id` system for identifying and updating content:
+
+- **`id`** - Unique identifier for the field
+
+### Document fields (injected values)
+
+```jsx
+fields={{
+ document: [
+ { id: 'field_customer_name', value: 'Jane Smith' },
+ { id: 'field_contract_date', value: '2024-01-15' },
+ { id: 'field_amount', value: '$50,000' }
+ ]
+}}
+```
+
+These update fields with matching IDs in your document.
+
+### Signer fields (interactive)
+
+```jsx
+fields={{
+ signer: [
+ {
+ id: 'sig1',
+ type: 'signature',
+ label: 'Your Signature',
+ validation: { required: true }
+ },
+ {
+ id: 'accept_terms',
+ type: 'checkbox',
+ label: 'I accept the terms',
+ validation: { required: true }
+ },
+ {
+ id: 'newsletter',
+ type: 'checkbox',
+ label: 'Send me updates',
+ validation: { required: false }
+ }
+ ]
+}}
+```
+
+Field types:
+
+- `signature` - Text input or canvas (detects automatically)
+- `checkbox` - Checkbox field
+- `text` - Text input field
+
+## Custom components
+
+Three levels of customization:
+
+### Level 1: Use defaults
+
+```jsx
+
+```
+
+### Level 2: Customize labels
+
+```jsx
+submit={{ label: "I Agree" }}
+download={{ label: "Save Copy", fileName: "agreement.pdf" }}
+```
+
+### Level 3: Custom components
+
+```jsx
+// Custom submit button
+submit={{
+ component: ({ onClick, isValid, isDisabled, isSubmitting }) => (
+
+ {isSubmitting ? : 'Sign Document'}
+
+ )
+}}
+
+// Custom signature field
+fields={{
+ signer: [{
+ id: 'sig',
+ type: 'signature',
+ component: ({ value, onChange, isDisabled, label }) => (
+
+ )
+ }]
+}}
+```
+
+## Event handlers
+
+```jsx
+// Main submission
+onSubmit={async (data) => {
+ // data.eventId - Your session ID
+ // data.auditTrail - Complete interaction log
+ // data.signerFields - User inputs
+ await api.save(data);
+}}
+
+// Download handling
+onDownload={async (data) => {
+ // data.documentSource - Original .docx file
+ // data.fileName - Suggested filename
+ // Send to backend for PDF conversion
+ const response = await fetch('/api/generate-pdf', {
+ method: 'POST',
+ body: JSON.stringify(data)
+ });
+ const blob = await response.blob();
+ saveAs(blob, data.fileName);
+}}
+
+// State monitoring
+onStateChange={(state) => {
+ // state.scrolled - Has scrolled to bottom
+ // state.fields - Current field values
+ // state.isValid - Ready to submit
+ console.log('Ready:', state.isValid);
+}}
+
+// Field changes
+onFieldChange={(field) => {
+ // field.id - Field identifier
+ // field.value - New value
+ // field.previousValue - Old value
+ analytics.track('field_changed', field);
+}}
+
+// Document analysis
+onFieldsDiscovered={(fields) => {
+ // All fields found in document
+ console.log('Document has fields:', fields);
+}}
+```
+
+## Styling
+
+The component can be styled using standard CSS. Optionally import default styles:
+
+```jsx
+// Optional: import default styles
+import '@superdoc-dev/esign/styles.css';
+
+
+```
+
+### CSS classes
+
+Target these classes to customize appearance:
+
+| Class | Description |
+| ---------------------------------- | -------------------------------------------- |
+| `.superdoc-esign-container` | Root container (also accepts `className` prop) |
+| `.superdoc-esign-document` | Document section wrapper |
+| `.superdoc-esign-document-toolbar` | Toolbar with download button |
+| `.superdoc-esign-document-controls`| Control buttons container |
+| `.superdoc-esign-document-viewer` | Scroll container (SuperDoc mounts inside) |
+| `.superdoc-esign-controls` | Fields and buttons area |
+| `.superdoc-esign-fields` | Field container |
+| `.superdoc-esign-actions` | Action buttons container |
+| `.superdoc-esign-form-actions` | Form submit button container |
+
+### Customizing with CSS
+
+Style the component using standard CSS - no special variables needed:
+
+```css
+.superdoc-esign-document-viewer {
+ background: #f8fafc;
+}
+
+.superdoc-esign-controls {
+ margin-top: 0; /* Remove gap between viewer and controls */
+ padding: 20px 24px;
+ background: #ffffff;
+ border-top: 1px solid #e2e8f0;
+}
+
+.superdoc-esign-fields {
+ margin-bottom: 16px;
+}
+
+.superdoc-esign-actions {
+ gap: 12px;
+}
+```
+
+## Themed example
+
+Style the component to match your brand.
+
+### Structure
+
+```
+.superdoc-esign-container
+βββ .superdoc-esign-document
+β βββ .superdoc-esign-document-toolbar
+β β βββ .superdoc-esign-document-controls
+β βββ .superdoc-esign-document-viewer
+β βββ .super-editor (the document)
+βββ .superdoc-esign-controls
+ βββ .superdoc-esign-fields
+ βββ .superdoc-esign-actions
+```
+
+### CSS
+
+```css
+/* Card-like container */
+.brand-signer {
+ border: 1px solid #e2e8f0;
+ border-radius: 12px;
+ overflow: hidden;
+}
+
+/* Document viewer background */
+.brand-signer .superdoc-esign-document-viewer {
+ background: #f8fafc;
+}
+
+/* Controls area styling */
+.brand-signer .superdoc-esign-controls {
+ margin-top: 0;
+ padding: 20px 24px;
+ background: #ffffff;
+ border-top: 1px solid #e2e8f0;
+}
+
+/* Style the document editor */
+.brand-signer .super-editor {
+ border-radius: 12px 12px 0 0;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+}
+```
+
+### Component
+
+```jsx
+
+```
+
+## Complete example
+
+```jsx
+
+```
diff --git a/apps/docs/solutions/esign/introduction.mdx b/apps/docs/solutions/esign/introduction.mdx
new file mode 100644
index 0000000000..6678359b59
--- /dev/null
+++ b/apps/docs/solutions/esign/introduction.mdx
@@ -0,0 +1,73 @@
+---
+title: eSign
+sidebarTitle: Introduction
+---
+
+The eSign component wraps SuperDoc to provide a complete document acceptance workflow with audit trails, field management, and signature capture.
+
+## What it does
+
+- **Document display** - Shows DOCX, Markdown, or HTML documents
+- **Requirement tracking** - Monitors scroll, signature, and consent status
+- **Field management** - Populates document placeholders and collects signer input
+- **Audit trail** - Records all interactions for compliance
+- **UI agnostic** - Bring your own buttons and components
+
+## Common use cases
+
+### Terms of Service
+
+Track that users scrolled through and accepted your terms.
+
+### Employment Agreements
+
+Capture signatures on offer letters with personalized fields.
+
+### Consent Forms
+
+Manage multiple checkboxes for GDPR, medical, or marketing consent.
+
+### Embedded Workflows
+
+Add document signing to larger forms like onboarding flows.
+
+## How it works
+
+```jsx
+ {
+ // data includes audit trail, field values, timestamps
+ await api.saveSignature(data);
+ }}
+/>
+```
+
+## Key concepts
+
+**Document fields** - Values injected into the document (like mail merge)
+
+**Signer fields** - Interactive elements the user completes (signature, checkboxes)
+
+**Audit trail** - Timestamped log of all user actions
+
+**Progressive enhancement** - Start simple, add customization as needed
+
+## Next steps
+
+
+
+ Get running in 5 minutes
+
+
+ Explore all options
+
+
diff --git a/apps/docs/solutions/esign/quickstart.mdx b/apps/docs/solutions/esign/quickstart.mdx
new file mode 100644
index 0000000000..3da5918dea
--- /dev/null
+++ b/apps/docs/solutions/esign/quickstart.mdx
@@ -0,0 +1,147 @@
+---
+title: Quick Start
+---
+
+Get eSign running in 5 minutes
+
+## Installation
+
+```bash
+npm install @superdoc-dev/esign
+```
+
+## Basic implementation
+
+```jsx
+import SuperDocESign from '@superdoc-dev/esign';
+import 'superdoc/dist/style.css';
+
+function AgreementForm() {
+ const handleSubmit = async (data) => {
+ console.log('Signed:', data);
+ // Save to your backend
+ await api.saveAgreement(data);
+ };
+
+ return (
+
+ );
+}
+```
+
+That's it! This displays the document and provides a submit button.
+
+## Adding requirements
+
+Make users scroll and provide a signature:
+
+```jsx
+
+```
+
+## Populating document fields
+
+Replace placeholders in your document using field IDs:
+
+```jsx
+// Document contains fields with IDs: field_client_name, field_company
+
+
+```
+
+## Adding consent checkboxes
+
+```jsx
+fields={{
+ signer: [
+ {
+ id: 'terms',
+ type: 'checkbox',
+ validation: { required: true },
+ label: 'I accept the terms and conditions'
+ },
+ {
+ id: 'privacy',
+ type: 'checkbox',
+ validation: { required: true },
+ label: 'I acknowledge the privacy policy'
+ }
+ ]
+}}
+```
+
+## Handling the response
+
+The submit handler receives comprehensive data:
+
+```jsx
+const handleSubmit = async (data) => {
+ // data contains:
+ // - eventId: Your unique session ID
+ // - timestamp: When submitted
+ // - duration: Time spent (ms)
+ // - auditTrail: Array of timestamped events
+ // - signerFields: Values from interactive fields
+ // - isFullyCompleted: All requirements met
+
+ console.log('Audit trail:', data.auditTrail);
+ console.log('Signature:', data.signerFields.find(f => f.id === 'signature'));
+
+ await saveToDatabase(data);
+};
+```
+
+## TypeScript
+
+Full TypeScript support included:
+
+```typescript
+import SuperDocESign from '@superdoc-dev/esign';
+import type { SubmitData } from '@superdoc-dev/esign';
+
+const handleSubmit = async (data: SubmitData) => {
+ // Fully typed data structure
+};
+```
+
+## Next: Configuration
+
+Learn about all configuration options in the [Configuration guide β](/solutions/esign/configuration)
\ No newline at end of file
diff --git a/apps/docs/solutions/overview.mdx b/apps/docs/solutions/overview.mdx
new file mode 100644
index 0000000000..2d6eaa9098
--- /dev/null
+++ b/apps/docs/solutions/overview.mdx
@@ -0,0 +1,42 @@
+---
+title: Solutions
+sidebarTitle: Overview
+---
+
+SuperDoc Solutions are production-ready components that handle specific document workflows. They're built on SuperDoc but abstract away the complexity for common use cases.
+
+## Available Solutions
+
+### SuperDoc eSign
+Complete document signing workflows with audit trails, field management, and compliance tracking. Perfect for terms of service, employment agreements, and consent forms.
+
+[Get started with eSign β](/solutions/esign/introduction)
+
+### SuperDoc Template Builder
+Create and manage document templates with structured fields using Word's SDT system.
+
+[Get started with Template Builder β](/solutions/template-builder/introduction)
+
+
+## When to Use Solutions vs Core SuperDoc
+
+| Use Case | Recommended | Why |
+|----------|------------|-----|
+| Document signing workflow | eSign Solution | Handles audit trails and compliance automatically |
+| Custom editor with unique features | Core SuperDoc | Need full control over functionality |
+| Simple document viewer | Core SuperDoc | Solutions add unnecessary overhead |
+| Template creation system | Template Builder | SDT field management built-in |
+
+## Installation
+
+Solutions are published as separate npm packages:
+
+```bash
+# For eSign
+npm install @superdoc-dev/esign
+
+# For Template Builder
+npm install @superdoc-dev/template-builder
+```
+
+SuperDoc is a dependency and is installed automatically.
\ No newline at end of file
diff --git a/apps/docs/solutions/template-builder/api-reference.mdx b/apps/docs/solutions/template-builder/api-reference.mdx
new file mode 100644
index 0000000000..52b82e2ed7
--- /dev/null
+++ b/apps/docs/solutions/template-builder/api-reference.mdx
@@ -0,0 +1,423 @@
+---
+title: API Reference
+sidebarTitle: API Reference
+---
+
+Complete technical reference for the Template Builder component.
+
+## Component props
+
+### Required props
+
+None - the component works with zero configuration.
+
+### Optional props
+
+
+ Document loading configuration
+
+
+
+ Document to load. Can be a URL, File object, or Blob
+
+
+ Document interaction mode
+
+
+
+
+
+ Field configuration
+
+
+
+ Fields that users can insert into the template
+
+
+ Pre-existing fields in the document (auto-discovered if not provided)
+
+
+ Enable users to create new fields on the fly
+
+
+
+
+
+ Field insertion menu configuration
+
+
+
+ Custom menu component
+
+
+ Pattern that opens the field menu
+
+
+
+
+
+ Field list sidebar configuration
+
+
+
+ Custom list component
+
+
+ Sidebar position
+
+
+
+
+
+ Document editing toolbar. Can be: - `boolean` - show/hide default toolbar -
+ `string` - space-separated tool names - `object` - full toolbar configuration
+
+
+
+ Called when the document is loaded and ready
+
+
+
+ Called when the trigger pattern is typed
+
+
+
+ Called when a field is inserted
+
+
+
+ Called when a field is modified
+
+
+
+ Called when a field is removed
+
+
+
+ Called whenever the complete field list changes
+
+
+
+ Called when a field is selected/deselected in the document
+
+
+
+ Called when user creates a new field (requires `fields.allowCreate = true`)
+
+
+
+ Called when template is exported via `exportTemplate()`. Use this to persist field metadata to your database alongside the document.
+
+
+
+ All fields in the exported template
+
+
+ The exported document (only present when `triggerDownload: false`)
+
+
+ The filename used for export
+
+
+
+
+## Types
+
+### FieldDefinition
+
+Available fields that users can insert:
+
+```typescript
+interface FieldDefinition {
+ id: string; // Unique identifier
+ label: string; // Display name
+ defaultValue?: string; // Default value for new instances
+ metadata?: Record; // Custom metadata
+ mode?: "inline" | "block"; // Field insertion mode (default: "inline")
+ group?: string; // Category/group name
+}
+```
+
+### TemplateField
+
+Fields that exist in the template document:
+
+```typescript
+interface TemplateField {
+ id: string | number; // Unique instance ID
+ alias: string; // Field name/label
+ tag?: string; // JSON metadata string
+ position?: number; // Position in document
+ mode?: "inline" | "block"; // Rendering mode
+ group?: string; // Group ID for related fields
+}
+```
+
+### TriggerEvent
+
+Information about trigger detection:
+
+```typescript
+interface TriggerEvent {
+ query: string; // Text after trigger pattern
+ position: {
+ // Cursor position
+ top: number;
+ left: number;
+ };
+ mode: "inline" | "block"; // Context mode
+}
+```
+
+### ExportEvent
+
+Data provided when a template is exported:
+
+```typescript
+interface ExportEvent {
+ fields: TemplateField[]; // All fields in the template
+ blob?: Blob; // Document blob (when triggerDownload: false)
+ fileName: string; // Export filename
+}
+```
+
+### MenuProps
+
+Props passed to custom menu components:
+
+```typescript
+interface MenuProps {
+ fields: FieldDefinition[]; // Available fields
+ onInsert: (field: FieldDefinition) => void; // Insert handler
+ onClose: () => void; // Close menu handler
+ position: { top: number; left: number }; // Menu position
+ query: string; // Current search query
+ mode: "inline" | "block"; // Insertion mode
+}
+```
+
+### ListProps
+
+Props passed to custom list components:
+
+```typescript
+interface ListProps {
+ fields: TemplateField[]; // Fields in template
+ selectedField: TemplateField | null; // Currently selected field
+ onFieldSelect: (field: TemplateField) => void; // Selection handler
+ onFieldDelete: (fieldId: string | number) => void; // Delete handler
+}
+```
+
+### ExportConfig
+
+Configuration for template export:
+
+```typescript
+interface ExportConfig {
+ fileName?: string; // Download filename
+ triggerDownload?: boolean; // Auto-download file
+}
+```
+
+## Ref methods
+
+Access these methods via a ref:
+
+```typescript
+const builderRef = useRef(null);
+```
+
+### insertField()
+
+Insert a field at the current cursor position:
+
+```typescript
+builderRef.current?.insertField({
+ alias: "customer_name",
+ mode: "inline",
+});
+```
+
+Returns `boolean` - true if inserted successfully.
+
+### insertBlockField()
+
+Insert a block-level field:
+
+```typescript
+builderRef.current?.insertBlockField({
+ alias: "terms_section",
+ mode: "block",
+});
+```
+
+Returns `boolean` - true if inserted successfully.
+
+### updateField()
+
+Update an existing field:
+
+```typescript
+builderRef.current?.updateField("field-id", {
+ alias: "new_name",
+ tag: JSON.stringify({ groupId: "123" }),
+});
+```
+
+Returns `boolean` - true if updated successfully.
+
+### deleteField()
+
+Remove a field from the template:
+
+```typescript
+builderRef.current?.deleteField("field-id");
+```
+
+Returns `boolean` - true if deleted successfully.
+
+### selectField()
+
+Programmatically select a field:
+
+```typescript
+builderRef.current?.selectField("field-id");
+```
+
+### nextField()
+
+Navigate to the next field (equivalent to Tab key):
+
+```typescript
+builderRef.current?.nextField();
+```
+
+### previousField()
+
+Navigate to the previous field (equivalent to Shift+Tab):
+
+```typescript
+builderRef.current?.previousField();
+```
+
+### getFields()
+
+Get all fields in the template:
+
+```typescript
+const fields = builderRef.current?.getFields();
+// Returns: TemplateField[]
+```
+
+### exportTemplate()
+
+Export the template as a .docx file:
+
+```typescript
+// Trigger download
+await builderRef.current?.exportTemplate({
+ fileName: "my-template.docx",
+ triggerDownload: true,
+});
+
+// Get Blob without downloading
+const blob = await builderRef.current?.exportTemplate({
+ triggerDownload: false,
+});
+
+// Use blob for API upload or database storage
+await uploadToServer(blob);
+```
+
+Returns `Promise` depending on `triggerDownload` setting.
+
+### getSuperDoc()
+
+Access the underlying SuperDoc editor instance:
+
+```typescript
+const superdoc = builderRef.current?.getSuperDoc();
+
+// Use SuperDoc API directly
+if (superdoc) {
+ const editor = superdoc.getEditor();
+ // Full access to SuperDoc/SuperEditor APIs
+}
+```
+
+Returns `SuperDoc | null`.
+
+## Default components
+
+The package exports default UI components you can use as a starting point:
+
+```typescript
+import {
+ DefaultFieldMenu,
+ DefaultFieldList,
+} from "@superdoc-dev/template-builder/defaults";
+
+// Use as-is or extend
+function MyCustomMenu(props: MenuProps) {
+ return (
+
+
+ Cancel
+
+ );
+}
+```
+
+## CSS classes
+
+Target these classes for custom styling:
+
+| Class | Element |
+| ------------------------------- | ------------------------ |
+| `.superdoc-template-builder` | Root container |
+| `.superdoc-field-menu` | Field insertion popup |
+| `.superdoc-field-menu-item` | Individual menu item |
+| `.superdoc-field-list` | Sidebar container |
+| `.superdoc-field-list-item` | Individual field in list |
+| `.superdoc-field-list-group` | Grouped fields container |
+| `.superdoc-field-tag` | Field in document |
+| `.superdoc-field-tag--selected` | Selected field |
+| `.superdoc-field-tag--inline` | Inline field mode |
+| `.superdoc-field-tag--block` | Block field mode |
+
+## Import types
+
+All TypeScript types are exported for use in your code:
+
+```typescript
+import type {
+ SuperDocTemplateBuilderProps,
+ SuperDocTemplateBuilderHandle,
+ FieldDefinition,
+ TemplateField,
+ TriggerEvent,
+ ExportEvent,
+ MenuProps,
+ ListProps,
+ ExportConfig,
+} from "@superdoc-dev/template-builder";
+```
+
+## Keyboard shortcuts
+
+Built-in keyboard navigation:
+
+| Shortcut | Action |
+| -------------- | ------------------------------- |
+| `Tab` | Jump to next field |
+| `Shift + Tab` | Jump to previous field |
+| `{{` (default) | Open field menu |
+| `Esc` | Close field menu |
+| `Enter` | Insert selected field from menu |
+| `β` / `β` | Navigate menu items |
+
+The trigger pattern is configurable via the `menu.trigger` prop.
diff --git a/apps/docs/solutions/template-builder/configuration.mdx b/apps/docs/solutions/template-builder/configuration.mdx
new file mode 100644
index 0000000000..01625993c8
--- /dev/null
+++ b/apps/docs/solutions/template-builder/configuration.mdx
@@ -0,0 +1,362 @@
+---
+title: Configuration Options
+sidebarTitle: Configuration
+---
+
+Complete guide to configuring the template builder component.
+
+## Document options
+
+Control which document is loaded and how users interact with it:
+
+```tsx
+
+```
+
+**Editing mode** - Users can edit document content and insert fields
+**Viewing mode** - Read-only document display, fields can still be inserted
+
+## Field system
+
+### Available fields
+
+Define which fields users can insert:
+
+```tsx
+
+```
+
+### Field creation
+
+Allow users to create new fields while building templates:
+
+```tsx
+ {
+ // Validate or save to database
+ const savedField = await api.createField(field);
+
+ // Return updated field or void
+ return { ...field, id: savedField.id };
+ }}
+/>
+```
+
+When enabled, the field menu shows a "Create new field" option at the bottom.
+
+## Menu customization
+
+### Trigger pattern
+
+Change what opens the field insertion menu:
+
+```tsx
+
+```
+
+### Custom menu component
+
+Replace the default field menu entirely:
+
+```tsx
+import { DefaultFieldMenu } from "@superdoc-dev/template-builder/defaults";
+
+function CustomMenu({ fields, onInsert, onClose, position, query }) {
+ return (
+
+ {
+ /* filter logic */
+ }}
+ />
+ {fields.map((field) => (
+ onInsert(field)}>
+ {field.label}
+
+ ))}
+
+ );
+}
+
+ ;
+```
+
+The component handles trigger detection and positioning, you just render the UI.
+
+## List sidebar
+
+### Position and visibility
+
+```tsx
+
+```
+
+Omit `list` prop entirely to hide the sidebar.
+
+### Custom list component
+
+Replace the default sidebar:
+
+```tsx
+function CustomFieldList({
+ fields,
+ selectedField,
+ onFieldSelect,
+ onFieldDelete,
+}) {
+ return (
+
+ Template Fields ({fields.length})
+ {fields.map((field) => (
+ onFieldSelect(field)}
+ style={{
+ background: selectedField?.id === field.id ? "#e3f2fd" : "white",
+ }}
+ >
+ {field.alias}
+ {field.group && Group: {field.group} }
+ {
+ e.stopPropagation();
+ onFieldDelete(field.id);
+ }}
+ >
+ Delete
+
+
+ ))}
+
+ );
+}
+
+ ;
+```
+
+## Toolbar configuration
+
+Control the document editing toolbar:
+
+```tsx
+// Boolean - show/hide completely
+
+
+// String - show specific tools
+
+
+// Object - full control
+
+```
+
+## Event handlers
+
+### Field lifecycle events
+
+```tsx
+ {
+ console.log("Inserted:", field.alias);
+ }}
+ // When a field is modified
+ onFieldUpdate={(field: TemplateField) => {
+ console.log("Updated:", field.alias);
+ }}
+ // When a field is removed
+ onFieldDelete={(fieldId: string | number) => {
+ console.log("Deleted:", fieldId);
+ }}
+ // Whenever the complete field list changes
+ onFieldsChange={(fields: TemplateField[]) => {
+ console.log("Template has", fields.length, "fields");
+ }}
+/>
+```
+
+### Selection and interaction
+
+```tsx
+ {
+ if (field) {
+ console.log("Selected field:", field.alias);
+ }
+ }}
+ // When trigger pattern is typed
+ onTrigger={(event: TriggerEvent) => {
+ console.log("Trigger at position:", event.position);
+ console.log("Query string:", event.query);
+ }}
+/>
+```
+
+### Document ready
+
+```tsx
+ {
+ console.log("Document loaded and ready");
+ }}
+/>
+```
+
+## Complete example
+
+Putting it all together:
+
+```tsx
+import { useState, useRef } from "react";
+import SuperDocTemplateBuilder, {
+ SuperDocTemplateBuilderHandle,
+ FieldDefinition,
+} from "@superdoc-dev/template-builder";
+
+function TemplateEditor() {
+ const builderRef = useRef(null);
+ const [fields, setFields] = useState([
+ { id: "1", label: "Customer Name", group: "customer" },
+ { id: "2", label: "Customer Email", group: "customer" },
+ { id: "3", label: "Invoice Date", group: "invoice" },
+ { id: "4", label: "Total Amount", group: "invoice" },
+ ]);
+
+ const handleExport = async () => {
+ const blob = await builderRef.current?.exportTemplate({
+ fileName: "invoice-template.docx",
+ triggerDownload: true,
+ });
+ };
+
+ const handleFieldCreate = async (field: FieldDefinition) => {
+ // Save to your database
+ const saved = await fetch("/api/fields", {
+ method: "POST",
+ body: JSON.stringify(field),
+ }).then((r) => r.json());
+
+ // Add to local state
+ setFields((prev) => [...prev, { ...field, id: saved.id }]);
+
+ return { ...field, id: saved.id };
+ };
+
+ return (
+
+
+ Invoice Template Builder
+ Export Template
+
+
+ {
+ console.log("Template updated:", templateFields);
+ }}
+ onFieldCreate={handleFieldCreate}
+ onReady={() => {
+ console.log("Document ready for editing");
+ }}
+ />
+
+ );
+}
+```
+
+## Styling
+
+The component uses CSS classes you can target:
+
+```css
+/* Main container */
+.superdoc-template-builder {
+ height: 100vh;
+}
+
+/* Field menu popup */
+.superdoc-field-menu {
+ border: 1px solid #ccc;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
+}
+
+/* Field list sidebar */
+.superdoc-field-list {
+ background: #f5f5f5;
+ border-left: 1px solid #ddd;
+}
+
+/* Fields in the document */
+.superdoc-field-tag {
+ background: #e3f2fd;
+ border: 1px dashed #2196f3;
+}
+```
+
+Styles from `superdoc/dist/style.css` must be imported for proper rendering.
diff --git a/apps/docs/solutions/template-builder/introduction.mdx b/apps/docs/solutions/template-builder/introduction.mdx
new file mode 100644
index 0000000000..920bf61544
--- /dev/null
+++ b/apps/docs/solutions/template-builder/introduction.mdx
@@ -0,0 +1,87 @@
+---
+title: Template Builder
+sidebarTitle: Introduction
+---
+
+A React component for creating document templates with dynamic fields that can be populated with data at merge time.
+
+## What it does
+
+- Load Word documents and convert them into reusable templates
+- Insert dynamic fields using a simple trigger pattern (`{{`)
+- Organize fields with grouping for repeating data structures
+- Export templates with embedded field definitions
+- Navigate between fields using keyboard shortcuts
+
+## Common use cases
+
+- **Contract templates** - Customer names, dates, terms that change per agreement
+- **Invoice templates** - Line items, totals, and customer information
+- **Form letters** - Personalized content with consistent structure
+- **Report templates** - Dynamic data sections with repeating groups
+- **Proposal documents** - Client-specific information in standardized layouts
+
+## How it works
+
+```jsx
+import SuperDocTemplateBuilder from "@superdoc-dev/template-builder";
+import "superdoc/dist/style.css";
+
+function TemplateEditor() {
+ return (
+ console.log("Field inserted:", field)}
+ />
+ );
+}
+```
+
+That's it! Users type `{{` anywhere in the document to insert fields. The sidebar shows all fields in the template.
+
+## Key concepts
+
+**Fields** - Placeholders in the document that get replaced with actual data during merge operations. Each field has a unique identifier.
+
+**Structured Document Tags (SDT)** - The underlying Word standard used to mark field locations. Ensures compatibility with Microsoft Word.
+
+**Field grouping** - Multiple instances of the same field that create a logical group, useful for repeating sections like line items.
+
+**Trigger pattern** - The character sequence (default `{{`) that opens the field insertion menu.
+
+## Next steps
+
+
+
+ Get running in 5 minutes
+
+
+ Learn all available options
+
+
+ Complete technical reference
+
+
diff --git a/apps/docs/solutions/template-builder/quickstart.mdx b/apps/docs/solutions/template-builder/quickstart.mdx
new file mode 100644
index 0000000000..b23d15ec52
--- /dev/null
+++ b/apps/docs/solutions/template-builder/quickstart.mdx
@@ -0,0 +1,167 @@
+---
+title: Quick Start Guide
+sidebarTitle: Quick Start
+---
+
+Get your template builder up and running in 5 minutes.
+
+## Installation
+
+```bash
+npm install @superdoc-dev/template-builder
+```
+
+## Basic usage
+
+Import the component and styles, then render with minimal props:
+
+```jsx
+import SuperDocTemplateBuilder from "@superdoc-dev/template-builder";
+import "superdoc/dist/style.css";
+
+function App() {
+ return (
+
+ );
+}
+```
+
+That displays an empty document. Type `{{` to open the field menu and insert fields.
+
+## Load an existing document
+
+Most templates start from an existing document:
+
+```jsx
+
+```
+
+The component loads the document and discovers any existing fields.
+
+## Add the field list sidebar
+
+Show all template fields in a sidebar:
+
+```jsx
+
+```
+
+Users can click fields in the list to jump to them in the document.
+
+## Handle field changes
+
+Track when fields are inserted, updated, or deleted:
+
+```jsx
+function App() {
+ const [templateFields, setTemplateFields] = useState([]);
+
+ return (
+ {
+ console.log("Template now has", fields.length, "fields");
+ setTemplateFields(fields);
+ }}
+ />
+ );
+}
+```
+
+The `onFieldsChange` callback receives the complete list of fields in the template whenever they change.
+
+## Export the template
+
+Use a ref to programmatically export:
+
+```jsx
+import { useRef } from "react";
+
+function App() {
+ const builderRef = useRef(null);
+
+ const handleExport = async () => {
+ await builderRef.current?.exportTemplate({
+ fileName: "my-template.docx",
+ triggerDownload: true,
+ });
+ };
+
+ return (
+ <>
+ Export Template
+
+ >
+ );
+}
+```
+
+The exported document contains all field definitions embedded as Structured Document Tags.
+
+## TypeScript support
+
+Full TypeScript definitions are included:
+
+```tsx
+import SuperDocTemplateBuilder, {
+ SuperDocTemplateBuilderHandle,
+ FieldDefinition,
+ TemplateField,
+} from "@superdoc-dev/template-builder";
+
+const builderRef = useRef(null);
+
+const availableFields: FieldDefinition[] = [
+ { id: "1", label: "Customer Name", defaultValue: "John Doe" },
+ { id: "2", label: "Contract Date", defaultValue: new Date().toISOString() },
+];
+
+const handleFieldInsert = (field: TemplateField) => {
+ console.log(`Inserted field: ${field.alias}`);
+};
+```
+
+## Next steps
+
+
+ Learn about custom components, field creation, and advanced features
+
diff --git a/apps/docs/style.css b/apps/docs/style.css
new file mode 100644
index 0000000000..17fa533bc9
--- /dev/null
+++ b/apps/docs/style.css
@@ -0,0 +1,3 @@
+#page-title {
+ font-size: 2.8rem !important;
+}
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 0543b5fbc9..2f8ab46139 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -29,8 +29,8 @@ export default [
'**/*.spec.js',
'**/tests/**',
'**/test/**',
- // Docs generated files
- 'docs/.vitepress/cache/**',
+ // Docs (Mintlify site with its own conventions)
+ 'apps/docs/**',
// Examples (different environments and coding styles)
'examples/**',
'**/examples/**',
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 88de72e54b..831267e50c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -351,6 +351,15 @@ importers:
specifier: 'catalog:'
version: 3.2.0
+ apps/docs:
+ devDependencies:
+ documentation:
+ specifier: ^14.0.3
+ version: 14.0.3
+ mintlify:
+ specifier: ^4.2.295
+ version: 4.2.295(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@22.19.2)(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3)
+
e2e-tests:
dependencies:
'@fontsource/inter':
@@ -975,10 +984,30 @@ packages:
'@acemir/cssom@0.9.29':
resolution: {integrity: sha512-G90x0VW+9nW4dFajtjCoT+NM0scAfH9Mb08IcjgFHYbfiL/lU04dTF9JuVOi3/OH+DJCQdcIseSXkdCB9Ky6JA==}
+ '@alcalzone/ansi-tokenize@0.2.3':
+ resolution: {integrity: sha512-jsElTJ0sQ4wHRz+C45tfect76BwbTbgkgKByOzpCN9xG61N5V6u/glvg1CsNJhq2xJIFpKHSwG3D2wPPuEYOrQ==}
+ engines: {node: '>=18'}
+
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
+
'@ampproject/remapping@2.3.0':
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
+ '@ark/schema@0.55.0':
+ resolution: {integrity: sha512-IlSIc0FmLKTDGr4I/FzNHauMn0MADA6bCjT1wauu4k6MyxhC1R9gz0olNpIRvK7lGGDwtc/VO0RUDNvVQW5WFg==}
+
+ '@ark/schema@0.56.0':
+ resolution: {integrity: sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==}
+
+ '@ark/util@0.55.0':
+ resolution: {integrity: sha512-aWFNK7aqSvqFtVsl1xmbTjGbg91uqtJV7Za76YGNEwIO4qLjMfyY8flmmbhooYMuqPCO2jyxu8hve943D+w3bA==}
+
+ '@ark/util@0.56.0':
+ resolution: {integrity: sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==}
+
'@asamuzakjp/css-color@4.1.1':
resolution: {integrity: sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==}
@@ -988,10 +1017,50 @@ packages:
'@asamuzakjp/nwsapi@2.3.9':
resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==}
+ '@asyncapi/parser@3.4.0':
+ resolution: {integrity: sha512-Sxn74oHiZSU6+cVeZy62iPZMFMvKp4jupMFHelSICCMw1qELmUHPvuZSr+ZHDmNGgHcEpzJM5HN02kR7T4g+PQ==}
+
+ '@asyncapi/specs@6.10.0':
+ resolution: {integrity: sha512-vB5oKLsdrLUORIZ5BXortZTlVyGWWMC1Nud/0LtgxQ3Yn2738HigAD6EVqScvpPsDUI/bcLVsYEXN4dtXQHVng==}
+
'@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
+ '@babel/code-frame@7.28.6':
+ resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.28.6':
+ resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.28.6':
+ resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.28.6':
+ resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.28.6':
+ resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.28.6':
+ resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.28.6':
+ resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
'@babel/helper-string-parser@7.27.1':
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
@@ -1000,19 +1069,38 @@ packages:
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.28.5':
- resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.28.6':
+ resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.28.6':
+ resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/types@7.28.5':
- resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.28.6':
+ resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.28.6':
+ resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==}
engines: {node: '>=6.9.0'}
'@bcoe/v8-coverage@1.0.2':
resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
engines: {node: '>=18'}
+ '@canvas/image-data@1.1.0':
+ resolution: {integrity: sha512-QdObRRjRbcXGmM1tmJ+MrHcaz1MftF2+W7YI+MsphnsCrmtyfS0d5qJbk0MeSbUeyM/jCb0hmnkXPsy026L7dA==}
+
'@colors/colors@1.5.0':
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
@@ -1506,6 +1594,12 @@ packages:
'@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==}
@@ -1542,6 +1636,245 @@ packages:
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
+ '@img/sharp-darwin-arm64@0.33.5':
+ resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-darwin-x64@0.33.5':
+ resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-arm64@1.0.4':
+ resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-x64@1.0.4':
+ resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-linux-arm64@1.0.4':
+ resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-arm@1.0.5':
+ resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-s390x@1.0.4':
+ resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-x64@1.0.4':
+ resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
+ resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-libvips-linuxmusl-x64@1.0.4':
+ resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-linux-arm64@0.33.5':
+ resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-linux-arm@0.33.5':
+ resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-linux-s390x@0.33.5':
+ resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [s390x]
+ os: [linux]
+
+ '@img/sharp-linux-x64@0.33.5':
+ resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-linuxmusl-arm64@0.33.5':
+ resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-linuxmusl-x64@0.33.5':
+ resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-wasm32@0.33.5':
+ resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [wasm32]
+
+ '@img/sharp-win32-ia32@0.33.5':
+ resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@img/sharp-win32-x64@0.33.5':
+ resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@inquirer/ansi@1.0.2':
+ resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==}
+ engines: {node: '>=18'}
+
+ '@inquirer/checkbox@4.3.2':
+ resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@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/core@10.3.2':
+ resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/editor@4.2.23':
+ resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/expand@4.0.23':
+ resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/external-editor@1.0.3':
+ resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/figures@1.0.15':
+ resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==}
+ engines: {node: '>=18'}
+
+ '@inquirer/input@4.3.1':
+ resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/number@3.0.23':
+ resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/password@4.0.23':
+ resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/prompts@7.9.0':
+ resolution: {integrity: sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/rawlist@4.1.11':
+ resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/search@3.2.2':
+ resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/select@4.4.2':
+ resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/type@3.0.10':
+ resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
'@isaacs/balanced-match@4.0.1':
resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
engines: {node: 20 || >=22}
@@ -1673,6 +2006,9 @@ packages:
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+ '@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'}
@@ -1683,9 +2019,30 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@jsep-plugin/assignment@1.3.0':
+ resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==}
+ engines: {node: '>= 10.16.0'}
+ peerDependencies:
+ jsep: ^0.4.0||^1.0.0
+
+ '@jsep-plugin/regex@1.0.4':
+ resolution: {integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==}
+ engines: {node: '>= 10.16.0'}
+ peerDependencies:
+ jsep: ^0.4.0||^1.0.0
+
+ '@jsep-plugin/ternary@1.1.4':
+ resolution: {integrity: sha512-ck5wiqIbqdMX6WRQztBL7ASDty9YLgJ3sSAK5ZpBzXeySvFGCzIvM6UiAI4hTZ22fEcYQVV/zhUbNscggW+Ukg==}
+ engines: {node: '>= 10.16.0'}
+ peerDependencies:
+ jsep: ^0.4.0||^1.0.0
+
'@juggle/resize-observer@3.4.0':
resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
+ '@leichtgewicht/ip-codec@2.0.5':
+ resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==}
+
'@lifeomic/attempt@3.1.0':
resolution: {integrity: sha512-QZqem4QuAnAyzfz+Gj5/+SLxqwCAw2qmt7732ZXodr6VDWGeYLG6w1i/vYLa55JQM9wRuBKLmXmiZ2P0LtE5rw==}
@@ -1697,6 +2054,15 @@ packages:
resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
hasBin: true
+ '@mdx-js/mdx@3.1.1':
+ resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==}
+
+ '@mdx-js/react@3.1.1':
+ resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==}
+ peerDependencies:
+ '@types/react': '>=16'
+ react: '>=16'
+
'@microsoft/api-extractor-model@7.32.2':
resolution: {integrity: sha512-Ussc25rAalc+4JJs9HNQE7TuO9y6jpYQX9nWD1DhqUzYPBr3Lr7O9intf+ZY8kD5HnIqeIRJX7ccCT0QyBy2Ww==}
@@ -1710,6 +2076,63 @@ packages:
'@microsoft/tsdoc@0.16.0':
resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==}
+ '@mintlify/cli@4.0.899':
+ resolution: {integrity: sha512-JTX+nElqBXKXLwBwqo3tQAKjdEwJmqfSd+DIDBfrxRQkQkkmFwl6NiFHbkQk6A7h/zyXKziEoKqWbGS649+dtQ==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ '@mintlify/common@1.0.661':
+ resolution: {integrity: sha512-/Hdiblzaomp+AWStQ4smhVMgesQhffzQjC9aYBnmLReNdh2Js+ccQFUaWL3TNIxwiS2esaZvsHSV/D+zyRS3hg==}
+
+ '@mintlify/common@1.0.681':
+ resolution: {integrity: sha512-eqzl2HP+U/QSWJjI97KatEApImviw1Rkie0mY7Z4grRYpxqnaw0ZomjWvF1xkB1tPiy4ri0dWWpMPVcjroCb8A==}
+
+ '@mintlify/link-rot@3.0.838':
+ resolution: {integrity: sha512-cBh4OzIzFnkfRzFtsPkR249sLlSL7GvAkp0KZHtXUCiVjPcASE+p/OJ02VpAnZ3+K5LAbt85d3eA0NBC8Nfr3w==}
+ engines: {node: '>=18.0.0'}
+
+ '@mintlify/mdx@3.0.4':
+ resolution: {integrity: sha512-tJhdpnM5ReJLNJ2fuDRIEr0zgVd6id7/oAIfs26V46QlygiLsc8qx4Rz3LWIX51rUXW/cfakjj0EATxIciIw+g==}
+ peerDependencies:
+ '@radix-ui/react-popover': ^1.1.15
+ react: ^18.3.1
+ react-dom: ^18.3.1
+
+ '@mintlify/models@0.0.255':
+ resolution: {integrity: sha512-LIUkfA7l7ypHAAuOW74ZJws/NwNRqlDRD/U466jarXvvSlGhJec/6J4/I+IEcBvWDnc9anLFKmnGO04jPKgAsg==}
+ engines: {node: '>=18.0.0'}
+
+ '@mintlify/models@0.0.258':
+ resolution: {integrity: sha512-PogKjvbKTppfRXxwJZPJ0YnDLZ/uyiEsaFRDhlAJd6I6859nUvWA9UmV81Qu03wqcmrpHLfDHybIv23CEI90tQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@mintlify/openapi-parser@0.0.8':
+ resolution: {integrity: sha512-9MBRq9lS4l4HITYCrqCL7T61MOb20q9IdU7HWhqYMNMM1jGO1nHjXasFy61yZ8V6gMZyyKQARGVoZ0ZrYN48Og==}
+ engines: {node: '>=18'}
+
+ '@mintlify/prebuild@1.0.816':
+ resolution: {integrity: sha512-g4M0PWQ8VlRFVJiQicKTTnSoWDbZMVRCBtVSGIb8MLeI93JRI3K3ROa4ECZgWM5AYPT31ey1NL4usyrasFmvJQ==}
+
+ '@mintlify/previewing@4.0.872':
+ resolution: {integrity: sha512-/s52ecO0QOJvgSl5b7cfjKIn77ovftOP7gLff/TibmuVb1yUUKkSgV09JKiMlhV+7NJmubbAN0L58UOMLvghUQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@mintlify/scraping@4.0.522':
+ resolution: {integrity: sha512-PL2k52WT5S5OAgnT2K13bP7J2El6XwiVvQlrLvxDYw5KMMV+y34YVJI8ZscKb4trjitWDgyK0UTq2KN6NQgn6g==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ '@mintlify/scraping@4.0.542':
+ resolution: {integrity: sha512-MnQo//ADa3C/OMLf+Dnsar355xhRttEOF4wWllpPXnY9HUE+WyO1WDvTVXgq6lCOY2QdN3+ixnc/qjUPFNo1FQ==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ '@mintlify/validation@0.1.555':
+ resolution: {integrity: sha512-11QVUReL4N5u8wSCgZt4RN7PA0jYQoMEBZ5IrUp5pgb5ZJBOoGV/vPsQrxPPa1cxsUDAuToNhtGxRQtOav/w8w==}
+
+ '@mintlify/validation@0.1.567':
+ resolution: {integrity: sha512-RDB7tNHwvE249s3ViAHeCZgfrAxF7pOB5XuqThOTf1zgul+A0beOsMLXPpyGIYqcB2/si7J+UEEpg1epAc+xjw==}
+
'@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
@@ -1782,6 +2205,9 @@ packages:
'@one-ini/wasm@0.1.1':
resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
+ '@openapi-contrib/openapi-schema-to-json-schema@3.2.0':
+ resolution: {integrity: sha512-Gj6C0JwCr8arj0sYuslWXUBSP/KnUlEGnPW4qxlXvAl543oaNQgMgIgkQUA6vs5BCCvwTEiL8m/wdWzfl4UvSw==}
+
'@pinojs/redact@0.4.0':
resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
@@ -1809,40 +2235,263 @@ packages:
'@popperjs/core@2.11.8':
resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
- '@rolldown/pluginutils@1.0.0-beta.50':
- resolution: {integrity: sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==}
+ '@puppeteer/browsers@2.3.0':
+ resolution: {integrity: sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==}
+ engines: {node: '>=18'}
+ hasBin: true
- '@rollup/plugin-inject@5.0.5':
- resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==}
- engines: {node: '>=14.0.0'}
+ '@radix-ui/primitive@1.1.3':
+ resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
+
+ '@radix-ui/react-arrow@1.1.7':
+ resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
peerDependencies:
- rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ '@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:
- rollup:
+ '@types/react':
+ optional: true
+ '@types/react-dom':
optional: true
- '@rollup/pluginutils@5.3.0':
- resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
- engines: {node: '>=14.0.0'}
+ '@radix-ui/react-compose-refs@1.1.2':
+ resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
peerDependencies:
- rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ '@types/react': '*'
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta:
- rollup:
+ '@types/react':
optional: true
- '@rollup/rollup-android-arm-eabi@4.53.3':
- resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==}
- cpu: [arm]
- os: [android]
+ '@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
- '@rollup/rollup-android-arm64@4.53.3':
- resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==}
- cpu: [arm64]
- os: [android]
+ '@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
- '@rollup/rollup-darwin-arm64@4.53.3':
- resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==}
- cpu: [arm64]
+ '@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-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-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-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-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/rect@1.1.1':
+ resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
+
+ '@rolldown/pluginutils@1.0.0-beta.50':
+ resolution: {integrity: sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==}
+
+ '@rollup/plugin-inject@5.0.5':
+ resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@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.53.3':
+ resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.53.3':
+ resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==}
+ cpu: [arm64]
os: [darwin]
'@rollup/rollup-darwin-x64@4.53.3':
@@ -2020,24 +2669,147 @@ packages:
peerDependencies:
semantic-release: '>=20.1.0'
+ '@shikijs/core@3.21.0':
+ resolution: {integrity: sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA==}
+
+ '@shikijs/engine-javascript@3.21.0':
+ resolution: {integrity: sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ==}
+
+ '@shikijs/engine-oniguruma@3.21.0':
+ resolution: {integrity: sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==}
+
+ '@shikijs/langs@3.21.0':
+ resolution: {integrity: sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==}
+
+ '@shikijs/themes@3.21.0':
+ resolution: {integrity: sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==}
+
+ '@shikijs/transformers@3.21.0':
+ resolution: {integrity: sha512-CZwvCWWIiRRiFk9/JKzdEooakAP8mQDtBOQ1TKiCaS2E1bYtyBCOkUzS8akO34/7ufICQ29oeSfkb3tT5KtrhA==}
+
+ '@shikijs/twoslash@3.21.0':
+ resolution: {integrity: sha512-iH360udAYON2JwfIldoCiMZr9MljuQA5QRBivKLpEuEpmVCSwrR+0WTQ0eS1ptgGBdH9weFiIsA5wJDzsEzTYg==}
+ peerDependencies:
+ typescript: '>=5.5.0'
+
+ '@shikijs/types@3.21.0':
+ resolution: {integrity: sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==}
+
+ '@shikijs/vscode-textmate@10.0.2':
+ resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
+
'@sindresorhus/is@4.6.0':
resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
engines: {node: '>=10'}
+ '@sindresorhus/is@5.6.0':
+ resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==}
+ engines: {node: '>=14.16'}
+
'@sindresorhus/merge-streams@4.0.0':
resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
engines: {node: '>=18'}
+ '@sindresorhus/slugify@2.2.0':
+ resolution: {integrity: sha512-9Vybc/qX8Kj6pxJaapjkFbiUJPk7MAkCh/GFCxIBnnsuYCFPIXKvnLidG8xlepht3i24L5XemUmGtrJ3UWrl6w==}
+ engines: {node: '>=12'}
+
+ '@sindresorhus/transliterate@1.6.0':
+ resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==}
+ engines: {node: '>=12'}
+
+ '@socket.io/component-emitter@3.1.2':
+ resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
+
+ '@stoplight/better-ajv-errors@1.0.3':
+ resolution: {integrity: sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==}
+ engines: {node: ^12.20 || >= 14.13}
+ peerDependencies:
+ ajv: '>=8'
+
+ '@stoplight/json-ref-readers@1.2.2':
+ resolution: {integrity: sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==}
+ engines: {node: '>=8.3.0'}
+
+ '@stoplight/json-ref-resolver@3.1.6':
+ resolution: {integrity: sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==}
+ engines: {node: '>=8.3.0'}
+
+ '@stoplight/json@3.21.0':
+ resolution: {integrity: sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==}
+ engines: {node: '>=8.3.0'}
+
+ '@stoplight/ordered-object-literal@1.0.5':
+ resolution: {integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==}
+ engines: {node: '>=8'}
+
+ '@stoplight/path@1.3.2':
+ resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==}
+ engines: {node: '>=8'}
+
+ '@stoplight/spectral-core@1.20.0':
+ resolution: {integrity: sha512-5hBP81nCC1zn1hJXL/uxPNRKNcB+/pEIHgCjPRpl/w/qy9yC9ver04tw1W0l/PMiv0UeB5dYgozXVQ4j5a6QQQ==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
+
+ '@stoplight/spectral-formats@1.8.2':
+ resolution: {integrity: sha512-c06HB+rOKfe7tuxg0IdKDEA5XnjL2vrn/m/OVIIxtINtBzphZrOgtRn7epQ5bQF5SWp84Ue7UJWaGgDwVngMFw==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
+
+ '@stoplight/spectral-functions@1.10.1':
+ resolution: {integrity: sha512-obu8ZfoHxELOapfGsCJixKZXZcffjg+lSoNuttpmUFuDzVLT3VmH8QkPXfOGOL5Pz80BR35ClNAToDkdnYIURg==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
+
+ '@stoplight/spectral-parsers@1.0.5':
+ resolution: {integrity: sha512-ANDTp2IHWGvsQDAY85/jQi9ZrF4mRrA5bciNHX+PUxPr4DwS6iv4h+FVWJMVwcEYdpyoIdyL+SRmHdJfQEPmwQ==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
+
+ '@stoplight/spectral-ref-resolver@1.0.5':
+ resolution: {integrity: sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
+
+ '@stoplight/spectral-runtime@1.1.4':
+ resolution: {integrity: sha512-YHbhX3dqW0do6DhiPSgSGQzr6yQLlWybhKwWx0cqxjMwxej3TqLv3BXMfIUYFKKUqIwH4Q2mV8rrMM8qD2N0rQ==}
+ engines: {node: ^16.20 || ^18.18 || >= 20.17}
+
+ '@stoplight/types@13.20.0':
+ resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==}
+ engines: {node: ^12.20 || >=14.13}
+
+ '@stoplight/types@13.6.0':
+ resolution: {integrity: sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==}
+ engines: {node: ^12.20 || >=14.13}
+
+ '@stoplight/types@14.1.1':
+ resolution: {integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==}
+ engines: {node: ^12.20 || >=14.13}
+
+ '@stoplight/yaml-ast-parser@0.0.50':
+ resolution: {integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==}
+
+ '@stoplight/yaml@4.3.0':
+ resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==}
+ engines: {node: '>=10.8'}
+
'@szmarczak/http-timer@4.0.6':
resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
engines: {node: '>=10'}
+ '@szmarczak/http-timer@5.0.1':
+ resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
+ engines: {node: '>=14.16'}
+
'@tokenizer/token@0.3.0':
resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
+ '@tootallnate/quickjs-emscripten@0.23.0':
+ resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
+
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+ '@types/acorn@4.0.6':
+ resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
+
'@types/argparse@1.0.38':
resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
@@ -2047,24 +2819,45 @@ packages:
'@types/conventional-commits-parser@5.0.2':
resolution: {integrity: sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==}
+ '@types/cookie@0.4.1':
+ resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==}
+
+ '@types/cors@2.8.19':
+ resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==}
+
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
'@types/deep-eql@4.0.2':
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+ '@types/es-aggregate-error@1.0.6':
+ resolution: {integrity: sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg==}
+
+ '@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/extend@3.0.4':
+ resolution: {integrity: sha512-ArMouDUTJEz1SQRpFsT2rIw7DeqICFv5aaVzLSIYMYQSLcwcGOfT3VyglQs/p7K3F7fT4zxr0NWxYZIdifD6dA==}
+
'@types/fs-extra@8.1.5':
resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==}
'@types/glob@7.2.0':
resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
+ '@types/hast@2.3.10':
+ resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
+
'@types/hast@3.0.4':
resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+ '@types/http-cache-semantics@4.0.4':
+ resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
+
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
@@ -2080,9 +2873,15 @@ packages:
'@types/lodash@4.17.21':
resolution: {integrity: sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==}
+ '@types/mdast@3.0.15':
+ resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
+
'@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/minimatch@6.0.0':
resolution: {integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==}
deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed.
@@ -2090,6 +2889,9 @@ packages:
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+ '@types/nlcst@2.0.3':
+ resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==}
+
'@types/node@16.9.1':
resolution: {integrity: sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==}
@@ -2099,12 +2901,30 @@ packages:
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
+ '@types/parse5@6.0.3':
+ resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==}
+
+ '@types/react@19.2.9':
+ resolution: {integrity: sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==}
+
'@types/responselike@1.0.0':
resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
+ '@types/supports-color@8.1.3':
+ resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==}
+
+ '@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==}
+ '@types/urijs@1.19.26':
+ resolution: {integrity: sha512-wkXrVzX5yoqLnndOwFsieJA7oKM8cNkOKJtf/3vVGSUFkWDKZvFHpIl9Pvqb/T9UsawBBFMTTD8xu7sK5MWuvg==}
+
+ '@types/yauzl@2.10.3':
+ resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
+
'@typescript-eslint/eslint-plugin@8.49.0':
resolution: {integrity: sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -2164,6 +2984,11 @@ packages:
resolution: {integrity: sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@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==}
@@ -2468,11 +3293,24 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ acorn@8.11.2:
+ resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
+ address@1.2.2:
+ resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==}
+ engines: {node: '>= 10.0.0'}
+
+ adm-zip@0.5.16:
+ resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
+ engines: {node: '>=12.0'}
+
agent-base@6.0.2:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
engines: {node: '>= 6.0.0'}
@@ -2485,6 +3323,10 @@ packages:
resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
engines: {node: '>=8'}
+ aggregate-error@4.0.1:
+ resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==}
+ engines: {node: '>=12'}
+
aggregate-error@5.0.0:
resolution: {integrity: sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==}
engines: {node: '>=18'}
@@ -2497,6 +3339,19 @@ packages:
ajv:
optional: true
+ ajv-errors@3.0.0:
+ resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==}
+ peerDependencies:
+ ajv: ^8.0.1
+
+ ajv-formats@2.1.1:
+ resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
ajv-formats@3.0.1:
resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
peerDependencies:
@@ -2520,6 +3375,10 @@ packages:
alien-signals@0.4.14:
resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==}
+ ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+
ansi-escapes@7.2.0:
resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==}
engines: {node: '>=18'}
@@ -2570,6 +3429,9 @@ packages:
engines: {node: '>=10'}
deprecated: This package is no longer supported.
+ arg@5.0.2:
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+
argparse@1.0.10:
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
@@ -2579,6 +3441,22 @@ packages:
argv-formatter@1.0.0:
resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==}
+ aria-hidden@1.2.6:
+ resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
+ engines: {node: '>=10'}
+
+ arkregex@0.0.3:
+ resolution: {integrity: sha512-bU21QJOJEFJK+BPNgv+5bVXkvRxyAvgnon75D92newgHxkBJTgiFwQxusyViYyJkETsddPlHyspshDQcCzmkNg==}
+
+ arkregex@0.0.5:
+ resolution: {integrity: sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw==}
+
+ arktype@2.1.27:
+ resolution: {integrity: sha512-enctOHxI4SULBv/TDtCVi5M8oLd4J5SVlPUblXDzSsOYQNMzmVbUosGBnJuZDKmFlN5Ie0/QVEuTE+Z5X1UhsQ==}
+
+ arktype@2.1.29:
+ resolution: {integrity: sha512-jyfKk4xIOzvYNayqnD8ZJQqOwcrTOUbIU4293yrzAjA3O1dWh61j71ArMQ6tS/u4pD7vabSPe7nG3RCyoXW6RQ==}
+
array-buffer-byte-length@1.0.2:
resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
engines: {node: '>= 0.4'}
@@ -2593,6 +3471,9 @@ packages:
resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
engines: {node: '>= 0.4'}
+ array-iterate@2.0.1:
+ resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==}
+
array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
@@ -2630,9 +3511,17 @@ packages:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
+ ast-types@0.13.4:
+ resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==}
+ engines: {node: '>=4'}
+
ast-v8-to-istanbul@0.3.8:
resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==}
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
+
async-function@1.0.0:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
@@ -2650,10 +3539,18 @@ packages:
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
engines: {node: '>=8.0.0'}
+ auto-bind@5.0.1:
+ resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
available-typed-arrays@1.0.7:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
+ avsc@5.7.9:
+ resolution: {integrity: sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg==}
+ engines: {node: '>=0.11'}
+
await-to-js@3.0.0:
resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==}
engines: {node: '>=6.0.0'}
@@ -2664,6 +3561,9 @@ packages:
aws4@1.13.2:
resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==}
+ axios@1.10.0:
+ resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==}
+
b4a@1.7.3:
resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==}
peerDependencies:
@@ -2686,9 +3586,51 @@ packages:
bare-abort-controller:
optional: true
+ bare-fs@4.5.2:
+ resolution: {integrity: sha512-veTnRzkb6aPHOvSKIOy60KzURfBdUflr5VReI+NSaPL6xf+XLdONQgZgpYvUuZLVQ8dCqxpBAudaOM1+KpAUxw==}
+ engines: {bare: '>=1.16.0'}
+ peerDependencies:
+ bare-buffer: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+
+ bare-os@3.6.2:
+ resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==}
+ engines: {bare: '>=1.14.0'}
+
+ bare-path@3.0.0:
+ resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
+
+ bare-stream@2.7.0:
+ resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==}
+ peerDependencies:
+ bare-buffer: '*'
+ bare-events: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+ bare-events:
+ optional: true
+
+ bare-url@2.3.2:
+ resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==}
+
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ base64id@2.0.0:
+ resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==}
+ engines: {node: ^4.5.0 || >= 5.9}
+
+ baseline-browser-mapping@2.9.17:
+ resolution: {integrity: sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==}
+ hasBin: true
+
+ basic-ftp@5.1.0:
+ resolution: {integrity: sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==}
+ engines: {node: '>=10.0.0'}
+
bcrypt-pbkdf@1.0.2:
resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
@@ -2698,6 +3640,10 @@ packages:
before-after-hook@4.0.0:
resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==}
+ better-opn@3.0.2:
+ resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==}
+ engines: {node: '>=12.0.0'}
+
bidi-js@1.0.3:
resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==}
@@ -2717,6 +3663,10 @@ packages:
bn.js@5.2.2:
resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==}
+ body-parser@1.20.1:
+ resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
body-parser@1.20.3:
resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
@@ -2763,6 +3713,14 @@ packages:
browserify-zlib@0.2.0:
resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==}
+ browserslist@4.28.1:
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ buffer-crc32@0.2.13:
+ resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
+
buffer-crc32@1.0.0:
resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
engines: {node: '>=8.0.0'}
@@ -2803,6 +3761,14 @@ packages:
resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==}
engines: {node: '>=10.6.0'}
+ cacheable-lookup@7.0.0:
+ resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
+ engines: {node: '>=14.16'}
+
+ cacheable-request@10.2.14:
+ resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==}
+ engines: {node: '>=14.16'}
+
cacheable-request@7.0.2:
resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==}
engines: {node: '>=8'}
@@ -2823,6 +3789,13 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
+ camelcase-css@2.0.1:
+ resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
+ engines: {node: '>= 6'}
+
+ caniuse-lite@1.0.30001766:
+ resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==}
+
canvas@2.11.2:
resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==}
engines: {node: '>=6'}
@@ -2849,6 +3822,14 @@ packages:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
+ chalk@5.2.0:
+ resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ chalk@5.3.0:
+ resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
chalk@5.6.2:
resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
@@ -2866,10 +3847,20 @@ packages:
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==}
+
check-error@2.1.1:
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
engines: {node: '>= 16'}
+ chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+
chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
@@ -2885,6 +3876,11 @@ packages:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
engines: {node: '>=10'}
+ chromium-bidi@0.6.2:
+ resolution: {integrity: sha512-4WVBa6ijmUTVr9cZD4eicQD8Mdy/HCX3bzEIYYpmk0glqYLoWH+LqQEvV9RpDRzoQSbY1KJHloYXbDMXMbDPhg==}
+ peerDependencies:
+ devtools-protocol: '*'
+
ci-info@3.9.0:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
@@ -2897,10 +3893,22 @@ packages:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
engines: {node: '>=6'}
+ clean-stack@4.2.0:
+ resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==}
+ engines: {node: '>=12'}
+
clean-stack@5.3.0:
resolution: {integrity: sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==}
engines: {node: '>=14.16'}
+ cli-boxes@3.0.0:
+ resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
+ engines: {node: '>=10'}
+
+ cli-cursor@4.0.0:
+ resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
cli-cursor@5.0.0:
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
engines: {node: '>=18'}
@@ -2910,14 +3918,26 @@ packages:
engines: {node: '>=8.0.0', npm: '>=5.0.0'}
hasBin: true
+ cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+ engines: {node: '>=6'}
+
cli-table3@0.6.5:
resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==}
engines: {node: 10.* || >= 12.*}
+ 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'}
+
clipanion@4.0.0-rc.4:
resolution: {integrity: sha512-CXkMQxU6s9GklO/1f714dkKBMu1lopS1WFF0B8o4AxPykR1hpozxSiUZ5ZUeBjfPgCWqbcNOtZVFhB8Lkfp1+Q==}
peerDependencies:
@@ -2933,8 +3953,19 @@ packages:
clone-response@1.0.3:
resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
- color-convert@1.9.3:
- resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+ code-excerpt@4.0.0:
+ resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ collapse-white-space@2.1.0:
+ resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
+
+ color-blend@4.0.0:
+ resolution: {integrity: sha512-fYODTHhI/NG+B5GnzvuL3kiFrK/UnkUezWFTgEPBTY5V+kpyfAn95Vn9sJeeCX6omrCOdxnqCL3CvH+6sXtIbw==}
+ engines: {node: '>=10.0.0'}
+
+ color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
@@ -2946,6 +3977,9 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ color-string@1.9.1:
+ resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
+
color-support@1.1.3:
resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
hasBin: true
@@ -2953,6 +3987,10 @@ packages:
color2k@2.0.3:
resolution: {integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==}
+ color@4.2.3:
+ resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
+ engines: {node: '>=12.5.0'}
+
colorette@1.4.0:
resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==}
@@ -2978,6 +4016,10 @@ packages:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
+ commander@8.3.0:
+ resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+ engines: {node: '>= 12'}
+
comment-parser@1.4.1:
resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==}
engines: {node: '>= 12.0.0'}
@@ -3069,9 +4111,24 @@ packages:
resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==}
engines: {node: '>=12'}
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ convert-to-spaces@2.0.1:
+ resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
cookie-signature@1.0.6:
resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+ cookie@0.4.2:
+ resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
+ engines: {node: '>= 0.6'}
+
+ cookie@0.5.0:
+ resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
+ engines: {node: '>= 0.6'}
+
cookie@0.7.1:
resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
engines: {node: '>= 0.6'}
@@ -3165,6 +4222,10 @@ packages:
resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
engines: {node: '>= 12'}
+ data-uri-to-buffer@6.0.2:
+ resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==}
+ engines: {node: '>= 14'}
+
data-urls@6.0.0:
resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==}
engines: {node: '>=20'}
@@ -3211,6 +4272,15 @@ packages:
supports-color:
optional: true
+ debug@4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
debug@4.4.1:
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
engines: {node: '>=6.0'}
@@ -3232,6 +4302,14 @@ packages:
decimal.js@10.6.0:
resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
+ decode-bmp@0.2.1:
+ resolution: {integrity: sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA==}
+ engines: {node: '>=8.6.0'}
+
+ decode-ico@0.4.1:
+ resolution: {integrity: sha512-69NZfbKIzux1vBOd31al3XnMnH+2mqDhEgLdpygErm4d60N+UwA5Sq5WFjmEDQzumgB9fElojGwWG0vybVfFmA==}
+ engines: {node: '>=8.6'}
+
decode-named-character-reference@1.2.0:
resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
@@ -3270,6 +4348,10 @@ packages:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
+ degenerator@5.0.1:
+ resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==}
+ engines: {node: '>= 14'}
+
del@6.1.1:
resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==}
engines: {node: '>=10'}
@@ -3285,6 +4367,10 @@ packages:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
+ dependency-graph@0.11.0:
+ resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==}
+ engines: {node: '>= 0.6.0'}
+
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
@@ -3300,9 +4386,26 @@ packages:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
+ detect-node-es@1.1.0:
+ resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+
+ detect-port@1.5.1:
+ resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==}
+ hasBin: true
+
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ devtools-protocol@0.0.1312386:
+ resolution: {integrity: sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==}
+
+ didyoumean@1.2.2:
+ resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
+
+ diff@5.2.2:
+ resolution: {integrity: sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==}
+ engines: {node: '>=0.3.1'}
+
diff@8.0.2:
resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==}
engines: {node: '>=0.3.1'}
@@ -3314,10 +4417,30 @@ packages:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
+ dlv@1.1.3:
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+
+ dns-packet@5.6.1:
+ resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==}
+ engines: {node: '>=6'}
+
+ dns-socket@4.2.2:
+ resolution: {integrity: sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==}
+ engines: {node: '>=6'}
+
+ doctrine-temporary-fork@2.1.0:
+ resolution: {integrity: sha512-nliqOv5NkE4zMON4UA6AMJE6As35afs8aYXATpU4pTUdIKiARZwrJVEP1boA3Rx1ZXHVkwxkhcq4VkqvsuRLsA==}
+ engines: {node: '>=0.10.0'}
+
doctrine@2.1.0:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
engines: {node: '>=0.10.0'}
+ documentation@14.0.3:
+ resolution: {integrity: sha512-B7cAviVKN9Rw7Ofd+9grhVuxiHwly6Ieh+d/ceMw8UdBOv/irkuwnDEJP8tq0wgdLJDUVuIkovV+AX9mTrZFxg==}
+ engines: {node: '>=14'}
+ hasBin: true
+
domain-browser@4.22.0:
resolution: {integrity: sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==}
engines: {node: '>=10'}
@@ -3353,6 +4476,9 @@ packages:
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+ electron-to-chromium@1.5.278:
+ resolution: {integrity: sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==}
+
elliptic@6.6.1:
resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==}
@@ -3379,6 +4505,14 @@ packages:
end-of-stream@1.4.5:
resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+ engine.io-parser@5.2.3:
+ resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
+ engines: {node: '>=10.0.0'}
+
+ engine.io@6.5.5:
+ resolution: {integrity: sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==}
+ engines: {node: '>=10.2.0'}
+
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
@@ -3411,6 +4545,10 @@ packages:
resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==}
engines: {node: '>= 0.4'}
+ es-aggregate-error@1.0.14:
+ resolution: {integrity: sha512-3YxX6rVb07B5TV11AV5wsL7nQCHXNwoHPsQC8S4AmBiqYhyNCJ5BRKXkXyDJvs8QzXN20NgRtxe3dEEQD9NLHA==}
+ engines: {node: '>= 0.4'}
+
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
@@ -3438,6 +4576,15 @@ packages:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'}
+ es-toolkit@1.44.0:
+ resolution: {integrity: sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==}
+
+ 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'}
@@ -3459,6 +4606,10 @@ packages:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
+ escape-string-regexp@2.0.0:
+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+ engines: {node: '>=8'}
+
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
@@ -3467,6 +4618,11 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
+ escodegen@2.1.0:
+ resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
+ engines: {node: '>=6.0'}
+ hasBin: true
+
eslint-config-prettier@9.1.2:
resolution: {integrity: sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==}
hasBin: true
@@ -3574,6 +4730,11 @@ packages:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ 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'}
@@ -3586,6 +4747,24 @@ packages:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
+ 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==}
+
+ estree-util-is-identifier-name@3.0.0:
+ resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
+
+ 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-visit@2.0.0:
+ resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
+
estree-walker@2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
@@ -3646,6 +4825,10 @@ packages:
express-rate-limit@5.5.1:
resolution: {integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==}
+ express@4.18.2:
+ resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
+ engines: {node: '>= 0.10.0'}
+
express@4.21.2:
resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
engines: {node: '>= 0.10.0'}
@@ -3656,6 +4839,11 @@ packages:
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+ extract-zip@2.0.1:
+ resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
+ engines: {node: '>= 10.17.0'}
+ hasBin: true
+
extsprintf@1.3.0:
resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==}
engines: {'0': node >=0.6.0}
@@ -3679,12 +4867,25 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ fast-memoize@2.5.2:
+ resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==}
+
fast-uri@3.1.0:
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
fastq@1.19.1:
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+ fault@2.0.1:
+ resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==}
+
+ favicons@7.2.0:
+ resolution: {integrity: sha512-k/2rVBRIRzOeom3wI9jBPaSEvoTSQEW4iM0EveBmBBKFxO8mSyyRWtDlfC3VnEfu0avmjrMzy8/ZFPSe6F71Hw==}
+ engines: {node: '>=14.0.0'}
+
+ fd-slicer@1.1.0:
+ resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
+
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
@@ -3718,6 +4919,10 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
+ finalhandler@1.2.0:
+ resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
+ engines: {node: '>= 0.8'}
+
finalhandler@1.3.1:
resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
engines: {node: '>= 0.8'}
@@ -3734,6 +4939,10 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
+ find-up@6.3.0:
+ resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
find-up@7.0.0:
resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
engines: {node: '>=18'}
@@ -3755,6 +4964,15 @@ packages:
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
+ follow-redirects@1.15.11:
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
for-each@0.3.5:
resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines: {node: '>= 0.4'}
@@ -3769,10 +4987,18 @@ packages:
form-data-encoder@1.7.2:
resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==}
+ form-data-encoder@2.1.4:
+ resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
+ engines: {node: '>= 14.17'}
+
form-data@4.0.5:
resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
engines: {node: '>= 6'}
+ format@0.2.2:
+ resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
+ engines: {node: '>=0.4.x'}
+
formdata-polyfill@4.0.10:
resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
engines: {node: '>=12.20.0'}
@@ -3788,6 +5014,9 @@ packages:
from2@2.3.0:
resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
+ front-matter@4.0.2:
+ resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==}
+
fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
@@ -3795,6 +5024,18 @@ packages:
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
engines: {node: '>=12'}
+ fs-extra@11.1.0:
+ resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==}
+ engines: {node: '>=14.14'}
+
+ fs-extra@11.1.1:
+ resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==}
+ engines: {node: '>=14.14'}
+
+ fs-extra@11.2.0:
+ resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
+ engines: {node: '>=14.14'}
+
fs-extra@11.3.2:
resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==}
engines: {node: '>=14.14'}
@@ -3839,10 +5080,17 @@ packages:
engines: {node: '>=10'}
deprecated: This package is no longer supported.
+ gcd@0.0.1:
+ resolution: {integrity: sha512-VNx3UEGr+ILJTiMs1+xc5SX1cMgJCrXezKPa003APUWNqQqaF6n25W8VcR7nHN6yRWbvvUTwCpZCFJeWC2kXlw==}
+
generator-function@2.0.1:
resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
engines: {node: '>= 0.4'}
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
@@ -3855,6 +5103,10 @@ packages:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
+ get-nonce@1.0.1:
+ resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
+ engines: {node: '>=6'}
+
get-proto@1.0.1:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
@@ -3886,6 +5138,10 @@ packages:
get-tsconfig@4.13.0:
resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==}
+ get-uri@6.0.5:
+ resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==}
+ engines: {node: '>= 14'}
+
getpass@0.1.7:
resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
@@ -3900,9 +5156,21 @@ packages:
engines: {node: '>=16'}
hasBin: true
+ git-up@7.0.0:
+ resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==}
+
+ git-url-parse@13.1.1:
+ resolution: {integrity: sha512-PCFJyeSSdtnbfhSNRw9Wk96dDCNx+sogTe4YNXeXSJxt7xz5hvXekuRn9JX7m+Mf4OscCu8h+mtAl3+h5Fo8lQ==}
+
github-from-package@0.0.0:
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
+ github-slugger@1.4.0:
+ resolution: {integrity: sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==}
+
+ 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'}
@@ -3919,10 +5187,18 @@ packages:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
global-directory@4.0.1:
resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
engines: {node: '>=18'}
+ globals-docs@2.4.1:
+ resolution: {integrity: sha512-qpPnUKkWnz8NESjrCvnlGklsgiQzlq+rcCxoG5uNQ+dNA7cFMCmn231slLAwS2N/PlkzZ3COL8CcS10jXmLHqg==}
+
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -3947,6 +5223,14 @@ packages:
resolution: {integrity: sha512-Uas6lAsP8bRCt5WXGMhjFf/qEHTrm4v4qxGR02rLG2kdG9qedctvlkdwXVcDJ7Cs84X+r4dPU7vdwGjCaspXug==}
engines: {node: '>=12'}
+ got@12.6.1:
+ resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==}
+ engines: {node: '>=14.16'}
+
+ got@13.0.0:
+ resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==}
+ engines: {node: '>=16'}
+
graceful-fs@4.2.10:
resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
@@ -4014,9 +5298,18 @@ packages:
hast-util-embedded@3.0.0:
resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==}
+ hast-util-from-dom@5.0.1:
+ resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==}
+
+ hast-util-from-html-isomorphic@2.0.0:
+ resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==}
+
hast-util-from-html@2.0.3:
resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==}
+ hast-util-from-parse5@7.1.2:
+ resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==}
+
hast-util-from-parse5@8.0.3:
resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==}
@@ -4032,24 +5325,60 @@ packages:
hast-util-minify-whitespace@1.0.1:
resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==}
+ hast-util-parse-selector@3.1.1:
+ resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==}
+
hast-util-parse-selector@4.0.0:
resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
hast-util-phrasing@3.0.1:
resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==}
+ hast-util-raw@7.2.3:
+ resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==}
+
+ hast-util-sanitize@4.1.0:
+ resolution: {integrity: sha512-Hd9tU0ltknMGRDv+d6Ro/4XKzBqQnP/EZrpiTbpFYfXv/uOhWeKc+2uajcbEvAEH98VZd7eII2PiXm13RihnLw==}
+
+ hast-util-to-estree@3.1.3:
+ resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==}
+
+ hast-util-to-html@8.0.4:
+ resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==}
+
+ hast-util-to-html@9.0.4:
+ resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==}
+
hast-util-to-html@9.0.5:
resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
+ hast-util-to-jsx-runtime@2.3.6:
+ resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==}
+
+ hast-util-to-mdast@10.1.0:
+ resolution: {integrity: sha512-DsL/SvCK9V7+vfc6SLQ+vKIyBDXTk2KLSbfBYkH4zeF/uR1yBajHRhkzuaUSGOB1WJSTieJBdHwxlC+HLKvZZw==}
+
hast-util-to-mdast@10.1.2:
resolution: {integrity: sha512-FiCRI7NmOvM4y+f5w32jPRzcxDIz+PUqDwEqn1A+1q2cdp3B8Gx7aVrXORdOKjMNDQsD1ogOr896+0jJHW1EFQ==}
+ hast-util-to-parse5@7.1.0:
+ resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==}
+
+ hast-util-to-string@3.0.1:
+ resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==}
+
hast-util-to-text@4.0.2:
resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==}
+ hast-util-whitespace@2.0.1:
+ resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
+
hast-util-whitespace@3.0.0:
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+ hastscript@7.2.0:
+ resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==}
+
hastscript@9.0.1:
resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==}
@@ -4057,6 +5386,10 @@ packages:
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin: true
+ hex-rgb@5.0.0:
+ resolution: {integrity: sha512-NQO+lgVUCtHxZ792FodgW0zflK+ozS9X9dwGp9XvvmPlH7pyxd588cn24TD3rmPm/N0AIRXF10Otah8yKqGw4w==}
+ engines: {node: '>=12'}
+
highlight.js@10.7.3:
resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==}
@@ -4074,6 +5407,10 @@ packages:
hosted-git-info@2.8.9:
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
+ hosted-git-info@4.1.0:
+ resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
+ engines: {node: '>=10'}
+
hosted-git-info@7.0.2:
resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==}
engines: {node: ^16.14.0 || >=18.0.0}
@@ -4089,6 +5426,9 @@ packages:
html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
+ html-void-elements@2.0.1:
+ resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==}
+
html-void-elements@3.0.0:
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
@@ -4142,6 +5482,9 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ ico-endec@0.1.6:
+ resolution: {integrity: sha512-ZdLU38ZoED3g1j3iEyzcQj+wAkY2xfWNkymszfJPoxucIUhK7NayQ+/C4Kv0nDFMIsbtbEHldv3V8PU494/ueQ==}
+
iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -4150,6 +5493,10 @@ packages:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
+ iconv-lite@0.7.2:
+ resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==}
+ engines: {node: '>=0.10.0'}
+
ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
@@ -4170,6 +5517,9 @@ packages:
immediate@3.0.6:
resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
+ immer@9.0.21:
+ resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==}
+
import-fresh@3.3.1:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
@@ -4211,10 +5561,43 @@ packages:
ini@1.3.8:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ ini@3.0.1:
+ resolution: {integrity: sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+
ini@4.1.1:
resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ ink-spinner@5.0.0:
+ resolution: {integrity: sha512-EYEasbEjkqLGyPOUc8hBJZNuC5GvXGMLu0w5gdTNskPc7Izc5vO3tdQEYnzvshucyGCBXc86ig0ujXPMWaQCdA==}
+ engines: {node: '>=14.16'}
+ peerDependencies:
+ ink: '>=4.0.0'
+ react: '>=18.0.0'
+
+ ink@6.3.0:
+ resolution: {integrity: sha512-2CbJAa7XeziZYe6pDS5RVLirRY28iSGMQuEV8jRU5NQsONQNfcR/BZHHc9vkMg2lGYTHTM2pskxC1YmY28p6bQ==}
+ engines: {node: '>=20'}
+ peerDependencies:
+ '@types/react': '>=19.0.0'
+ react: '>=19.0.0'
+ react-devtools-core: ^4.19.1
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ react-devtools-core:
+ optional: true
+
+ inline-style-parser@0.2.7:
+ resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
+
+ inquirer@12.3.0:
+ resolution: {integrity: sha512-3NixUXq+hM8ezj2wc7wC37b32/rHq1MwNZDYdvx+d6jokOD+r+i8Q4Pkylh9tISYP114A128LCX8RKhopC5RfQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+
internal-slot@1.1.0:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
@@ -4223,10 +5606,28 @@ packages:
resolution: {integrity: sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==}
engines: {node: '>=12'}
+ ip-address@10.1.0:
+ resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
+ engines: {node: '>= 12'}
+
+ ip-regex@4.3.0:
+ resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==}
+ engines: {node: '>=8'}
+
ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
+ is-absolute@1.0.0:
+ resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==}
+ engines: {node: '>=0.10.0'}
+
+ is-alphabetical@2.0.1:
+ resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
+
+ is-alphanumerical@2.0.1:
+ resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+
is-arguments@1.2.0:
resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
engines: {node: '>= 0.4'}
@@ -4238,6 +5639,9 @@ packages:
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+ is-arrayish@0.3.4:
+ resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==}
+
is-async-function@2.1.1:
resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
engines: {node: '>= 0.4'}
@@ -4254,6 +5658,10 @@ packages:
resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
engines: {node: '>= 0.4'}
+ is-buffer@2.0.5:
+ resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
+ engines: {node: '>=4'}
+
is-bun-module@2.0.0:
resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==}
@@ -4273,6 +5681,9 @@ packages:
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines: {node: '>= 0.4'}
+ is-decimal@2.0.1:
+ resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
+
is-deflate@1.0.0:
resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==}
@@ -4293,6 +5704,10 @@ packages:
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.1.0:
resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
engines: {node: '>=18'}
@@ -4309,6 +5724,18 @@ packages:
resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==}
engines: {node: '>=0.10.0'}
+ is-hexadecimal@2.0.1:
+ resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+
+ is-in-ci@2.0.0:
+ resolution: {integrity: sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==}
+ engines: {node: '>=20'}
+ hasBin: true
+
+ is-ip@3.1.0:
+ resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==}
+ engines: {node: '>=8'}
+
is-map@2.0.3:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
@@ -4333,6 +5760,10 @@ packages:
resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
engines: {node: '>=8'}
+ is-online@10.0.0:
+ resolution: {integrity: sha512-WCPdKwNDjXJJmUubf2VHLMDBkUZEtuOvpXUfUnUFbEnM6In9ByiScL4f4jKACz/fsb2qDkesFerW3snf/AYz3A==}
+ engines: {node: '>=14.16'}
+
is-path-cwd@2.2.0:
resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==}
engines: {node: '>=6'}
@@ -4359,6 +5790,10 @@ packages:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'}
+ is-relative@1.0.0:
+ resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==}
+ engines: {node: '>=0.10.0'}
+
is-set@2.0.3:
resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
engines: {node: '>= 0.4'}
@@ -4367,6 +5802,9 @@ packages:
resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
engines: {node: '>= 0.4'}
+ is-ssh@1.4.1:
+ resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==}
+
is-stream@2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
@@ -4398,6 +5836,10 @@ packages:
is-typedarray@1.0.0:
resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
+ is-unc-path@1.0.0:
+ resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==}
+ engines: {node: '>=0.10.0'}
+
is-unicode-supported@2.1.0:
resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==}
engines: {node: '>=18'}
@@ -4414,6 +5856,10 @@ packages:
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'}
+
is-wsl@2.2.0:
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
engines: {node: '>=8'}
@@ -4471,6 +5917,10 @@ packages:
resolution: {integrity: sha512-YcwCHw1kiqEeI5xRpDlPPBGL2EOpBKLwO4yIBJcXWHPj5PnA5urGq0jbyhM5KoNpypQ6VboSoxc9D8HyfvngSg==}
engines: {node: '>=18'}
+ jiti@1.21.7:
+ resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
+ hasBin: true
+
jiti@2.6.1:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
@@ -4500,6 +5950,14 @@ packages:
js-tokens@9.0.1:
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+ 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==}
+ hasBin: true
+
js-yaml@4.1.1:
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
@@ -4520,6 +5978,15 @@ packages:
canvas:
optional: true
+ jsep@1.4.0:
+ resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==}
+ engines: {node: '>= 10.16.0'}
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
@@ -4552,6 +6019,14 @@ packages:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsonc-parser@2.2.1:
+ resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==}
+
jsonfile@4.0.0:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
@@ -4565,6 +6040,15 @@ packages:
resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
engines: {'0': node >= 0.2.0}
+ jsonpath-plus@10.3.0:
+ resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ jsonpointer@5.0.1:
+ resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
+ engines: {node: '>=0.10.0'}
+
jsonwebtoken@9.0.2:
resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==}
engines: {node: '>=12', npm: '>=6'}
@@ -4582,15 +6066,37 @@ packages:
jws@3.2.3:
resolution: {integrity: sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==}
+ katex@0.16.27:
+ resolution: {integrity: sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==}
+ hasBin: true
+
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
klaw-sync@6.0.0:
resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==}
+ kleur@4.1.5:
+ resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
+ engines: {node: '>=6'}
+
kolorist@1.8.0:
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+ konan@2.1.1:
+ resolution: {integrity: sha512-7ZhYV84UzJ0PR/RJnnsMZcAbn+kLasJhVNWsu8ZyVEJYRpGA5XESQ9d/7zOa08U0Ou4cmB++hMNY/3OSV9KIbg==}
+
+ lcm@0.0.3:
+ resolution: {integrity: sha512-TB+ZjoillV6B26Vspf9l2L/vKaRY/4ep3hahcyVkCGFgsTNRUQdc24bQeNFiZeoxH0vr5+7SfNRMQuPHv/1IrQ==}
+
+ leven@3.1.0:
+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+ engines: {node: '>=6'}
+
+ leven@4.1.0:
+ resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
@@ -4603,6 +6109,10 @@ packages:
lie@3.3.0:
resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
+ lilconfig@2.1.0:
+ resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
+ engines: {node: '>=10'}
+
lilconfig@3.1.3:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
@@ -4694,6 +6204,9 @@ packages:
lodash.startcase@4.4.0:
resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
+ lodash.topath@4.5.2:
+ resolution: {integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==}
+
lodash.uniq@4.5.0:
resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
@@ -4713,6 +6226,10 @@ packages:
longest-streak@3.1.0:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+
loupe@3.2.1:
resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
@@ -4724,6 +6241,10 @@ packages:
resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
engines: {node: '>=8'}
+ lowercase-keys@3.0.0:
+ resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
@@ -4731,6 +6252,9 @@ packages:
resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==}
engines: {node: 20 || >=22}
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
lru-cache@6.0.0:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
engines: {node: '>=10'}
@@ -4757,6 +6281,14 @@ packages:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'}
+ map-cache@0.2.2:
+ resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
+ engines: {node: '>=0.10.0'}
+
+ markdown-extensions@2.0.0:
+ resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
+ engines: {node: '>=16'}
+
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
@@ -4783,42 +6315,114 @@ packages:
md5.js@1.3.5:
resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==}
+ mdast-util-definitions@5.1.2:
+ resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
+
+ mdast-util-find-and-replace@2.2.2:
+ resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==}
+
mdast-util-find-and-replace@3.0.2:
resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==}
+ mdast-util-from-markdown@1.3.1:
+ resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
+
mdast-util-from-markdown@2.0.2:
resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
+ mdast-util-frontmatter@2.0.1:
+ resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==}
+
+ mdast-util-gfm-autolink-literal@1.0.3:
+ resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==}
+
mdast-util-gfm-autolink-literal@2.0.1:
resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
+ mdast-util-gfm-footnote@1.0.2:
+ resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==}
+
mdast-util-gfm-footnote@2.1.0:
resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==}
+ mdast-util-gfm-strikethrough@1.0.3:
+ resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==}
+
mdast-util-gfm-strikethrough@2.0.0:
resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
+ mdast-util-gfm-table@1.0.7:
+ resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==}
+
mdast-util-gfm-table@2.0.0:
resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
+ mdast-util-gfm-task-list-item@1.0.2:
+ resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==}
+
mdast-util-gfm-task-list-item@2.0.0:
resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
+ mdast-util-gfm@2.0.2:
+ resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==}
+
+ mdast-util-gfm@3.0.0:
+ resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==}
+
mdast-util-gfm@3.1.0:
resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==}
+ mdast-util-inject@1.1.0:
+ resolution: {integrity: sha512-CcJ0mHa36QYumDKiZ2OIR+ClhfOM7zIzN+Wfy8tRZ1hpH9DKLCS+Mh4DyK5bCxzE9uxMWcbIpeNFWsg1zrj/2g==}
+
+ mdast-util-math@3.0.0:
+ resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==}
+
+ mdast-util-mdx-expression@2.0.1:
+ resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
+
+ mdast-util-mdx-jsx@3.1.3:
+ resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==}
+
+ mdast-util-mdx-jsx@3.2.0:
+ resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==}
+
+ mdast-util-mdx@3.0.0:
+ resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
+
+ mdast-util-mdxjs-esm@2.0.1:
+ resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
+
+ mdast-util-phrasing@3.0.1:
+ resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==}
+
mdast-util-phrasing@4.1.0:
resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
+ mdast-util-to-hast@12.3.0:
+ resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==}
+
mdast-util-to-hast@13.2.1:
resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
+ mdast-util-to-markdown@1.5.0:
+ resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==}
+
mdast-util-to-markdown@2.1.2:
resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
+ mdast-util-to-string@1.1.0:
+ resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==}
+
+ mdast-util-to-string@3.2.0:
+ resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
+
mdast-util-to-string@4.0.0:
resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
+ mdast-util-toc@6.1.1:
+ resolution: {integrity: sha512-Er21728Kow8hehecK2GZtb7Ny3omcoPUVrmObiSUwmoRYVZaXLR751QROEFjR8W/vAQdHMLj49Lz20J55XaNpw==}
+
mdn-data@2.12.2:
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
@@ -4834,6 +6438,9 @@ packages:
resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
engines: {node: '>=18'}
+ merge-descriptors@1.0.1:
+ resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
+
merge-descriptors@1.0.3:
resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
@@ -4848,87 +6455,198 @@ packages:
resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
engines: {node: '>= 0.6'}
+ micromark-core-commonmark@1.1.0:
+ resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==}
+
micromark-core-commonmark@2.0.3:
resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
+ micromark-extension-frontmatter@2.0.0:
+ resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==}
+
+ micromark-extension-gfm-autolink-literal@1.0.5:
+ resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==}
+
micromark-extension-gfm-autolink-literal@2.1.0:
resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
+ micromark-extension-gfm-footnote@1.1.2:
+ resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==}
+
micromark-extension-gfm-footnote@2.1.0:
resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
+ micromark-extension-gfm-strikethrough@1.0.7:
+ resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==}
+
micromark-extension-gfm-strikethrough@2.1.0:
resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
+ micromark-extension-gfm-table@1.0.7:
+ resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==}
+
micromark-extension-gfm-table@2.1.1:
resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==}
+ micromark-extension-gfm-tagfilter@1.0.2:
+ resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==}
+
micromark-extension-gfm-tagfilter@2.0.0:
resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
+ micromark-extension-gfm-task-list-item@1.0.5:
+ resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==}
+
micromark-extension-gfm-task-list-item@2.1.0:
resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
+ micromark-extension-gfm@2.0.3:
+ resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==}
+
micromark-extension-gfm@3.0.0:
resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
+ micromark-extension-math@3.1.0:
+ resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==}
+
+ micromark-extension-mdx-expression@3.0.1:
+ resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==}
+
+ micromark-extension-mdx-jsx@3.0.1:
+ resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==}
+
+ 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@1.1.0:
+ resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==}
+
micromark-factory-destination@2.0.1:
resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
+ micromark-factory-label@1.1.0:
+ resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==}
+
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@1.1.0:
+ resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
+
micromark-factory-space@2.0.1:
resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
+ micromark-factory-title@1.1.0:
+ resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==}
+
micromark-factory-title@2.0.1:
resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
+ micromark-factory-whitespace@1.1.0:
+ resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==}
+
micromark-factory-whitespace@2.0.1:
resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
+ micromark-util-character@1.2.0:
+ resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
+
micromark-util-character@2.1.1:
resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
+ micromark-util-chunked@1.1.0:
+ resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
+
micromark-util-chunked@2.0.1:
resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
+ micromark-util-classify-character@1.1.0:
+ resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==}
+
micromark-util-classify-character@2.0.1:
resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
+ micromark-util-combine-extensions@1.1.0:
+ resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==}
+
micromark-util-combine-extensions@2.0.1:
resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
+ micromark-util-decode-numeric-character-reference@1.1.0:
+ resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==}
+
micromark-util-decode-numeric-character-reference@2.0.2:
resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
+ micromark-util-decode-string@1.1.0:
+ resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==}
+
micromark-util-decode-string@2.0.1:
resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
+ micromark-util-encode@1.1.0:
+ resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
+
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@1.2.0:
+ resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
+
micromark-util-html-tag-name@2.0.1:
resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
+ micromark-util-normalize-identifier@1.1.0:
+ resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==}
+
micromark-util-normalize-identifier@2.0.1:
resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
+ micromark-util-resolve-all@1.1.0:
+ resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==}
+
micromark-util-resolve-all@2.0.1:
resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
+ micromark-util-sanitize-uri@1.2.0:
+ resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==}
+
micromark-util-sanitize-uri@2.0.1:
resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
+ micromark-util-subtokenize@1.1.0:
+ resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
+
micromark-util-subtokenize@2.1.0:
resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==}
+ micromark-util-symbol@1.1.0:
+ resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
+
micromark-util-symbol@2.0.1:
resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
+ micromark-util-types@1.1.0:
+ resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
+
micromark-util-types@2.0.2:
resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
+ micromark@3.2.0:
+ resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
+
micromark@4.0.2:
resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==}
@@ -4991,6 +6709,10 @@ packages:
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
engines: {node: '>=10'}
+ mimic-response@4.0.0:
+ resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
minimalistic-assert@1.0.1:
resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==}
@@ -5008,6 +6730,10 @@ packages:
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
minimatch@7.4.6:
resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==}
engines: {node: '>=10'}
@@ -5039,6 +6765,14 @@ packages:
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
engines: {node: '>= 8'}
+ mintlify@4.2.295:
+ resolution: {integrity: sha512-wRHXBSj8zAcfU4yLUHK50uu+MA+ORvR1Dii/zBQORoGCYbQwfTUyGai0gpuhXxOjvinFP+42iYKNBbtpoVIiqg==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+
mkdirp-classic@0.5.3:
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
@@ -5050,6 +6784,10 @@ packages:
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.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
@@ -5059,6 +6797,10 @@ packages:
muggle-string@0.4.1:
resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
+ 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==}
@@ -5101,9 +6843,31 @@ packages:
neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+ neotraverse@0.6.18:
+ resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==}
+ engines: {node: '>= 10'}
+
nerf-dart@1.0.0:
resolution: {integrity: sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==}
+ netmask@2.0.2:
+ resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
+ engines: {node: '>= 0.4.0'}
+
+ next-mdx-remote-client@1.1.4:
+ resolution: {integrity: sha512-psCMdO50tfoT1kAH7OGXZvhyRfiHVK6IqwjmWFV5gtLo4dnqjAgcjcLNeJ92iI26UNlKShxYrBs1GQ6UXxk97A==}
+ engines: {node: '>=18.18.0'}
+ peerDependencies:
+ react: '>= 18.3.0 < 19.0.0'
+ react-dom: '>= 18.3.0 < 19.0.0'
+
+ nimma@0.2.3:
+ resolution: {integrity: sha512-1ZOI8J+1PKKGceo/5CT5GfQOG6H8I2BencSK06YarZ2wXwH37BSSUWldqJmMJYA5JfqDqffxDXynt6f11AyKcA==}
+ engines: {node: ^12.20 || >=14.13}
+
+ nlcst-to-string@4.0.0:
+ resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==}
+
node-abi@3.85.0:
resolution: {integrity: sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==}
engines: {node: '>=10'}
@@ -5142,6 +6906,9 @@ packages:
resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+
node-stdlib-browser@1.3.1:
resolution: {integrity: sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==}
engines: {node: '>=10'}
@@ -5164,6 +6931,10 @@ packages:
normalize-package-data@2.5.0:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
+ normalize-package-data@3.0.3:
+ resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==}
+ engines: {node: '>=10'}
+
normalize-package-data@6.0.2:
resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==}
engines: {node: ^16.14.0 || >=18.0.0}
@@ -5353,6 +7124,10 @@ packages:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
+ object-hash@3.0.0:
+ resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
+ engines: {node: '>= 6'}
+
object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
@@ -5411,6 +7186,12 @@ packages:
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
engines: {node: '>=18'}
+ oniguruma-parser@0.12.1:
+ resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
+
+ oniguruma-to-es@4.3.4:
+ resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==}
+
open@7.4.2:
resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==}
engines: {node: '>=8'}
@@ -5419,6 +7200,9 @@ packages:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'}
+ openapi-types@12.1.3:
+ resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==}
+
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -5433,10 +7217,18 @@ packages:
resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
engines: {node: '>= 0.4'}
+ p-any@4.0.0:
+ resolution: {integrity: sha512-S/B50s+pAVe0wmEZHmBs/9yJXeZ5KhHzOsgKzt0hRdgkoR3DxW9ts46fcsWi/r3VnzsnkKS7q4uimze+zjdryw==}
+ engines: {node: '>=12.20'}
+
p-cancelable@2.1.1:
resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
engines: {node: '>=8'}
+ p-cancelable@3.0.0:
+ resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
+ engines: {node: '>=12.20'}
+
p-each-series@3.0.0:
resolution: {integrity: sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==}
engines: {node: '>=12'}
@@ -5493,6 +7285,14 @@ packages:
resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==}
engines: {node: '>=12'}
+ p-some@6.0.0:
+ resolution: {integrity: sha512-CJbQCKdfSX3fIh8/QKgS+9rjm7OBNUTmwWswAFQAhc8j1NR1dsEDETUEuVUtQHZpV+J03LqWBEwvu0g1Yn+TYg==}
+ engines: {node: '>=12.20'}
+
+ p-timeout@5.1.0:
+ resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==}
+ engines: {node: '>=12'}
+
p-timeout@6.1.4:
resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==}
engines: {node: '>=14.16'}
@@ -5501,6 +7301,14 @@ packages:
resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
engines: {node: '>=4'}
+ pac-proxy-agent@7.2.0:
+ resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==}
+ engines: {node: '>= 14'}
+
+ pac-resolver@7.0.1:
+ resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==}
+ engines: {node: '>= 14'}
+
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
@@ -5527,6 +7335,13 @@ packages:
parse-bmfont-xml@1.1.6:
resolution: {integrity: sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==}
+ parse-entities@4.0.2:
+ resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
+
+ parse-filepath@1.0.2:
+ resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==}
+ engines: {node: '>=0.8'}
+
parse-imports-exports@0.2.4:
resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==}
@@ -5542,13 +7357,22 @@ packages:
resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==}
engines: {node: '>=18'}
+ parse-latin@7.0.0:
+ resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==}
+
parse-ms@4.0.0:
resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==}
engines: {node: '>=18'}
+ parse-path@7.1.0:
+ resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==}
+
parse-statements@1.0.11:
resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==}
+ parse-url@8.1.0:
+ resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==}
+
parse5-htmlparser2-tree-adapter@6.0.1:
resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==}
@@ -5568,6 +7392,10 @@ packages:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
+ patch-console@2.0.0:
+ resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
patch-package@8.0.1:
resolution: {integrity: sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==}
engines: {node: '>=14', npm: '>5'}
@@ -5603,6 +7431,14 @@ packages:
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ path-root-regex@0.1.2:
+ resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==}
+ engines: {node: '>=0.10.0'}
+
+ path-root@0.1.1:
+ resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==}
+ engines: {node: '>=0.10.0'}
+
path-scurry@1.11.1:
resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines: {node: '>=16 || 14 >=14.18'}
@@ -5610,6 +7446,9 @@ packages:
path-to-regexp@0.1.12:
resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==}
+ path-to-regexp@0.1.7:
+ resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
+
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -5640,6 +7479,9 @@ packages:
peek-stream@1.1.3:
resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==}
+ pend@1.2.0:
+ resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
+
performance-now@2.1.0:
resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
@@ -5659,10 +7501,18 @@ packages:
engines: {node: '>=0.10'}
hasBin: true
+ pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+
pify@3.0.0:
resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
engines: {node: '>=4'}
+ pify@6.1.0:
+ resolution: {integrity: sha512-KocF8ve28eFjjuBKKGvzOBGzG8ew2OqOOSxTTZhirkzH7h3BI1vyzqlR0qbfcDBve1Yzo3FVlWUAtCRrbVN8Fw==}
+ engines: {node: '>=14.16'}
+
pinia@2.3.1:
resolution: {integrity: sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==}
peerDependencies:
@@ -5729,10 +7579,38 @@ packages:
resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==}
engines: {node: '>=14.19.0'}
+ pony-cause@1.1.1:
+ resolution: {integrity: sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==}
+ engines: {node: '>=12.0.0'}
+
possible-typed-array-names@1.1.0:
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
+ postcss-import@15.1.0:
+ resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ postcss: ^8.0.0
+
+ postcss-js@4.1.0:
+ resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==}
+ engines: {node: ^12 || ^14 || >= 16}
+ peerDependencies:
+ postcss: ^8.4.21
+
+ postcss-load-config@4.0.2:
+ resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
+ engines: {node: '>= 14'}
+ peerDependencies:
+ postcss: '>=8.0.9'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ postcss:
+ optional: true
+ ts-node:
+ optional: true
+
postcss-load-config@6.0.1:
resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
engines: {node: '>= 18'}
@@ -5772,6 +7650,9 @@ packages:
resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
engines: {node: '>=4'}
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
@@ -5812,6 +7693,13 @@ packages:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
+ progress@2.0.3:
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
+ engines: {node: '>=0.4.0'}
+
+ property-information@6.5.0:
+ resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
+
property-information@7.1.0:
resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==}
@@ -5860,16 +7748,30 @@ packages:
proto-list@1.2.4:
resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
+ protocols@2.0.2:
+ resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==}
+
proxy-addr@2.0.7:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
+ proxy-agent@6.5.0:
+ resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==}
+ engines: {node: '>= 14'}
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
pstree.remy@1.1.8:
resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==}
public-encrypt@4.0.3:
resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==}
+ public-ip@5.0.0:
+ resolution: {integrity: sha512-xaH3pZMni/R2BG7ZXXaWS9Wc9wFlhyDVJF47IJ+3ali0TGv+2PsckKxbmo+rnx3ZxiV2wblVhtdS3bohAP6GGw==}
+ engines: {node: ^14.13.1 || >=16.0.0}
+
pump@2.0.1:
resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==}
@@ -5886,6 +7788,20 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
+ puppeteer-core@22.14.0:
+ resolution: {integrity: sha512-rl4tOY5LcA3e374GAlsGGHc05HL3eGNf5rZ+uxkl6id9zVZKcwcp1Z+Nd6byb6WPiPeecT/dwz8f/iUm+AZQSw==}
+ engines: {node: '>=18'}
+
+ puppeteer@22.14.0:
+ resolution: {integrity: sha512-MGTR6/pM8zmWbTdazb6FKnwIihzsSEXBPH49mFFU96DNZpQOevCAZMnjBZGlZRGRzRK6aADCavR6SQtrbv5dQw==}
+ engines: {node: '>=18'}
+ deprecated: < 24.15.0 is no longer supported
+ hasBin: true
+
+ qs@6.11.0:
+ resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
+ engines: {node: '>=0.6'}
+
qs@6.13.0:
resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
engines: {node: '>=0.6'}
@@ -5921,6 +7837,10 @@ packages:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
+ raw-body@2.5.1:
+ resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
+ engines: {node: '>= 0.8'}
+
raw-body@2.5.2:
resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
engines: {node: '>= 0.8'}
@@ -5929,14 +7849,70 @@ packages:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
+ react-dom@18.3.1:
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+
+ react-reconciler@0.32.0:
+ resolution: {integrity: sha512-2NPMOzgTlG0ZWdIf3qG+dcbLSoAc/uLfOwckc3ofy5sSK0pLJqnQLpUFxvGcN2rlXSjnVtGeeFLNimCQEj5gOQ==}
+ engines: {node: '>=0.10.0'}
+ peerDependencies:
+ react: ^19.1.0
+
+ 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.2:
+ resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==}
+ 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.3:
+ resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==}
+ engines: {node: '>=0.10.0'}
+
+ read-cache@1.0.0:
+ resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+
read-package-up@11.0.0:
resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==}
engines: {node: '>=18'}
+ read-pkg-up@9.1.0:
+ resolution: {integrity: sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
read-pkg@5.2.0:
resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
engines: {node: '>=8'}
+ read-pkg@7.1.0:
+ resolution: {integrity: sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==}
+ engines: {node: '>=12.20'}
+
read-pkg@9.0.1:
resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==}
engines: {node: '>=18'}
@@ -5968,10 +7944,33 @@ packages:
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
engines: {node: '>= 12.13.0'}
+ 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==}
+
reflect.getprototypeof@1.0.10:
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines: {node: '>= 0.4'}
+ regex-recursion@6.0.2:
+ resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
+
+ regex-utilities@2.3.0:
+ resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
+
+ regex@6.1.0:
+ resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==}
+
regexp.prototype.flags@1.5.4:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
@@ -5984,24 +7983,84 @@ packages:
resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==}
engines: {node: '>=14'}
+ rehype-katex@7.0.1:
+ resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==}
+
rehype-minify-whitespace@6.0.2:
resolution: {integrity: sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw==}
rehype-parse@9.0.1:
resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==}
+ rehype-recma@1.0.0:
+ resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
+
rehype-remark@10.0.1:
resolution: {integrity: sha512-EmDndlb5NVwXGfUa4c9GPK+lXeItTilLhE6ADSaQuHr4JUlKw9MidzGzx4HpqZrNCt6vnHmEifXQiiA+CEnjYQ==}
+ rehype-stringify@10.0.1:
+ resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==}
+
+ remark-frontmatter@5.0.0:
+ resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==}
+
+ remark-gfm@3.0.1:
+ resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==}
+
+ remark-gfm@4.0.0:
+ resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
+
remark-gfm@4.0.1:
resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==}
+ remark-html@15.0.2:
+ resolution: {integrity: sha512-/CIOI7wzHJzsh48AiuIyIe1clxVkUtreul73zcCXLub0FmnevQE0UMFDQm7NUx8/3rl/4zCshlMfqBdWScQthw==}
+
+ remark-math@6.0.0:
+ resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==}
+
+ remark-mdx-remove-esm@1.2.2:
+ resolution: {integrity: sha512-YSaUwqiuJuD6S9XTAD6zmO4JJJZJgsRAdsl2drZO8/ssAVv0HXAg4vkSgHZAP46ORh8ERPFQrC7JWlbkwBwu1A==}
+ peerDependencies:
+ unified: ^11
+
+ remark-mdx@3.0.1:
+ resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==}
+
+ remark-mdx@3.1.0:
+ resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==}
+
+ remark-parse@10.0.2:
+ resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==}
+
remark-parse@11.0.0:
resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
+ remark-reference-links@6.0.1:
+ resolution: {integrity: sha512-34wY2C6HXSuKVTRtyJJwefkUD8zBOZOSHFZ4aSTnU2F656gr9WeuQ2dL6IJDK3NPd2F6xKF2t4XXcQY9MygAXg==}
+
+ remark-rehype@11.1.1:
+ resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==}
+
+ remark-smartypants@3.0.2:
+ resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==}
+ engines: {node: '>=16.0.0'}
+
+ remark-stringify@10.0.3:
+ resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==}
+
remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
+ remark-toc@8.0.1:
+ resolution: {integrity: sha512-7he2VOm/cy13zilnOTZcyAoyoolV26ULlon6XyCFU+vG54Z/LWJnwphj/xKIDLOt66QmJUgTyUvLVHi2aAElyg==}
+
+ remark@14.0.3:
+ resolution: {integrity: sha512-bfmJW1dmR2LvaMJuAnE88pZP9DktIFYXazkTfOIKZzi3Knk9lT0roItIA24ydOucI3bV/g/tXBA6hzqq3FV9Ew==}
+
+ 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'}
@@ -6032,10 +8091,30 @@ packages:
responselike@2.0.1:
resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
+ responselike@3.0.0:
+ resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
+ engines: {node: '>=14.16'}
+
+ restore-cursor@4.0.0:
+ resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
restore-cursor@5.1.0:
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
engines: {node: '>=18'}
+ retext-latin@4.0.0:
+ resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==}
+
+ retext-smartypants@6.2.0:
+ resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==}
+
+ retext-stringify@4.0.0:
+ resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==}
+
+ retext@9.0.0:
+ resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==}
+
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -6077,12 +8156,20 @@ packages:
rope-sequence@1.3.4:
resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==}
+ run-async@3.0.0:
+ resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==}
+ engines: {node: '>=0.12.0'}
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
rxjs@7.8.2:
resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
+ sade@1.8.1:
+ resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
+ engines: {node: '>=6'}
+
safe-array-concat@1.1.3:
resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
engines: {node: '>=0.4'}
@@ -6101,6 +8188,9 @@ packages:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'}
+ safe-stable-stringify@1.1.1:
+ resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==}
+
safe-stable-stringify@2.5.0:
resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
engines: {node: '>=10'}
@@ -6115,6 +8205,12 @@ packages:
resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
engines: {node: '>=v12.22.7'}
+ scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
+ scheduler@0.26.0:
+ resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
+
seemly@0.3.10:
resolution: {integrity: sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==}
@@ -6167,10 +8263,22 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ send@0.18.0:
+ resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
+ engines: {node: '>= 0.8.0'}
+
send@0.19.0:
resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
engines: {node: '>= 0.8.0'}
+ serialize-error@12.0.0:
+ resolution: {integrity: sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==}
+ engines: {node: '>=18'}
+
+ serve-static@1.15.0:
+ resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
+ engines: {node: '>= 0.8.0'}
+
serve-static@1.16.2:
resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
engines: {node: '>= 0.8.0'}
@@ -6201,6 +8309,13 @@ packages:
engines: {node: '>= 0.10'}
hasBin: true
+ sharp-ico@0.1.5:
+ resolution: {integrity: sha512-a3jODQl82NPp1d5OYb0wY+oFaPk7AvyxipIowCHk7pBsZCWgbe0yAkU2OOXdoH0ENyANhyOQbs9xkAiRHcF02Q==}
+
+ sharp@0.33.5:
+ resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -6213,6 +8328,9 @@ packages:
resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
engines: {node: '>= 0.4'}
+ shiki@3.21.0:
+ resolution: {integrity: sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w==}
+
side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
engines: {node: '>= 0.4'}
@@ -6246,12 +8364,19 @@ packages:
simple-concat@1.0.1:
resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
+ simple-eval@1.0.1:
+ resolution: {integrity: sha512-LH7FpTAkeD+y5xQC4fzS+tFtaNlvt3Ib1zKzvhjv/Y+cioV4zIuw4IZr2yhRLu67CWL7FR9/6KXKnjRoZTvGGQ==}
+ engines: {node: '>=12'}
+
simple-get@3.1.1:
resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==}
simple-get@4.0.1:
resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
+ simple-swizzle@0.2.4:
+ resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==}
+
simple-update-notifier@2.0.0:
resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==}
engines: {node: '>=10'}
@@ -6272,10 +8397,37 @@ 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.2:
resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==}
engines: {node: '>=18'}
+ smart-buffer@4.2.0:
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
+
+ socket.io-adapter@2.5.6:
+ resolution: {integrity: sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ==}
+
+ socket.io-parser@4.2.5:
+ resolution: {integrity: sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==}
+ engines: {node: '>=10.0.0'}
+
+ socket.io@4.7.2:
+ resolution: {integrity: sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==}
+ engines: {node: '>=10.2.0'}
+
+ socks-proxy-agent@8.0.5:
+ resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
+ engines: {node: '>= 14'}
+
+ socks@2.8.7:
+ resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
+ engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
+
sonic-boom@3.8.1:
resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==}
@@ -6334,6 +8486,10 @@ packages:
resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==}
engines: {node: '>=12.0.0'}
+ stack-utils@2.0.6:
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
+ engines: {node: '>=10'}
+
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
@@ -6439,6 +8595,10 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
+ strip-json-comments@5.0.3:
+ resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==}
+ engines: {node: '>=14.16'}
+
strip-literal@3.1.0:
resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
@@ -6446,6 +8606,12 @@ packages:
resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==}
engines: {node: '>=10'}
+ style-to-js@1.1.21:
+ resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==}
+
+ style-to-object@1.0.14:
+ resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==}
+
sucrase@3.35.1:
resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -6467,6 +8633,10 @@ packages:
resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
engines: {node: '>=10'}
+ supports-color@9.4.0:
+ resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==}
+ engines: {node: '>=12'}
+
supports-hyperlinks@3.2.0:
resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==}
engines: {node: '>=14.18'}
@@ -6478,9 +8648,17 @@ packages:
symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
+ tailwindcss@3.4.4:
+ resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
tar-fs@2.1.4:
resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==}
+ tar-fs@3.1.1:
+ resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==}
+
tar-stream@2.2.0:
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
engines: {node: '>=6'}
@@ -6488,9 +8666,15 @@ packages:
tar-stream@3.1.7:
resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
+ tar@6.1.15:
+ resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==}
+ engines: {node: '>=10'}
+ deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me
+
tar@6.2.1:
resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
engines: {node: '>=10'}
+ deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me
temp-dir@2.0.0:
resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
@@ -6597,6 +8781,9 @@ packages:
resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==}
engines: {node: '>= 0.4'}
+ to-data-view@1.1.0:
+ resolution: {integrity: sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==}
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -6660,6 +8847,9 @@ packages:
tsconfig-paths@3.15.0:
resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+ tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
@@ -6696,6 +8886,14 @@ packages:
tweetnacl@0.14.5:
resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
+ twoslash-protocol@0.3.6:
+ resolution: {integrity: sha512-FHGsJ9Q+EsNr5bEbgG3hnbkvEBdW5STgPU824AHUjB4kw0Dn4p8tABT7Ncg1Ie6V0+mDg3Qpy41VafZXcQhWMA==}
+
+ twoslash@0.3.6:
+ resolution: {integrity: sha512-VuI5OKl+MaUO9UIW3rXKoPgHI3X40ZgB/j12VY6h98Ae1mCBihjPvhOPeJWlxCYcmSbmeZt5ZKkK0dsVtp+6pA==}
+ peerDependencies:
+ typescript: ^5.5.0
+
typanion@3.14.0:
resolution: {integrity: sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==}
@@ -6707,6 +8905,10 @@ packages:
resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
engines: {node: '>=10'}
+ type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+
type-fest@0.6.0:
resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
engines: {node: '>=8'}
@@ -6772,6 +8974,13 @@ packages:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
+ unbzip2-stream@1.4.3:
+ resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==}
+
+ unc-path-regex@0.1.2:
+ resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==}
+ engines: {node: '>=0.10.0'}
+
undefsafe@2.0.5:
resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==}
@@ -6793,6 +9002,9 @@ packages:
resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
engines: {node: '>=18'}
+ unified@10.1.2:
+ resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
+
unified@11.0.5:
resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
@@ -6804,21 +9016,66 @@ packages:
resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==}
engines: {node: '>=12'}
+ unist-builder@3.0.1:
+ resolution: {integrity: sha512-gnpOw7DIpCA0vpr6NqdPvTWnlPTApCTRzr+38E6hCWx3rz/cjo83SsKIlS1Z+L5ttScQ2AwutNnb8+tAvpb6qQ==}
+
+ unist-builder@4.0.0:
+ resolution: {integrity: sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==}
+
unist-util-find-after@5.0.0:
resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==}
+ unist-util-generated@2.0.1:
+ resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
+
+ unist-util-is@5.2.1:
+ resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
+
unist-util-is@6.0.1:
resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
+ unist-util-map@4.0.0:
+ resolution: {integrity: sha512-HJs1tpkSmRJUzj6fskQrS5oYhBYlmtcvy4SepdDEEsL04FjBrgF0Mgggvxc1/qGBGgW7hRh9+UBK1aqTEnBpIA==}
+
+ unist-util-modify-children@4.0.0:
+ resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==}
+
+ unist-util-position-from-estree@2.0.0:
+ resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
+
+ unist-util-position@4.0.4:
+ resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==}
+
unist-util-position@5.0.0:
resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
- unist-util-stringify-position@4.0.0:
+ unist-util-remove-position@5.0.0:
+ resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
+
+ unist-util-remove@4.0.0:
+ resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==}
+
+ unist-util-stringify-position@3.0.3:
+ resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
+
+ unist-util-stringify-position@4.0.0:
resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+ unist-util-visit-children@3.0.0:
+ resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==}
+
+ unist-util-visit-parents@5.1.3:
+ resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+
+ unist-util-visit-parents@6.0.1:
+ resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+
unist-util-visit-parents@6.0.2:
resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
+ unist-util-visit@4.1.2:
+ resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+
unist-util-visit@5.0.0:
resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
@@ -6843,9 +9100,18 @@ packages:
unrs-resolver@1.11.1:
resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ urijs@1.19.11:
+ resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==}
+
url-join@5.0.0:
resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -6854,6 +9120,29 @@ packages:
resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==}
engines: {node: '>= 0.4'}
+ urlpattern-polyfill@10.0.0:
+ resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==}
+
+ 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
+
+ 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
+
utif2@4.1.0:
resolution: {integrity: sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==}
@@ -6863,10 +9152,18 @@ packages:
util@0.12.5:
resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+ utility-types@3.11.0:
+ resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==}
+ engines: {node: '>= 4'}
+
utils-merge@1.0.1:
resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
engines: {node: '>= 0.4.0'}
+ uuid@11.1.0:
+ resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
+ hasBin: true
+
uuid@8.3.2:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
hasBin: true
@@ -6875,6 +9172,11 @@ packages:
resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
hasBin: true
+ uvu@0.5.6:
+ resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
@@ -6908,12 +9210,33 @@ packages:
resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
engines: {'0': node >=0.6.0}
+ vfile-location@4.1.0:
+ resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==}
+
vfile-location@5.0.3:
resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==}
+ vfile-matter@5.0.1:
+ resolution: {integrity: sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==}
+
+ vfile-message@3.1.4:
+ resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
+
vfile-message@4.0.3:
resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
+ vfile-reporter@7.0.5:
+ resolution: {integrity: sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==}
+
+ vfile-sort@3.0.1:
+ resolution: {integrity: sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==}
+
+ vfile-statistics@2.0.1:
+ resolution: {integrity: sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==}
+
+ vfile@5.3.7:
+ resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
+
vfile@6.0.3:
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
@@ -7029,6 +9352,9 @@ packages:
'@vue/composition-api':
optional: true
+ vue-template-compiler@2.7.16:
+ resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==}
+
vue@3.5.25:
resolution: {integrity: sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==}
peerDependencies:
@@ -7069,6 +9395,7 @@ packages:
whatwg-encoding@3.1.1:
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
engines: {node: '>=18'}
+ deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation
whatwg-mimetype@4.0.0:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
@@ -7110,6 +9437,10 @@ packages:
wide-align@1.1.5:
resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
+ widest-line@5.0.0:
+ resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==}
+ engines: {node: '>=18'}
+
word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
@@ -7117,6 +9448,10 @@ packages:
wordwrap@1.0.0:
resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+ wrap-ansi@6.2.0:
+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+ engines: {node: '>=8'}
+
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines: {node: '>=10'}
@@ -7132,6 +9467,18 @@ packages:
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ ws@8.17.1:
+ resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
ws@8.18.3:
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
engines: {node: '>=10.0.0'}
@@ -7159,6 +9506,10 @@ packages:
resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==}
engines: {node: '>=4.0.0'}
+ xml2js@0.6.2:
+ resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==}
+ engines: {node: '>=4.0.0'}
+
xmlbuilder@11.0.1:
resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
engines: {node: '>=4.0'}
@@ -7196,6 +9547,9 @@ packages:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
@@ -7216,10 +9570,17 @@ packages:
resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
engines: {node: '>=10'}
+ yargs@17.7.1:
+ resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==}
+ engines: {node: '>=12'}
+
yargs@17.7.2:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
+ yauzl@2.10.0:
+ resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
+
yjs@13.6.19:
resolution: {integrity: sha512-GNKw4mEUn5yWU2QPHRx8jppxmCm9KzbBhB4qJLUJFiiYD0g/tDVgXQ7aPkyh01YO28kbs2J/BEbWBagjuWyejw==}
engines: {node: '>=16.0.0', npm: '>=8.0.0'}
@@ -7232,10 +9593,28 @@ packages:
resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
engines: {node: '>=12.20'}
+ yoctocolors-cjs@2.1.3:
+ resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
+ engines: {node: '>=18'}
+
yoctocolors@2.1.2:
resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==}
engines: {node: '>=18'}
+ yoga-layout@3.2.1:
+ resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==}
+
+ zod-to-json-schema@3.20.4:
+ resolution: {integrity: sha512-Un9+kInJ2Zt63n6Z7mLqBifzzPcOyX+b+Exuzf7L1+xqck9Q2EPByyTRduV3kmSPaXaRer1JCsucubpgL1fipg==}
+ peerDependencies:
+ zod: ^3.20.0
+
+ zod@3.21.4:
+ resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==}
+
+ zod@3.23.8:
+ resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
+
zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
@@ -7246,11 +9625,30 @@ snapshots:
'@acemir/cssom@0.9.29': {}
+ '@alcalzone/ansi-tokenize@0.2.3':
+ dependencies:
+ ansi-styles: 6.2.3
+ is-fullwidth-code-point: 5.1.0
+
+ '@alloc/quick-lru@5.2.0': {}
+
'@ampproject/remapping@2.3.0':
dependencies:
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
+ '@ark/schema@0.55.0':
+ dependencies:
+ '@ark/util': 0.55.0
+
+ '@ark/schema@0.56.0':
+ dependencies:
+ '@ark/util': 0.56.0
+
+ '@ark/util@0.55.0': {}
+
+ '@ark/util@0.56.0': {}
+
'@asamuzakjp/css-color@4.1.1':
dependencies:
'@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
@@ -7269,27 +9667,144 @@ snapshots:
'@asamuzakjp/nwsapi@2.3.9': {}
+ '@asyncapi/parser@3.4.0':
+ dependencies:
+ '@asyncapi/specs': 6.10.0
+ '@openapi-contrib/openapi-schema-to-json-schema': 3.2.0
+ '@stoplight/json': 3.21.0
+ '@stoplight/json-ref-readers': 1.2.2
+ '@stoplight/json-ref-resolver': 3.1.6
+ '@stoplight/spectral-core': 1.20.0
+ '@stoplight/spectral-functions': 1.10.1
+ '@stoplight/spectral-parsers': 1.0.5
+ '@stoplight/spectral-ref-resolver': 1.0.5
+ '@stoplight/types': 13.20.0
+ '@types/json-schema': 7.0.15
+ '@types/urijs': 1.19.26
+ ajv: 8.17.1
+ ajv-errors: 3.0.0(ajv@8.17.1)
+ ajv-formats: 2.1.1(ajv@8.17.1)
+ avsc: 5.7.9
+ js-yaml: 4.1.1
+ jsonpath-plus: 10.3.0
+ node-fetch: 2.6.7
+ transitivePeerDependencies:
+ - encoding
+
+ '@asyncapi/specs@6.10.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
'@babel/code-frame@7.27.1':
dependencies:
'@babel/helper-validator-identifier': 7.28.5
js-tokens: 4.0.0
picocolors: 1.1.1
+ '@babel/code-frame@7.28.6':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.28.6': {}
+
+ '@babel/core@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6)
+ '@babel/helpers': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3(supports-color@5.5.0)
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.28.6':
+ dependencies:
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-compilation-targets@7.28.6':
+ dependencies:
+ '@babel/compat-data': 7.28.6
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-module-imports@7.28.6':
+ dependencies:
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/helper-string-parser@7.27.1': {}
'@babel/helper-validator-identifier@7.28.5': {}
- '@babel/parser@7.28.5':
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.28.6':
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/types': 7.28.6
+
+ '@babel/parser@7.28.6':
+ dependencies:
+ '@babel/types': 7.28.6
+
+ '@babel/template@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
+
+ '@babel/traverse@7.28.6':
dependencies:
- '@babel/types': 7.28.5
+ '@babel/code-frame': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.28.6
+ '@babel/template': 7.28.6
+ '@babel/types': 7.28.6
+ debug: 4.4.3(supports-color@5.5.0)
+ transitivePeerDependencies:
+ - supports-color
- '@babel/types@7.28.5':
+ '@babel/types@7.28.6':
dependencies:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
'@bcoe/v8-coverage@1.0.2': {}
+ '@canvas/image-data@1.1.0': {}
+
'@colors/colors@1.5.0':
optional: true
@@ -7693,6 +10208,12 @@ snapshots:
'@floating-ui/core': 1.7.3
'@floating-ui/utils': 0.2.10
+ '@floating-ui/react-dom@2.1.6(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@floating-ui/dom': 1.7.4
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+
'@floating-ui/utils@0.2.10': {}
'@fontsource/inter@5.2.8': {}
@@ -7728,6 +10249,206 @@ snapshots:
'@humanwhocodes/retry@0.4.3': {}
+ '@img/sharp-darwin-arm64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.0.4
+ optional: true
+
+ '@img/sharp-darwin-x64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.0.4
+ optional: true
+
+ '@img/sharp-libvips-darwin-arm64@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-darwin-x64@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm64@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm@1.0.5':
+ optional: true
+
+ '@img/sharp-libvips-linux-s390x@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-x64@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-x64@1.0.4':
+ optional: true
+
+ '@img/sharp-linux-arm64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.0.4
+ optional: true
+
+ '@img/sharp-linux-arm@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.0.5
+ optional: true
+
+ '@img/sharp-linux-s390x@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.0.4
+ optional: true
+
+ '@img/sharp-linux-x64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.0.4
+ optional: true
+
+ '@img/sharp-linuxmusl-arm64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
+ optional: true
+
+ '@img/sharp-linuxmusl-x64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.0.4
+ optional: true
+
+ '@img/sharp-wasm32@0.33.5':
+ dependencies:
+ '@emnapi/runtime': 1.7.1
+ optional: true
+
+ '@img/sharp-win32-ia32@0.33.5':
+ optional: true
+
+ '@img/sharp-win32-x64@0.33.5':
+ optional: true
+
+ '@inquirer/ansi@1.0.2': {}
+
+ '@inquirer/checkbox@4.3.2(@types/node@22.19.2)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@22.19.2)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.19.2)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.19.2
+
+ '@inquirer/confirm@5.1.21(@types/node@22.19.2)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.2)
+ '@inquirer/type': 3.0.10(@types/node@22.19.2)
+ optionalDependencies:
+ '@types/node': 22.19.2
+
+ '@inquirer/core@10.3.2(@types/node@22.19.2)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.19.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.3
+ optionalDependencies:
+ '@types/node': 22.19.2
+
+ '@inquirer/editor@4.2.23(@types/node@22.19.2)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.2)
+ '@inquirer/external-editor': 1.0.3(@types/node@22.19.2)
+ '@inquirer/type': 3.0.10(@types/node@22.19.2)
+ optionalDependencies:
+ '@types/node': 22.19.2
+
+ '@inquirer/expand@4.0.23(@types/node@22.19.2)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.2)
+ '@inquirer/type': 3.0.10(@types/node@22.19.2)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.19.2
+
+ '@inquirer/external-editor@1.0.3(@types/node@22.19.2)':
+ dependencies:
+ chardet: 2.1.1
+ iconv-lite: 0.7.2
+ optionalDependencies:
+ '@types/node': 22.19.2
+
+ '@inquirer/figures@1.0.15': {}
+
+ '@inquirer/input@4.3.1(@types/node@22.19.2)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.2)
+ '@inquirer/type': 3.0.10(@types/node@22.19.2)
+ optionalDependencies:
+ '@types/node': 22.19.2
+
+ '@inquirer/number@3.0.23(@types/node@22.19.2)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.2)
+ '@inquirer/type': 3.0.10(@types/node@22.19.2)
+ optionalDependencies:
+ '@types/node': 22.19.2
+
+ '@inquirer/password@4.0.23(@types/node@22.19.2)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@22.19.2)
+ '@inquirer/type': 3.0.10(@types/node@22.19.2)
+ optionalDependencies:
+ '@types/node': 22.19.2
+
+ '@inquirer/prompts@7.9.0(@types/node@22.19.2)':
+ dependencies:
+ '@inquirer/checkbox': 4.3.2(@types/node@22.19.2)
+ '@inquirer/confirm': 5.1.21(@types/node@22.19.2)
+ '@inquirer/editor': 4.2.23(@types/node@22.19.2)
+ '@inquirer/expand': 4.0.23(@types/node@22.19.2)
+ '@inquirer/input': 4.3.1(@types/node@22.19.2)
+ '@inquirer/number': 3.0.23(@types/node@22.19.2)
+ '@inquirer/password': 4.0.23(@types/node@22.19.2)
+ '@inquirer/rawlist': 4.1.11(@types/node@22.19.2)
+ '@inquirer/search': 3.2.2(@types/node@22.19.2)
+ '@inquirer/select': 4.4.2(@types/node@22.19.2)
+ optionalDependencies:
+ '@types/node': 22.19.2
+
+ '@inquirer/rawlist@4.1.11(@types/node@22.19.2)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.2)
+ '@inquirer/type': 3.0.10(@types/node@22.19.2)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.19.2
+
+ '@inquirer/search@3.2.2(@types/node@22.19.2)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.2)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.19.2)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.19.2
+
+ '@inquirer/select@4.4.2(@types/node@22.19.2)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@22.19.2)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.19.2)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.19.2
+
+ '@inquirer/type@3.0.10(@types/node@22.19.2)':
+ optionalDependencies:
+ '@types/node': 22.19.2
+
'@isaacs/balanced-match@4.0.1': {}
'@isaacs/brace-expansion@5.0.0':
@@ -7939,6 +10660,11 @@ snapshots:
'@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': {}
@@ -7948,8 +10674,22 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+ '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)':
+ dependencies:
+ jsep: 1.4.0
+
+ '@jsep-plugin/regex@1.0.4(jsep@1.4.0)':
+ dependencies:
+ jsep: 1.4.0
+
+ '@jsep-plugin/ternary@1.1.4(jsep@1.4.0)':
+ dependencies:
+ jsep: 1.4.0
+
'@juggle/resize-observer@3.4.0': {}
+ '@leichtgewicht/ip-codec@2.0.5': {}
+
'@lifeomic/attempt@3.1.0': {}
'@linear/sdk@53.0.0':
@@ -7976,21 +10716,57 @@ snapshots:
- supports-color
optional: true
- '@microsoft/api-extractor-model@7.32.2(@types/node@22.19.2)':
- dependencies:
- '@microsoft/tsdoc': 0.16.0
- '@microsoft/tsdoc-config': 0.18.0
- '@rushstack/node-core-library': 5.19.1(@types/node@22.19.2)
- transitivePeerDependencies:
- - '@types/node'
-
- '@microsoft/api-extractor@7.55.2(@types/node@22.19.2)':
+ '@mdx-js/mdx@3.1.1':
dependencies:
- '@microsoft/api-extractor-model': 7.32.2(@types/node@22.19.2)
- '@microsoft/tsdoc': 0.16.0
- '@microsoft/tsdoc-config': 0.18.0
- '@rushstack/node-core-library': 5.19.1(@types/node@22.19.2)
- '@rushstack/rig-package': 0.6.0
+ '@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.0
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.1
+ 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
+
+ '@mdx-js/react@3.1.1(@types/react@19.2.9)(react@19.2.3)':
+ dependencies:
+ '@types/mdx': 2.0.13
+ '@types/react': 19.2.9
+ react: 19.2.3
+
+ '@microsoft/api-extractor-model@7.32.2(@types/node@22.19.2)':
+ dependencies:
+ '@microsoft/tsdoc': 0.16.0
+ '@microsoft/tsdoc-config': 0.18.0
+ '@rushstack/node-core-library': 5.19.1(@types/node@22.19.2)
+ transitivePeerDependencies:
+ - '@types/node'
+
+ '@microsoft/api-extractor@7.55.2(@types/node@22.19.2)':
+ dependencies:
+ '@microsoft/api-extractor-model': 7.32.2(@types/node@22.19.2)
+ '@microsoft/tsdoc': 0.16.0
+ '@microsoft/tsdoc-config': 0.18.0
+ '@rushstack/node-core-library': 5.19.1(@types/node@22.19.2)
+ '@rushstack/rig-package': 0.6.0
'@rushstack/terminal': 0.19.5(@types/node@22.19.2)
'@rushstack/ts-command-line': 5.1.5(@types/node@22.19.2)
diff: 8.0.2
@@ -8012,6 +10788,425 @@ snapshots:
'@microsoft/tsdoc@0.16.0': {}
+ '@mintlify/cli@4.0.899(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@22.19.2)(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3)':
+ dependencies:
+ '@inquirer/prompts': 7.9.0(@types/node@22.19.2)
+ '@mintlify/common': 1.0.681(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/link-rot': 3.0.838(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/models': 0.0.258
+ '@mintlify/prebuild': 1.0.816(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/previewing': 4.0.872(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3)
+ '@mintlify/validation': 0.1.567(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ adm-zip: 0.5.16
+ chalk: 5.2.0
+ color: 4.2.3
+ detect-port: 1.5.1
+ front-matter: 4.0.2
+ fs-extra: 11.2.0
+ ink: 6.3.0(@types/react@19.2.9)(react@19.2.3)
+ inquirer: 12.3.0(@types/node@22.19.2)
+ js-yaml: 4.1.0
+ mdast-util-mdx-jsx: 3.2.0
+ react: 19.2.3
+ semver: 7.7.2
+ unist-util-visit: 5.0.0
+ yargs: 17.7.1
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/node'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react-devtools-core
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
+
+ '@mintlify/common@1.0.661(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@asyncapi/parser': 3.4.0
+ '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/models': 0.0.255
+ '@mintlify/openapi-parser': 0.0.8
+ '@mintlify/validation': 0.1.555(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@sindresorhus/slugify': 2.2.0
+ '@types/mdast': 4.0.4
+ acorn: 8.11.2
+ acorn-jsx: 5.3.2(acorn@8.11.2)
+ color-blend: 4.0.0
+ estree-util-to-js: 2.0.0
+ estree-walker: 3.0.3
+ front-matter: 4.0.2
+ hast-util-from-html: 2.0.3
+ hast-util-to-html: 9.0.4
+ hast-util-to-text: 4.0.2
+ hex-rgb: 5.0.0
+ ignore: 7.0.5
+ js-yaml: 4.1.0
+ lodash: 4.17.21
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm: 3.0.0
+ mdast-util-mdx: 3.0.0
+ mdast-util-mdx-jsx: 3.1.3
+ micromark-extension-gfm: 3.0.0
+ micromark-extension-mdx-jsx: 3.0.1
+ micromark-extension-mdxjs: 3.0.0
+ openapi-types: 12.1.3
+ postcss: 8.5.6
+ rehype-stringify: 10.0.1
+ remark: 15.0.1
+ remark-frontmatter: 5.0.0
+ remark-gfm: 4.0.0
+ remark-math: 6.0.0
+ remark-mdx: 3.1.0
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.1
+ remark-stringify: 11.0.0
+ tailwindcss: 3.4.4
+ unified: 11.0.5
+ unist-builder: 4.0.0
+ unist-util-map: 4.0.0
+ unist-util-remove: 4.0.0
+ unist-util-remove-position: 5.0.0
+ unist-util-visit: 5.0.0
+ unist-util-visit-parents: 6.0.1
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - debug
+ - encoding
+ - react
+ - react-dom
+ - supports-color
+ - ts-node
+ - typescript
+
+ '@mintlify/common@1.0.681(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@asyncapi/parser': 3.4.0
+ '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/models': 0.0.258
+ '@mintlify/openapi-parser': 0.0.8
+ '@mintlify/validation': 0.1.567(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@sindresorhus/slugify': 2.2.0
+ '@types/mdast': 4.0.4
+ acorn: 8.11.2
+ acorn-jsx: 5.3.2(acorn@8.11.2)
+ color-blend: 4.0.0
+ estree-util-to-js: 2.0.0
+ estree-walker: 3.0.3
+ front-matter: 4.0.2
+ hast-util-from-html: 2.0.3
+ hast-util-to-html: 9.0.4
+ hast-util-to-text: 4.0.2
+ hex-rgb: 5.0.0
+ ignore: 7.0.5
+ js-yaml: 4.1.0
+ lodash: 4.17.21
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm: 3.0.0
+ mdast-util-mdx: 3.0.0
+ mdast-util-mdx-jsx: 3.1.3
+ micromark-extension-gfm: 3.0.0
+ micromark-extension-mdx-jsx: 3.0.1
+ micromark-extension-mdxjs: 3.0.0
+ openapi-types: 12.1.3
+ postcss: 8.5.6
+ rehype-stringify: 10.0.1
+ remark: 15.0.1
+ remark-frontmatter: 5.0.0
+ remark-gfm: 4.0.0
+ remark-math: 6.0.0
+ remark-mdx: 3.1.0
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.1
+ remark-stringify: 11.0.0
+ tailwindcss: 3.4.4
+ unified: 11.0.5
+ unist-builder: 4.0.0
+ unist-util-map: 4.0.0
+ unist-util-remove: 4.0.0
+ unist-util-remove-position: 5.0.0
+ unist-util-visit: 5.0.0
+ unist-util-visit-parents: 6.0.1
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - debug
+ - encoding
+ - react
+ - react-dom
+ - supports-color
+ - ts-node
+ - typescript
+
+ '@mintlify/link-rot@3.0.838(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/common': 1.0.681(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/prebuild': 1.0.816(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/previewing': 4.0.872(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3)
+ '@mintlify/scraping': 4.0.522(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/validation': 0.1.567(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ fs-extra: 11.1.0
+ unist-util-visit: 4.1.2
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react
+ - react-devtools-core
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
+
+ '@mintlify/mdx@3.0.4(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@radix-ui/react-popover': 1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@shikijs/transformers': 3.21.0
+ '@shikijs/twoslash': 3.21.0(typescript@5.9.3)
+ arktype: 2.1.29
+ hast-util-to-string: 3.0.1
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm: 3.1.0
+ mdast-util-mdx-jsx: 3.2.0
+ mdast-util-to-hast: 13.2.1
+ next-mdx-remote-client: 1.1.4(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(unified@11.0.5)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ rehype-katex: 7.0.1
+ remark-gfm: 4.0.1
+ remark-math: 6.0.0
+ remark-smartypants: 3.0.2
+ shiki: 3.21.0
+ unified: 11.0.5
+ unist-util-visit: 5.0.0
+ transitivePeerDependencies:
+ - '@types/react'
+ - supports-color
+ - typescript
+
+ '@mintlify/models@0.0.255':
+ dependencies:
+ axios: 1.10.0
+ openapi-types: 12.1.3
+ transitivePeerDependencies:
+ - debug
+
+ '@mintlify/models@0.0.258':
+ dependencies:
+ axios: 1.10.0
+ openapi-types: 12.1.3
+ transitivePeerDependencies:
+ - debug
+
+ '@mintlify/openapi-parser@0.0.8':
+ dependencies:
+ ajv: 8.17.1
+ ajv-draft-04: 1.0.0(ajv@8.17.1)
+ ajv-formats: 3.0.1(ajv@8.17.1)
+ jsonpointer: 5.0.1
+ leven: 4.1.0
+ yaml: 2.8.2
+
+ '@mintlify/prebuild@1.0.816(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/common': 1.0.681(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/openapi-parser': 0.0.8
+ '@mintlify/scraping': 4.0.542(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/validation': 0.1.567(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ chalk: 5.3.0
+ favicons: 7.2.0
+ front-matter: 4.0.2
+ fs-extra: 11.1.0
+ js-yaml: 4.1.0
+ openapi-types: 12.1.3
+ sharp: 0.33.5
+ sharp-ico: 0.1.5
+ unist-util-visit: 4.1.2
+ uuid: 11.1.0
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
+
+ '@mintlify/previewing@4.0.872(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/common': 1.0.681(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/prebuild': 1.0.816(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/validation': 0.1.567(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ better-opn: 3.0.2
+ chalk: 5.2.0
+ chokidar: 3.5.3
+ express: 4.18.2
+ front-matter: 4.0.2
+ fs-extra: 11.1.0
+ got: 13.0.0
+ ink: 6.3.0(@types/react@19.2.9)(react@19.2.3)
+ ink-spinner: 5.0.0(ink@6.3.0(@types/react@19.2.9)(react@19.2.3))(react@19.2.3)
+ is-online: 10.0.0
+ js-yaml: 4.1.0
+ openapi-types: 12.1.3
+ react: 19.2.3
+ socket.io: 4.7.2
+ tar: 6.1.15
+ unist-util-visit: 4.1.2
+ yargs: 17.7.1
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react-devtools-core
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
+
+ '@mintlify/scraping@4.0.522(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/common': 1.0.661(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/openapi-parser': 0.0.8
+ fs-extra: 11.1.1
+ hast-util-to-mdast: 10.1.0
+ js-yaml: 4.1.0
+ mdast-util-mdx-jsx: 3.1.3
+ neotraverse: 0.6.18
+ puppeteer: 22.14.0(typescript@5.9.3)
+ rehype-parse: 9.0.1
+ remark-gfm: 4.0.0
+ remark-mdx: 3.0.1
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ unist-util-visit: 5.0.0
+ yargs: 17.7.1
+ zod: 3.21.4
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
+
+ '@mintlify/scraping@4.0.542(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/common': 1.0.681(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/openapi-parser': 0.0.8
+ fs-extra: 11.1.1
+ hast-util-to-mdast: 10.1.0
+ js-yaml: 4.1.0
+ mdast-util-mdx-jsx: 3.1.3
+ neotraverse: 0.6.18
+ puppeteer: 22.14.0(typescript@5.9.3)
+ rehype-parse: 9.0.1
+ remark-gfm: 4.0.0
+ remark-mdx: 3.0.1
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ unist-util-visit: 5.0.0
+ yargs: 17.7.1
+ zod: 3.21.4
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
+
+ '@mintlify/validation@0.1.555(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/models': 0.0.255
+ arktype: 2.1.27
+ js-yaml: 4.1.0
+ lcm: 0.0.3
+ lodash: 4.17.21
+ object-hash: 3.0.0
+ openapi-types: 12.1.3
+ uuid: 11.1.0
+ zod: 3.21.4
+ zod-to-json-schema: 3.20.4(zod@3.21.4)
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - debug
+ - react
+ - react-dom
+ - supports-color
+ - typescript
+
+ '@mintlify/validation@0.1.567(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)':
+ dependencies:
+ '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)
+ '@mintlify/models': 0.0.258
+ arktype: 2.1.27
+ js-yaml: 4.1.0
+ lcm: 0.0.3
+ lodash: 4.17.21
+ object-hash: 3.0.0
+ openapi-types: 12.1.3
+ uuid: 11.1.0
+ zod: 3.21.4
+ zod-to-json-schema: 3.20.4(zod@3.21.4)
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/react'
+ - debug
+ - react
+ - react-dom
+ - supports-color
+ - typescript
+
'@napi-rs/wasm-runtime@0.2.12':
dependencies:
'@emnapi/core': 1.7.1
@@ -8098,6 +11293,10 @@ snapshots:
'@one-ini/wasm@0.1.1': {}
+ '@openapi-contrib/openapi-schema-to-json-schema@3.2.0':
+ dependencies:
+ fast-deep-equal: 3.1.3
+
'@pinojs/redact@0.4.0': {}
'@pkgjs/parseargs@0.11.0':
@@ -8121,6 +11320,201 @@ snapshots:
'@popperjs/core@2.11.8': {}
+ '@puppeteer/browsers@2.3.0':
+ dependencies:
+ debug: 4.4.3(supports-color@5.5.0)
+ extract-zip: 2.0.1
+ progress: 2.0.3
+ proxy-agent: 6.5.0
+ semver: 7.7.3
+ tar-fs: 3.1.1
+ unbzip2-stream: 1.4.3
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - react-native-b4a
+ - supports-color
+
+ '@radix-ui/primitive@1.1.3': {}
+
+ '@radix-ui/react-arrow@1.1.7(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.9)(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-context@1.1.2(@types/react@19.2.9)(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-dismissable-layer@1.1.11(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.9)(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-focus-scope@1.1.7(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-id@1.1.1(@types/react@19.2.9)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/primitive': 1.1.3
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-popper': 1.2.8(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-portal': 1.1.9(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-presence': 1.1.5(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.9)(react@19.2.3)
+ aria-hidden: 1.2.6
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ react-remove-scroll: 2.7.2(@types/react@19.2.9)(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-popper@1.2.8(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-arrow': 1.1.7(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/rect': 1.1.1
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-portal@1.1.9(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-presence@1.1.5(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-primitive@2.1.3(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.9)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-slot@1.2.3(@types/react@19.2.9)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.9)(react@19.2.3)
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.9)(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.9)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.9)(react@19.2.3)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.9)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.9)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.9)(react@19.2.3)':
+ dependencies:
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.9)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/rect': 1.1.1
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/react-use-size@1.1.1(@types/react@19.2.9)(react@19.2.3)':
+ dependencies:
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.9)(react@19.2.3)
+ react: 19.2.3
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ '@radix-ui/rect@1.1.1': {}
+
'@rolldown/pluginutils@1.0.0-beta.50': {}
'@rollup/plugin-inject@5.0.5(rollup@4.53.3)':
@@ -8328,37 +11722,250 @@ snapshots:
semver: 7.7.3
tempy: 3.1.0
- '@semantic-release/release-notes-generator@14.1.0(semantic-release@24.2.9(typescript@5.9.3))':
+ '@semantic-release/release-notes-generator@14.1.0(semantic-release@24.2.9(typescript@5.9.3))':
+ dependencies:
+ conventional-changelog-angular: 8.1.0
+ conventional-changelog-writer: 8.2.0
+ conventional-commits-filter: 5.0.0
+ conventional-commits-parser: 6.2.1
+ debug: 4.4.3(supports-color@5.5.0)
+ get-stream: 7.0.1
+ import-from-esm: 2.0.0
+ into-stream: 7.0.0
+ lodash-es: 4.17.21
+ read-package-up: 11.0.0
+ semantic-release: 24.2.9(typescript@5.9.3)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@shikijs/core@3.21.0':
+ dependencies:
+ '@shikijs/types': 3.21.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.5
+
+ '@shikijs/engine-javascript@3.21.0':
+ dependencies:
+ '@shikijs/types': 3.21.0
+ '@shikijs/vscode-textmate': 10.0.2
+ oniguruma-to-es: 4.3.4
+
+ '@shikijs/engine-oniguruma@3.21.0':
+ dependencies:
+ '@shikijs/types': 3.21.0
+ '@shikijs/vscode-textmate': 10.0.2
+
+ '@shikijs/langs@3.21.0':
+ dependencies:
+ '@shikijs/types': 3.21.0
+
+ '@shikijs/themes@3.21.0':
+ dependencies:
+ '@shikijs/types': 3.21.0
+
+ '@shikijs/transformers@3.21.0':
+ dependencies:
+ '@shikijs/core': 3.21.0
+ '@shikijs/types': 3.21.0
+
+ '@shikijs/twoslash@3.21.0(typescript@5.9.3)':
+ dependencies:
+ '@shikijs/core': 3.21.0
+ '@shikijs/types': 3.21.0
+ twoslash: 0.3.6(typescript@5.9.3)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@shikijs/types@3.21.0':
+ dependencies:
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+
+ '@shikijs/vscode-textmate@10.0.2': {}
+
+ '@sindresorhus/is@4.6.0': {}
+
+ '@sindresorhus/is@5.6.0': {}
+
+ '@sindresorhus/merge-streams@4.0.0': {}
+
+ '@sindresorhus/slugify@2.2.0':
+ dependencies:
+ '@sindresorhus/transliterate': 1.6.0
+ escape-string-regexp: 5.0.0
+
+ '@sindresorhus/transliterate@1.6.0':
+ dependencies:
+ escape-string-regexp: 5.0.0
+
+ '@socket.io/component-emitter@3.1.2': {}
+
+ '@stoplight/better-ajv-errors@1.0.3(ajv@8.17.1)':
+ dependencies:
+ ajv: 8.17.1
+ jsonpointer: 5.0.1
+ leven: 3.1.0
+
+ '@stoplight/json-ref-readers@1.2.2':
+ dependencies:
+ node-fetch: 2.7.0
+ tslib: 1.14.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/json-ref-resolver@3.1.6':
+ dependencies:
+ '@stoplight/json': 3.21.0
+ '@stoplight/path': 1.3.2
+ '@stoplight/types': 13.20.0
+ '@types/urijs': 1.19.26
+ dependency-graph: 0.11.0
+ fast-memoize: 2.5.2
+ immer: 9.0.21
+ lodash: 4.17.21
+ tslib: 2.8.1
+ urijs: 1.19.11
+
+ '@stoplight/json@3.21.0':
+ dependencies:
+ '@stoplight/ordered-object-literal': 1.0.5
+ '@stoplight/path': 1.3.2
+ '@stoplight/types': 13.20.0
+ jsonc-parser: 2.2.1
+ lodash: 4.17.21
+ safe-stable-stringify: 1.1.1
+
+ '@stoplight/ordered-object-literal@1.0.5': {}
+
+ '@stoplight/path@1.3.2': {}
+
+ '@stoplight/spectral-core@1.20.0':
+ dependencies:
+ '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1)
+ '@stoplight/json': 3.21.0
+ '@stoplight/path': 1.3.2
+ '@stoplight/spectral-parsers': 1.0.5
+ '@stoplight/spectral-ref-resolver': 1.0.5
+ '@stoplight/spectral-runtime': 1.1.4
+ '@stoplight/types': 13.6.0
+ '@types/es-aggregate-error': 1.0.6
+ '@types/json-schema': 7.0.15
+ ajv: 8.17.1
+ ajv-errors: 3.0.0(ajv@8.17.1)
+ ajv-formats: 2.1.1(ajv@8.17.1)
+ es-aggregate-error: 1.0.14
+ jsonpath-plus: 10.3.0
+ lodash: 4.17.21
+ lodash.topath: 4.5.2
+ minimatch: 3.1.2
+ nimma: 0.2.3
+ pony-cause: 1.1.1
+ simple-eval: 1.0.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/spectral-formats@1.8.2':
+ dependencies:
+ '@stoplight/json': 3.21.0
+ '@stoplight/spectral-core': 1.20.0
+ '@types/json-schema': 7.0.15
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/spectral-functions@1.10.1':
+ dependencies:
+ '@stoplight/better-ajv-errors': 1.0.3(ajv@8.17.1)
+ '@stoplight/json': 3.21.0
+ '@stoplight/spectral-core': 1.20.0
+ '@stoplight/spectral-formats': 1.8.2
+ '@stoplight/spectral-runtime': 1.1.4
+ ajv: 8.17.1
+ ajv-draft-04: 1.0.0(ajv@8.17.1)
+ ajv-errors: 3.0.0(ajv@8.17.1)
+ ajv-formats: 2.1.1(ajv@8.17.1)
+ lodash: 4.17.21
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/spectral-parsers@1.0.5':
+ dependencies:
+ '@stoplight/json': 3.21.0
+ '@stoplight/types': 14.1.1
+ '@stoplight/yaml': 4.3.0
+ tslib: 2.8.1
+
+ '@stoplight/spectral-ref-resolver@1.0.5':
+ dependencies:
+ '@stoplight/json-ref-readers': 1.2.2
+ '@stoplight/json-ref-resolver': 3.1.6
+ '@stoplight/spectral-runtime': 1.1.4
+ dependency-graph: 0.11.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/spectral-runtime@1.1.4':
+ dependencies:
+ '@stoplight/json': 3.21.0
+ '@stoplight/path': 1.3.2
+ '@stoplight/types': 13.20.0
+ abort-controller: 3.0.0
+ lodash: 4.17.21
+ node-fetch: 2.7.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - encoding
+
+ '@stoplight/types@13.20.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+ utility-types: 3.11.0
+
+ '@stoplight/types@13.6.0':
dependencies:
- conventional-changelog-angular: 8.1.0
- conventional-changelog-writer: 8.2.0
- conventional-commits-filter: 5.0.0
- conventional-commits-parser: 6.2.1
- debug: 4.4.3(supports-color@5.5.0)
- get-stream: 7.0.1
- import-from-esm: 2.0.0
- into-stream: 7.0.0
- lodash-es: 4.17.21
- read-package-up: 11.0.0
- semantic-release: 24.2.9(typescript@5.9.3)
- transitivePeerDependencies:
- - supports-color
+ '@types/json-schema': 7.0.15
+ utility-types: 3.11.0
- '@sindresorhus/is@4.6.0': {}
+ '@stoplight/types@14.1.1':
+ dependencies:
+ '@types/json-schema': 7.0.15
+ utility-types: 3.11.0
- '@sindresorhus/merge-streams@4.0.0': {}
+ '@stoplight/yaml-ast-parser@0.0.50': {}
+
+ '@stoplight/yaml@4.3.0':
+ dependencies:
+ '@stoplight/ordered-object-literal': 1.0.5
+ '@stoplight/types': 14.1.1
+ '@stoplight/yaml-ast-parser': 0.0.50
+ tslib: 2.8.1
'@szmarczak/http-timer@4.0.6':
dependencies:
defer-to-connect: 2.0.1
+ '@szmarczak/http-timer@5.0.1':
+ dependencies:
+ defer-to-connect: 2.0.1
+
'@tokenizer/token@0.3.0': {}
+ '@tootallnate/quickjs-emscripten@0.23.0': {}
+
'@tybys/wasm-util@0.10.1':
dependencies:
tslib: 2.8.1
optional: true
+ '@types/acorn@4.0.6':
+ dependencies:
+ '@types/estree': 1.0.8
+
'@types/argparse@1.0.38': {}
'@types/chai@5.2.3':
@@ -8370,14 +11977,30 @@ snapshots:
dependencies:
'@types/node': 22.19.2
+ '@types/cookie@0.4.1': {}
+
+ '@types/cors@2.8.19':
+ dependencies:
+ '@types/node': 22.19.2
+
'@types/debug@4.1.12':
dependencies:
'@types/ms': 2.1.0
'@types/deep-eql@4.0.2': {}
+ '@types/es-aggregate-error@1.0.6':
+ dependencies:
+ '@types/node': 22.19.2
+
+ '@types/estree-jsx@1.0.5':
+ dependencies:
+ '@types/estree': 1.0.8
+
'@types/estree@1.0.8': {}
+ '@types/extend@3.0.4': {}
+
'@types/fs-extra@8.1.5':
dependencies:
'@types/node': 22.19.2
@@ -8387,10 +12010,16 @@ snapshots:
'@types/minimatch': 6.0.0
'@types/node': 22.19.2
+ '@types/hast@2.3.10':
+ dependencies:
+ '@types/unist': 2.0.11
+
'@types/hast@3.0.4':
dependencies:
'@types/unist': 3.0.3
+ '@types/http-cache-semantics@4.0.4': {}
+
'@types/json-schema@7.0.15': {}
'@types/json5@0.0.29':
@@ -8404,16 +12033,26 @@ snapshots:
'@types/lodash@4.17.21': {}
+ '@types/mdast@3.0.15':
+ dependencies:
+ '@types/unist': 2.0.11
+
'@types/mdast@4.0.4':
dependencies:
'@types/unist': 3.0.3
+ '@types/mdx@2.0.13': {}
+
'@types/minimatch@6.0.0':
dependencies:
minimatch: 10.1.1
'@types/ms@2.1.0': {}
+ '@types/nlcst@2.0.3':
+ dependencies:
+ '@types/unist': 3.0.3
+
'@types/node@16.9.1': {}
'@types/node@22.19.2':
@@ -8422,12 +12061,29 @@ snapshots:
'@types/normalize-package-data@2.4.4': {}
+ '@types/parse5@6.0.3': {}
+
+ '@types/react@19.2.9':
+ dependencies:
+ csstype: 3.2.3
+
'@types/responselike@1.0.0':
dependencies:
'@types/node': 22.19.2
+ '@types/supports-color@8.1.3': {}
+
+ '@types/unist@2.0.11': {}
+
'@types/unist@3.0.3': {}
+ '@types/urijs@1.19.26': {}
+
+ '@types/yauzl@2.10.3':
+ dependencies:
+ '@types/node': 22.19.2
+ optional: true
+
'@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
@@ -8519,6 +12175,13 @@ snapshots:
'@typescript-eslint/types': 8.49.0
eslint-visitor-keys: 4.2.1
+ '@typescript/vfs@1.6.2(typescript@5.9.3)':
+ dependencies:
+ debug: 4.4.3(supports-color@5.5.0)
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
'@ungap/structured-clone@1.3.0': {}
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
@@ -8818,7 +12481,7 @@ snapshots:
'@vue/compiler-core@3.5.25':
dependencies:
- '@babel/parser': 7.28.5
+ '@babel/parser': 7.28.6
'@vue/shared': 3.5.25
entities: 4.5.0
estree-walker: 2.0.2
@@ -8831,7 +12494,7 @@ snapshots:
'@vue/compiler-sfc@3.5.25':
dependencies:
- '@babel/parser': 7.28.5
+ '@babel/parser': 7.28.6
'@vue/compiler-core': 3.5.25
'@vue/compiler-dom': 3.5.25
'@vue/compiler-ssr': 3.5.25
@@ -8916,12 +12579,22 @@ snapshots:
mime-types: 2.1.35
negotiator: 0.6.3
+ acorn-jsx@5.3.2(acorn@8.11.2):
+ dependencies:
+ acorn: 8.11.2
+
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.15.0
+ acorn@8.11.2: {}
+
acorn@8.15.0: {}
+ address@1.2.2: {}
+
+ adm-zip@0.5.16: {}
+
agent-base@6.0.2:
dependencies:
debug: 4.4.3(supports-color@5.5.0)
@@ -8935,6 +12608,11 @@ snapshots:
clean-stack: 2.2.0
indent-string: 4.0.0
+ aggregate-error@4.0.1:
+ dependencies:
+ clean-stack: 4.2.0
+ indent-string: 5.0.0
+
aggregate-error@5.0.0:
dependencies:
clean-stack: 5.3.0
@@ -8944,10 +12622,26 @@ snapshots:
optionalDependencies:
ajv: 8.13.0
+ ajv-draft-04@1.0.0(ajv@8.17.1):
+ optionalDependencies:
+ ajv: 8.17.1
+
+ ajv-errors@3.0.0(ajv@8.17.1):
+ dependencies:
+ ajv: 8.17.1
+
+ ajv-formats@2.1.1(ajv@8.17.1):
+ optionalDependencies:
+ ajv: 8.17.1
+
ajv-formats@3.0.1(ajv@8.13.0):
optionalDependencies:
ajv: 8.13.0
+ ajv-formats@3.0.1(ajv@8.17.1):
+ optionalDependencies:
+ ajv: 8.17.1
+
ajv@6.12.6:
dependencies:
fast-deep-equal: 3.1.3
@@ -8978,6 +12672,10 @@ snapshots:
alien-signals@0.4.14: {}
+ ansi-escapes@4.3.2:
+ dependencies:
+ type-fest: 0.21.3
+
ansi-escapes@7.2.0:
dependencies:
environment: 1.1.0
@@ -9018,6 +12716,8 @@ snapshots:
readable-stream: 3.6.2
optional: true
+ arg@5.0.2: {}
+
argparse@1.0.10:
dependencies:
sprintf-js: 1.0.3
@@ -9026,11 +12726,34 @@ snapshots:
argv-formatter@1.0.0: {}
+ aria-hidden@1.2.6:
+ dependencies:
+ tslib: 2.8.1
+
+ arkregex@0.0.3:
+ dependencies:
+ '@ark/util': 0.55.0
+
+ arkregex@0.0.5:
+ dependencies:
+ '@ark/util': 0.56.0
+
+ arktype@2.1.27:
+ dependencies:
+ '@ark/schema': 0.55.0
+ '@ark/util': 0.55.0
+ arkregex: 0.0.3
+
+ arktype@2.1.29:
+ dependencies:
+ '@ark/schema': 0.56.0
+ '@ark/util': 0.56.0
+ arkregex: 0.0.5
+
array-buffer-byte-length@1.0.2:
dependencies:
call-bound: 1.0.4
is-array-buffer: 3.0.5
- optional: true
array-flatten@1.1.1: {}
@@ -9048,6 +12771,8 @@ snapshots:
math-intrinsics: 1.1.0
optional: true
+ array-iterate@2.0.1: {}
+
array-union@2.1.0: {}
array.prototype.findlastindex@1.2.6:
@@ -9086,7 +12811,6 @@ snapshots:
es-errors: 1.3.0
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
- optional: true
asn1.js@4.10.1:
dependencies:
@@ -9110,14 +12834,19 @@ snapshots:
assertion-error@2.0.1: {}
+ ast-types@0.13.4:
+ dependencies:
+ tslib: 2.8.1
+
ast-v8-to-istanbul@0.3.8:
dependencies:
'@jridgewell/trace-mapping': 0.3.31
estree-walker: 3.0.3
js-tokens: 9.0.1
- async-function@1.0.0:
- optional: true
+ astring@1.9.0: {}
+
+ async-function@1.0.0: {}
async-validator@4.2.5: {}
@@ -9127,16 +12856,28 @@ snapshots:
atomic-sleep@1.0.0: {}
+ auto-bind@5.0.1: {}
+
available-typed-arrays@1.0.7:
dependencies:
possible-typed-array-names: 1.1.0
+ avsc@5.7.9: {}
+
await-to-js@3.0.0: {}
aws-sign2@0.7.0: {}
aws4@1.13.2: {}
+ axios@1.10.0:
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.5
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
b4a@1.7.3: {}
bail@2.0.2: {}
@@ -9145,8 +12886,49 @@ snapshots:
bare-events@2.8.2: {}
+ bare-fs@4.5.2:
+ dependencies:
+ bare-events: 2.8.2
+ bare-path: 3.0.0
+ bare-stream: 2.7.0(bare-events@2.8.2)
+ bare-url: 2.3.2
+ fast-fifo: 1.3.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+ optional: true
+
+ bare-os@3.6.2:
+ optional: true
+
+ bare-path@3.0.0:
+ dependencies:
+ bare-os: 3.6.2
+ optional: true
+
+ bare-stream@2.7.0(bare-events@2.8.2):
+ dependencies:
+ streamx: 2.23.0
+ optionalDependencies:
+ bare-events: 2.8.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+ optional: true
+
+ bare-url@2.3.2:
+ dependencies:
+ bare-path: 3.0.0
+ optional: true
+
base64-js@1.5.1: {}
+ base64id@2.0.0: {}
+
+ baseline-browser-mapping@2.9.17: {}
+
+ basic-ftp@5.1.0: {}
+
bcrypt-pbkdf@1.0.2:
dependencies:
tweetnacl: 0.14.5
@@ -9155,6 +12937,10 @@ snapshots:
before-after-hook@4.0.0: {}
+ better-opn@3.0.2:
+ dependencies:
+ open: 8.4.2
+
bidi-js@1.0.3:
dependencies:
require-from-string: 2.0.2
@@ -9173,6 +12959,23 @@ snapshots:
bn.js@5.2.2: {}
+ body-parser@1.20.1:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.11.0
+ raw-body: 2.5.1
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
body-parser@1.20.3:
dependencies:
bytes: 3.1.2
@@ -9259,6 +13062,16 @@ snapshots:
dependencies:
pako: 1.0.11
+ browserslist@4.28.1:
+ dependencies:
+ baseline-browser-mapping: 2.9.17
+ caniuse-lite: 1.0.30001766
+ electron-to-chromium: 1.5.278
+ node-releases: 2.0.27
+ update-browserslist-db: 1.2.3(browserslist@4.28.1)
+
+ buffer-crc32@0.2.13: {}
+
buffer-crc32@1.0.0: {}
buffer-equal-constant-time@1.0.1: {}
@@ -9290,6 +13103,18 @@ snapshots:
cacheable-lookup@6.1.0: {}
+ cacheable-lookup@7.0.0: {}
+
+ cacheable-request@10.2.14:
+ dependencies:
+ '@types/http-cache-semantics': 4.0.4
+ get-stream: 6.0.1
+ http-cache-semantics: 4.2.0
+ keyv: 4.5.4
+ mimic-response: 4.0.0
+ normalize-url: 8.1.0
+ responselike: 3.0.0
+
cacheable-request@7.0.2:
dependencies:
clone-response: 1.0.3
@@ -9319,6 +13144,10 @@ snapshots:
callsites@3.1.0: {}
+ camelcase-css@2.0.1: {}
+
+ caniuse-lite@1.0.30001766: {}
+
canvas@2.11.2:
dependencies:
'@mapbox/node-pre-gyp': 1.0.11
@@ -9357,6 +13186,10 @@ snapshots:
ansi-styles: 4.3.0
supports-color: 7.2.0
+ chalk@5.2.0: {}
+
+ chalk@5.3.0: {}
+
chalk@5.6.2: {}
char-regex@1.0.2: {}
@@ -9367,8 +13200,24 @@ snapshots:
character-entities@2.0.2: {}
+ character-reference-invalid@2.0.1: {}
+
+ chardet@2.1.1: {}
+
check-error@2.1.1: {}
+ chokidar@3.5.3:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
chokidar@3.6.0:
dependencies:
anymatch: 3.1.3
@@ -9387,8 +13236,14 @@ snapshots:
chownr@1.1.4: {}
- chownr@2.0.0:
- optional: true
+ chownr@2.0.0: {}
+
+ chromium-bidi@0.6.2(devtools-protocol@0.0.1312386):
+ dependencies:
+ devtools-protocol: 0.0.1312386
+ mitt: 3.0.1
+ urlpattern-polyfill: 10.0.0
+ zod: 3.23.8
ci-info@3.9.0: {}
@@ -9400,10 +13255,20 @@ snapshots:
clean-stack@2.2.0: {}
+ clean-stack@4.2.0:
+ dependencies:
+ escape-string-regexp: 5.0.0
+
clean-stack@5.3.0:
dependencies:
escape-string-regexp: 5.0.0
+ cli-boxes@3.0.0: {}
+
+ cli-cursor@4.0.0:
+ dependencies:
+ restore-cursor: 4.0.0
+
cli-cursor@5.0.0:
dependencies:
restore-cursor: 5.1.0
@@ -9417,17 +13282,26 @@ snapshots:
parse5-htmlparser2-tree-adapter: 6.0.1
yargs: 16.2.0
+ cli-spinners@2.9.2: {}
+
cli-table3@0.6.5:
dependencies:
string-width: 4.2.3
optionalDependencies:
'@colors/colors': 1.5.0
+ cli-truncate@4.0.0:
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 7.2.0
+
cli-truncate@5.1.1:
dependencies:
slice-ansi: 7.1.2
string-width: 8.1.0
+ cli-width@4.1.0: {}
+
clipanion@4.0.0-rc.4(typanion@3.14.0):
dependencies:
typanion: 3.14.0
@@ -9448,6 +13322,14 @@ snapshots:
dependencies:
mimic-response: 1.0.1
+ code-excerpt@4.0.0:
+ dependencies:
+ convert-to-spaces: 2.0.1
+
+ collapse-white-space@2.1.0: {}
+
+ color-blend@4.0.0: {}
+
color-convert@1.9.3:
dependencies:
color-name: 1.1.3
@@ -9460,11 +13342,21 @@ snapshots:
color-name@1.1.4: {}
+ color-string@1.9.1:
+ dependencies:
+ color-name: 1.1.4
+ simple-swizzle: 0.2.4
+
color-support@1.1.3:
optional: true
color2k@2.0.3: {}
+ color@4.2.3:
+ dependencies:
+ color-convert: 2.0.1
+ color-string: 1.9.1
+
colorette@1.4.0: {}
colorette@2.0.20: {}
@@ -9481,6 +13373,8 @@ snapshots:
commander@4.1.1: {}
+ commander@8.3.0: {}
+
comment-parser@1.4.1: {}
compare-func@2.0.0:
@@ -9575,8 +13469,16 @@ snapshots:
convert-hrtime@5.0.0: {}
+ convert-source-map@2.0.0: {}
+
+ convert-to-spaces@2.0.1: {}
+
cookie-signature@1.0.6: {}
+ cookie@0.4.2: {}
+
+ cookie@0.5.0: {}
+
cookie@0.7.1: {}
core-util-is@1.0.2: {}
@@ -9687,6 +13589,8 @@ snapshots:
data-uri-to-buffer@4.0.1: {}
+ data-uri-to-buffer@6.0.2: {}
+
data-urls@6.0.0:
dependencies:
whatwg-mimetype: 4.0.0
@@ -9697,21 +13601,18 @@ snapshots:
call-bound: 1.0.4
es-errors: 1.3.0
is-data-view: 1.0.2
- optional: true
data-view-byte-length@1.0.2:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
is-data-view: 1.0.2
- optional: true
data-view-byte-offset@1.0.1:
dependencies:
call-bound: 1.0.4
es-errors: 1.3.0
is-data-view: 1.0.2
- optional: true
date-fns-tz@3.2.0(date-fns@4.1.0):
dependencies:
@@ -9732,6 +13633,10 @@ snapshots:
ms: 2.1.3
optional: true
+ debug@4.3.7:
+ dependencies:
+ ms: 2.1.3
+
debug@4.4.1:
dependencies:
ms: 2.1.3
@@ -9744,6 +13649,17 @@ snapshots:
decimal.js@10.6.0: {}
+ decode-bmp@0.2.1:
+ dependencies:
+ '@canvas/image-data': 1.1.0
+ to-data-view: 1.1.0
+
+ decode-ico@0.4.1:
+ dependencies:
+ '@canvas/image-data': 1.1.0
+ decode-bmp: 0.2.1
+ to-data-view: 1.1.0
+
decode-named-character-reference@1.2.0:
dependencies:
character-entities: 2.0.2
@@ -9779,6 +13695,12 @@ snapshots:
has-property-descriptors: 1.0.2
object-keys: 1.1.1
+ degenerator@5.0.1:
+ dependencies:
+ ast-types: 0.13.4
+ escodegen: 2.1.0
+ esprima: 4.0.1
+
del@6.1.1:
dependencies:
globby: 11.1.0
@@ -9797,6 +13719,8 @@ snapshots:
depd@2.0.0: {}
+ dependency-graph@0.11.0: {}
+
dequal@2.0.3: {}
des.js@1.1.0:
@@ -9808,10 +13732,25 @@ snapshots:
detect-libc@2.1.2: {}
+ detect-node-es@1.1.0: {}
+
+ detect-port@1.5.1:
+ dependencies:
+ address: 1.2.2
+ debug: 4.4.3(supports-color@5.5.0)
+ transitivePeerDependencies:
+ - supports-color
+
devlop@1.1.0:
dependencies:
dequal: 2.0.3
+ devtools-protocol@0.0.1312386: {}
+
+ didyoumean@1.2.2: {}
+
+ diff@5.2.2: {}
+
diff@8.0.2: {}
diffie-hellman@5.0.3:
@@ -9824,11 +13763,70 @@ snapshots:
dependencies:
path-type: 4.0.0
+ dlv@1.1.3: {}
+
+ dns-packet@5.6.1:
+ dependencies:
+ '@leichtgewicht/ip-codec': 2.0.5
+
+ dns-socket@4.2.2:
+ dependencies:
+ dns-packet: 5.6.1
+
+ doctrine-temporary-fork@2.1.0:
+ dependencies:
+ esutils: 2.0.3
+
doctrine@2.1.0:
dependencies:
esutils: 2.0.3
optional: true
+ documentation@14.0.3:
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ chalk: 5.6.2
+ chokidar: 3.6.0
+ diff: 5.2.2
+ doctrine-temporary-fork: 2.1.0
+ git-url-parse: 13.1.1
+ github-slugger: 1.4.0
+ glob: 8.1.0
+ globals-docs: 2.4.1
+ highlight.js: 11.11.1
+ ini: 3.0.1
+ js-yaml: 4.1.1
+ konan: 2.1.1
+ lodash: 4.17.21
+ mdast-util-find-and-replace: 2.2.2
+ mdast-util-inject: 1.1.0
+ micromark-util-character: 1.2.0
+ parse-filepath: 1.0.2
+ pify: 6.1.0
+ read-pkg-up: 9.1.0
+ remark: 14.0.3
+ remark-gfm: 3.0.1
+ remark-html: 15.0.2
+ remark-reference-links: 6.0.1
+ remark-toc: 8.0.1
+ resolve: 1.22.11
+ strip-json-comments: 5.0.3
+ unist-builder: 3.0.1
+ unist-util-visit: 4.1.2
+ vfile: 5.3.7
+ vfile-reporter: 7.0.5
+ vfile-sort: 3.0.1
+ yargs: 17.7.2
+ optionalDependencies:
+ '@vue/compiler-sfc': 3.5.25
+ vue-template-compiler: 2.7.16
+ transitivePeerDependencies:
+ - supports-color
+
domain-browser@4.22.0: {}
dot-prop@5.3.0:
@@ -9872,6 +13870,8 @@ snapshots:
ee-first@1.1.1: {}
+ electron-to-chromium@1.5.278: {}
+
elliptic@6.6.1:
dependencies:
bn.js: 4.12.2
@@ -9898,6 +13898,25 @@ snapshots:
dependencies:
once: 1.4.0
+ engine.io-parser@5.2.3: {}
+
+ engine.io@6.5.5:
+ dependencies:
+ '@types/cookie': 0.4.1
+ '@types/cors': 2.8.19
+ '@types/node': 22.19.2
+ accepts: 1.3.8
+ base64id: 2.0.0
+ cookie: 0.4.2
+ cors: 2.8.5
+ debug: 4.3.7
+ engine.io-parser: 5.2.3
+ ws: 8.17.1
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
entities@4.5.0: {}
entities@6.0.1: {}
@@ -9973,7 +13992,17 @@ snapshots:
typed-array-length: 1.0.7
unbox-primitive: 1.1.0
which-typed-array: 1.1.19
- optional: true
+
+ es-aggregate-error@1.0.14:
+ dependencies:
+ define-data-property: 1.1.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ globalthis: 1.0.4
+ has-property-descriptors: 1.0.2
+ set-function-name: 2.0.2
es-define-property@1.0.1: {}
@@ -10002,7 +14031,22 @@ snapshots:
is-callable: 1.2.7
is-date-object: 1.1.0
is-symbol: 1.1.1
- optional: true
+
+ es-toolkit@1.44.0: {}
+
+ esast-util-from-estree@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ unist-util-position-from-estree: 2.0.0
+
+ esast-util-from-js@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ acorn: 8.15.0
+ esast-util-from-estree: 2.0.0
+ vfile-message: 4.0.3
esbuild@0.25.12:
optionalDependencies:
@@ -10068,10 +14112,20 @@ snapshots:
escape-string-regexp@1.0.5: {}
+ escape-string-regexp@2.0.0: {}
+
escape-string-regexp@4.0.0: {}
escape-string-regexp@5.0.0: {}
+ escodegen@2.1.0:
+ dependencies:
+ esprima: 4.0.1
+ estraverse: 5.3.0
+ esutils: 2.0.3
+ optionalDependencies:
+ source-map: 0.6.1
+
eslint-config-prettier@9.1.2(eslint@9.39.1(jiti@2.6.1)):
dependencies:
eslint: 9.39.1(jiti@2.6.1)
@@ -10240,6 +14294,8 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 4.2.1
+ esprima@4.0.1: {}
+
esquery@1.6.0:
dependencies:
estraverse: 5.3.0
@@ -10250,6 +14306,35 @@ snapshots:
estraverse@5.3.0: {}
+ estree-util-attach-comments@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ 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
+
+ estree-util-is-identifier-name@3.0.0: {}
+
+ estree-util-scope@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ devlop: 1.1.0
+
+ estree-util-to-js@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ astring: 1.9.0
+ source-map: 0.7.6
+
+ estree-util-visit@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/unist': 3.0.3
+
estree-walker@2.0.2: {}
estree-walker@3.0.3:
@@ -10326,6 +14411,42 @@ snapshots:
express-rate-limit@5.5.1: {}
+ express@4.18.2:
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.1
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.5.0
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.2.0
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.1
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.7
+ proxy-addr: 2.0.7
+ qs: 6.11.0
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.18.0
+ serve-static: 1.15.0
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
express@4.21.2:
dependencies:
accepts: 1.3.8
@@ -10366,6 +14487,16 @@ snapshots:
extend@3.0.2: {}
+ extract-zip@2.0.1:
+ dependencies:
+ debug: 4.4.3(supports-color@5.5.0)
+ get-stream: 5.2.0
+ yauzl: 2.10.0
+ optionalDependencies:
+ '@types/yauzl': 2.10.3
+ transitivePeerDependencies:
+ - supports-color
+
extsprintf@1.3.0: {}
fast-content-type-parse@3.0.0: {}
@@ -10386,12 +14517,28 @@ snapshots:
fast-levenshtein@2.0.6: {}
+ fast-memoize@2.5.2: {}
+
fast-uri@3.1.0: {}
fastq@1.19.1:
dependencies:
reusify: 1.1.0
+ fault@2.0.1:
+ dependencies:
+ format: 0.2.2
+
+ favicons@7.2.0:
+ dependencies:
+ escape-html: 1.0.3
+ sharp: 0.33.5
+ xml2js: 0.6.2
+
+ fd-slicer@1.1.0:
+ dependencies:
+ pend: 1.2.0
+
fdir@6.5.0(picomatch@4.0.3):
optionalDependencies:
picomatch: 4.0.3
@@ -10423,6 +14570,18 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
+ finalhandler@1.2.0:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
finalhandler@1.3.1:
dependencies:
debug: 2.6.9
@@ -10446,6 +14605,11 @@ snapshots:
locate-path: 6.0.0
path-exists: 4.0.0
+ find-up@6.3.0:
+ dependencies:
+ locate-path: 7.2.0
+ path-exists: 5.0.0
+
find-up@7.0.0:
dependencies:
locate-path: 7.2.0
@@ -10474,6 +14638,8 @@ snapshots:
flatted@3.3.3: {}
+ follow-redirects@1.15.11: {}
+
for-each@0.3.5:
dependencies:
is-callable: 1.2.7
@@ -10487,6 +14653,8 @@ snapshots:
form-data-encoder@1.7.2: {}
+ form-data-encoder@2.1.4: {}
+
form-data@4.0.5:
dependencies:
asynckit: 0.4.0
@@ -10495,6 +14663,8 @@ snapshots:
hasown: 2.0.2
mime-types: 2.1.35
+ format@0.2.2: {}
+
formdata-polyfill@4.0.10:
dependencies:
fetch-blob: 3.2.0
@@ -10508,6 +14678,10 @@ snapshots:
inherits: 2.0.4
readable-stream: 2.3.8
+ front-matter@4.0.2:
+ dependencies:
+ js-yaml: 3.14.2
+
fs-constants@1.0.0: {}
fs-extra@10.1.0:
@@ -10516,6 +14690,24 @@ snapshots:
jsonfile: 6.2.0
universalify: 2.0.1
+ fs-extra@11.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
+ fs-extra@11.1.1:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
+ fs-extra@11.2.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
fs-extra@11.3.2:
dependencies:
graceful-fs: 4.2.11
@@ -10531,7 +14723,6 @@ snapshots:
fs-minipass@2.1.0:
dependencies:
minipass: 3.3.6
- optional: true
fs.realpath@1.0.0: {}
@@ -10553,10 +14744,8 @@ snapshots:
functions-have-names: 1.2.3
hasown: 2.0.2
is-callable: 1.2.7
- optional: true
- functions-have-names@1.2.3:
- optional: true
+ functions-have-names@1.2.3: {}
gauge@3.0.2:
dependencies:
@@ -10571,8 +14760,12 @@ snapshots:
wide-align: 1.1.5
optional: true
+ gcd@0.0.1: {}
+
generator-function@2.0.1: {}
+ gensync@1.0.0-beta.2: {}
+
get-caller-file@2.0.5: {}
get-east-asian-width@1.4.0: {}
@@ -10590,6 +14783,8 @@ snapshots:
hasown: 2.0.2
math-intrinsics: 1.1.0
+ get-nonce@1.0.1: {}
+
get-proto@1.0.1:
dependencies:
dunder-proto: 1.0.1
@@ -10615,12 +14810,19 @@ snapshots:
call-bound: 1.0.4
es-errors: 1.3.0
get-intrinsic: 1.3.0
- optional: true
get-tsconfig@4.13.0:
dependencies:
resolve-pkg-maps: 1.0.0
+ get-uri@6.0.5:
+ dependencies:
+ basic-ftp: 5.1.0
+ data-uri-to-buffer: 6.0.2
+ debug: 4.4.3(supports-color@5.5.0)
+ transitivePeerDependencies:
+ - supports-color
+
getpass@0.1.7:
dependencies:
assert-plus: 1.0.0
@@ -10645,8 +14847,21 @@ snapshots:
meow: 12.1.1
split2: 4.2.0
+ git-up@7.0.0:
+ dependencies:
+ is-ssh: 1.4.1
+ parse-url: 8.1.0
+
+ git-url-parse@13.1.1:
+ dependencies:
+ git-up: 7.0.0
+
github-from-package@0.0.0: {}
+ github-slugger@1.4.0: {}
+
+ github-slugger@2.0.0: {}
+
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
@@ -10673,17 +14888,26 @@ snapshots:
once: 1.4.0
path-is-absolute: 1.0.1
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
global-directory@4.0.1:
dependencies:
ini: 4.1.1
+ globals-docs@2.4.1: {}
+
globals@14.0.0: {}
globalthis@1.0.4:
dependencies:
define-properties: 1.2.1
gopd: 1.2.0
- optional: true
globby@10.0.1:
dependencies:
@@ -10722,6 +14946,34 @@ snapshots:
p-cancelable: 2.1.1
responselike: 2.0.1
+ got@12.6.1:
+ dependencies:
+ '@sindresorhus/is': 5.6.0
+ '@szmarczak/http-timer': 5.0.1
+ cacheable-lookup: 7.0.0
+ cacheable-request: 10.2.14
+ decompress-response: 6.0.0
+ form-data-encoder: 2.1.4
+ get-stream: 6.0.1
+ http2-wrapper: 2.2.1
+ lowercase-keys: 3.0.0
+ p-cancelable: 3.0.0
+ responselike: 3.0.0
+
+ got@13.0.0:
+ dependencies:
+ '@sindresorhus/is': 5.6.0
+ '@szmarczak/http-timer': 5.0.1
+ cacheable-lookup: 7.0.0
+ cacheable-request: 10.2.14
+ decompress-response: 6.0.0
+ form-data-encoder: 2.1.4
+ get-stream: 6.0.1
+ http2-wrapper: 2.2.1
+ lowercase-keys: 3.0.0
+ p-cancelable: 3.0.0
+ responselike: 3.0.0
+
graceful-fs@4.2.10: {}
graceful-fs@4.2.11: {}
@@ -10746,8 +14998,7 @@ snapshots:
optionalDependencies:
uglify-js: 3.19.3
- has-bigints@1.1.0:
- optional: true
+ has-bigints@1.1.0: {}
has-flag@3.0.0: {}
@@ -10760,7 +15011,6 @@ snapshots:
has-proto@1.2.0:
dependencies:
dunder-proto: 1.0.1
- optional: true
has-symbols@1.1.0: {}
@@ -10797,6 +15047,19 @@ snapshots:
'@types/hast': 3.0.4
hast-util-is-element: 3.0.0
+ hast-util-from-dom@5.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ hastscript: 9.0.1
+ web-namespaces: 2.0.1
+
+ hast-util-from-html-isomorphic@2.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-from-dom: 5.0.1
+ hast-util-from-html: 2.0.3
+ unist-util-remove-position: 5.0.0
+
hast-util-from-html@2.0.3:
dependencies:
'@types/hast': 3.0.4
@@ -10806,6 +15069,16 @@ snapshots:
vfile: 6.0.3
vfile-message: 4.0.3
+ hast-util-from-parse5@7.1.2:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/unist': 2.0.11
+ hastscript: 7.2.0
+ property-information: 6.5.0
+ vfile: 5.3.7
+ vfile-location: 4.1.0
+ web-namespaces: 2.0.1
+
hast-util-from-parse5@8.0.3:
dependencies:
'@types/hast': 3.0.4
@@ -10837,6 +15110,10 @@ snapshots:
hast-util-whitespace: 3.0.0
unist-util-is: 6.0.1
+ hast-util-parse-selector@3.1.1:
+ dependencies:
+ '@types/hast': 2.3.10
+
hast-util-parse-selector@4.0.0:
dependencies:
'@types/hast': 3.0.4
@@ -10849,19 +15126,123 @@ snapshots:
hast-util-is-body-ok-link: 3.0.1
hast-util-is-element: 3.0.0
- hast-util-to-html@9.0.5:
+ hast-util-raw@7.2.3:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/parse5': 6.0.3
+ hast-util-from-parse5: 7.1.2
+ hast-util-to-parse5: 7.1.0
+ html-void-elements: 2.0.1
+ parse5: 6.0.1
+ unist-util-position: 4.0.4
+ unist-util-visit: 4.1.2
+ vfile: 5.3.7
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+
+ hast-util-sanitize@4.1.0:
+ dependencies:
+ '@types/hast': 2.3.10
+
+ hast-util-to-estree@3.1.3:
+ dependencies:
+ '@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
+
+ hast-util-to-html@8.0.4:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/unist': 2.0.11
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-raw: 7.2.3
+ hast-util-whitespace: 2.0.1
+ html-void-elements: 2.0.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
+
+ hast-util-to-html@9.0.4:
+ dependencies:
+ '@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: 6.5.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
+
+ hast-util-to-html@9.0.5:
+ dependencies:
+ '@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
+
+ 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
+
+ hast-util-to-mdast@10.1.0:
dependencies:
'@types/hast': 3.0.4
- '@types/unist': 3.0.3
- ccount: 2.0.1
- comma-separated-tokens: 2.0.3
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.3.0
+ hast-util-phrasing: 3.0.1
+ hast-util-to-html: 9.0.5
+ hast-util-to-text: 4.0.2
hast-util-whitespace: 3.0.0
- html-void-elements: 3.0.0
+ mdast-util-phrasing: 4.1.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
+ mdast-util-to-string: 4.0.0
+ rehype-minify-whitespace: 6.0.2
+ trim-trailing-lines: 2.1.0
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
hast-util-to-mdast@10.1.2:
dependencies:
@@ -10880,6 +15261,19 @@ snapshots:
unist-util-position: 5.0.0
unist-util-visit: 5.0.0
+ hast-util-to-parse5@7.1.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ comma-separated-tokens: 2.0.3
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+
+ hast-util-to-string@3.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+
hast-util-to-text@4.0.2:
dependencies:
'@types/hast': 3.0.4
@@ -10887,10 +15281,20 @@ snapshots:
hast-util-is-element: 3.0.0
unist-util-find-after: 5.0.0
+ hast-util-whitespace@2.0.1: {}
+
hast-util-whitespace@3.0.0:
dependencies:
'@types/hast': 3.0.4
+ hastscript@7.2.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ comma-separated-tokens: 2.0.3
+ hast-util-parse-selector: 3.1.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+
hastscript@9.0.1:
dependencies:
'@types/hast': 3.0.4
@@ -10901,6 +15305,8 @@ snapshots:
he@1.2.0: {}
+ hex-rgb@5.0.0: {}
+
highlight.js@10.7.3: {}
highlight.js@11.11.1: {}
@@ -10915,6 +15321,10 @@ snapshots:
hosted-git-info@2.8.9: {}
+ hosted-git-info@4.1.0:
+ dependencies:
+ lru-cache: 6.0.0
+
hosted-git-info@7.0.2:
dependencies:
lru-cache: 10.4.3
@@ -10929,6 +15339,8 @@ snapshots:
html-escaper@2.0.2: {}
+ html-void-elements@2.0.1: {}
+
html-void-elements@3.0.0: {}
http-cache-semantics@4.2.0: {}
@@ -10985,6 +15397,8 @@ snapshots:
husky@9.1.7: {}
+ ico-endec@0.1.6: {}
+
iconv-lite@0.4.24:
dependencies:
safer-buffer: 2.1.2
@@ -10993,6 +15407,10 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
+ iconv-lite@0.7.2:
+ dependencies:
+ safer-buffer: 2.1.2
+
ieee754@1.2.1: {}
ignore-by-default@1.0.1: {}
@@ -11007,6 +15425,8 @@ snapshots:
immediate@3.0.6: {}
+ immer@9.0.21: {}
+
import-fresh@3.3.1:
dependencies:
parent-module: 1.0.1
@@ -11040,22 +15460,90 @@ snapshots:
ini@1.3.8: {}
+ ini@3.0.1: {}
+
ini@4.1.1: {}
+ ink-spinner@5.0.0(ink@6.3.0(@types/react@19.2.9)(react@19.2.3))(react@19.2.3):
+ dependencies:
+ cli-spinners: 2.9.2
+ ink: 6.3.0(@types/react@19.2.9)(react@19.2.3)
+ react: 19.2.3
+
+ ink@6.3.0(@types/react@19.2.9)(react@19.2.3):
+ dependencies:
+ '@alcalzone/ansi-tokenize': 0.2.3
+ ansi-escapes: 7.2.0
+ ansi-styles: 6.2.3
+ auto-bind: 5.0.1
+ chalk: 5.6.2
+ cli-boxes: 3.0.0
+ cli-cursor: 4.0.0
+ cli-truncate: 4.0.0
+ code-excerpt: 4.0.0
+ es-toolkit: 1.44.0
+ indent-string: 5.0.0
+ is-in-ci: 2.0.0
+ patch-console: 2.0.0
+ react: 19.2.3
+ react-reconciler: 0.32.0(react@19.2.3)
+ signal-exit: 3.0.7
+ slice-ansi: 7.1.2
+ stack-utils: 2.0.6
+ string-width: 7.2.0
+ type-fest: 4.41.0
+ widest-line: 5.0.0
+ wrap-ansi: 9.0.2
+ ws: 8.18.3
+ yoga-layout: 3.2.1
+ optionalDependencies:
+ '@types/react': 19.2.9
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ inline-style-parser@0.2.7: {}
+
+ inquirer@12.3.0(@types/node@22.19.2):
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.2)
+ '@inquirer/prompts': 7.9.0(@types/node@22.19.2)
+ '@inquirer/type': 3.0.10(@types/node@22.19.2)
+ '@types/node': 22.19.2
+ ansi-escapes: 4.3.2
+ mute-stream: 2.0.0
+ run-async: 3.0.0
+ rxjs: 7.8.2
+
internal-slot@1.1.0:
dependencies:
es-errors: 1.3.0
hasown: 2.0.2
side-channel: 1.1.0
- optional: true
into-stream@7.0.0:
dependencies:
from2: 2.3.0
p-is-promise: 3.0.0
+ ip-address@10.1.0: {}
+
+ ip-regex@4.3.0: {}
+
ipaddr.js@1.9.1: {}
+ is-absolute@1.0.0:
+ dependencies:
+ is-relative: 1.0.0
+ is-windows: 1.0.2
+
+ is-alphabetical@2.0.1: {}
+
+ is-alphanumerical@2.0.1:
+ dependencies:
+ is-alphabetical: 2.0.1
+ is-decimal: 2.0.1
+
is-arguments@1.2.0:
dependencies:
call-bound: 1.0.4
@@ -11066,10 +15554,11 @@ snapshots:
call-bind: 1.0.8
call-bound: 1.0.4
get-intrinsic: 1.3.0
- optional: true
is-arrayish@0.2.1: {}
+ is-arrayish@0.3.4: {}
+
is-async-function@2.1.1:
dependencies:
async-function: 1.0.0
@@ -11077,12 +15566,10 @@ snapshots:
get-proto: 1.0.1
has-tostringtag: 1.0.2
safe-regex-test: 1.1.0
- optional: true
is-bigint@1.1.0:
dependencies:
has-bigints: 1.1.0
- optional: true
is-binary-path@2.1.0:
dependencies:
@@ -11092,7 +15579,8 @@ snapshots:
dependencies:
call-bound: 1.0.4
has-tostringtag: 1.0.2
- optional: true
+
+ is-buffer@2.0.5: {}
is-bun-module@2.0.0:
dependencies:
@@ -11109,13 +15597,13 @@ snapshots:
call-bound: 1.0.4
get-intrinsic: 1.3.0
is-typed-array: 1.1.15
- optional: true
is-date-object@1.1.0:
dependencies:
call-bound: 1.0.4
has-tostringtag: 1.0.2
- optional: true
+
+ is-decimal@2.0.1: {}
is-deflate@1.0.0: {}
@@ -11126,10 +15614,11 @@ snapshots:
is-finalizationregistry@1.1.1:
dependencies:
call-bound: 1.0.4
- optional: true
is-fullwidth-code-point@3.0.0: {}
+ is-fullwidth-code-point@4.0.0: {}
+
is-fullwidth-code-point@5.1.0:
dependencies:
get-east-asian-width: 1.4.0
@@ -11148,27 +15637,39 @@ snapshots:
is-gzip@1.0.0: {}
- is-map@2.0.3:
- optional: true
+ is-hexadecimal@2.0.1: {}
+
+ is-in-ci@2.0.0: {}
+
+ is-ip@3.1.0:
+ dependencies:
+ ip-regex: 4.3.0
+
+ is-map@2.0.3: {}
is-nan@1.3.2:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- is-negative-zero@2.0.3:
- optional: true
+ is-negative-zero@2.0.3: {}
is-number-object@1.1.1:
dependencies:
call-bound: 1.0.4
has-tostringtag: 1.0.2
- optional: true
is-number@7.0.0: {}
is-obj@2.0.0: {}
+ is-online@10.0.0:
+ dependencies:
+ got: 12.6.1
+ p-any: 4.0.0
+ p-timeout: 5.1.0
+ public-ip: 5.0.0
+
is-path-cwd@2.2.0: {}
is-path-inside@3.0.3: {}
@@ -11188,13 +15689,19 @@ snapshots:
has-tostringtag: 1.0.2
hasown: 2.0.2
- is-set@2.0.3:
- optional: true
+ is-relative@1.0.0:
+ dependencies:
+ is-unc-path: 1.0.0
+
+ is-set@2.0.3: {}
is-shared-array-buffer@1.0.4:
dependencies:
call-bound: 1.0.4
- optional: true
+
+ is-ssh@1.4.1:
+ dependencies:
+ protocols: 2.0.2
is-stream@2.0.1: {}
@@ -11206,14 +15713,12 @@ snapshots:
dependencies:
call-bound: 1.0.4
has-tostringtag: 1.0.2
- optional: true
is-symbol@1.1.1:
dependencies:
call-bound: 1.0.4
has-symbols: 1.1.0
safe-regex-test: 1.1.0
- optional: true
is-text-path@2.0.0:
dependencies:
@@ -11225,21 +15730,24 @@ snapshots:
is-typedarray@1.0.0: {}
+ is-unc-path@1.0.0:
+ dependencies:
+ unc-path-regex: 0.1.2
+
is-unicode-supported@2.1.0: {}
- is-weakmap@2.0.2:
- optional: true
+ is-weakmap@2.0.2: {}
is-weakref@1.1.1:
dependencies:
call-bound: 1.0.4
- optional: true
is-weakset@2.0.4:
dependencies:
call-bound: 1.0.4
get-intrinsic: 1.3.0
- optional: true
+
+ is-windows@1.0.2: {}
is-wsl@2.2.0:
dependencies:
@@ -11331,6 +15839,8 @@ snapshots:
'@jimp/types': 1.6.0
'@jimp/utils': 1.6.0
+ jiti@1.21.7: {}
+
jiti@2.6.1: {}
jju@1.4.0: {}
@@ -11353,6 +15863,15 @@ snapshots:
js-tokens@9.0.1: {}
+ js-yaml@3.14.2:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
js-yaml@4.1.1:
dependencies:
argparse: 2.0.1
@@ -11391,6 +15910,10 @@ snapshots:
- supports-color
- utf-8-validate
+ jsep@1.4.0: {}
+
+ jsesc@3.1.0: {}
+
json-buffer@3.0.1: {}
json-parse-better-errors@1.0.2: {}
@@ -11420,6 +15943,10 @@ snapshots:
minimist: 1.2.8
optional: true
+ json5@2.2.3: {}
+
+ jsonc-parser@2.2.1: {}
+
jsonfile@4.0.0:
optionalDependencies:
graceful-fs: 4.2.11
@@ -11434,6 +15961,14 @@ snapshots:
jsonparse@1.3.1: {}
+ jsonpath-plus@10.3.0:
+ dependencies:
+ '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0)
+ '@jsep-plugin/regex': 1.0.4(jsep@1.4.0)
+ jsep: 1.4.0
+
+ jsonpointer@5.0.1: {}
+
jsonwebtoken@9.0.2:
dependencies:
jws: 3.2.3
@@ -11472,6 +16007,10 @@ snapshots:
jwa: 1.4.2
safe-buffer: 5.2.1
+ katex@0.16.27:
+ dependencies:
+ commander: 8.3.0
+
keyv@4.5.4:
dependencies:
json-buffer: 3.0.1
@@ -11480,8 +16019,25 @@ snapshots:
dependencies:
graceful-fs: 4.2.11
+ kleur@4.1.5: {}
+
kolorist@1.8.0: {}
+ konan@2.1.1:
+ dependencies:
+ '@babel/parser': 7.28.6
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ lcm@0.0.3:
+ dependencies:
+ gcd: 0.0.1
+
+ leven@3.1.0: {}
+
+ leven@4.1.0: {}
+
levn@0.4.1:
dependencies:
prelude-ls: 1.2.1
@@ -11495,6 +16051,8 @@ snapshots:
dependencies:
immediate: 3.0.6
+ lilconfig@2.1.0: {}
+
lilconfig@3.1.3: {}
lines-and-columns@1.2.4: {}
@@ -11582,6 +16140,8 @@ snapshots:
lodash.startcase@4.4.0: {}
+ lodash.topath@4.5.2: {}
+
lodash.uniq@4.5.0: {}
lodash.uniqby@4.7.0: {}
@@ -11600,6 +16160,10 @@ snapshots:
longest-streak@3.1.0: {}
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
loupe@3.2.1: {}
lowdb@1.0.0:
@@ -11612,10 +16176,16 @@ snapshots:
lowercase-keys@2.0.0: {}
+ lowercase-keys@3.0.0: {}
+
lru-cache@10.4.3: {}
lru-cache@11.2.4: {}
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
lru-cache@6.0.0:
dependencies:
yallist: 4.0.0
@@ -11628,8 +16198,8 @@ snapshots:
magicast@0.3.5:
dependencies:
- '@babel/parser': 7.28.5
- '@babel/types': 7.28.5
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
source-map-js: 1.2.1
make-asynchronous@1.0.1:
@@ -11647,6 +16217,10 @@ snapshots:
dependencies:
semver: 7.7.3
+ map-cache@0.2.2: {}
+
+ markdown-extensions@2.0.0: {}
+
markdown-table@3.0.4: {}
marked-terminal@7.3.0(marked@15.0.12):
@@ -11672,6 +16246,19 @@ snapshots:
inherits: 2.0.4
safe-buffer: 5.2.1
+ mdast-util-definitions@5.1.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ unist-util-visit: 4.1.2
+
+ mdast-util-find-and-replace@2.2.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ escape-string-regexp: 5.0.0
+ unist-util-is: 5.2.1
+ unist-util-visit-parents: 5.1.3
+
mdast-util-find-and-replace@3.0.2:
dependencies:
'@types/mdast': 4.0.4
@@ -11679,6 +16266,23 @@ snapshots:
unist-util-is: 6.0.1
unist-util-visit-parents: 6.0.2
+ mdast-util-from-markdown@1.3.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ decode-named-character-reference: 1.2.0
+ mdast-util-to-string: 3.2.0
+ micromark: 3.2.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-decode-string: 1.1.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ unist-util-stringify-position: 3.0.3
+ uvu: 0.5.6
+ transitivePeerDependencies:
+ - supports-color
+
mdast-util-from-markdown@2.0.2:
dependencies:
'@types/mdast': 4.0.4
@@ -11696,68 +16300,233 @@ snapshots:
transitivePeerDependencies:
- supports-color
- mdast-util-gfm-autolink-literal@2.0.1:
+ mdast-util-frontmatter@2.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ escape-string-regexp: 5.0.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ micromark-extension-frontmatter: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-autolink-literal@1.0.3:
+ dependencies:
+ '@types/mdast': 3.0.15
+ ccount: 2.0.1
+ mdast-util-find-and-replace: 2.2.2
+ micromark-util-character: 1.2.0
+
+ 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
+
+ mdast-util-gfm-footnote@1.0.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-to-markdown: 1.5.0
+ micromark-util-normalize-identifier: 1.1.0
+
+ mdast-util-gfm-footnote@2.1.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
+ micromark-util-normalize-identifier: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-strikethrough@1.0.3:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-to-markdown: 1.5.0
+
+ mdast-util-gfm-strikethrough@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-table@1.0.7:
+ dependencies:
+ '@types/mdast': 3.0.15
+ markdown-table: 3.0.4
+ mdast-util-from-markdown: 1.3.1
+ mdast-util-to-markdown: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ 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
+
+ mdast-util-gfm-task-list-item@1.0.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-to-markdown: 1.5.0
+
+ 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
+
+ mdast-util-gfm@2.0.2:
+ dependencies:
+ mdast-util-from-markdown: 1.3.1
+ mdast-util-gfm-autolink-literal: 1.0.3
+ mdast-util-gfm-footnote: 1.0.2
+ mdast-util-gfm-strikethrough: 1.0.3
+ mdast-util-gfm-table: 1.0.7
+ mdast-util-gfm-task-list-item: 1.0.2
+ mdast-util-to-markdown: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm@3.0.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
+
+ 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
+
+ mdast-util-inject@1.1.0:
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
+ mdast-util-to-string: 1.1.0
- mdast-util-gfm-footnote@2.1.0:
+ mdast-util-math@3.0.0:
dependencies:
+ '@types/hast': 3.0.4
'@types/mdast': 4.0.4
devlop: 1.1.0
+ longest-streak: 3.1.0
mdast-util-from-markdown: 2.0.2
mdast-util-to-markdown: 2.1.2
- micromark-util-normalize-identifier: 2.0.1
+ unist-util-remove-position: 5.0.0
transitivePeerDependencies:
- supports-color
- mdast-util-gfm-strikethrough@2.0.0:
+ 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
- mdast-util-gfm-table@2.0.0:
+ mdast-util-mdx-jsx@3.1.3:
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
- markdown-table: 3.0.4
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-gfm-task-list-item@2.0.0:
+ 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-gfm@3.1.0:
+ mdast-util-mdx@3.0.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-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
+
+ mdast-util-mdxjs-esm@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
+ mdast-util-phrasing@3.0.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ unist-util-is: 5.2.1
+
mdast-util-phrasing@4.1.0:
dependencies:
'@types/mdast': 4.0.4
unist-util-is: 6.0.1
+ mdast-util-to-hast@12.3.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ mdast-util-definitions: 5.1.2
+ micromark-util-sanitize-uri: 1.2.0
+ trim-lines: 3.0.1
+ unist-util-generated: 2.0.1
+ unist-util-position: 4.0.4
+ unist-util-visit: 4.1.2
+
mdast-util-to-hast@13.2.1:
dependencies:
'@types/hast': 3.0.4
@@ -11770,6 +16539,17 @@ snapshots:
unist-util-visit: 5.0.0
vfile: 6.0.3
+ mdast-util-to-markdown@1.5.0:
+ dependencies:
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ longest-streak: 3.1.0
+ mdast-util-phrasing: 3.0.1
+ mdast-util-to-string: 3.2.0
+ micromark-util-decode-string: 1.1.0
+ unist-util-visit: 4.1.2
+ zwitch: 2.0.4
+
mdast-util-to-markdown@2.1.2:
dependencies:
'@types/mdast': 4.0.4
@@ -11782,10 +16562,26 @@ snapshots:
unist-util-visit: 5.0.0
zwitch: 2.0.4
+ mdast-util-to-string@1.1.0: {}
+
+ mdast-util-to-string@3.2.0:
+ dependencies:
+ '@types/mdast': 3.0.15
+
mdast-util-to-string@4.0.0:
dependencies:
'@types/mdast': 4.0.4
+ mdast-util-toc@6.1.1:
+ dependencies:
+ '@types/extend': 3.0.4
+ '@types/mdast': 3.0.15
+ extend: 3.0.2
+ github-slugger: 2.0.0
+ mdast-util-to-string: 3.2.0
+ unist-util-is: 5.2.1
+ unist-util-visit: 4.1.2
+
mdn-data@2.12.2: {}
media-typer@0.3.0: {}
@@ -11794,6 +16590,8 @@ snapshots:
meow@13.2.0: {}
+ merge-descriptors@1.0.1: {}
+
merge-descriptors@1.0.3: {}
merge-stream@2.0.0: {}
@@ -11802,6 +16600,25 @@ snapshots:
methods@1.1.2: {}
+ micromark-core-commonmark@1.1.0:
+ dependencies:
+ decode-named-character-reference: 1.2.0
+ micromark-factory-destination: 1.1.0
+ micromark-factory-label: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-factory-title: 1.1.0
+ micromark-factory-whitespace: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-classify-character: 1.1.0
+ micromark-util-html-tag-name: 1.2.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-subtokenize: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
micromark-core-commonmark@2.0.3:
dependencies:
decode-named-character-reference: 1.2.0
@@ -11821,6 +16638,20 @@ snapshots:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-extension-frontmatter@2.0.0:
+ dependencies:
+ fault: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-extension-gfm-autolink-literal@1.0.5:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-sanitize-uri: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
micromark-extension-gfm-autolink-literal@2.1.0:
dependencies:
micromark-util-character: 2.1.1
@@ -11828,6 +16659,17 @@ snapshots:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-extension-gfm-footnote@1.1.2:
+ dependencies:
+ micromark-core-commonmark: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-sanitize-uri: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
micromark-extension-gfm-footnote@2.1.0:
dependencies:
devlop: 1.1.0
@@ -11839,6 +16681,15 @@ snapshots:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-extension-gfm-strikethrough@1.0.7:
+ dependencies:
+ micromark-util-chunked: 1.1.0
+ micromark-util-classify-character: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
micromark-extension-gfm-strikethrough@2.1.0:
dependencies:
devlop: 1.1.0
@@ -11848,6 +16699,14 @@ snapshots:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-extension-gfm-table@1.0.7:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
micromark-extension-gfm-table@2.1.1:
dependencies:
devlop: 1.1.0
@@ -11856,10 +16715,22 @@ snapshots:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-extension-gfm-tagfilter@1.0.2:
+ dependencies:
+ micromark-util-types: 1.1.0
+
micromark-extension-gfm-tagfilter@2.0.0:
dependencies:
micromark-util-types: 2.0.2
+ micromark-extension-gfm-task-list-item@1.0.5:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
micromark-extension-gfm-task-list-item@2.1.0:
dependencies:
devlop: 1.1.0
@@ -11868,6 +16739,17 @@ snapshots:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-extension-gfm@2.0.3:
+ dependencies:
+ micromark-extension-gfm-autolink-literal: 1.0.5
+ micromark-extension-gfm-footnote: 1.1.2
+ micromark-extension-gfm-strikethrough: 1.0.7
+ micromark-extension-gfm-table: 1.0.7
+ micromark-extension-gfm-tagfilter: 1.0.2
+ micromark-extension-gfm-task-list-item: 1.0.5
+ micromark-util-combine-extensions: 1.1.0
+ micromark-util-types: 1.1.0
+
micromark-extension-gfm@3.0.0:
dependencies:
micromark-extension-gfm-autolink-literal: 2.1.0
@@ -11879,12 +16761,87 @@ snapshots:
micromark-util-combine-extensions: 2.0.1
micromark-util-types: 2.0.2
+ micromark-extension-math@3.1.0:
+ dependencies:
+ '@types/katex': 0.16.7
+ devlop: 1.1.0
+ katex: 0.16.27
+ 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-mdx-expression@3.0.1:
+ dependencies:
+ '@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
+
+ micromark-extension-mdx-jsx@3.0.1:
+ dependencies:
+ '@types/acorn': 4.0.6
+ '@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
+
+ micromark-extension-mdx-md@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.2
+
+ 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
+
+ micromark-extension-mdxjs@3.0.0:
+ dependencies:
+ 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.1
+ 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
+
+ micromark-factory-destination@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
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
+ micromark-factory-label@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
micromark-factory-label@2.0.1:
dependencies:
devlop: 1.1.0
@@ -11892,11 +16849,35 @@ snapshots:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-factory-mdx-expression@2.0.3:
+ dependencies:
+ '@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
+
+ micromark-factory-space@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-types: 1.1.0
+
micromark-factory-space@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-types: 2.0.2
+ micromark-factory-title@1.1.0:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
micromark-factory-title@2.0.1:
dependencies:
micromark-factory-space: 2.0.1
@@ -11904,6 +16885,13 @@ snapshots:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-factory-whitespace@1.1.0:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
micromark-factory-whitespace@2.0.1:
dependencies:
micromark-factory-space: 2.0.1
@@ -11911,30 +16899,61 @@ snapshots:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-util-character@1.2.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
micromark-util-character@2.1.1:
dependencies:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-util-chunked@1.1.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+
micromark-util-chunked@2.0.1:
dependencies:
micromark-util-symbol: 2.0.1
+ micromark-util-classify-character@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
micromark-util-classify-character@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-util-combine-extensions@1.1.0:
+ dependencies:
+ micromark-util-chunked: 1.1.0
+ micromark-util-types: 1.1.0
+
micromark-util-combine-extensions@2.0.1:
dependencies:
micromark-util-chunked: 2.0.1
micromark-util-types: 2.0.2
+ micromark-util-decode-numeric-character-reference@1.1.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+
micromark-util-decode-numeric-character-reference@2.0.2:
dependencies:
micromark-util-symbol: 2.0.1
+ micromark-util-decode-string@1.1.0:
+ dependencies:
+ decode-named-character-reference: 1.2.0
+ micromark-util-character: 1.2.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-symbol: 1.1.0
+
micromark-util-decode-string@2.0.1:
dependencies:
decode-named-character-reference: 1.2.0
@@ -11942,24 +16961,59 @@ snapshots:
micromark-util-decode-numeric-character-reference: 2.0.2
micromark-util-symbol: 2.0.1
+ micromark-util-encode@1.1.0: {}
+
micromark-util-encode@2.0.1: {}
+ micromark-util-events-to-acorn@2.0.3:
+ dependencies:
+ '@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
+
+ micromark-util-html-tag-name@1.2.0: {}
+
micromark-util-html-tag-name@2.0.1: {}
+ micromark-util-normalize-identifier@1.1.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+
micromark-util-normalize-identifier@2.0.1:
dependencies:
micromark-util-symbol: 2.0.1
+ micromark-util-resolve-all@1.1.0:
+ dependencies:
+ micromark-util-types: 1.1.0
+
micromark-util-resolve-all@2.0.1:
dependencies:
micromark-util-types: 2.0.2
+ micromark-util-sanitize-uri@1.2.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-encode: 1.1.0
+ micromark-util-symbol: 1.1.0
+
micromark-util-sanitize-uri@2.0.1:
dependencies:
micromark-util-character: 2.1.1
micromark-util-encode: 2.0.1
micromark-util-symbol: 2.0.1
+ micromark-util-subtokenize@1.1.0:
+ dependencies:
+ micromark-util-chunked: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
micromark-util-subtokenize@2.1.0:
dependencies:
devlop: 1.1.0
@@ -11967,10 +17021,36 @@ snapshots:
micromark-util-symbol: 2.0.1
micromark-util-types: 2.0.2
+ micromark-util-symbol@1.1.0: {}
+
micromark-util-symbol@2.0.1: {}
+ micromark-util-types@1.1.0: {}
+
micromark-util-types@2.0.2: {}
+ micromark@3.2.0:
+ dependencies:
+ '@types/debug': 4.1.12
+ debug: 4.4.3(supports-color@5.5.0)
+ decode-named-character-reference: 1.2.0
+ micromark-core-commonmark: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-combine-extensions: 1.1.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-encode: 1.1.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-sanitize-uri: 1.2.0
+ micromark-util-subtokenize: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+ transitivePeerDependencies:
+ - supports-color
+
micromark@4.0.2:
dependencies:
'@types/debug': 4.1.12
@@ -12030,6 +17110,8 @@ snapshots:
mimic-response@3.1.0: {}
+ mimic-response@4.0.0: {}
+
minimalistic-assert@1.0.1: {}
minimalistic-crypto-utils@1.0.1: {}
@@ -12046,6 +17128,10 @@ snapshots:
dependencies:
brace-expansion: 1.1.12
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.2
+
minimatch@7.4.6:
dependencies:
brace-expansion: 2.0.2
@@ -12063,10 +17149,8 @@ snapshots:
minipass@3.3.6:
dependencies:
yallist: 4.0.0
- optional: true
- minipass@5.0.0:
- optional: true
+ minipass@5.0.0: {}
minipass@7.1.2: {}
@@ -12074,7 +17158,28 @@ snapshots:
dependencies:
minipass: 3.3.6
yallist: 4.0.0
- optional: true
+
+ mintlify@4.2.295(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@22.19.2)(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3):
+ dependencies:
+ '@mintlify/cli': 4.0.899(@radix-ui/react-popover@1.1.15(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@22.19.2)(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3)
+ transitivePeerDependencies:
+ - '@radix-ui/react-popover'
+ - '@types/node'
+ - '@types/react'
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - debug
+ - encoding
+ - react-devtools-core
+ - react-dom
+ - react-native-b4a
+ - supports-color
+ - ts-node
+ - typescript
+ - utf-8-validate
+
+ mitt@3.0.1: {}
mkdirp-classic@0.5.3: {}
@@ -12087,12 +17192,16 @@ snapshots:
pkg-types: 1.3.1
ufo: 1.6.1
+ mri@1.2.0: {}
+
ms@2.0.0: {}
ms@2.1.3: {}
muggle-string@0.4.1: {}
+ mute-stream@2.0.0: {}
+
mz@2.7.0:
dependencies:
any-promise: 1.3.0
@@ -12141,8 +17250,42 @@ snapshots:
neo-async@2.6.2: {}
+ neotraverse@0.6.18: {}
+
nerf-dart@1.0.0: {}
+ netmask@2.0.2: {}
+
+ next-mdx-remote-client@1.1.4(@types/react@19.2.9)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(unified@11.0.5):
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@mdx-js/mdx': 3.1.1
+ '@mdx-js/react': 3.1.1(@types/react@19.2.9)(react@19.2.3)
+ react: 19.2.3
+ react-dom: 18.3.1(react@19.2.3)
+ remark-mdx-remove-esm: 1.2.2(unified@11.0.5)
+ serialize-error: 12.0.0
+ vfile: 6.0.3
+ vfile-matter: 5.0.1
+ transitivePeerDependencies:
+ - '@types/react'
+ - supports-color
+ - unified
+
+ nimma@0.2.3:
+ dependencies:
+ '@jsep-plugin/regex': 1.0.4(jsep@1.4.0)
+ '@jsep-plugin/ternary': 1.1.4(jsep@1.4.0)
+ astring: 1.9.0
+ jsep: 1.4.0
+ optionalDependencies:
+ jsonpath-plus: 10.3.0
+ lodash.topath: 4.5.2
+
+ nlcst-to-string@4.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+
node-abi@3.85.0:
dependencies:
semver: 7.7.3
@@ -12172,6 +17315,8 @@ snapshots:
fetch-blob: 3.2.0
formdata-polyfill: 4.0.10
+ node-releases@2.0.27: {}
+
node-stdlib-browser@1.3.1:
dependencies:
assert: 2.1.0
@@ -12231,6 +17376,13 @@ snapshots:
semver: 5.7.2
validate-npm-package-license: 3.0.4
+ normalize-package-data@3.0.3:
+ dependencies:
+ hosted-git-info: 4.1.0
+ is-core-module: 2.16.1
+ semver: 7.7.3
+ validate-npm-package-license: 3.0.4
+
normalize-package-data@6.0.2:
dependencies:
hosted-git-info: 7.0.2
@@ -12270,6 +17422,8 @@ snapshots:
object-assign@4.1.1: {}
+ object-hash@3.0.0: {}
+
object-inspect@1.13.4: {}
object-is@1.1.6:
@@ -12337,6 +17491,14 @@ snapshots:
dependencies:
mimic-function: 5.0.1
+ oniguruma-parser@0.12.1: {}
+
+ oniguruma-to-es@4.3.4:
+ dependencies:
+ oniguruma-parser: 0.12.1
+ regex: 6.1.0
+ regex-recursion: 6.0.2
+
open@7.4.2:
dependencies:
is-docker: 2.2.1
@@ -12348,6 +17510,8 @@ snapshots:
is-docker: 2.2.1
is-wsl: 2.2.0
+ openapi-types@12.1.3: {}
+
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
@@ -12366,10 +17530,16 @@ snapshots:
get-intrinsic: 1.3.0
object-keys: 1.1.1
safe-push-apply: 1.0.0
- optional: true
+
+ p-any@4.0.0:
+ dependencies:
+ p-cancelable: 3.0.0
+ p-some: 6.0.0
p-cancelable@2.1.1: {}
+ p-cancelable@3.0.0: {}
+
p-each-series@3.0.0: {}
p-event@6.0.1:
@@ -12416,10 +17586,35 @@ snapshots:
p-reduce@3.0.0: {}
+ p-some@6.0.0:
+ dependencies:
+ aggregate-error: 4.0.1
+ p-cancelable: 3.0.0
+
+ p-timeout@5.1.0: {}
+
p-timeout@6.1.4: {}
p-try@1.0.0: {}
+ pac-proxy-agent@7.2.0:
+ dependencies:
+ '@tootallnate/quickjs-emscripten': 0.23.0
+ agent-base: 7.1.4
+ debug: 4.4.3(supports-color@5.5.0)
+ get-uri: 6.0.5
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ pac-resolver: 7.0.1
+ socks-proxy-agent: 8.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ pac-resolver@7.0.1:
+ dependencies:
+ degenerator: 5.0.1
+ netmask: 2.0.2
+
package-json-from-dist@1.0.1: {}
pako@0.2.9: {}
@@ -12442,10 +17637,26 @@ snapshots:
parse-bmfont-binary@1.0.6: {}
- parse-bmfont-xml@1.1.6:
+ parse-bmfont-xml@1.1.6:
+ dependencies:
+ xml-parse-from-string: 1.0.1
+ xml2js: 0.5.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
+
+ parse-filepath@1.0.2:
dependencies:
- xml-parse-from-string: 1.0.1
- xml2js: 0.5.0
+ is-absolute: 1.0.0
+ map-cache: 0.2.2
+ path-root: 0.1.1
parse-imports-exports@0.2.4:
dependencies:
@@ -12465,14 +17676,31 @@ snapshots:
parse-json@8.3.0:
dependencies:
- '@babel/code-frame': 7.27.1
+ '@babel/code-frame': 7.28.6
index-to-position: 1.2.0
type-fest: 4.41.0
+ parse-latin@7.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ '@types/unist': 3.0.3
+ nlcst-to-string: 4.0.0
+ unist-util-modify-children: 4.0.0
+ unist-util-visit-children: 3.0.0
+ vfile: 6.0.3
+
parse-ms@4.0.0: {}
+ parse-path@7.1.0:
+ dependencies:
+ protocols: 2.0.2
+
parse-statements@1.0.11: {}
+ parse-url@8.1.0:
+ dependencies:
+ parse-path: 7.1.0
+
parse5-htmlparser2-tree-adapter@6.0.1:
dependencies:
parse5: 6.0.1
@@ -12491,6 +17719,8 @@ snapshots:
parseurl@1.3.3: {}
+ patch-console@2.0.0: {}
+
patch-package@8.0.1:
dependencies:
'@yarnpkg/lockfile': 1.1.0
@@ -12524,6 +17754,12 @@ snapshots:
path-parse@1.0.7: {}
+ path-root-regex@0.1.2: {}
+
+ path-root@0.1.1:
+ dependencies:
+ path-root-regex: 0.1.2
+
path-scurry@1.11.1:
dependencies:
lru-cache: 10.4.3
@@ -12531,6 +17767,8 @@ snapshots:
path-to-regexp@0.1.12: {}
+ path-to-regexp@0.1.7: {}
+
path-type@4.0.0: {}
path2d@0.2.2:
@@ -12565,6 +17803,8 @@ snapshots:
duplexify: 3.7.1
through2: 2.0.5
+ pend@1.2.0: {}
+
performance-now@2.1.0: {}
picocolors@1.1.1: {}
@@ -12575,8 +17815,12 @@ snapshots:
pidtree@0.6.0: {}
+ pify@2.3.0: {}
+
pify@3.0.0: {}
+ pify@6.1.0: {}
+
pinia@2.3.1(typescript@5.9.3)(vue@3.5.25(typescript@5.9.3)):
dependencies:
'@vue/devtools-api': 6.6.4
@@ -12655,8 +17899,29 @@ snapshots:
pngjs@7.0.0: {}
+ pony-cause@1.1.1: {}
+
possible-typed-array-names@1.1.0: {}
+ postcss-import@15.1.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+ read-cache: 1.0.0
+ resolve: 1.22.11
+
+ postcss-js@4.1.0(postcss@8.5.6):
+ dependencies:
+ camelcase-css: 2.0.1
+ postcss: 8.5.6
+
+ postcss-load-config@4.0.2(postcss@8.5.6):
+ dependencies:
+ lilconfig: 3.1.3
+ yaml: 2.8.2
+ optionalDependencies:
+ postcss: 8.5.6
+
postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2):
dependencies:
lilconfig: 3.1.3
@@ -12685,6 +17950,8 @@ snapshots:
cssesc: 3.0.0
util-deprecate: 1.0.2
+ postcss-value-parser@4.2.0: {}
+
postcss@8.5.6:
dependencies:
nanoid: 3.3.11
@@ -12724,6 +17991,10 @@ snapshots:
process@0.11.10: {}
+ progress@2.0.3: {}
+
+ property-information@6.5.0: {}
+
property-information@7.1.0: {}
prosemirror-commands@1.7.1:
@@ -12808,11 +18079,28 @@ snapshots:
proto-list@1.2.4: {}
+ protocols@2.0.2: {}
+
proxy-addr@2.0.7:
dependencies:
forwarded: 0.2.0
ipaddr.js: 1.9.1
+ proxy-agent@6.5.0:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3(supports-color@5.5.0)
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ lru-cache: 7.18.3
+ pac-proxy-agent: 7.2.0
+ proxy-from-env: 1.1.0
+ socks-proxy-agent: 8.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ proxy-from-env@1.1.0: {}
+
pstree.remy@1.1.8: {}
public-encrypt@4.0.3:
@@ -12824,6 +18112,12 @@ snapshots:
randombytes: 2.1.0
safe-buffer: 5.2.1
+ public-ip@5.0.0:
+ dependencies:
+ dns-socket: 4.2.2
+ got: 12.6.1
+ is-ip: 3.1.0
+
pump@2.0.1:
dependencies:
end-of-stream: 1.4.5
@@ -12844,6 +18138,40 @@ snapshots:
punycode@2.3.1: {}
+ puppeteer-core@22.14.0:
+ dependencies:
+ '@puppeteer/browsers': 2.3.0
+ chromium-bidi: 0.6.2(devtools-protocol@0.0.1312386)
+ debug: 4.4.3(supports-color@5.5.0)
+ devtools-protocol: 0.0.1312386
+ ws: 8.18.3
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - react-native-b4a
+ - supports-color
+ - utf-8-validate
+
+ puppeteer@22.14.0(typescript@5.9.3):
+ dependencies:
+ '@puppeteer/browsers': 2.3.0
+ cosmiconfig: 9.0.0(typescript@5.9.3)
+ devtools-protocol: 0.0.1312386
+ puppeteer-core: 22.14.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - bufferutil
+ - react-native-b4a
+ - supports-color
+ - typescript
+ - utf-8-validate
+
+ qs@6.11.0:
+ dependencies:
+ side-channel: 1.1.0
+
qs@6.13.0:
dependencies:
side-channel: 1.1.0
@@ -12873,6 +18201,13 @@ snapshots:
range-parser@1.2.1: {}
+ raw-body@2.5.1:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+
raw-body@2.5.2:
dependencies:
bytes: 3.1.2
@@ -12887,12 +18222,62 @@ snapshots:
minimist: 1.2.8
strip-json-comments: 2.0.1
+ react-dom@18.3.1(react@19.2.3):
+ dependencies:
+ loose-envify: 1.4.0
+ react: 19.2.3
+ scheduler: 0.23.2
+
+ react-reconciler@0.32.0(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+ scheduler: 0.26.0
+
+ react-remove-scroll-bar@2.3.8(@types/react@19.2.9)(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+ react-style-singleton: 2.2.3(@types/react@19.2.9)(react@19.2.3)
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ react-remove-scroll@2.7.2(@types/react@19.2.9)(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+ react-remove-scroll-bar: 2.3.8(@types/react@19.2.9)(react@19.2.3)
+ react-style-singleton: 2.2.3(@types/react@19.2.9)(react@19.2.3)
+ tslib: 2.8.1
+ use-callback-ref: 1.3.3(@types/react@19.2.9)(react@19.2.3)
+ use-sidecar: 1.1.3(@types/react@19.2.9)(react@19.2.3)
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ react-style-singleton@2.2.3(@types/react@19.2.9)(react@19.2.3):
+ dependencies:
+ get-nonce: 1.0.1
+ react: 19.2.3
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ react@19.2.3: {}
+
+ read-cache@1.0.0:
+ dependencies:
+ pify: 2.3.0
+
read-package-up@11.0.0:
dependencies:
find-up-simple: 1.0.1
read-pkg: 9.0.1
type-fest: 4.41.0
+ read-pkg-up@9.1.0:
+ dependencies:
+ find-up: 6.3.0
+ read-pkg: 7.1.0
+ type-fest: 2.19.0
+
read-pkg@5.2.0:
dependencies:
'@types/normalize-package-data': 2.4.4
@@ -12900,6 +18285,13 @@ snapshots:
parse-json: 5.2.0
type-fest: 0.6.0
+ read-pkg@7.1.0:
+ dependencies:
+ '@types/normalize-package-data': 2.4.4
+ normalize-package-data: 3.0.3
+ parse-json: 5.2.0
+ type-fest: 2.19.0
+
read-pkg@9.0.1:
dependencies:
'@types/normalize-package-data': 2.4.4
@@ -12944,6 +18336,35 @@ snapshots:
real-require@0.2.0: {}
+ recma-build-jsx@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-util-build-jsx: 3.0.1
+ vfile: 6.0.3
+
+ recma-jsx@1.0.1(acorn@8.15.0):
+ dependencies:
+ 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
+
+ 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
+
reflect.getprototypeof@1.0.10:
dependencies:
call-bind: 1.0.8
@@ -12954,7 +18375,16 @@ snapshots:
get-intrinsic: 1.3.0
get-proto: 1.0.1
which-builtin-type: 1.2.1
- optional: true
+
+ regex-recursion@6.0.2:
+ dependencies:
+ regex-utilities: 2.3.0
+
+ regex-utilities@2.3.0: {}
+
+ regex@6.1.0:
+ dependencies:
+ regex-utilities: 2.3.0
regexp.prototype.flags@1.5.4:
dependencies:
@@ -12964,7 +18394,6 @@ snapshots:
get-proto: 1.0.1
gopd: 1.2.0
set-function-name: 2.0.2
- optional: true
registry-auth-token@4.2.2:
dependencies:
@@ -12974,6 +18403,16 @@ snapshots:
dependencies:
'@pnpm/npm-conf': 2.3.1
+ rehype-katex@7.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/katex': 0.16.7
+ hast-util-from-html-isomorphic: 2.0.0
+ hast-util-to-text: 4.0.2
+ katex: 0.16.27
+ unist-util-visit-parents: 6.0.2
+ vfile: 6.0.3
+
rehype-minify-whitespace@6.0.2:
dependencies:
'@types/hast': 3.0.4
@@ -12985,6 +18424,14 @@ snapshots:
hast-util-from-html: 2.0.3
unified: 11.0.5
+ 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
+
rehype-remark@10.0.1:
dependencies:
'@types/hast': 3.0.4
@@ -12993,6 +18440,41 @@ snapshots:
unified: 11.0.5
vfile: 6.0.3
+ rehype-stringify@10.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.5
+ unified: 11.0.5
+
+ remark-frontmatter@5.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-frontmatter: 2.0.1
+ micromark-extension-frontmatter: 2.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-gfm@3.0.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-gfm: 2.0.2
+ micromark-extension-gfm: 2.0.3
+ unified: 10.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-gfm@4.0.0:
+ 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-gfm@4.0.1:
dependencies:
'@types/mdast': 4.0.4
@@ -13004,6 +18486,54 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ remark-html@15.0.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ hast-util-sanitize: 4.1.0
+ hast-util-to-html: 8.0.4
+ mdast-util-to-hast: 12.3.0
+ unified: 10.1.2
+
+ remark-math@6.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-math: 3.0.0
+ micromark-extension-math: 3.1.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-mdx-remove-esm@1.2.2(unified@11.0.5):
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-mdxjs-esm: 2.0.1
+ unified: 11.0.5
+ unist-util-remove: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-mdx@3.0.1:
+ dependencies:
+ mdast-util-mdx: 3.0.0
+ micromark-extension-mdxjs: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-mdx@3.1.0:
+ dependencies:
+ mdast-util-mdx: 3.0.0
+ micromark-extension-mdxjs: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-parse@10.0.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-from-markdown: 1.3.1
+ unified: 10.1.2
+ transitivePeerDependencies:
+ - supports-color
+
remark-parse@11.0.0:
dependencies:
'@types/mdast': 4.0.4
@@ -13013,12 +18543,63 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ remark-reference-links@6.0.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ unified: 10.1.2
+ unist-util-visit: 4.1.2
+
+ remark-rehype@11.1.1:
+ dependencies:
+ '@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-smartypants@3.0.2:
+ dependencies:
+ retext: 9.0.0
+ retext-smartypants: 6.2.0
+ unified: 11.0.5
+ unist-util-visit: 5.0.0
+
+ remark-stringify@10.0.3:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-to-markdown: 1.5.0
+ unified: 10.1.2
+
remark-stringify@11.0.0:
dependencies:
'@types/mdast': 4.0.4
mdast-util-to-markdown: 2.1.2
unified: 11.0.5
+ remark-toc@8.0.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-toc: 6.1.1
+ unified: 10.1.2
+
+ remark@14.0.3:
+ dependencies:
+ '@types/mdast': 3.0.15
+ remark-parse: 10.0.2
+ remark-stringify: 10.0.3
+ unified: 10.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ 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: {}
require-from-string@2.0.2: {}
@@ -13041,11 +18622,45 @@ snapshots:
dependencies:
lowercase-keys: 2.0.0
+ responselike@3.0.0:
+ dependencies:
+ lowercase-keys: 3.0.0
+
+ restore-cursor@4.0.0:
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+
restore-cursor@5.1.0:
dependencies:
onetime: 7.0.0
signal-exit: 4.1.0
+ retext-latin@4.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ parse-latin: 7.0.0
+ unified: 11.0.5
+
+ retext-smartypants@6.2.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ nlcst-to-string: 4.0.0
+ unist-util-visit: 5.0.0
+
+ retext-stringify@4.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ nlcst-to-string: 4.0.0
+ unified: 11.0.5
+
+ retext@9.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ retext-latin: 4.0.0
+ retext-stringify: 4.0.0
+ unified: 11.0.5
+
reusify@1.1.0: {}
rfdc@1.4.1: {}
@@ -13106,6 +18721,8 @@ snapshots:
rope-sequence@1.3.4: {}
+ run-async@3.0.0: {}
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -13114,6 +18731,10 @@ snapshots:
dependencies:
tslib: 2.8.1
+ sade@1.8.1:
+ dependencies:
+ mri: 1.2.0
+
safe-array-concat@1.1.3:
dependencies:
call-bind: 1.0.8
@@ -13121,7 +18742,6 @@ snapshots:
get-intrinsic: 1.3.0
has-symbols: 1.1.0
isarray: 2.0.5
- optional: true
safe-buffer@5.1.2: {}
@@ -13131,7 +18751,6 @@ snapshots:
dependencies:
es-errors: 1.3.0
isarray: 2.0.5
- optional: true
safe-regex-test@1.1.0:
dependencies:
@@ -13139,6 +18758,8 @@ snapshots:
es-errors: 1.3.0
is-regex: 1.2.1
+ safe-stable-stringify@1.1.1: {}
+
safe-stable-stringify@2.5.0: {}
safer-buffer@2.1.2: {}
@@ -13149,6 +18770,12 @@ snapshots:
dependencies:
xmlchars: 2.2.0
+ scheduler@0.23.2:
+ dependencies:
+ loose-envify: 1.4.0
+
+ scheduler@0.26.0: {}
+
seemly@0.3.10: {}
semantic-release-linear-app@0.5.1(semantic-release@24.2.9(typescript@5.9.3)):
@@ -13217,8 +18844,7 @@ snapshots:
semver@5.7.2: {}
- semver@6.3.1:
- optional: true
+ semver@6.3.1: {}
semver@7.5.4:
dependencies:
@@ -13228,6 +18854,24 @@ snapshots:
semver@7.7.3: {}
+ send@0.18.0:
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
send@0.19.0:
dependencies:
debug: 2.6.9
@@ -13246,6 +18890,19 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ serialize-error@12.0.0:
+ dependencies:
+ type-fest: 4.41.0
+
+ serve-static@1.15.0:
+ dependencies:
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.18.0
+ transitivePeerDependencies:
+ - supports-color
+
serve-static@1.16.2:
dependencies:
encodeurl: 2.0.0
@@ -13273,14 +18930,12 @@ snapshots:
es-errors: 1.3.0
functions-have-names: 1.2.3
has-property-descriptors: 1.0.2
- optional: true
set-proto@1.0.0:
dependencies:
dunder-proto: 1.0.1
es-errors: 1.3.0
es-object-atoms: 1.1.1
- optional: true
setimmediate@1.0.5: {}
@@ -13292,6 +18947,38 @@ snapshots:
safe-buffer: 5.2.1
to-buffer: 1.2.2
+ sharp-ico@0.1.5:
+ dependencies:
+ decode-ico: 0.4.1
+ ico-endec: 0.1.6
+ sharp: 0.33.5
+
+ sharp@0.33.5:
+ dependencies:
+ color: 4.2.3
+ detect-libc: 2.1.2
+ semver: 7.7.3
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.33.5
+ '@img/sharp-darwin-x64': 0.33.5
+ '@img/sharp-libvips-darwin-arm64': 1.0.4
+ '@img/sharp-libvips-darwin-x64': 1.0.4
+ '@img/sharp-libvips-linux-arm': 1.0.5
+ '@img/sharp-libvips-linux-arm64': 1.0.4
+ '@img/sharp-libvips-linux-s390x': 1.0.4
+ '@img/sharp-libvips-linux-x64': 1.0.4
+ '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
+ '@img/sharp-libvips-linuxmusl-x64': 1.0.4
+ '@img/sharp-linux-arm': 0.33.5
+ '@img/sharp-linux-arm64': 0.33.5
+ '@img/sharp-linux-s390x': 0.33.5
+ '@img/sharp-linux-x64': 0.33.5
+ '@img/sharp-linuxmusl-arm64': 0.33.5
+ '@img/sharp-linuxmusl-x64': 0.33.5
+ '@img/sharp-wasm32': 0.33.5
+ '@img/sharp-win32-ia32': 0.33.5
+ '@img/sharp-win32-x64': 0.33.5
+
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
@@ -13300,6 +18987,17 @@ snapshots:
shell-quote@1.8.3: {}
+ shiki@3.21.0:
+ dependencies:
+ '@shikijs/core': 3.21.0
+ '@shikijs/engine-javascript': 3.21.0
+ '@shikijs/engine-oniguruma': 3.21.0
+ '@shikijs/langs': 3.21.0
+ '@shikijs/themes': 3.21.0
+ '@shikijs/types': 3.21.0
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.4
+
side-channel-list@1.0.0:
dependencies:
es-errors: 1.3.0
@@ -13342,6 +19040,10 @@ snapshots:
simple-concat@1.0.1: {}
+ simple-eval@1.0.1:
+ dependencies:
+ jsep: 1.4.0
+
simple-get@3.1.1:
dependencies:
decompress-response: 4.2.1
@@ -13355,6 +19057,10 @@ snapshots:
once: 1.4.0
simple-concat: 1.0.1
+ simple-swizzle@0.2.4:
+ dependencies:
+ is-arrayish: 0.3.4
+
simple-update-notifier@2.0.0:
dependencies:
semver: 7.7.3
@@ -13369,11 +19075,61 @@ snapshots:
slash@3.0.0: {}
+ slice-ansi@5.0.0:
+ dependencies:
+ ansi-styles: 6.2.3
+ is-fullwidth-code-point: 4.0.0
+
slice-ansi@7.1.2:
dependencies:
ansi-styles: 6.2.3
is-fullwidth-code-point: 5.1.0
+ smart-buffer@4.2.0: {}
+
+ socket.io-adapter@2.5.6:
+ dependencies:
+ debug: 4.4.3(supports-color@5.5.0)
+ ws: 8.18.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ socket.io-parser@4.2.5:
+ dependencies:
+ '@socket.io/component-emitter': 3.1.2
+ debug: 4.4.3(supports-color@5.5.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ socket.io@4.7.2:
+ dependencies:
+ accepts: 1.3.8
+ base64id: 2.0.0
+ cors: 2.8.5
+ debug: 4.3.7
+ engine.io: 6.5.5
+ socket.io-adapter: 2.5.6
+ socket.io-parser: 4.2.5
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ socks-proxy-agent@8.0.5:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3(supports-color@5.5.0)
+ socks: 2.8.7
+ transitivePeerDependencies:
+ - supports-color
+
+ socks@2.8.7:
+ dependencies:
+ ip-address: 10.1.0
+ smart-buffer: 4.2.0
+
sonic-boom@3.8.1:
dependencies:
atomic-sleep: 1.0.0
@@ -13433,6 +19189,10 @@ snapshots:
stable-hash-x@0.2.0: {}
+ stack-utils@2.0.6:
+ dependencies:
+ escape-string-regexp: 2.0.0
+
stackback@0.0.2: {}
statuses@2.0.1: {}
@@ -13447,7 +19207,6 @@ snapshots:
dependencies:
es-errors: 1.3.0
internal-slot: 1.1.0
- optional: true
stream-browserify@3.0.0:
dependencies:
@@ -13511,7 +19270,6 @@ snapshots:
es-abstract: 1.24.1
es-object-atoms: 1.1.1
has-property-descriptors: 1.0.2
- optional: true
string.prototype.trimend@1.0.9:
dependencies:
@@ -13519,14 +19277,12 @@ snapshots:
call-bound: 1.0.4
define-properties: 1.2.1
es-object-atoms: 1.1.1
- optional: true
string.prototype.trimstart@1.0.8:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
es-object-atoms: 1.1.1
- optional: true
string_decoder@1.1.1:
dependencies:
@@ -13561,6 +19317,8 @@ snapshots:
strip-json-comments@3.1.1: {}
+ strip-json-comments@5.0.3: {}
+
strip-literal@3.1.0:
dependencies:
js-tokens: 9.0.1
@@ -13570,6 +19328,14 @@ snapshots:
'@tokenizer/token': 0.3.0
peek-readable: 4.1.0
+ style-to-js@1.1.21:
+ dependencies:
+ style-to-object: 1.0.14
+
+ style-to-object@1.0.14:
+ dependencies:
+ inline-style-parser: 0.2.7
+
sucrase@3.35.1:
dependencies:
'@jridgewell/gen-mapping': 0.3.13
@@ -13598,6 +19364,8 @@ snapshots:
dependencies:
has-flag: 4.0.0
+ supports-color@9.4.0: {}
+
supports-hyperlinks@3.2.0:
dependencies:
has-flag: 4.0.0
@@ -13607,6 +19375,33 @@ snapshots:
symbol-tree@3.2.4: {}
+ tailwindcss@3.4.4:
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ arg: 5.0.2
+ chokidar: 3.6.0
+ didyoumean: 1.2.2
+ dlv: 1.1.3
+ fast-glob: 3.3.3
+ glob-parent: 6.0.2
+ is-glob: 4.0.3
+ jiti: 1.21.7
+ lilconfig: 2.1.0
+ micromatch: 4.0.8
+ normalize-path: 3.0.0
+ object-hash: 3.0.0
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-import: 15.1.0(postcss@8.5.6)
+ postcss-js: 4.1.0(postcss@8.5.6)
+ postcss-load-config: 4.0.2(postcss@8.5.6)
+ postcss-nested: 6.2.0(postcss@8.5.6)
+ postcss-selector-parser: 6.1.2
+ resolve: 1.22.11
+ sucrase: 3.35.1
+ transitivePeerDependencies:
+ - ts-node
+
tar-fs@2.1.4:
dependencies:
chownr: 1.1.4
@@ -13614,6 +19409,18 @@ snapshots:
pump: 3.0.3
tar-stream: 2.2.0
+ tar-fs@3.1.1:
+ dependencies:
+ pump: 3.0.3
+ tar-stream: 3.1.7
+ optionalDependencies:
+ bare-fs: 4.5.2
+ bare-path: 3.0.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - react-native-b4a
+
tar-stream@2.2.0:
dependencies:
bl: 4.1.0
@@ -13631,6 +19438,15 @@ snapshots:
- bare-abort-controller
- react-native-b4a
+ tar@6.1.15:
+ dependencies:
+ chownr: 2.0.0
+ fs-minipass: 2.1.0
+ minipass: 5.0.0
+ minizlib: 2.1.2
+ mkdirp: 1.0.4
+ yallist: 4.0.0
+
tar@6.2.1:
dependencies:
chownr: 2.0.0
@@ -13744,6 +19560,8 @@ snapshots:
safe-buffer: 5.2.1
typed-array-buffer: 1.0.3
+ to-data-view@1.1.0: {}
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
@@ -13797,6 +19615,8 @@ snapshots:
strip-bom: 3.0.0
optional: true
+ tslib@1.14.1: {}
+
tslib@2.8.1: {}
tsup@8.5.1(@microsoft/api-extractor@7.55.2(@types/node@22.19.2))(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2):
@@ -13843,6 +19663,16 @@ snapshots:
tweetnacl@0.14.5: {}
+ twoslash-protocol@0.3.6: {}
+
+ twoslash@0.3.6(typescript@5.9.3):
+ dependencies:
+ '@typescript/vfs': 1.6.2(typescript@5.9.3)
+ twoslash-protocol: 0.3.6
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - supports-color
+
typanion@3.14.0: {}
type-check@0.4.0:
@@ -13851,6 +19681,8 @@ snapshots:
type-fest@0.16.0: {}
+ type-fest@0.21.3: {}
+
type-fest@0.6.0: {}
type-fest@1.4.0: {}
@@ -13877,7 +19709,6 @@ snapshots:
gopd: 1.2.0
has-proto: 1.2.0
is-typed-array: 1.1.15
- optional: true
typed-array-byte-offset@1.0.4:
dependencies:
@@ -13888,7 +19719,6 @@ snapshots:
has-proto: 1.2.0
is-typed-array: 1.1.15
reflect.getprototypeof: 1.0.10
- optional: true
typed-array-length@1.0.7:
dependencies:
@@ -13898,7 +19728,6 @@ snapshots:
is-typed-array: 1.1.15
possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
- optional: true
typescript-eslint@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3):
dependencies:
@@ -13926,7 +19755,13 @@ snapshots:
has-bigints: 1.1.0
has-symbols: 1.1.0
which-boxed-primitive: 1.1.1
- optional: true
+
+ unbzip2-stream@1.4.3:
+ dependencies:
+ buffer: 5.7.1
+ through: 2.3.8
+
+ unc-path-regex@0.1.2: {}
undefsafe@2.0.5: {}
@@ -13940,6 +19775,16 @@ snapshots:
unicorn-magic@0.3.0: {}
+ unified@10.1.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ bail: 2.0.2
+ extend: 3.0.2
+ is-buffer: 2.0.5
+ is-plain-obj: 4.1.0
+ trough: 2.2.0
+ vfile: 5.3.7
+
unified@11.0.5:
dependencies:
'@types/unist': 3.0.3
@@ -13958,28 +19803,94 @@ snapshots:
dependencies:
crypto-random-string: 4.0.0
+ unist-builder@3.0.1:
+ dependencies:
+ '@types/unist': 2.0.11
+
+ unist-builder@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
unist-util-find-after@5.0.0:
dependencies:
'@types/unist': 3.0.3
unist-util-is: 6.0.1
+ unist-util-generated@2.0.1: {}
+
+ unist-util-is@5.2.1:
+ dependencies:
+ '@types/unist': 2.0.11
+
unist-util-is@6.0.1:
dependencies:
'@types/unist': 3.0.3
+ unist-util-map@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-modify-children@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ array-iterate: 2.0.1
+
+ unist-util-position-from-estree@2.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-position@4.0.4:
+ dependencies:
+ '@types/unist': 2.0.11
+
unist-util-position@5.0.0:
dependencies:
'@types/unist': 3.0.3
+ unist-util-remove-position@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-visit: 5.0.0
+
+ unist-util-remove@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
+
+ unist-util-stringify-position@3.0.3:
+ dependencies:
+ '@types/unist': 2.0.11
+
unist-util-stringify-position@4.0.0:
dependencies:
'@types/unist': 3.0.3
+ unist-util-visit-children@3.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-visit-parents@5.1.3:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+
+ unist-util-visit-parents@6.0.1:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+
unist-util-visit-parents@6.0.2:
dependencies:
'@types/unist': 3.0.3
unist-util-is: 6.0.1
+ unist-util-visit@4.1.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+ unist-util-visit-parents: 5.1.3
+
unist-util-visit@5.0.0:
dependencies:
'@types/unist': 3.0.3
@@ -14020,10 +19931,18 @@ snapshots:
'@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
'@unrs/resolver-binding-win32-x64-msvc': 1.11.1
+ update-browserslist-db@1.2.3(browserslist@4.28.1):
+ dependencies:
+ browserslist: 4.28.1
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
uri-js@4.4.1:
dependencies:
punycode: 2.3.1
+ urijs@1.19.11: {}
+
url-join@5.0.0: {}
url@0.11.4:
@@ -14031,6 +19950,23 @@ snapshots:
punycode: 1.4.1
qs: 6.14.0
+ urlpattern-polyfill@10.0.0: {}
+
+ use-callback-ref@1.3.3(@types/react@19.2.9)(react@19.2.3):
+ dependencies:
+ react: 19.2.3
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.9
+
+ use-sidecar@1.1.3(@types/react@19.2.9)(react@19.2.3):
+ dependencies:
+ detect-node-es: 1.1.0
+ react: 19.2.3
+ tslib: 2.8.1
+ optionalDependencies:
+ '@types/react': 19.2.9
+
utif2@4.1.0:
dependencies:
pako: 1.0.11
@@ -14045,12 +19981,23 @@ snapshots:
is-typed-array: 1.1.15
which-typed-array: 1.1.19
+ utility-types@3.11.0: {}
+
utils-merge@1.0.1: {}
+ uuid@11.1.0: {}
+
uuid@8.3.2: {}
uuid@9.0.1: {}
+ uvu@0.5.6:
+ dependencies:
+ dequal: 2.0.3
+ diff: 5.2.2
+ kleur: 4.1.5
+ sade: 1.8.1
+
validate-npm-package-license@3.0.4:
dependencies:
spdx-correct: 3.2.0
@@ -14133,16 +20080,59 @@ snapshots:
core-util-is: 1.0.2
extsprintf: 1.3.0
+ vfile-location@4.1.0:
+ dependencies:
+ '@types/unist': 2.0.11
+ vfile: 5.3.7
+
vfile-location@5.0.3:
dependencies:
'@types/unist': 3.0.3
vfile: 6.0.3
+ vfile-matter@5.0.1:
+ dependencies:
+ vfile: 6.0.3
+ yaml: 2.8.2
+
+ vfile-message@3.1.4:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-stringify-position: 3.0.3
+
vfile-message@4.0.3:
dependencies:
'@types/unist': 3.0.3
unist-util-stringify-position: 4.0.0
+ vfile-reporter@7.0.5:
+ dependencies:
+ '@types/supports-color': 8.1.3
+ string-width: 5.1.2
+ supports-color: 9.4.0
+ unist-util-stringify-position: 3.0.3
+ vfile: 5.3.7
+ vfile-message: 3.1.4
+ vfile-sort: 3.0.1
+ vfile-statistics: 2.0.1
+
+ vfile-sort@3.0.1:
+ dependencies:
+ vfile: 5.3.7
+ vfile-message: 3.1.4
+
+ vfile-statistics@2.0.1:
+ dependencies:
+ vfile: 5.3.7
+ vfile-message: 3.1.4
+
+ vfile@5.3.7:
+ dependencies:
+ '@types/unist': 2.0.11
+ is-buffer: 2.0.5
+ unist-util-stringify-position: 3.0.3
+ vfile-message: 3.1.4
+
vfile@6.0.3:
dependencies:
'@types/unist': 3.0.3
@@ -14269,6 +20259,12 @@ snapshots:
dependencies:
vue: 3.5.25(typescript@5.9.3)
+ vue-template-compiler@2.7.16:
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+ optional: true
+
vue@3.5.25(typescript@5.9.3):
dependencies:
'@vue/compiler-dom': 3.5.25
@@ -14329,7 +20325,6 @@ snapshots:
is-number-object: 1.1.1
is-string: 1.1.1
is-symbol: 1.1.1
- optional: true
which-builtin-type@1.2.1:
dependencies:
@@ -14346,7 +20341,6 @@ snapshots:
which-boxed-primitive: 1.1.1
which-collection: 1.0.2
which-typed-array: 1.1.19
- optional: true
which-collection@1.0.2:
dependencies:
@@ -14354,7 +20348,6 @@ snapshots:
is-set: 2.0.3
is-weakmap: 2.0.2
is-weakset: 2.0.4
- optional: true
which-typed-array@1.1.19:
dependencies:
@@ -14380,10 +20373,20 @@ snapshots:
string-width: 4.2.3
optional: true
+ widest-line@5.0.0:
+ dependencies:
+ string-width: 7.2.0
+
word-wrap@1.2.5: {}
wordwrap@1.0.0: {}
+ wrap-ansi@6.2.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
wrap-ansi@7.0.0:
dependencies:
ansi-styles: 4.3.0
@@ -14404,6 +20407,8 @@ snapshots:
wrappy@1.0.2: {}
+ ws@8.17.1: {}
+
ws@8.18.3: {}
xml-js@1.6.11:
@@ -14419,6 +20424,11 @@ snapshots:
sax: 1.4.3
xmlbuilder: 11.0.1
+ xml2js@0.6.2:
+ dependencies:
+ sax: 1.4.3
+ xmlbuilder: 11.0.1
+
xmlbuilder@11.0.1: {}
xmlchars@2.2.0: {}
@@ -14447,6 +20457,8 @@ snapshots:
y18n@5.0.8: {}
+ yallist@3.1.1: {}
+
yallist@4.0.0: {}
yaml@2.8.2: {}
@@ -14465,6 +20477,16 @@ snapshots:
y18n: 5.0.8
yargs-parser: 20.2.9
+ yargs@17.7.1:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
yargs@17.7.2:
dependencies:
cliui: 8.0.1
@@ -14475,6 +20497,11 @@ snapshots:
y18n: 5.0.8
yargs-parser: 21.1.1
+ yauzl@2.10.0:
+ dependencies:
+ buffer-crc32: 0.2.13
+ fd-slicer: 1.1.0
+
yjs@13.6.19:
dependencies:
lib0: 0.2.114
@@ -14483,8 +20510,20 @@ snapshots:
yocto-queue@1.2.2: {}
+ yoctocolors-cjs@2.1.3: {}
+
yoctocolors@2.1.2: {}
+ yoga-layout@3.2.1: {}
+
+ zod-to-json-schema@3.20.4(zod@3.21.4):
+ dependencies:
+ zod: 3.21.4
+
+ zod@3.21.4: {}
+
+ zod@3.23.8: {}
+
zod@3.25.76: {}
zwitch@2.0.4: {}