diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..bf02a51
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+docs/** linguist-documentation
diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml
new file mode 100644
index 0000000..a9c53a6
--- /dev/null
+++ b/.github/workflows/docs.yaml
@@ -0,0 +1,89 @@
+name: "Docs"
+
+on:
+ workflow_dispatch:
+ push:
+ branches: [master, main]
+ paths:
+ - ".github/workflows/docs.yaml"
+ - ".vitepress/**"
+ - "docs/**"
+ - "package*.json"
+
+env:
+ crawler-id: ""
+ purge-domain: ""
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ build:
+ name: "Build"
+ if: ${{ !contains(github.event.head_commit.message, '#nodeploy') }}
+ uses: cssnr/workflows/.github/workflows/npm-build.yaml@master
+ permissions:
+ contents: read
+ with:
+ install: "npm ci"
+ build: "npm run docs:deploy"
+ path: "docs/.vitepress/dist"
+ pages: true
+ secrets: inherit
+
+ deploy:
+ name: "Deploy"
+ runs-on: ubuntu-latest
+ timeout-minutes: 5
+ needs: build
+
+ permissions:
+ pages: write
+ id-token: write
+
+ environment:
+ name: docs
+ url: ${{ steps.deployment.outputs.page_url }}
+
+ steps:
+ - name: "Deploy Pages"
+ id: deployment
+ uses: actions/deploy-pages@v5
+
+ - name: "Send Deploy Notification"
+ if: ${{ !cancelled() }}
+ continue-on-error: true
+ uses: sarisia/actions-status-discord@v1
+ with:
+ webhook: ${{ secrets.DISCORD_WEBHOOK }}
+ description: ${{ steps.deployment.outputs.page_url }}
+
+ post:
+ name: "Post"
+ runs-on: ubuntu-latest
+ timeout-minutes: 5
+ needs: deploy
+
+ steps:
+ - name: "Purge Cache"
+ if: ${{ env.purge-domain != '' }}
+ uses: cssnr/cloudflare-purge-cache-action@v2
+ with:
+ zones: ${{ env.purge-domain }}
+ token: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+
+ - name: "Algolia Crawler"
+ if: ${{ env.crawler-id != '' }}
+ uses: cssnr/algolia-crawler-action@v2
+ with:
+ crawler_id: ${{ env.crawler-id }}
+ crawler_user_id: ${{ secrets.CRAWLER_USER_ID }}
+ crawler_api_key: ${{ secrets.CRAWLER_API_KEY }}
+
+ - name: "Send Discord Notification"
+ if: ${{ failure() }}
+ uses: sarisia/actions-status-discord@v1
+ with:
+ webhook: ${{ secrets.DISCORD_WEBHOOK }}
+ description: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
diff --git a/.github/workflows/preview.yaml b/.github/workflows/preview.yaml
new file mode 100644
index 0000000..cdfeb4a
--- /dev/null
+++ b/.github/workflows/preview.yaml
@@ -0,0 +1,72 @@
+name: "Preview"
+
+on:
+ workflow_dispatch:
+ push:
+ branches-ignore: [master, main, legacy]
+ paths:
+ - ".github/workflows/preview.yaml"
+ - ".vitepress/**"
+ - "docs/**"
+ - "package*.json"
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ build:
+ name: "Build"
+ if: ${{ !contains(github.event.head_commit.message, '#nopreview') }}
+ uses: cssnr/workflows/.github/workflows/npm-build.yaml@master
+ permissions:
+ contents: read
+ with:
+ install: "npm ci"
+ build: "npm run docs:deploy"
+ path: "docs/.vitepress/dist"
+ secrets: inherit
+
+ deploy:
+ name: "Deploy"
+ uses: cssnr/workflows/.github/workflows/deploy-static.yaml@master
+ needs: build
+ permissions:
+ contents: read
+ with:
+ name: "preview"
+ url: "https://dev-static.cssnr.com/auto-auth/"
+ path: "auto-auth"
+ robots: true
+ secrets:
+ host: ${{ secrets.DEV_DEPLOY_HOST }}
+ port: ${{ secrets.DEV_DEPLOY_PORT }}
+ user: ${{ secrets.DEV_DEPLOY_USER }}
+ pass: ${{ secrets.DEV_DEPLOY_PASS }}
+ webhook: ${{ secrets.DISCORD_WEBHOOK }}
+
+ lint:
+ name: "Lint"
+ runs-on: ubuntu-latest
+ timeout-minutes: 5
+ if: ${{ !contains(github.event.head_commit.message, '#nolint') }}
+ steps:
+ - name: "Checkout"
+ uses: actions/checkout@v7
+
+ - name: "Setup Node"
+ uses: actions/setup-node@v6
+ with:
+ node-version: 24
+
+ - name: "Install"
+ id: install
+ run: npm ci --ignore-scripts
+
+ - name: "eslint"
+ if: ${{ !cancelled() }}
+ run: npm run lint
+
+ - name: "prettier"
+ if: ${{ !cancelled() }}
+ run: npm run prettier:check
diff --git a/.gitignore b/.gitignore
index 985c1bb..44f09f2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,10 +2,10 @@
.idea/
*.iml
.vscode/
+cache/
dist/
build/
node_modules/
-web-ext-artifacts/
*.tsbuildinfo
# WXT
.output
@@ -13,3 +13,8 @@ stats.html
stats-*.json
.wxt
web-ext.config.ts
+web-ext-artifacts/
+# VitePress
+contributors.json
+.env
+.env.development
diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts
new file mode 100644
index 0000000..5281c08
--- /dev/null
+++ b/docs/.vitepress/config.mts
@@ -0,0 +1,160 @@
+import { defineConfig } from 'vitepress'
+import instructions from 'vitepress-chat/instructions'
+
+const settings = {
+ title: 'Auto Auth',
+ name: 'Auto Auth Web Extension and Browser Add-on',
+ description: {
+ short:
+ 'Automatic HTTP Basic Authentication with saved credentials, import/export, and a customizable login page.',
+ long: 'Modern Chrome Web Extension and Firefox Browser Add-on for Automatic Basic HTTP Authentication with many Options and Features. Replaces the native browser auth popup with a customizable login page allowing you to optionally save your credentials.',
+ },
+ base: '/auto-auth/', // set to empty string for no base path
+ og_image: '/auto-auth/images/logo.png', // must be full path
+ color: '#32fc7d',
+ source_repo: 'https://github.com/cssnr/auto-auth',
+ chrome_url: 'https://chromewebstore.google.com/detail/gpoiggobidhogpmmlakahiaaegibnogm',
+ mozilla_url: 'https://addons.mozilla.org/addon/auto-auth',
+}
+
+// https://vitepress.dev/reference/site-config
+// noinspection JSUnusedGlobalSymbols
+export default defineConfig({
+ // srcDir: './docs',
+ base: settings.base,
+ vite: {
+ envDir: '..',
+ plugins: [
+ instructions({ filePath: 'llms.txt', exclude: ['index.md', 'updates/**'] }),
+ ],
+ server: {
+ allowedHosts: true,
+ },
+ },
+
+ title: settings.title,
+ description: settings.description.short,
+ head: [
+ [
+ 'link',
+ {
+ rel: 'icon',
+ sizes: 'any',
+ href: `${settings.base}images/logo.svg`,
+ type: 'image/svg+xml',
+ },
+ ],
+ [
+ 'link',
+ {
+ rel: 'icon',
+ sizes: '16x16 32x32 64x64 128x128',
+ href: `${settings.base}favicon.ico`,
+ type: 'image/x-icon',
+ },
+ ],
+ [
+ 'link',
+ {
+ rel: 'apple-touch-icon',
+ sizes: '512x512',
+ href: settings.og_image,
+ type: 'image/png',
+ },
+ ],
+
+ ['meta', { name: 'darkreader-lock' }],
+
+ ['meta', { name: 'theme-color', content: settings.color }],
+ ['meta', { name: 'description', content: settings.description.long }],
+
+ ['meta', { property: 'og:type', content: 'website' }],
+ ['meta', { property: 'og:site_name', content: settings.name }],
+ ['meta', { property: 'og:title', content: settings.title }],
+ ['meta', { property: 'og:description', content: settings.description.short }],
+ ['meta', { property: 'og:image', content: settings.og_image }],
+ ['meta', { property: 'og:image:alt', content: settings.title }],
+
+ ['meta', { property: 'twitter:card', content: 'summary' }],
+ ['meta', { property: 'twitter:site', content: settings.name }],
+ ['meta', { property: 'twitter:title', content: settings.title }],
+ ['meta', { property: 'twitter:description', content: settings.description.short }],
+ ['meta', { property: 'twitter:image', content: settings.og_image }],
+ ['meta', { property: 'twitter:image:alt', content: settings.title }],
+ ],
+
+ cleanUrls: true,
+ themeConfig: {
+ // https://vitepress.dev/reference/default-theme-config
+ siteTitle: settings.title,
+ logo: '/images/logo.svg',
+ nav: [
+ { text: 'Home', link: '/' },
+ {
+ text: 'Get Started',
+ link: '/install',
+ activeMatch: '/install',
+ },
+ { text: 'Support', link: '/support', activeMatch: '/support' },
+ {
+ text: 'Links',
+ items: [
+ { text: 'Chrome Web Store', link: settings.chrome_url },
+ { text: 'Mozilla Add-ons', link: settings.mozilla_url },
+ { text: 'GitHub Source Code', link: settings.source_repo },
+ { text: 'Developer Site', link: 'https://cssnr.github.io/' },
+ { text: 'Contribute', link: 'https://ko-fi.com/cssnr' },
+ ],
+ },
+ ],
+
+ socialLinks: [
+ { icon: 'github', link: settings.source_repo },
+ { icon: 'googlechrome', link: settings.chrome_url },
+ { icon: 'firefoxbrowser', link: settings.mozilla_url },
+ { icon: 'discord', link: 'https://discord.gg/wXy6m2X8wY' },
+ { icon: 'kofi', link: 'https://ko-fi.com/cssnr' },
+ {
+ icon: {
+ svg: ' ',
+ },
+ link: 'https://cssnr.github.io/',
+ },
+ ],
+
+ sidebar: [
+ {
+ text: 'Get Started',
+ items: [
+ { text: 'Install', link: '/install' },
+ { text: 'Usage', link: '/usage' },
+ { text: 'Options', link: '/options' },
+ { text: 'Migration', link: '/migration' },
+ ],
+ },
+ {
+ text: 'Support',
+ items: [
+ { text: 'Security', link: '/security' },
+ { text: 'Get Help', link: '/support' },
+ ],
+ },
+ ],
+
+ editLink: {
+ pattern: `${settings.source_repo}/blob/master/docs/:path`,
+ text: 'View or Edit on GitHub',
+ },
+
+ lastUpdated: {
+ text: 'Updated at',
+ formatOptions: {
+ dateStyle: 'medium',
+ timeStyle: 'medium',
+ },
+ },
+
+ externalLinkIcon: true,
+ outline: 'deep',
+ },
+})
diff --git a/docs/.vitepress/theme/components/BrowserIcons.vue b/docs/.vitepress/theme/components/BrowserIcons.vue
new file mode 100644
index 0000000..2141dd9
--- /dev/null
+++ b/docs/.vitepress/theme/components/BrowserIcons.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
diff --git a/docs/.vitepress/theme/custom.css b/docs/.vitepress/theme/custom.css
new file mode 100644
index 0000000..1f7cbf9
--- /dev/null
+++ b/docs/.vitepress/theme/custom.css
@@ -0,0 +1,53 @@
+:root {
+ --vp-home-hero-name-color: transparent;
+ --vp-home-hero-name-background: linear-gradient(120deg, #32fc7d, #089147);
+
+ --vp-home-hero-image-background-image: linear-gradient(
+ 180deg,
+ #a6e3a120 0%,
+ rgba(166, 227, 161, 0.6) 60%
+ );
+ --vp-home-hero-image-filter: blur(56px);
+
+ --vp-button-alt-bg: var(--vp-c-default-1);
+}
+
+@supports (scrollbar-gutter: stable) {
+ /* Note: local search is: 768px */
+ @media (min-width: 769px) {
+ html {
+ scrollbar-gutter: stable;
+ }
+ html:has(:fullscreen) {
+ scrollbar-gutter: auto;
+ }
+ }
+}
+
+body {
+ overflow-y: scroll;
+}
+
+summary {
+ cursor: pointer;
+}
+
+table th {
+ text-wrap: nowrap;
+}
+
+.search-keywords {
+ display: none;
+}
+
+.vp-doc a > img {
+ display: inline-block;
+ margin: 0;
+}
+
+.badges p {
+ line-height: 1.3em;
+}
+.badges img {
+ margin-right: 4px !important;
+}
diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts
new file mode 100644
index 0000000..314ca9b
--- /dev/null
+++ b/docs/.vitepress/theme/index.ts
@@ -0,0 +1,45 @@
+import DefaultTheme, { VPBadge } from 'vitepress/theme'
+import type { Theme } from 'vitepress'
+import './custom.css'
+
+import '@catppuccin/vitepress/theme/mocha/green.css'
+
+import BrowserIcons from './components/BrowserIcons.vue'
+
+import Contributors from '@cssnr/vitepress-plugin-contributors'
+import '@cssnr/vitepress-plugin-contributors/style.css'
+import contributors from '../contributors.json'
+
+import VPSwiper from '@cssnr/vitepress-swiper'
+import '@cssnr/vitepress-swiper/style.css'
+
+import chat from 'vitepress-chat'
+import 'vitepress-chat/style.css'
+
+// https://vitepress.dev/guide/extending-default-theme
+// noinspection JSUnusedGlobalSymbols
+export default {
+ ...DefaultTheme,
+
+ ...chat(DefaultTheme, {
+ api: import.meta.env.VITE_AI_API,
+ headers: import.meta.env.VITE_AI_AUTH
+ ? { Authorization: import.meta.env.VITE_AI_AUTH }
+ : undefined,
+ filePath: 'llms.txt',
+ showReasoning: true,
+ }),
+
+ enhanceApp({ app }) {
+ // eslint-disable-next-line vue/multi-word-component-names
+ app.component('Badge', VPBadge)
+
+ app.component('BrowserIcons', BrowserIcons)
+
+ // eslint-disable-next-line vue/multi-word-component-names
+ app.component('Contributors', Contributors)
+ app.config.globalProperties.$contributors = contributors
+
+ app.component('VPSwiper', VPSwiper)
+ },
+} satisfies Theme
diff --git a/docs/.vitepress/tsconfig.json b/docs/.vitepress/tsconfig.json
new file mode 100644
index 0000000..70e8739
--- /dev/null
+++ b/docs/.vitepress/tsconfig.json
@@ -0,0 +1,5 @@
+{
+ "compilerOptions": {
+ "types": ["vitepress/client", "vue"]
+ }
+}
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..6b0d498
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,46 @@
+---
+# https://vitepress.dev/reference/default-theme-home-page
+layout: home
+
+hero:
+ name: Auto Auth
+ text: Web Extension
+ tagline: Automatic HTTP Basic Authentication with saved credentials, import/export, and a customizable login page.
+ image:
+ src: /images/logo.svg
+ alt: Auto Auth
+ actions:
+ - text: Get Started
+ link: /install
+ theme: brand
+ - text: Usage
+ link: /usage
+ theme: alt
+ - text: Options
+ link: /options
+ theme: alt
+ - text: Support
+ link: /support
+ theme: alt
+
+features:
+ - title: Install and Usage
+ details: View Install and Usage Guides
+ link: /install#install
+ - title: Migration
+ details: Migrate from Other Extensions
+ link: /migration
+ - title: Source Code
+ details: View Source Code on GitHub
+ link: https://github.com/cssnr/auto-auth
+---
+
+
+
+
diff --git a/docs/install.md b/docs/install.md
new file mode 100644
index 0000000..aa3d690
--- /dev/null
+++ b/docs/install.md
@@ -0,0 +1,97 @@
+---
+prev:
+ text: 'Get Help'
+ link: '/support'
+---
+
+# Get Started
+
+
+
+[](https://chromewebstore.google.com/detail/gpoiggobidhogpmmlakahiaaegibnogm)
+[](https://addons.mozilla.org/addon/auto-auth)
+[](https://chromewebstore.google.com/detail/gpoiggobidhogpmmlakahiaaegibnogm)
+[](https://addons.mozilla.org/addon/auto-auth)
+[](https://chromewebstore.google.com/detail/gpoiggobidhogpmmlakahiaaegibnogm)
+[](https://addons.mozilla.org/addon/auto-auth)
+[](https://github.com/cssnr/auto-auth/releases/latest)
+[](https://github.com/cssnr/auto-auth/tree/master/src/locales)
+[](https://github.com/cssnr/auto-auth/pulse)
+[](https://github.com/cssnr/auto-auth?tab=readme-ov-file#readme)
+[](https://github.com/cssnr/auto-auth?tab=readme-ov-file#readme)
+[](https://github.com/cssnr/auto-auth/graphs/contributors)
+[](https://github.com/cssnr/auto-auth/issues)
+[](https://github.com/cssnr/auto-auth/discussions)
+[](https://github.com/cssnr/auto-auth/forks)
+[](https://github.com/cssnr/auto-auth/stargazers)
+
+
+
+To get started [install the extension](#install) for your browser.
+
+You can also check out the [features](#features), [usage](usage.md), [options](options.md), and [migration](migration.md) guides.
+
+If you need help getting started, [support is available](support.md).
+
+## Install
+
+Microsoft Edge, Opera, Brave, Chromium, Vivaldi, Waterfox, and More.
+
+Available for all major browsers including [Firefox Android](https://addons.mozilla.org/addon/auto-auth).
+
+
+
+- [Chrome Web Store](https://chromewebstore.google.com/detail/gpoiggobidhogpmmlakahiaaegibnogm)
+- [Mozilla Firefox Add-ons](https://addons.mozilla.org/addon/auto-auth)
+
+For more details see the [usage guide](usage.md), review the [options](options.md), or learn how to [migrate](migration.md) from other extensions.
+
+[](https://addons.mozilla.org/addon/auto-auth)
+
+
+
+[](https://chromewebstore.google.com/detail/gpoiggobidhogpmmlakahiaaegibnogm)
+
+## Features
+
+- Save Logins for HTTP Basic Authentication
+- Automatically Login with Saved Credentials
+- Option to Ignore Hosts and Save for Session
+- View, Delete and Edit Credentials from the UI
+- Includes Options, Side Panel, Popup and Panel
+- Custom Column Visibility with Click-to-Edit
+- Option to Ignore Proxy Authentication
+- Option to Temporarily Disable
+- Ability to Import/Export Credentials
+- Supports Migrations from Other Extensions
+- Toolbar Status for Enabled Hosts
+- Icon Colors for Extension Status
+
+::: info :rocket: Feature Request
+Missing a feature? Let us know [what features](https://github.com/cssnr/auto-auth/issues/new?template=1-feature.yaml) you want to see...
+:::
+
+### Languages
+
+The extension is localized in the following languages:
+
+- Chinese (China) `zh_CN` - 中文(简体)
+- English `en` - English
+- French `fr` - Français
+- German `de` - Deutsch
+- Japanese `ja` - 日本語
+- Korean `ko` - 한국어
+- Portuguese (Brazil) `pt_BR` - Português (Brasil)
+- Portuguese (Portugal) `pt_PT` - Português (Portugal)
+- Russian `ru` - Русский
+- Spanish `es_419` - Español
+
+:bulb: You can [view or edit](https://github.com/cssnr/auto-auth/tree/master/src/locales) the locales on GitHub.
+
+::: info :books: Changing Languages
+The only way to change your language in a web extension, is to change your browser's language, then restart the browser.
+:::
diff --git a/docs/migration.md b/docs/migration.md
new file mode 100644
index 0000000..09b8411
--- /dev/null
+++ b/docs/migration.md
@@ -0,0 +1,69 @@
+---
+prev:
+ text: 'Options'
+ link: '/options'
+next:
+ text: 'Security'
+ link: '/security'
+---
+
+# Migration
+
+Migration guides from other extensions and manual import instructions.
+
+[[toc]]
+
+## MultiPass
+
+Migration from [krtek4/MultiPass](https://github.com/krtek4/MultiPass) (Firefox/Chrome).
+
+1. Open the MultiPass Options
+2. Click: `Download credentials as JSON file.`
+3. Open the Auto Auth Options and click `Import File`
+4. Select the file exported in Step #2
+
+## AutoAuth
+
+Migration from [steffanschlein/AutoAuth](https://github.com/steffanschlein/AutoAuth) (Firefox).
+
+1. Open Addons Management (about:addons) `Ctrl+Shift+A`
+2. Find AutoAuth, click the 3 dots, then click Options
+3. Open Developer Tools `Ctrl+Shift+I` and go to Console tab
+4. Enter the following code: `await browser.storage.local.get()`
+5. Right-click on the resulting output and choose `Copy Object`
+6. Go to the Options Page (for this extension) and click `Import Text`
+7. Paste the copied text into the textarea and click `Import`
+
+## Basic Authentication
+
+Migration from [Basic Authentication](https://chromewebstore.google.com/detail/nanfgbiblbcagfodkfeinbbhijihckml) (Chrome).
+
+1. Go To this URL: `chrome-extension://nanfgbiblbcagfodkfeinbbhijihckml/options.html`
+2. Open Developer Tools `Ctrl+Shift+I` and go to Console tab
+3. Enter the following code: `await chrome.storage.local.get()`
+4. Right-click on the resulting output and choose `Copy Object`
+5. Go to the Options Page (for this extension) and click `Import Text`
+6. Paste the copied text into the textarea and click `Import`
+
+> **Note:** Basic Authentication uses url match patterns vs hostnames. This import will attempt to parse the match pattern to a hostname; however, if the full hostname is not provided, may not import correctly. You can always edit the credentials manually or save new ones on the next login.
+
+## Other or Manual
+
+To manually migrate from other data exports you need to convert the data into a compatible JSON format. You can do this yourself, or get AI to convert the data format for you. Convert the data to this JSON format:
+
+```json
+{
+ "example.com": "username:password",
+ "ignored.example.com": "ignored"
+}
+```
+
+To import the data, visit the extension's Options Page, click `Import Text` and paste the JSON text.
+
+You can also [request a migration](https://github.com/cssnr/auto-auth/issues/new?template=1-feature.yaml) be added for your extension. If it is popular enough, it might get added.
+
+
+
+:bulb: If you need help using the extension, [support](support.md) is available...
+
+
diff --git a/docs/options.md b/docs/options.md
new file mode 100644
index 0000000..aae063c
--- /dev/null
+++ b/docs/options.md
@@ -0,0 +1,101 @@
+---
+outline: [2, 3]
+---
+
+# Options
+
+The options let you control how the extension functions, looks and feels.
+
+- [Extension Options](#extension-options)
+- [Keyboard Shortcuts](#keyboard-shortcuts)
+- [Table Options](#table-options)
+- [Background Options](#background-options)
+
+## Extension Options
+
+General extension behaviour settings.
+
+#### Temporarily Disable Extension
+
+Disables the extension temporarily. The toolbar icon turns yellow and all authentication requests pass through to the native browser prompt. Useful for debugging or testing. Re-enable when done.
+
+#### Ignore Proxy Authentication
+
+When enabled, HTTP 407 Proxy Auth Required responses are not intercepted by the extension. The native browser proxy authentication prompt will appear instead.
+
+#### Save Authentication by Default
+
+Pre-enables the **Save Login** switch on the auth page. When on, credentials are saved permanently by default. When off, credentials are session-only unless the user manually toggles the switch.
+
+#### Show Confirmation on Delete
+
+Display a confirmation prompt before deleting saved credentials. Adds a safety step to prevent accidental deletions.
+
+#### Show Right-Click Context Menu
+
+Adds extension actions (Open Popup, Open Side Panel, Open Extension Panel, Open Options) to the browser's right-click context menu. Disable this to remove the menu items from page context entirely. They will still appear when right-clicking the toolbar icon.
+
+#### Show Release Notes on Update
+
+Automatically opens the Release Notes page when the extension is updated to a new version. Keep informed of new features, bug fixes, and changes.
+
+#### Full Width Options Page
+
+Removes the max-width constraint on the options page, allowing it to fill the full browser width.
+
+## Keyboard Shortcuts
+
+Manage the keyboard shortcuts used to open extension panels directly from the browser.
+
+Shortcuts can be customized through your browser's built-in extension shortcut manager. Click **Manage Keyboard Shortcuts** to open it.
+
+| Description | Shortcut |
+| -------------------- | -------------------------------------------- |
+| Open Popup | Alt +Shift +A |
+| Open Side Panel | Alt +Shift +P |
+| Open Extension Panel | Alt +Shift +W |
+| Open Options | Alt +Shift +O |
+
+Note: Shortcuts marked _Not Set_ can be assigned in your browser's extension shortcut settings. In Chrome, visit `chrome://extensions/shortcuts`. In Firefox, visit `about:addons` and click the gear icon.
+
+## Table Options
+
+Control how the saved credentials table looks and behaves.
+
+#### Click-to-Edit
+
+Enable inline editing on table cells. Click any hostname, username, or password cell to edit it in place. Press Enter to save, Escape to cancel.
+
+#### Show Username Column
+
+Show or hide the username column in the credentials table.
+
+#### Show Username Values
+
+When the username column is visible, show or hide the actual username values. When off, usernames display as `******`.
+
+#### Show Password Column
+
+Show or hide the password column in the credentials table.
+
+#### Show Password Values
+
+When the password column is visible, show or hide the actual password values. When off, passwords display as `******`.
+
+#### Large Table Rows
+
+Use larger row spacing in the credentials table. Disable for a more compact view.
+
+## Background Options
+
+Set a custom background image or video on the auth page and options page.
+
+- **None** — No background.
+- **Picture** — Set an image URL as the background.
+- **Video** — Set a video URL as the background.
+
+
+
+:bulb: If you need help using the extension, [support](support.md) is available...
+
+
diff --git a/docs/public/favicon.ico b/docs/public/favicon.ico
new file mode 100644
index 0000000..438a04b
Binary files /dev/null and b/docs/public/favicon.ico differ
diff --git a/docs/public/images/logo.png b/docs/public/images/logo.png
new file mode 100644
index 0000000..8d00916
Binary files /dev/null and b/docs/public/images/logo.png differ
diff --git a/docs/public/images/logo.svg b/docs/public/images/logo.svg
new file mode 100644
index 0000000..408f013
--- /dev/null
+++ b/docs/public/images/logo.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/docs/security.md b/docs/security.md
new file mode 100644
index 0000000..7a0a868
--- /dev/null
+++ b/docs/security.md
@@ -0,0 +1,38 @@
+---
+prev:
+ text: 'Migration'
+ link: '/migration'
+next:
+ text: 'Support'
+ link: '/support'
+---
+
+# Security
+
+[[toc]]
+
+## Credential Storage
+
+Since there is no API to manage or store credentials securely, usernames and passwords are stored in the web extension's [sync storage](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/sync). This will sync your credentials to all browsers you are logged into if sync is enabled for addons. Therefore, any computers you use a synced browser on will write the credentials to the file system in plain text.
+
+## What This Means
+
+- Credentials are stored locally in your browser's extension storage.
+- If browser sync is enabled, credentials sync across all devices logged into the same browser account.
+- Synced data may be written to disk in plain text on each synced device.
+- The developer never receives, processes, or has access to any data or credentials.
+
+## Potential Mitigations
+
+If there is enough popularity/requests for these features, there are a couple options to mitigate the risks:
+
+- Option to switch between sync and local storage to limit credentials to a single computer.
+- Option to encrypt credentials using a password that must be entered once every session.
+
+For more details see the [PRIVACY.md](https://github.com/cssnr/auto-auth/blob/master/PRIVACY.md).
+
+
+
+:bulb: If you need help using the extension, [support](support.md) is available...
+
+
diff --git a/docs/support.md b/docs/support.md
new file mode 100644
index 0000000..ef79580
--- /dev/null
+++ b/docs/support.md
@@ -0,0 +1,56 @@
+---
+next:
+ text: 'Get Started'
+ link: '/install'
+---
+
+# Support
+
+
+
+[](https://github.com/cssnr/auto-auth/issues/new?template=1-feature.yaml)
+[](https://github.com/cssnr/auto-auth/issues)
+[](https://github.com/cssnr/auto-auth/discussions)
+[](https://discord.gg/wXy6m2X8wY)
+
+
+
+If you have any troubles using the application, or run into any issues, please let us know!
+
+Every bug that can be reproduced will be fixed and Feature Request are highly desired.
+
+Contributing is as easy as telling us [what features or changes](https://github.com/cssnr/auto-auth/issues/new?template=1-feature.yaml) you want to see next...
+
+[[toc]]
+
+### GitHub Discussions
+
+If you have a question or need help with anything,
+start a discussion in [General](https://github.com/cssnr/auto-auth/discussions/categories/general)
+or [Q&A](https://github.com/cssnr/auto-auth/discussions/categories/q-a).
+
+If you want to see a new feature, submit a [Feature Requests](https://github.com/cssnr/auto-auth/issues/new?template=1-feature.yaml).
+
+[](https://github.com/cssnr/auto-auth/discussions)
+
+### GitHub Issues
+
+If you run into any problems or find a bug, please [open an issue](https://github.com/cssnr/auto-auth/issues).
+
+**These reports are treated with the highest priority.**
+
+[](https://github.com/cssnr/auto-auth/issues)
+
+### Discord Chat
+
+You can chat with us about anything [on discord](https://discord.gg/wXy6m2X8wY).
+
+From here you can contact me directly, `Shane@111150265075298304`.
+
+[](https://discord.gg/wXy6m2X8wY)
+
+
+
+More information available at: [https://cssnr.com/](https://cssnr.com/)
+
+[{ width="360" }](https://ko-fi.com/cssnr)
diff --git a/docs/usage.md b/docs/usage.md
new file mode 100644
index 0000000..c2f7453
--- /dev/null
+++ b/docs/usage.md
@@ -0,0 +1,130 @@
+# Usage
+
+There are many ways to use the extension depending on your preference.
+
+[[toc]]
+
+## Auth Page
+
+When you visit a site that requires HTTP Basic Authentication and no credentials are saved, the extension shows a custom login page instead of the native browser popup.
+
+Enter your username and password, then click **Login**. If **Save Login** is enabled, credentials are saved for future visits.
+
+- **No Username** — Toggle this for password-only authentication.
+- **Save Login** — When off, credentials are session-only and lost when the browser closes.
+- **Ignore Host** — Permanently skips the auth page for this host, letting the native browser prompt appear.
+
+To take it for a test drive, install the addon and visit: https://authenticationtest.com/HTTPAuth/
+Then enter the username `user` and password `pass`.
+
+## Toolbar Popup
+
+The popup is accessible from your browser's extension **toolbar icon**. You may need to pin the icon to the toolbar depending on your browser.
+
+The popup shows the current tab's hostname and credential status:
+
+- **Green border** — Credentials are saved for this site.
+- **Yellow border** — The host is ignored.
+- **Red border** — The tab URL is inaccessible.
+- **Neutral border** — No saved credentials.
+
+From the popup you can:
+
+- Edit credentials for the current host.
+- Delete credentials for the current host.
+- Toggle extension options.
+- Open the full options page.
+
+## Side Panel
+
+The side panel provides full credential management without leaving your current tab.
+
+- View and manage all saved credentials in a table.
+- Add new host credentials.
+- Import credentials from text.
+- Toggle extension options.
+- Open the extension panel (popout window).
+
+The side panel can be toggled via [keyboard shortcut](#keyboard-shortcuts) or the [context menu](#context-menu).
+
+## Extension Panel
+
+The extension panel is a pop-out window with the same features as the side panel. It opens as a separate browser window that stays open as you browse.
+
+- Full credential management.
+- Import/export credentials.
+- Options form.
+- Remembers its size between sessions.
+
+## Credentials Table
+
+The credentials table shows all saved host entries with columns for hostname, username, and password.
+
+**Inline Editing** — Click any cell (hostname, username, or password) to edit it in place. Press Enter to save, Escape to cancel.
+
+**Column Visibility** — Show or hide the username and password columns. Hidden values display as `******`.
+
+**Add Host** — Click the add button to open the modal for adding new credentials.
+
+**Delete** — Click the trash icon on any row. If confirmation is enabled, a modal will appear first.
+
+## Context Menu
+
+Right-click on a page to access extension actions:
+
+| Item | Description |
+| ------------------------ | -------------------------------- |
+| **Open Popup** | Opens the extension popup panel. |
+| **Open Side Panel** | Opens the side panel. |
+| **Open Extension Panel** | Opens the popout window. |
+| **Open Options** | Opens the options page. |
+
+The context menu can be enabled/disabled from the [options page](options.md#context-menu).
+
+## Keyboard Shortcuts
+
+| Description | Shortcut |
+| -------------------- | -------------------------------------------- |
+| Open Popup | Alt +Shift +A |
+| Open Side Panel | Alt +Shift +P |
+| Open Extension Panel | Alt +Shift +W |
+| Open Options | Alt +Shift +O |
+
+Shortcuts can be customized through your browser's built-in extension shortcut manager.
+
+- Google Chrome: `chrome://extensions/shortcuts`
+- Mozilla Firefox: https://mzl.la/3Qwp5QQ
+
+## Toolbar Icon
+
+The toolbar icon color indicates extension status:
+
+| Color | Meaning |
+| ---------- | ------------------------------------------- |
+| **Green** | Host permissions granted, extension active. |
+| **Yellow** | Extension is temporarily disabled. |
+| **Red** | Host permissions not granted. |
+
+The badge on the icon shows per-tab status:
+
+| Badge | Meaning |
+| ---------------- | ------------------------------------ |
+| **On** (green) | Credentials are saved for this site. |
+| **Off** (yellow) | The host is ignored. |
+| _(empty)_ | No credentials for this site. |
+
+## Import / Export
+
+From the [options page](options.md) or side panel:
+
+- **Export All** — Downloads all credentials as a JSON file (`auto-auth-secrets.txt`).
+- **Import File** — Import a JSON file with credentials.
+- **Import Text** — Paste JSON text directly into a textarea to import.
+
+Supported import formats: Auto Auth, AutoAuth, Basic Authentication, MultiPass. See the [migration page](migration.md) for details.
+
+
+
+:bulb: If you need help using the extension, [support](support.md) is available...
+
+
diff --git a/package-lock.json b/package-lock.json
index c3e40cd..66de9cf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,6 +14,9 @@
"vue": "^3.5.39"
},
"devDependencies": {
+ "@catppuccin/vitepress": "github:catppuccin/vitepress#3f4df2fc96160d54c771b832f8b3a2d199541d30",
+ "@cssnr/vitepress-plugin-contributors": "^0.2.0",
+ "@cssnr/vitepress-swiper": "^0.3.1",
"@eslint/config-helpers": "^0.6.0",
"@eslint/js": "^10.0.1",
"@types/bootstrap": "^5.2.11",
@@ -22,6 +25,7 @@
"@wxt-dev/auto-icons": "^1.1.1",
"@wxt-dev/i18n": "^0.2.6",
"@wxt-dev/module-vue": "^1.0.3",
+ "animate.css": "^4.1.1",
"eslint": "^10.7.0",
"eslint-plugin-vue": "^10.9.2",
"globals": "^17.7.0",
@@ -30,6 +34,8 @@
"sass": "^1.101.0",
"typescript": "~6.0.3",
"typescript-eslint": "^8.64.0",
+ "vitepress": "next",
+ "vitepress-chat": "^0.0.4",
"vue-tsc": "^3.3.7",
"web-ext": "^10.5.0",
"wxt": "^0.20.27"
@@ -46,6 +52,78 @@
"many-keys-map": "^3.0.0"
}
},
+ "node_modules/@ai-sdk/gateway": {
+ "version": "4.0.19",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-4.0.19.tgz",
+ "integrity": "sha512-pQ3UPO0tyLUuW751jdgWhvHmXmjvAFpyiTeZF6eSVHMYhH/dSH4FtSKGT2nOnvvpaRpU8ygsLV4ng2Mz0lcU/A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "@ai-sdk/provider": "4.0.3",
+ "@ai-sdk/provider-utils": "5.0.9",
+ "@vercel/oidc": "3.2.0"
+ },
+ "engines": {
+ "node": ">=22"
+ },
+ "peerDependencies": {
+ "zod": "^3.25.76 || ^4.1.8"
+ }
+ },
+ "node_modules/@ai-sdk/provider": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-4.0.3.tgz",
+ "integrity": "sha512-e0CpNWJUY7OxAFAnCZkw+ri9QOHWwTs1tXP42782KFGCU07qt8NiXCrCVowyCB5dP2r5/Uls+g2oPd8kOJn9dw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "json-schema": "^0.4.0"
+ },
+ "engines": {
+ "node": ">=22"
+ }
+ },
+ "node_modules/@ai-sdk/provider-utils": {
+ "version": "5.0.9",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-5.0.9.tgz",
+ "integrity": "sha512-BohlmQ62x+iIOawYCS2z5JzokMq5kZSoVhJawH41mlMdkb01xqhIMG8L0NAByneUFLpdUlSjJjF/bel5j3cGZA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "@ai-sdk/provider": "4.0.3",
+ "@standard-schema/spec": "^1.1.0",
+ "@workflow/serde": "4.1.0",
+ "eventsource-parser": "^3.0.8"
+ },
+ "engines": {
+ "node": ">=22"
+ },
+ "peerDependencies": {
+ "zod": "^3.25.76 || ^4.1.8"
+ }
+ },
+ "node_modules/@ai-sdk/vue": {
+ "version": "4.0.26",
+ "resolved": "https://registry.npmjs.org/@ai-sdk/vue/-/vue-4.0.26.tgz",
+ "integrity": "sha512-kkYbg+dHjPEq6RzSKxLeUdnUAc9mskhbTqf0npDouqpnIJzT4DQGe58yZet/N639PS5of2oZ4qrgy9aDeV5mqA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "@ai-sdk/provider-utils": "5.0.9",
+ "ai": "7.0.26",
+ "swrv": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=22"
+ },
+ "peerDependencies": {
+ "vue": "^3.3.4"
+ }
+ },
"node_modules/@aklinker1/rollup-plugin-visualizer": {
"version": "5.12.0",
"resolved": "https://registry.npmjs.org/@aklinker1/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz",
@@ -192,6 +270,58 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@catppuccin/vitepress": {
+ "version": "0.1.2",
+ "resolved": "git+ssh://git@github.com/catppuccin/vitepress.git#3f4df2fc96160d54c771b832f8b3a2d199541d30",
+ "integrity": "sha512-01W3rYIX3Q3wvnWp8aXhmdKLGP3gAJDNz1DTwbNK9uRJ/CFsg5J/VI8JN5BSL6KDR/P2OHsGzK/gDleHEbvpqg==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "typescript": "^5.0.0 || ^6.0.0"
+ }
+ },
+ "node_modules/@cssnr/vitepress-plugin-contributors": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@cssnr/vitepress-plugin-contributors/-/vitepress-plugin-contributors-0.2.0.tgz",
+ "integrity": "sha512-QENg45D1yNXLZblSvsUCXPVFAYxqBrWEsQ+u3BdMFAdi17+3dgxuYvAzmGZXux5iuTGjjM+sPng1b7f2tVQ32A==",
+ "dev": true,
+ "license": "GPL-3.0-only",
+ "dependencies": {
+ "commander": "^14.0.0"
+ },
+ "bin": {
+ "get-contributors": "dist/get-contributors.mjs"
+ },
+ "funding": {
+ "type": "ko-fi",
+ "url": "https://ko-fi.com/cssnr"
+ }
+ },
+ "node_modules/@cssnr/vitepress-plugin-contributors/node_modules/commander": {
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz",
+ "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@cssnr/vitepress-swiper": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@cssnr/vitepress-swiper/-/vitepress-swiper-0.3.1.tgz",
+ "integrity": "sha512-RwX9S8I2lwJELSqfsVBwczLPmRTahrb6Pg5wDa6xI2d7ZZ3H39/SLnHf28Qis7BOyueZgExvnkpjOw47+p00iA==",
+ "dev": true,
+ "license": "GPL-3.0-only",
+ "funding": {
+ "type": "ko-fi",
+ "url": "https://ko-fi.com/cssnr"
+ },
+ "peerDependencies": {
+ "swiper": ">=11.0.0",
+ "vue": "^3.0.0"
+ }
+ },
"node_modules/@devicefarmer/adbkit": {
"version": "3.3.8",
"resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-3.3.8.tgz",
@@ -252,6 +382,27 @@
}
}
},
+ "node_modules/@docsearch/css": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.6.3.tgz",
+ "integrity": "sha512-nlOwcXcsNAptQl4vlL4MA78qNJKO0Qlds5GuBjCoePgkebTXLSf8Qt1oyZ3YBshYupKXG9VRGEsk1zr23d+bzQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@docsearch/js": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-4.6.3.tgz",
+ "integrity": "sha512-qUIX2b4Apew3tv4F0qhmgShsl/Lfw4m6mqv/5/5dWNxwTcDdLMp2s3YwZ+NMGh3IKCg0pBaXm7Q5VdyU5Rj+cQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@docsearch/sidepanel-js": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/@docsearch/sidepanel-js/-/sidepanel-js-4.6.3.tgz",
+ "integrity": "sha512-grGSmvXzG0if+mrzdIKykvpIAuEQ9u0sEJ2eLRRCaQfJvsWqh2C2/aY04bIzWvDh7myi5rvl8D+tUNsVrjYQ3A==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@emnapi/core": {
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz",
@@ -1064,6 +1215,23 @@
"url": "https://github.com/sponsors/nzakas"
}
},
+ "node_modules/@iconify-json/simple-icons": {
+ "version": "1.2.90",
+ "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.90.tgz",
+ "integrity": "sha512-zt2o2ZvQpHVvZJARIkZ51RnaHY2oqcPJMvHE+mVnxkSr+c33fnX4gciiXu+wyX5ei+s0qbVX1wD0DWBbaGBYMA==",
+ "dev": true,
+ "license": "CC0-1.0",
+ "dependencies": {
+ "@iconify/types": "*"
+ }
+ },
+ "node_modules/@iconify/types": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
+ "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@img/colour": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz",
@@ -2370,6 +2538,136 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@shikijs/core": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.3.1.tgz",
+ "integrity": "sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/primitive": "4.3.1",
+ "@shikijs/types": "4.3.1",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4",
+ "hast-util-to-html": "^9.0.5"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/engine-javascript": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.3.1.tgz",
+ "integrity": "sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.3.1",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "oniguruma-to-es": "^4.3.6"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/engine-oniguruma": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.3.1.tgz",
+ "integrity": "sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.3.1",
+ "@shikijs/vscode-textmate": "^10.0.2"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/langs": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.3.1.tgz",
+ "integrity": "sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.3.1"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/primitive": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.3.1.tgz",
+ "integrity": "sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.3.1",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/themes": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.3.1.tgz",
+ "integrity": "sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/types": "4.3.1"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/transformers": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-4.3.1.tgz",
+ "integrity": "sha512-z6ir0bGDgWcF2FduktEfPgIsdOtIlDiLAjFBgBzE42Q9xHbkkIXZtORHzlLVB71iZP9elEcqKg6keajvOUwE2A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "4.3.1",
+ "@shikijs/types": "4.3.1"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/types": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.3.1.tgz",
+ "integrity": "sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
+ "node_modules/@shikijs/vscode-textmate": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
+ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@standard-schema/spec": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
+ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/@tybys/wasm-util": {
"version": "0.10.3",
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz",
@@ -2447,6 +2745,16 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/hast": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz",
+ "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -2454,6 +2762,41 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/markdown-it": {
+ "version": "14.1.2",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
+ "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/linkify-it": "^5",
+ "@types/mdurl": "^2"
+ }
+ },
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/minimatch": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
@@ -2471,6 +2814,20 @@
"undici-types": "~8.3.0"
}
},
+ "node_modules/@types/unist": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/web-bluetooth": {
+ "version": "0.0.21",
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz",
+ "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/webextension-polyfill": {
"version": "0.12.5",
"resolved": "https://registry.npmjs.org/@types/webextension-polyfill/-/webextension-polyfill-0.12.5.tgz",
@@ -2708,6 +3065,24 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz",
+ "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/@vercel/oidc": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.2.0.tgz",
+ "integrity": "sha512-UycprH3T6n3jH0k44NHMa7pnFHGu/N05MjojYr+Mc6I7obkoLIJujSWwin1pCvdy/eOxrI/l3uDLQsmcrOb4ug==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "engines": {
+ "node": ">= 20"
+ }
+ },
"node_modules/@vitejs/plugin-vue": {
"version": "6.0.8",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.8.tgz",
@@ -2804,6 +3179,43 @@
"@vue/shared": "3.5.39"
}
},
+ "node_modules/@vue/devtools-api": {
+ "version": "8.1.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.1.5.tgz",
+ "integrity": "sha512-YJipMVAKe5wT5CWf5kTYCaNV7NMNjFVxJkIkJaJ4W/nCxEBzlZzrOsYKeCymdCrFZmBS/+wTWFoUs3Jf/Q6XSQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-kit": "^8.1.5"
+ }
+ },
+ "node_modules/@vue/devtools-kit": {
+ "version": "8.1.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.1.5.tgz",
+ "integrity": "sha512-FcSAxsi4eWuXLCB7Rv9lj0aIVHHPNVQ2BazGf4RJTc2JCqb4BQg0hk87ZFhminCfl+mD5OUI0rX2cgyu4kJOGA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/devtools-shared": "^8.1.5",
+ "birpc": "^2.6.1",
+ "hookable": "^5.5.3",
+ "perfect-debounce": "^2.0.0"
+ }
+ },
+ "node_modules/@vue/devtools-kit/node_modules/hookable": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
+ "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vue/devtools-shared": {
+ "version": "8.1.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.1.5.tgz",
+ "integrity": "sha512-mhT4zcPFhF+Xk1O4BfhhrbXzpmfqY03fS6xGpcllbQG7lDjhQf8pQHcTIhqQIYx1hfwtHmk/6jM96ele0UxPqQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@vue/language-core": {
"version": "3.3.7",
"resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.3.7.tgz",
@@ -2870,6 +3282,114 @@
"integrity": "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==",
"license": "MIT"
},
+ "node_modules/@vueuse/core": {
+ "version": "14.3.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.3.0.tgz",
+ "integrity": "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/web-bluetooth": "^0.0.21",
+ "@vueuse/metadata": "14.3.0",
+ "@vueuse/shared": "14.3.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "vue": "^3.5.0"
+ }
+ },
+ "node_modules/@vueuse/integrations": {
+ "version": "14.3.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-14.3.0.tgz",
+ "integrity": "sha512-76I5FT2ESvCmCaSwapI+a/u/CFtNXmzl9f9lNp1hRtx8vKB8hfiokJr8IvQqcQG5ckGXElyXK516b54ozV3MvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vueuse/core": "14.3.0",
+ "@vueuse/shared": "14.3.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "async-validator": "^4",
+ "axios": "^1",
+ "change-case": "^5",
+ "drauu": "^0.4",
+ "focus-trap": "^7 || ^8",
+ "fuse.js": "^7",
+ "idb-keyval": "^6",
+ "jwt-decode": "^4",
+ "nprogress": "^0.2",
+ "qrcode": "^1.5",
+ "sortablejs": "^1",
+ "universal-cookie": "^7 || ^8",
+ "vue": "^3.5.0"
+ },
+ "peerDependenciesMeta": {
+ "async-validator": {
+ "optional": true
+ },
+ "axios": {
+ "optional": true
+ },
+ "change-case": {
+ "optional": true
+ },
+ "drauu": {
+ "optional": true
+ },
+ "focus-trap": {
+ "optional": true
+ },
+ "fuse.js": {
+ "optional": true
+ },
+ "idb-keyval": {
+ "optional": true
+ },
+ "jwt-decode": {
+ "optional": true
+ },
+ "nprogress": {
+ "optional": true
+ },
+ "qrcode": {
+ "optional": true
+ },
+ "sortablejs": {
+ "optional": true
+ },
+ "universal-cookie": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vueuse/metadata": {
+ "version": "14.3.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.3.0.tgz",
+ "integrity": "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/shared": {
+ "version": "14.3.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.3.0.tgz",
+ "integrity": "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "vue": "^3.5.0"
+ }
+ },
"node_modules/@webext-core/fake-browser": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/@webext-core/fake-browser/-/fake-browser-1.5.2.tgz",
@@ -2904,6 +3424,14 @@
"node": "*"
}
},
+ "node_modules/@workflow/serde": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@workflow/serde/-/serde-4.1.0.tgz",
+ "integrity": "sha512-pav4F2BoirECWR7Nf1TKt+2eETcBj7jj4cBefQ8VXQCA6NPkaKeLfj/zMgi+3zYV5ZIBT4GuUiphsj0/b9hPQQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true
+ },
"node_modules/@wxt-dev/auto-icons": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@wxt-dev/auto-icons/-/auto-icons-1.1.1.tgz",
@@ -3434,6 +3962,25 @@
"node": ">= 14"
}
},
+ "node_modules/ai": {
+ "version": "7.0.26",
+ "resolved": "https://registry.npmjs.org/ai/-/ai-7.0.26.tgz",
+ "integrity": "sha512-gzLoOHoXFJNcxrzFyHClbZsDEA1z0LNm3Kwq8lEWIfL+8wEEir+eDJqJJbkEJdLxGrc0IuBkybxEDzkbvSavjw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "dependencies": {
+ "@ai-sdk/gateway": "4.0.19",
+ "@ai-sdk/provider": "4.0.3",
+ "@ai-sdk/provider-utils": "5.0.9"
+ },
+ "engines": {
+ "node": ">=22"
+ },
+ "peerDependencies": {
+ "zod": "^3.25.76 || ^4.1.8"
+ }
+ },
"node_modules/ajv": {
"version": "6.15.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
@@ -3458,6 +4005,13 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/animate.css": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/animate.css/-/animate.css-4.1.1.tgz",
+ "integrity": "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/ansi-align": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
@@ -3660,6 +4214,16 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/birpc": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz",
+ "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
"node_modules/bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@@ -3834,6 +4398,17 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/chalk": {
"version": "5.6.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
@@ -3847,6 +4422,28 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/cheerio": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.2.0.tgz",
@@ -4166,6 +4763,17 @@
"node": ">=8.0.0"
}
},
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/commander": {
"version": "9.5.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
@@ -4510,6 +5118,20 @@
"node": ">=8"
}
},
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/dom-serializer": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
@@ -5022,6 +5644,17 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/eventsource-parser": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz",
+ "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
"node_modules/exsolve": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.1.0.tgz",
@@ -5206,6 +5839,16 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/focus-trap": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-8.2.2.tgz",
+ "integrity": "sha512-qV0g8hRYBqgACcFOH3f9wXc4zPKhr/0z9RI2a6ZijZ72EeBi4g8oBy8zAWuUR1TsMpOzwpUMFvjdasrC41Joug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tabbable": "^6.5.0"
+ }
+ },
"node_modules/form-data-encoder": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.1.0.tgz",
@@ -5438,6 +6081,55 @@
"node": ">=4"
}
},
+ "node_modules/hast-util-to-html": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+ "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.0",
+ "zwitch": "^2.0.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/highlight.js": {
+ "version": "11.11.1",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz",
+ "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "peer": true,
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/hookable": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.1.tgz",
@@ -5452,6 +6144,17 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/htmlparser2": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz",
@@ -5976,6 +6679,14 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "dev": true,
+ "license": "(AFL-2.1 OR BSD-3-Clause)",
+ "peer": true
+ },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -6888,11 +7599,43 @@
"integrity": "sha512-1DiZmDHPXMBgMRjeUtHy1q1VYmeJscHxhIAexX9z/zjRMP80+0ETuPfssi8z+kMY4DwUgsKuHqpjxgmeA9gBNA==",
"dev": true,
"license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/fregante"
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fregante"
+ }
+ },
+ "node_modules/mark.js": {
+ "version": "8.11.1",
+ "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
+ "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/marked": {
+ "version": "18.0.6",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.6.tgz",
+ "integrity": "sha512-MrV5puXBfuiy6wl6DLaq3BtIJQAJToAd5zt/ZKhRfGRAuFPALE7/4Y7jnxRQoEgK/pBgurGqLyAuRgZ2xOjr6w==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/marked-highlight": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/marked-highlight/-/marked-highlight-2.2.4.tgz",
+ "integrity": "sha512-PZxisNMJDduSjc0q6uvjsnqqHCXc9s0eyzxDO9sB1eNGJnd/H1/Fu+z6g/liC1dfJdFW4SftMwMlLvsBhUPrqQ==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "peerDependencies": {
+ "marked": ">=4 <19"
}
},
"node_modules/marky": {
@@ -6902,6 +7645,28 @@
"dev": true,
"license": "Apache-2.0"
},
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
+ "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/mdn-data": {
"version": "2.27.1",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
@@ -6909,6 +7674,100 @@
"dev": true,
"license": "CC0-1.0"
},
+ "node_modules/micromark-util-character": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/mimic-function": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
@@ -6948,6 +7807,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/minisearch": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz",
+ "integrity": "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/mlly": {
"version": "1.8.2",
"resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz",
@@ -7325,6 +8191,25 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/oniguruma-parser": {
+ "version": "0.12.2",
+ "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz",
+ "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/oniguruma-to-es": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz",
+ "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "oniguruma-parser": "^0.12.2",
+ "regex": "^6.1.0",
+ "regex-recursion": "^6.0.2"
+ }
+ },
"node_modules/open": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz",
@@ -7766,6 +8651,17 @@
"node": ">= 6"
}
},
+ "node_modules/property-information": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz",
+ "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/proto-list": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
@@ -7955,6 +8851,33 @@
"node": ">= 12.13.0"
}
},
+ "node_modules/regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz",
+ "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-recursion": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
+ "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "regex-utilities": "^2.3.0"
+ }
+ },
+ "node_modules/regex-utilities": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
+ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/registry-auth-token": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz",
@@ -8288,6 +9211,26 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/shiki": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.3.1.tgz",
+ "integrity": "sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@shikijs/core": "4.3.1",
+ "@shikijs/engine-javascript": "4.3.1",
+ "@shikijs/engine-oniguruma": "4.3.1",
+ "@shikijs/langs": "4.3.1",
+ "@shikijs/themes": "4.3.1",
+ "@shikijs/types": "4.3.1",
+ "@shikijs/vscode-textmate": "^10.0.2",
+ "@types/hast": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=20"
+ }
+ },
"node_modules/signal-exit": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
@@ -8378,6 +9321,17 @@
"source-map": "^0.6.0"
}
},
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/spawn-sync": {
"version": "1.0.15",
"resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz",
@@ -8477,6 +9431,21 @@
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -8593,6 +9562,45 @@
"node": ">=4"
}
},
+ "node_modules/swiper": {
+ "version": "14.0.5",
+ "resolved": "https://registry.npmjs.org/swiper/-/swiper-14.0.5.tgz",
+ "integrity": "sha512-SMSKS0sj+lPIFzngfIKb5cyBtzmAuJw7rXgXdyYiDReb+pSpJXuNljHYgT4DXa5Stnl2Ew2/Lam5ipv4PIqZ7A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "custom",
+ "url": "https://sponsors.nolimits4web.com"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/nolimits4web"
+ }
+ ],
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">= 4.7.0"
+ }
+ },
+ "node_modules/swrv": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/swrv/-/swrv-1.2.0.tgz",
+ "integrity": "sha512-lH/g4UcNyj+7lzK4eRGT4C68Q4EhQ6JtM9otPRIASfhhzfLWtbZPHcMuhuba7S9YVYuxkMUGImwMyGpfbkH07A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "peer": true,
+ "peerDependencies": {
+ "vue": ">=3.2.26 < 4"
+ }
+ },
+ "node_modules/tabbable": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz",
+ "integrity": "sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/thread-stream": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.2.0.tgz",
@@ -8680,6 +9688,17 @@
"nodetouch": "bin/nodetouch.js"
}
},
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/ts-api-utils": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
@@ -8870,6 +9889,79 @@
"@types/estree": "^1.0.0"
}
},
+ "node_modules/unist-util-is": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
+ "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
+ "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
+ "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/universalify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
@@ -9029,6 +10121,36 @@
"uuid": "dist/bin/uuid"
}
},
+ "node_modules/vfile": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/vite": {
"version": "8.1.4",
"resolved": "https://registry.npmjs.org/vite/-/vite-8.1.4.tgz",
@@ -9130,6 +10252,69 @@
"url": "https://opencollective.com/antfu"
}
},
+ "node_modules/vitepress": {
+ "version": "2.0.0-alpha.18",
+ "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-2.0.0-alpha.18.tgz",
+ "integrity": "sha512-Lk1G2/QqSf+MwNLICl9fmzWOtoCEwjZoWgaQy41QvWTfcGpLE9XwJDbcCyES/9rj6R2g1zFqFvLVkYKLLDALFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@docsearch/css": "^4.6.3",
+ "@docsearch/js": "^4.6.3",
+ "@docsearch/sidepanel-js": "^4.6.3",
+ "@iconify-json/simple-icons": "^1.2.87",
+ "@shikijs/core": "^4.3.0",
+ "@shikijs/transformers": "^4.3.0",
+ "@shikijs/types": "^4.3.0",
+ "@types/markdown-it": "^14.1.2",
+ "@vitejs/plugin-vue": "^6.0.7",
+ "@vue/devtools-api": "^8.1.4",
+ "@vue/shared": "^3.5.39",
+ "@vueuse/core": "^14.3.0",
+ "@vueuse/integrations": "^14.3.0",
+ "focus-trap": "^8.2.2",
+ "mark.js": "8.11.1",
+ "minisearch": "^7.2.0",
+ "shiki": "^4.3.0",
+ "vite": "^8.1.3",
+ "vue": "^3.5.39"
+ },
+ "bin": {
+ "vitepress": "bin/vitepress.js"
+ },
+ "peerDependencies": {
+ "markdown-it-mathjax3": "^4",
+ "postcss": "^8"
+ },
+ "peerDependenciesMeta": {
+ "markdown-it-mathjax3": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitepress-chat": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/vitepress-chat/-/vitepress-chat-0.0.4.tgz",
+ "integrity": "sha512-uoFN339SucRroIYfJwy7N0QzfHReZI7eDJ5ARjuz/H6CMTEwanivfe8UWJCpZJ5eqjOXRT9R/eLK5GBEEeqqfg==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "ko-fi",
+ "url": "https://ko-fi.com/cssnr"
+ },
+ "peerDependencies": {
+ "@ai-sdk/vue": ">=3.0.0",
+ "ai": ">=6.0.0",
+ "highlight.js": ">=11.0.0",
+ "marked": ">=18.0.0",
+ "marked-highlight": ">=2.0.0",
+ "vitepress": "*",
+ "vue": ">=3.0.0"
+ }
+ },
"node_modules/vscode-uri": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz",
@@ -9904,6 +11089,17 @@
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
}
}
}
diff --git a/package.json b/package.json
index 8a5ceda..07db454 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,12 @@
"android": "web-ext run -t firefox-android -s .output/firefox-mv3 --firefox-apk org.mozilla.firefox_beta --adb-device",
"clean": "rm -rf .output",
"tsc": "vue-tsc --noEmit",
+ "docs": "npm run docs:dev",
+ "docs:build": "vitepress build docs",
+ "docs:deploy": "npm run get-contributors && npm run docs:build",
+ "docs:dev": "vitepress dev docs",
+ "docs:preview": "vitepress preview docs",
+ "get-contributors": "npx get-contributors cssnr/auto-auth -f docs/.vitepress/contributors.json",
"prettier:check": "npx prettier --check .",
"prettier:write": "npx prettier --write .",
"lint": "npx eslint src",
@@ -28,6 +34,9 @@
"vue": "^3.5.39"
},
"devDependencies": {
+ "@catppuccin/vitepress": "github:catppuccin/vitepress#3f4df2fc96160d54c771b832f8b3a2d199541d30",
+ "@cssnr/vitepress-plugin-contributors": "^0.2.0",
+ "@cssnr/vitepress-swiper": "^0.3.1",
"@eslint/config-helpers": "^0.6.0",
"@eslint/js": "^10.0.1",
"@types/bootstrap": "^5.2.11",
@@ -36,6 +45,7 @@
"@wxt-dev/auto-icons": "^1.1.1",
"@wxt-dev/i18n": "^0.2.6",
"@wxt-dev/module-vue": "^1.0.3",
+ "animate.css": "^4.1.1",
"eslint": "^10.7.0",
"eslint-plugin-vue": "^10.9.2",
"globals": "^17.7.0",
@@ -44,6 +54,8 @@
"sass": "^1.101.0",
"typescript": "~6.0.3",
"typescript-eslint": "^8.64.0",
+ "vitepress": "next",
+ "vitepress-chat": "^0.0.4",
"vue-tsc": "^3.3.7",
"web-ext": "^10.5.0",
"wxt": "^0.20.27"