diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..df39287
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,10 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+charset = utf-8
+
+[*.{js,ts,json,mts,css}]
+indent_style = space
+indent_size = 2
\ No newline at end of file
diff --git a/.envrc b/.envrc
index e3c2943..aa86cac 100644
--- a/.envrc
+++ b/.envrc
@@ -1,7 +1,4 @@
-export DIRENV_WARN_TIMEOUT=20s
-
+#!/usr/bin/env bash
eval "$(devenv direnvrc)"
-
-# The use_devenv function supports passing flags to the devenv command
-# For example: use devenv --impure --option services.postgres.enable:bool true
+dotenv
use devenv
diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml
new file mode 100644
index 0000000..6a95b30
--- /dev/null
+++ b/.gitea/workflows/deploy.yaml
@@ -0,0 +1,26 @@
+name: deploy
+on:
+ push:
+ branches:
+ - main
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v7
+ - uses: cachix/install-nix-action@v31
+ with:
+ nix_path: nixpkgs=channel:nixos-unstable
+ - uses: cachix/cachix-action@v16
+ with:
+ name: phundrak
+ authToken: ${{ secrets.CACHIX_AUTH_TOKEN }}
+ extraPullNames: devenv
+ - name: Install devenv
+ run: nix profile add nixpkgs#devenv
+ - name: Deploy to Cloudflare Pages
+ env:
+ CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
+ CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
+ run: devenv tasks run website:deploy
diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml
deleted file mode 100644
index 199984e..0000000
--- a/.github/workflows/deploy.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
-name: deploy
-on:
- push:
- branches:
- - main
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- - uses: purcell/setup-emacs@master
- with:
- version: 29.1
- - name: "Export org to md"
- run: emacs -Q --script export.el
- - uses: actions/setup-node@v4
- with:
- node-version: 20.x
- - run: corepack enable
- - run: npm ci
- - run: npm run build
- - name: "Deploy to Cloudflare Pages"
- uses: cloudflare/pages-action@v1
- with:
- apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
- accountId: ${{ secrets.ACCOUNT_ID }}
- projectName: config-phundrak-com
- directory: docs/.vuepress/dist/
- githubToken: ${{ secrets.TOKEN }}
- # - name: "Deploy to remote server"
- # uses: appleboy/scp-action@v0.1.4
- # with:
- # host: ${{ secrets.HOST }}
- # username: ${{ secrets.USERNAME }}
- # key: ${{ secrets.KEY }}
- # port: ${{ secrets.PORT }}
- # source: docs/.vuepress/dist/*
- # target: ${{ secrets.DESTPATH }}
- # strip_components: 3
diff --git a/.gitignore b/.gitignore
index 03be8a9..f1355ae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,13 +1,31 @@
node_modules
+/docs/**/*.md
+
+# Vitepress
+/.vitepress/cache/
+/.vitepress/dist/
+/docs/.vitepress/
+/docs/img
+/docs/eittlandic/img
+/docs/proto-nyqy/img
.temp
.cache
-/docs/**/*.md
-/docs/.vuepress/dist/
-/.yarn/
# Devenv
.devenv*
devenv.local.nix
+devenv.local.yaml
+
+# direnv
+.direnv
+
+# pre-commit
+.pre-commit-config.yaml
+
+# Devenv
+.devenv*
+devenv.local.nix
+devenv.local.yaml
# direnv
.direnv
diff --git a/.prettierrc.json b/.prettierrc.json
index d137ad0..79fbfe4 100644
--- a/.prettierrc.json
+++ b/.prettierrc.json
@@ -1,9 +1,13 @@
{
+ "$schema": "https://json.schemastore.org/prettierrc",
+ "semi": true,
"tabWidth": 2,
"useTabs": false,
- "semi": true,
"singleQuote": true,
- "trailingComma": "all",
+ "quoteProps": "as-needed",
+ "printWidth": 100,
+ "trailingComma": "es5",
"bracketSpacing": true,
+ "bracketSameLine": true,
"arrowParens": "always"
}
diff --git a/.vitepress/components/ImgFigure.vue b/.vitepress/components/ImgFigure.vue
new file mode 100644
index 0000000..d6b401d
--- /dev/null
+++ b/.vitepress/components/ImgFigure.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/.vitepress/config.mts b/.vitepress/config.mts
new file mode 100644
index 0000000..c8f4cc9
--- /dev/null
+++ b/.vitepress/config.mts
@@ -0,0 +1,33 @@
+// -*- mode: typescript; -*-
+import { defineConfig, HeadConfig } from 'vitepress';
+import appHead from './head';
+import { sidebar } from './sidebar';
+import { nav } from './nav';
+
+export default defineConfig({
+ title: "P’undrak’s Dotfiles",
+ cleanUrls: true,
+ description: 'P’undrak’s Linux configuration',
+ head: appHead as HeadConfig[],
+ srcDir: './docs',
+ themeConfig: {
+ sidebar,
+ nav,
+ outline: {
+ level: 'deep'
+ },
+ search: {
+ provider: 'local'
+ },
+ },
+ markdown: {
+ image: {
+ lazyLoading: true
+ },
+ linkify: true,
+ typographer: true,
+ headers: {
+ level: [1, 2, 3, 4, 5]
+ }
+ },
+})
diff --git a/.vitepress/head.ts b/.vitepress/head.ts
new file mode 100644
index 0000000..76d2d99
--- /dev/null
+++ b/.vitepress/head.ts
@@ -0,0 +1,79 @@
+interface Head {
+ type?: 'image/png';
+ async?: boolean,
+ src?: string,
+ 'data-website-id'?: string
+}
+
+interface Favicon extends Head {
+ rel: 'apple-touch-icon' | 'icon' | 'manifest';
+ href: string;
+ sizes?: string;
+}
+
+interface Meta extends Head {
+ property?: string,
+ name?: string,
+ content: string
+}
+
+const favicons: Favicon[] = [
+ { rel: 'apple-touch-icon', sizes: '57x57', href: '/img/meta/apple-icon-57x57.png' },
+ { rel: 'apple-touch-icon', sizes: '60x60', href: '/img/meta/apple-icon-60x60.png' },
+ { rel: 'apple-touch-icon', sizes: '72x72', href: '/img/meta/apple-icon-72x72.png' },
+ { rel: 'apple-touch-icon', sizes: '76x76', href: '/img/meta/apple-icon-76x76.png' },
+ { rel: 'apple-touch-icon', sizes: '114x114', href: '/img/meta/apple-icon-114x114.png' },
+ { rel: 'apple-touch-icon', sizes: '120x120', href: '/img/meta/apple-icon-120x120.png' },
+ { rel: 'apple-touch-icon', sizes: '144x144', href: '/img/meta/apple-icon-144x144.png' },
+ { rel: 'apple-touch-icon', sizes: '152x152', href: '/img/meta/apple-icon-152x152.png' },
+ { rel: 'apple-touch-icon', sizes: '180x180', href: '/img/meta/apple-icon-180x180.png' },
+ { rel: 'icon', type: 'image/png', sizes: '192x192', href: '/img/meta/android-icon-192x192.png' },
+ { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/img/meta/favicon-32x32.png' },
+ { rel: 'icon', type: 'image/png', sizes: '96x96', href: '/img/meta/favicon-96x96.png' },
+ { rel: 'icon', type: 'image/png', sizes: '16x16', href: '/img/meta/favicon-16x16.png' },
+ { rel: 'manifest', href: '/img/meta/manifest.json' },
+];
+
+const meta: Meta[] = [
+ {
+ name: 'author',
+ content: 'Lucien Cartier-Tilet',
+ },
+ {
+ property: 'og:image',
+ content: 'https://cdn.phundrak.com/img/rich_preview.png',
+ },
+ {
+ property: 'og:title',
+ content: 'P’undrak’s Dotfiles',
+ },
+ {
+ property: 'og:description',
+ content: 'P’undrak’s Linux configuration',
+ },
+ {
+ name: 'fediverse:creator',
+ content: '@phundrak@mastodon.phundrak.com',
+ },
+ {
+ name: 'twitter:card',
+ content: 'summary',
+ },
+ {
+ name: 'twitter:site',
+ content: '@phundrak',
+ },
+ {
+ name: 'twitter:creator',
+ content: '@phundrak',
+ },
+ { name: 'msapplication-TileColor', content: '#3b4252' },
+ { name: 'msapplication-TileImage', content: '/ms-icon-144x144.png' },
+ { name: 'theme-color', content: '#3b4252' },
+
+]
+
+const appHead: (string | Head)[][] = favicons.map((head) => ['link', head])
+meta.map((item) => appHead.push(['meta', item]))
+
+export default appHead;
diff --git a/.vitepress/nav.ts b/.vitepress/nav.ts
new file mode 100644
index 0000000..fefc0ec
--- /dev/null
+++ b/.vitepress/nav.ts
@@ -0,0 +1,8 @@
+import { DefaultTheme } from "vitepress";
+
+export const nav: DefaultTheme.NavItem[] = [
+ { text: 'About', link: '/about' },
+ { text: 'Configs', link: '/' },
+ { text: 'Deprecated Configs', link: '/deprecated/', activeMatch: '/deprecated/*' },
+ { text: 'Source', link: 'https://labs.phundrak.com/phundrak/config.phundrak.com' },
+]
diff --git a/.vitepress/sidebar.ts b/.vitepress/sidebar.ts
new file mode 100644
index 0000000..de4cb24
--- /dev/null
+++ b/.vitepress/sidebar.ts
@@ -0,0 +1,59 @@
+import { DefaultTheme } from "vitepress";
+
+export const sidebar: DefaultTheme.Sidebar = {
+ '/': [
+ { text: 'Index', link: '/' },
+ { text: 'Custom Scripts', link: '/scripts' },
+ { text: 'Desktop', link: '/desktop' },
+ { text: 'General Shell Config', link: '/shell' },
+ { text: 'Fish', link: '/fish' },
+ { text: 'Git', link: '/git' },
+ { text: 'Hyprland', link: '/hyprland' },
+ { text: 'MPD', link: '/mpd' },
+ { text: 'Tmux', link: '/tmux' },
+ {
+ text: 'Emacs',
+ items: [
+ { text: 'Index', link: '/emacs/' },
+ { text: 'Basic Config', link: '/emacs/basic-config' },
+ { text: 'Custom Elisp', link: '/emacs/custom-elisp' },
+ { text: 'Package Managers', link: '/emacs/package-manager' },
+ { text: 'Keybind Managers', link: '/emacs/keybinding-managers' },
+ { text: 'Autocompletion', link: '/emacs/packages/autocompletion' },
+ { text: 'Applications', link: '/emacs/packages/applications' },
+ { text: 'Editing', link: '/emacs/packages/editing' },
+ { text: 'Built-in', link: '/emacs/packages/emacs-builtin' },
+ { text: 'Making My Life Easier', link: '/emacs/packages/helpful' },
+ { text: 'LaTeX', link: '/emacs/packages/latex' },
+ { text: 'Org Mode', link: '/emacs/packages/org' },
+ { text: 'Programming', link: '/emacs/packages/programming' },
+ { text: 'Visual Config', link: '/emacs/packages/visual-config' },
+ { text: 'Misc', link: '/emacs/packages/misc' },
+ { text: 'Keybindings', link: '/emacs/keybindings' },
+ ]
+ }
+ ],
+ '/deprecated/': [
+ { text: 'AwesomeWM', link: '/deprecated/awesome' },
+ { text: 'Bootstrap Script', link: '/deprecated/bootstrap' },
+ { text: 'EXWM', link: '/emacs/packages/exwm' },
+ { text: 'i3', link: '/deprecated/i3' },
+ { text: 'Nano', link: '/deprecated/nano' },
+ { text: 'Neofetch', link: '/neofetch' },
+ { text: 'Picom', link: '/picom' },
+ { text: 'Polybar', link: '/deprecated/polybar' },
+ {
+ text: 'StumpWM', items: [
+ { text: 'Index', link: '/stumpwm/' },
+ { text: 'Basic Configuration', link: '/stumpwm/init' },
+ { text: 'Colours', link: '/stumpwm/colours' },
+ { text: 'Modeline', link: '/stumpwm/mode-line' },
+ { text: 'Groups and Placement', link: '/stumpwm/groups' },
+ { text: 'Theme', link: '/stumpwm/theme' },
+ { text: 'Commands', link: '/stumpwm/commands' },
+ { text: 'Keybinds', link: '/stumpwm/keybindings' },
+ { text: 'Utilities', link: '/stumpwm/utilities' },
+ ]
+ }
+ ]
+}
diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts
new file mode 100644
index 0000000..e9c13ac
--- /dev/null
+++ b/.vitepress/theme/index.ts
@@ -0,0 +1,10 @@
+import { Theme } from "vitepress";
+import DefaultTheme from "vitepress/theme";
+import ImgFigure from "../components/ImgFigure.vue";
+
+export default {
+ extends: DefaultTheme,
+ enhanceApp({ app }) {
+ app.component('ImgFigure', ImgFigure);
+ }
+} satisfies Theme;
diff --git a/devenv.lock b/devenv.lock
index 1804daf..9a9fbca 100644
--- a/devenv.lock
+++ b/devenv.lock
@@ -3,11 +3,11 @@
"devenv": {
"locked": {
"dir": "src/modules",
- "lastModified": 1777679510,
- "narHash": "sha256-uG8LPb1useAwa0cjO5sEkYhCSPjbWiCH3DyNxQLVSck=",
+ "lastModified": 1783538213,
+ "narHash": "sha256-jNjKlmrejUrBgVAeiavlMLlkmC7ZEv1D9nhfuwMW5Q8=",
"owner": "cachix",
"repo": "devenv",
- "rev": "bc8b21628907c726c74094cedc439c10a455cdb7",
+ "rev": "d1fb321e73048d0e1e2b523580268ebb3df2ae90",
"type": "github"
},
"original": {
@@ -22,11 +22,11 @@
"nixpkgs-src": "nixpkgs-src"
},
"locked": {
- "lastModified": 1776852779,
- "narHash": "sha256-WwO/ITisCXwyiRgtktZgv3iGhAGO+IB5Av4kKCwezR0=",
+ "lastModified": 1783345554,
+ "narHash": "sha256-LZhOm4kqjHUnwP4CNHpaqqEVcumGNd1PvOEOad8LkS0=",
"owner": "cachix",
"repo": "devenv-nixpkgs",
- "rev": "ec3063523dcd911aeadb50faa589f237cdab5853",
+ "rev": "6004ea8c229fe9d41b21c6f4c76bf6c2e10771dd",
"type": "github"
},
"original": {
@@ -39,11 +39,11 @@
"nixpkgs-src": {
"flake": false,
"locked": {
- "lastModified": 1776329215,
- "narHash": "sha256-a8BYi3mzoJ/AcJP8UldOx8emoPRLeWqALZWu4ZvjPXw=",
+ "lastModified": 1783279667,
+ "narHash": "sha256-/NAkDSsve+GNM0Bt6tleJdCGfsTlK89nPjkVOzZMo0s=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "b86751bc4085f48661017fa226dee99fab6c651b",
+ "rev": "f205b5574fd0cb7da5b702a2da51507b7f4fdd1b",
"type": "github"
},
"original": {
diff --git a/devenv.nix b/devenv.nix
index d21d803..d79436f 100644
--- a/devenv.nix
+++ b/devenv.nix
@@ -1,9 +1,40 @@
-{ pkgs, ... }:
-
-{
- languages.typescript.enable = true;
- packages = [ pkgs.nodejs_20 ];
- scripts.export.exec = ''
- ${pkgs.emacs}/bin/emacs -Q --script export.el
- '';
+{ pkgs, ... }: {
+ languages.javascript = {
+ enable = true;
+ npm.enable = false;
+ pnpm.enable = true;
+ };
+ dotenv.enable = true;
+ processes.dev.exec = "pnpm dev";
+ cachix = {
+ push = "phundrak";
+ pull = [
+ "phundrak"
+ "devenv"
+ ];
+ };
+ tasks = {
+ "website:install-deps".exec = "pnpm ci";
+ "website:export-md" = {
+ exec = "${pkgs.emacs}/bin/emacs -Q --script export.el";
+ execIfModified = [ "docs/**/*.org" ];
+ };
+ "website:build" = {
+ exec = "pnpm build";
+ after = [
+ "website:export-md@succeeded"
+ "website:install-deps@succeeded"
+ ];
+ };
+ "website:deploy" = {
+ exec = ''
+ if [[ -z "''${CLOUDFLARE_API_TOKEN:-}" ]]; then
+ echo "Error: CLOUDFLARE_API_TOKEN is not set. Run this in CI only."
+ exit 1
+ fi
+ ${pkgs.wrangler}/bin/wrangler pages deploy
+ '';
+ after = [ "website:build@succeeded" ];
+ };
+ };
}
diff --git a/devenv.yaml b/devenv.yaml
index 116a2ad..3dcab58 100644
--- a/devenv.yaml
+++ b/devenv.yaml
@@ -3,11 +3,14 @@ inputs:
nixpkgs:
url: github:cachix/devenv-nixpkgs/rolling
-# If you're using non-OSS software, you can set allowUnfree to true.
-# allowUnfree: true
+# If you're using non-OSS software, you can set allow_unfree to true.
+# allow_unfree: true
+
+# If you're not willing to allow unsupported packages:
+# allow_unsupported_system: false
# If you're willing to use a package that's vulnerable
-# permittedInsecurePackages:
+# permitted_insecure_packages:
# - "openssl-1.1.1w"
# If you have more than one devenv you can merge them
diff --git a/docs/deprecated/spacemacs.org b/docs/deprecated/spacemacs.org
deleted file mode 100644
index aed3a83..0000000
--- a/docs/deprecated/spacemacs.org
+++ /dev/null
@@ -1,4778 +0,0 @@
-#+title: Spacemacs
-#+setupfile: ../headers
-#+PROPERTY: header-args: :mkdirp yes :lexical t
-
-* Spacemacs
-#+begin_center
-*Before proceeding, be aware that I deprecated this i3 config on October 20th 2021, meaning I won’t update it anymore unless I use it again some day in the future. I will keep it on my website though.*
-#+end_center
-
-This file is the main source file for my Spacemacs configuration which
-contains most of the user code. It is exported thanks to Emacs’ code
-tangling from the original Org file which you can find on my dotfiles’
-repository[fn:1] if you are reading the web version of it. You can
-also find there my ~.spacemacs~[fn:2] and its code which isn’t part of
-the present file. As you can see in my ~.spacemacs~, at init-time, if
-Emacs detects the tangled configuration files are older than the Org
-file, then Emacs tangles them again, and then loads them.
-
-** Spacemacs layers and packages
-:PROPERTIES:
-:header-args:emacs-lisp: :mkdirp yes :tangle ~/.emacs.spacemacs/private/spacemacs-layers.el :exports code :results silent :lexical t
-:END:
-#+BEGIN_SRC emacs-lisp :exports none
-;; -*- lexical-binding: t -*-
-#+END_SRC
-
-Here will be our layer configuration set. Everything here is set with a
-~setq-default~ in the ~dotspacemacs/layers~ function like so:
-#+BEGIN_SRC emacs-lisp :tangle no
-(defun dotspacemacs/layers ()
- (setq-default
- ;; configuration goes here
- ))
-#+END_SRC
-
-*** General configuration
-First, we need to tell Spacemacs which base distribution we are using. This is a
-layer contained in the directory ~+distribution~. For now, available
-distributions are ~spacemacs-base~ and ~spacemacs~ (the default one).
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-distribution 'spacemacs)
-#+END_SRC
-
-We can seet a lazy installation of layers —i.e. layers are installed only when a
-file with a supported type is opened. Possible values are:
-- ~all~ :: will lazy install any layer that support lazy installation even the
- layers listed in ~dotspacemacs-configuration-layers~
-- ~unused~ :: will lazy install only unused layers (i.e. layers not listed in
- the variable ~dotspacemacs-configuration-layers~)
-- ~nil~ :: disables the lazy installation feature and you have to explicitly
- list a layer in the variable ~dotspacemacs-configuration-layers~ to install
- it.
-The default value is ~unused~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-enable-lazy-installation nil)
-#+END_SRC
-
-If the following variable is non-nil, Spacemacs will ask for confirmation before
-installing a layer lazily. The default value is ~t~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-ask-for-lazy-installation t)
-#+END_SRC
-
-*** Package management
-It is possible to indicate to Spacemacs a list of additional paths where to look
-for configuration layers. Paths must have a trailing slash, i.e.
-=~/.mycontribs/=. As you can see, I added only one:
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-configuration-layer-path
- '("~/fromGIT/emacs-packages"))
-#+END_SRC
-
-However, I do have additional packages I installed either from the Elpa or the
-Melpa. These are set in ~dotspacemacs-additional-packages~, a list of additional
-packages that will be installed without being wrapped in a layer. If I need some
-configuration for these packages, then I should consider creating a layer. I can
-also puth the configuration in ~dotspacemacs/user-config~. To use a local
-version of a package, use the ~:location~ property, for instance:
-#+BEGIN_SRC emacs-lisp :tangle no
-'(your-package :location "~/path/to/your-package/")
-#+END_SRC
-
-With the variable ~dotspacemacs-additional-packages~, it is possible to install
-extra packages which are not already included in any layers. Dependencies should
-be explicitly included as they won’t be resolved automatically. Here is a table
-of all the extra packages I use:
-#+NAME: extra-packages
-| name of the package | why is it installed |
-|----------------------------+--------------------------------------------------------|
-| caddyfile-mode | Major mode for editing Caddyfiles |
-| dired-git-info | Git information in Dired buffers |
-| diredfl | Extra font lock rules for a more colourful dired |
-| edit-indirect | edit region in separate buffer |
-| elcord | rich integration of Emacs in Discord |
-| eshell-syntax-highlighting | Syntax highlighting for Eshell |
-| info-colors | Extra colors for Emacs's Info-mode |
-| multiple-cursors | I don’t like the layer, I prefer this package alone |
-| ob-latex-as-png | Inline arbitrary LaTeX snippets as PNGs in Emacs |
-| org-sidebar | display on the side the outline of an Org buffer |
-| org-tree-slide | presentation tool for org-mode |
-| outorg | edit comments as Org-mode buffers |
-| ox-ssh | SSH config export for org-mode |
-| pinentry | enter a GPG password from Emacs |
-| nord-theme | An arctic, north-bluish clean and elegant Emacs theme. |
-| s | The long lost Emacs string manipulation library. |
-| sicp | Texinfo version of the [[https://mitpress.mit.edu/sites/default/files/sicp/index.html][SICP]] |
-| visual-fill-column | allow the use of ~fill-column~ in ~visual-line-mode~ |
-| wrap-region | easily wrap region with delimiters |
-| wttrin | weather in Emacs |
-| yasnippet-snippets | snippets for YaSnippet |
-
-#+name: make-extra-pkg
-#+begin_src emacs-lisp :var packages=extra-packages[,0] :tangle no :exports none
-(mapcar 'make-symbol packages)
-#+end_src
-
-#+begin_src emacs-lisp :noweb yes :exports none
-(setq-default dotspacemacs-additional-packages '<>)
-#+end_src
-
-It is possible to also list packages that cannot be updated:
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-frozen-packages '(helm-icons))
-#+END_SRC
-
-And to list packages which won’t be installed nor loaded:
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-excluded-packages '(company-tern))
-#+END_SRC
-
-Finally, it is possible to define the behaviour of Spacemacs when installing
-packages. Possible values are:
-- ~used-only~ :: installs only explicitly used packages and deletes any unused
- packages as well as their unused dependencies
-- ~used-but-keep-unused~ :: installs only the used packages but won’t delete
- unused ones
-- ~all~ :: installs *all* packages supported by Spacemacs and never uninstalls
- them.
-The default value is ~used-only~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-install-packages 'used-only)
-#+END_SRC
-
-*** Layers
-All layers are set one variable: ~dotspacemacs-configuration-layers~. This
-variable is a list of layers, some of them will have some custom variables.
-Typically, the variable will be set like so:
-#+BEGIN_SRC emacs-lisp :tangle no
-(setq-default dotspacemacs-configuration-layers
- '(emacs-lisp
- helm
- multiple-cursors
- org
- (shell :variables shell-default-height 30
- shell-default-position 'bottom)
- treemacs))
-#+END_SRC
-
-# Don’t delete this code block, it wraps the layers
-#+BEGIN_SRC emacs-lisp :exports none
-(setq-default dotspacemacs-configuration-layers '(
-#+END_SRC
-
-**** Checkers
-The two first checkers I use are for spell and syntax checking. ~spell-checking~
-is disabled by default, however it should auto-detect the dictionary to use.
-#+BEGIN_SRC emacs-lisp
-(spell-checking :variables
- spell-checking-enable-by-default nil
- spell-checking-enable-auto-dictionary t)
-syntax-checking
-#+END_SRC
-
-**** Completion
-~auto-completion~ is a layer enabled in order to provide auto-completion to all
-supported language layers. It is set so that the =RET= key has no behavior with
-this layer, however the =TAB= key cycles between candidates displayed by the
-auto-completion toolbox. I also want the autocompletion to include snippets in
-the popup, and the content of the popup is sorted by usage. It is also disabled
-for two modes: magit and Org.
-#+BEGIN_SRC emacs-lisp
-(auto-completion :variables
- auto-completion-complete-with-key-sequence-delay 0.2
- auto-completion-enable-help-tooltip 'manual
- auto-completion-enable-sort-by-usage t
- :disabled-for
- org
- git)
-#+END_SRC
-
-~helm~ is also enabled, with its header disabled.
-#+BEGIN_SRC emacs-lisp
-(helm :variables helm-no-header t)
-#+END_SRC
-
-**** Email
-I use as my daily Email client ~mu4e~, so let’s enable it and tell Emacs where
-mu4e is installed. I also tell mu4e to use maildirs extensions, use async
-operations, where to keep attachments, and enable the mu4e modeline.
-#+BEGIN_SRC emacs-lisp
-(mu4e :variables
- mu4e-installation-path "/usr/share/emacs/site-lisp"
- mu4e-use-maildirs-extension t
- mu4e-enable-mode-line t
- mu4e-attachment-dir "~/Documents/mu4e")
-#+END_SRC
-
-**** Emacs
-The first layer enabled in this category is ~better-defaults~. I also made it so
-that when a command equivalent to ~C-a~ or ~C-e~ is pressed, the cursor will
-respectively first move to the beginning of code first before going past the
-indentation and to the end of the code before going to the end of the line
-before going over the end of the comments on the same line.
-#+BEGIN_SRC emacs-lisp
-(better-defaults :variables
- better-defaults-move-to-beginning-of-code-first t
- better-defaults-move-to-end-of-code-first t)
-#+END_SRC
-
-I also enabled ~ibuffer~ and made it so that buffers are sorted by projects.
-#+BEGIN_SRC emacs-lisp
-(ibuffer :variables
- ibuffer-group-buffers-by 'projects)
-#+END_SRC
-
-Most important of all, the ~org~ layer is also enabled. I enabled support for
-Epub exports, Github, Reveal.JS exports, and sticky headers. Project support is
-also enabled through files named ~TODOs.org~. I also set the org-download folder
-for images in =~/Pictures/org/=, and I set the =RET= key to follow org links if
-the cursor is on one.
-#+BEGIN_SRC emacs-lisp
-(org :variables
- org-enable-epub-support t
- org-enable-github-support t
- org-enable-hugo-support t
- org-enable-reveal-js-support t
- org-enable-sticky-header t
- org-enable-appear-support t
- spaceline-org-clock-p t
- org-projectile-file "TODOs.org"
- org-download-image-dir "~/Pictures/org/"
- org-return-follows-link t)
-#+END_SRC
-
-The ~semantic~ layer is also enabled.
-#+BEGIN_SRC emacs-lisp
-semantic
-#+END_SRC
-
-**** File trees
-In this category, I only enabled one layer: ~treemacs~. In this layer, I set is
-so that treemacs syncs with my current buffer, and it automatically refreshes
-its buffer when there is a change in the part of the file system shown by
-treemacs.
-#+BEGIN_SRC emacs-lisp
-(treemacs :variables
- treemacs-use-follow-mode t
- treemacs-use-filewatch-mode t)
-#+END_SRC
-
-**** Fonts
-In this category, again, one layer is enabled: ~unicode-fonts~. This layer
-addssupport for the ~unicode-fonts~ package.
-#+BEGIN_SRC emacs-lisp
-(unicode-fonts :variables
- unicode-fonts-enable-ligatures t
- unicode-fonts-ligature-modes '(prog-mode)
- unicode-fonts-ligature-set '("|||>" "<|||" "<==>" "" "---" "-<<"
- "<~~" "<~>" "<*>" "<||" "<|>" "<$>" "<==" "<=>" "<=<" "<->"
- "<--" "<-<" "<<=" "<<-" "<<<" "<+>" ">" "###" "#_(" "..<"
- "..." "+++" "/==" "///" "_|_" "www" "&&" "^=" "~~" "~@" "~="
- "~>" "~-" "**" "*>" "*/" "||" "|}" "|]" "|=" "|>" "|-" "{|"
- "[|" "]#" "::" ":=" ":>" ":<" "$>" "==" "=>" "!=" "!!" ">:"
- ">=" ">>" ">-" "-~" "-|" "->" "--" "-<" "<~" "<*" "<|" "<:"
- "<$" "<=" "<>" "<-" "<<" "<+" "" "#{" "#[" "#:" "#=" "#!"
- "##" "#(" "#?" "#_" "%%" ".=" ".-" ".." ".?" "+>" "++" "?:"
- "?=" "?." "??" ";;" "/*" "/=" "/>" "//" "__" "~~" "(*" "*)"
- "\\\\" "://"))
-#+END_SRC
-
-**** Fun
-In this category, I only enabled two layers: ~selectric~ and ~xkcd~.
-#+BEGIN_SRC emacs-lisp
-selectric xkcd
-#+END_SRC
-
-**** Internationalization
-In this category, I enabled the ~keyboard-layout~ layer to enable compatibility
-with the bépo layout. This layer, however, is disabled for magit, Dired and eww.
-#+BEGIN_SRC emacs-lisp
-(keyboard-layout :variables
- kl-layout 'bepo
- kl-disabled-configurations '(magit dired eww))
-#+END_SRC
-
-**** Programming languages
-***** Domain-specific (DSLs)
-In this category, I enabled support for the ~major-modes~ layer for the Arch
-Linux PKGBUILDs support, ~emacs-lisp~ and ~scheme~ layers, support for the CSV
-format with the ~csv~ layer, the ~yaml~ language, shell scripting languages and
-support for the ~dot~ tool with the ~graphviz~ layer.
-#+BEGIN_SRC emacs-lisp
-major-modes emacs-lisp scheme graphviz yaml shell-scripts
-#+END_SRC
-
-I also added support for HTML and CSS with the ~html~ layer, with the web
-formatting tool set to ~web-beautify~, and the LSP layer compatibility enabled
-for CSS, less, SCSS and HTML.
-#+BEGIN_SRC emacs-lisp
-(html :variables
- web-fmt-tool 'web-beautify
- css-enable-lsp t
- less-enable-lsp t
- scss-enable-lsp t
- html-enable-lsp t)
-#+END_SRC
-
-The ~json~ layer is also enabled, with the format tool set to ~web-beautify~.
-#+BEGIN_SRC emacs-lisp
-(json :variables
- json-fmt-tool 'web-beautify)
-#+END_SRC
-
-The LaTeX layer has also been enabled, with its default compiler set to XeLaTeX.
-I also enabled the auto-fill feature, the folding capacity and the “magic”
-symbols.
-#+BEGIN_SRC emacs-lisp
-(latex :variables
- latex-build-command "xelatex"
- latex-enable-auto-fill t
- latex-enable-folding t
- latex-enable-magic t)
-#+END_SRC
-
-The Markdown layer has been enabled, with support for live preview with ~vmd~,
-and and automatic MMM-mode generation for C, C++, Python, Rust and Emacs Lisp.
-#+BEGIN_SRC emacs-lisp
-(markdown :variables
- markdown-live-preview-engine 'vmd
- markdown-mmm-auto-modes '("c"
- "c++"
- "python"
- "rust"
- ("elisp" "emacs-lisp")))
-#+END_SRC
-
-PlantUML is a very useful DSL for creating UML diagrams from some text
-description. As you can see below, this layer will be enabled, both as a
-standalone mode for opening ~.pum~ files, but also for org-mode code blocks.
-#+BEGIN_SRC emacs-lisp
-(plantuml :variables
- plantuml-jar-path "~/.local/bin/plantuml.jar"
- org-plantuml-jar-path "~/.local/bin/plantuml.jar")
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-(bibtex :variables
- org-ref-default-bibliography '("~/Documents/Papers/references.bib")
- org-ref-pdf-directory "~/Documents/Papers"
- org-ref-bibliography-notes "~/Documents/Papers/notes.org")
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-csv
-#+END_SRC
-
-***** Frameworks
-Only one framework support has been enabled so far, and is is for the Django
-framework.
-#+BEGIN_SRC emacs-lisp
-django
-#+END_SRC
-
-***** General-purpose
-Among the layers I activated, the only one without any specific configuration is
-the ~asm~ layer for the Assembly language.
-#+BEGIN_SRC emacs-lisp
-asm
-#+END_SRC
-
-Next, you can find the C/C++ layer for which I set the default language for ~.h~
-files to be C. I also enabled support for subprojects and organization of the
-include directives on a file save. I also set a couple of LSP-related variables,
-such as the LSP executable for C/C++ for its CCLS backend and some highlight
-variables.
-#+BEGIN_SRC emacs-lisp
-(c-c++ :variables
- c-c++-default-mode-for-headers 'c-mode
- c-c++-adopt-subprojects t
- c-c++-enable-c++11 t
- c-c++-backend 'lsp-clangd
- c-c++-lsp-enable-semantic-highlight t
- c-c++-lsp-semantic-highlight-method 'overlay
- c-c++-lsp-semantic-highlight-rainbow t
- c++-enable-organize-includes-on-save t)
-#+END_SRC
-
-Dart has also been enabled, with a custom path to the SDK of the Dart server,
-and to the LSP server of Dart.
-#+BEGIN_SRC emacs-lisp
-(dart :variables
- lsp-dart-project-sdk-dir "/opt/dart-sdk/"
- lsp-dart-sdk-dir "/opt/dart-sdk/")
-#+END_SRC
-
-When it comes to the Python layer, I set its backend and formatter to be bound
-to the LSP layer. Its fill columnn was also set to 80 characters, imports are
-sorted on save, and the tests can be run using either nose.el or pytest.
-#+BEGIN_SRC emacs-lisp
-(python :variables
- python-fill-column 80
- python-test-runner '(pytest nose))
-#+END_SRC
-
-With the Rust layer, the only custom configuration set is the backend being
-bound to the LSP layer.
-#+BEGIN_SRC emacs-lisp
-(rust :variables rust-backend 'lsp)
-#+END_SRC
-
-As regards the JavaScript layer, I set its backend to the LSP layer, and bound
-its format tool to ~web-beautify~ and its REPL is browser-based. I also want to
-include ~node_modules/.bin~ to be automatically added to the buffer local
-~exec_path~.
-#+BEGIN_SRC emacs-lisp
-(javascript :variables
- javascript-backend 'lsp
- javascript-fmt-tool 'web-beautify
- javascript-repl 'skewer
- node-add-modules-path t)
-#+END_SRC
-
-Alternatively, I also use Typescript which is a sort of better Javascript as it
-should have been, with the LSP backend.
-#+BEGIN_SRC emacs-lisp
-(typescript :variables
- typescript-backend 'lsp)
-#+END_SRC
-
-I am also currently using the Awesome window manager which requires the Lua
-programming language, so here it is.
-#+BEGIN_SRC emacs-lisp
-(lua :variables
- lua-backend 'lsp-emmy
- lua-lsp-emmy-jar-path "~/.config/awesome/EmmyLua-LS-all.jar"
- lua-lsp-emmy-java-path "java"
- lua-lsp-emmy-enable-file-watchers t)
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-(php :variables php-backend 'lsp)
-#+END_SRC
-
-**** Readers
-***** Epub and Pdf readers
-In this category, only the ~epub~ and ~pdf~ layers are enabled without any
-special configuration, so I can read these files from Emacs directly.
-#+BEGIN_SRC emacs-lisp
-epub pdf
-#+END_SRC
-
-***** Elfeed
-Elfeed is an Emacs feeed and RSS reader which can be managed through org files.
-Actually, through only one file in my case, located in my =~/org= directory.
-#+BEGIN_SRC emacs-lisp
-(elfeed :variables
- rmh-elfeed-org-files '("~/org/elfeed.org"))
-#+END_SRC
-
-**** Version control
-Only the ~git~ layer is enabled in this category.
-#+BEGIN_SRC emacs-lisp
-git
-#+END_SRC
-
-**** Themes
-Here, the ~colors~ layer is the only one enabled. It activates support for
-identifiers colorization, and strings representing colors.
-#+BEGIN_SRC emacs-lisp
-colors
-#+END_SRC
-
-**** Tools
-In this category, the first layer to be enabled is the CMake layer for which I
-enabled support for the ~cmake-ide~ package.
-#+BEGIN_SRC emacs-lisp
-(cmake :variables
- cmake-enable-cmake-ide-support t)
-#+END_SRC
-
-Next, we have the Docker, Nginx, Pass (the standard Unix password manager),
-Prettier, Systemd, Meson, Imenu-list, Web-beautify, Dap, and Helpful.
-#+BEGIN_SRC emacs-lisp
-dap docker helpful imenu-list meson nginx pass prettier systemd web-beautify
-#+END_SRC
-
-Of course, let’s not forget about the awesome LSP layer:
-#+BEGIN_SRC emacs-lisp
-(lsp :variables lsp-lens-enable t
- lsp-use-lsp-ui t
- lsp-rust-server 'rust-analyzer)
-#+END_SRC
-
-We also have the RestClient layer enabled for which I enabled the Org
-compatibility support.
-#+BEGIN_SRC emacs-lisp
-(restclient :variables
- restclient-use-org t)
-#+END_SRC
-
-LanguageTool works with Flyspell and will check for grammatical issues in my
-english texts.
-#+BEGIN_SRC emacs-lisp
-(languagetool :variables
- langtool-default-language "en-US"
- languagetool-show-error-on-jump t
- langtool-java-classpath "/usr/share/languagetool:/usr/share/java/languagetool/*")
-#+END_SRC
-
-
-And finally, we also have the Shell layer for which I specified its default
-height when spawning at the bottom of the screen should be 40 lines high, and
-the default shell to invoke is Eshell.
-#+BEGIN_SRC emacs-lisp
-(shell :variables
- shell-default-height 40
- shell-default-position 'bottom
- shell-default-shell 'eshell)
-#+END_SRC
-
-**** Web Services
-In this category, I have only enabled a layer for Twitter support.
-#+BEGIN_SRC emacs-lisp
-twitter
-#+END_SRC
-
-**** Custom layers
-Lastly, one custom layers have been enabled: my custom layer for conlanging
-tools.
-#+BEGIN_SRC emacs-lisp
-conlanging
-#+END_SRC
-
-# Don’t delete this code block, it wraps the layers
-#+BEGIN_SRC emacs-lisp :exports none
-))
-#+END_SRC
-
-** Init
-:PROPERTIES:
-:header-args:emacs-lisp: :mkdirp yes :tangle ~/.emacs.spacemacs/private/spacemacs-init.el :exports code :results silent :lexical t
-:END:
-#+BEGIN_SRC emacs-lisp :exports none
-;; -*- lexical-binding: t -*-
-#+END_SRC
-
-The ~dotspacemacs/init~ function is the one called at the very begining of the
-Spacemacs startup, before any kind of configuration, including the layer
-configuration. Only the values of the Spacemacs settings should be modified
-here. By default, every values are set in a ~setq-default~ sexp, and they
-represent all the supported Spacemacs settings. Hence, the function looks like
-this:
-#+BEGIN_SRC emacs-lisp :tangle no
-(defun dotspacemacs/init ()
- (setq-default
- ;; default Spacemacs configuration here
- ))
-#+END_SRC
-
-*** Handling my Spacemacs litterate config
-:PROPERTIES:
-:header-args:emacs-lisp: :tangle no :exports code :results silent :lexical t
-:END:
-Just before we get onto the usual content of the ~dotspacemacs/init~ function
-you would find in a typical Spacemacs installation, I would like to talk a bit
-about how I manage writing a litterate config for Spacemacs and ensure Emacs
-starts with an up-to-date configuration from said litterate config. For that, I
-actually declared a couple of variables:
-#+BEGIN_SRC emacs-lisp
-(defvar phundrak--dotspacemacs-src-dir "~/.emacs.spacemacs/private/"
- "Directory for my exported Elisp configuration files")
-(defvar phundrak--dotspacemacs-src "~/org/config/emacs.org"
- "My litterate config file for Emacs")
-(defvar phundrak--dotspacemacs-si (concat phundrak--dotspacemacs-src-dir "spacemacs-init"))
-(defvar phundrak--dotspacemacs-sl (concat phundrak--dotspacemacs-src-dir "spacemacs-layers"))
-(defvar phundrak--dotspacemacs-uc (concat phundrak--dotspacemacs-src-dir "user-config"))
-(defvar phundrak--dotspacemacs-ui (concat phundrak--dotspacemacs-src-dir "user-init"))
-(defvar phundrak--dotspacemacs-files (list phundrak--dotspacemacs-si phundrak--dotspacemacs-sl
- phundrak--dotspacemacs-uc phundrak--dotspacemacs-ui))
-#+END_SRC
-I also declared the following function that tells me if my Elisp files are more
-recent than my ~emacs.org~ file. The ~compiled?~ argument lets me compare either
-the ~.el~ files if it is ~nil~, or the ~.elc~ files if it is ~t~.
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-update-config-files-p (&optional compiled?)
- "Verify if any of my exported Elisp configuration files are
-newer than my litterate configuration.
-
-If `COMPILED?' is `t', check the `.elc' files instead of the
-`.el' files."
- (catch 'ret
- (dolist (file phundrak--dotspacemacs-files)
- (when (file-newer-than-file-p phundrak--dotspacemacs-src
- (format "%s.%s"
- file
- (if compiled? "elc" "el")))
- (throw 'ret t)))))
-#+END_SRC
-
-Now I know a couple of my files that get exported by this document. If I compare
-how recent these files are compared to my litterate config, I know if Emacs
-missed tangling its configuration before launching, so if any of my ~si~, ~sl~,
-~uc~, or ~ui~ files are older than my ~emacs.org~, then I’ll tangle the latter;
-and since my user config is growing longer and longer, I want Emacs to be able
-to parse it fast next time it boots, so let’s compile my exported ~.el~ files!
-#+BEGIN_SRC emacs-lisp
-(when (or (file-newer-than-file-p phundrak--dotspacemacs-src (concat phundrak--dotspacemacs-si ".el"))
- (file-newer-than-file-p phundrak--dotspacemacs-src (concat phundrak--dotspacemacs-sl ".el"))
- (file-newer-than-file-p phundrak--dotspacemacs-src (concat phundrak--dotspacemacs-ui ".el"))
- (file-newer-than-file-p phundrak--dotspacemacs-src (concat phundrak--dotspacemacs-uc ".el")))
- (message "Exporting new Emacs configuration from spacemacs.org through org-babel...")
- (with-temp-buffer
- (shell-command (format "emacs -Q --batch %s %s %s"
- "--eval \"(require 'ob-tangle)\""
- "--eval \"(setq org-confirm-babel-evaluate nil)\""
- (format "--eval '(org-babel-tangle-file \"%s\")'"
- phundrak--dotspacemacs-src))
- (current-buffer)))
- (message "Exporting new Emacs configuration from spacemacs.org through org-babel...done")
- (with-temp-buffer
- (byte-recompile-directory phundrak--dotspacemacs-src-dir
- 0 t)))
-#+END_SRC
-All that’s left to do in the Spacemacs functions is to call ~load~ on ~si~,
-~sl~, ~uc~, and ~ui~. Be aware this sub-chapter won’t be tangled, so it might
-not be up to date with the [[https://labs.phundrak.com/phundrak/dotfiles/src/branch/master/.spacemacs][actual dotspacemacs file]]. Please check it just in
-case something changed and I forgot to update this part of ~emacs.org~.
-
-*** Emacs with pdumper
-It is possible to compile Emacs 27 from source with support for the portable
-dumper, as shown in Spacemacs’ ~EXPERIMENTAL.org~ file. I do not use this
-feature yet, as I am still on Emacs 26 provided from Arch Linux’s repositories,
-so I’ll disable the Spacemacs support for this feature. The default value of
-this variable is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-enable-emacs-pdumper t)
-#+END_SRC
-
-In case the support for pdumper was enabled, Spacemacs needs to know the name of
-the Emacs executable which supports such a feature. The executable must be in
-the user’s ~PATH~. By default, the value of the variable is ~"emacs"~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-emacs-pdumper-executable-file "emacs")
-#+END_SRC
-
-And finally, we can name the Spacemacs dump file. This is the file that will be
-created by the portable dumper in the cache directory under the ~dumps~
-sub-directory. To load it when starting Emacs, the parameter ~--dump-file~
-should be added when invoking Emacs 27.1 executable from the command line, for
-instance:
-#+BEGIN_SRC sh :tangle no :exports code
-./emacs --dump-file=~/.emacs.spacemacs/.cache/dumps/spacemacs.pdmp
-#+END_SRC
-
-The default value of this variable is ~"spacemacs.pdmp"~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-emacs-dumper-dump-file
- (format "spacemacs-%s.pdmp" emacs-version))
-#+END_SRC
-
-*** Package managment and updates
-Spacemacs’ core configuration can be updated via git commands using Github
-services. If Spacemacs is not set to the ~develop~ branch, it can check by
-itself if any update is available. However, I am using said branch, therefore I
-should set this variable to ~nil~. The default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-check-for-update nil)
-#+END_SRC
-
-When it comes to package management, Spacemacs is able to store them in
-different directories depending on the version of Emacs used or based on other
-variables. I personally prefer to use the value ~emacs-version~ since it makes
-it easier to upgrade or downgrade Emacs without any conflict with the already
-installed packages. The default value is ~emacs-version~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-elpa-subdirectory 'emacs-version)
-#+END_SRC
-
-Spacemacs has a capacity of performing rollbacks after updates. We can set the
-maximum number of rollback slots to keep in the cache. The default value is ~5~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-max-rollback-slots 5)
-#+END_SRC
-
-**** Elpa repository
-It is possible to ask Emacs to use an HTTPS connection when contacting the Elpa
-whenever possible. This value should be set to ~nil~ when the user has no way to
-contact the Elpa though HTTPS, otherwise it is strongly recommended to let it
-set to ~t~. This variable however has no effect if Emacs is launched with the
-parameter ~--insecure~ which forces the value of this variable to ~nil~. The
-default value is ~t~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-elpa-https t)
-#+END_SRC
-
-We can set a maximum amount of seconds which will represent the maximum allowed
-time to contact the Elpa repository. By default, this setting is set on ~5~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-elpa-timeout 5)
-#+END_SRC
-
-**** Spacelpa repository
-The Spacelpa repository is a Spacemacs-specific package repository. It is
-possible to use it as the primary source to install a locked version of a
-package. If the below value is set to ~nil~, then Spacemacs will install the
-latest version of packages from MELPA. I personally don’t use it, so I let it
-set to ~nil~. The default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-use-spacelpa nil)
-#+END_SRC
-
-If the below value is not ~nil~, then the signature for the downloaded Spacelpa
-packages must be verified.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-verify-spacelpa-archives t)
-#+END_SRC
-
-*** Editing style
-By default, Spacemacs encourages the use of evil-mode, which brings vim
-keybinding in Emacs. Still, it has three different styles available:
-- ~vim~, which goes full evil-mode usage and most adapted to Emacs newcomers,
- especially if they were used to vim before, with the use of a normal mode and
- an insert mode.
-- ~emacs~ which keeps an Emacs-like feel to the keybindings, without any
- difference between an insert or normal mode.
-- ~hybrid~ is a modification of the ~vim~ mode which brings the ~emacs~ style in
- insert mode, but otherwise behaves like the ~vim~ style in normal mode. This
- is the style I personally use.
-The value can also be a list with the ~:variables~ keyword (similar to layers).
-Check the editing styles section of the documentation for details on available
-variables. The default value is ~vim~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-editing-style
- '(hybrid :variables
- hybrid-mode-enable-evilified-state t
- hybrid-mode-default-state 'normal))
-#+END_SRC
-
-If non-nil, the paste transient-state is enabled. While enabled, after you paste
-something, pressing ~C-j~ and ~C-k~ several times cycles through the elements in
-the ~kill-ring~. Default ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-enable-paste-transient-state t)
-#+END_SRC
-
-*** Spacemacs home configuration
-The value below specifies the startup banner of Spacemacs. The default value is
-~official~, it displays the official Spacemacs logo. An integer value is the
-index of text banner, ~random~ chooses a random text banner in the
-~core/banners~ directory. A string value must be a path to an image format
-supported by your Emacs build. If the value is nil, then no banner is displayed.
-The default value is ~official~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-startup-banner 'official)
-#+END_SRC
-
-On the Spacemacs homepage, a list of elements can also be shown, be it recent
-files, projects, agenda items,… Each of the elements making up the list value of
-the below variable are pairs in the form ~(list-type . list-size)~. If the value
-is ~nil~, then it is disabled. The possible values for ~list-type~ are:
-- ~recents~ :: displays recently opened files
-- ~bookmarks~ :: displays saved bookmarks
-- ~projects~ :: displays projectile projects recently opened
-- ~agenda~ :: displays upcoming events from Org-mode agendas
-- ~todos~ :: displays recent TODOs detected in projectile projects
-The order in which they are set in the below list affects their order on the
-Spacemacs startup page. List sikes may be ~nil~, in which case
-~spacemacs-buffer-startup-lists-length~ takes effect.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-startup-lists '((recents . 15)
- (projects . 15)))
-#+END_SRC
-
-The below variable allows the startup page to respond to resize events. Its
-default value is ~t~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-startup-buffer-responsive t)
-#+END_SRC
-
-If non-nil show the version string in the Spacemacs buffer. It will appear as
-~(spacemacs version)@(emacs version)~. Default ~t~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-startup-buffer-show-version t)
-#+END_SRC
-
-*** Default major modes
-The below variable sets a default major mode for a new empty buffer. Possible
-values are mode names such as ~text-mode~, or ~nil~ to use Fundamental mode. The
-default value is ~text-mode~, but I prefer to use ~org-mode~ by default.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-new-empty-buffer-major-mode 'org-mode)
-#+END_SRC
-
-Similarly, the below variable sets the default mode for the scratch buffer. Its
-default value is ~text-mode~, but I set it to use ~emacs-lisp-mode~ by default.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-scratch-mode 'emacs-lisp-mode)
-#+END_SRC
-
-By the way, it is possible to set a default message for the scratch buffer, such
-as “Welcome to Spacemacs!”. I prefer to keep it clean. The default value is
-~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-initial-scratch-message nil)
-#+END_SRC
-
-*** Visual configuration
-**** Themes
-Spacemacs makes it quite easy to use themes and organize them. The below value
-is a list of themes, the first of the list is loaded when Spacemacs starts. The
-user can press ~SPC T n~ to cycle to the next theme in the list.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-themes '(nord doom-nord doom-vibrant spacemacs-dark
- doom-one doom-opera doom-dracula doom-molokai
- doom-peacock doom-sourcerer doom-spacegrey
- kaolin-dark kaolin-aurora kaolin-bubblegum
- kaolin-galaxy kaolin-mono-dark kaolin-temple
- kaolin-valley-dark))
-#+END_SRC
-
-Emacs also makes use of themes for the Spaceline at the bottom of buffers.
-Supported themes are:
-- ~spacemacs~
-- ~all-the-icons~
-- ~custom~
-- ~doom~ (the one I use)
-- ~vim-powerline~
-- ~vanilla~
-The first three are Spaceline themes. ~doom~ is the Doom-Emacs mode-line, and
-~vanilla~ is the default Emacs mode-line. ~custom~ is a user defined theme,
-refer to Spacemacs’ ~DOCUMENTATION.org~ file for more info on how to create your
-own Spaceline theme. Value can be a symbol or list with additional properties.
-The default value is ~'(spacemacs :separator wave :separator-scale 1.5))~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-mode-line-theme '(doom
- :separator wave
- :separator-scale 1.0))
-#+END_SRC
-
-It is also possible to color the cursor depending on which mode Spacemacs is in,
-in order to mach the state color in GUI Emacs. The default value is ~t~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-colorize-cursor-according-to-state t)
-#+END_SRC
-
-The below variable sets either the default font or a prioritized list of fonts
-to be used by Emacs. The ~:size~ can be specified as a non-negative integer
-(pixel size), or a floating-point (point size). Point size is recommended,
-because it’s device independent (add a ~.0~ to make an integer a floating
-point). The default size is ~10.0~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-default-font '("Cascadia Code"
- :size 9.0))
-#+END_SRC
-
-I also added the following code in order to define a fallback font for emojis,
-defined only on their unicode range:
-#+BEGIN_SRC emacs-lisp
-(set-fontset-font "fontset-default" '(#x1f600 . #x1f64f) "NotoEmoji Nerd Font")
-#+END_SRC
-
-**** Other on-screen elements
-~which-key~ is a helper which displays available keyboard shortcuts. This
-variable sets in seconds the time Spacemacs should wait between a key press and
-the moment ~which-key~ should be shown.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-which-key-delay 1)
-#+END_SRC
-
-This variable sets ~which-key~'s frame position. Possible values are:
-- ~right~
-- ~bottom~
-- ~right-then-bottom~
-~right-then-bottom~ tries to display the frame to the right, but if there is
-insufficient space it displays it at the bottom. The default value is ~bottom~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-which-key-position 'right-then-bottom)
-#+END_SRC
-
-This controls where ~switch-to-buffer~ displays the buffer. If the value is
-~nil~, ~switch-to-buffer~ displays the buffer in the current window even if
-another same-purpose window is available. If non-nil, ~switch-to-buffer~
-displays the buffer in a same-purpose window even if the buffer can be displayed
-in the current window. The default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-switch-to-buffer-prefers-purpose nil)
-#+END_SRC
-
-If this variable is non-nil, a progress bar is displayed when Spacemacs is
-loading. This may increase the boot time on some systems and emacs builds, set
-it to ~nil~ to boost the loading time. The default value is ~t~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-loading-progress-bar t)
-#+END_SRC
-
-If the value is non-nil, Emacs will show the title of the transient states. The
-default value is ~t~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-show-transient-state-title t)
-#+END_SRC
-
-If non-nil, this will show the color guide hint for transient state keys. The
-default value is ~t~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-show-transient-state-color-guide t)
-#+END_SRC
-
-If non-nil, unicode symbols are displayed in the mode line. If you use Emacs as
-a daemon and want unicode characters only in GUI set the value to quoted
-~display-graphic-p~. The default value is ~t~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-mode-line-unicode-symbols t)
-#+END_SRC
-
-If non-nil, smooth scrolling (native-scrolling) is enabled. Smooth scrolling
-overrides the default behavior of Emacs which recenters point when it reaches
-the top or bottom of the screen. The default value is ~t~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-smooth-scrolling t)
-#+END_SRC
-
-The following value controls the line number activation. If set to ~t~,
-~relative~ or ~visual~ then line numbers are enabled in all ~prog-mode~ and
-~text-mode~ derivatives. If set to ~relative~, line numbers are relative. If set
-to ~visual~, line numbers are also relative, but only visual lines are counted.
-For example, folded lines will not be counted and wrapped lines are counted as
-multiple lines. This variable can also be set to a property list for finer
-control:
-#+BEGIN_SRC emacs-lisp :tangle no
-'(:relative nil
- :visual nil
- :disabled-for-modes dired-mode
- doc-view-mode
- markdown-mode
- org-mode
- pdf-view-mode
- text-mode
- :size-limit-kb 1000)
-#+END_SRC
-
-When used in a plist, ~visual~ takes precendence over ~relative~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-line-numbers '(:relative nil
- :visual nil
- :disabled-for-modes org-mode pdf-view-mode
- dired-mode doc-view-mode
- text-mode))
-#+END_SRC
-
-Select a scope to highlight delimiter. Possible values are:
-- ~any~
-- ~current~
-- ~all~
-- ~nil~
-The default value is ~all~ (highlights any scope and emphasis the current one).
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-highlight-delimiters 'all)
-#+END_SRC
-
-After a certain amount of time in seconds, Spacemacs can zone-out. The default
-value is ~nil~. I set it so Spacemacs zones out after 15 minutes.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-zone-out-when-idle 900)
-#+END_SRC
-
-Run ~spacemacs/prettify-org-buffer~ when visiting the ~README.org~ files of
-Spacemacs. The default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-pretty-docs nil)
-#+END_SRC
-
-If ~nil~, the home buffer shows the full path of agenda items and todos. If non
-~nil~, only the file name is shown.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-home-shorten-agenda-source t)
-#+END_SRC
-
-**** Appearance of Emacs frames
-Starting from Emacs 24.4, it is possible to make the Emacs frame fullscreen when
-Emacs starts up if the variable is set to a non-nil value. The default value is
-~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-fullscreen-at-startup nil)
-#+END_SRC
-
-This variable is to be used if the user does not want to use native fullscreen
-with ~spacemacs/toggle-fullscreen~. This disables for instance the fullscreen
-animation under OSX. The default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-fullscreen-use-non-native nil)
-#+END_SRC
-
-If you do not start Emacs in fullscreen at startup, you might want it to be
-maximized by default. If the value for the variable below is set to be non-nil,
-the frame will be maximized. This can only work if
-~dotspacemacs-fullscreen-at-startup~ is set to ~nil~, and it is only available
-from Emacs 24.4 onwards. The default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-maximized-at-startup nil)
-#+END_SRC
-
-If non-nil, the frame is undecorated when Emacs starts up. Combine this with the
-variable ~dotspacemacs-maximized-at-startup~ in OSX to obtain borderless
-fullscreen. The default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-undecorated-at-startup nil)
-#+END_SRC
-
-You can also set a transparency level for Emacs when you toggle the transparency
-of the frame with ~toggle-transparency~. The value of the transparency, going
-from 0 to 100 in increasing opacity, describes the transparency level of a frame
-when it’s active or selected. The default value is ~90~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-active-transparency 85)
-#+END_SRC
-
-Similarly, you can set a value from 0 to 100 in increasing opacity which
-describes the transparency level of a frame when it’s inactive or deselected.
-The default value is ~90~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-inactive-transparency 80)
-#+END_SRC
-
-The variable below sets the format of frame title. You can use:
-- ~%a~ :: the ~abbreviated-file-name~ or ~buffer-name~
-- ~%t~ :: ~projectile-project-name~
-- ~%I~ :: ~invocation-name~
-- ~%S~ :: ~system-name~
-- ~%U~ :: contents of ~$USER~
-- ~%b~ :: buffer name
-- ~%f~ :: visited file name
-- ~%F~ :: frame name
-- ~%s~ :: process status
-- ~%p~ :: percent of buffer above top of window, or Top, Bot, or All
-- ~%P~ :: percent of buffer above bottom of window, perhaps plus Top, or Bot, or
- All
-- ~%m~ :: mode name
-- ~%n~ :: Narrow if appropriate
-- ~%z~ :: mnemonics of buffer, terminal, and keyboard coding systems
-- ~%Z~ :: like ~%z~, but including the end-of-line format
-The default value is ~"%I@%S"~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-frame-title-format "Emacs: %b (%t) %U@%S")
-#+END_SRC
-
-Format specification for setting the icon title format. The default value is
-~nil~, same as ~frame-title-format~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-icon-title-format nil)
-#+END_SRC
-
-*** Spacemacs leader keys and shortcuts
-The below setting sets the Spacemacs leader key. By default, this is the ~SPC~
-key.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-leader-key "SPC")
-#+END_SRC
-
-Once the leader key has been pressed, it is possible to set another key in order
-to call Emacs’ command ~M-x~. By default, it is again the ~SPC~ key.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-emacs-command-key "SPC")
-#+END_SRC
-
-It is also possible to invoke Vim Ex commands with the press of a key, and by
-default it is the ~:~ key.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-ex-command-key ":")
-#+END_SRC
-
-The below variable sets the leader key accessible in ~emacs-state~ and
-~insert-state~:
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-emacs-leader-key "M-m")
-#+END_SRC
-
-The major mode leader key is a shortcut key which is the equivalent of pressing
-~ m~. Set it to ~nil~ to disable it. Its default value is ~,~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-major-mode-leader-key ",")
-#+END_SRC
-
-In ~emacs-state~ and ~insert-state~, the same major mode leader key can be
-accessible from another shortcut, which by default is ~C-M-m~ in terminal mode,
-or ~M-return~ in GUI mode.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-major-mode-emacs-leader-key
- (if window-system "" "C-M-m"))
-#+END_SRC
-
-These variables control whether separate commands are bound in the GUI to the
-key pairs ~C-i~ and ~TAB~, and ~C-m~ and ~RET~. Setting it to a non-nil value
-allows for separate commands under ~C-i~ and ~TAB~, and ~C-m~ and ~RET~. In the
-terminal, these pairs are generally indistinguishable, so this only works in the
-GUI. The default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-distinguish-gui-tab nil)
-#+END_SRC
-
-*** Layouts
-The variable belows sets the name of the default layout. Its default value is
-~"Default"~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-default-layout-name "Default")
-#+END_SRC
-
-If non-nil, the default layout name is displayed in the mode-line. The default
-value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-display-default-layout nil)
-#+END_SRC
-
-If non-nil, then the last auto saved layouts are resumed automatically upon
-start. The default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-auto-resume-layouts nil)
-#+END_SRC
-
-If non-nil, the layout name will be auto-generated when creating new layouts. It
-only has an effect when using the “jump to layout by number” command. The
-default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-auto-generate-layout-names nil)
-#+END_SRC
-
-*** Files-related settings
-The below value sets the size in MB above which Spacemacs will prompt to open
-the file literally in order to avoid preformance issues. Opening a file
-literally means that no major or minor mode is active. The default value is ~1~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-large-file-size 5)
-#+END_SRC
-
-This variable sets the location where to auto-save files. Possible values are:
-- ~original~ :: auto-saves files in-place
-- ~cache~ :: auto-saves files in another file stored in the cache directory
-- ~nil~ :: disables auto-saving.
-The default value is ~cache~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-auto-save-file-location 'original)
-#+END_SRC
-
-*** Emacs server
-Emacs can be launched as a server if the following value is set to non-nil and
-if one isn’t already running. The default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-enable-server nil)
-#+END_SRC
-
-You can also set a custom emacs server socket location. If the value is ~nil~,
-Emacs will use whatever the Emacs default is, otherwise a directory path like
-="$HOME/.config/emacs/server"=. It has no effect if ~dotspacemacs-enable-server~
-is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-server-socket-dir nil)
-#+END_SRC
-
-It is also possible to tell Emacs that the quit function should keep the server
-open when quitting. The default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-persistent-server t)
-#+END_SRC
-
-*** Miscellaneous
-This value changes the folding method of code blocks. The possible values are
-either ~evil~, the default value, or ~origami~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-folding-method 'evil)
-#+END_SRC
-
-If non-nil, ~smartparens-strict-mode~ will be enabled in programming modes. The
-default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-smartparens-strict-mode nil)
-#+END_SRC
-
-If non-nil, pressing the closing parenthesis ~)~ key in insert mode passes over
-any automatically added closing parenthesis, bracket, quote, etc… This can
-temporarily disabled by pressing ~C-q~ before ~)~. The default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-smart-closing-parenthesis nil)
-#+END_SRC
-
-List of search tool executable names. Spacemacs uses the first installed tool of
-the list. Supported tools are:
-- ~rg~
-- ~ag~
-- ~pt~
-- ~ack~
-- ~grep~
-The default value is ~'("rg" "ag" "pt" "ack" "grep")~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-search-tools '("rg" "grep"))
-#+END_SRC
-
-Delete whitespace while saving buffer. Possible values are:
-- ~all~ :: aggresively delete empty lines and long sequences of whitespace
-- ~trailing~ :: only detele the whitespace at end of lines
-- ~changed~ :: to delete only whitespace for changed lines
-- ~nil~ :: disable cleanup
-The default value is ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-whitespace-cleanup nil)
-#+END_SRC
-
-Set ~gc-cons-threshold~ and ~gc-cons-percentage~ when startup finishes. This is
-an advanced option and should not be changed unless you suspect performance
-issues due to garbage collection operations. The default is ~'(100000000 0.1)~
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-gc-cons '(100000000 0.1))
-#+END_SRC
-
-If non nil activate ~clean-aindent-mode~ which tries to correct virtual
-indentation of simple modes. This can interfer with mode specific indent
-handling like has been reported for ~go-mode~. If it does deactivate it here.
-Default ~t~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-use-clean-aindent-mode t)
-#+END_SRC
-
-If non ~nil~, shift your number row to match the entered keyboard layout (only
-in insert state). Currently supported keyboard layouts are ~querty-us~,
-~quertz-de~ and ~querty-ca-fr~. New layouts can be added in ~spacemacs-editing~
-layer. Default ~nil~.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-swap-number-row nil)
-#+END_SRC
-
-Set ~read-process-output-max~ when startup finishes. This defines how much data
-is read from a foreign process. Setting this >= 1 MB should increase performance
-for lsp servers in emacs 27.
-#+BEGIN_SRC emacs-lisp
-(setq-default dotspacemacs-read-process-output-max (* 1024 1024 8))
-#+END_SRC
-
-** User Initialization
-*** User Init
-:PROPERTIES:
-:header-args:emacs-lisp: :mkdirp yes :tangle ~/.emacs.spacemacs/private/user-init.el :exports code :results silent :lexical t
-:END:
-#+BEGIN_SRC emacs-lisp :exports none
-;; -*- lexical-binding: t -*-
-#+END_SRC
-
-While Emacs and especially Spacemacs loads, I want it to initialize some
-elements and load some packages. First of all, I want it to load my private
-Emacs config file:
-#+BEGIN_SRC emacs-lisp
-(load "~/.emacs.spacemacs/private/private_emacs")
-#+END_SRC
-
-I would also like to enable the setup of flycheck for Rust when Flycheck is
-loaded:
-#+BEGIN_SRC emacs-lisp
-(add-hook 'flycheck-mode-hook #'flycheck-rust-setup)
-#+END_SRC
-
-By default, Flyspell should be disabled and only enabled manually.
-#+BEGIN_SRC emacs-lisp
-(flyspell-mode 0)
-#+END_SRC
-
-Finally, here is a quick workaround for Tramp, sometimes it cannot connect to my
-hosts if I don’t have this code snippet.
-#+BEGIN_SRC emacs-lisp
-(setq tramp-ssh-controlmaster-options
- "-o ControlMaster=auto -o ControlPath='tramp.%%C' -o ControlPersist=no")
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-(require 'org)
-#+END_SRC
-
-*** User Load
-:PROPERTIES:
-:header-args:emacs-lisp: :mkdirp yes :tangle ~/.emacs.spacemacs/private/user-load.el :exports code :results silent :lexical t
-:END:
-Then, I want a couple of requires:
-#+BEGIN_SRC emacs-lisp
-(require 'org-id)
-(require 'org-protocol)
-(require 'package)
-(require 'ox-latex)
-(require 'ox-publish)
-(require 'tramp)
-#+END_SRC
-
-** User Configuration
-:PROPERTIES:
-:header-args:emacs-lisp: :mkdirp yes :tangle ~/.emacs.spacemacs/private/user-config.el :exports code :results silent :lexical t
-:END:
-#+BEGIN_SRC emacs-lisp :exports none
-;; -*- lexical-binding: t -*-
-#+END_SRC
-*** Custom functions, macros, and variables
-In this section, I will put my various custom functions that do not fit in other
-sections and which are more oriented towards general usage throughout Emacs and
-in Elisp code.
-
-Almost all of my code snippets will be prefixed by either my name or the name of
-the package or layer they are part of, unless they are an explicit overwrite of
-a function that already exists.
-**** Elisp Utilities and Predicates
-***** ~phundrak-filter~
-#+name: elisp-phundrak-filter
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-filter (fn list)
- "Filter `LIST' according to the predicate `FN'.
-
-All elements from `LIST' that do not satisfy the predicate `FN'
-will be left out of the result, while all elements that do
-satisfy it will be included in the resulting list. This function
-also preserves the relative position between elements that
-satisfy the predicate."
- (declare (pure t) (side-effect-free t))
- (when list
- (let ((rest (phundrak-filter fn
- (cdr list))))
- (if (funcall fn
- (car list))
- (cons (car list) rest)
- rest))))
-#+END_SRC
-
-***** ~phundrak-all?~
-This function is inspired by dash’s ~-all?~ function: it will test all the
-elements of the list ~seq~ against the predicate ~fn~ which should return either
-~t~ or ~nil~. If all of them return something else than ~nil~, then it is a
-success, otherwise it is a failure. Note that empty lists will always return
-~t~.
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-all? (fn seq)
- "Check if all members of `SEQ' satisfy predicate `FN'. Note that
-it will return t if `SEQ' is nil."
- (declare (pure t) (side-effect-free t))
- (if seq
- (and (funcall fn (car seq))
- (phundrak-all? fn (cdr seq)))
- t))
-#+END_SRC
-
-***** ~phundrak-none?~
-In the same vein as ~phundrak-all?~, ~phundrak-none?~ checks if all elements of
-~seq~ do not satify the predicate ~fn~. Again, if the list is empty, it will
-return ~t~.
-#+name: elisp-phundrak-none
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-none? (fn seq)
- "Check if all members of `SEQ' do not satisfy predicate `FN'.
-Note that it will return t if `SEQ' is nil."
- (declare (pure t) (side-effect-free t))
- (if seq
- (and (not (funcall fn (car seq)))
- (phundrak-none? fn (cdr seq)))
- t))
-#+END_SRC
-
-***** ~phundrak-zip~
-#+name: elisp-phundrak-zip
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-zip (&rest lists)
- "Zip `LISTS' together.
-Be aware only the amount of elements of the smallest list will be zipped."
- (declare (pure t) (side-effect-free t))
- (when lists
- (let ((lists (if (= 1 (length lists)) ; only one element => a list of lists was passed
- (car lists)
- lists)))
- (when (phundrak-none? 'null lists)
- (cons (mapcar 'car lists)
- (phundrak-zip (mapcar 'cdr lists)))))))
-#+END_SRC
-
-**** Eshell Prompt-Related Functions
-***** ~phundrak-eshell-git-status~
-This function is used in my Eshell prompt which you can consult [[file:./spacemacs.md#eshell-theme-and-prompt][here]].
-This function basically executes two git calls to get some information
-about a git repo, which path we provide as an argument. Based on the
-result of these git calls, the function will know what it needs to
-know about the repo to build a git prompt that will be inserted in my
-Eshell prompt. And just for shit and giggles, I’ve made it so it is a
-powerline prompt.
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-eshell-git-status ($path &optional $background-color)
- "Returns a string indicating the status of the repository located
-in `$PATH' if it exists. It should also append the name of the
-current branch if it is not `master' or `main'.
-`$BACKGROUND-COLOR' allows to choose the color that will be
-visible behind the powerline characters. The theme is inspired by
-the bobthefish theme for the fish shell which you can find here:
-https://github.com/oh-my-fish/theme-bobthefish
-
-Color code:
-- green:
-- orange: tracked stuff is staged but not commited
-- red: tracked stuff is modified and not commited
-
-Symbols:
-- `*': dirty working dir, RED
-- `~': staged changes, ORANGE
-- `…': untracked files, GREEN
-- `$': stashed changes
-- `-': unpulled commits
-- `-': unpushed commits
-- `±': unpulled and unpushed commits"
- (let* ((git-status-command (concat "cd " $path "; git status"))
- (git-stash-status-command (concat "cd " $path "; git stash list"))
- (status (eshell-command-result git-status-command))
- (stashstat (eshell-command-result git-stash-status-command))
- (detached (s-contains? "HEAD detached" status))
- (dirty (s-contains? "Changes not staged for commit" status))
- (staged (s-contains? "Changes to be committed" status))
- (untracked (s-contains? "Untracked files" status))
- (pullable (s-contains? "git pull" status))
- (pushable (s-contains? "git push" status))
- (branch (replace-regexp-in-string "On Branch \\(.*\\)\n\\(.\\|\n\\)*" "\\1" status))
- (branch (unless (or (string= "master" branch)
- (string= "main" branch)
- detached)
- branch)))
- (let ((prompt (concat " "
- (if detached ">" "")
- (when branch (concat " " branch " "))
- (when dirty "*")
- (when staged "~")
- (when untracked "…")
- (cond ((and pullable pushable) "±")
- (pullable "-")
- (pushable "+"))
- (when stashstat "$")
- " "))
- (accent (cond
- (dirty phundrak-nord11)
- (staged phundrak-nord13)
- (t phundrak-nord14)))
- (background (if $background-color
- $background-color
- phundrak-nord0)))
- (concat (with-face ""
- :background accent
- :foreground background)
- (with-face prompt
- :background accent
- :foreground (if dirty phundrak-nord6 background))
- (with-face ""
- :background background
- :foreground accent)))))
-#+END_SRC
-
-***** ~phundrak-git-repo-root~
-This function detects if the path passed as an argument points to a git
-directory or to one of its subdirectories. If it is, it will return the path to
-the root of the git repository, else it will return ~nil~.
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-git-repo-root ($path)
- "Return `$PATH' if it points to a git repository or one of its
-subdirectories."
- (when $path
- (if (f-dir? (concat $path "/.git"))
- $path
- (phundrak-git-repo-root (f-parent $path)))))
-#+END_SRC
-
-***** ~phundrak-prompt-toggle-abbreviation~
-#+BEGIN_SRC emacs-lisp
-(defvar phundrak-prompt--abbreviate t
- "Whether or not to abbreviate the displayed path in the Eshell
-prompt.")
-
-(defun phundrak-prompt-toggle-abbreviation ()
- "Toggles whether the Eshell prompt should shorten the name of
-the parent directories or not. See `phundrak-eshell-prompt'."
- (interactive)
- (setq phundrak-prompt--abbreviate (not phundrak-prompt--abbreviate)))
-#+END_SRC
-
-***** ~phundrak-abbr-path~
-The following is a nice little function I use in my Eshell prompt. It shortens
-the name of all the parent directories of the current one in its path, but
-leaves the current one written in full. It also abbreviates the equivalent of
-the ~$HOME~ (~/home//~) directory to a simple =~=.
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-abbr-path ($path &optional $abbreviate)
- "Abbreviate `$PATH'. If `$ABBREVIATE' is t, then all parent
-directories of the current directory will be abbreviated to one
-letter only. If a parent directory is a hidden directory (i.e.
-preceeded by a dot), the directory will be abbreviated to the dot
-plus the first letter of the name of the directory (e.g.
-\".config\" -> \".c\").
-
-For public use of the function, `$PATH' should be a string
-representing a UNIX path. For internal use, `$PATH' can also be a
-list. If `$PATH' is neither of those, an error will be thrown by
-the function."
- (cond
- ((stringp $path) (f-short
- (if $abbreviate
- (phundrak-abbr-path (f-split (phundrak-abbr-path $path)))
- $path)))
- ((null $path) "")
- ((listp $path)
- (f-join (cond ((= 1 (length $path)) (car $path))
- (t (let* ((dir (car $path))
- (first-char (s-left 1 dir)))
- (if (string= "." first-char)
- (s-left 2 dir)
- first-char))))
- (phundrak-abbr-path (cdr $path))))
- (t (error "Invalid argument %s, neither stringp nor listp" $path))))
-#+END_SRC
-
-**** Files-Related Functions
-***** ~phundrak-file-to-string~
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-file-to-string (FILE)
- "Returns the content of `FILE' as a string."
- (with-temp-buffer
- (insert-file-contents FILE)
- (buffer-string)))
-#+END_SRC
-
-***** ~phundrak-find-org-files~
-There are lots of files which I want to be able to quickly open. I used to have
-one shortcut for each one of these files, but as their number grew, I decided to
-switch to helm for my file selector which will be called by only one common
-shortcut. Most of my files will be located in =~/org=, but I have some
-conlanging files which are located in =~/Documents/conlanging=, and all my
-university notes are in =~/Documents/university=. Let’s declare these
-directories in a variable:
-#+BEGIN_SRC emacs-lisp
-(defvar phundrak-org-directories '("~/org"
- "~/Documents/university/S8"
- "~/Documents/conlanging")
- "Directories in which to look for org files with the function
-`phundrak-find-org-files'.")
-#+END_SRC
-
-With this established, let’s write some emacs-lisp that will allow me to get a
-list of all these files and select them through helm. Be aware that I will be
-using some functions from third party packages, such as [[https://github.com/magnars/s.el][s.el]] and [[https://github.com/magnars/dash.el][dash]], as well
-as [[https://github.com/sharkdp/fd][fd]].
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-find-org-files ()
- "Find all org files in the directories listed in
-`phundrak-org-directories', then list them in an ido buffer where
-the user can match one and open it."
- (interactive)
- (find-file
- (ivy-completing-read
- "Org File: "
- (s-split "\n"
- (mapconcat (lambda (path)
- (shell-command-to-string
- (format "fd . %s -e org -c never" path)))
- phundrak-org-directories
- "\n")))))
-#+END_SRC
-
-***** ~phundrak-open-marked-files~
-This function is particularly useful in Dired buffers when someone wants to open
-multiple files. This function will basically look for all marked files in the
-current dired buffer and open each one of them in their individual buffer.
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-open-marked-files ()
- "This function allows the user to open all marked files in a
-Dired buffer at once."
- (interactive)
- (let ((file-list (if (string= major-mode "dired-mode")
- (dired-get-marked-files)
- (list (buffer-file-name)))))
- (mapc (lambda (file)
- (find-file file))
- file-list)))
-#+END_SRC
-
-***** ~xah/open-in-external-app~
-Here is another of Xah’s functions, this time to open a file externally to
-Emacs. For instance, I sometimes want to open a PDF in Zathura rather than in
-Emacs, or an HTML file in Firefox. With this function, it is now possible!
-#+BEGIN_SRC emacs-lisp
-(defun xah/open-in-external-app (&optional files)
- "Open the current file or dired marked files in external app.
-The app is chosen from your OS’ preference.
-
-When called in emacs lisp, if `FILES' is given, open that.
-
-URL `http://ergoemacs.org/emacs/emacs_dired_open_file_in_ext_apps.html'
-Version 2019-01-18"
- (interactive)
- (let* (($file-list (if files
- (progn (list files))
- (if (string-equal major-mode "dired-mode")
- (dired-get-marked-files)
- (list (buffer-file-name)))))
- ($do-it-p (if (<= (length $file-list) 5)
- t
- (y-or-n-p "Open more than 5 files? "))))
- (when $do-it-p
- (mapc (lambda ($fpath)
- (let ((process-connection-type nil))
- (start-process "" nil "xdg-open" $fpath)))
- $file-list))))
-#+END_SRC
-
-**** Theming
-***** Nord theming variables
-Yes, I do use a preconfigured theme, as mentioned above, but for some elements
-such as Eshell, I need to define some variables for color, and I’ll do it here.
-#+BEGIN_SRC emacs-lisp
-(defvar phundrak-nord0 "#2e3440")
-(defvar phundrak-nord1 "#3b4252")
-(defvar phundrak-nord2 "#434c5e")
-(defvar phundrak-nord3 "#4c566a")
-(defvar phundrak-nord4 "#d8dee9")
-(defvar phundrak-nord5 "#e5e9f0")
-(defvar phundrak-nord6 "#eceff4")
-(defvar phundrak-nord7 "#8fbcbb")
-(defvar phundrak-nord8 "#88c0d0")
-(defvar phundrak-nord9 "#81a1c1")
-(defvar phundrak-nord10 "#5e81ac")
-(defvar phundrak-nord11 "#bf616a")
-(defvar phundrak-nord12 "#d08770")
-(defvar phundrak-nord13 "#ebcb8b")
-(defvar phundrak-nord14 "#a3be8c")
-(defvar phundrak-nord15 "#b48ead")
-#+END_SRC
-
-***** ~with-face~
-~with-face~ is a simple yet very useful macro that allows me to easily create
-strings with faces defined as properties to the string passed as the first
-argument. Here is how it is implemented:
-#+BEGIN_SRC emacs-lisp
-(defmacro with-face ($str &rest $properties)
- "Helper macro for creating strings `$STR' with `$PROPERTIES'"
- `(propertize ,$str 'face (list ,@$properties)))
-#+END_SRC
-
-**** ~phundrak-blog-publish~
-This function is quite a simple function made to automatically publish [[https://blog.phundrak.com][my blog]]
-based on Hugo. After exporting my blog using ~ox-hugo~, I simply have to call
-this function which will look for all files located in =~/org/blog/public= and
-copy them to my remote server once ~hugo~ has been executed in =~/org/blog=.
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-blog-publish ()
- "Publish my blog through Hugo and rsync to my remote server."
- (interactive)
- (let* ((blog-path "~/org/blog")
- (public-path (concat blog-path "/public"))
- (target-path "/rsync:Tilo:/home/phundrak/www/phundrak.com/blog"))
- (shell-command (format "cd %s && hugo" blog-path))
- (let ((files (mapcar (lambda (file)
- (f-relative file public-path))
- (f-files (format "%s/public" blog-path) nil t))))
- (dolist (file files)
- (copy-file (concat public-path "/" file)
- (concat target-path "/" file)
- t nil t)))))
-#+END_SRC
-
-**** ~phundrak-yas-rust-new-assignments~
-The following function is a function that will allow me to easily create ~new~
-functions for Rust structs. Inspired from [[https://github.com/jorgenschaefer/elpy][elpy]]’s ~elpy-snippet-init-assignments~
-function, it will automatically write assignments to my new struct as I write
-new parameters in the ~new~ function. It also comes with a helper function that
-parses the arguments given to the ~new~ function.
-#+BEGIN_SRC emacs-lisp
-(defun phundrak--yas-snippet-split-rust-args ($arg-string)
- "Split a Rust argument string `$ARG-STRING' into ((name,
-default)...) tuples"
- (mapcar (lambda ($elem)
- (split-string $elem "[[:blank:]]*:[[:blank:]]*" t))
- (split-string $arg-string "[[:blank:]]*,[[:blank:]]*" t)))
-
-(defun phundrak-yas-rust-new-assignments ($arg-string)
- "Return a typical new assignment for arguments.
-Inspired from elpy’s functions https://github.com/jorgenschaefer/elpy"
- (let ((indentation (make-string (save-excursion
- (goto-char start-point)
- (current-indentation))
- ?\s)))
- (mapconcat (lambda ($elem)
- (if (string-match "^\\*" (car $elem))
- ""
- (format "%s,\n%s" (car $elem) indentation)))
- (phundrak--yas-snippet-split-rust-args $arg-string)
- "")))
-#+END_SRC
-
-**** ~screenshot-svg~
-This function allows for taking SVG screenshots of Emacs from itself using
-Cairo. The function definition was taken [[https://github.com/caiohcs/my-emacs#screenshots][from here]].
-#+BEGIN_SRC emacs-lisp
-(defun screenshot-svg ()
- "Save a screenshot of the current frame as an SVG image.
-Saves to a temp file and puts the filename in the kill ring."
- (interactive)
- (let* ((filename (make-temp-file "Emacs" nil ".svg"))
- (data (x-export-frames nil 'svg)))
- (with-temp-file filename
- (insert data))
- (kill-new filename)
- (message filename)))
-#+END_SRC
-
-**** ~xah/dired-sort~
-This function comes directly from Xah Lee’s website and allows the user to sort
-files in a dired buffer depending on four factors:
- - File name
- - File size
- - Last modification date
- - File extension
-#+BEGIN_SRC emacs-lisp
-(defun xah/dired-sort ()
- "Sort dired dir listing in different ways. Prompt for a choice.
-URL `http://ergoemacs.org/emacs/dired_sort.html'
-Version 2018-12-23, modified by Phundrak on 2019-08-06"
- (interactive)
- (let ($sort-by $arg)
- (setq $sort-by (ido-completing-read "Sort by:" '( "name" "size" "date" "extension" )))
- (cond
- ((equal $sort-by "name") (setq $arg "-ahl --group-directories-first"))
- ((equal $sort-by "date") (setq $arg "-ahl -t --group-directories-first"))
- ((equal $sort-by "size") (setq $arg "-ahl -S --group-directories-first"))
- ((equal $sort-by "extension") (setq $arg "-ahlD -X --group-directories-first"))
- (t (error "logic error 09535" )))
- (dired-sort-other $arg )))
-#+END_SRC
-
-*** Editing and modes
-There is first a setting I would like to enable to make the navigation through
-text a bit easier which is to enable the subword mode. This allows me to iterate
-through words that are in CamelCase more easily, I don’t have to go either to
-the beginning or the end of the word and then move my cursor a bunch of times to
-get to the subword I want to modify.
-#+BEGIN_SRC emacs-lisp
-(global-subword-mode 1)
-#+END_SRC
-
-**** Default modes
-Some buffers sometimes won’t have a default mode at all, such as the ~*scratch*~
-buffer. In any vanilla configuration, they will then default to ~text-mode~. I
-personally prefer ~org-mode~ to be my default mode, so let’s set it so!
-#+BEGIN_SRC emacs-lisp
-(setq edit-server-default-major-mode 'org-mode)
-#+END_SRC
-
-**** Evil
-Evil is not really smart by default when I ask it to undo stuff. As an example,
-let’s say I enter insert-mode and write a whole paragraph, and then I exit
-insert-mode back to normal-mode, and I notice a small mistake I made when typing
-my stuff down, like accidentally using a snippet from yasnippet, and I want to
-undo that. My initial reaction would be to press ~u~ to undo, and so would be
-yours too right? That’s the wrong answer with evil, since it considers your
-actions between entering and leaving insert-mode as only one action, and it
-would thus erase your /WHOLE PARAGRAPH/. Fortunately, there is a way to make the
-undo action more granular, but it comes at the cost of increasing the amount of
-undo actions you can do (which shouldn’t really matter if you don’t have a
-potato PC).
-#+BEGIN_SRC emacs-lisp
-(setq undo-limit 500000
- evil-want-fine-undo t)
-#+END_SRC
-
-**** File extensions
-Sometimes, Emacs doesn’t recognize or misrecognizes some extensions, resulting
-in a wrong mode set for said file. Let’s fix that by associating the extension
-with the desired mode:
-#+BEGIN_SRC emacs-lisp
-(dolist (e '(("xml" . web-mode)
- ("xinp" . web-mode)
- ("aiml" . web-mode)
- ("C" . c++-mode)
- ("dconf" . conf-mode)
- ("yy" . bison-mode)
- ("ll" . flex-mode)
- ("s" . asm-mode)
- ("pl" . prolog-mode)
- ("l" . scheme-mode)
- ("vs" . glsl-mode)
- ("fs" . glsl-mode)))
- (push (cons (concat "\\."
- (car e)
- "\\'") (cdr e))
- auto-mode-alist))
-#+END_SRC
-
-We also have a couple of extensions which should all be in ~conf-unix-mode~,
-let’s indicate that to Emacs:
-#+BEGIN_SRC emacs-lisp
-(dolist (e '("service" "timer" "target" "mount" "automount"
- "slice" "socket" "path" "netdev" "network"
- "link"))
- (push (cons (concat "\\." e "\\'") 'conf-unix-mode)
- auto-mode-alist))
-#+END_SRC
-
-**** Hooks
-I also have some hooks I use for enabling some major and minor modes. The first
-one here allows the execution of the deletion of trailing space each time I save
-a file.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'before-save-hook 'delete-trailing-whitespace)
-#+END_SRC
-
-I also want to always be in ~visual-line-mode~ so Emacs soft-wraps lines that
-are too long for the buffer they are displayed in. This will also be enabled for
-Elfeed.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'prog-mode-hook 'visual-line-mode)
-(add-hook 'elfeed-read-mode-hook 'visual-line-mode)
-#+END_SRC
-
-I also want for some non-programming modes to enable a hard-limit in terms of
-how many characters can fit on one line. The modes that benefit are
-~message-mode~, ~org-mode~, ~text-mode~ and ~markdown-mode~.
-#+BEGIN_SRC emacs-lisp
-(mapc (lambda (x)
- (add-hook x 'visual-line-mode))
- '(message-mode-hook
- text-mode-hook
- markdown-mode-hook))
-#+END_SRC
-
-**** Twittering mode
-For ~twittering-mode~, a Twitter major mode for Emacs, I want to encrypt my data
-using a master password, which I do thanks to this option:
-#+BEGIN_SRC emacs-lisp
-(setq twittering-use-master-password t)
-#+END_SRC
-
-**** Wrapping regions
-I really like the ~M-(~ keybinding for wrapping a selected region between
-parenthesis. However, parenthesis are not everything (even in Lisp dialects),
-and other wrappers could be nice. And they are! Here is how they are declared:
-#+BEGIN_SRC emacs-lisp
-(global-set-key (kbd "M-[") 'insert-pair)
-(global-set-key (kbd "M-{") 'insert-pair)
-(global-set-key (kbd "M-<") 'insert-pair)
-(global-set-key (kbd "M-'") 'insert-pair)
-(global-set-key (kbd "M-`") 'insert-pair)
-(global-set-key (kbd "M-\"") 'insert-pair)
-#+END_SRC
-
-For the record, this is from [[http://www.howardism.org/][Howard Abram]]’s [[https://github.com/howardabrams/dot-files][dotfiles]].
-
-*** Emacs builtins
-**** Dired
-When it comes to dired, I chose do modify some elements on how things are sorted
-and shown, but there isn’t much configuration. First, I want to always copy
-folders in a recursive way, no questions asked.
-#+BEGIN_SRC emacs-lisp
-(setq dired-recursive-copies 'always)
-#+END_SRC
-
-Also, when I have two Dired buffers opened side by side, I generally want them
-to interact with each other, for example if I want to move around or copy stuff.
-So, let’s tell Emacs that:
-#+BEGIN_SRC emacs-lisp
-(setq dired-dwim-target t)
-#+END_SRC
-
-Finally, let’s tell Dired how to sort the elements to be displayed: directories
-first, non-hidden first.
-#+BEGIN_SRC emacs-lisp
-(setq dired-listing-switches "-ahl --group-directories-first")
-#+END_SRC
-
-By the way, let’s enable ~org-download~ when we are in a Dired buffer:
-#+BEGIN_SRC emacs-lisp
-(add-hook 'dired-mode-hook 'org-download-enable)
-#+END_SRC
-
-Finally, let’s enable globally ~diredfl~ so we can get a colourful Dired buffer
-each time we open one:
-#+BEGIN_SRC emacs-lisp
-(diredfl-global-mode 1)
-#+END_SRC
-
-**** Emacs Lisp
-For some reason, =flycheck-mode= is not enabled by default when in an elisp
-buffer. Let’s add that:
-#+BEGIN_SRC emacs-lisp
-(add-hook 'emacs-lisp-mode-hook 'flycheck-mode)
-#+END_SRC
-
-**** Eshell
-Eshell is a built-in shell available from Emacs which I use almost as often as
-Fish. Some adjustments are necessary for making this shell usable for me.
-
-But first, here is a screenshot of what to expect visually from my configuration
-of Eshell when it is launched:
-
-[[file:../emacs/img/eshell.svg]]
-
-***** Aliases
-This function is a function that will come in very handy for Eshell functions
-that call shell processes. It concatenates the initial string ~command~ with all
-the arguments ~args~, each separated with a space.
-#+BEGIN_SRC emacs-lisp
-(defun phundrak/concatenate-shell-command ($command &rest $args)
- (string-join (cons $command $args) " "))
-#+END_SRC
-
-Just like most shells, it is possible to declare in Eshell aliases. First, I
-would like to be able to use ~open~ to open files in Emacs:
-#+BEGIN_SRC emacs-lisp
-(defalias 'open 'find-file)
-#+END_SRC
-
-I also have ~openo~ which allows me to perform the same action, but in another
-window:
-#+BEGIN_SRC emacs-lisp
-(defalias 'openo 'find-file-other-window)
-#+END_SRC
-
-The function ~yes-or-no-p~ is also aliased to ~y-or-n-p~ so I only have to
-answer by ~y~ or ~n~ instead of typing ~yes~ or ~no~.
-#+BEGIN_SRC emacs-lisp
-(defalias 'yes-or-no-p 'y-or-n-p)
-#+END_SRC
-
-For some ease of use, I’ll also declare ~list-buffers~ as an alias of ~ibuffer~.
-#+BEGIN_SRC emacs-lisp
-(defalias 'list-buffers 'ibuffer)
-#+END_SRC
-
-~mkcd~ is a function that allows me to create a directory and ~cd~ into it at
-the same time.
-#+begin_src emacs-lisp
-(defun eshell/mkcd ($directory)
- (eshell/mkdir "-p" $directory)
- (cd $directory))
-#+end_src
-
-***** Custom functions
-When I’m in Eshell, sometimes I wish to open multiple files at once in Emacs.
-For this, when I have several arguments for ~find-file~, I want to be able to
-open them all at once. Let’s modify ~find-file~ like so:
-#+BEGIN_SRC emacs-lisp
-(defadvice find-file (around find-files activate)
- "Also find all files within a list of files. This even works recursively."
- (if (listp filename)
- (cl-loop for f in filename do (find-file f wildcards))
- ad-do-it))
-#+END_SRC
-
-I also want to be able to have multiple instances of Eshell opened at once. For
-that, I declared the function ~eshell-new~ that does exactly that.
-#+BEGIN_SRC emacs-lisp
-(defun eshell-new()
- "Open a new instance of eshell."
- (interactive)
- (eshell 'N))
-#+END_SRC
-
-****** Redirect text editors to Emacs
-I still have some stupid muscle memory telling me to open ~emacs~ in the
-terminal, which is stupid with Eshell since I’m already inside Emacs. So, let’s
-open each file passed to the ~emacs~ command and bury the eshell buffer (we’ll
-get back to it later).
-#+BEGIN_SRC emacs-lisp
-(defun eshell/emacs (&rest $files)
- "Open a file in a new buffer. Old habits die hard"
- (if $files
- (mapc #'find-file
- (mapcar #'expand-file-name
- (eshell-flatten-list (reverse $files))))
- (bury-buffer)))
-#+END_SRC
-
-***** Environment variables
-Some environment variables need to be correctly set so Eshell can correctly
-work. The first environment variable to be set is the ~PATH~, as I have a couple
-of directories where executables are located. Let’s add them to our path.
-#+BEGIN_SRC emacs-lisp
-(setenv "PATH"
- (concat
- (getenv "HOME") "/.pub-cache/bin"
- ":" (getenv "HOME") "/.local/bin"
- ":" (getenv "HOME") "/go/bin"
- ":" (getenv "HOME") "/.cargo/bin"
- ":" (getenv "HOME") "/.gem/ruby/2.6.0/bin"
- ":" (getenv "PATH")))
-#+END_SRC
-
-I would also like to set two environment variables related to Dart development:
-the ~DART_SDK~ and ~ANDROID_HOME~ variables.
-#+BEGIN_SRC emacs-lisp
-(setenv "DART_SDK" "/opt/dart-sdk/bin")
-(setenv "ANDROID_HOME" (concat (getenv "HOME") "/Android/Sdk/"))
-#+END_SRC
-
-Finally, I’d like to add a custom directory to the ~PKG_CONFIG_PATH~:
-#+BEGIN_SRC emacs-lisp
-(setenv "PKG_CONFIG_PATH" (concat
- "/usr/local/lib/pkgconfig/" ":"
- (getenv "PKG_CONFIG_PATH")))
-#+END_SRC
-
-The ~EDITOR~ variable also needs to be set for git commands, especially the
-~yadm~ commands.
-#+BEGIN_SRC emacs-lisp
-(setenv "EDITOR" "emacsclient -c")
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-(setenv "SHELL" "/bin/sh")
-#+END_SRC
-
-***** Eshell banner
-The code creating the Eshell banner is a bit lengthy and requires some
-additional explanations that would make the following chapter [[file:./spacemacs.md#eshell-theme-and-prompt][Eshell
-theme and prompt]] too long. So, here it is!
-
-The banner for Eshell will collect some system information and display them
-gracefully. These pieces of information are:
-- The GNU/Linux distribution running (I do not use any other OS on my computer)
-- The kernel name and its version
-- The machine’s hostname
-- Its uptime
-- Its RAM and Swap usage
-- How full are its mountpoints
-Some of these information can be grabbed directly from Emacs built-in functions,
-but some others need to be retrieved manually. Let’s first get into it with the
-mounted partitions for which we’ll define a structure:
-#+BEGIN_SRC emacs-lisp
-(cl-defstruct phundrak/mounted-partitions
- "Object representing a mounted partition found in the system"
- path size used percent)
-#+END_SRC
-
-We’ll also define a variable setting the maximum length of a partition path
-before it gets abbreviated:
-#+BEGIN_SRC emacs-lisp
-(defvar phundrak//eshell-banner--max-length-part 13
- "Maximum length of a partition path")
-#+END_SRC
-
-Now, we can get our partitions. For this, we’ll make a call to the
-shell command ~df -lH~ and we’ll keep only the partitions mounted on a
-device stored in ~/dev~, for instance on ~/dev/sda~. And as mentioned
-above, if the mount path of the partition exceeds the length specified
-by ~phundrak//eshell-banner--max-length-part~, it will get abbreviated
-by [[file:./spacemacs.md#phundrak-abbr-path][=phundrak-abbr-path=]].
-#+BEGIN_SRC emacs-lisp
-(defun phundrak/get-mounted-partitions ()
- (let ((partitions (s-split "\n"
- (shell-command-to-string "df -lH")
- t)))
- (-keep (lambda (partition)
- (let* ((partition (s-split " " partition t))
- (filesystem (nth 0 partition))
- (size (nth 1 partition))
- (used (nth 2 partition))
- (percent (nth 4 partition))
- (mount (nth 5 partition)))
- (when (s-prefix? "/dev" filesystem)
- (make-phundrak/mounted-partitions
- :path (if (> phundrak//eshell-banner--max-length-part (length mount))
- mount
- (phundrak-abbr-path mount t))
- :size size
- :used used
- :percent (string-to-number (s-chop-suffix "%" percent))))))
- partitions)))
-#+END_SRC
-
-We’ll need some padding for the name of the information displayed on the left
-hand side of the banner. The maximum length without any partitions is eight
-characters due to the text ~Hostname~, so if any partition path is longer than
-this, the left padding will increase.
-#+BEGIN_SRC emacs-lisp
-(defun phundrak//eshell-banner--get-left-pad (initial-pad partitions)
- (if partitions
- (let ((part-length (length (phundrak/mounted-partitions-path (car partitions)))))
- (phundrak//eshell-banner--get-left-pad (if (> part-length initial-pad)
- part-length
- initial-pad)
- (cdr partitions)))
- initial-pad))
-#+END_SRC
-
-Now, Let’s set three variables that will be used in the function following this
-declaration. They will be used to determine in which color a percentage should
-be displayed. I’ll consider any percentage below 60% to be acceptable and
-therefore displayed in green. However, starting from this threshold, I want the
-user to be noticed of the usage of whatever percentage shown that it has gone up
-and it should be watched and displayed in yellow. Above 75%, the user should
-consider this a warning, and the percentage will be displayed in orange. Above
-90%, it is considered critical and the percentage will be displayed in red.
-#+BEGIN_SRC emacs-lisp
-(defvar phundrak//eshell-banner--critical-percentage 90)
-(defvar phundrak//eshell-banner--warning-percentage 75)
-(defvar phundrak//eshell-banner--notice-percentage 60)
-
-(defun phundrak//eshell-banner--color-percentage (percentage)
- (cond
- ((> percentage phundrak//eshell-banner--critical-percentage)
- (with-face (format "%2d" percentage) :foreground phundrak-nord11))
- ((> percentage phundrak//eshell-banner--warning-percentage)
- (with-face (format "%2d" percentage) :foreground phundrak-nord12))
- ((> percentage phundrak//eshell-banner--notice-percentage)
- (with-face (format "%2d" percentage) :foreground phundrak-nord13))
- (t
- (with-face (format "%2d" percentage) :foreground phundrak-nord14))))
-#+END_SRC
-
-This function will be used when displaying progress bars. These will be used for
-displaying the Ram, Swap and partitions usage of the system, displaying the used
-part in red and the free part in green. For this, we just need to know the size
-of the progress bar we wish to use as well as how full it should be. Note that
-the percentage should be between 0 and 100.
-#+BEGIN_SRC emacs-lisp
-(defun phundrak//eshell-banner--progress-bar (length percentage)
- (let* ((length-green (if (= 0 percentage)
- 0
- (/ (* length percentage) 100)))
- (length-red (- length length-green)))
- (concat (with-face "[" :weight 'bold)
- (with-face (s-repeat length-green "=")
- :weight 'bold :foreground phundrak-nord14)
- (with-face (s-repeat length-red "=")
- :weight 'bold :foreground phundrak-nord11)
- (with-face "]" :weight 'bold))))
-#+END_SRC
-
-This function will be used in two distinct functions: ~phundrak-eshell-banner~
-which we will see later, and ~phundrak//eshell-banner--display-memory~ which we
-will see now. This function displays information for the two types of memory we
-have, RAM and Swap memory. Here is the definition of this function:
-#+BEGIN_SRC emacs-lisp
-(defun phundrak//eshell-banner--display-memory (type used total text-padding ramp-length)
- (let ((percentage (if (= used 0)
- 0
- (/ (* 100 used) total))))
- (concat (s-pad-right text-padding "." type)
- ": "
- (phundrak//eshell-banner--progress-bar ramp-length
- percentage)
- (format " %6s / %-5s ("
- (file-size-human-readable used)
- (file-size-human-readable total))
- (phundrak//eshell-banner--color-percentage
- percentage)
- "%)\n")))
-#+END_SRC
-
-We now need a function for displaying partitions. As you can see, it will be
-quite similar to the above one:
-#+BEGIN_SRC emacs-lisp
-(defun phundrak//eshell-banner--display-partition (part left-pad ramp-length)
- (concat (s-pad-right left-pad "."
- (with-face (phundrak/mounted-partitions-path part)
- :weight 'bold))
- ": "
- (phundrak//eshell-banner--progress-bar ramp-length
- (phundrak/mounted-partitions-percent part))
- (format " %6s / %-5s (%s%%)"
- (phundrak/mounted-partitions-used part)
- (phundrak/mounted-partitions-size part)
- (phundrak//eshell-banner--color-percentage (phundrak/mounted-partitions-percent part)))))
-#+END_SRC
-
-And we can now build our banner! Here is our function that does exactly that:
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-eshell-banner ()
- (let* ((partitions (phundrak/get-mounted-partitions))
- (os (replace-regexp-in-string
- ".*\"\\(.+\\)\""
- "\\1"
- (car (-filter (lambda (line)
- (s-contains? "PRETTY_NAME" line))
- (s-lines (phundrak-file-to-string "/etc/os-release"))))))
- (memory (-map (lambda (line)
- (s-split " " line t))
- (s-split "\n"
- (shell-command-to-string "free -b | tail -2")
- t)))
- (ram (nth 0 memory))
- (swap (nth 1 memory))
- (ramp-length 41)
- (left-pad (phundrak//eshell-banner--get-left-pad phundrak//eshell-banner--max-length-part partitions))
- (right-pad 8)
- (left-column-width 27))
- (concat (format "%s\n" (s-repeat 79 "="))
- ;; OS and Kernel
- (format "%s: %s%s: %s\n"
- (s-pad-right left-pad "." "OS")
- (s-pad-right left-column-width
- " "
- (with-face (s-trim os)
- :weight 'bold))
- (s-pad-right right-pad "." "Kernel")
- (with-face (concat "Linux " operating-system-release)
- :weight 'bold))
- ;; Hostname and Uptime
- (format "%s: %s%s: %s\n"
- (s-pad-right left-pad "." "Hostname")
- (s-pad-right left-column-width
- " "
- (with-face (system-name) :weight 'bold))
- (s-pad-right right-pad "." "Uptime")
- (with-face (s-chop-prefix "up "
- (s-trim (shell-command-to-string "uptime -p")))
- :weight 'bold))
- ;; RAM ramp
- (phundrak//eshell-banner--display-memory "Ram"
- (string-to-number (nth 2 ram))
- (string-to-number (nth 1 ram))
- left-pad
- ramp-length)
- ;; SWAP ramp
- (phundrak//eshell-banner--display-memory "Swap"
- (string-to-number (nth 2 swap))
- (string-to-number (nth 1 swap))
- left-pad
- ramp-length)
- ;; Partitions
- (mapconcat (lambda (part)
- (phundrak//eshell-banner--display-partition part left-pad ramp-length))
- partitions
- "\n")
- (format "\n%s\n" (s-repeat 79 "=")))))
-#+END_SRC
-
-We now only have to set the result of this function as our Eshell banner. Since
-a simple ~setq~ would only run ~phundrak-eshell-banner~ once when Emacs starts,
-we’ll actually make Emacs set the value of ~eshell-banner-message~ each time it
-is required by Eshell with a hook:
-#+BEGIN_SRC emacs-lisp
-(add-hook 'eshell-banner-load-hook
- (lambda ()
- (setq eshell-banner-message (phundrak-eshell-banner))))
-#+END_SRC
-
-***** Eshell theme and prompt
-As with most shells, again, it is possible to customize the appearance
-of the Eshell prompt. As you can see, my prompt has some Nord colors,
-a shortened path, a git prompt, and an indicator of whether the
-previous command succeeded or failed. Note however that the
-abbreviation of the current path depends on the value of
-~phundrak-prompt--abbreviate~, if it is ~t~ it is abbreviated; otherwise,
-it is kept in full. It can be toggled with a keyboard shortcut, see
-[[file:./spacemacs.md#toggle][Keybinds: Toggle]].
-#+BEGIN_SRC emacs-lisp
-(defun phundrak-eshell-prompt ()
- "Definition of my prompt for Eshell
-It displays a powerline prompt, with first an abbreviated path to
-the current directory. If `phundrak-prompt--abbreviate' is `t',
-then all preceding directories will be abbreviated to one
-character, except hidden directory which first character will be
-preceded by a dot. Otherwise, the full name of the directories is
-displayed.
-
-Then, if the current directory is a git repository or one of its
-subdirectories, it will display the current state of the
-repository. See `phundrak-eshell-git-status'
-
-Finally, a lambda character is displayed, either in blue or in
-red depending on if the last eshell command was a success or a
-failure respectively."
- (let* ((header-bg phundrak-nord0)
- ($path (phundrak-abbr-path (eshell/pwd)))
- ($git-path (phundrak-git-repo-root $path))
- ($abbr-path (phundrak-abbr-path $path phundrak-prompt--abbreviate))
- ($background phundrak-nord1)
- ($foreground phundrak-nord14)
- ($success phundrak-nord10)
- ($error phundrak-nord11))
- (concat (with-face (concat " "
- (phundrak-abbr-path (if $git-path
- $git-path
- $path)
- phundrak-prompt--abbreviate)
- " ")
- :foreground $foreground
- :background $background)
- (when $git-path
- (concat (phundrak-eshell-git-status $path $background)
- (with-face (format "%s "
- (let (($in-git-path (phundrak-abbr-path (f-relative $path $git-path)
- phundrak-prompt--abbreviate)))
- (if (string= "." $in-git-path)
- ""
- (concat " " $in-git-path))))
- :foreground $foreground
- :background $background)))
- (with-face "λ "
- :foreground (if (zerop eshell-last-command-status)
- $success
- $error)
- :background $background)
- (with-face "" :foreground $background)
- " ")))
-#+END_SRC
-
-Now, let’s declare our prompt regexp and our prompt functions:
-#+BEGIN_SRC emacs-lisp
-(setq eshell-prompt-regexp "^[^\n]*λ "
- eshell-prompt-function 'phundrak-eshell-prompt)
-#+END_SRC
-
-I also don't want the banner to be displayed, I know I entered the Elisp shell,
-no need to remind me. Maybe I’ll do something with it one day.
-#+BEGIN_SRC emacs-lisp
-(setq eshell-banner-message "")
-#+END_SRC
-
-Finally, let’s enable some fish-like syntax highlighting:
-#+BEGIN_SRC emacs-lisp
-(eshell-syntax-highlighting-global-mode +1)
-#+END_SRC
-
-****** TODO Fix right column padding :noexport:
-The uptime can get longer than allocated in the banner and be longer than the
-theoretical longest line the banner can be. Execute the ~uptime~ command, find
-out the length of the result and compute the padding based on the maximum length
-between the kernel’s name and the uptime’s length.
-
-****** TODO Add battery level to banner :noexport:
-Add battery level to banner if computer is a laptop, and display if it is
-charging or discharging. See [[https://tecosaur.github.io/emacs-config/config.html#simple-settings][Tecosaur’s config]] for a way to detect if a battery
-is present or not (basically use the function ~battery~).
-
-***** Visual commands
-With Eshell, some commands don’t work very well, especially commands that create
-a TUI. So, let’s declare them as visual commands or subcommands:
-#+BEGIN_SRC emacs-lisp
-(setq eshell-visual-commands
- '("fish" "zsh" "bash" "tmux" "htop" "top" "vim" "bat" "nano")
- eshell-visual-subcommands
- '("git" "log" "l" "diff" "show"))
-#+END_SRC
-
-**** Org-mode
-:PROPERTIES:
-:header-args:emacs-lisp: :tangle no :exports code :results silent
-:END:
-Org-mode is probably one of the best if not the best Emacs feature I have ever
-discovered. It is awesome for writing documents, regardless of the format you
-need it to be exported to, for agenda management, and for literary programming,
-such as with this document.
-#+BEGIN_SRC emacs-lisp
-(with-eval-after-load 'org
- ;; configuration goes here
- )
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp :tangle ~/.emacs.spacemacs/private/user-config.el :exports none :noweb yes
-(with-eval-after-load 'org
- ;; agenda
- <>
- <>
- ;; Babel
- <>
- <>
- <>
- <>
- ;; Beautiful org
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- ;; Capture
- <>
- <>
- ;; Custom functions
- ;;;; Better IDs
- <>
- <>
- <>
- <>
- ;; File export
- <>
- ;;;; Latex
- <>
- <>
- <>
- <>
- <>
- ;;;; HTML
- <>
- <>
- ;; Latex Formats
- <>
- ;; Projects
- <>
- ;; Variables
- ;;;; Behavior
- <>
- <>
- <>
- <>
- <>
- <>
- <>
- ;;;; User information
- <>
- )
-#+END_SRC
-
-***** Agenda
-One awesome feature of Org mode is the agenda. By default, my agendas are stored
-in =~/org/agenda=.
-#+NAME: org-agenda-files
-#+BEGIN_SRC emacs-lisp
-(setq org-agenda-files (list "~/org/agenda" "~/org/notes.org"))
-#+END_SRC
-
-I also have a custom command in Org agenda to mark some tasks as daily tasks
-with the =:DAILY:= tag,:
-#+NAME: org-agenda-custom-commands
-#+BEGIN_SRC emacs-lisp
-(setq org-agenda-custom-commands
- '(("h" "Daily habits"
- ((agenda ""))
- ((org-agenda-show-log t)
- (org-agenda-ndays 7)
- (org-agenda-log-mode-items '(state))
- (org-agenda-skip-function
- '(org-agenda-skip-entry-if 'notregexp
- ":DAILY:"))))
- ("Y" "Yearly events"
- ((agenda ""))
- ((org-agenda-show-log t)
- (org-agenda-ndays 365)
- (org-agenda-log-mode-items '(state))
- (org-agenda-skip-entry-if 'notregexp
- ":YEARLY:")))))
-#+END_SRC
-
-***** Babel
-One of the amazing features of org-mode is its literary programming capacities
-by running code blocks from within Org-mode itself. But for that, only a couple
-of languages are supported directly by Org-mode itself, and they need to be
-activated. Here are the languages I activated in my Org-mode configuration:
-#+NAME: org-babel-languages-table
-| C |
-| dot |
-| emacs-lisp |
-| gnuplot |
-| latex |
-| latex-as-png |
-| makefile |
-| plantuml |
-| python |
-| restclient |
-| sass |
-| scheme |
-| shell |
-
-#+NAME: org-babel-languages-gen
-#+header: :cache yes :results replace
-#+header: :var languages=org-babel-languages-table[,0]
-#+BEGIN_SRC emacs-lisp :exports none
-(format "'(%s)"
- (mapconcat (lambda ($language)
- (format "(%s . t)" $language))
- languages
- "\n "))
-#+END_SRC
-
-#+RESULTS[71d98616bf4f1351ca93aea4972be0ba58057230]: org-babel-languages-gen
-#+begin_example
-'((C . t)
- (dot . t)
- (emacs-lisp . t)
- (gnuplot . t)
- (latex . t)
- (latex-as-png . t)
- (makefile . t)
- (plantuml . t)
- (python . t)
- (restclient . t)
- (sass . t)
- (scheme . t)
- (shell . t))
-#+end_example
-
-The corresponding code is as follows:
-#+NAME: org-babel-load-languages
-#+BEGIN_SRC emacs-lisp :noweb yes
-(org-babel-do-load-languages
- 'org-babel-load-languages
- <>)
-#+END_SRC
-
-Scheme requires a default implementation for geiser:
-#+NAME: org-babel-set-geiser
-#+BEGIN_SRC emacs-lisp
-(setq geiser-default-implementation 'racket)
-#+END_SRC
-
-By the way, I wish to see source code behave the same way in the source blocks
-as in their own major mode. Let’s tell Emacs so:
-#+NAME: org-src-tab-acts-natively
-#+BEGIN_SRC emacs-lisp
-(setq org-src-tab-acts-natively t)
-#+END_SRC
-
-Lastly, I know this can be a terrible idea, but I want Emacs to just evaluate
-Org code blocks without asking me. Of course, this could represent some big
-security issue if not careful enough, but I generaly just open my own org files.
-#+NAME: org-confirm-babel
-#+BEGIN_SRC emacs-lisp
-(setq org-confirm-babel-evaluate nil)
-#+END_SRC
-
-***** Beautify Org-mode
-As I will always say, orgmode is an amazing piece of software that deserves
-particular care and love. That is why I want to give it a unique look and feel
-compared to the rest of my Emacs configuration, in order to make it feel much
-more comfortable. You will find below how my org buffers look like when I open
-one of them.
-
-#+begin_export html
-
-#+end_export
-
-In order to make org-mode even sexier, let’s enable ~variable-pitch-mode~ for
-org-mode so we can get some proportional font. I’ll also remove ~auto-fill-mode~
-which seems to stick to Orgmode like hell and I don’t know why.
-#+NAME: beautiful-org-hooks
-#+BEGIN_SRC emacs-lisp
-(add-hook 'org-mode-hook 'visual-line-mode)
-(remove-hook 'org-mode-hook 'auto-fill-mode)
-(add-hook 'org-mode-hook 'variable-pitch-mode)
-(auto-fill-mode -1)
-#+END_SRC
-
-You can then see the modified faces for org-mode [[file:./spacemacs.md#org-mode][here]].
-
-By default, I would like my org-mode buffers to be indented and tables to be
-aligned.
-#+NAME: beautiful-org-options
-#+BEGIN_SRC emacs-lisp
-(setq org-startup-indented t
- org-startup-align-all-tables t)
-#+END_SRC
-
-****** Fontifying parts of org-mode
-Some blocks of org-mode should have their own face, such as the whole heading
-line, the done headline, the quote and the verse blocks,… actually, let’s enable
-that for all of them.
-#+name: beautiful-org-fontify-blocks
-#+BEGIN_SRC emacs-lisp
-(setq org-pretty-entities t
- org-fontify-whole-heading-line t
- org-fontify-done-headline t
- org-fontify-quote-and-verse-blocks t)
-#+END_SRC
-
-****** Fontifying inline src blocks
-When it comes to source blocks in org-mode, Emacs handle them really well with
-some beautiful syntax highlight thanks to the the languages’ major mode and
-their font-locks. But inline src blocks are the forgotten child and get next to
-no love, which is really sad ; I want it to feel loved, to stand out from the
-crowd and to give me what its brother gives me already!
-
-Enters [[https://tecosaur.github.io/emacs-config/config.html#fontifying-inline-src][Tecosaur’s config]]! With ~org-src-font-lock-fontify-block~, anything’s
-possible! And ~{{{results(...)}}}~ can also have the ~org-block~ face applied to
-match and make org-mode even more beautiful! Let’s do it:
-#+name: beautiful-org-fontify-inline
-#+BEGIN_SRC emacs-lisp
-(defvar org-prettify-inline-results t
- "Whether to use (ab)use prettify-symbols-mode on
-{{{results(...)}}}.")
-
-(defun org-fontify-inline-src-blocks (limit)
- "Try to apply `org-fontify-inline-src-blocks-1'."
- (condition-case nil
- (org-fontify-inline-src-blocks-1 limit)
- (error (message "Org mode fontification error in %S at %d"
- (current-buffer)
- (line-number-at-pos)))))
-
-(defun org-fontify-inline-src-blocks-1 (limit)
- "Fontify inline src_LANG blocks, from `point' up to `LIMIT'."
- (let ((case-fold-search t))
- (when
- ; stolen from `org-element-inline-src-block-parser'
- (re-search-forward "\\_> info caddr (alist-get :file))))
- (unless file-name
- (setq file-name (make-temp-file "babel-lsp-")))
- (setq buffer-file-name file-name)
- (lsp-deferred)))
- (put ',intern-pre 'function-documentation
- (format "Enable lsp-mode in the buffer of org source block (%s)."
- (upcase ,lang)))
- (if (fboundp ',edit-pre)
- (advice-add ',edit-pre :after ',intern-pre)
- (progn
- (defun ,edit-pre (info)
- (,intern-pre info))
- (put ',edit-pre 'function-documentation
- (format "Prepare local buffer environment for org source block (%s)."
- (upcase ,lang))))))))
-(defvar org-babel-lsp-lang-list
- '(<>))
-(dolist (lang org-babel-lsp-lang-list)
- (eval `(lsp-org-babel-enable ,lang)))
-#+END_SRC
-
-Here is one behavior that I really want to see modified: the ability to use
-~M-RET~ without slicing the text the marker is on.
-#+NAME: org-M-RET-may-split-line
-#+BEGIN_SRC emacs-lisp
-(setq org-M-RET-may-split-line nil)
-#+END_SRC
-
-Since Org 9.3, Org no longer attempts to restore the window configuration in the
-frame to which the user returns after editing a source block with
-~org-edit-src-code~. This means with the original value of
-~org-src-window-setup~ (~reorganize-frame~), the current frame will be split in
-two between the original org window and the source window, and once we quit the
-source window only the org window will remain. This is not a desired behavior
-for me, so I chose to set this variable to ~split-window-right~ in order to keep
-my windows organization and have a similar behavior to the old one.
-#+NAME: org-src-window-setup
-#+BEGIN_SRC emacs-lisp
-(setq org-src-window-setup 'split-window-below)
-#+END_SRC
-
-However, it is not rare that I want to change that for an horizontal split,
-which can be achieved with the value ~split-window-below~. Thus, I have made
-this function that allows me to switch between the (default) vertical split and
-the horizontal split.
-#+NAME: org-src-window-toggle
-#+BEGIN_SRC emacs-lisp
-(defun phundrak/toggle-org-src-window-split ()
- "This function allows the user to toggle the behavior of
-`org-edit-src-code'. If the variable `org-src-window-setup' has
-the value `split-window-right', then it will be changed to
-`split-window-below'. Otherwise, it will be set back to
-`split-window-right'"
- (interactive)
- (if (equal org-src-window-setup 'split-window-right)
- (setq org-src-window-setup 'split-window-below)
- (setq org-src-window-setup 'split-window-right))
- (message "Org-src buffers will now split %s"
- (if (equal org-src-window-setup 'split-window-right)
- "vertically"
- "horizontally")))
-#+END_SRC
-
-When creating a link to an Org flie, I want to create an ID only if the link is
-created interactively, and only if there is no custom ID already created.
-#+NAME: org-id-link-to-org
-#+BEGIN_SRC emacs-lisp
-(setq org-id-link-to-org-use-id 'create-if-interactive-and-no-custom-id)
-#+END_SRC
-
-The tag ~:noexport:~ is fine and all, but it doesn’t allow for hidden org
-structures, that is headers that are visible in the org buffer but once the file
-is exported to another format the header disappears but its content stays.
-~ox-extra~ has such a feature through ~ignore-headlines~.
-#+BEGIN_SRC emacs-lisp
-(require 'ox-extra)
-(ox-extras-activate '(ignore-headlines))
-#+END_SRC
-This gives us access to the ~:ignore:~ tag which allows the behavior above
-mentioned.
-
-***** Capture
-:PROPERTIES:
-:header-args:org: :mkdirp yes :padline no
-:END:
-Org-capture is an amazing feature of Org-mode which allows me to quickly save
-links, resources, reminders, and notes in neatly organized org files. Here they
-are described:
-#+NAME: org-capture-target-files
-#+BEGIN_SRC emacs-lisp
-(defvar org-conlanging-file "~/org/conlanging.org")
-(defvar org-default-notes-file "~/org/notes.org")
-(defvar org-journal-file "~/org/journal.org")
-(defvar org-linguistics-notes-file "~/org/linguistics-notes.org")
-(defvar org-novel-notes-file "~/org/novel-notes.org")
-(defvar org-private-agenda-file "~/org/agenda/private.org")
-(defvar org-school-agenda-file "~/org/agenda/school.org")
-(defvar org-wordbuilding-file "~/org/worldbuilding.org")
-#+END_SRC
-
-With Spacemacs, an Org capture can be invoked with the shortcut ~SPC a o c~. It
-will then ask which template I wish to use. In the table below are described the
-shortcuts that are available after ~SPC a o c~ is invoked. The /name/ will be
-the one displayed in Org capture’s interface, the /title/ is the headline where
-to save the capture (if it does not differ from the capture’s name, the cell
-will be blank). The /insertion mode/ tells Emacs how to add the capture to the
-/file/, using which /template/. A line with no insertion mode, file, or template
-is just a category. All of the following insert entries to their org files, that
-is a new org node with a headline and some content.
-#+NAME: org-capture-shortcuts-table
-| Shortcut | Name | Title | Insertion mode | file | template |
-|----------+---------------+-----------+----------------+-------------------------+--------------------------|
-| e | Email | | | | |
-| ew | Write Email | Emails | file+headline | org-default-notes-file | emails.orgcaptmpl |
-| j | Journal | | file+datetree | org-journal-file | journal.orgcaptmpl |
-| l | Link | | | | |
-| ll | General | | file+headline | org-default-notes-file | link.orgcaptmpl |
-| ly | YouTube | | file+headline | org-default-notes-file | youtube.orgcaptmpl |
-| L | Protocol Link | Link | file+headline | org-default-notes-file | protocol-link.orgcaptmpl |
-| n | Notes | | | | |
-| nc | Conlanging | Note | file+headline | org-conlanging-file | notes.orgcaptmpl |
-| nn | General | | file+headline | org-default-notes-file | notes.orgcaptmpl |
-| nN | Novel | Note | file+headline | org-novel-notes-file | notes.orgcaptmpl |
-| nq | Quote | | file+headline | org-default-notes-file | notes-quote.orgcaptmpl |
-| nw | Worldbuilding | Note | file+headline | org-wordbuilding-file | notes.orgcaptmpl |
-| N | Novel | | | | |
-| Ni | Ideas | | file+headline | org-novel-notes-file | notes.orgcaptmpl |
-| p | Protocol | Link | file+headline | org-default-notes-file | protocol.orgcaptmpl |
-| r | Resources | | | | |
-| rc | Conlanging | Resources | file+headline | org-conlanging-file | resource.orgcaptmpl |
-| re | Emacs | | file+headline | org-default-notes-file | resource.orgcaptmpl |
-| ri | Informatique | | file+headline | org-default-notes-file | resource.orgcaptmpl |
-| rl | Linguistics | | file+headline | org-default-notes-file | resource.orgcaptmpl |
-| rL | Linux | | file+headline | org-default-notes-file | resource.orgcaptmpl |
-| rw | Worldbuilding | Resources | file+headline | org-wordbuilding-file | resource.orgcaptmpl |
-| t | Tasks | | | | |
-| tb | Birthday | | file+headline | org-private-agenda-file | birthday.orgcaptmpl |
-| te | Event | | file+headline | org-private-agenda-file | event.orgcaptmpl |
-| th | Health | | file+headline | org-private-agenda-file | health.orgcaptmpl |
-| ti | Informatique | | file+headline | org-private-agenda-file | informatique.orgcaptmpl |
-
-#+NAME: org-capture-shortcut-gen
-#+header: :exports none :cache yes :results replace
-#+BEGIN_SRC emacs-lisp :var table=org-capture-shortcuts-table
-(format "'(%s)"
- (mapconcat (lambda (entry)
- (let* ((shortcut (nth 0 entry))
- (name (nth 1 entry))
- (title (nth 2 entry))
- (insertmode (nth 3 entry))
- (fileinsert (nth 4 entry))
- (sourceorg (nth 5 entry)))
- (if (string= "" insertmode)
- (format "(\"%s\" \"%s\")" shortcut name)
- (concat (format "(\"%s\" \"%s\" entry\n" shortcut name)
- (format " (%s %s%s)\n" insertmode fileinsert
- (if (string= "file+datetree" insertmode) ""
- (format " \"%s\"" (if (string= "" title) name title))))
- (format " (file \"~/org/capture/%s\"))" sourceorg)))) )
- table "\n "))
-#+END_SRC
-
-#+RESULTS[ec10a65e789d0f3d318de419a7c08e1f41dcb65a]: org-capture-shortcut-gen
-#+begin_example
-'(("e" "Email")
- ("ew" "Write Email" entry
- (file+headline org-default-notes-file "Emails")
- (file "~/org/capture/emails.orgcaptmpl"))
- ("j" "Journal" entry
- (file+datetree org-journal-file)
- (file "~/org/capture/journal.orgcaptmpl"))
- ("l" "Link")
- ("ll" "General" entry
- (file+headline org-default-notes-file "General")
- (file "~/org/capture/link.orgcaptmpl"))
- ("ly" "YouTube" entry
- (file+headline org-default-notes-file "YouTube")
- (file "~/org/capture/youtube.orgcaptmpl"))
- ("L" "Protocol Link" entry
- (file+headline org-default-notes-file "Link")
- (file "~/org/capture/protocol-link.orgcaptmpl"))
- ("n" "Notes")
- ("nc" "Conlanging" entry
- (file+headline org-conlanging-file "Note")
- (file "~/org/capture/notes.orgcaptmpl"))
- ("nn" "General" entry
- (file+headline org-default-notes-file "General")
- (file "~/org/capture/notes.orgcaptmpl"))
- ("nN" "Novel" entry
- (file+headline org-novel-notes-file "Note")
- (file "~/org/capture/notes.orgcaptmpl"))
- ("nq" "Quote" entry
- (file+headline org-default-notes-file "Quote")
- (file "~/org/capture/notes-quote.orgcaptmpl"))
- ("nw" "Worldbuilding" entry
- (file+headline org-wordbuilding-file "Note")
- (file "~/org/capture/notes.orgcaptmpl"))
- ("N" "Novel")
- ("Ni" "Ideas" entry
- (file+headline org-novel-notes-file "Ideas")
- (file "~/org/capture/notes.orgcaptmpl"))
- ("p" "Protocol" entry
- (file+headline org-default-notes-file "Link")
- (file "~/org/capture/protocol.orgcaptmpl"))
- ("r" "Resources")
- ("rc" "Conlanging" entry
- (file+headline org-conlanging-file "Resources")
- (file "~/org/capture/resource.orgcaptmpl"))
- ("re" "Emacs" entry
- (file+headline org-default-notes-file "Emacs")
- (file "~/org/capture/resource.orgcaptmpl"))
- ("ri" "Informatique" entry
- (file+headline org-default-notes-file "Informatique")
- (file "~/org/capture/resource.orgcaptmpl"))
- ("rl" "Linguistics" entry
- (file+headline org-default-notes-file "Linguistics")
- (file "~/org/capture/resource.orgcaptmpl"))
- ("rL" "Linux" entry
- (file+headline org-default-notes-file "Linux")
- (file "~/org/capture/resource.orgcaptmpl"))
- ("rw" "Worldbuilding" entry
- (file+headline org-wordbuilding-file "Resources")
- (file "~/org/capture/resource.orgcaptmpl"))
- ("t" "Tasks")
- ("tb" "Birthday" entry
- (file+headline org-private-agenda-file "Birthday")
- (file "~/org/capture/birthday.orgcaptmpl"))
- ("te" "Event" entry
- (file+headline org-private-agenda-file "Event")
- (file "~/org/capture/event.orgcaptmpl"))
- ("th" "Health" entry
- (file+headline org-private-agenda-file "Health")
- (file "~/org/capture/health.orgcaptmpl"))
- ("ti" "Informatique" entry
- (file+headline org-private-agenda-file "Informatique")
- (file "~/org/capture/informatique.orgcaptmpl")))
-#+end_example
-
-Below you can find the equivalent code as described above.
-#+NAME: org-capture-templates
-#+BEGIN_SRC emacs-lisp :noweb yes
-(setq
- org-capture-templates
- <>)
-#+END_SRC
-
-You may notice a capture entry for my journal, and this is due to the fact I do
-not use ~org-journal~ anymore: it was too overpowered for me, and I prefer to
-keep it simple with a single file. And as you can see, and unlike a lot of other
-Emacs configurations, the content of the template is not set in the variable,
-but in external files which can be modified freely as actual Org buffers instead
-of trying to get a proper one with loads of ~\n~ characters and such. All these
-templates are declared below.
-
-My org capture templates are not tangled into my Emacs configuration
-files, but into separate ~.orgcaptmpl~ files stored into =~/org/capture/=.
-You can find these in my repository [[https://labs.phundrak.com/phundrak/dotfiles/src/branch/master/org/capture][here]] or [[https://github.com/Phundrak/dotfiles/tree/master/org/capture][here]].
-
-***** Custom org-mode functions
-We begin with a couple of custom functions that I use in my org-mode files.
-
-****** Custom and unique headings ID
-The first ones are dedicated to provide org-mode headings a fixed and unique ID
-that won’t change over time. This code was taken from
-[[https://writequit.org/articles/emacs-org-mode-generate-ids.html][https://writequit.org/articles/emacs-org-mode-generate-ids.html]]. The first
-function’s job is to create these unique IDs
-#+NAME: org-better-id-new
-#+BEGIN_SRC emacs-lisp
-(defun eos/org-id-new (&optional prefix)
- "Create a new globally unique ID.
-
-An ID consists of two parts separated by a colon:
-- a prefix
-- a unique part that will be created according to
- `org-id-method'.
-
-PREFIX can specify the prefix, the default is given by the
-variable `org-id-prefix'. However, if PREFIX is the symbol
-`none', don't use any prefix even if `org-id-prefix' specifies
-one.
-
-So a typical ID could look like \"Org-4nd91V40HI\"."
- (let* ((prefix (if (eq prefix 'none)
- ""
- (concat (or prefix org-id-prefix)
- "-"))) unique)
- (when (equal prefix "-")
- (setq prefix ""))
- (cond
- ((memq org-id-method
- '(uuidgen uuid))
- (setq unique (org-trim (shell-command-to-string org-id-uuid-program)))
- (unless (org-uuidgen-p unique)
- (setq unique (org-id-uuid))))
- ((eq org-id-method 'org)
- (let* ((etime (org-reverse-string (org-id-time-to-b36)))
- (postfix (when org-id-include-domain
- (progn
- (require 'message)
- (concat "@"
- (message-make-fqdn))))))
- (setq unique (concat etime postfix))))
- (t (error "Invalid `org-id-method'")))
- (concat prefix (car (split-string unique "-")))))
-#+END_SRC
-
-Now, let’s see the function that will be used to get the custom id of a heading
-at point. If the function does not detect any custom ID, then one should be
-created and inserted.
-#+NAME: org-better-id-get
-#+BEGIN_SRC emacs-lisp
-(defun eos/org-custom-id-get (&optional pom create prefix)
- "Get the CUSTOM_ID property of the entry at point-or-marker POM.
-If POM is nil, refer to the entry at point. If the entry does not
-have an CUSTOM_ID, the function returns nil. However, when CREATE
-is non nil, create a CUSTOM_ID if none is present already. PREFIX
-will be passed through to `eos/org-id-new'. In any case, the
-CUSTOM_ID of the entry is returned."
- (interactive)
- (org-with-point-at pom
- (let* ((orgpath (mapconcat #'identity (org-get-outline-path) "-"))
- (heading (replace-regexp-in-string
- "[_-]+$" ""
- (replace-regexp-in-string
- "[-_]+" "-"
- (replace-regexp-in-string
- "[^a-zA-Z0-9-_]" "-"
- (if (string= orgpath "")
- (org-get-heading t t t t)
- (concat orgpath "_" (org-get-heading t t t t)))))))
- (id (org-entry-get nil "CUSTOM_ID")))
- (cond
- ((and id
- (stringp id)
- (string-match "\\S-" id)) id)
- (create (setq id (eos/org-id-new (concat prefix heading)))
- (org-entry-put pom "CUSTOM_ID" id)
- (org-id-add-location id
- (buffer-file-name (buffer-base-buffer)))
- id)))))
-#+END_SRC
-
-Finally, this is the function that gets called on file saves. If the function
-detects ~auto-id:t~ among the org options in the ~#+OPTIONS:~ header, then the
-above function is called.
-#+NAME: org-better-id-add-ids
-#+BEGIN_SRC emacs-lisp
-(defun eos/org-add-ids-to-headlines-in-file ()
- "Add CUSTOM_ID properties to all headlines in the current file
-which do not already have one.
-
-Only adds ids if the `auto-id' option is set to `t' in the file
-somewhere. ie, #+OPTIONS: auto-id:t"
- (interactive)
- (save-excursion
- (widen)
- (goto-char (point-min))
- (when (re-search-forward "^#\\+OPTIONS:.*auto-id:t" (point-max) t)
- (org-map-entries (lambda () (eos/org-custom-id-get (point) 'create))))))
-#+END_SRC
-
-Let’s add a hook to the above function so it is called automatically on save,
-and only in read-write functions.
-#+NAME: org-better-id-hooks
-#+BEGIN_SRC emacs-lisp
-(add-hook 'org-mode-hook
- (lambda ()
- (add-hook 'before-save-hook
- (lambda ()
- (when (and (eq major-mode 'org-mode)
- (eq buffer-read-only nil))
- (eos/org-add-ids-to-headlines-in-file))))))
-#+END_SRC
-
-***** File export
-I want to disable by default behavior of ~^~ and ~_~ for only one character,
-making it compulsory to use instead ~^{}~ and ~_{}~ respectively. This is due to
-my frequent usage of the underscore in my org files as a regular character and
-not a markup one, especially when describing phonetics evolution. So, let’s
-disable it:
-#+NAME: org-use-sub-superscripts
-#+BEGIN_SRC emacs-lisp
-(setq org-use-sub-superscripts (quote {}))
-#+END_SRC
-
-****** LaTeX
-When it comes to exports, I want the LaTeX and PDF exports to be done with
-XeLaTeX only. This implies the modification of the following variable:
-#+NAME: org-latex-compiler
-#+BEGIN_SRC emacs-lisp
-(setq org-latex-compiler "xelatex")
-#+END_SRC
-
-I also want to get by default ~minted~ for LaTeX listings so I can have syntax
-highlights:
-#+NAME: org-latex-listings
-#+BEGIN_SRC emacs-lisp
-(setq org-latex-listings 'minted)
-#+END_SRC
-
-The default packages break my LaTeX exports: for some reasons, images are not
-loaded and exported in PDFs, so I needed to redifine the default packages
-excluding the one that broke my exports. I also added two default packages,
-~minted~ and ~xeCJK~ for syntax highlighting and Japanese (and additionally
-Chinese and Korean) support.
-#+NAME: org-latex-default-packages
-#+BEGIN_SRC emacs-lisp
-(setq org-latex-default-packages-alist '(("" "graphicx" t)
- ("T1" "fontspec" t ("pdflatex"))
- ("" "longtable" nil)
- ("" "wrapfig" nil)
- ("" "rotating" nil)
- ("normalem" "ulem" t)
- ("" "amsmath" t)
- ("" "textcomp" t)
- ("" "amssymb" t)
- ("" "capt-of" nil)
- ("" "minted" nil)
- ("" "hyperref" nil)))
-#+END_SRC
-
-By the way, reference links in LaTeX should be written in this format:
-#+NAME: org-export-latex-hyperref-format
-#+BEGIN_SRC emacs-lisp
-(setq org-export-latex-hyperref-format "\\ref{%s}")
-#+END_SRC
-
-When it comes to the export itself, the latex file needs to be processed several
-times through XeLaTeX in order to get some references right. Don’t forget to
-also run bibtex!
-#+NAME: org-latex-pdf-process
-#+BEGIN_SRC emacs-lisp
-(setq org-latex-pdf-process
- '("xelatex -8bit -shell-escape -interaction nonstopmode -output-directory %o %f"
- "bibtex %b"
- "xelatex -8bit -shell-escape -interaction nonstopmode -output-directory %o %f"
- "xelatex -8bit -shell-escape -interaction nonstopmode -output-directory %o %f"))
-#+END_SRC
-
-****** HTML
-For Reveal.JS exports, I need to set where to find the framework by default:
-#+NAME: org-re-reveal-root
-#+BEGIN_SRC emacs-lisp
-(setq org-re-reveal-root "https://cdn.jsdelivr.net/npm/reveal.js")
-#+END_SRC
-
-On HTML exports, Org-mode tries to include a validation link for the exported
-HTML. Let’s disable that since I never use it.
-#+NAME: org-html-validation
-#+BEGIN_SRC emacs-lisp
-(setq org-html-validation-link nil)
-#+END_SRC
-
-However, something I very often use are metadata information in my HTML files. I
-just want to automate that. Fortunately, [[https://tecosaur.github.io/emacs-config/config.html#extra-header-content,code--3][Tecosaur comes to the rescue]]! First,
-here is our function that will generate all the meta tags in our HTML:
-#+BEGIN_SRC emacs-lisp
-(defun org-html-meta-tags-fancy (info)
- "Use the INFO plist to construct the meta tags, as described in
-`org-html-meta-tags'."
- (message "%s" info)
- (let ((title (org-html-plain-text
- (org-element-interpret-data (plist-get info :title)) info))
- (author (and (plist-get info :with-author)
- (let ((auth (plist-get info :author)))
- ;; Return raw Org syntax.
- (and auth (org-html-plain-text
- (org-element-interpret-data auth) info))))))
- (list
- (when (org-string-nw-p author)
- (list "name" "author" author))
- (when (org-string-nw-p (plist-get info :description))
- (list "name" "description"
- (plist-get info :description)))
- '("name" "generator" "org mode (Emacs)")
- '("name" "theme-color" "#3b4252")
- '("property" "og:type" "article")
- (list "property" "og:title" title)
- (let ((subtitle (org-export-data (plist-get info :subtitle) info)))
- (when (org-string-nw-p subtitle)
- (list "property" "og:description" subtitle)))
- (let ((meta-image (org-export-data (plist-get info :metaimage) info)))
- (when (org-string-nw-p meta-image)
- (list "property" "og:image" meta-image)))
- (let ((meta-image-type (org-export-data (plist-get info :metaimagetype) info)))
- (when (org-string-nw-p meta-image-type)
- (list "property" "og:image:type" meta-image-type)))
- (let ((meta-image-width (org-export-data (plist-get info :metaimagewidth) info)))
- (when (org-string-nw-p meta-image-width)
- (list "property" "og:image:width" meta-image-width)))
- (let ((meta-image-height (org-export-data (plist-get info :metaimageheight) info)))
- (when (org-string-nw-p meta-image-height)
- (list "property" "og:image:height" meta-image-height)))
- (let ((meta-image-alt (org-export-data (plist-get info :metaimagealt) info)))
- (when (org-string-nw-p meta-image-alt)
- (list "property" "og:image:alt" meta-image-alt)))
- (when (org-string-nw-p author)
- (list "property" "og:article:author:first_name" (car (s-split-up-to " " author 2))))
- (when (and (org-string-nw-p author) (s-contains-p " " author))
- (list "property" "og:article:author:last_name" (cadr (s-split-up-to " " author 2))))
- (list "property" "og:article:published_time" (format-time-string "%FT%T%z")))))
-#+END_SRC
-
-This will use some special keywords in our org buffer and insert their content in
-
-Now let’s bind it to when we export our org buffer to HTML:
-#+BEGIN_SRC emacs-lisp
-(unless (functionp #'org-html-meta-tags-default)
- (defalias 'org-html-meta-tags-default #'ignore))
-(setq org-html-meta-tags #'org-html-meta-tags-fancy)
-#+END_SRC
-
-***** LaTeX formats
-I currently have two custom formats for my Org-mode exports: one for general use
-(initialy for my conlanging files, hence its ~conlang~ name), and one for beamer
-exports.
-
-Below is the declaration of the ~conlang~ LaTeX class:
-#+NAME: org-latex-class-conlang
-#+BEGIN_SRC emacs-lisp
-'("conlang"
- "\\documentclass{book}"
- ("\\chapter{%s}" . "\\chapter*{%s}")
- ("\\section{%s}" . "\\section*{%s}")
- ("\\subsection{%s}" . "\\subsection*{%s}")
- ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
-#+END_SRC
-
-And here is the declaration of the ~beamer~ class:
-#+NAME: org-latex-class-beamer
-#+BEGIN_SRC emacs-lisp
-`("beamer"
- ,(concat "\\documentclass[presentation]{beamer}\n"
- "[DEFAULT-PACKAGES]"
- "[PACKAGES]"
- "[EXTRA]\n")
- ("\\section{%s}" . "\\section*{%s}")
- ("\\subsection{%s}" . "\\subsection*{%s}")
- ("\\subsubsection{%s}" . "\\subsubsection*{%s}"))
-#+END_SRC
-
-Both these classes have to be added to ~org-latex-classes~ like so:
-#+NAME: org-latex-classes
-#+BEGIN_SRC emacs-lisp :noweb yes
-(eval-after-load "ox-latex"
- '(progn
- (add-to-list 'org-latex-classes
- <>
- )
- (add-to-list 'org-latex-classes
- <>
- )))
-#+END_SRC
-
-***** Projects
-Another great features of Org-mode is the Org projects that allow the user to
-easily publish a bunch of org files to a remote location. Here is the current
-declaration of my projects, which will be detailed later:
-#+NAME: org-publish-projects
-#+BEGIN_SRC emacs-lisp :noweb yes
-<>
-<>
-(setq org-publish-project-alist
- `(
- <>
- <>
- <>
- <>
- <>
- <>
- <>))
-#+END_SRC
-
-****** Configuration website
-This is my configuration for exporting my dotfiles to my website in a web format
-only. No PDFs or anything, just HTML. Please note that I do not use that often
-anymore, I much prefer the automatic script that I have which deploys through my
-Drone instance my website on git pushes.
-
-And before we get into the actual configuration, I would like to introduce a
-couple of variables. This is a bit more verbose than if I declared everything
-manually, but now I can change all three values at the same time without a
-hasle.
-#+NAME: org-proj-config-setup
-#+BEGIN_SRC emacs-lisp
-(defvar phundrak//projects-config-target
- "/rsync:Tilo:~/www/phundrak.com/config"
- "Points to where exported files for config.phundrak.com should be put")
-(defvar phundrak//projects-config-source
- "~/org/config/"
- "Points to where the sources for config.phundrak.com are")
-(defvar phundrak//projects-config-language
- "en"
- "Language of config.phundrak.com")
-(defvar phundrak//projects-config-recursive
- t
- "Defines whether subdirectories should be parsed for config.phundrak.com")
-#+END_SRC
-
-Now, here is my configuration. In this snippet, my org files located in my
-source directory get exported in the HTML format and published to my target
-directory on my remote server through RSYNC via TRAMP. A sitemap is
-automatically generated, which comes in handy with the online sitemap that is
-available through the navigation bar.
-#+NAME: org-proj-config-html
-#+BEGIN_SRC emacs-lisp
-("config-website-org"
- :base-directory ,phundrak//projects-config-source
- :base-extension "org"
- :publishing-directory ,phundrak//projects-config-target
- :recursive ,phundrak//projects-config-recursive
- :language ,phundrak//projects-config-language
- :publishing-function org-html-publish-to-html
- :headline-levels 5
- :auto-sitemap t
- :auto-preamble t)
-#+END_SRC
-
-We also have the component for all the static files needed to run the website
-(mostly images tbh).
-#+NAME: org-proj-config-static
-#+BEGIN_SRC emacs-lisp
-("config-website-static"
- :base-directory ,phundrak//projects-config-source
- :base-extension "png\\|jpg\\|gif\\|webp\\|svg\\|jpeg\\|ttf\\|woff\\|txt\\|epub\\|md"
- :publishing-directory ,phundrak//projects-config-target
- :recursive ,phundrak//projects-config-recursive
- :language ,phundrak//projects-config-language
- :publishing-function org-publish-attachment)
-#+END_SRC
-
-The project is then defined like so:
-#+NAME: org-proj-config
-#+BEGIN_SRC emacs-lisp
-("config-website"
- :components ("config-website-org"
- "config-website-static"))
-#+END_SRC
-
-****** Linguistics website
-My linguistics website is made out of three projects. As for the previous
-project, let’s declare the common values for these.
-#+NAME: org-proj-lang-setup
-#+BEGIN_SRC emacs-lisp
-(defvar phundrak//projects-conlanging-target
- "/rsync:Tilo:~/www/phundrak.com/langue/"
- "Points to where exported files for langue.phundrak.com should be put")
-(defvar phundrak//projects-conlanging-source
- "~/Documents/conlanging/content/"
- "Points to where the sources for langue.phundrak.com are")
-(defvar phundrak//projects-conlanging-language
- "fr"
- "Language of langue.phundrak.com")
-(defvar phundrak//projects-conlanging-recursive
- t
- "Defines whether subdirectories should be parsed for langue.phundrak.com")
-#+END_SRC
-
-The first component is the one generating the HTML files from the org files.
-#+NAME: org-proj-lang-html
-#+BEGIN_SRC emacs-lisp
-("langue-phundrak-com-org"
- :base-directory ,phundrak//projects-conlanging-source
- :base-extension "org"
- :exclude "\\./\\(CONTRIB\\|README\\|head\\|temp\\|svg-ink\\).*"
- :publishing-directory ,phundrak//projects-conlanging-target
- :recursive ,phundrak//projects-conlanging-recursive
- :language ,phundrak//projects-conlanging-language
- :publishing-function org-html-publish-to-html
- :headline-levels 5
- :auto-sitemap t
- :auto-preamble t)
-#+END_SRC
-
-We also have the component for the LaTeX and PDF part of the website:
-#+NAME: org-proj-lang-pdf
-#+BEGIN_SRC emacs-lisp
-("langue-phundrak-com-pdf"
- :base-directory ,phundrak//projects-conlanging-source
- :base-extension "org"
- :exclude "\\./\\(CONTRIB\\|README\\|index\\|head\\|temp\\|svg-ink\\).*"
- :publishing-directory ,phundrak//projects-conlanging-target
- :recursive ,phundrak//projects-conlanging-recursive
- :language ,phundrak//projects-conlanging-language
- :publishing-function org-latex-publish-to-pdf
- :headline-levels 5
- :auto-preamble t)
-#+END_SRC
-
-And lastly, we have the component for all the static files needed to run the
-website:
-#+NAME: org-proj-lang-static
-#+BEGIN_SRC emacs-lisp
-("langue-phundrak-com-static"
- :base-directory ,phundrak//projects-conlanging-source
- :base-extension "png\\|jpg\\|gif\\|webp\\|svg\\|jpeg\\|ttf\\|woff\\|txt\\|epub"
- :publishing-directory ,phundrak//projects-conlanging-target
- :recursive ,phundrak//projects-conlanging-recursive
- :language ,phundrak//projects-conlanging-language
- :publishing-function org-publish-attachment)
-#+END_SRC
-
-The project is then defined like so:
-#+NAME: org-proj-lang
-#+BEGIN_SRC emacs-lisp
-("langue-phundrak-com"
- :components ("langue-phundrak-com-org"
- "langue-phundrak-com-static"
- "langue-phundrak-com-pdf"))
-#+END_SRC
-
-***** User information
-Some variables about myself need to be set so Org-mode knows what information to
-include in exported files.
-#+NAME: org-user-information
-#+BEGIN_SRC emacs-lisp
-(setq user-full-name "Lucien Cartier-Tilet"
- user-real-login-name "Lucien Cartier-Tilet"
- user-login-name "phundrak"
- user-mail-address "lucien@phundrak.com")
-#+END_SRC
-
-**** Recentf
-~recentf-mode~ allows Emacs to list all recent files it read. It is also used by
-Spacemacs to display a list of recent files so they can be quickly opened by the
-user. Unfortunately, a lot of these files are just noise I don’t care about, but
-fortunately we can ignore files with the variable ~recentf-exclude~. So, I will
-ignore these paths:
-#+name: recentf-ignored-paths
-| =~/.authinfo.gpg= |
-| =~/.mail/= |
-| =~/.emacs.d/= |
-| =~/.emacs.spacemacs/= |
-| =~/.elfeed/index= |
-| =~/Documents/mu4e= |
-| =/tmp/= |
-
-#+name: recentf-ignored-paths-gen
-#+header: :var paths=recentf-ignored-paths
-#+BEGIN_SRC emacs-lisp :tangle no :exports none
-(mapconcat (lambda (path)
- (format "(add-to-list 'recentf-exclude\n (expand-file-name \"%s\"))"
- (replace-regexp-in-string "=" "" (car path))))
- paths
- "\n")
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp :noweb yes
-(with-eval-after-load 'recentf
- <>)
-#+END_SRC
-
-*** Keybindings
-As you will see, I defined a LOT of custom keybindings. All of them are
-Spacemacs keybindings, defined in a way they can be used seamlessly with Evil.
-They almost all begin with ~o~, which is a prefix reserved for user-defined
-keybindings so they won’t conflict with any package. Let’s declare it like so.
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix "o" "custom")
-#+END_SRC
-
-Now, all keybindings that will be defined can be invoked in Normal-mode with the
-~SPC~ key followed by the sequence assigned to each keybinding.
-
-Before some more specialized categories, I have two commands which don’t fit
-into any other category that I sometime use. The first one is a fix for the Bépo
-keybindings which left out a keybind: ~winum-select-window-by-number~ is still
-bound to ~SPC ²~, which is not a key that is available on the bépo layout
-(instead, we use the dead key ~^~ followed by ~2~, or any digits). So instead,
-let’s use the key that is physically in the same place: ~$~.
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix "$" "select window by number")
-(spacemacs/set-leader-keys "$" 'winum-select-window-by-number)
-#+END_SRC
-
-The following, I use it rarely, it can launch an external command from Emacs to
-launch, for instance, my web browser or any other software not related to Emacs.
-It offers a similar interface to [[https://wiki.archlinux.org/index.php/Dmenu][dmenu]] through helm.
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix "or" "external command")
-(spacemacs/set-leader-keys "or" 'helm-run-external-command)
-#+END_SRC
-
-However this one I use often, generally in org or text buffers.
-#+BEGIN_SRC emacs-lisp
-(spacemacs/set-leader-keys "os" 'sort-lines)
-#+END_SRC
-
-**** Applications
-As this is a new category, let’s declare its prefix:
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix "oa" "applications")
-#+END_SRC
-
-Now, let’s also declare the keybindings in this category. ~oac~ will invoke
-Emacs’ calculator, while ~oac~ invokes the calendar, ~oae~ invokes the Eww web
-browser, and ~oaw~ invokes the weather forecast. Lastly, the apostrophe in ~o'~
-will invoke Eshell directly, without any popup window as with ~SPC '~ while
-~oan~ will open a new eshell buffer if another one already exists. ~ov~ will
-also open a vterm terminal.
-#+BEGIN_SRC emacs-lisp
-(spacemacs/set-leader-keys
- "o'" 'eshell-new
- "ov" 'vterm
- "oac" 'calc
- "oaC" 'calendar
- "oae" 'eww
- "oaw" 'wttrin)
-#+END_SRC
-
-***** Image mode
-Viewing images in Emacs is nice, but I want to be able to do more than just view
-them, such as opening them in GIMP. I’ll also declare a couple of keybindings
-that make sense to me.
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix-for-mode 'image-mode "G" "Open in GIMP")
-(spacemacs/declare-prefix-for-mode 'image-mode "o" "Open in external viewer")
-(spacemacs/declare-prefix-for-mode 'image-mode "r" "Rotate clockwise")
-(spacemacs/set-leader-keys-for-major-mode 'image-mode
- "G" (lambda () (interactive) (start-process "" nil "gimp" (buffer-name)))
- "o" (lambda () (interactive) (start-process "" nil "xdg-open" (buffer-name)))
- "r" 'image-rotate)
-#+END_SRC
-
-***** Org tree slide
-Finally, here we have the keybindings for ~org-tree-slide~, a presentation mode
-with orgmode. Since I want the keys to be directly accessible without any prefix
-from Spacemacs, I’ll have to declare them the vanilla way. First we have
-keybindings that will launch the presentation:
-#+BEGIN_SRC emacs-lisp
-(define-key org-mode-map (kbd "") 'org-tree-slide-mode)
-(define-key org-mode-map (kbd "s-") 'org-tree-slide-skip-done-toggle)
-#+END_SRC
-
-Next, we have some additional keybindings that will only be active when in
-~org-tree-slide-mode~. The first one will allow us to exit this mode, while the
-second one will toggle the display of headers marked as ~DONE~. Next, we have
-~F9~ and ~F10~ which are bound to movement in the slide, while ~F11~ changes the
-way the content is displayed. We also set ~org-tree-slide-skip-outline-level~ to
-set the maximum depth we will display as an individual heading during the
-presentation.
-#+BEGIN_SRC emacs-lisp
-(when (require 'org-tree-slide nil t)
- (global-set-key (kbd "") 'org-tree-slide-mode)
- (global-set-key (kbd "S-") 'org-tree-slide-skip-done-toggle)
- (define-key org-tree-slide-mode-map (kbd "")
- 'org-tree-slide-move-previous-tree)
- (define-key org-tree-slide-mode-map (kbd "")
- 'org-tree-slide-move-next-tree)
- (define-key org-tree-slide-mode-map (kbd "")
- 'org-tree-slide-content)
- (setq org-tree-slide-skip-outline-level 4)
- (org-tree-slide-narrowing-control-profile)
- (setq org-tree-slide-skip-done nil))
-#+END_SRC
-
-**** Comments
-Some keybindings are also related to comment editing, in particular using
-outorg. Let’s first declare the dedicated prefix:
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix "oc" "comments")
-#+END_SRC
-
-Now, let’s declare the following keybindings:
-#+BEGIN_SRC emacs-lisp
-(spacemacs/set-leader-keys
- "occ" 'outorg-copy-edits-and-exit
- "oce" 'outorg-edit-as-org
- "oco" 'outline-minor-mode)
-#+END_SRC
-
-~oco~ enables the outline minor mode, which then allows for the edition of
-comments in org buffers with ~oce~ and saving them to the original source file
-with ~occ~.
-
-**** Dired
-A couple of keybindings will be added to Dired. The first one is the opening
-parenthesis which will enable or disable ~dired-hide-details-mode~. On the other
-hand, a closing parenthesis will show git information in the current Dired
-buffer.
-#+BEGIN_SRC emacs-lisp
-(define-key dired-mode-map (kbd "(") 'dired-hide-details-mode)
-(define-key dired-mode-map (kbd ")") 'dired-git-info-mode)
-#+END_SRC
-
-Something I use from time to time is ~S-F1~ for opening dired in my ~$HOME~
-directory. For that, I simply did the following:
-#+BEGIN_SRC emacs-lisp
-(global-set-key (kbd "") (lambda () (interactive) (dired "~/")))
-#+END_SRC
-
-A couple of other useful utilities, sach as opening all marked files, sorting
-files, opening them externally and renaming them, are also bound to a simple key
-press:
-#+BEGIN_SRC emacs-lisp
-(define-key dired-mode-map (kbd "f") 'phundrak-open-marked-files)
-(define-key dired-mode-map (kbd "F") 'xah/open-in-external-app)
-(define-key dired-mode-map (kbd "s") 'xah/dired-sort)
-#+END_SRC
-
-**** Files
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix "of" "open org file")
-(spacemacs/set-leader-keys "of" 'phundrak-find-org-files)
-#+END_SRC
-
-I also have a shortcut for ~helm-locate~ in case I need to find a file that is
-not in these directories. One advantage of this over ~helm-find~ is that it
-doesn’t matter from where I call it, it will find any file on my system that
-matches the query, whereas ~helm-find~ will only search in the current directory
-and its subdirectories. This time, the declaration is much simpler:
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix "oF" "locate file")
-(spacemacs/set-leader-keys "oF" 'helm-locate)
-#+END_SRC
-
-And that’s it! This should list all my org files under these directories and
-give me fuzzy finding for these files. I just need to partially type the name of
-the file I want to open and it should open without any issue.
-
-**** Games
-Just to make it easier to launch it, I’ll declare a shortcut for launching
-tetris (which is built into Emacs).
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix "oat" "tetris")
-(spacemacs/set-leader-keys "oat" 'tetris)
-#+END_SRC
-
-Apparently, no evil keybindings are set for Tetris. Let’s declare them (adapted
-to the bépo layout):
-#+BEGIN_SRC emacs-lisp
-(require 'tetris)
-(define-key tetris-mode-map (kbd "c") 'tetris-move-left)
-(define-key tetris-mode-map (kbd "t") 'tetris-move-down)
-(define-key tetris-mode-map (kbd "s") 'tetris-rotate-prev)
-(define-key tetris-mode-map (kbd "r") 'tetris-move-right)
-#+END_SRC
-
-**** Multiple cursors
-I don’t really like Spacemacs’ layer for MultipleCursors, so I prefer to simply
-install the package and create shortcuts for it myself. Let’s first declare
-category:
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix "om" "multiple-cursors")
-#+END_SRC
-
-Now, let’s declare the shortcuts related to multiple-cursors:
-#+BEGIN_SRC emacs-lisp
-(spacemacs/set-leader-keys
- "ome" 'mc/edit-lines
- "omn" 'mc/mark-next-like-this
- "omp" 'mc/mark-previous-like-this
- "oma" 'mc/mark-all-like-this)
-#+END_SRC
-
-**** Org-mode
-Now, onto some shortcuts related to org-mode. Let’s first declare the category:
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix-for-mode 'org-mode "mo" "custom" "User-defined keybindings")
-(spacemacs/declare-prefix-for-mode 'org-mode "mot" "toggle" "Toggle org elements")
-(spacemacs/declare-prefix-for-mode 'org-mode "moT" "tables")
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-(spacemacs/set-leader-keys-for-major-mode 'org-mode "ob" 'phundrak-blog-publish)
-(spacemacs/declare-prefix-for-mode 'org-mode "ob" "publish blog")
-#+END_SRC
-
-Now, I have a couple of shortcuts I use regularly:
-#+BEGIN_SRC emacs-lisp
-(spacemacs/set-leader-keys-for-major-mode 'org-mode
- "os" 'org-insert-structure-template
- "ots" 'phundrak/toggle-org-src-window-split
- "ott" 'org-sidebar-tree)
-(spacemacs/declare-prefix-for-mode 'org-mode "moS" "insert template")
-(spacemacs/declare-prefix-for-mode 'org-mode "mots" "toggle src split")
-#+END_SRC
-
-~os~ allows me to insert an org structure template defined in
-~org-structure-template-alist~ (see [[file:./spacemacs.md#behavior][org-mode behavior]]), while ~ott~
-displays the outline of the current org file.
-
-~oT~ is the prefix for tree-related operations:
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix-for-mode 'org-mode "moT" "tables")
-#+END_SRC
-
-These shortcuts allow to manipulate the width of the column the cursor is
-currently in, by either shrinking it, expanding it, or toggling its state
-between shrunk or expanded. A prefix for all of these commands has been also
-added in order to make the purpose of the shortcuts clearer.
-#+BEGIN_SRC emacs-lisp
-(spacemacs/set-leader-keys-for-major-mode 'org-mode
- "oTt" 'org-table-toggle-column-width
- "oTe" 'org-table-expand
- "oTs" 'org-table-shrink)
-(spacemacs/declare-prefix-for-mode 'org-mode "moTt" "toggle width")
-(spacemacs/declare-prefix-for-mode 'org-mode "moTe" "expand")
-(spacemacs/declare-prefix-for-mode 'org-mode "moTs" "shrink")
-#+END_SRC
-
-Finaly, I set the following shortcut in order to easily remove ~RESULTS~ blocks
-from org source code blocks:
-#+BEGIN_SRC emacs-lisp
-(spacemacs/set-leader-keys-for-major-mode 'org-mode
- "or" 'org-babel-remove-result-one-or-many)
-(spacemacs/declare-prefix-for-mode 'org-mode "mor" "remove org result")
-#+END_SRC
-
-**** Toggle
-This category allows to toggle some modes and options.
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix "ot" "toggle")
-#+END_SRC
-
-As you can see, I have here four shortcuts for toggling various elements in
-Emacs:
-- ~otb~ :: toggles ~fancy-battery-mode~. This comes in very handy when I am on a
- laptop that is not pluged in or which is charging.
-- ~otd~ :: toggles ~elcord-mode~. This mode is used to create an Emacs rich
- integration in Discord.
-- ~otf~ :: toggles the activation of FlyCheck, Emacs’ spell checker. It is by
- default disabled, and I can turn it on with this shortcut only when needed.
-- ~ots~ :: toggles ~prettify-symbols-mode~. This allows Emacs to replace some
- symbols by some others, like for example by replacing ~lambda~ in Emacs Lisp
- buffers with an actual λ.
-- ~otS~ :: toggles whether or not Eshell should shorten the current path in its
- prompt
-#+BEGIN_SRC emacs-lisp
-(spacemacs/set-leader-keys
- "otb" 'fancy-battery-mode
- "otd" 'elcord-mode
- "otf" 'flycheck-mode
- "ots" 'prettify-symbols-mode
- "otS" 'phundrak-prompt-toggle-abbreviation)
-#+END_SRC
-
-We also have some input methods-related shortcuts in a sub-category: ~oti~. The
-first shortcuts below are used to either toggle between no input method or the
-last one used (~otit~), or choose an input method among the various available
-ones from Emacs (~otis~).
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix "oti" "input methods")
-(spacemacs/set-leader-keys
- "otit" 'toggle-input-method
- "otis" 'set-input-method)
-#+END_SRC
-
-The shortcuts below though allow me to directly switch to one of these three
-known input methods I sometimes or often use, namely Japanese, Tibetan and IPA
-(by typing in X-SAMPA).
-#+BEGIN_SRC emacs-lisp
-(spacemacs/declare-prefix "otij" "Japanese")
-(spacemacs/declare-prefix "otix" "IPA (X-SAMPA)")
-(spacemacs/declare-prefix "otiT" "Tibetan")
-(spacemacs/set-leader-keys
- "otij" (lambda () (interactive) (set-input-method 'japanese))
- "otix" (lambda () (interactive) (set-input-method 'ipa-x-sampa))
- "otiT" (lambda () (interactive) (set-input-method 'tibetan-wylie)))
-#+END_SRC
-
-*** Mu4e
-Mu4e is a frontend for mu, an email analyzer which sits on top of a Maildir
-which gets updated with the ~mbsync~ command from ~isync~. It has a lot of neat
-features, but I guess my favorite ones are:
-1. the search query feature
-2. rendering an HTML email in the browser
-
-**** Setup
-Due to mu sitting on top of a maildir, I need to tell mu4e where said maildir
-is, and point it the trash, archive, and sent folders as well as the refresh
-command and how frequently I want my emails to be refreshed.
-#+BEGIN_SRC emacs-lisp
-(setq mu4e-maildir "~/.mail"
- mu4e-trash-folder "/Trash"
- mu4e-refile-folder "/Archive"
- mu4e-sent-folder "/Sent"
- mu4e-drafts-folder "/Drafts"
- mu4e-get-mail-command "mbsync -a"
- mu4e-update-interval 60)
-#+END_SRC
-
-This source block is an example of the search queries in mu4e, and part of the
-reason why I very much like mu4e: these bookmarks are actually defined by search
-queries, but act as if they were just yet another type of custom inbox you get
-with modern Email client (and often you don’t even get them). All these
-bookmarks can be accessed through a shortcut on the main mu4e buffer, prefixed
-by ~b~. So, for instance, my unread messages are accessed through ~bU~.
-#+BEGIN_SRC emacs-lisp
-(setq mu4e-bookmarks
- `((,(s-join " "
- '("NOT flag:trashed"
- "AND (maildir:/Inbox OR maildir:/Junk)"
- "AND NOT to:CONLANG@LISTSERV.BROWN.EDU"
- "AND NOT to:AUXLANG@LISTSERV.BROWN.EDU"
- "AND NOT to:ateliers-emacs@framalistes.org"
- "AND NOT to:ateliers-paris@emacs-doctor.com"
- "AND NOT list:ateliers-emacs.framalistes.org"
- "AND NOT list:ateliers-paris.emacs-doctor.com"))
- "Inbox" ?i) ;; Inbox without the linguistics mailing lists
- (,(s-join " "
- '("NOT flag:trashed"
- "AND (maildir:/Inbox OR maildir:/Junk)"
- "AND (f:/.*up8\.edu|.*univ-paris8.*/"
- "OR c:/.*up8\.edu|.*univ-paris8.*/"
- "OR t:/.*up8\.edu|.*univ-paris8.*/)"))
- "University" ?u) ;; University-related emails
- (,(s-join " "
- '("to:CONLANG@LISTSERV.BROWN.EDU"
- "OR to:AUXLANG@LISTSERV.BROWN.EDU"))
- "Linguistics" ?l) ;; linguistics mailing lists
- (,(s-join " "
- '("list:ateliers-emacs.framalistes.org"
- "OR to:ateliers-paris@emacs-doctor.com"
- "OR list:ateliers-paris.emacs-doctor.com"))
- "Emacs" ?e) ;; Emacs mailing list
- ("maildir:/Sent" "Sent messages" ?s)
- ("flag:unread AND NOT flag:trashed" "Unread messages" ?U)
- ("date:today..now AND NOT flag:trashed" "Today's messages" ?t)
- ("date:7d..now AND NOT flag:trashed" "Last 7 days" ?w)
- ("date:1m..now AND NOT flag:trashed" "Last month" ?m)
- ("date:1y..now AND NOT flag:trashed" "Last year" ?y)
- ("flag:trashed AND NOT flag:trashed" "Trash" ?T)
- ("mime:image/* AND NOT flag:trashed" "Messages with images" ?p)))
-#+END_SRC
-
-On new email arrival, Emacs can send the system a notification which will be
-handled as any other notification received by the system and will display the
-number of unread emails to the user; in my case, notifications are handled by
-AwesomeWM.
-#+BEGIN_SRC emacs-lisp
-(setq mu4e-enable-notifications t
- mu4e-alert-email-notification-types '(count))
-(with-eval-after-load 'mu4e-alert
- (mu4e-alert-set-default-style 'notifications))
-(add-hook 'mu4e-view-mode-hook 'visual-line-mode)
-#+END_SRC
-
-This is the setup I have for my SMTP mail server: I point Emacs’ SMTP services
-to my private mail server on its SMTP port, which should be used with a STARTTLS
-stream. And I tell Emacs this is the default way to send an email.
-#+BEGIN_SRC emacs-lisp
-(setq smtpmail-smtp-server "mail.phundrak.com"
- smtpmail-smtp-service 587
- smtpmail-stream-type 'starttls
- message-send-mail-function 'smtpmail-send-it)
-#+END_SRC
-
-I wish my emails to be signed by default using PGP/MIME. ~mu4e~ uses ~message~
-for composing new emails, so I simply need to add the function that will add the
-signature to emails to the hook called when creating a new email.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'mu4e-compose-mode-hook 'mml-secure-message-sign-pgpmime)
-#+END_SRC
-
-mu4e used to be able to export emails to PDFs, but unfortunately this
-possibility was discontinued. But we can (sort of) bring it back!
-#+BEGIN_SRC emacs-lisp
-(defun mu4e-action-open-as-pdf (msg)
- "Export and open as PDF a mu4e `MSG'"
- (let* ((date (mu4e-message-field msg :date))
- (infile (mu4e~write-body-to-html msg))
- (outfile (format-time-string "/tmp/%Y-%m-%d%H%M%S.pdf" date)))
- (with-temp-buffer
- (shell-command
- (format "wkhtmltopdf %s %s" infile outfile) t))
- (find-file outfile)))
-
-(add-to-list 'mu4e-view-actions '("PDF view" . mu4e-action-open-as-pdf) t)
-#+END_SRC
-
-Lastly, some emails are better displayed in a browser than in Emacs. My Emacs
-build has the webkit browser enabled, so I’ll add an option to open with it
-emails.
-#+BEGIN_SRC emacs-lisp
-(defun phundrak/mu4e-view-in-browser (msg)
- (xwidget-webkit-browse-url (concat "file://"
- (mu4e~write-body-to-html msg))))
-
-(add-to-list 'mu4e-view-actions
- '("Xwidget Webkit Browser" . phundrak/mu4e-view-in-browser)
- t)
-#+END_SRC
-
-**** Visual Configuration
-The following also allows me to automatically include my signature in my Emails,
-to view images in my Emacs buffers and to show me the address of my contacts and
-not just their names.
-#+BEGIN_SRC emacs-lisp
-(setq mu4e-compose-signature-auto-include t
- mu4e-view-show-images t
- mu4e-view-prefer-html t
- mu4e-view-show-addresses t)
-#+END_SRC
-
-Now this hook is added so I can get a maximal width for the text of my emails, I
-really don’t like it when lines are kilometers long. I would like instead to
-hook ~visual-line-mode~ and ~auto-fill-mode~, but for some reasons Emacs throws
-an error when I add them, So I go with ~visual-fill-column-mode~ instead.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'mu4e-view-mode-hook 'visual-fill-column-mode)
-#+END_SRC
-
-Icons are nice and all, but my current font does not display some of the default
-icons set by mu4e. Due to this, I will define back these icons to the original
-characters defined by mu4e:
-#+BEGIN_SRC emacs-lisp
-(setq mu4e-headers-draft-mark '("D" . "D")
- mu4e-headers-flagged-mark '("F" . "F")
- mu4e-headers-new-mark '("N" . "N")
- mu4e-headers-passed-mark '("P" . "P")
- mu4e-headers-replied-mark '("R" . "R")
- mu4e-headers-seen-mark '("S" . "S")
- mu4e-headers-trashed-mark '("T" . "T")
- mu4e-headers-attach-mark '("a" . "a")
- mu4e-headers-encrypted-mark '("x" . "x")
- mu4e-headers-signed-mark '("s" . "s")
- mu4e-headers-unread-mark '("u" . "u"))
-#+END_SRC
-
-I don’t like the American time format. I really don’t. I prefer much more
-something more standard, like ISO8601 standard. Not exactly ISO8601, but close
-to it. Also, fuck the paywalls imposed by ISO.
-#+BEGIN_SRC emacs-lisp
-(setq mu4e-view-date-format "%Y-%m-%d %R"
- mu4e-headers-date-format "%Y-%m-%d")
-#+END_SRC
-
-**** Misc
-I am unsure yet if this has any effect on mu4e, but this variable should
-discourage mu4e from reading rich text emails and instead open them as plain
-text. However, I do not wish to discourage opening HTML emails since I can open
-them in the browser.
-#+BEGIN_SRC emacs-lisp
-(setq mm-discouraged-alternatives '("text/richtext"))
-#+END_SRC
-
-*** Miscellaneous
-I have a lot of variables that need to be set but don’t fall in any other
-category, so I’ll collect them here.
-
-I have this regexp for detecting paragraphs.
-#+BEGIN_SRC emacs-lisp
-(setq paragraph-start "\f\\|[ \t]*$\\|[ \t]*[-+*] ")
-#+END_SRC
-
-And this variable for Elcord so the main icon displayed in Discord is the icon
-representing the current major-mode. I also don’t want to display the small
-icon, so let’s get rid of that.
-#+BEGIN_SRC emacs-lisp
-(setq elcord-use-major-mode-as-main-icon t
- elcord-show-small-icon nil)
-#+END_SRC
-
-**** Pinentry
-Pinentry should use the ~loopback~ mode when communicating with GnuPG. Let’s set
-it so:
-#+BEGIN_SRC emacs-lisp
-(setq epg-pinentry-mode 'loopback)
-#+END_SRC
-
-**** Wttr.in
-Thanks to the wttrin package, I can get the weather forecast in Emacs for a
-couple of cities. I just need to specify them to Emacs like so:
-#+BEGIN_SRC emacs-lisp
-(setq wttrin-default-cities '("Aubervilliers" "Paris" "Lyon" "Nonières"
- "Saint Agrève"))
-#+END_SRC
-
-However, the package is currently broken (it was last updated in 2017): wttr.in
-now returns by default an HTML page instead of an ASCII result. In order to fix
-it, a ~?A~ must be added at the end of the request in order to get a nice
-output. Also, let’s use the HTTPS protocol while we’re at it.
-#+BEGIN_SRC emacs-lisp
-(defun wttrin-fetch-raw-string (query)
- "Get the weather information based on your QUERY."
- (let ((url-user-agent "curl"))
- (add-to-list 'url-request-extra-headers wttrin-default-accept-language)
- (with-current-buffer
- (url-retrieve-synchronously
- (format "http%s://wttr.in/%s?A"
- (if (gnutls-available-p) "s" "")
- query)
- (lambda (status)
- (switch-to-buffer (current-buffer))))
- (decode-coding-string (buffer-string)
- 'utf-8))))
-#+END_SRC
-
-*** Nov-mode
-~nov-mode~ is the mode used in the Epub reader. Here I will write a little
-function that I will call through a hook each time I’m opening a new EPUB file.
-#+BEGIN_SRC emacs-lisp
-(defun my-nov-font-setup ()
- (face-remap-add-relative 'variable-pitch :family "Charis SIL"
- :size 16
- :height 1.0))
-#+END_SRC
-
-Let’s bind this function to the ~nov-mode~ hook. By the way, we’ll also enable
-the ~visual-line-mode~ here, just in case.
-#+BEGIN_SRC emacs-lisp
-(mapc (lambda (mode)
- (add-hook 'nov-mode-hook mode))
- '('my-nov-font-setup 'visual-line-mode))
-#+END_SRC
-
-Let’s also set the maximum length of the lines in ~nov-mode~:
-#+BEGIN_SRC emacs-lisp
-(setq nov-text-width 80)
-#+END_SRC
-
-*** Programming
-**** LSP
-When it comes to the LSP layer, there are some options which are not enabled by
-default that I want to use, especially some modes I want to take advantage of.
-This is why I enable first the ~lsp-treemacs-sync-mode~ so treemacs is LSP
-aware:
-#+BEGIN_SRC emacs-lisp
-(lsp-treemacs-sync-mode 1)
-#+END_SRC
-
-I also enable some layers related to ~dap~, the Debug Adapter Protocol, which
-works really nicely with LSP. Let’s enable Dap’s modes:
-#+BEGIN_SRC emacs-lisp
-(dap-mode 1)
-(dap-ui-mode 1)
-(dap-tooltip-mode 1)
-#+END_SRC
-
-Finally, I also want the documentation tooltip to show up when the cursor is
-above a documented piece of code or symbol. Let’s enable that too:
-#+BEGIN_SRC emacs-lisp
-(tooltip-mode 1)
-#+END_SRC
-
-**** ASM configuration
-The first thing I will set with my ASM configuration is where the reference PDF
-is located.
-#+BEGIN_SRC emacs-lisp
-(setq x86-lookup-pdf "~/Documents/code/asm/Intelx86/325383-sdm-vol-2abcd.pdf")
-#+END_SRC
-
-I will also modify what the comment character is, from a ~;~ to a ~#~:
-#+BEGIN_SRC emacs-lisp
-(setq asm-comment-char ?\#)
-#+END_SRC
-
-**** C/C++
-As the C/C++ syntax is checked by flycheck, let’s make sure we are using the
-latest standard available, that is C++17 and C17, from Clang.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'c-mode-hook
- (lambda ()
- (setq flycheck-clang-language-standard "c17")))
-(add-hook 'c++-mode-hook
- (lambda ()
- (setq flycheck-clang-language-standard "c++17")))
-#+END_SRC
-
-**** Dart configuration
-For Dart, I mainly declared some custom shortcuts bound to ~dart-mode~ related
-to flutter, so nothing too exciting here. Some prefix are declared in order to
-avoid the shortcuts in helm to show up as just ~custom~.
-#+begin_src emacs-lisp
-(spacemacs/declare-prefix-for-mode 'dart-mode "mo" "user-defined")
-(spacemacs/declare-prefix-for-mode 'dart-mode "mof" "flutter")
-(spacemacs/declare-prefix-for-mode 'dart-mode "mofr" "flutter-run")
-#+end_src
-
-Now, for the shortcuts themselves:
-#+BEGIN_SRC emacs-lisp
-(spacemacs/set-leader-keys-for-major-mode 'dart-mode
- "ofH" 'flutter-hot-restart
- "ofh" 'flutter-hot-reload
- "ofq" 'flutter-quit
- "ofr" (lambda () (interactive) (flutter-run "-v"))
- "ofs" 'flutter-screenshot)
-#+END_SRC
-
-**** Emacs Lisp
-Here will be stored my configuration directly related to Emacs Lisp, including
-some functions or default modes.
-
-***** Enable ~eldoc-mode~ by default
-By default, if some Elisp code is opened, I want to enable ~eldoc-mode~ so I can
-easily get some documentation on the symbols in the source code. This is done
-via the use of hooks.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'prog-mode-hook 'eldoc-mode)
-#+END_SRC
-
-***** ~phundrak/write-to-buffer~
-I was very surprised when I discovered no such function exists in Elisp. This
-function basically writes a string into a buffer, and optionally switches the
-user to the buffer. Here is the code for that function:
-#+BEGIN_SRC elisp :results silent
-(defun write-to-buffer ($input-string $outputbuf &optional $switchbuf)
- "Writes `$input-string' to the specified `output-buffer'. If
-`switch-buffer' is non-nil, the active buffer will switch to the
-output buffer; otherwise, it will take the user back to their
-initial buffer. Works with `$input-string' as a string or a list
-of strings."
- (let ((oldbuf (current-buffer)))
- (switch-to-buffer $outputbuf)
- (cond ((char-or-string-p $input-string) (insert $input-string))
- ((listp $input-string) (dolist (elem $input-string)
- (insert (format "%s\n" elem)))))
- (unless $switchbuf
- (switch-to-buffer oldbuf))))
-#+END_SRC
-
-**** Python
-Emacs throws me an error about the python interpreter, let’s silence it:
-#+BEGIN_SRC emacs-lisp
-(setq python-shell-completion-native-disabled-interpreters '("python"))
-#+END_SRC
-
-**** Rust
-I need to point to racer where the source code of Rust is located so I can get
-some documentation. This is installed with the ~rust-src~ component you can get
-through ~rustup~. To install it, simply run
-#+BEGIN_SRC sh :tangle no :exports code
-rustup component add rust-src
-#+END_SRC
-
-Now, the source code for Rust should be included in your installation. I
-personally prefer to develop with Rust stable, so let’s indicate to Emacs to
-search for documentation in the stable sources:
-#+BEGIN_SRC emacs-lisp
-(setq racer-rust-src-path
- "~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src")
-#+END_SRC
-
-Rust’s default ~cargo check~ command is already very good, however I also enjoy
-getting some more hints while developping, and ~clippy~ does a very good job at
-it. To get clippy, I need to run the following to install it:
-#+BEGIN_SRC sh :tangle no :exports code
-rustup compontent add clippy
-#+END_SRC
-
-And this will get it installed with all of my Rust toolchain, and it will be
-updated with it. Now, let’s indicate LSP that I want to use that instead of
-~check~:
-#+BEGIN_SRC emacs-lisp
-(setq lsp-rust-analyzer-cargo-watch-command "clippy")
-#+END_SRC
-
-Finally, I wish to enable ~electric-pair-mode~ and ~indent-guide-mode~ for Rust
-files, so let’s enable that through the use of a hook:
-#+BEGIN_SRC emacs-lisp :tangle no
-(add-hook 'rust-mode-hook
- '(lambda ()
- (local-set-key (kbd "TAB") #'company-indent-or-complete-common)
- (electric-pair-mode 1)))
-#+END_SRC
-
-**** Scheme
-The Scheme configuration will be very short, I just need to tell Emacs the name
-of the interpreter since it is not the default one:
-#+BEGIN_SRC emacs-lisp
-(setq geiser-chicken-binary "chicken-csi")
-#+END_SRC
-
-*** Projectile
-Projectile is an awesome utility which helps managing projects within Emacs. It
-will automatically detect version controlled directories, and will by default
-assume this is a project I can be working on. However, there are some
-directories that are version controlled that I do not want to see in my list of
-projects, namely all the cached AUR packages from my AUR helper, ~paru~. They
-are all stored in the same parent directory, so let’s ignore that. I will also
-make Emacs ignore all ~node_modules~ directories it could encounter. And for
-some reason, =~/.emacs.spacemacs= is always in my projects list (I now use
-XDG-compliant directories), so let’s also ignore that.
-#+BEGIN_SRC emacs-lisp
-(setq projectile-ignored-projects '("~/.cache/paru" "~/.emacs.spacemacs" "/tmp"))
-(add-to-list 'projectile-globally-ignored-directories "node_modules")
-#+END_SRC
-
-*** Readers
-Thanks to Discord user shanks, I discovered pdf-tools gives us access to a very
-interesting minor mode: ~pdf-view-midnight-minor-mode~. And this is exactly what
-I missed in my Emacs PDF reader from Zathura! I still think Zathura is a
-fantastic tool, but now my PDF reader in Emacs is almost perfect! I just need to
-adjust some colors:
-#+BEGIN_SRC emacs-lisp
-(with-eval-after-load 'pdf-view
- (setq pdf-view-midnight-colors '("#d8dee9" . "#2e3440")))
-#+END_SRC
-
-Let’s also enable dark mode automatically:
-#+BEGIN_SRC emacs-lisp
-(add-hook 'pdf-tools-enabled-hook 'pdf-view-midnight-minor-mode)
-#+END_SRC
-
-And there we go! A beautiful, dark-mode PDF reader inside Emacs! And with
-Spacemacs, I can enable or disable this minor mode anytime with the shortcut
-~, n~.
-
-*** Security
-This paragraph is about making Emacs and GPG as a whole (since Emacs is /always/
-open on my computer) more secure. The first thing I want to make is a function
-that will close any buffer that contains an open ~.gpg~ file –I certainly do not
-want anyone to be able to read such files on my computer if I leave it even for
-a couple of minutes.
-#+BEGIN_SRC emacs-lisp
-(defun phundrak/kill-gpg-buffers ()
- "Kill GPG buffers."
- (interactive)
- (let ((buffers-killed 0))
- (dolist (buffer (buffer-list))
- (with-current-buffer buffer
- (when (string-match ".*\.gpg$" (buffer-name buffer))
- (message "Auto killing .gpg buffer '%s'" (buffer-name buffer))
- (when (buffer-modified-p buffer)
- (save-buffer))
- (kill-buffer buffer)
- (setq buffers-killed (+ buffers-killed 1)))))
- (unless (zerop buffers-killed)
- ;; Kill gpg-agent.
- (shell-command "gpgconf --kill gpg-agent")
- (message "%s .gpg buffers have been autosaved and killed" buffers-killed))))
-#+END_SRC
-
-Notice the ~(shell-command "gpgconf --kill gpg-agent")~ command there: it kills
-~gpg-agent~ which will always respawn each time GPG2 is invoked. That way, I
-know anyone trying to open a GPG file will have to insert my password when
-trying to do so instead of just hoping I entered it not long ago and they won’t
-have to.
-
-But surely, if I only define this function and hope to call it each time I leav
-my computer, surely at one point I will forget to execute it before leaving. I
-can’t trust myself to always call it manually. Which is why I’ll ask Emacs
-itself to call it after it detects a minute of idling. It may become from times
-to times a bit of a pain, but at least I’m now sure I won’t ever have to worry
-about someone reading my GPG files open in Emacs while I’m out for a quick
-break.
-#+BEGIN_SRC emacs-lisp
-(run-with-idle-timer 60 t 'phundrak/kill-gpg-buffers)
-#+END_SRC
-
-*** Snippets
-:PROPERTIES:
-:HEADER-ARGS:snippet: :padline no :mkdirp yes
-:END:
-Yasnippet’s snippets tool is extremely powerful and allows me to write very
-quickly code. For now, we have snippets for two modes. The files you’ll see
-below are exported to ~$HOME/.emacs.spacemacs/private/snippets/~ and to their
-respective mode directory. For instance, my ~caption~ snippet for org-mode will
-be exported to ~$HOME/.emacs.spacemacs/private/snippets/org-mode/caption~.
-
-Be aware that on top of these custom snippets, I also use the package
-[[file:awesome.org::#Autostart-f2cf42fe][yasnippet-snippets]] which provide plenty of already made snippets.
-
-**** Rust snippets
-I have so far two snippets, the first one is actually just a convenience to make
-it easier to type a ~println!~ macro than the default snippet.
-#+BEGIN_SRC snippet :tangle ~/.emacs.spacemacs/private/snippets/rust-mode/println
-# -*- mode: snippet -*-
-# name: println
-# key: pln
-# --
-println!("${1:{}}", $2);
-#+END_SRC
-
-The second one is more interesting: it is used to create a ~new~ method
-for a struct, and it will try to create a function that will assign
-each argument passed to the method to members of the struct. It relies
-on the custom function [[file:./spacemacs.md#phundrak-yas-rust-new-assignments][I wrote here]].
-#+BEGIN_SRC snippet :tangle ~/.emacs.spacemacs/private/snippets/rust-mode/new
-# -*- mode: snippet -*-
-# name: new
-# key: _new
-# --
-fn new(${1:args}) -> Self {
- $0
- Self {
- ${1:$(phundrak-yas-rust-new-assignments yas-text)}
- }
-}
-#+END_SRC
-
-**** Org headers
-The first two snippets are used to add HTML or LaTeX attributes to elements in
-org-mode. The third also has a similar usage, inserting a ~#+CAPTION~ header
-before an element, as well as the fourth which inserts a ~#+NAME~ header.
-#+BEGIN_SRC snippet :tangle ~/.emacs.spacemacs/private/snippets/org-mode/attr_html
-# -*- mode: snippet -*-
-# name: ATTR HTML
-# key: >
-
-<>
-
-<>
-
-(let* ((makeface (string= "yes" makeface))
- (headers (cadr input))
- (faces (mapcar (lambda (face)
- (phundrak-filter (lambda (elem)
- (or (numberp (cadr elem))
- (not (string= ""
- (cadr elem)))))
- (phundrak-zip headers face)))
- (cddr input))))
- (mapconcat (lambda (face)
- (concat
- (format (if makeface "`(%s ((t " "(%s `")
- (cadr (assoc "Name" face)))
- (format "(%s %s %s %s)"
- (if (assoc "additional" face)
- (cadr (assoc "additional" face))
- "")
- (let ((result ""))
- (dolist (property '("inherit" "weight" "height" "foreground"
- "background" "underline")
- result)
- (let ((prop (assoc property face)))
- (when prop
- (setf result (format "%s :%s %s"
- result
- property
- (if (numberp (cadr prop))
- (number-to-string (cadr prop))
- (cadr prop))))))))
- (if (assoc "font" face)
- (format ":font \"%s\""
- (cadr (assoc "font" face)))
- "")
- (if (assoc "family" face)
- (format ":family \"%s\""
- (cadr (assoc "family" face)))
- ""))
- (if makeface
- ")) t)"
- ")")))
- faces
- "\n"))
-#+END_SRC
-
-Sometimes, some visual properties just don’t fit right for me and I need to edit
-them. This is the case for example for org-mode for which I want to have a mix
-of fixed and variable pitches. Below you can see the code that does that for me,
-I’ll get into more detail below this code block.
-#+BEGIN_SRC emacs-lisp :noweb yes
-(let (
- <>
- )
- (custom-theme-set-faces
- 'user
- <>
- <>
- <>
- ))
-#+END_SRC
-
-***** Diff and Magit
-Apparently, diff and Magit faces do not follow the nord theme’s color scheme, so
-let’s redefine their background and sometimes their foreground.
-#+tblname: diff-faces
-| / | |
-| Name | background |
-|----------------------+------------------|
-| ediff-current-diff-A | ,phundrak-nord11 |
-| ediff-current-diff-C | ,phundrak-nord13 |
-| ediff-current-diff-C | ,phundrak-nord14 |
-
-***** Mu4e
-The nord theme is great and all, but for some reason some faces in mu4e aren’t
-displayed properly, such as the ~mu4e-highlight-face~. Let’s fix that!
-#+tblname: mu4e-faces
-| / | | |
-| Name | background | foreground |
-|---------------------+-----------------+-----------------|
-| mu4e-highlight-face | ,phundrak-nord9 | ,phundrak-nord0 |
-
-***** Org-mode
-Fonts will play an important part in this, but so will colors and font size. The
-following code is largely based on the one found [[https://zzamboni.org/post/beautifying-org-mode-in-emacs/][on this blog post]] and [[https://lepisma.xyz/2017/10/28/ricing-org-mode/][this one]].
-First here are some common properties that will be reused in faces below:
-#+tblname: org-common-faces
-| / | | < | | |
-| Name | inherit | font | height | weight |
-|---------+---------+---------------+--------+--------|
-| orgfont | | Charis SIL | 120 | |
-| head | default | | | bold |
-| fixed | | Cascadia Code | 0.8 | |
-
-#+tblname: org-faces
-| / | < | | | | | | | |
-| Name | additional | inherit | foreground | background | height | weight | italic | underline |
-|---------------------------+------------------+-------------------------------+------------------+-----------------+--------+--------+--------+-----------|
-| org-level-1 | ,@orgfont ,@head | | ,phundrak-nord15 | | 1.75 | | t | |
-| org-level-2 | ,@orgfont ,@head | | ,phundrak-nord10 | | 1.5 | | t | |
-| org-level-3 | ,@orgfont ,@head | | ,phundrak-nord9 | | 1.25 | | t | |
-| org-level-4 | ,@orgfont ,@head | | ,phundrak-nord15 | | 1.1 | | t | |
-| org-level-5 | ,@orgfont ,@head | | ,phundrak-nord8 | | | | t | |
-| org-level-6 | ,@orgfont ,@head | | ,phundrak-nord7 | | | | t | |
-| org-level-7 | ,@orgfont ,@head | | ,phundrak-nord15 | | | | t | |
-| org-level-8 | ,@orgfont ,@head | | ,phundrak-nord6 | | | | t | |
-| org-document-title | ,@orgfont ,@head | | ,phundrak-nord11 | | 2.0 | | t | |
-| variable-pitch | ,@orgfont | | | | | | | |
-| org-block | ,@fixed | | | ,phundrak-nord1 | | | | |
-| org-block-begin-line | ,@fixed | | | ,phundrak-nord1 | | | | |
-| org-block-end-line | ,@fixed | | | ,phundrak-nord1 | | | | |
-| org-indent | ,@fixed | | | | | | | |
-| org-formula | ,@fixed | | | | | | | |
-| org-macro | ,@fixed | | | | | | | |
-| org-target | ,@fixed | | | | | | | |
-| org-property-value | ,@fixed | | | | | | | |
-| org-drawer | ,@fixed | | ,phundrak-nord10 | | | | | |
-| org-table | ,@fixed | | ,phundrak-nord14 | | | | | |
-| org-date | ,@fixed | | ,phundrak-nord13 | | | | | |
-| org-code | ,@fixed | shadow | | | | | | |
-| org-verbatim | ,@fixed | shadow | | | | | | |
-| org-document-info-keyword | ,@fixed | shadow | | | | | | |
-| org-tag | ,@fixed | shadow | | | | bold | | |
-| org-meta-line | ,@fixed | font-lock-comment-face | | | 0.8 | | | |
-| org-special-keyword | ,@fixed | font-lock-comment-face | ,phundrak-nord15 | | 0.8 | | | |
-| org-checkbox | ,@fixed | (org-todo shadow fixed-pitch) | | | | | | |
-| org-document-info | | | ,phundrak-nord12 | | | | | |
-| org-link | | | ,phundrak-nord8 | | | | | t |
-
-**** Info colors
-The package ~info-colors~ adds colors to Emacs’ info mode. Let’s enable it:
-#+BEGIN_SRC emacs-lisp
-(add-hook 'Info-selection-hook 'info-colors-fontify-node)
-#+END_SRC
-
-**** Prettified symbols
-Just because it is pleasing to the eye, some symbols in source code get
-prettified into simpler symbols. Here is the list of symbols that are to be
-prettified. You can see in the corresponding comment what symbol will be
-displayed.
-#+BEGIN_SRC emacs-lisp
-(setq prettify-symbols-alist '(("lambda" . 955) ; λ
- ("mapc" . 8614) ; ↦
- ("map" . 8614) ; ↦
- (">>" . 187) ; »
- ("<<" . 171) ; «
- ))
-#+END_SRC
-
-Let’s enable this mode globally.
-#+BEGIN_SRC emacs-lisp
-(global-prettify-symbols-mode 1)
-#+END_SRC
-
-**** Misc
-Emacs is already silent, but let’s set the bell as visible:
-#+BEGIN_SRC emacs-lisp
-(setq visible-bell t)
-#+END_SRC
-
-I would also like to disable the global ~hl-mode~, I find it quite annoying.
-#+BEGIN_SRC emacs-lisp
-(global-hl-line-mode -1)
-#+END_SRC
-
-** Footnotes
-
-[fn:2] [[https://labs.phundrak.com/phundrak/dotfiles/src/branch/master/.spacemacs][labs.phundrak.com/phundrak/dotfiles/src/branch/master/.spacemacs]]
-
-[fn:1] [[https://labs.phundrak.com/phundrak/dotfiles/src/branch/master/org/config/emacs.org][labs.phundrak.com/phundrak/dotfiles/src/branch/master/org/config/emacs.org]]
diff --git a/docs/emacs/keybindings.org b/docs/emacs/keybindings.org
index d642645..b4e7292 100644
--- a/docs/emacs/keybindings.org
+++ b/docs/emacs/keybindings.org
@@ -83,6 +83,7 @@ Undefining some stuff to make keybind prefixes work correctly.
<>
<>
<>
+ <>
<>
<>)
#+end_src
@@ -499,6 +500,26 @@ My toggle keybindings are prefixed by ~t~.
| is | set-input-method | |
*** TODO Rewrite =my/modify-frame-alpha-background/body= :noexport:
+** VCS
+Magit is awesome, but I rarely use it nowadays in favour of [[https://jj-vcs.github.io/][Jujutsu]].
+And for that, I use =vc.el= in Emacs thanks to =vc-jj= (see [[file:./packages/applications.md#Jujutsu][my Jujutsu
+config for Emacs]]). But this is only half the story, let me now set my
+keybinds for =vc.el=. ethey are all prefixed by =v=.
+
+#+name: keybindings-vc
+| Key | Function | Description | Package |
+|-----+-----------------------+-------------+---------|
+| a | vc-annotate | | vc |
+| r | vc-revset | | vc |
+| | | VCS | |
+| j | | jujutsu | |
+| ja | vc-jj-abandon-change | abandon | vc-jj |
+| jb | | bookmarks | |
+| jbd | vc-jj-bookmark-delete | delete | vc-jj |
+| jbr | vc-jj-bookmark-rename | rename | vc-jj |
+| jbs | vc-jj-bookmark-set | set | vc-jj |
+| je | vc-jj-edit-change | edit | vc-jj |
+| jn | vc-jj-new-change | new | vc-jj |
** Windows
A couple of keybindings are hidden from which-key, otherwise there’s not
diff --git a/docs/emacs/packages/applications.org b/docs/emacs/packages/applications.org
index 6b58387..cf95b37 100644
--- a/docs/emacs/packages/applications.org
+++ b/docs/emacs/packages/applications.org
@@ -1530,9 +1530,10 @@ compatible with git repositories. In fact, I pretty much don’t use git
anymore, jj (abbreviation of Jujutsu) has almost completely replaced
git for me.
-I like Magit’s interface, as you can see in my [[file:./applications.md#magit][Magit]] config.
-Therefore, let’s install =majjit=, my slow and scuffed attempt at
-bringing some Magit features to jujutsu.
+I like Magit’s interface, as you can see in my [[file:./applications.md#magit][Magit]] config. But
+reimplementing it entirely probably won’t happen on my end (lack of
+time, mainly), so I’ll leave that up to people more motivated than me.
+In the meantime, I can reimplement some of its API with =majjit=.
#+begin_src emacs-lisp
(use-package majjit
:defer t
@@ -1544,6 +1545,22 @@ bringing some Magit features to jujutsu.
:custom ((majjit-default-directory "~/code/")))
#+end_src
+Speaking of other projects others did better, I use =vc-jj=, which
+brings basic jujutsu support to =project.el= and =vc.el=. And I’ll just
+add my grain of salt to force =project.el= to recognize jujutsu
+repositories as projects.
+#+begin_src emacs-lisp
+(use-package vc-jj
+ :straight (:build t)
+ :after '(project vc)
+ :config
+ (add-to-list 'project-vc-extra-root-markers ".jj")
+ :init
+ (require 'project)
+ (require 'vc)
+ (require 'vc-jj))
+#+end_src
+
Though, I’ll be honest, I generally prefer to use Jujutsu in the
terminal, unlike git. Something I do use Emacs for, however, is
writing my commit messages.
@@ -1556,12 +1573,6 @@ writing my commit messages.
:init (add-to-list 'auto-mode-alist '("\\.jjdescription\\'" . jjdescription-mode)))
#+end_src
-And I want Emacs to know that any directory which has a =.jj= repository
-is the root of a project.
-#+begin_src emacs-lisp
-;;(add-to-list 'project-vc-extra-root-markers ".jj")
-#+end_src
-
*** Forge
Forge acts as an interface for GitHub, GitLab, and Bitbucket inside
Magit. A lot of possibilities are present, you can read issues and
diff --git a/docs/emacs/packages/exwm.org b/docs/emacs/packages/exwm.org
index d597902..c1232a4 100644
--- a/docs/emacs/packages/exwm.org
+++ b/docs/emacs/packages/exwm.org
@@ -1,7 +1,7 @@
#+title: Emacs — Packages — EXWM (Deprecated)
#+setupfile: ../../headers
#+property: header-args:emacs-lisp :mkdirp yes :lexical t :exports code
-#+property: header-args:emacs-lisp+ :tangle ~/.config/emacs/lisp/exwm.el
+#+property: header-args:emacs-lisp+ :tangle no
#+property: header-args:emacs-lisp+ :mkdirp yes :noweb no-export
* EXWM (Deprecated)
@@ -47,7 +47,7 @@ easily.
In order to launch Emacs with EXWM with ~startx~, I need a ~xinit~ file.
This one is exported to ~$HOME/.xinitrc.emacs~.
-#+begin_src sh :tangle ~/.xinitrc.emacs :shebang "#!/bin/sh"
+#+begin_src sh :tangle no :shebang "#!/bin/sh"
xhost +SI:localuser:$USER
# Set fallback cursor
diff --git a/docs/emacs/packages/programming.org b/docs/emacs/packages/programming.org
index 501ed7b..3954671 100644
--- a/docs/emacs/packages/programming.org
+++ b/docs/emacs/packages/programming.org
@@ -455,6 +455,10 @@ Yes, I love org-mode and I largely prefer to use it instead of
Markdown due to its far superior power and abilities. But still,
sometimes I need to use Markdown because not everyone uses org-mode,
unfortunately.
+
+I prefer to use =pandoc= to =markdown= as my =markdown-command=, as it
+better handles modern Markdown, including Github’s dialect, which
+=markdown= has troubles with.
#+begin_src emacs-lisp
(use-package markdown-mode
:defer t
@@ -465,6 +469,9 @@ unfortunately.
("\\.mdx\\'" . markdown-mode))
:hook (markdown-mode . orgtbl-mode)
:hook (markdown-mode . visual-line-mode)
+ :config
+ (setq markdown-fontify-code-blocks-natively t
+ markdown-command '("," "pandoc" "--from=markdown" "--to=html5"))
:general
(phundrak/evil
:keymaps 'markdown-mode-map
@@ -550,9 +557,7 @@ unfortunately.
"xp" #'markdown-insert-pre
"xP" #'markdown-pre-region
"xs" #'markdown-insert-strike-through
- "xq" #'markdown-blockquote-region)
- :config
- (setq markdown-fontify-code-blocks-natively t))
+ "xq" #'markdown-blockquote-region))
#+end_src
Since most of my Markdown files are related to GitHub, I’d like to be
@@ -704,6 +709,28 @@ When editing some scripts though, I need to use the built-in ~shell-mode~.
:mode "/\\(Cargo.lock\\|\\.cargo/config\\)\\'")
#+end_src
+*** Typst
+[[https://typst.app/][Typst]] is an attempt at making a simpler LaTeX alternative with a quite
+simple language that still has some programming capabilities. In my
+case, I use [[https://codeberg.org/meow_king/typst-ts-mode/][typst-ts-mode]] to get a major mode for Typst, relying on
+[[https://github.com/uben0/tree-sitter-typst][uben0’s Typst treesitter module]].
+
+#+begin_src emacs-lisp
+(use-package typst-ts-mode
+ :defer t
+ :straight (:build t))
+#+end_src
+
+I also wrote a package that extends =lsp-mode= to support [[https://github.com/Myriad-Dreamin/tinymist][tinymist]] as an
+LSP server for Typst.
+#+begin_src emacs-lisp
+(use-package lsp-typst
+ :after lsp-mode
+ :mode "\\.typ\\'"
+ :hook (typst-ts-mode . lsp-deferred)
+ :straight (:build t :type git :repo "labs.phundrak.com/phundrak/lsp-typst"))
+#+end_src
+
*** Yaml
#+begin_src emacs-lisp
(use-package yaml-mode
diff --git a/docs/README.org b/docs/index.org
similarity index 78%
rename from docs/README.org
rename to docs/index.org
index 76bbe37..d4b086a 100644
--- a/docs/README.org
+++ b/docs/index.org
@@ -6,6 +6,13 @@ Hi, I’m P’undrak (pronounced /PUN-drak/, or more exactly {{{phon(pʰynɖak̚
also known as Lucien Cartier-Tilet. If you want to know more about me,
you can head to my [[https://phundrak.com/en][main website]].
+#+html: ::: warning
+This website is currently not maintained, aside from the Emacs part of
+it. If you want to see my current Linux configuration, head over to my
+[[https://labs.phundrak.com/phundrak/nix-config][NixOS configuration]]. This website will be, at some point, rewritten to
+reflect it.
+#+html: :::
+
This website is my collection of dotfiles for my daily GNU/Linux
environment, tweaked to my liking. The sidebar will act as an index of
the various tools I use and their configuration.
diff --git a/docs/img/emacs/emacs-eshell.svg b/docs/public/img/emacs/emacs-eshell.svg
similarity index 100%
rename from docs/img/emacs/emacs-eshell.svg
rename to docs/public/img/emacs/emacs-eshell.svg
diff --git a/docs/img/emacs/emacs.png b/docs/public/img/emacs/emacs.png
similarity index 100%
rename from docs/img/emacs/emacs.png
rename to docs/public/img/emacs/emacs.png
diff --git a/docs/img/emacs/emacs.svg b/docs/public/img/emacs/emacs.svg
similarity index 100%
rename from docs/img/emacs/emacs.svg
rename to docs/public/img/emacs/emacs.svg
diff --git a/docs/img/emacs/eshell.svg b/docs/public/img/emacs/eshell.svg
similarity index 100%
rename from docs/img/emacs/eshell.svg
rename to docs/public/img/emacs/eshell.svg
diff --git a/docs/img/emacs/org-mode.svg b/docs/public/img/emacs/org-mode.svg
similarity index 100%
rename from docs/img/emacs/org-mode.svg
rename to docs/public/img/emacs/org-mode.svg
diff --git a/docs/img/emacs/real_programmers.png b/docs/public/img/emacs/real_programmers.png
similarity index 100%
rename from docs/img/emacs/real_programmers.png
rename to docs/public/img/emacs/real_programmers.png
diff --git a/docs/img/git/diff-default.png b/docs/public/img/git/diff-default.png
similarity index 100%
rename from docs/img/git/diff-default.png
rename to docs/public/img/git/diff-default.png
diff --git a/docs/img/git/diff-histogram.png b/docs/public/img/git/diff-histogram.png
similarity index 100%
rename from docs/img/git/diff-histogram.png
rename to docs/public/img/git/diff-histogram.png
diff --git a/docs/img/git/diff-moved.png b/docs/public/img/git/diff-moved.png
similarity index 100%
rename from docs/img/git/diff-moved.png
rename to docs/public/img/git/diff-moved.png
diff --git a/docs/img/git/merge-default.png b/docs/public/img/git/merge-default.png
similarity index 100%
rename from docs/img/git/merge-default.png
rename to docs/public/img/git/merge-default.png
diff --git a/docs/img/git/merge-zdiff3.png b/docs/public/img/git/merge-zdiff3.png
similarity index 100%
rename from docs/img/git/merge-zdiff3.png
rename to docs/public/img/git/merge-zdiff3.png
diff --git a/docs/img/icon.png b/docs/public/img/icon.png
similarity index 100%
rename from docs/img/icon.png
rename to docs/public/img/icon.png
diff --git a/docs/img/icon.webp b/docs/public/img/icon.webp
similarity index 100%
rename from docs/img/icon.webp
rename to docs/public/img/icon.webp
diff --git a/docs/img/stumpwm.png b/docs/public/img/stumpwm.png
similarity index 100%
rename from docs/img/stumpwm.png
rename to docs/public/img/stumpwm.png
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index a36ab4c..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,5337 +0,0 @@
-{
- "name": "config.phundrak.com",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "config.phundrak.com",
- "version": "1.0.0",
- "license": "AGPL-3.0",
- "dependencies": {
- "less": "^4.4.2",
- "nord": "^0.2.1"
- },
- "devDependencies": {
- "@vuepress/bundler-vite": "2.0.0-rc.26",
- "@vuepress/plugin-slimsearch": "^2.0.0-rc.118",
- "@vuepress/plugin-umami-analytics": "2.0.0-rc.118",
- "@vuepress/theme-default": "2.0.0-rc.118",
- "baseline-browser-mapping": "^2.10.0",
- "sass-embedded": "^1.97.3",
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
- "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
- "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
- "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.28.5"
- },
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
- "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@bufbuild/protobuf": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.11.0.tgz",
- "integrity": "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==",
- "dev": true,
- "license": "(Apache-2.0 AND BSD-3-Clause)"
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
- "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
- "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
- "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
- "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
- "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
- "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
- "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
- "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
- "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
- "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
- "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
- "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
- "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
- "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
- "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
- "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
- "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
- "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
- "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
- "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
- "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openharmony-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
- "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
- "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
- "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
- "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
- "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
- "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@mdit-vue/plugin-component": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-component/-/plugin-component-3.0.2.tgz",
- "integrity": "sha512-Fu53MajrZMOAjOIPGMTdTXgHLgGU9KwTqKtYc6WNYtFZNKw04euSfJ/zFg8eBY/2MlciVngkF7Gyc2IL7e8Bsw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/markdown-it": "^14.1.2",
- "markdown-it": "^14.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@mdit-vue/plugin-frontmatter": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-3.0.2.tgz",
- "integrity": "sha512-QKKgIva31YtqHgSAz7S7hRcL7cHXiqdog4wxTfxeQCHo+9IP4Oi5/r1Y5E93nTPccpadDWzAwr3A0F+kAEnsVQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@mdit-vue/types": "3.0.2",
- "@types/markdown-it": "^14.1.2",
- "gray-matter": "^4.0.3",
- "markdown-it": "^14.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@mdit-vue/plugin-headers": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-headers/-/plugin-headers-3.0.2.tgz",
- "integrity": "sha512-Z3PpDdwBTO5jlW2r617tQibkwtCc5unTnj/Ew1SCxTQaXjtKgwP9WngdSN+xxriISHoNOYzwpoUw/1CW8ntibA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@mdit-vue/shared": "3.0.2",
- "@mdit-vue/types": "3.0.2",
- "@types/markdown-it": "^14.1.2",
- "markdown-it": "^14.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@mdit-vue/plugin-sfc": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-sfc/-/plugin-sfc-3.0.2.tgz",
- "integrity": "sha512-dhxIrCGu5Nd4Cgo9JJHLjdNy2lMEv+LpimetBHDSeEEJxJBC4TPN0Cljn+3/nV1uJdGyw33UZA86PGdgt1LsoA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@mdit-vue/types": "3.0.2",
- "@types/markdown-it": "^14.1.2",
- "markdown-it": "^14.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@mdit-vue/plugin-title": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-title/-/plugin-title-3.0.2.tgz",
- "integrity": "sha512-KTDP7s68eKTwy4iYp5UauQuVJf+tDMdJZMO6K4feWYS8TX95ItmcxyX7RprfBWLTUwNXBYOifsL6CkIGlWcNjA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@mdit-vue/shared": "3.0.2",
- "@mdit-vue/types": "3.0.2",
- "@types/markdown-it": "^14.1.2",
- "markdown-it": "^14.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@mdit-vue/plugin-toc": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-toc/-/plugin-toc-3.0.2.tgz",
- "integrity": "sha512-Dz0dURjD5wR4nBxFMiqb0BTGRAOkCE60byIemqLqnkF6ORKKJ8h5aLF5J5ssbLO87hwu81IikHiaXvqoiEneoQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@mdit-vue/shared": "3.0.2",
- "@mdit-vue/types": "3.0.2",
- "@types/markdown-it": "^14.1.2",
- "markdown-it": "^14.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@mdit-vue/shared": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@mdit-vue/shared/-/shared-3.0.2.tgz",
- "integrity": "sha512-anFGls154h0iVzUt5O43EaqYvPwzfUxQ34QpNQsUQML7pbEJMhcgkRNvYw9hZBspab+/TP45agdPw5joh6/BBA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@mdit-vue/types": "3.0.2",
- "@types/markdown-it": "^14.1.2",
- "markdown-it": "^14.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@mdit-vue/types": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-3.0.2.tgz",
- "integrity": "sha512-00aAZ0F0NLik6I6Yba2emGbHLxv+QYrPH00qQ5dFKXlAo1Ll2RHDXwY7nN2WAfrx2pP+WrvSRFTGFCNGdzBDHw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@mdit/helper": {
- "version": "0.22.1",
- "resolved": "https://registry.npmjs.org/@mdit/helper/-/helper-0.22.1.tgz",
- "integrity": "sha512-lDpajcdAk84aYCNAM/Mi3djw38DJq7ocLw5VOSMu/u2YKX3/OD37a6Qb59in8Uyp4SiAbQoSHa8px6hgHEpB5g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/markdown-it": "^14.1.2"
- },
- "engines": {
- "node": ">= 18"
- },
- "peerDependencies": {
- "markdown-it": "^14.1.0"
- },
- "peerDependenciesMeta": {
- "markdown-it": {
- "optional": true
- }
- }
- },
- "node_modules/@mdit/plugin-alert": {
- "version": "0.22.3",
- "resolved": "https://registry.npmjs.org/@mdit/plugin-alert/-/plugin-alert-0.22.3.tgz",
- "integrity": "sha512-9g99rjLCFd8upA/DXbhGmEM7GMFocy6SRk4OekxuAy9t1aDOE/r5IJgUbBIvc9kMkg39ug0yXtMkKwAt2zp5Hg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/markdown-it": "^14.1.2"
- },
- "peerDependencies": {
- "markdown-it": "^14.1.0"
- },
- "peerDependenciesMeta": {
- "markdown-it": {
- "optional": true
- }
- }
- },
- "node_modules/@mdit/plugin-container": {
- "version": "0.22.2",
- "resolved": "https://registry.npmjs.org/@mdit/plugin-container/-/plugin-container-0.22.2.tgz",
- "integrity": "sha512-QBBti5EyQzVl/qzFAD9YAhiAB9S2zF/4MPAS4kwm7VkmeYrcj2HpZpA7snMjnWh3CtriDcaIMInhg0vDtDwyfA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/markdown-it": "^14.1.2"
- },
- "engines": {
- "node": ">= 18"
- },
- "peerDependencies": {
- "markdown-it": "^14.1.0"
- },
- "peerDependenciesMeta": {
- "markdown-it": {
- "optional": true
- }
- }
- },
- "node_modules/@mdit/plugin-tab": {
- "version": "0.22.3",
- "resolved": "https://registry.npmjs.org/@mdit/plugin-tab/-/plugin-tab-0.22.3.tgz",
- "integrity": "sha512-TPMHgVEsqvsCPVwt1KZGhJsVW/6XNyp9VXy2X2nNXvaklfK2+l6DJBWLeN+lPwzXvASnE5CkEFvaY4627zDt9A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@mdit/helper": "0.22.1",
- "@types/markdown-it": "^14.1.2"
- },
- "peerDependencies": {
- "markdown-it": "^14.1.0"
- },
- "peerDependenciesMeta": {
- "markdown-it": {
- "optional": true
- }
- }
- },
- "node_modules/@parcel/watcher": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz",
- "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "detect-libc": "^2.0.3",
- "is-glob": "^4.0.3",
- "node-addon-api": "^7.0.0",
- "picomatch": "^4.0.3"
- },
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "optionalDependencies": {
- "@parcel/watcher-android-arm64": "2.5.6",
- "@parcel/watcher-darwin-arm64": "2.5.6",
- "@parcel/watcher-darwin-x64": "2.5.6",
- "@parcel/watcher-freebsd-x64": "2.5.6",
- "@parcel/watcher-linux-arm-glibc": "2.5.6",
- "@parcel/watcher-linux-arm-musl": "2.5.6",
- "@parcel/watcher-linux-arm64-glibc": "2.5.6",
- "@parcel/watcher-linux-arm64-musl": "2.5.6",
- "@parcel/watcher-linux-x64-glibc": "2.5.6",
- "@parcel/watcher-linux-x64-musl": "2.5.6",
- "@parcel/watcher-win32-arm64": "2.5.6",
- "@parcel/watcher-win32-ia32": "2.5.6",
- "@parcel/watcher-win32-x64": "2.5.6"
- }
- },
- "node_modules/@parcel/watcher-android-arm64": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz",
- "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-arm64": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz",
- "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-darwin-x64": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz",
- "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-freebsd-x64": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz",
- "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-glibc": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz",
- "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "libc": [
- "glibc"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm-musl": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz",
- "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "libc": [
- "musl"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-glibc": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz",
- "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "libc": [
- "glibc"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-arm64-musl": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz",
- "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "libc": [
- "musl"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-x64-glibc": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz",
- "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "libc": [
- "glibc"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-linux-x64-musl": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz",
- "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "libc": [
- "musl"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-arm64": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz",
- "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-ia32": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz",
- "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/watcher-win32-x64": {
- "version": "2.5.6",
- "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz",
- "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@rolldown/pluginutils": {
- "version": "1.0.0-beta.50",
- "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.50.tgz",
- "integrity": "sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.0.tgz",
- "integrity": "sha512-IPIQ55ythEHkfEd9jMEi32OQ7SxURsGA43JI22lj01OLZNt2NUbJX8YUHxkVWyQ6daHPNn0truF5nSj3DQp6YQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-android-arm64": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.0.tgz",
- "integrity": "sha512-M6s9cr10MibETyo8JsOkq+Lo1+lU6hcvb1MApnUql5qte/5hMEgzlN8/ReIKNfRV8rrqX50W1BX9zoUhC192RA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.0.tgz",
- "integrity": "sha512-BqCoMoIbn0keKys+dEAdBa70EtOwV1bEsQCUgU9FdiZmmMge/Zk7LlkYGqbrdHR+Frnt0E1FOanly+rlwvvQzw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.0.tgz",
- "integrity": "sha512-SIMzST3VFNXDAbeIWDWiFCNM5qncUBDWaEV7NfE7oZbDt2mgfW4MvbKdbYiGOLoM32gbTv608UMd0XktEYSD7w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-arm64": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.0.tgz",
- "integrity": "sha512-ezjfSQMP7ArdUsbBwbQIfwAlhE84I2iVnzQNCFSveqV42q+BmKlzVpf7mxv5EchLcoWU4y6/heFzVg1F+hodUQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-freebsd-x64": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.0.tgz",
- "integrity": "sha512-9+qTWGW9AZRhnUgwtTwzNwcPlL87ngkeN0LA+q1bADvmY9aNvWaF2TFW8BZgnQPYxpDI7+rMVLivcd4V737TAQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.0.tgz",
- "integrity": "sha512-T1dMEQhXA/jkJ/jyMIw9IovK8bSUq7A8kLIlvZTb/6YIVsp2zLavr4F3oyllHWo7eIVJRyE5n3tUjQJEbE1IuQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "libc": [
- "glibc"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.0.tgz",
- "integrity": "sha512-2as0LgT7qQpyceQq6VUJYnumUMUrgGQCWIiDIN9DE0/tglsk6o66uCB4f3djRawAltvfCNLyZZrsqbPA6inCsA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "libc": [
- "musl"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.0.tgz",
- "integrity": "sha512-bVURMg+6eNN9C/yc0aVjooZcwTTtYF4YW3xta5pP0//r3o1V8gXEHXWCndj47w/HhwsFroZrFhR+6uQP5T0n0g==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "libc": [
- "glibc"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.0.tgz",
- "integrity": "sha512-Ful8pM/2yYI83PViWdFdpZhdI8HJ5qsXANe5atypbHDf+KIBBDsZsbyy8hbXnULVvW9NsTh5DHwbcBftyLTfiw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "libc": [
- "musl"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loong64-gnu": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.0.tgz",
- "integrity": "sha512-9Gp/DgrkzfUBmNPVTyPTvay+4xEP7M/clXpj3efXBcm6uTIVIgDg4rqUpqKXvLEuFRVuEpSAOkhgNeecvaZ4Cg==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "libc": [
- "glibc"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-loong64-musl": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.0.tgz",
- "integrity": "sha512-m9tsJz54LUXkSYM8+8PG81B9IKK5r+2T0clMq4QrS16xFosufU7firBDAZEsDheDs7wTlP7h3++S7lMsU955HA==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "libc": [
- "musl"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-ppc64-gnu": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.0.tgz",
- "integrity": "sha512-3UvJ5PNVU16aJf6M3tFI24pWzAl2/ynfbyRN3ICyQajK1lSkrnVYNnLz3v04J32qKa0FczJc22zeToc0lr2A3w==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "libc": [
- "glibc"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-ppc64-musl": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.0.tgz",
- "integrity": "sha512-vRWUAbYLGHBZS6Q8Msb2sfnf1fvJf+47t8l/TwOerM2qArzy+IeNMTHrYLHXh95h8MoatPHI5hhSZNs+mGXKPg==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "libc": [
- "musl"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.0.tgz",
- "integrity": "sha512-c00T5SYENHAt86cfW47URaP3Us5vLC/4QO7GYud1G5VNRffCwwCuBspwqYrriuJB+5m0WFzClCn9wed0FBjKvg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "libc": [
- "glibc"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-riscv64-musl": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.0.tgz",
- "integrity": "sha512-krrCDilhXOwFkSkO3Wm9I/f9H0L92XHHwy2fwxjukxIbh0dem8gZqOW5Y8BsHrpJv5qwlRBV+Wl4ZFyRWhUpwg==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "libc": [
- "musl"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.0.tgz",
- "integrity": "sha512-7pfYFSTc4/rUC/FtAI0Qp6QthDBCIi6/AuP1xYqFk5vanI6KnL5dWKP60OM/05LOsbwTmIcvr6eXC4CJuJ75IA==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "libc": [
- "glibc"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.0.tgz",
- "integrity": "sha512-7SDIalKeIpG0Ifogbbdn58HmSotYMlf23K3dCJEmiVd9Fg36Vmni82iPQec27N3wY4Bvbxftkxz6vSx9OcouTg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "libc": [
- "glibc"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.0.tgz",
- "integrity": "sha512-eRZevouTH2i1HeAVLqJuLnt256krQkGY0TN6WsTmsIhuzbh457HuWDMakKwmi0Cjadux983CoSr8Lim2QhUIFw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "libc": [
- "musl"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@rollup/rollup-openbsd-x64": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.0.tgz",
- "integrity": "sha512-3oVS7FLGa4U1qcvao9ylGxrjXZyUQqR8UwxEcnUEyPX53O/C/mKDZegNXTdHCP+h3e6ta/f1EN38Yif1mmZHYg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ]
- },
- "node_modules/@rollup/rollup-openharmony-arm64": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.0.tgz",
- "integrity": "sha512-yTB9TgfWj5wHe5QgktAgXTLLot1gvEjl1NiPPAUiCs4oPrIWFl5V4nC3GrkNdj9LaAU4s94nVrGbGOCqUpyWsg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ]
- },
- "node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.0.tgz",
- "integrity": "sha512-5LOhoaesY3doG1c+ac/2JtgREpKoJr5bUHH8tKY0V8di7+uSV6BwLs2PlR0/yzefGOkR+wE7ZolZphHCsyG5Rw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.0.tgz",
- "integrity": "sha512-yYkWHhmbhRTWTnWos5HC4GcPQfjlzzCNbM9e/+GXrLuaBXYA3qSDR9f0Vgufd5S8yX81U8jPKp7ZnAjZFMtRnw==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-gnu": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.0.tgz",
- "integrity": "sha512-SoTb6lPg25xZlA2ibwQ++ahCCnH+FP0qmEuafMJ4gznZKOlXioKEAeJLgCrqjM98ACziXM9V1amFjICVL4IFoA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.0.tgz",
- "integrity": "sha512-5L+T1fMX4RIEBoZzT0+sQ0PhTS36NULFmMXtl1TZo44TMAROIMHbZufSOjVWt/Y622BtxgxtaNOokbTDvfsrZA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@types/debug": {
- "version": "4.1.12",
- "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
- "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/ms": "*"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
- "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/fs-extra": {
- "version": "11.0.4",
- "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz",
- "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/jsonfile": "*",
- "@types/node": "*"
- }
- },
- "node_modules/@types/hash-sum": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@types/hash-sum/-/hash-sum-1.0.2.tgz",
- "integrity": "sha512-UP28RddqY8xcU0SCEp9YKutQICXpaAq9N8U2klqF5hegGha7KzTOL8EdhIIV3bOSGBzjEpN9bU/d+nNZBdJYVw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/hast": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
- "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/unist": "*"
- }
- },
- "node_modules/@types/jsonfile": {
- "version": "6.1.4",
- "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz",
- "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "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/markdown-it-emoji": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/markdown-it-emoji/-/markdown-it-emoji-3.0.1.tgz",
- "integrity": "sha512-cz1j8R35XivBqq9mwnsrP2fsz2yicLhB8+PDtuVkKOExwEdsVBNI+ROL3sbhtR5occRZ66vT0QnwFZCqdjf3pA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/markdown-it": "^14"
- }
- },
- "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/ms": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
- "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/node": {
- "version": "24.10.1",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
- "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "undici-types": "~7.16.0"
- }
- },
- "node_modules/@types/picomatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-4.0.2.tgz",
- "integrity": "sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/sax": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz",
- "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "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/@ungap/structured-clone": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
- "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/@vitejs/plugin-vue": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.2.tgz",
- "integrity": "sha512-iHmwV3QcVGGvSC1BG5bZ4z6iwa1SOpAPWmnjOErd4Ske+lZua5K9TtAVdx0gMBClJ28DViCbSmZitjWZsWO3LA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rolldown/pluginutils": "1.0.0-beta.50"
- },
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- },
- "peerDependencies": {
- "vite": "^5.0.0 || ^6.0.0 || ^7.0.0",
- "vue": "^3.2.25"
- }
- },
- "node_modules/@vue/compiler-core": {
- "version": "3.5.24",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.24.tgz",
- "integrity": "sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.28.5",
- "@vue/shared": "3.5.24",
- "entities": "^4.5.0",
- "estree-walker": "^2.0.2",
- "source-map-js": "^1.2.1"
- }
- },
- "node_modules/@vue/compiler-dom": {
- "version": "3.5.24",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.24.tgz",
- "integrity": "sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-core": "3.5.24",
- "@vue/shared": "3.5.24"
- }
- },
- "node_modules/@vue/compiler-sfc": {
- "version": "3.5.24",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.24.tgz",
- "integrity": "sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.28.5",
- "@vue/compiler-core": "3.5.24",
- "@vue/compiler-dom": "3.5.24",
- "@vue/compiler-ssr": "3.5.24",
- "@vue/shared": "3.5.24",
- "estree-walker": "^2.0.2",
- "magic-string": "^0.30.21",
- "postcss": "^8.5.6",
- "source-map-js": "^1.2.1"
- }
- },
- "node_modules/@vue/compiler-ssr": {
- "version": "3.5.24",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.24.tgz",
- "integrity": "sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-dom": "3.5.24",
- "@vue/shared": "3.5.24"
- }
- },
- "node_modules/@vue/devtools-api": {
- "version": "6.6.4",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
- "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@vue/devtools-kit": {
- "version": "8.0.5",
- "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.0.5.tgz",
- "integrity": "sha512-q2VV6x1U3KJMTQPUlRMyWEKVbcHuxhqJdSr6Jtjz5uAThAIrfJ6WVZdGZm5cuO63ZnSUz0RCsVwiUUb0mDV0Yg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/devtools-shared": "^8.0.5",
- "birpc": "^2.6.1",
- "hookable": "^5.5.3",
- "mitt": "^3.0.1",
- "perfect-debounce": "^2.0.0",
- "speakingurl": "^14.0.1",
- "superjson": "^2.2.2"
- }
- },
- "node_modules/@vue/devtools-shared": {
- "version": "8.0.5",
- "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.0.5.tgz",
- "integrity": "sha512-bRLn6/spxpmgLk+iwOrR29KrYnJjG9DGpHGkDFG82UM21ZpJ39ztUT9OXX3g+usW7/b2z+h46I9ZiYyB07XMXg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "rfdc": "^1.4.1"
- }
- },
- "node_modules/@vue/reactivity": {
- "version": "3.5.24",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.24.tgz",
- "integrity": "sha512-BM8kBhtlkkbnyl4q+HiF5R5BL0ycDPfihowulm02q3WYp2vxgPcJuZO866qa/0u3idbMntKEtVNuAUp5bw4teg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/shared": "3.5.24"
- }
- },
- "node_modules/@vue/runtime-core": {
- "version": "3.5.24",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.24.tgz",
- "integrity": "sha512-RYP/byyKDgNIqfX/gNb2PB55dJmM97jc9wyF3jK7QUInYKypK2exmZMNwnjueWwGceEkP6NChd3D2ZVEp9undQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/reactivity": "3.5.24",
- "@vue/shared": "3.5.24"
- }
- },
- "node_modules/@vue/runtime-dom": {
- "version": "3.5.24",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.24.tgz",
- "integrity": "sha512-Z8ANhr/i0XIluonHVjbUkjvn+CyrxbXRIxR7wn7+X7xlcb7dJsfITZbkVOeJZdP8VZwfrWRsWdShH6pngMxRjw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/reactivity": "3.5.24",
- "@vue/runtime-core": "3.5.24",
- "@vue/shared": "3.5.24",
- "csstype": "^3.1.3"
- }
- },
- "node_modules/@vue/server-renderer": {
- "version": "3.5.24",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.24.tgz",
- "integrity": "sha512-Yh2j2Y4G/0/4z/xJ1Bad4mxaAk++C2v4kaa8oSYTMJBJ00/ndPuxCnWeot0/7/qafQFLh5pr6xeV6SdMcE/G1w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-ssr": "3.5.24",
- "@vue/shared": "3.5.24"
- },
- "peerDependencies": {
- "vue": "3.5.24"
- }
- },
- "node_modules/@vue/shared": {
- "version": "3.5.24",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.24.tgz",
- "integrity": "sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@vuepress/bundler-vite": {
- "version": "2.0.0-rc.26",
- "resolved": "https://registry.npmjs.org/@vuepress/bundler-vite/-/bundler-vite-2.0.0-rc.26.tgz",
- "integrity": "sha512-4+YfKs2iOxuVSMW+L2tFzu2+X2HiGAREpo1DbkkYVDa5GyyPR+YsSueXNZMroTdzWDk5kAUz2Z1Tz1lIu7TO2g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vitejs/plugin-vue": "^6.0.1",
- "@vuepress/bundlerutils": "2.0.0-rc.26",
- "@vuepress/client": "2.0.0-rc.26",
- "@vuepress/core": "2.0.0-rc.26",
- "@vuepress/shared": "2.0.0-rc.26",
- "@vuepress/utils": "2.0.0-rc.26",
- "autoprefixer": "^10.4.21",
- "connect-history-api-fallback": "^2.0.0",
- "postcss": "^8.5.6",
- "postcss-load-config": "^6.0.1",
- "rollup": "^4.52.4",
- "vite": "~7.1.9",
- "vue": "^3.5.22",
- "vue-router": "^4.6.0"
- }
- },
- "node_modules/@vuepress/bundlerutils": {
- "version": "2.0.0-rc.26",
- "resolved": "https://registry.npmjs.org/@vuepress/bundlerutils/-/bundlerutils-2.0.0-rc.26.tgz",
- "integrity": "sha512-OnhUvzuJFEzPBjivZX7j6EhPE6sAwAIfyi3pAFmOpQDHPP7/l0q2I4bNVVGK4t9EZDu4N7Dl40/oFHhIMy5New==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/client": "2.0.0-rc.26",
- "@vuepress/core": "2.0.0-rc.26",
- "@vuepress/shared": "2.0.0-rc.26",
- "@vuepress/utils": "2.0.0-rc.26",
- "vue": "^3.5.22",
- "vue-router": "^4.6.0"
- }
- },
- "node_modules/@vuepress/cli": {
- "version": "2.0.0-rc.26",
- "resolved": "https://registry.npmjs.org/@vuepress/cli/-/cli-2.0.0-rc.26.tgz",
- "integrity": "sha512-63/4nIHrl9pbutUWs6SirWxmyykjvR9BWvu7bvczO1hAkWOyDQPcU18JXWy8q38CyMzPxCeedUfP3BQsZs3UgA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/core": "2.0.0-rc.26",
- "@vuepress/shared": "2.0.0-rc.26",
- "@vuepress/utils": "2.0.0-rc.26",
- "cac": "^6.7.14",
- "chokidar": "^4.0.3",
- "envinfo": "^7.18.0",
- "esbuild": "^0.25.10"
- },
- "bin": {
- "vuepress-cli": "bin/vuepress.js"
- }
- },
- "node_modules/@vuepress/client": {
- "version": "2.0.0-rc.26",
- "resolved": "https://registry.npmjs.org/@vuepress/client/-/client-2.0.0-rc.26.tgz",
- "integrity": "sha512-+irF1HOTD6sAHdcTjp3yRcfuGlJYAW+YvDhq+7n3TPXeMH/wJbmGmAs2oRIDkx6Nlt3XkMMpFo7e9pOU22ut1w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/devtools-api": "^8.0.2",
- "@vue/devtools-kit": "^8.0.2",
- "@vuepress/shared": "2.0.0-rc.26",
- "vue": "^3.5.22",
- "vue-router": "^4.6.0"
- }
- },
- "node_modules/@vuepress/client/node_modules/@vue/devtools-api": {
- "version": "8.0.5",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.0.5.tgz",
- "integrity": "sha512-DgVcW8H/Nral7LgZEecYFFYXnAvGuN9C3L3DtWekAncFBedBczpNW8iHKExfaM559Zm8wQWrwtYZ9lXthEHtDw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/devtools-kit": "^8.0.5"
- }
- },
- "node_modules/@vuepress/core": {
- "version": "2.0.0-rc.26",
- "resolved": "https://registry.npmjs.org/@vuepress/core/-/core-2.0.0-rc.26.tgz",
- "integrity": "sha512-Wyiv9oRvdT0lAPGU0Pj1HetjKicbX8/gqbBVYv2MmL7Y4a3r0tyQ92IdZ8LHiAgPvzctntQr/JXIELedvU1t/w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/client": "2.0.0-rc.26",
- "@vuepress/markdown": "2.0.0-rc.26",
- "@vuepress/shared": "2.0.0-rc.26",
- "@vuepress/utils": "2.0.0-rc.26",
- "vue": "^3.5.22"
- }
- },
- "node_modules/@vuepress/helper": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/helper/-/helper-2.0.0-rc.118.tgz",
- "integrity": "sha512-g+v+KQBfalhYbAAmb6ivFwBgyoi6tQkyKwMQNEPEbaUnCeZl+tAEr7RvTNLX2ZCcKSZeSp3PKciYEtFseDzN2A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/shared": "^3.5.22",
- "@vueuse/core": "^14.0.0",
- "cheerio": "^1.1.2",
- "fflate": "^0.8.2",
- "gray-matter": "^4.0.3",
- "vue": "^3.5.22"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/highlighter-helper": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/highlighter-helper/-/highlighter-helper-2.0.0-rc.118.tgz",
- "integrity": "sha512-9LH7QrMPKzFB+XIWEwd8CY6CaPOTG6FE7RJ4Uj7iSNsjvUFCoMrxspvVpURoh/e12tRuSu3HGx3j02W8Vip/9g==",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "@vueuse/core": "^14.0.0",
- "vuepress": "2.0.0-rc.26"
- },
- "peerDependenciesMeta": {
- "@vueuse/core": {
- "optional": true
- }
- }
- },
- "node_modules/@vuepress/markdown": {
- "version": "2.0.0-rc.26",
- "resolved": "https://registry.npmjs.org/@vuepress/markdown/-/markdown-2.0.0-rc.26.tgz",
- "integrity": "sha512-ZAXkRxqPDjxqcG4j4vN2ZL5gmuRmgGH7n0s/7pcWIGFH3BJodp/PXMYCklnne1VwARIim9rqE3FKPB/ifJX0yA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@mdit-vue/plugin-component": "^3.0.2",
- "@mdit-vue/plugin-frontmatter": "^3.0.2",
- "@mdit-vue/plugin-headers": "^3.0.2",
- "@mdit-vue/plugin-sfc": "^3.0.2",
- "@mdit-vue/plugin-title": "^3.0.2",
- "@mdit-vue/plugin-toc": "^3.0.2",
- "@mdit-vue/shared": "^3.0.2",
- "@mdit-vue/types": "^3.0.2",
- "@types/markdown-it": "^14.1.2",
- "@types/markdown-it-emoji": "^3.0.1",
- "@vuepress/shared": "2.0.0-rc.26",
- "@vuepress/utils": "2.0.0-rc.26",
- "markdown-it": "^14.1.0",
- "markdown-it-anchor": "^9.2.0",
- "markdown-it-emoji": "^3.0.0",
- "mdurl": "^2.0.0"
- }
- },
- "node_modules/@vuepress/plugin-active-header-links": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-active-header-links/-/plugin-active-header-links-2.0.0-rc.118.tgz",
- "integrity": "sha512-MtIUyzJnYR3iZFKqzax3/t+EuOQubIn3BbVYb5DZB8N0Hys+/LihzwSBF5AnVmecsLHOQ/b0V8blk/EOc5u/Kg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vueuse/core": "^14.0.0",
- "vue": "^3.5.22"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-back-to-top": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-back-to-top/-/plugin-back-to-top-2.0.0-rc.118.tgz",
- "integrity": "sha512-zQF6wgO4PbUEWnEytG8HZOWHQ1VLwGdqVRrV0Tq9Mw2RRd8BaxUX6dOgkGw/Th1bUBoVFEvjyadhaA12lG/GrA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/helper": "2.0.0-rc.118",
- "@vueuse/core": "^14.0.0",
- "vue": "^3.5.22"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-copy-code": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-copy-code/-/plugin-copy-code-2.0.0-rc.118.tgz",
- "integrity": "sha512-3NWcXF/2n3+3wpH60MkTCLPNjMzAhx03OFqIOHB8broJXPPBESrYWy0oJWtf2erwBtKzU8a28H2RxnXZNiO83Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/helper": "2.0.0-rc.118",
- "@vueuse/core": "^14.0.0",
- "vue": "^3.5.22"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-git": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-git/-/plugin-git-2.0.0-rc.118.tgz",
- "integrity": "sha512-dOk4oW6O+Thmu9/+nJ5wuEtoBloKzXsGWJOm1An0lfiggR+Hmxqs06y7/kHyLU0KcM5qzgr4ycgH9Z3Dyq7JAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/helper": "2.0.0-rc.118",
- "@vueuse/core": "^14.0.0",
- "rehype-parse": "^9.0.1",
- "rehype-sanitize": "^6.0.0",
- "rehype-stringify": "^10.0.1",
- "unified": "^11.0.5",
- "vue": "^3.5.22"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-links-check": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-links-check/-/plugin-links-check-2.0.0-rc.118.tgz",
- "integrity": "sha512-A+U4QwklXloSChi6AvfTp+ZVdLBjHY34q4vnnbfm733Mi/mzbqCJsD0AM/3Yng3mBTboaZe84beiyk0ckH0pNw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/helper": "2.0.0-rc.118"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-markdown-hint": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-markdown-hint/-/plugin-markdown-hint-2.0.0-rc.118.tgz",
- "integrity": "sha512-wuhiQ3kJTK7SKOkwcjb1+VT1npxtdWL6+Lwn9frXlliGm1gTjGsaVeezSjzVeVOI5ZaUB4lEEr8Dkw7iwN4gxA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@mdit/plugin-alert": "^0.22.3",
- "@mdit/plugin-container": "^0.22.2",
- "@types/markdown-it": "^14.1.2",
- "@vuepress/helper": "2.0.0-rc.118",
- "@vueuse/core": "^14.0.0"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-markdown-tab": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-markdown-tab/-/plugin-markdown-tab-2.0.0-rc.118.tgz",
- "integrity": "sha512-1KXxxE2O8jsNDVx0UIApD8a6uVZCY9m9JP0fuBb5Kf5EyS32BSli2feuZODuZtc81Q2KMePlLAElZpbdG0SKLQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@mdit/plugin-tab": "^0.22.3",
- "@types/markdown-it": "^14.1.2",
- "@vuepress/helper": "2.0.0-rc.118",
- "@vueuse/core": "^14.0.0",
- "vue": "^3.5.22"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-medium-zoom": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-medium-zoom/-/plugin-medium-zoom-2.0.0-rc.118.tgz",
- "integrity": "sha512-85esnzzVYmp5hXEChI8BqbcD1jc2Tj9XfVdtD3+U77BFouisIoy3zDzMAFO5G38v5aykn6m1XTZrv0MBll0FgQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/helper": "2.0.0-rc.118",
- "medium-zoom": "^1.1.0",
- "vue": "^3.5.22"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-nprogress": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-nprogress/-/plugin-nprogress-2.0.0-rc.118.tgz",
- "integrity": "sha512-f9vB4OARxm32VqGEDLF48Dui5O/uxOfUqaK0mJiYUVwRdNNJNNsKI4qWw+Fnk0KPHNBnCp/jnwhq0rQlzYUn4Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/helper": "2.0.0-rc.118",
- "vue": "^3.5.22"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-palette": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-palette/-/plugin-palette-2.0.0-rc.118.tgz",
- "integrity": "sha512-Zf5u0KZE9/TnGPaP2YP7UODiaAhpLGRX3shPJM8qvI+pjE0OAiQB6q6XyftSkW6458qGvQ8Dc5fTt5dJSnY9Ug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/helper": "2.0.0-rc.118",
- "chokidar": "^4.0.3"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-prismjs": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-prismjs/-/plugin-prismjs-2.0.0-rc.118.tgz",
- "integrity": "sha512-9SIg4I13B3a0zXBt3MIKdCEHb0TtNzAaBXGayxh4dq/HRTtKcV2JyIseUWoC/+lpmqD+vjiIWmP5xLs08ya8Tg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/helper": "2.0.0-rc.118",
- "@vuepress/highlighter-helper": "2.0.0-rc.118",
- "prismjs": "^1.30.0"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-seo": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-seo/-/plugin-seo-2.0.0-rc.118.tgz",
- "integrity": "sha512-z7ztlqK6vqwZyjGumBQbQ0QnaDR0XrCIdL4xN/xSE2xN3K8ua6fk0r8Chk1vDA/RhfZ89T2UFlCjaVN0CT+66w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/helper": "2.0.0-rc.118"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-sitemap": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-sitemap/-/plugin-sitemap-2.0.0-rc.118.tgz",
- "integrity": "sha512-HOFA4U4Mm8UTc4A5+0citi2p9muMk6QnfJLeM2WZAMVkesOYEm0QPO5QkPoD3DCOKRB/wdP4cXwCT04ut133SA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/helper": "2.0.0-rc.118",
- "sitemap": "^8.0.2"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-slimsearch": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-slimsearch/-/plugin-slimsearch-2.0.0-rc.118.tgz",
- "integrity": "sha512-9udg9vpub5jx3wk+a2rAH9UwYRbqlq8wH2DajB04fsqTHtMPFqcgw6O981xnEMtOx16Qel5d0DS+qOv6bW803g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/helper": "2.0.0-rc.118",
- "@vueuse/core": "^14.0.0",
- "cheerio": "^1.1.2",
- "chokidar": "^4.0.3",
- "slimsearch": "^2.2.2",
- "vue": "^3.5.22"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-theme-data": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-theme-data/-/plugin-theme-data-2.0.0-rc.118.tgz",
- "integrity": "sha512-1gUqg4p5yl0BqAxbdt0G7OHIqGggrk/ewG/vro+GP95OsTp6ZCs9Gt0hkPU0oqHfxZVp9XUHUz4g8N1lhqI46w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/devtools-api": "^8.0.3",
- "vue": "^3.5.22"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/plugin-theme-data/node_modules/@vue/devtools-api": {
- "version": "8.0.5",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.0.5.tgz",
- "integrity": "sha512-DgVcW8H/Nral7LgZEecYFFYXnAvGuN9C3L3DtWekAncFBedBczpNW8iHKExfaM559Zm8wQWrwtYZ9lXthEHtDw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/devtools-kit": "^8.0.5"
- }
- },
- "node_modules/@vuepress/plugin-umami-analytics": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/plugin-umami-analytics/-/plugin-umami-analytics-2.0.0-rc.118.tgz",
- "integrity": "sha512-7qfsrT1pDc6e32hyrlACYYZNiIO/vYaYKNUYJ42SsiqX1jYfV4yNp5FPbc4cYMEMWZc8LJLwQUipsqO3F8rTSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/helper": "2.0.0-rc.118",
- "vue": "^3.5.22"
- },
- "peerDependencies": {
- "vuepress": "2.0.0-rc.26"
- }
- },
- "node_modules/@vuepress/shared": {
- "version": "2.0.0-rc.26",
- "resolved": "https://registry.npmjs.org/@vuepress/shared/-/shared-2.0.0-rc.26.tgz",
- "integrity": "sha512-Zl9XNG/fYenZqzuYYGOfHzjmp1HCOj68gcJnJABOX1db0H35dkPSPsxuMjbTljClUqMlfj70CLeip/h04upGVw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@mdit-vue/types": "^3.0.2"
- }
- },
- "node_modules/@vuepress/theme-default": {
- "version": "2.0.0-rc.118",
- "resolved": "https://registry.npmjs.org/@vuepress/theme-default/-/theme-default-2.0.0-rc.118.tgz",
- "integrity": "sha512-J2hDsU2RslDxsaQDKIdX5morSOCd21cOKpdlXTy9mwJ5cLbE658mvzAxVEPwOLgWFjZML3cuPQpljYBsWp+brg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/helper": "2.0.0-rc.118",
- "@vuepress/plugin-active-header-links": "2.0.0-rc.118",
- "@vuepress/plugin-back-to-top": "2.0.0-rc.118",
- "@vuepress/plugin-copy-code": "2.0.0-rc.118",
- "@vuepress/plugin-git": "2.0.0-rc.118",
- "@vuepress/plugin-links-check": "2.0.0-rc.118",
- "@vuepress/plugin-markdown-hint": "2.0.0-rc.118",
- "@vuepress/plugin-markdown-tab": "2.0.0-rc.118",
- "@vuepress/plugin-medium-zoom": "2.0.0-rc.118",
- "@vuepress/plugin-nprogress": "2.0.0-rc.118",
- "@vuepress/plugin-palette": "2.0.0-rc.118",
- "@vuepress/plugin-prismjs": "2.0.0-rc.118",
- "@vuepress/plugin-seo": "2.0.0-rc.118",
- "@vuepress/plugin-sitemap": "2.0.0-rc.118",
- "@vuepress/plugin-theme-data": "2.0.0-rc.118",
- "@vueuse/core": "^14.0.0",
- "vue": "^3.5.22"
- },
- "peerDependencies": {
- "sass": "^1.93.2",
- "sass-embedded": "^1.93.2",
- "sass-loader": "^16.0.6",
- "vuepress": "2.0.0-rc.26"
- },
- "peerDependenciesMeta": {
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "sass-loader": {
- "optional": true
- }
- }
- },
- "node_modules/@vuepress/utils": {
- "version": "2.0.0-rc.26",
- "resolved": "https://registry.npmjs.org/@vuepress/utils/-/utils-2.0.0-rc.26.tgz",
- "integrity": "sha512-RWzZrGQ0WLSWdELuxg7c6q1D9I22T5PfK/qNFkOsv9eD3gpUsU4jq4zAoumS8o+NRIWHovCJ9WnAhHD0Ns5zAw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/debug": "^4.1.12",
- "@types/fs-extra": "^11.0.4",
- "@types/hash-sum": "^1.0.2",
- "@types/picomatch": "^4.0.2",
- "@vuepress/shared": "2.0.0-rc.26",
- "debug": "^4.4.3",
- "fs-extra": "^11.3.2",
- "hash-sum": "^2.0.0",
- "ora": "^9.0.0",
- "picocolors": "^1.1.1",
- "picomatch": "^4.0.3",
- "tinyglobby": "^0.2.15",
- "upath": "^2.0.1"
- }
- },
- "node_modules/@vueuse/core": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.0.0.tgz",
- "integrity": "sha512-d6tKRWkZE8IQElX2aHBxXOMD478fHIYV+Dzm2y9Ag122ICBpNKtGICiXKOhWU3L1kKdttDD9dCMS4bGP3jhCTQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/web-bluetooth": "^0.0.21",
- "@vueuse/metadata": "14.0.0",
- "@vueuse/shared": "14.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "vue": "^3.5.0"
- }
- },
- "node_modules/@vueuse/metadata": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.0.0.tgz",
- "integrity": "sha512-6yoGqbJcMldVCevkFiHDBTB1V5Hq+G/haPlGIuaFZHpXC0HADB0EN1ryQAAceiW+ryS3niUwvdFbGiqHqBrfVA==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/@vueuse/shared": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.0.0.tgz",
- "integrity": "sha512-mTCA0uczBgurRlwVaQHfG0Ja7UdGe4g9mwffiJmvLiTtp1G4AQyIjej6si/k8c8pUwTfVpNufck+23gXptPAkw==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- },
- "peerDependencies": {
- "vue": "^3.5.0"
- }
- },
- "node_modules/ansi-regex": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
- "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/arg": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/autoprefixer": {
- "version": "10.4.22",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz",
- "integrity": "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/autoprefixer"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "browserslist": "^4.27.0",
- "caniuse-lite": "^1.0.30001754",
- "fraction.js": "^5.3.4",
- "normalize-range": "^0.1.2",
- "picocolors": "^1.1.1",
- "postcss-value-parser": "^4.2.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
- "node_modules/bail": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
- "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/baseline-browser-mapping": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
- "integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "baseline-browser-mapping": "dist/cli.cjs"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/birpc": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.8.0.tgz",
- "integrity": "sha512-Bz2a4qD/5GRhiHSwj30c/8kC8QGj12nNDwz3D4ErQ4Xhy35dsSDvF+RA/tWpjyU0pdGtSDiEk6B5fBGE1qNVhw==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/antfu"
- }
- },
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/browserslist": {
- "version": "4.28.0",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz",
- "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "baseline-browser-mapping": "^2.8.25",
- "caniuse-lite": "^1.0.30001754",
- "electron-to-chromium": "^1.5.249",
- "node-releases": "^2.0.27",
- "update-browserslist-db": "^1.1.4"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/cac": {
- "version": "6.7.14",
- "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
- "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001756",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz",
- "integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "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",
- "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "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.1.2",
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz",
- "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cheerio-select": "^2.1.0",
- "dom-serializer": "^2.0.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.2.2",
- "encoding-sniffer": "^0.2.1",
- "htmlparser2": "^10.0.0",
- "parse5": "^7.3.0",
- "parse5-htmlparser2-tree-adapter": "^7.1.0",
- "parse5-parser-stream": "^7.1.2",
- "undici": "^7.12.0",
- "whatwg-mimetype": "^4.0.0"
- },
- "engines": {
- "node": ">=20.18.1"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
- }
- },
- "node_modules/cheerio-select": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
- "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-select": "^5.1.0",
- "css-what": "^6.1.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/chokidar": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
- "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "readdirp": "^4.0.1"
- },
- "engines": {
- "node": ">= 14.16.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/cli-cursor": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
- "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "restore-cursor": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cli-spinners": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-3.3.0.tgz",
- "integrity": "sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/colorjs.io": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz",
- "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==",
- "dev": true,
- "license": "MIT"
- },
- "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/connect-history-api-fallback": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
- "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/copy-anything": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz",
- "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
- "license": "MIT",
- "dependencies": {
- "is-what": "^3.14.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/mesqueeb"
- }
- },
- "node_modules/css-select": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
- "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^6.1.0",
- "domhandler": "^5.0.2",
- "domutils": "^3.0.1",
- "nth-check": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/css-what": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
- "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">= 6"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/csstype": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
- "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/debug": {
- "version": "4.4.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
- "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
- "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/detect-libc": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
- "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "engines": {
- "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",
- "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
- "entities": "^4.2.0"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
- }
- },
- "node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ],
- "license": "BSD-2-Clause"
- },
- "node_modules/domhandler": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
- "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "domelementtype": "^2.3.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/domutils": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
- "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "dom-serializer": "^2.0.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3"
- },
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/electron-to-chromium": {
- "version": "1.5.256",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.256.tgz",
- "integrity": "sha512-uqYq1IQhpXXLX+HgiXdyOZml7spy4xfy42yPxcCCRjswp0fYM2X+JwCON07lqnpLEGVCj739B7Yr+FngmHBMEQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/encoding-sniffer": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz",
- "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "iconv-lite": "^0.6.3",
- "whatwg-encoding": "^3.1.1"
- },
- "funding": {
- "url": "https://github.com/fb55/encoding-sniffer?sponsor=1"
- }
- },
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/envinfo": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.20.0.tgz",
- "integrity": "sha512-+zUomDcLXsVkQ37vUqWBvQwLaLlj8eZPSi61llaEFAVBY5mhcXdaSw1pSJVl4yTYD5g/gEfpNl28YYk4IPvrrg==",
- "dev": true,
- "license": "MIT",
- "bin": {
- "envinfo": "dist/cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/errno": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
- "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "prr": "~1.0.1"
- },
- "bin": {
- "errno": "cli.js"
- }
- },
- "node_modules/esbuild": {
- "version": "0.25.12",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
- "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.12",
- "@esbuild/android-arm": "0.25.12",
- "@esbuild/android-arm64": "0.25.12",
- "@esbuild/android-x64": "0.25.12",
- "@esbuild/darwin-arm64": "0.25.12",
- "@esbuild/darwin-x64": "0.25.12",
- "@esbuild/freebsd-arm64": "0.25.12",
- "@esbuild/freebsd-x64": "0.25.12",
- "@esbuild/linux-arm": "0.25.12",
- "@esbuild/linux-arm64": "0.25.12",
- "@esbuild/linux-ia32": "0.25.12",
- "@esbuild/linux-loong64": "0.25.12",
- "@esbuild/linux-mips64el": "0.25.12",
- "@esbuild/linux-ppc64": "0.25.12",
- "@esbuild/linux-riscv64": "0.25.12",
- "@esbuild/linux-s390x": "0.25.12",
- "@esbuild/linux-x64": "0.25.12",
- "@esbuild/netbsd-arm64": "0.25.12",
- "@esbuild/netbsd-x64": "0.25.12",
- "@esbuild/openbsd-arm64": "0.25.12",
- "@esbuild/openbsd-x64": "0.25.12",
- "@esbuild/openharmony-arm64": "0.25.12",
- "@esbuild/sunos-x64": "0.25.12",
- "@esbuild/win32-arm64": "0.25.12",
- "@esbuild/win32-ia32": "0.25.12",
- "@esbuild/win32-x64": "0.25.12"
- }
- },
- "node_modules/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true,
- "license": "BSD-2-Clause",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fflate": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
- "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fraction.js": {
- "version": "5.3.4",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz",
- "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/rawify"
- }
- },
- "node_modules/fs-extra": {
- "version": "11.3.2",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz",
- "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=14.14"
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/get-east-asian-width": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz",
- "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "devOptional": true,
- "license": "ISC"
- },
- "node_modules/gray-matter": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
- "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "js-yaml": "^3.13.1",
- "kind-of": "^6.0.2",
- "section-matter": "^1.0.0",
- "strip-bom-string": "^1.0.0"
- },
- "engines": {
- "node": ">=6.0"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/hash-sum": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
- "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/hast-util-from-html": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz",
- "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "devlop": "^1.1.0",
- "hast-util-from-parse5": "^8.0.0",
- "parse5": "^7.0.0",
- "vfile": "^6.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-from-parse5": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
- "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "devlop": "^1.0.0",
- "hastscript": "^9.0.0",
- "property-information": "^7.0.0",
- "vfile": "^6.0.0",
- "vfile-location": "^5.0.0",
- "web-namespaces": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-parse-selector": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
- "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-sanitize": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-5.0.2.tgz",
- "integrity": "sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@ungap/structured-clone": "^1.0.0",
- "unist-util-position": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "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/hastscript": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz",
- "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "comma-separated-tokens": "^2.0.0",
- "hast-util-parse-selector": "^4.0.0",
- "property-information": "^7.0.0",
- "space-separated-tokens": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "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/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.0.0",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",
- "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==",
- "dev": true,
- "funding": [
- "https://github.com/fb55/htmlparser2?sponsor=1",
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.2.1",
- "entities": "^6.0.0"
- }
- },
- "node_modules/htmlparser2/node_modules/entities": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
- "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/image-size": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
- "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
- "license": "MIT",
- "optional": true,
- "bin": {
- "image-size": "bin/image-size.js"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/immutable": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.6.tgz",
- "integrity": "sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-interactive": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
- "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
- "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-unicode-supported": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
- "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-what": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
- "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "3.14.2",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
- "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/less": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/less/-/less-4.4.2.tgz",
- "integrity": "sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==",
- "license": "Apache-2.0",
- "dependencies": {
- "copy-anything": "^2.0.1",
- "parse-node-version": "^1.0.1",
- "tslib": "^2.3.0"
- },
- "bin": {
- "lessc": "bin/lessc"
- },
- "engines": {
- "node": ">=14"
- },
- "optionalDependencies": {
- "errno": "^0.1.1",
- "graceful-fs": "^4.1.2",
- "image-size": "~0.5.0",
- "make-dir": "^2.1.0",
- "mime": "^1.4.1",
- "needle": "^3.1.0",
- "source-map": "~0.6.0"
- }
- },
- "node_modules/lilconfig": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
- "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/antonk52"
- }
- },
- "node_modules/linkify-it": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.1.tgz",
- "integrity": "sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/puzrin"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/markdown-it"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "uc.micro": "^2.0.0"
- }
- },
- "node_modules/log-symbols": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-7.0.1.tgz",
- "integrity": "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-unicode-supported": "^2.0.0",
- "yoctocolors": "^2.1.1"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/magic-string": {
- "version": "0.30.21",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
- "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.5"
- }
- },
- "node_modules/make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/markdown-it": {
- "version": "14.2.0",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.2.0.tgz",
- "integrity": "sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/puzrin"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/markdown-it"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1",
- "entities": "^4.4.0",
- "linkify-it": "^5.0.1",
- "mdurl": "^2.0.0",
- "punycode.js": "^2.3.1",
- "uc.micro": "^2.1.0"
- },
- "bin": {
- "markdown-it": "bin/markdown-it.mjs"
- }
- },
- "node_modules/markdown-it-anchor": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-9.2.0.tgz",
- "integrity": "sha512-sa2ErMQ6kKOA4l31gLGYliFQrMKkqSO0ZJgGhDHKijPf0pNFM9vghjAh3gn26pS4JDRs7Iwa9S36gxm3vgZTzg==",
- "dev": true,
- "license": "Unlicense",
- "peerDependencies": {
- "@types/markdown-it": "*",
- "markdown-it": "*"
- }
- },
- "node_modules/markdown-it-emoji": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-3.0.0.tgz",
- "integrity": "sha512-+rUD93bXHubA4arpEZO3q80so0qgoFJEKRkRbjKX8RTdca89v2kfyF+xR3i2sQTwql9tpPZPOQN5B+PunspXRg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/markdown-it/node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
- "license": "Python-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/mdurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
- "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/medium-zoom": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz",
- "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==",
- "dev": true,
- "license": "MIT"
- },
- "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/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "license": "MIT",
- "optional": true,
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/mimic-function": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
- "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/mitt": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
- "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/nanoid": {
- "version": "3.3.12",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
- "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/needle": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz",
- "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "iconv-lite": "^0.6.3",
- "sax": "^1.2.4"
- },
- "bin": {
- "needle": "bin/needle"
- },
- "engines": {
- "node": ">= 4.4.x"
- }
- },
- "node_modules/node-addon-api": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
- "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
- "dev": true,
- "license": "MIT",
- "optional": true
- },
- "node_modules/node-releases": {
- "version": "2.0.27",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
- "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/nord": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/nord/-/nord-0.2.1.tgz",
- "integrity": "sha512-/AD7JGJbcp1pB5XwYkJyivqdeXofUP5u2lkif6vLGLc+SsV9OCC0JFNpVwM5pqHuFqbyojRt6xILuidJOwwJDQ==",
- "license": "(Apache-2.0 AND CC-BY-SA-4.0)"
- },
- "node_modules/normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nth-check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "boolbase": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/fb55/nth-check?sponsor=1"
- }
- },
- "node_modules/onetime": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
- "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mimic-function": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ora": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-9.0.0.tgz",
- "integrity": "sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^5.6.2",
- "cli-cursor": "^5.0.0",
- "cli-spinners": "^3.2.0",
- "is-interactive": "^2.0.0",
- "is-unicode-supported": "^2.1.0",
- "log-symbols": "^7.0.1",
- "stdin-discarder": "^0.2.2",
- "string-width": "^8.1.0",
- "strip-ansi": "^7.1.2"
- },
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parse-node-version": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
- "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/parse5": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
- "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "entities": "^6.0.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
- "node_modules/parse5-htmlparser2-tree-adapter": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz",
- "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "domhandler": "^5.0.3",
- "parse5": "^7.0.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
- "node_modules/parse5-parser-stream": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz",
- "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "parse5": "^7.0.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
- "node_modules/parse5/node_modules/entities": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
- "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/perfect-debounce": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.0.0.tgz",
- "integrity": "sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
- "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.15",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz",
- "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.12",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/postcss-load-config": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
- "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "lilconfig": "^3.1.1"
- },
- "engines": {
- "node": ">= 18"
- },
- "peerDependencies": {
- "jiti": ">=1.21.0",
- "postcss": ">=8.0.9",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "jiti": {
- "optional": true
- },
- "postcss": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- },
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/prismjs": {
- "version": "1.30.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
- "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/property-information": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
- "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
- "license": "MIT",
- "optional": true
- },
- "node_modules/punycode.js": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
- "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/readdirp": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
- "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 14.18.0"
- },
- "funding": {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/rehype-parse": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz",
- "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "hast-util-from-html": "^2.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/rehype-sanitize": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/rehype-sanitize/-/rehype-sanitize-6.0.0.tgz",
- "integrity": "sha512-CsnhKNsyI8Tub6L4sm5ZFsme4puGfc6pYylvXo1AeqaGbjOYyzNv3qZPwvs0oMJ39eryyeOdmxwUIo94IpEhqg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "hast-util-sanitize": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/rehype-stringify": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz",
- "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "hast-util-to-html": "^9.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/restore-cursor": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
- "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "onetime": "^7.0.0",
- "signal-exit": "^4.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/rfdc": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
- "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/rollup": {
- "version": "4.62.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.0.tgz",
- "integrity": "sha512-nc72Wgq62I7rtDV4izT5/aaS0zxy3kttkinf9586ApknY3jZO9NYsmtc24fUckA0X7Q2v+ML4a15pdUlV5V/jA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/estree": "1.0.9"
- },
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=18.0.0",
- "npm": ">=8.0.0"
- },
- "optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.62.0",
- "@rollup/rollup-android-arm64": "4.62.0",
- "@rollup/rollup-darwin-arm64": "4.62.0",
- "@rollup/rollup-darwin-x64": "4.62.0",
- "@rollup/rollup-freebsd-arm64": "4.62.0",
- "@rollup/rollup-freebsd-x64": "4.62.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.62.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.62.0",
- "@rollup/rollup-linux-arm64-gnu": "4.62.0",
- "@rollup/rollup-linux-arm64-musl": "4.62.0",
- "@rollup/rollup-linux-loong64-gnu": "4.62.0",
- "@rollup/rollup-linux-loong64-musl": "4.62.0",
- "@rollup/rollup-linux-ppc64-gnu": "4.62.0",
- "@rollup/rollup-linux-ppc64-musl": "4.62.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.62.0",
- "@rollup/rollup-linux-riscv64-musl": "4.62.0",
- "@rollup/rollup-linux-s390x-gnu": "4.62.0",
- "@rollup/rollup-linux-x64-gnu": "4.62.0",
- "@rollup/rollup-linux-x64-musl": "4.62.0",
- "@rollup/rollup-openbsd-x64": "4.62.0",
- "@rollup/rollup-openharmony-arm64": "4.62.0",
- "@rollup/rollup-win32-arm64-msvc": "4.62.0",
- "@rollup/rollup-win32-ia32-msvc": "4.62.0",
- "@rollup/rollup-win32-x64-gnu": "4.62.0",
- "@rollup/rollup-win32-x64-msvc": "4.62.0",
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.2",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
- "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "devOptional": true,
- "license": "MIT"
- },
- "node_modules/sass": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz",
- "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "chokidar": "^4.0.0",
- "immutable": "^5.0.2",
- "source-map-js": ">=0.6.2 <2.0.0"
- },
- "bin": {
- "sass": "sass.js"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "optionalDependencies": {
- "@parcel/watcher": "^2.4.1"
- }
- },
- "node_modules/sass-embedded": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.97.3.tgz",
- "integrity": "sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@bufbuild/protobuf": "^2.5.0",
- "colorjs.io": "^0.5.0",
- "immutable": "^5.0.2",
- "rxjs": "^7.4.0",
- "supports-color": "^8.1.1",
- "sync-child-process": "^1.0.2",
- "varint": "^6.0.0"
- },
- "bin": {
- "sass": "dist/bin/sass.js"
- },
- "engines": {
- "node": ">=16.0.0"
- },
- "optionalDependencies": {
- "sass-embedded-all-unknown": "1.97.3",
- "sass-embedded-android-arm": "1.97.3",
- "sass-embedded-android-arm64": "1.97.3",
- "sass-embedded-android-riscv64": "1.97.3",
- "sass-embedded-android-x64": "1.97.3",
- "sass-embedded-darwin-arm64": "1.97.3",
- "sass-embedded-darwin-x64": "1.97.3",
- "sass-embedded-linux-arm": "1.97.3",
- "sass-embedded-linux-arm64": "1.97.3",
- "sass-embedded-linux-musl-arm": "1.97.3",
- "sass-embedded-linux-musl-arm64": "1.97.3",
- "sass-embedded-linux-musl-riscv64": "1.97.3",
- "sass-embedded-linux-musl-x64": "1.97.3",
- "sass-embedded-linux-riscv64": "1.97.3",
- "sass-embedded-linux-x64": "1.97.3",
- "sass-embedded-unknown-all": "1.97.3",
- "sass-embedded-win32-arm64": "1.97.3",
- "sass-embedded-win32-x64": "1.97.3"
- }
- },
- "node_modules/sass-embedded-all-unknown": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.97.3.tgz",
- "integrity": "sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg==",
- "cpu": [
- "!arm",
- "!arm64",
- "!riscv64",
- "!x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "sass": "1.97.3"
- }
- },
- "node_modules/sass-embedded-android-arm": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.97.3.tgz",
- "integrity": "sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-android-arm64": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.97.3.tgz",
- "integrity": "sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-android-riscv64": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.97.3.tgz",
- "integrity": "sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-android-x64": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.97.3.tgz",
- "integrity": "sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-darwin-arm64": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.97.3.tgz",
- "integrity": "sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-darwin-x64": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.97.3.tgz",
- "integrity": "sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-linux-arm": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.97.3.tgz",
- "integrity": "sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-linux-arm64": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.97.3.tgz",
- "integrity": "sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-linux-musl-arm": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.97.3.tgz",
- "integrity": "sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-linux-musl-arm64": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.97.3.tgz",
- "integrity": "sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-linux-musl-riscv64": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.97.3.tgz",
- "integrity": "sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-linux-musl-x64": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.97.3.tgz",
- "integrity": "sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-linux-riscv64": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.97.3.tgz",
- "integrity": "sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-linux-x64": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.97.3.tgz",
- "integrity": "sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-unknown-all": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.97.3.tgz",
- "integrity": "sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "!android",
- "!darwin",
- "!linux",
- "!win32"
- ],
- "dependencies": {
- "sass": "1.97.3"
- }
- },
- "node_modules/sass-embedded-win32-arm64": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.97.3.tgz",
- "integrity": "sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sass-embedded-win32-x64": {
- "version": "1.97.3",
- "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.97.3.tgz",
- "integrity": "sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/sax": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz",
- "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==",
- "devOptional": true,
- "license": "BlueOak-1.0.0"
- },
- "node_modules/section-matter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
- "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "license": "ISC",
- "optional": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/sitemap": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-8.0.2.tgz",
- "integrity": "sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "^17.0.5",
- "@types/sax": "^1.2.1",
- "arg": "^5.0.0",
- "sax": "^1.4.1"
- },
- "bin": {
- "sitemap": "dist/cli.js"
- },
- "engines": {
- "node": ">=14.0.0",
- "npm": ">=6.0.0"
- }
- },
- "node_modules/sitemap/node_modules/@types/node": {
- "version": "17.0.45",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
- "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/slimsearch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/slimsearch/-/slimsearch-2.2.2.tgz",
- "integrity": "sha512-C+E3y4sKKzPzcOyty0G9CjXdLvY0ZWPSCQCDNqSv/P6+rvoL6RiHvuwr0wnxf0QgdbdyNiJQ0w7OdudHoabpCg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18.18.0"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "license": "BSD-3-Clause",
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
- "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.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/speakingurl": {
- "version": "14.0.1",
- "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
- "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/stdin-discarder": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz",
- "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/string-width": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz",
- "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-east-asian-width": "^1.3.0",
- "strip-ansi": "^7.1.0"
- },
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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": "7.1.2",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
- "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/strip-bom-string": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
- "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/superjson": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.5.tgz",
- "integrity": "sha512-zWPTX96LVsA/eVYnqOM2+ofcdPqdS1dAF1LN4TS2/MWuUpfitd9ctTa87wt4xrYnZnkLtS69xpBdSxVBP5Rm6w==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "copy-anything": "^4"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/superjson/node_modules/copy-anything": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz",
- "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-what": "^5.2.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/mesqueeb"
- }
- },
- "node_modules/superjson/node_modules/is-what": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz",
- "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/mesqueeb"
- }
- },
- "node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/sync-child-process": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz",
- "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "sync-message-port": "^1.0.0"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/sync-message-port": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz",
- "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.15",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
- "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tinyglobby/node_modules/fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "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/trough": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
- "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD"
- },
- "node_modules/uc.micro": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
- "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/undici": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz",
- "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=20.18.1"
- }
- },
- "node_modules/undici-types": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
- "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/unified": {
- "version": "11.0.5",
- "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
- "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "bail": "^2.0.0",
- "devlop": "^1.0.0",
- "extend": "^3.0.0",
- "is-plain-obj": "^4.0.0",
- "trough": "^2.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "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.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
- "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
- "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",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/upath": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz",
- "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4",
- "yarn": "*"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz",
- "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "escalade": "^3.2.0",
- "picocolors": "^1.1.1"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/varint": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",
- "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==",
- "dev": true,
- "license": "MIT"
- },
- "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-location": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz",
- "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "vfile": "^6.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": "7.1.12",
- "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz",
- "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3",
- "postcss": "^8.5.6",
- "rollup": "^4.43.0",
- "tinyglobby": "^0.2.15"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": "^20.19.0 || >=22.12.0"
- },
- "funding": {
- "url": "https://github.com/vitejs/vite?sponsor=1"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- },
- "peerDependencies": {
- "@types/node": "^20.19.0 || >=22.12.0",
- "jiti": ">=1.21.0",
- "less": "^4.0.0",
- "lightningcss": "^1.21.0",
- "sass": "^1.70.0",
- "sass-embedded": "^1.70.0",
- "stylus": ">=0.54.8",
- "sugarss": "^5.0.0",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "jiti": {
- "optional": true
- },
- "less": {
- "optional": true
- },
- "lightningcss": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "sass-embedded": {
- "optional": true
- },
- "stylus": {
- "optional": true
- },
- "sugarss": {
- "optional": true
- },
- "terser": {
- "optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
- }
- }
- },
- "node_modules/vite/node_modules/fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/vue": {
- "version": "3.5.24",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.24.tgz",
- "integrity": "sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/compiler-dom": "3.5.24",
- "@vue/compiler-sfc": "3.5.24",
- "@vue/runtime-dom": "3.5.24",
- "@vue/server-renderer": "3.5.24",
- "@vue/shared": "3.5.24"
- },
- "peerDependencies": {
- "typescript": "*"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/vue-router": {
- "version": "4.6.3",
- "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.3.tgz",
- "integrity": "sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vue/devtools-api": "^6.6.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/posva"
- },
- "peerDependencies": {
- "vue": "^3.5.0"
- }
- },
- "node_modules/vuepress": {
- "version": "2.0.0-rc.26",
- "resolved": "https://registry.npmjs.org/vuepress/-/vuepress-2.0.0-rc.26.tgz",
- "integrity": "sha512-ztTS3m6Q2MAb6D26vM2UyU5nOuxIhIk37SSD3jTcKI00x4ha0FcwY3Cm0MAt6w58REBmkwNLPxN5iiulatHtbw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@vuepress/cli": "2.0.0-rc.26",
- "@vuepress/client": "2.0.0-rc.26",
- "@vuepress/core": "2.0.0-rc.26",
- "@vuepress/markdown": "2.0.0-rc.26",
- "@vuepress/shared": "2.0.0-rc.26",
- "@vuepress/utils": "2.0.0-rc.26",
- "vue": "^3.5.22"
- },
- "bin": {
- "vuepress": "bin/vuepress.js",
- "vuepress-vite": "bin/vuepress-vite.js",
- "vuepress-webpack": "bin/vuepress-webpack.js"
- },
- "engines": {
- "node": "^20.9.0 || >=22.0.0"
- },
- "peerDependencies": {
- "@vuepress/bundler-vite": "2.0.0-rc.26",
- "@vuepress/bundler-webpack": "2.0.0-rc.26",
- "vue": "^3.5.22"
- },
- "peerDependenciesMeta": {
- "@vuepress/bundler-vite": {
- "optional": true
- },
- "@vuepress/bundler-webpack": {
- "optional": true
- }
- }
- },
- "node_modules/web-namespaces": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
- "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
- "dev": true,
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/whatwg-encoding": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
- "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "iconv-lite": "0.6.3"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/whatwg-mimetype": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
- "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/yoctocolors": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz",
- "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "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 c5de2f6..664928e 100644
--- a/package.json
+++ b/package.json
@@ -1,30 +1,17 @@
{
"name": "config.phundrak.com",
- "version": "1.0.0",
+ "version": "2.0.0",
"description": "",
"main": "index.js",
- "repository": {
- "type": "git",
- "url": "https://labs.phundrak.com/phundrak/conlang.phundrak.com"
- },
+ "repository": "https://labs.phundrak.com/phundrak/config.phundrak.com",
"author": "Lucien Cartier-Tilet ",
"license": "AGPL-3.0",
"private": true,
"devDependencies": {
- "@vuepress/bundler-vite": "2.0.0-rc.26",
- "@vuepress/plugin-slimsearch": "^2.0.0-rc.118",
- "@vuepress/plugin-umami-analytics": "2.0.0-rc.118",
- "@vuepress/theme-default": "2.0.0-rc.118",
- "baseline-browser-mapping": "^2.10.0",
- "sass-embedded": "^1.97.3",
- "vuepress": "2.0.0-rc.26"
- },
- "dependencies": {
- "less": "^4.4.2",
- "nord": "^0.2.1"
+ "vitepress": "^2.0.0-alpha.18"
},
"scripts": {
- "dev": "vuepress dev docs",
- "build": "vuepress build docs"
+ "dev": "vitepress dev",
+ "build": "vitepress build"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..263a003
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,1252 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ devDependencies:
+ vitepress:
+ specifier: ^2.0.0-alpha.18
+ version: 2.0.0-alpha.18(postcss@8.5.19)
+
+packages:
+
+ '@babel/helper-string-parser@7.29.7':
+ resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.29.7':
+ resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.29.7':
+ resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/types@7.29.7':
+ resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==}
+ engines: {node: '>=6.9.0'}
+
+ '@docsearch/css@4.6.3':
+ resolution: {integrity: sha512-nlOwcXcsNAptQl4vlL4MA78qNJKO0Qlds5GuBjCoePgkebTXLSf8Qt1oyZ3YBshYupKXG9VRGEsk1zr23d+bzQ==}
+
+ '@docsearch/js@4.6.3':
+ resolution: {integrity: sha512-qUIX2b4Apew3tv4F0qhmgShsl/Lfw4m6mqv/5/5dWNxwTcDdLMp2s3YwZ+NMGh3IKCg0pBaXm7Q5VdyU5Rj+cQ==}
+
+ '@docsearch/sidepanel-js@4.6.3':
+ resolution: {integrity: sha512-grGSmvXzG0if+mrzdIKykvpIAuEQ9u0sEJ2eLRRCaQfJvsWqh2C2/aY04bIzWvDh7myi5rvl8D+tUNsVrjYQ3A==}
+
+ '@emnapi/core@1.11.1':
+ resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==}
+
+ '@emnapi/runtime@1.11.1':
+ resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==}
+
+ '@emnapi/wasi-threads@1.2.2':
+ resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
+
+ '@iconify-json/simple-icons@1.2.90':
+ resolution: {integrity: sha512-zt2o2ZvQpHVvZJARIkZ51RnaHY2oqcPJMvHE+mVnxkSr+c33fnX4gciiXu+wyX5ei+s0qbVX1wD0DWBbaGBYMA==}
+
+ '@iconify/types@2.0.0':
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@napi-rs/wasm-runtime@1.1.6':
+ resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==}
+ peerDependencies:
+ '@emnapi/core': ^1.7.1
+ '@emnapi/runtime': ^1.7.1
+
+ '@oxc-project/types@0.139.0':
+ resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==}
+
+ '@rolldown/binding-android-arm64@1.1.5':
+ resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-darwin-arm64@1.1.5':
+ resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.1.5':
+ resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-freebsd-x64@1.1.5':
+ resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.1.5':
+ resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.1.5':
+ resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-arm64-musl@1.1.5':
+ resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-ppc64-gnu@1.1.5':
+ resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-s390x-gnu@1.1.5':
+ resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-gnu@1.1.5':
+ resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-musl@1.1.5':
+ resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-openharmony-arm64@1.1.5':
+ resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-wasm32-wasi@1.1.5':
+ resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.1.5':
+ resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.1.5':
+ resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/pluginutils@1.0.1':
+ resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
+
+ '@shikijs/core@4.3.1':
+ resolution: {integrity: sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==}
+ engines: {node: '>=20'}
+
+ '@shikijs/engine-javascript@4.3.1':
+ resolution: {integrity: sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ==}
+ engines: {node: '>=20'}
+
+ '@shikijs/engine-oniguruma@4.3.1':
+ resolution: {integrity: sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg==}
+ engines: {node: '>=20'}
+
+ '@shikijs/langs@4.3.1':
+ resolution: {integrity: sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ==}
+ engines: {node: '>=20'}
+
+ '@shikijs/primitive@4.3.1':
+ resolution: {integrity: sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==}
+ engines: {node: '>=20'}
+
+ '@shikijs/themes@4.3.1':
+ resolution: {integrity: sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA==}
+ engines: {node: '>=20'}
+
+ '@shikijs/transformers@4.3.1':
+ resolution: {integrity: sha512-z6ir0bGDgWcF2FduktEfPgIsdOtIlDiLAjFBgBzE42Q9xHbkkIXZtORHzlLVB71iZP9elEcqKg6keajvOUwE2A==}
+ engines: {node: '>=20'}
+
+ '@shikijs/types@4.3.1':
+ resolution: {integrity: sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==}
+ engines: {node: '>=20'}
+
+ '@shikijs/vscode-textmate@10.0.2':
+ resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
+
+ '@tybys/wasm-util@0.10.3':
+ resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==}
+
+ '@types/hast@3.0.5':
+ resolution: {integrity: sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==}
+
+ '@types/linkify-it@5.0.0':
+ resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
+
+ '@types/markdown-it@14.1.2':
+ resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
+
+ '@types/mdast@4.0.4':
+ resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+
+ '@types/mdurl@2.0.0':
+ resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
+
+ '@types/unist@3.0.3':
+ resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
+ '@types/web-bluetooth@0.0.21':
+ resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
+
+ '@ungap/structured-clone@1.3.3':
+ resolution: {integrity: sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==}
+
+ '@vitejs/plugin-vue@6.0.8':
+ resolution: {integrity: sha512-0ZjgOg7oO6farnNGup7yvoM/YXZV84OZxHAwtflItNa/6zzQyVb5LNxyea3FEKEX2XlagIKzrlH7wwxkKgtiew==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ vue: ^3.2.25
+
+ '@vue/compiler-core@3.5.40':
+ resolution: {integrity: sha512-39E8IgOhTbVDnoJFMKc2DvYnypcZwUqgUhQkccva/0m6FUwtIKSGV7n1hpVmYcFaoRAwf9pBcwnKlCEsN63ZEQ==}
+
+ '@vue/compiler-dom@3.5.40':
+ resolution: {integrity: sha512-pwkx4vqlqOspFstrcmzwkKLePVMD3PT65imRzLhanU2V1Fj4K13g6OXjanOyzw3aTAuRk84BOmY8f3rEHqPaVA==}
+
+ '@vue/compiler-sfc@3.5.40':
+ resolution: {integrity: sha512-gIf497P4kpuALcvs5n3AEg1Vdn0pSY4XbjASIfHNYF1/MP3T2Mf2STERTubysBxCRxzJGJYtF/O7vwJrxFB3Vw==}
+
+ '@vue/compiler-ssr@3.5.40':
+ resolution: {integrity: sha512-rrE5xiXG663+vHCHa3J9p2z5OcBRjXmoqenprJxAFQxg5pSshzeBiCE6pu46axapRJ2Adk0YDA2BRZVjiHXnhg==}
+
+ '@vue/devtools-api@8.1.5':
+ resolution: {integrity: sha512-YJipMVAKe5wT5CWf5kTYCaNV7NMNjFVxJkIkJaJ4W/nCxEBzlZzrOsYKeCymdCrFZmBS/+wTWFoUs3Jf/Q6XSQ==}
+
+ '@vue/devtools-kit@8.1.5':
+ resolution: {integrity: sha512-FcSAxsi4eWuXLCB7Rv9lj0aIVHHPNVQ2BazGf4RJTc2JCqb4BQg0hk87ZFhminCfl+mD5OUI0rX2cgyu4kJOGA==}
+
+ '@vue/devtools-shared@8.1.5':
+ resolution: {integrity: sha512-mhT4zcPFhF+Xk1O4BfhhrbXzpmfqY03fS6xGpcllbQG7lDjhQf8pQHcTIhqQIYx1hfwtHmk/6jM96ele0UxPqQ==}
+
+ '@vue/reactivity@3.5.40':
+ resolution: {integrity: sha512-B7ot9UlUZOi1zbq61/LvE88ZLTV8IlajTdiZTAEiDQgrnIMIZoPr9kGw0Zw46ObW62O9+H/Be3kMbfb7kYPQZA==}
+
+ '@vue/runtime-core@3.5.40':
+ resolution: {integrity: sha512-KAZLweuZ6uUJPK1PMSQPgBU5gCjgrrfjUhSglmU9NhH+Zjepa8cnwSydPWDWHDwOgY4g3VcZ+PljbiHlURNCbw==}
+
+ '@vue/runtime-dom@3.5.40':
+ resolution: {integrity: sha512-ZfrX8ssZQds900L9pr8AuK05ddnMsR4MPMZr8cPN9GoqoPWcXLhjvvbIA2SMv+7a97sJ1vv9pj/zxK0Cq/eEFQ==}
+
+ '@vue/server-renderer@3.5.40':
+ resolution: {integrity: sha512-XNJym9WpevhTVt1HuwOrCRJ5Q+9z4BjTMrDtjTrvx74SmUll8spNTw6whWJa9mEkO4PKn5TihI/bm/8ds2QVJw==}
+
+ '@vue/shared@3.5.40':
+ resolution: {integrity: sha512-WxnBtruIqOoV3rA4jeKDWzrYI5h7Cp4+pjwDi8kWGHz+IslhiN+wguLVVhtv2l8VoU02rzDCVfDjgCl1lNpZVg==}
+
+ '@vueuse/core@14.3.0':
+ resolution: {integrity: sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==}
+ peerDependencies:
+ vue: ^3.5.0
+
+ '@vueuse/integrations@14.3.0':
+ resolution: {integrity: sha512-76I5FT2ESvCmCaSwapI+a/u/CFtNXmzl9f9lNp1hRtx8vKB8hfiokJr8IvQqcQG5ckGXElyXK516b54ozV3MvA==}
+ 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
+
+ '@vueuse/metadata@14.3.0':
+ resolution: {integrity: sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==}
+
+ '@vueuse/shared@14.3.0':
+ resolution: {integrity: sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==}
+ peerDependencies:
+ vue: ^3.5.0
+
+ birpc@2.9.0:
+ resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==}
+
+ ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+
+ character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+
+ character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+
+ entities@7.0.1:
+ resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
+ engines: {node: '>=0.12'}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ focus-trap@8.2.2:
+ resolution: {integrity: sha512-qV0g8hRYBqgACcFOH3f9wXc4zPKhr/0z9RI2a6ZijZ72EeBi4g8oBy8zAWuUR1TsMpOzwpUMFvjdasrC41Joug==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ hast-util-to-html@9.0.5:
+ resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==}
+
+ hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+
+ hookable@5.5.3:
+ resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
+
+ html-void-elements@3.0.0:
+ resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ mark.js@8.11.1:
+ resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==}
+
+ mdast-util-to-hast@13.2.1:
+ resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==}
+
+ micromark-util-character@2.1.1:
+ resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
+
+ micromark-util-encode@2.0.1:
+ resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
+
+ micromark-util-sanitize-uri@2.0.1:
+ resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
+
+ micromark-util-symbol@2.0.1:
+ resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
+
+ micromark-util-types@2.0.2:
+ resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==}
+
+ minisearch@7.2.0:
+ resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==}
+
+ nanoid@3.3.16:
+ resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ oniguruma-parser@0.12.2:
+ resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==}
+
+ oniguruma-to-es@4.3.6:
+ resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==}
+
+ perfect-debounce@2.1.0:
+ resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@4.0.5:
+ resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==}
+ engines: {node: '>=12'}
+
+ postcss@8.5.19:
+ resolution: {integrity: sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ property-information@7.2.0:
+ resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==}
+
+ regex-recursion@6.0.2:
+ resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==}
+
+ regex-utilities@2.3.0:
+ resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
+
+ regex@6.1.0:
+ resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==}
+
+ rolldown@1.1.5:
+ resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ shiki@4.3.1:
+ resolution: {integrity: sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw==}
+ engines: {node: '>=20'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
+ stringify-entities@4.0.4:
+ resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+
+ tabbable@6.5.0:
+ resolution: {integrity: sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==}
+
+ tinyglobby@0.2.17:
+ resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
+ engines: {node: '>=12.0.0'}
+
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ unist-util-is@6.0.1:
+ resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
+
+ unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+
+ unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+
+ unist-util-visit-parents@6.0.2:
+ resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
+
+ unist-util-visit@5.1.0:
+ resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
+
+ vfile-message@4.0.3:
+ resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==}
+
+ vfile@6.0.3:
+ resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+
+ vite@8.1.5:
+ resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.3.0
+ esbuild: ^0.27.0 || ^0.28.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ vitepress@2.0.0-alpha.18:
+ resolution: {integrity: sha512-Lk1G2/QqSf+MwNLICl9fmzWOtoCEwjZoWgaQy41QvWTfcGpLE9XwJDbcCyES/9rj6R2g1zFqFvLVkYKLLDALFw==}
+ hasBin: true
+ peerDependencies:
+ markdown-it-mathjax3: ^4
+ postcss: ^8
+ peerDependenciesMeta:
+ markdown-it-mathjax3:
+ optional: true
+ postcss:
+ optional: true
+
+ vue@3.5.40:
+ resolution: {integrity: sha512-+8PJ4SJXdn/cHGImF4CKdxlWHIN5Dkt7DoufRREM6h6uVCx2m7QxgcEQmmzyOK8A9mcafg7sFbJFYsdFVubTig==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+
+snapshots:
+
+ '@babel/helper-string-parser@7.29.7': {}
+
+ '@babel/helper-validator-identifier@7.29.7': {}
+
+ '@babel/parser@7.29.7':
+ dependencies:
+ '@babel/types': 7.29.7
+
+ '@babel/types@7.29.7':
+ dependencies:
+ '@babel/helper-string-parser': 7.29.7
+ '@babel/helper-validator-identifier': 7.29.7
+
+ '@docsearch/css@4.6.3': {}
+
+ '@docsearch/js@4.6.3': {}
+
+ '@docsearch/sidepanel-js@4.6.3': {}
+
+ '@emnapi/core@1.11.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.2
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.11.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.2.2':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@iconify-json/simple-icons@1.2.90':
+ dependencies:
+ '@iconify/types': 2.0.0
+
+ '@iconify/types@2.0.0': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
+ dependencies:
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@tybys/wasm-util': 0.10.3
+ optional: true
+
+ '@oxc-project/types@0.139.0': {}
+
+ '@rolldown/binding-android-arm64@1.1.5':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.1.5':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.1.5':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.1.5':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.1.5':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.1.5':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.1.5':
+ optional: true
+
+ '@rolldown/binding-linux-ppc64-gnu@1.1.5':
+ optional: true
+
+ '@rolldown/binding-linux-s390x-gnu@1.1.5':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.1.5':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.1.5':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.1.5':
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.1.5':
+ dependencies:
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.1.5':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.1.5':
+ optional: true
+
+ '@rolldown/pluginutils@1.0.1': {}
+
+ '@shikijs/core@4.3.1':
+ dependencies:
+ '@shikijs/primitive': 4.3.1
+ '@shikijs/types': 4.3.1
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.5
+ hast-util-to-html: 9.0.5
+
+ '@shikijs/engine-javascript@4.3.1':
+ dependencies:
+ '@shikijs/types': 4.3.1
+ '@shikijs/vscode-textmate': 10.0.2
+ oniguruma-to-es: 4.3.6
+
+ '@shikijs/engine-oniguruma@4.3.1':
+ dependencies:
+ '@shikijs/types': 4.3.1
+ '@shikijs/vscode-textmate': 10.0.2
+
+ '@shikijs/langs@4.3.1':
+ dependencies:
+ '@shikijs/types': 4.3.1
+
+ '@shikijs/primitive@4.3.1':
+ dependencies:
+ '@shikijs/types': 4.3.1
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.5
+
+ '@shikijs/themes@4.3.1':
+ dependencies:
+ '@shikijs/types': 4.3.1
+
+ '@shikijs/transformers@4.3.1':
+ dependencies:
+ '@shikijs/core': 4.3.1
+ '@shikijs/types': 4.3.1
+
+ '@shikijs/types@4.3.1':
+ dependencies:
+ '@shikijs/vscode-textmate': 10.0.2
+ '@types/hast': 3.0.5
+
+ '@shikijs/vscode-textmate@10.0.2': {}
+
+ '@tybys/wasm-util@0.10.3':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@types/hast@3.0.5':
+ dependencies:
+ '@types/unist': 3.0.3
+
+ '@types/linkify-it@5.0.0': {}
+
+ '@types/markdown-it@14.1.2':
+ dependencies:
+ '@types/linkify-it': 5.0.0
+ '@types/mdurl': 2.0.0
+
+ '@types/mdast@4.0.4':
+ dependencies:
+ '@types/unist': 3.0.3
+
+ '@types/mdurl@2.0.0': {}
+
+ '@types/unist@3.0.3': {}
+
+ '@types/web-bluetooth@0.0.21': {}
+
+ '@ungap/structured-clone@1.3.3': {}
+
+ '@vitejs/plugin-vue@6.0.8(vite@8.1.5)(vue@3.5.40)':
+ dependencies:
+ '@rolldown/pluginutils': 1.0.1
+ vite: 8.1.5
+ vue: 3.5.40
+
+ '@vue/compiler-core@3.5.40':
+ dependencies:
+ '@babel/parser': 7.29.7
+ '@vue/shared': 3.5.40
+ entities: 7.0.1
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
+
+ '@vue/compiler-dom@3.5.40':
+ dependencies:
+ '@vue/compiler-core': 3.5.40
+ '@vue/shared': 3.5.40
+
+ '@vue/compiler-sfc@3.5.40':
+ dependencies:
+ '@babel/parser': 7.29.7
+ '@vue/compiler-core': 3.5.40
+ '@vue/compiler-dom': 3.5.40
+ '@vue/compiler-ssr': 3.5.40
+ '@vue/shared': 3.5.40
+ estree-walker: 2.0.2
+ magic-string: 0.30.21
+ postcss: 8.5.19
+ source-map-js: 1.2.1
+
+ '@vue/compiler-ssr@3.5.40':
+ dependencies:
+ '@vue/compiler-dom': 3.5.40
+ '@vue/shared': 3.5.40
+
+ '@vue/devtools-api@8.1.5':
+ dependencies:
+ '@vue/devtools-kit': 8.1.5
+
+ '@vue/devtools-kit@8.1.5':
+ dependencies:
+ '@vue/devtools-shared': 8.1.5
+ birpc: 2.9.0
+ hookable: 5.5.3
+ perfect-debounce: 2.1.0
+
+ '@vue/devtools-shared@8.1.5': {}
+
+ '@vue/reactivity@3.5.40':
+ dependencies:
+ '@vue/shared': 3.5.40
+
+ '@vue/runtime-core@3.5.40':
+ dependencies:
+ '@vue/reactivity': 3.5.40
+ '@vue/shared': 3.5.40
+
+ '@vue/runtime-dom@3.5.40':
+ dependencies:
+ '@vue/reactivity': 3.5.40
+ '@vue/runtime-core': 3.5.40
+ '@vue/shared': 3.5.40
+ csstype: 3.2.3
+
+ '@vue/server-renderer@3.5.40':
+ dependencies:
+ '@vue/compiler-ssr': 3.5.40
+ '@vue/runtime-dom': 3.5.40
+ '@vue/shared': 3.5.40
+
+ '@vue/shared@3.5.40': {}
+
+ '@vueuse/core@14.3.0(vue@3.5.40)':
+ dependencies:
+ '@types/web-bluetooth': 0.0.21
+ '@vueuse/metadata': 14.3.0
+ '@vueuse/shared': 14.3.0(vue@3.5.40)
+ vue: 3.5.40
+
+ '@vueuse/integrations@14.3.0(focus-trap@8.2.2)(vue@3.5.40)':
+ dependencies:
+ '@vueuse/core': 14.3.0(vue@3.5.40)
+ '@vueuse/shared': 14.3.0(vue@3.5.40)
+ vue: 3.5.40
+ optionalDependencies:
+ focus-trap: 8.2.2
+
+ '@vueuse/metadata@14.3.0': {}
+
+ '@vueuse/shared@14.3.0(vue@3.5.40)':
+ dependencies:
+ vue: 3.5.40
+
+ birpc@2.9.0: {}
+
+ ccount@2.0.1: {}
+
+ character-entities-html4@2.1.0: {}
+
+ character-entities-legacy@3.0.0: {}
+
+ comma-separated-tokens@2.0.3: {}
+
+ csstype@3.2.3: {}
+
+ dequal@2.0.3: {}
+
+ detect-libc@2.1.2: {}
+
+ devlop@1.1.0:
+ dependencies:
+ dequal: 2.0.3
+
+ entities@7.0.1: {}
+
+ estree-walker@2.0.2: {}
+
+ fdir@6.5.0(picomatch@4.0.5):
+ optionalDependencies:
+ picomatch: 4.0.5
+
+ focus-trap@8.2.2:
+ dependencies:
+ tabbable: 6.5.0
+
+ fsevents@2.3.3:
+ optional: true
+
+ hast-util-to-html@9.0.5:
+ dependencies:
+ '@types/hast': 3.0.5
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.2.1
+ property-information: 7.2.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
+
+ hast-util-whitespace@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.5
+
+ hookable@5.5.3: {}
+
+ html-void-elements@3.0.0: {}
+
+ lightningcss-android-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
+
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
+
+ lightningcss@1.32.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ mark.js@8.11.1: {}
+
+ mdast-util-to-hast@13.2.1:
+ dependencies:
+ '@types/hast': 3.0.5
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.3.3
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.1
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.1.0
+ vfile: 6.0.3
+
+ micromark-util-character@2.1.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.2
+
+ micromark-util-encode@2.0.1: {}
+
+ micromark-util-sanitize-uri@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-encode: 2.0.1
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-symbol@2.0.1: {}
+
+ micromark-util-types@2.0.2: {}
+
+ minisearch@7.2.0: {}
+
+ nanoid@3.3.16: {}
+
+ oniguruma-parser@0.12.2: {}
+
+ oniguruma-to-es@4.3.6:
+ dependencies:
+ oniguruma-parser: 0.12.2
+ regex: 6.1.0
+ regex-recursion: 6.0.2
+
+ perfect-debounce@2.1.0: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@4.0.5: {}
+
+ postcss@8.5.19:
+ dependencies:
+ nanoid: 3.3.16
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ property-information@7.2.0: {}
+
+ regex-recursion@6.0.2:
+ dependencies:
+ regex-utilities: 2.3.0
+
+ regex-utilities@2.3.0: {}
+
+ regex@6.1.0:
+ dependencies:
+ regex-utilities: 2.3.0
+
+ rolldown@1.1.5:
+ dependencies:
+ '@oxc-project/types': 0.139.0
+ '@rolldown/pluginutils': 1.0.1
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.1.5
+ '@rolldown/binding-darwin-arm64': 1.1.5
+ '@rolldown/binding-darwin-x64': 1.1.5
+ '@rolldown/binding-freebsd-x64': 1.1.5
+ '@rolldown/binding-linux-arm-gnueabihf': 1.1.5
+ '@rolldown/binding-linux-arm64-gnu': 1.1.5
+ '@rolldown/binding-linux-arm64-musl': 1.1.5
+ '@rolldown/binding-linux-ppc64-gnu': 1.1.5
+ '@rolldown/binding-linux-s390x-gnu': 1.1.5
+ '@rolldown/binding-linux-x64-gnu': 1.1.5
+ '@rolldown/binding-linux-x64-musl': 1.1.5
+ '@rolldown/binding-openharmony-arm64': 1.1.5
+ '@rolldown/binding-wasm32-wasi': 1.1.5
+ '@rolldown/binding-win32-arm64-msvc': 1.1.5
+ '@rolldown/binding-win32-x64-msvc': 1.1.5
+
+ shiki@4.3.1:
+ 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.5
+
+ source-map-js@1.2.1: {}
+
+ space-separated-tokens@2.0.2: {}
+
+ stringify-entities@4.0.4:
+ dependencies:
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
+
+ tabbable@6.5.0: {}
+
+ tinyglobby@0.2.17:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.5)
+ picomatch: 4.0.5
+
+ trim-lines@3.0.1: {}
+
+ tslib@2.8.1:
+ optional: true
+
+ unist-util-is@6.0.1:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-position@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-stringify-position@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-visit-parents@6.0.2:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+
+ unist-util-visit@5.1.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
+
+ vfile-message@4.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-stringify-position: 4.0.0
+
+ vfile@6.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ vfile-message: 4.0.3
+
+ vite@8.1.5:
+ dependencies:
+ lightningcss: 1.32.0
+ picomatch: 4.0.5
+ postcss: 8.5.19
+ rolldown: 1.1.5
+ tinyglobby: 0.2.17
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ vitepress@2.0.0-alpha.18(postcss@8.5.19):
+ dependencies:
+ '@docsearch/css': 4.6.3
+ '@docsearch/js': 4.6.3
+ '@docsearch/sidepanel-js': 4.6.3
+ '@iconify-json/simple-icons': 1.2.90
+ '@shikijs/core': 4.3.1
+ '@shikijs/transformers': 4.3.1
+ '@shikijs/types': 4.3.1
+ '@types/markdown-it': 14.1.2
+ '@vitejs/plugin-vue': 6.0.8(vite@8.1.5)(vue@3.5.40)
+ '@vue/devtools-api': 8.1.5
+ '@vue/shared': 3.5.40
+ '@vueuse/core': 14.3.0(vue@3.5.40)
+ '@vueuse/integrations': 14.3.0(focus-trap@8.2.2)(vue@3.5.40)
+ focus-trap: 8.2.2
+ mark.js: 8.11.1
+ minisearch: 7.2.0
+ shiki: 4.3.1
+ vite: 8.1.5
+ vue: 3.5.40
+ optionalDependencies:
+ postcss: 8.5.19
+ transitivePeerDependencies:
+ - '@types/node'
+ - '@vitejs/devtools'
+ - async-validator
+ - axios
+ - change-case
+ - drauu
+ - esbuild
+ - fuse.js
+ - idb-keyval
+ - jiti
+ - jwt-decode
+ - less
+ - nprogress
+ - qrcode
+ - sass
+ - sass-embedded
+ - sortablejs
+ - stylus
+ - sugarss
+ - terser
+ - tsx
+ - typescript
+ - universal-cookie
+ - yaml
+
+ vue@3.5.40:
+ dependencies:
+ '@vue/compiler-dom': 3.5.40
+ '@vue/compiler-sfc': 3.5.40
+ '@vue/runtime-dom': 3.5.40
+ '@vue/server-renderer': 3.5.40
+ '@vue/shared': 3.5.40
+
+ zwitch@2.0.4: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
new file mode 100644
index 0000000..24a72ca
--- /dev/null
+++ b/pnpm-workspace.yaml
@@ -0,0 +1,3 @@
+allowBuilds:
+ '@parcel/watcher': true
+ esbuild: true
diff --git a/wrangler.jsonc b/wrangler.jsonc
new file mode 100644
index 0000000..d4012a1
--- /dev/null
+++ b/wrangler.jsonc
@@ -0,0 +1,7 @@
+// -*- mode: json-ts; -*-
+{
+ "$schema": "node_modules/wrangler/config-schema.json",
+ "name": "config-phundrak-com",
+ "pages_build_output_dir": ".vitepress/dist/",
+ "compatibility_date": "2026-07-11"
+}