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 + +
+ +[![Chrome Web Store Users](https://img.shields.io/chrome-web-store/users/gpoiggobidhogpmmlakahiaaegibnogm?logo=google&logoColor=white&label=users)](https://chromewebstore.google.com/detail/gpoiggobidhogpmmlakahiaaegibnogm) +[![Mozilla Add-on Users](https://img.shields.io/amo/users/auto-auth?logo=mozilla&label=users)](https://addons.mozilla.org/addon/auto-auth) +[![Chrome Web Store Rating](https://img.shields.io/chrome-web-store/rating/gpoiggobidhogpmmlakahiaaegibnogm?logo=google&logoColor=white)](https://chromewebstore.google.com/detail/gpoiggobidhogpmmlakahiaaegibnogm) +[![Mozilla Add-on Rating](https://img.shields.io/amo/rating/auto-auth?logo=mozilla&logoColor=white)](https://addons.mozilla.org/addon/auto-auth) +[![Chrome Web Store Version](https://img.shields.io/chrome-web-store/v/gpoiggobidhogpmmlakahiaaegibnogm?label=chrome&logo=googlechrome)](https://chromewebstore.google.com/detail/gpoiggobidhogpmmlakahiaaegibnogm) +[![Mozilla Add-on Version](https://img.shields.io/amo/v/auto-auth?label=firefox&logo=firefox)](https://addons.mozilla.org/addon/auto-auth) +[![GitHub Release Version](https://img.shields.io/github/v/release/cssnr/auto-auth?logo=github)](https://github.com/cssnr/auto-auth/releases/latest) +[![GitHub Locales](https://img.shields.io/github/directory-file-count/cssnr/auto-auth/src/locales?type=file&extension=yaml&logo=libretranslate&label=locales)](https://github.com/cssnr/auto-auth/tree/master/src/locales) +[![GitHub Last Commit](https://img.shields.io/github/last-commit/cssnr/auto-auth?logo=listenhub&label=updated)](https://github.com/cssnr/auto-auth/pulse) +[![GitHub Repo Size](https://img.shields.io/github/repo-size/cssnr/auto-auth?logo=buffer&label=repo%20size)](https://github.com/cssnr/auto-auth?tab=readme-ov-file#readme) +[![GitHub Top Language](https://img.shields.io/github/languages/top/cssnr/auto-auth?logo=devbox)](https://github.com/cssnr/auto-auth?tab=readme-ov-file#readme) +[![GitHub Contributors](https://img.shields.io/github/contributors-anon/cssnr/auto-auth?logo=southwestairlines)](https://github.com/cssnr/auto-auth/graphs/contributors) +[![GitHub Issues](https://img.shields.io/github/issues/cssnr/auto-auth?logo=codeforces&logoColor=white)](https://github.com/cssnr/auto-auth/issues) +[![GitHub Discussions](https://img.shields.io/github/discussions/cssnr/auto-auth?logo=theconversation)](https://github.com/cssnr/auto-auth/discussions) +[![GitHub Forks](https://img.shields.io/github/forks/cssnr/auto-auth?style=flat&logo=forgejo&logoColor=white)](https://github.com/cssnr/auto-auth/forks) +[![GitHub Repo Stars](https://img.shields.io/github/stars/cssnr/auto-auth?style=flat&logo=gleam&logoColor=white)](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. + +[![QR Code Firefox](https://raw.githubusercontent.com/smashedr/repo-images/refs/heads/master/auto-auth/qr-code-firefox.png)](https://addons.mozilla.org/addon/auto-auth) + +  + +[![QR Code Chrome](https://raw.githubusercontent.com/smashedr/repo-images/refs/heads/master/auto-auth/qr-code-chrome.png)](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 + +
+ +[![Features](https://img.shields.io/badge/features-brightgreen?style=for-the-badge&logo=rocket&logoColor=white)](https://github.com/cssnr/auto-auth/issues/new?template=1-feature.yaml) +[![Issues](https://img.shields.io/badge/issues-red?style=for-the-badge&logo=southwestairlines&logoColor=white)](https://github.com/cssnr/auto-auth/issues) +[![Discussions](https://img.shields.io/badge/discussions-blue?style=for-the-badge&logo=theconversation)](https://github.com/cssnr/auto-auth/discussions) +[![Discord](https://img.shields.io/badge/discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](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). + +[![Start A Discussion](https://img.shields.io/badge/Start_A_Discussion-blue?style=for-the-badge&logo=github)](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.** + +[![Report an Issue](https://img.shields.io/badge/Report_an_Issue-blue?style=for-the-badge&logo=github)](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`. + +[![Chat on Discord](https://img.shields.io/badge/Chat_on_Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/wXy6m2X8wY) + +  + +More information available at: [https://cssnr.com/](https://cssnr.com/) + +[![Support on Ko-fi](https://cdn.prod.website-files.com/5c14e387dab576fe667689cf/670f5a01c01ea9191809398c_support_me_on_kofi_blue.png){ 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"