From 7be6a03c56192a01d729f88f0674885871f7df64 Mon Sep 17 00:00:00 2001
From: Shane <6071159+smashedr@users.noreply.github.com>
Date: Tue, 14 Jul 2026 09:40:11 -0700
Subject: [PATCH 1/3] Add Docs
---
.gitattributes | 1 +
.github/workflows/docs.yaml | 89 ++
.github/workflows/preview.yaml | 72 +
.gitignore | 7 +-
docs/.vitepress/config.mts | 160 +++
.../theme/components/BrowserIcons.vue | 62 +
docs/.vitepress/theme/custom.css | 53 +
docs/.vitepress/theme/index.ts | 45 +
docs/.vitepress/tsconfig.json | 5 +
docs/index.md | 46 +
docs/install.md | 97 ++
docs/migration.md | 69 +
docs/options.md | 101 ++
docs/public/favicon.ico | Bin 0 -> 7726 bytes
docs/public/images/logo.png | Bin 0 -> 15704 bytes
docs/public/images/logo.svg | 9 +
docs/security.md | 38 +
docs/support.md | 56 +
docs/usage.md | 130 ++
package-lock.json | 1206 ++++++++++++++++-
package.json | 12 +
21 files changed, 2252 insertions(+), 6 deletions(-)
create mode 100644 .gitattributes
create mode 100644 .github/workflows/docs.yaml
create mode 100644 .github/workflows/preview.yaml
create mode 100644 docs/.vitepress/config.mts
create mode 100644 docs/.vitepress/theme/components/BrowserIcons.vue
create mode 100644 docs/.vitepress/theme/custom.css
create mode 100644 docs/.vitepress/theme/index.ts
create mode 100644 docs/.vitepress/tsconfig.json
create mode 100644 docs/index.md
create mode 100644 docs/install.md
create mode 100644 docs/migration.md
create mode 100644 docs/options.md
create mode 100644 docs/public/favicon.ico
create mode 100644 docs/public/images/logo.png
create mode 100644 docs/public/images/logo.svg
create mode 100644 docs/security.md
create mode 100644 docs/support.md
create mode 100644 docs/usage.md
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..9cce16a
--- /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: 'Reference',
+ items: [
+ { text: 'Security', link: '/security' },
+ { text: 'Support', 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..871af90
--- /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
+ - 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
+---
+
+
cR5n9;HH7BD)EE?Jn5ba?iDyv2ZPvKUA^4*_02KT=!+5c3H!uHt zIlnt`CzV-_)Kq5rH}u8_bi9 zJ`5A(zhLvraLg7udb~&-d;Vo2VULOmqJL4j4iI4s)-h`tQKB1a={Fem^(WSH)9mL$ zIEt?=Eaw0!+R`JhQI6xJVJOPZVQ{nGzJA6c{2JtySQ-b3m#IuM;Sd?LP&$!T-sId% z+{W(56=8hSqq>Es&s^ cL*T}VfG>_OxmA;nqiu@c1t%9-p5UdC| zW6IV*h7rV!&z!Sa!p_7Ii)%F?&RR|F%PE(Z?*0!hWfzc4oN_#9w SQGH`AT!%iOc;@o)aAGQi!}k8sV<_#0A4n-p6XX-*7J|M6x0=<6iM&6 zA;yZrozQ{FJ&jEtin9b#*9i2)Mp7Hb7duNaIZ2TqciIkbVB?D>oU;IKJ$(@IY?K+q z+p$LMNbUpnuD6~ZzBQAJq(Dcc5fYP_QAYgukJnA%!MNIr)6oo$e7ovF4!5Q>>*=jB zlI}#W2XJCse{?9oGnhdLSL|83E#(%qbl1BGzwK1%i{Ee!gWj=eW&F&{QIx1tb*u JjVrN`H;eLqkcu zK-i${$&@eR+Byy>+x>K{Zsj$^^I!!?ES`4SC8uKh;(>4M*@gJ=D5w^^lbJeawi||; z^ESx?RX(gtxpypU<3y*foY3_e)qt`UaBo4i|IZZXAq_v=-*OGW@= 5|_^y1a>(Us?;y*au}fS|nzlCb)%K1Qlr79Out u*Crna$lklUxJG_!>k{rIPVInkr6Bvj#inGO_4&P&w;*m)18^92o&u42 zMh_$G%IfM~;UKG94YyxL<2!?d{b-7TB{U^{P9@%KQ;uTFmvdu*^u_dWI%Z;RBDEL;m ze|TpcO`B=B{V%&89FF-GJH?nqFn^No-bfVAgIL#aV?LdO2s|4b2f*as0lQZD?&cl@ zk92XEruO3kPVE{mL0M+Ohbr!QzZaE_n7-lWP_VNjQ*uxafRd)Lue}sgwo{qAQOZFy z?7d1NtaOZ(Rmy^~z=s1e?gM`A)RU=3QfxTY u)&><6^o$(-fLIi9L7LUBt7qf5+1=_8JJJ;TH z&cnDvuG2I&tM%i@pL`)lu66Urzpx=wHd0;jb(^?U8>)JS!`>nU*$brYCTgq>8>kUn zw_b`)|KiCnV)B40xI+FZM4PZcJ~n|i-^&P34KcYTQ(bpLJ|;xoUL*BozM+Fq|GRMg zquflLxct?BYJy&j@848c)R~;#`F4NQQ4g}E!bg;70cuL-&*Rj!ME*36{OOJJ1JvuL z3DiPKDxPJE3BXq|TsC3S1n5bnbKnQm_3n?>NbCm%Yrx}supWk>2RZ*WhfzH&{Qlhs zDdgfeWSJ7y9RG~>{shy<{7ogrp@&ST2!8vr=7}|<$M|014u&x|{hPDGbvzSB!APYj z{=g=xEB> -3I(FGf2~# TsEg=kw~$y?BWya)aRGclJ9zM?)rB7!;%;sCMW~s${s}91j1Q zU?@{?>hyiYkcM*SrT2fk%>^7D#q@u5b$A;e9&3cS?7c5~XlJ|{^6OKI>h^9slrE|o z{RmQU7B~z3y}`BX6`X#%&jeA&J%XyWd@vax{Ra8)yB4Cr7Mug?QEIJ_x7bt{lxcq! zeAVeCZLL+pNo0z#Vb{v3X&G4Y-qOI`*}$t(a2=qX8~c{V&ko9!G2!!Yp&m%?nnE^O zZK^)nP|cO>skCL%2J#;dwC?Xx!rgFtg|GfhS^{KzY2)IY7hdMwR>E4emDIJ?YIFQ` z%FQ%x&L1>+BNc@FV2SpI3mQ_wp2T+{pN)n2XHn*~Dy`Fswr{%&uunkMNT-DM{JqWF zs30jMiC}bj%Ix9zt%etVoACLI{B_|G3A$tt3B=&n#yOD~uB^VOpwG`AK076ws2~$4 z5Rx?c<&*RI1oE?nGx-(yQJ+U7&jtcHfknm|R3IpVJ0m}iw`nMggMNiRlkegrKN4K^ zV247Ps( wWh@k0QoN>OUrR*k+(1UCT zBfGkFsdC%G0ev21<%jXE)J5Y{)0!jka(mUT6_))9_#iMHjU^Xg%*gR0&JUNZ`+rgq BPDTI# literal 0 HcmV?d00001 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..04967bc --- /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" From c4a32a72200af3162a97027dca5bd1aa6160dec4 Mon Sep 17 00:00:00 2001 From: Shane <6071159+smashedr@users.noreply.github.com> Date: Tue, 14 Jul 2026 09:41:49 -0700 Subject: [PATCH 2/3] Lint --- docs/options.md | 10 +++++----- docs/usage.md | 42 +++++++++++++++++++++--------------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/docs/options.md b/docs/options.md index 7845a12..aae063c 100644 --- a/docs/options.md +++ b/docs/options.md @@ -49,12 +49,12 @@ Manage the keyboard shortcuts used to open extension panels directly from the br 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 | +| Description | Shortcut | +| -------------------- | -------------------------------------------- | +| Open Popup | Alt+Shift+A | +| Open Side Panel | Alt+Shift+P | | Open Extension Panel | Alt+Shift+W | -| Open Options | Alt+Shift+O | +| 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. diff --git a/docs/usage.md b/docs/usage.md index 04967bc..c2f7453 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -72,23 +72,23 @@ The credentials table shows all saved host entries with columns for hostname, us 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. | +| 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 | +| Description | Shortcut | +| -------------------- | -------------------------------------------- | +| Open Popup | Alt+Shift+A | +| Open Side Panel | Alt+Shift+P | | Open Extension Panel | Alt+Shift+W | -| Open Options | Alt+Shift+O | +| Open Options | Alt+Shift+O | Shortcuts can be customized through your browser's built-in extension shortcut manager. @@ -99,19 +99,19 @@ Shortcuts can be customized through your browser's built-in extension shortcut m 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. | +| 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. | +| 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 b2c19124d6e07be24f234eb0585bf27ea6ad6c8f Mon Sep 17 00:00:00 2001 From: Shane <6071159+smashedr@users.noreply.github.com> Date: Tue, 14 Jul 2026 10:51:57 -0700 Subject: [PATCH 3/3] Tweaks --- docs/.vitepress/config.mts | 4 ++-- docs/index.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 9cce16a..5281c08 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -133,10 +133,10 @@ export default defineConfig({ ], }, { - text: 'Reference', + text: 'Support', items: [ { text: 'Security', link: '/security' }, - { text: 'Support', link: '/support' }, + { text: 'Get Help', link: '/support' }, ], }, ], diff --git a/docs/index.md b/docs/index.md index 871af90..6b0d498 100644 --- a/docs/index.md +++ b/docs/index.md @@ -26,7 +26,7 @@ hero: features: - title: Install and Usage details: View Install and Usage Guides - link: /install + link: /install#install - title: Migration details: Migrate from Other Extensions link: /migration