├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .github └── workflows │ └── release.yml ├── .gitignore ├── .gitmodules ├── .npmrc ├── CHANGELOG.md ├── LICENSE ├── README.md ├── Test Vault ├── .obsidian │ ├── app.json │ ├── community-plugins.json │ ├── core-plugins-migration.json │ ├── core-plugins.json │ ├── custom-postcss.css │ ├── custom-tailwind.txt │ ├── graph.json │ └── tailwind-theme.json ├── Custom PostCSS Entrypoint.md ├── Custom Tailwind Entrypoint.md ├── Custom Tailwind Theme.md ├── Main.md ├── Prefix Selector.md └── Preflight.md ├── dependency_licenses.txt ├── esbuild.config.mjs ├── main.ts ├── manifest.json ├── package-lock.json ├── package.json ├── settings.ts ├── src ├── log.ts └── paint-roller.ts ├── styles.css ├── tailwind.css ├── tsconfig.json ├── version-bump.mjs └── versions.json /.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | end_of_line = lf 7 | insert_final_newline = true 8 | indent_style = space 9 | indent_size = 2 10 | tab_width = 2 11 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | 3 | main.js 4 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "env": { "node": true }, 5 | "plugins": [ 6 | "@typescript-eslint" 7 | ], 8 | "extends": [ 9 | "eslint:recommended", 10 | "plugin:@typescript-eslint/eslint-recommended", 11 | "plugin:@typescript-eslint/recommended" 12 | ], 13 | "parserOptions": { 14 | "sourceType": "module" 15 | }, 16 | "rules": { 17 | "no-unused-vars": "off", 18 | "@typescript-eslint/no-unused-vars": ["error", { "args": "none" }], 19 | "@typescript-eslint/ban-ts-comment": "off", 20 | "no-prototype-builtins": "off", 21 | "@typescript-eslint/no-empty-function": "off" 22 | } 23 | } -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release Obsidian plugin 2 | 3 | on: 4 | push: 5 | tags: 6 | - "*" 7 | 8 | env: 9 | PLUGIN_NAME: tailwind-snippet 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - uses: actions/checkout@v3 17 | 18 | - name: Use Node.js 19 | uses: actions/setup-node@v3 20 | with: 21 | node-version: "20.x" 22 | 23 | - name: Bake license information 24 | run: | 25 | cp main.ts main_license_baked.ts 26 | cat dependency_licenses.txt >> main_license_baked.ts 27 | 28 | - name: Build plugin 29 | run: | 30 | npm install 31 | npm run build -- main_license_baked.ts 32 | 33 | - name: Create release 34 | env: 35 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 36 | FILES: "main.js manifest.json styles.css tailwind.css preflight.css" 37 | run: | 38 | cp ./node_modules/tailwindcss/lib/css/preflight.css . 39 | # Adapted from https://github.com/pjeby/hot-reload/blob/master/.github/workflows/publish.yml 40 | mkdir "${PLUGIN_NAME}" 41 | cp ${FILES} "${PLUGIN_NAME}/" 42 | zip -r "$PLUGIN_NAME".zip "$PLUGIN_NAME" 43 | 44 | tag="${GITHUB_REF#refs/tags/}" 45 | 46 | gh release create "$tag" \ 47 | --title="$tag" \ 48 | --draft \ 49 | "${PLUGIN_NAME}".zip ${FILES} 50 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | main_license_baked.ts 2 | 3 | # vscode 4 | .vscode 5 | 6 | # Intellij 7 | *.iml 8 | .idea 9 | 10 | # npm 11 | node_modules 12 | 13 | # Don't include the compiled main.js file in the repo. 14 | # They should be uploaded to GitHub releases instead. 15 | main.js 16 | 17 | # Exclude sourcemaps 18 | *.map 19 | 20 | # obsidian 21 | data.json 22 | 23 | # Exclude macOS Finder (System Explorer) View States 24 | .DS_Store 25 | 26 | # Exclude preflight stylesheet copied from tailwindcss package 27 | preflight.css 28 | 29 | # Exclude most test vault workspace files 30 | Test\ Vault/.obsidian/app.json 31 | Test\ Vault/.obsidian/appearance.json 32 | Test\ Vault/.obsidian/core-plugins-migration.json 33 | Test\ Vault/.obsidian/core-plugins.json 34 | Test\ Vault/.obsidian/graph.json 35 | Test\ Vault/.obsidian/workspace.json 36 | 37 | # Exclude files that are copied into or generated in test vault 38 | Test\ Vault/.obsidian/plugins/tailwind-snippet 39 | Test\ Vault/.obsidian/snippets/tailwind.css 40 | 41 | # Exclude other plugin 42 | Test\ Vault/.obsidian/plugins/dataview 43 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "Test Vault/.obsidian/plugins/hot-reload"] 2 | path = Test Vault/.obsidian/plugins/hot-reload 3 | url = https://github.com/pjeby/hot-reload.git 4 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | tag-version-prefix="" -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 6 | and this project adheres to 7 | [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | ## [Unreleased] 18 | 19 | ## [0.6.4] - 2025-02-23 20 | 21 | ### Added 22 | 23 | - Note on Tailwind versions 24 | 25 | ### Changed 26 | 27 | - Updated non-tailwind dependencies 28 | 29 | ## [0.6.3] - 2024-09-05 30 | 31 | ### Changed 32 | 33 | - Refactor plugin `id` import to `this.manifest.id` reference. 34 | - Move `log.ts` and `paint-roller.ts` to a new `src/` directory. 35 | - Use `this.manifest.dir`. 36 | 37 | ### Fixed 38 | 39 | - Removed old plugin id values from the test vault's plugins list. 40 | 41 | ## [0.6.2] - 2024-08-18 42 | 43 | ### Added 44 | 45 | - Non-affiliation disclaimer in `README.md`. 46 | 47 | ### Changed 48 | 49 | - Check for `instanceof` `FileSystemAdapter` instead of type casting. 50 | 51 | ## [0.6.1] - 2024-08-16 52 | 53 | ### Fixed 54 | 55 | - Added `styles.css` to GitHub release. 56 | 57 | ## [0.6.0] - 2024-08-16 58 | 59 | ### Changed 60 | 61 | - Change project name to `tailwind-snippet-obsidian-plugin` and plugin id to `tailwind-snippet`. 62 | - Change class names to `TailwindSnippet`. 63 | - Change `SettingsTab` to `SettingTab`. 64 | 65 | ## [0.5.1] - 2024-08-14 66 | 67 | ### Changed 68 | 69 | - Use NodeJS version 20 in GitHub release workflow. 70 | - Formatting rules (2 spaces instead of tabs). 71 | - Altered descriptions for some settings. 72 | 73 | ## [0.5.0] - 2024-08-13 74 | 75 | ### Added 76 | 77 | - Ribbon icon to manually refresh the generated CSS snippet. 78 | - The `debug` NPM package as a dependency. 79 | - Notices 80 | - On manual refreshes 81 | - On errors 82 | - Safeguard and visual feedback for file-based settings. 83 | - Test page for custom Tailwind entrypoints, using dataview. 84 | 85 | ## [0.4.1] - 2024-08-01 86 | 87 | ### Added 88 | 89 | - Test Obsidian vault. 90 | 91 | ### Changed 92 | 93 | - Better README 94 | - Formatted code 95 | - Changed wording in plugin settings 96 | 97 | ## [0.4.0] - 2024-07-30 98 | 99 | ### Changed 100 | 101 | - Updated all dependencies. 102 | - Updated year in LICENSE file. 103 | 104 | ## [0.3.1] - 2023-08-30 105 | 106 | ### Changed 107 | 108 | - Skip main routine if no content is found for TailwindCSS to process. 109 | 110 | ### Fixed 111 | 112 | - Use correct value for plugin name that is also the name of the release 113 | archive. 114 | - Create snippets directory during onload if it does not already exist. 115 | 116 | ## [0.3.0] - 2023-07-30 117 | 118 | ### Added 119 | 120 | - Added `margin-left` to prefix selector setting to denote its dependency on 121 | the prefix selector toggle. 122 | - Custom TailwindCSS/PostCSS entrypoint setting. 123 | - Custom TailwindCSS theme setting. 124 | - Custom TailwindCSS content setting. 125 | 126 | ### Changed 127 | 128 | - Refactor `enablePrefixer` to `addPrefixSelector`. 129 | 130 | ### Fixed 131 | 132 | - Dynamically enable and disable the prefix selector setting when the feature 133 | is toggled. 134 | - Removed 'obsidian' from plugin ID in `manifest.json`. 135 | - Removed 'obsidian' from plugin ID in `README.md` installation instructions. 136 | 137 | ## [0.2.2] - 2023-07-01 138 | 139 | ### Added 140 | 141 | - Developer notes in README. 142 | 143 | ### Fixed 144 | 145 | - Use new name of plugin when referencing static files. 146 | 147 | ## [0.2.1] - 2023-06-27 148 | 149 | ### Added 150 | 151 | - Installation instructions. 152 | 153 | ### Fixed 154 | 155 | - Added `tailwind.css` and `preflight.css` to the release. 156 | 157 | ## [0.2.0] - 2023-06-25 158 | 159 | ### Added 160 | 161 | - MIT License with credits to packaged dependencies 162 | - Users can prefix all of Tailwind's styles with a configurable CSS selector. 163 | 164 | ## [0.1.0] - 2023-06-22 165 | 166 | ### Added 167 | 168 | - Created the Unofficial TailwindCSS Obsidian Plugin, which uses TailwindCSS 169 | and PostCSS to generate a CSS snippet from a vault's Markdown files. 170 | - Users can opt to enable TailwindCSS's Preflight styles. 171 | 172 | [unreleased]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.6.4...HEAD 173 | [0.6.4]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.6.3...0.6.4 174 | [0.6.3]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.6.2...0.6.3 175 | [0.6.2]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.6.1...0.6.2 176 | [0.6.1]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.6.0...0.6.1 177 | [0.6.0]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.5.1...0.6.0 178 | [0.5.1]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.5.0...0.5.1 179 | [0.5.0]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.4.1...0.5.0 180 | [0.4.1]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.4.0...0.4.1 181 | [0.4.0]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.3.1...0.4.0 182 | [0.3.1]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.3.0...0.3.1 183 | [0.3.0]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.2.2...0.3.0 184 | [0.2.2]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.2.1...0.2.2 185 | [0.2.1]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.2.0...0.2.1 186 | [0.2.0]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/compare/0.1.0...0.2.0 187 | [0.1.0]: https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin/releases/tag/0.1.0 188 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Nicholas Wilcox 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tailwind Snippet Obsidian Plugin 2 | 3 | This plugin uses [TailwindCSS](https://tailwindcss.com/) as a 4 | [PostCSS](https://postcss.org/) plugin to generate a CSS snippet in your Obsidian 5 | vault. 6 | 7 | ## Disclaimer 8 | 9 | This repository and its author are not affiliated with Tailwind. 10 | 11 | ## How it works 12 | 13 | This plugin implements 14 | [Tailwind's PostCSS installation guide](https://tailwindcss.com/docs/installation/using-postcss) 15 | with the [`postcss`](https://postcss.org/api/) JavaScript API. This produces a 16 | CSS snippet which **you must manually enable** once it is created. This snippet 17 | will automatically update based on changes to your files and settings. 18 | 19 | This plugin makes use of the 20 | [FileSystemAdapter](https://docs.obsidian.md/Reference/TypeScript+API/FileSystemAdapter/FileSystemAdapter) 21 | API to read and write files in your vault's configuration directory. 22 | 23 | This plugin adds a ribbon icon that allows you to manually trigger a refresh of 24 | the generated CSS snippet. This can be useful when non-Markdown files contain 25 | Tailwind classes. 26 | 27 | If you aren't seeing changes that you expect, you may need to manually restart 28 | the plugin. 29 | 30 | ## Note on Tailwind versions 31 | 32 | **This plugin is made with Tailwind v3. There are no plans to update this plugin to work 33 | with the latest Tailwind version, v4.** 34 | 35 | Briefly put, Tailwind v4 has sufficiently refactored and optimized the PostCSS plugin method of using Tailwind, 36 | such that it is difficult if not impossible for me to reconcile Tailwind v4 with the Obsidian runtime environment (i.e., Electron). 37 | 38 | For those who are curious, you are welcome to clone this repository, upgrade to the latest Tailwind version, 39 | and observe the resulting `esbuild` errors. 40 | 41 | ## Settings 42 | 43 | ### Preflight 44 | 45 | [Preflight](https://tailwindcss.com/docs/preflight) is a set of base styles that 46 | Tailwind injects into its `@tailwind base` directive. More literally, 47 | [`preflight`](https://github.com/tailwindlabs/tailwindcss/blob/master/src/corePlugins.js#L494) 48 | is one of Tailwind's core plugins, and it parses a static stylesheet named 49 | [`preflight.css`](https://github.com/tailwindlabs/tailwindcss/blob/master/src/css/preflight.css), 50 | feeding the styles into its `addBase` utility function. 51 | 52 | However, the `preflight` plugin uses `__dirname` and `path.join` to locate the 53 | stylesheet, which results in an error in the context of the Obsidian application 54 | built with [Electron](https://www.electronjs.org/). Additionally, Preflight 55 | styles conflict with Obsidian's base styles such that: 56 | 57 | 1. the Obsidian UI is affected by Preflight styles, and 58 | 2. some Preflight styles are overshadowed by Obsidian styles. 59 | 60 | Therefore, this plugin (the `tailwind-snippet` plugin) does not 61 | apply Preflight styles by default. You can enable Preflight in the plugin 62 | settings, which will direct the plugin to source a packaged copy of 63 | `preflight.css` using the Obsidian API. 64 | 65 | ### Prefix selector 66 | 67 | You may also control what is affected by Tailwind's CSS rules by enabling this 68 | plugin's prefix selector option. This will add a prefix (default `.tailwind`) to 69 | all CSS selectors using a 70 | [descendant combinator](https://developer.mozilla.org/en-US/docs/Web/CSS/Descendant_combinator). 71 | so that `.a, #foo.bar` becomes `.tailwind .a, .tailwind #foo.bar`. 72 | 73 | You can configure this so that only certain notes (or even certain sections of 74 | notes) are affected by Tailwind. 75 | 76 | #### Combining with Preflight setting 77 | 78 | You may have mixed success with the Preflight setting described above. If 79 | Obsidian's CSS rules are taking precedence over Preflight's styles, then setting 80 | a prefix selector may help Preflight take control. 81 | 82 | ### PostCSS entrypoint 83 | 84 | By default, this plugin will use Tailwind's default input template, which 85 | combines three of its directives: 86 | 87 | ```css 88 | @tailwind base; 89 | @tailwind components; 90 | @tailwind utilities; 91 | ``` 92 | 93 | You can specify a custom entrypoint using a file path that is relative to your 94 | vault's configuration directory (`.obsidian/`. This is useful if you want to use 95 | Tailwind's `@layer` directive for your own purposes. 96 | 97 | See 98 | [Using CSS and @layer](https://tailwindcss.com/docs/adding-custom-styles#using-css-and-layer) 99 | from Tailwind's documentation for more information. 100 | 101 | ### Tailwind theme 102 | 103 | You can specify a custom Tailwind theme using a file path that is relative to 104 | your vault's configuration directory. The file contents should be a JSON object. 105 | This is useful if you want to replace or extend Tailwind's default theme. 106 | 107 | Two caveats to this setting: 108 | 109 | - This is different from the entire Tailwind configuration object. You may 110 | **not** use a `tailwind.config.js` file that exports a JavaScipt module. 111 | - You may **not** 112 | [dynamically reference other values](https://tailwindcss.com/docs/theme#referencing-other-values) 113 | or the 114 | [default theme](https://tailwindcss.com/docs/theme#referencing-other-values). 115 | 116 | For now, you are limited to the themes you can define with a static JSON file. 117 | 118 | ### Tailwind entrypoints 119 | 120 | You can specify file globs relative to your vault's configuration directory that 121 | will be included in Tailwind's process. This is helpful if other files contain 122 | Tailwind CSS class names and use them to dynamically generate Markdown content. 123 | 124 | ## Developer Notes 125 | 126 | This is a fork of Obsidian's sample plugin repository. Changes other than 127 | implementing this plugin include: 128 | 129 | - Adding `predev` and `prebuild` NPM scripts to automatically copy Tailwind's 130 | `preflight.css` file from `node_modules` into the project root. 131 | - Various modifications to the release GitHub workflow. 132 | - Adding a custom `esbuild` plugin to copy this plugin's files into a test 133 | vault. 134 | 135 | ### Test Vault 136 | 137 | This repository contains an example Obsidian vault to showcase and test the 138 | plugin's functionality. You will need to enable this plugin after initially 139 | opening the folder in Obsidian, and then you must enable the generated CSS 140 | snippet after that to see the effects. 141 | 142 | ### `hot-reload` 143 | 144 | This repository also declares pjeby's 145 | [`hot-reload`](https://github.com/pjeby/hot-reload) plugin as a submodule within 146 | the test vault's `.obsidian/plugins/` directory. In order to actually download 147 | `hot-reload`, you must run the following commands after cloning this repository: 148 | 149 | ```bash 150 | git submodule init 151 | git submodule update 152 | ``` 153 | 154 | After that, you should be able to run `npm run dev` and then open the vault. 155 | -------------------------------------------------------------------------------- /Test Vault/.obsidian/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "vimMode": true, 3 | "livePreview": false 4 | } -------------------------------------------------------------------------------- /Test Vault/.obsidian/community-plugins.json: -------------------------------------------------------------------------------- 1 | [ 2 | "hot-reload", 3 | "dataview", 4 | "tailwind-snippet" 5 | ] -------------------------------------------------------------------------------- /Test Vault/.obsidian/core-plugins-migration.json: -------------------------------------------------------------------------------- 1 | { 2 | "file-explorer": true, 3 | "global-search": true, 4 | "switcher": true, 5 | "graph": true, 6 | "backlink": true, 7 | "canvas": true, 8 | "outgoing-link": true, 9 | "tag-pane": true, 10 | "properties": false, 11 | "page-preview": true, 12 | "daily-notes": true, 13 | "templates": true, 14 | "note-composer": true, 15 | "command-palette": true, 16 | "slash-command": false, 17 | "editor-status": true, 18 | "bookmarks": true, 19 | "markdown-importer": false, 20 | "zk-prefixer": false, 21 | "random-note": false, 22 | "outline": true, 23 | "word-count": true, 24 | "slides": false, 25 | "audio-recorder": false, 26 | "workspaces": false, 27 | "file-recovery": true, 28 | "publish": false, 29 | "sync": false 30 | } -------------------------------------------------------------------------------- /Test Vault/.obsidian/core-plugins.json: -------------------------------------------------------------------------------- 1 | { 2 | "file-explorer": true, 3 | "global-search": true, 4 | "switcher": true, 5 | "graph": true, 6 | "backlink": true, 7 | "canvas": true, 8 | "outgoing-link": true, 9 | "tag-pane": true, 10 | "properties": false, 11 | "page-preview": true, 12 | "daily-notes": true, 13 | "templates": true, 14 | "note-composer": true, 15 | "command-palette": true, 16 | "slash-command": false, 17 | "editor-status": true, 18 | "bookmarks": true, 19 | "markdown-importer": false, 20 | "zk-prefixer": false, 21 | "random-note": false, 22 | "outline": true, 23 | "word-count": true, 24 | "slides": false, 25 | "audio-recorder": false, 26 | "workspaces": false, 27 | "file-recovery": true, 28 | "publish": false, 29 | "sync": false, 30 | "webviewer": false 31 | } -------------------------------------------------------------------------------- /Test Vault/.obsidian/custom-postcss.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer base { 6 | .divClass { 7 | @apply border-red-500 border-solid border-[1rem] p-4 max-w-[65ch]; 8 | } 9 | 10 | .pClass { 11 | @apply text-center text-xl font-bold tracking-wide; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Test Vault/.obsidian/custom-tailwind.txt: -------------------------------------------------------------------------------- 1 | This file contains Tailwind classnames that are used in a test page. 2 | Because the page itself doesn't use the classname properly, 3 | you need to manually add it to the plugin settings. 4 | 5 | p-8 6 | -------------------------------------------------------------------------------- /Test Vault/.obsidian/graph.json: -------------------------------------------------------------------------------- 1 | { 2 | "collapse-filter": true, 3 | "search": "", 4 | "showTags": false, 5 | "showAttachments": false, 6 | "hideUnresolved": false, 7 | "showOrphans": true, 8 | "collapse-color-groups": true, 9 | "colorGroups": [], 10 | "collapse-display": true, 11 | "showArrow": false, 12 | "textFadeMultiplier": 0, 13 | "nodeSizeMultiplier": 1, 14 | "lineSizeMultiplier": 1, 15 | "collapse-forces": true, 16 | "centerStrength": 0.518713248970312, 17 | "repelStrength": 10, 18 | "linkStrength": 1, 19 | "linkDistance": 250, 20 | "scale": 1, 21 | "close": true 22 | } -------------------------------------------------------------------------------- /Test Vault/.obsidian/tailwind-theme.json: -------------------------------------------------------------------------------- 1 | { 2 | "extend": { 3 | "colors": { 4 | "blue": "#1fb6ff", 5 | "pink": "#ff49db", 6 | "orange": "#ff7849", 7 | "green": "#13ce66" 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Test Vault/Custom PostCSS Entrypoint.md: -------------------------------------------------------------------------------- 1 |
2 |

3 | This page uses CSS class defined Tailwind directives. 4 | It will only be styled if you configure custom-postcss.css as a custom PostCSS entrypoint. 5 |

6 |
7 | -------------------------------------------------------------------------------- /Test Vault/Custom Tailwind Entrypoint.md: -------------------------------------------------------------------------------- 1 | This page tests custom Tailwind entrypoints. This feature is useful when non-Markdown files in your vault contain Tailwind CSS classnames and use them to dynamically generate Markdown content. 2 | 3 | This example uses the [Dataview](https://github.com/blacksmithgu/obsidian-dataview) plugin in a contrived way to produce a paragraph with some classnames. One classname uses an interpolated string, which breaks Tailwind (see notes on [dynamic class names](https://tailwindcss.com/docs/content-configuration#dynamic-class-names)). 4 | 5 | Realistically, you might have some other template files that use proper Tailwind classnames, but still aren't a part of your vault's Markdown files. 6 | 7 | If you list `custom-tailwind.txt` in the custom Tailwind entrypoint list, then the paragraph below should gain some padding. 8 | 9 | ```dataviewjs 10 | const paddingAmount = 8; 11 | dv.el( 12 | 'p', 13 | 'This paragraph is rendered using the Dataview plugin', 14 | { 15 | cls: `border-red-500 border-solid p-${paddingAmount}` 16 | } 17 | ); 18 | ``` 19 | -------------------------------------------------------------------------------- /Test Vault/Custom Tailwind Theme.md: -------------------------------------------------------------------------------- 1 |
2 |

3 | This page uses colors defined in a custom Tailwind theme. 4 | You must configure tailwind-theme.json as the custom theme file 5 | in order to see the different colors. 6 |

7 |
8 | -------------------------------------------------------------------------------- /Test Vault/Main.md: -------------------------------------------------------------------------------- 1 |
2 |

3 | This paragraph is contained in a <div>. 4 | Both elements are styled using TailwindCSS classnames. 5 |

6 |
7 | -------------------------------------------------------------------------------- /Test Vault/Prefix Selector.md: -------------------------------------------------------------------------------- 1 | --- 2 | cssclass: tailwind 3 | --- 4 | 5 |
6 |

7 | This page will still be styled if you enable the CSS selector prefix option 8 | and the prefix value is .tailwind, whereas the Main test page 9 | will not be styled. 10 |

11 |
12 | -------------------------------------------------------------------------------- /Test Vault/Preflight.md: -------------------------------------------------------------------------------- 1 | --- 2 | cssclass: tailwind 3 | --- 4 | 5 |
6 |

Hello, world!

7 |

These <h> elements will be unstyled when you enable Tailwind's Preflight plugin.

8 |

You may need to use the prefix selector option to overide Obsidian's styles.

9 |
10 | -------------------------------------------------------------------------------- /dependency_licenses.txt: -------------------------------------------------------------------------------- 1 | /*! @license 2 | * 3 | * License Information 4 | * - 5 | * autoprefixer - Copyright 2013 Andrey Sitnik 6 | * 7 | * Permission is hereby granted, free of charge, to any person obtaining a copy of 8 | * this software and associated documentation files (the "Software"), to deal in 9 | * the Software without restriction, including without limitation the rights to 10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 11 | * the Software, and to permit persons to whom the Software is furnished to do so, 12 | * subject to the following conditions: 13 | * 14 | * The above copyright notice and this permission notice shall be included in all 15 | * copies or substantial portions of the Software. 16 | * 17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | * - 24 | * debug - Copyright (c) 2014-2017 TJ Holowaychuk Copyright (c) 2018-2021 Josh Junon 25 | * 26 | * Permission is hereby granted, free of charge, to any person obtaining a copy of 27 | * this software and associated documentation files (the 'Software'), to deal in the 28 | * Software without restriction, including without limitation the rights to use, copy, 29 | * modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, 30 | * and to permit persons to whom the Software is furnished to do so, subject to the 31 | * following conditions: 32 | * 33 | * The above copyright notice and this permission notice shall be included in all 34 | * copies or substantial portions of the Software. 35 | * 36 | * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 37 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 38 | * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 39 | * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 40 | * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 41 | * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 42 | * - 43 | * postcss - Copyright 2013 Andrey Sitnik 44 | * 45 | * Permission is hereby granted, free of charge, to any person obtaining a copy of 46 | * this software and associated documentation files (the "Software"), to deal in 47 | * the Software without restriction, including without limitation the rights to 48 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 49 | * the Software, and to permit persons to whom the Software is furnished to do so, 50 | * subject to the following conditions: 51 | * 52 | * The above copyright notice and this permission notice shall be included in all 53 | * copies or substantial portions of the Software. 54 | * 55 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 56 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 57 | * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 58 | * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 59 | * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 60 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 61 | * - 62 | * postcss-prefix-selector - Copyright (c) 2015-2017 Jonathan Ong me@jongleberry.com 63 | * 64 | * Permission is hereby granted, free of charge, to any person obtaining a copy 65 | * of this software and associated documentation files (the "Software"), to deal 66 | * in the Software without restriction, including without limitation the rights 67 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 68 | * copies of the Software, and to permit persons to whom the Software is 69 | * furnished to do so, subject to the following conditions: 70 | * 71 | * The above copyright notice and this permission notice shall be included in 72 | * all copies or substantial portions of the Software. 73 | * 74 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 75 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 76 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 77 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 78 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 79 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 80 | * THE SOFTWARE. 81 | * - 82 | * tailwindcss - Copyright (c) Tailwind Labs, Inc. 83 | * 84 | * Permission is hereby granted, free of charge, to any person obtaining a copy 85 | * of this software and associated documentation files (the "Software"), to deal 86 | * in the Software without restriction, including without limitation the rights 87 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 88 | * copies of the Software, and to permit persons to whom the Software is 89 | * furnished to do so, subject to the following conditions: 90 | * 91 | * The above copyright notice and this permission notice shall be included in all 92 | * copies or substantial portions of the Software. 93 | * 94 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 95 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 96 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 97 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 98 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 99 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 100 | * SOFTWARE. 101 | */ 102 | -------------------------------------------------------------------------------- /esbuild.config.mjs: -------------------------------------------------------------------------------- 1 | import esbuild from "esbuild"; 2 | import process from "process"; 3 | import builtins from "builtin-modules"; 4 | import { copyFile, mkdir, writeFile } from "fs/promises"; 5 | import { resolve } from "path"; 6 | import { existsSync } from "fs"; 7 | 8 | const banner = `/* 9 | THIS IS A GENERATED/BUNDLED FILE BY ESBUILD 10 | if you want to view the source, please visit the github repository of this plugin 11 | */ 12 | `; 13 | 14 | const testVaultPluginPath = "Test Vault/.obsidian/plugins/tailwind-snippet"; 15 | const hotReloadPath = resolve(testVaultPluginPath, ".hotreload"); 16 | const pluginFiles = [ 17 | "main.js", 18 | "manifest.json", 19 | "tailwind.css", 20 | "preflight.css", 21 | "styles.css", 22 | ]; 23 | 24 | const prod = process.argv[2] === "production"; 25 | const entry = process.argv[3] ?? "main.ts"; 26 | 27 | const context = await esbuild.context({ 28 | banner: { 29 | js: banner, 30 | }, 31 | entryPoints: [entry], 32 | bundle: true, 33 | external: [ 34 | "obsidian", 35 | "electron", 36 | "@codemirror/autocomplete", 37 | "@codemirror/collab", 38 | "@codemirror/commands", 39 | "@codemirror/language", 40 | "@codemirror/lint", 41 | "@codemirror/search", 42 | "@codemirror/state", 43 | "@codemirror/view", 44 | "@lezer/common", 45 | "@lezer/highlight", 46 | "@lezer/lr", 47 | ...builtins, 48 | ], 49 | format: "cjs", 50 | target: "esnext", 51 | logLevel: "info", 52 | sourcemap: prod ? false : "inline", 53 | treeShaking: true, 54 | outfile: "main.js", 55 | plugins: [ 56 | { 57 | name: "Copy build to test vault", 58 | setup(build) { 59 | build.onEnd(async (result) => { 60 | if (!result.errors.length) { 61 | try { 62 | if (!existsSync(testVaultPluginPath)) { 63 | console.log(`Creating directory "${testVaultPluginPath}"`); 64 | await mkdir(testVaultPluginPath); 65 | } 66 | for (const file of pluginFiles) { 67 | await copyFile(file, resolve(testVaultPluginPath, file)); 68 | 69 | // This is to make hot-reload work 70 | if (!existsSync(hotReloadPath)) { 71 | console.log(`Creating file "${hotReloadPath}"`); 72 | await writeFile(hotReloadPath, ""); 73 | } 74 | } 75 | } catch (e) { 76 | console.error(`Error when copying build.\n${e.toString()}`); 77 | } 78 | } 79 | }); 80 | }, 81 | }, 82 | ], 83 | }); 84 | 85 | if (prod) { 86 | await context.rebuild(); 87 | process.exit(0); 88 | } else { 89 | await context.watch(); 90 | } 91 | -------------------------------------------------------------------------------- /main.ts: -------------------------------------------------------------------------------- 1 | import { 2 | FileSystemAdapter, 3 | Plugin, 4 | normalizePath, 5 | addIcon, 6 | Notice, 7 | DataAdapter, 8 | } from "obsidian"; 9 | import postcss, { AcceptedPlugin } from "postcss"; 10 | import prefixer from "postcss-prefix-selector"; 11 | import autoprefixer from "autoprefixer"; 12 | import tailwindcss, { Config as TailwindConfig } from "tailwindcss"; 13 | import { version as tailwindVersion } from "tailwindcss/package.json"; 14 | import plugin from "tailwindcss/plugin"; 15 | import { 16 | TailwindSnippetPluginSettings, 17 | DEFAULT_SETTINGS, 18 | SettingTab, 19 | } from "./settings"; 20 | import { paintRollerSvg } from "src/paint-roller"; 21 | import { INFO, DEBUG, ERROR } from "src/log"; 22 | 23 | export default class TailwindSnippetPlugin extends Plugin { 24 | settings: TailwindSnippetPluginSettings; 25 | preflightPlugin: NonNullable[number]; 26 | 27 | get vault() { 28 | return this.app.vault; 29 | } 30 | 31 | get adapter(): DataAdapter { 32 | return this.app.vault.adapter; 33 | } 34 | 35 | get tailwindPlugins() { 36 | return this.settings.enablePreflight ? [this.preflightPlugin] : []; 37 | } 38 | 39 | async onload() { 40 | try { 41 | await this.loadSettings(); 42 | await this.initPreflightPlugin(); 43 | await this.checkSnippetsDirectory(); 44 | await this.doTailwind(); 45 | this.registerEvent(this.vault.on("modify", () => this.doTailwind())); 46 | this.addSettingTab(new SettingTab(this.app, this)); 47 | 48 | addIcon("paint-roller", paintRollerSvg); 49 | this.addRibbonIcon( 50 | "paint-roller", 51 | "Refresh tailwind.css snippet", 52 | async () => { 53 | try { 54 | await this.doTailwind(); 55 | new Notice("Refreshed tailwind.css snippet."); 56 | } catch (e) { 57 | this.handleError(e); 58 | } 59 | }, 60 | ); 61 | } catch (e) { 62 | this.handleError(e); 63 | } 64 | } 65 | 66 | onunload() {} 67 | 68 | handleError(e: Error) { 69 | console.error(e); 70 | ERROR(e.toString()); 71 | new Notice(e.toString()); 72 | } 73 | 74 | async loadSettings() { 75 | this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); 76 | } 77 | 78 | async saveSettings() { 79 | await this.saveData(this.settings); 80 | await this.doTailwind(); 81 | } 82 | 83 | async initPreflightPlugin() { 84 | const preflight = normalizePath(`${this.manifest.dir}/preflight.css`); 85 | const preflightStyles = postcss.parse(await this.adapter.read(preflight)); 86 | 87 | // This is an altered version of the original preflight plugin. 88 | this.preflightPlugin = plugin(({ addBase }) => { 89 | addBase([ 90 | // @ts-ignore 91 | postcss.comment({ 92 | // @ts-ignore 93 | text: `! tailwindcss v${tailwindVersion} | MIT License | https://tailwindcss.com`, 94 | }), 95 | // @ts-ignore 96 | ...preflightStyles.nodes, 97 | ]); 98 | }); 99 | } 100 | 101 | getTailwindContent(): string[] { 102 | const adapter = this.adapter; 103 | if (adapter instanceof FileSystemAdapter) { 104 | return [ 105 | ...this.vault 106 | .getMarkdownFiles() 107 | .map((f) => adapter.getFullPath(f.path)), 108 | ...this.settings.contentConfig.map((glob) => 109 | adapter.getFullPath(normalizePath(this.vault.configDir + "/" + glob)), 110 | ), 111 | ]; 112 | } else { 113 | throw Error( 114 | "Adapter is not a FileSystemAdapter. Cannot continue scanning your vault for Tailwind content.", 115 | ); 116 | } 117 | } 118 | 119 | async getTailwindConfig(content: string[]): Promise { 120 | let theme: TailwindConfig["theme"]; 121 | 122 | if (Boolean(this.settings.themeConfig)) { 123 | const themeConfigPath = normalizePath( 124 | this.vault.configDir + "/" + this.settings.themeConfig, 125 | ); 126 | if (await this.adapter.exists(themeConfigPath)) { 127 | theme = JSON.parse(await this.adapter.read(themeConfigPath)); 128 | } else { 129 | console.error( 130 | `Could not find theme configuration file at '${themeConfigPath}'.`, 131 | ); 132 | } 133 | } 134 | 135 | return { 136 | content, 137 | theme, 138 | plugins: this.tailwindPlugins, 139 | corePlugins: { 140 | preflight: false, 141 | }, 142 | }; 143 | } 144 | 145 | async checkSnippetsDirectory() { 146 | const snippetsPath = normalizePath(this.vault.configDir + "/snippets"); 147 | if (await this.adapter.exists(snippetsPath)) { 148 | return; 149 | } else { 150 | return this.adapter.mkdir(snippetsPath); 151 | } 152 | } 153 | 154 | async doTailwind() { 155 | try { 156 | const entryPoint = Boolean(this.settings.entryPoint) 157 | ? "/" + this.settings.entryPoint 158 | : `/plugins/${this.manifest.id}/tailwind.css`; 159 | const cssIn = normalizePath(this.vault.configDir + entryPoint); 160 | const cssOut = normalizePath( 161 | this.vault.configDir + "/snippets/tailwind.css", 162 | ); 163 | 164 | const tailwindContent = this.getTailwindContent(); 165 | if (tailwindContent.length === 0) { 166 | DEBUG("Skipping tailwind processing because there is no content."); 167 | return; 168 | } 169 | 170 | const postcssPlugins: AcceptedPlugin[] = [ 171 | tailwindcss(await this.getTailwindConfig(tailwindContent)), 172 | autoprefixer, 173 | ]; 174 | 175 | if (this.settings.addPrefixSelector) { 176 | // @ts-ignore 177 | // The postcss-prefix-selector export's return value is declared as 178 | // `(root: any) => string | undefined`, so it's basically like a TransformCallback. 179 | postcssPlugins.push( 180 | prefixer({ 181 | prefix: this.settings.prefixSelector, 182 | }), 183 | ); 184 | } 185 | 186 | const result = await postcss(postcssPlugins).process( 187 | await this.adapter.read(cssIn), 188 | { from: cssIn, to: cssOut }, 189 | ); 190 | 191 | INFO(`Overwriting ${cssOut}`); 192 | await this.adapter.write(cssOut, result.css); 193 | } catch (e) { 194 | this.handleError(e); 195 | } 196 | } 197 | } 198 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "tailwind-snippet", 3 | "name": "Tailwind Snippet", 4 | "version": "0.6.4", 5 | "minAppVersion": "0.15.0", 6 | "description": "Use TailwindCSS utility classes in your markup.", 7 | "author": "Nicholas Wilcox", 8 | "authorUrl": "https://github.com/nicholas-wilcox", 9 | "isDesktopOnly": true 10 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tailwind-snippet-obsidian-plugin", 3 | "version": "0.6.4", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "tailwind-snippet-obsidian-plugin", 9 | "version": "0.6.4", 10 | "license": "MIT", 11 | "dependencies": { 12 | "autoprefixer": "^10.4.14", 13 | "debug": "^4.3.6", 14 | "postcss": "^8.4.24", 15 | "postcss-prefix-selector": "^2.1.0", 16 | "tailwindcss": "^3.3.2" 17 | }, 18 | "devDependencies": { 19 | "@types/debug": "^4.1.12", 20 | "@types/node": "^22.0.0", 21 | "@types/postcss-prefix-selector": "^1.15.0", 22 | "@typescript-eslint/eslint-plugin": "^8.24.1", 23 | "@typescript-eslint/parser": "^8.24.1", 24 | "builtin-modules": "^4.0.0", 25 | "esbuild": "^0.25.0", 26 | "obsidian": "latest", 27 | "tslib": "^2.6.3", 28 | "typescript": "^5.5.4" 29 | } 30 | }, 31 | "node_modules/@alloc/quick-lru": { 32 | "version": "5.2.0", 33 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 34 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 35 | "license": "MIT", 36 | "engines": { 37 | "node": ">=10" 38 | }, 39 | "funding": { 40 | "url": "https://github.com/sponsors/sindresorhus" 41 | } 42 | }, 43 | "node_modules/@codemirror/state": { 44 | "version": "6.5.2", 45 | "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.2.tgz", 46 | "integrity": "sha512-FVqsPqtPWKVVL3dPSxy8wEF/ymIEuVzF1PK3VbUgrxXpJUSHQWWZz4JMToquRxnkw+36LTamCZG2iua2Ptq0fA==", 47 | "dev": true, 48 | "license": "MIT", 49 | "peer": true, 50 | "dependencies": { 51 | "@marijn/find-cluster-break": "^1.0.0" 52 | } 53 | }, 54 | "node_modules/@codemirror/view": { 55 | "version": "6.36.3", 56 | "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.36.3.tgz", 57 | "integrity": "sha512-N2bilM47QWC8Hnx0rMdDxO2x2ImJ1FvZWXubwKgjeoOrWwEiFrtpA7SFHcuZ+o2Ze2VzbkgbzWVj4+V18LVkeg==", 58 | "dev": true, 59 | "license": "MIT", 60 | "peer": true, 61 | "dependencies": { 62 | "@codemirror/state": "^6.5.0", 63 | "style-mod": "^4.1.0", 64 | "w3c-keyname": "^2.2.4" 65 | } 66 | }, 67 | "node_modules/@esbuild/aix-ppc64": { 68 | "version": "0.25.0", 69 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", 70 | "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", 71 | "cpu": [ 72 | "ppc64" 73 | ], 74 | "dev": true, 75 | "license": "MIT", 76 | "optional": true, 77 | "os": [ 78 | "aix" 79 | ], 80 | "engines": { 81 | "node": ">=18" 82 | } 83 | }, 84 | "node_modules/@esbuild/android-arm": { 85 | "version": "0.25.0", 86 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", 87 | "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", 88 | "cpu": [ 89 | "arm" 90 | ], 91 | "dev": true, 92 | "license": "MIT", 93 | "optional": true, 94 | "os": [ 95 | "android" 96 | ], 97 | "engines": { 98 | "node": ">=18" 99 | } 100 | }, 101 | "node_modules/@esbuild/android-arm64": { 102 | "version": "0.25.0", 103 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", 104 | "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", 105 | "cpu": [ 106 | "arm64" 107 | ], 108 | "dev": true, 109 | "license": "MIT", 110 | "optional": true, 111 | "os": [ 112 | "android" 113 | ], 114 | "engines": { 115 | "node": ">=18" 116 | } 117 | }, 118 | "node_modules/@esbuild/android-x64": { 119 | "version": "0.25.0", 120 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", 121 | "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", 122 | "cpu": [ 123 | "x64" 124 | ], 125 | "dev": true, 126 | "license": "MIT", 127 | "optional": true, 128 | "os": [ 129 | "android" 130 | ], 131 | "engines": { 132 | "node": ">=18" 133 | } 134 | }, 135 | "node_modules/@esbuild/darwin-arm64": { 136 | "version": "0.25.0", 137 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", 138 | "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", 139 | "cpu": [ 140 | "arm64" 141 | ], 142 | "dev": true, 143 | "license": "MIT", 144 | "optional": true, 145 | "os": [ 146 | "darwin" 147 | ], 148 | "engines": { 149 | "node": ">=18" 150 | } 151 | }, 152 | "node_modules/@esbuild/darwin-x64": { 153 | "version": "0.25.0", 154 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", 155 | "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", 156 | "cpu": [ 157 | "x64" 158 | ], 159 | "dev": true, 160 | "license": "MIT", 161 | "optional": true, 162 | "os": [ 163 | "darwin" 164 | ], 165 | "engines": { 166 | "node": ">=18" 167 | } 168 | }, 169 | "node_modules/@esbuild/freebsd-arm64": { 170 | "version": "0.25.0", 171 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", 172 | "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", 173 | "cpu": [ 174 | "arm64" 175 | ], 176 | "dev": true, 177 | "license": "MIT", 178 | "optional": true, 179 | "os": [ 180 | "freebsd" 181 | ], 182 | "engines": { 183 | "node": ">=18" 184 | } 185 | }, 186 | "node_modules/@esbuild/freebsd-x64": { 187 | "version": "0.25.0", 188 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", 189 | "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", 190 | "cpu": [ 191 | "x64" 192 | ], 193 | "dev": true, 194 | "license": "MIT", 195 | "optional": true, 196 | "os": [ 197 | "freebsd" 198 | ], 199 | "engines": { 200 | "node": ">=18" 201 | } 202 | }, 203 | "node_modules/@esbuild/linux-arm": { 204 | "version": "0.25.0", 205 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", 206 | "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", 207 | "cpu": [ 208 | "arm" 209 | ], 210 | "dev": true, 211 | "license": "MIT", 212 | "optional": true, 213 | "os": [ 214 | "linux" 215 | ], 216 | "engines": { 217 | "node": ">=18" 218 | } 219 | }, 220 | "node_modules/@esbuild/linux-arm64": { 221 | "version": "0.25.0", 222 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", 223 | "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", 224 | "cpu": [ 225 | "arm64" 226 | ], 227 | "dev": true, 228 | "license": "MIT", 229 | "optional": true, 230 | "os": [ 231 | "linux" 232 | ], 233 | "engines": { 234 | "node": ">=18" 235 | } 236 | }, 237 | "node_modules/@esbuild/linux-ia32": { 238 | "version": "0.25.0", 239 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", 240 | "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", 241 | "cpu": [ 242 | "ia32" 243 | ], 244 | "dev": true, 245 | "license": "MIT", 246 | "optional": true, 247 | "os": [ 248 | "linux" 249 | ], 250 | "engines": { 251 | "node": ">=18" 252 | } 253 | }, 254 | "node_modules/@esbuild/linux-loong64": { 255 | "version": "0.25.0", 256 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", 257 | "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", 258 | "cpu": [ 259 | "loong64" 260 | ], 261 | "dev": true, 262 | "license": "MIT", 263 | "optional": true, 264 | "os": [ 265 | "linux" 266 | ], 267 | "engines": { 268 | "node": ">=18" 269 | } 270 | }, 271 | "node_modules/@esbuild/linux-mips64el": { 272 | "version": "0.25.0", 273 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", 274 | "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", 275 | "cpu": [ 276 | "mips64el" 277 | ], 278 | "dev": true, 279 | "license": "MIT", 280 | "optional": true, 281 | "os": [ 282 | "linux" 283 | ], 284 | "engines": { 285 | "node": ">=18" 286 | } 287 | }, 288 | "node_modules/@esbuild/linux-ppc64": { 289 | "version": "0.25.0", 290 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", 291 | "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", 292 | "cpu": [ 293 | "ppc64" 294 | ], 295 | "dev": true, 296 | "license": "MIT", 297 | "optional": true, 298 | "os": [ 299 | "linux" 300 | ], 301 | "engines": { 302 | "node": ">=18" 303 | } 304 | }, 305 | "node_modules/@esbuild/linux-riscv64": { 306 | "version": "0.25.0", 307 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", 308 | "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", 309 | "cpu": [ 310 | "riscv64" 311 | ], 312 | "dev": true, 313 | "license": "MIT", 314 | "optional": true, 315 | "os": [ 316 | "linux" 317 | ], 318 | "engines": { 319 | "node": ">=18" 320 | } 321 | }, 322 | "node_modules/@esbuild/linux-s390x": { 323 | "version": "0.25.0", 324 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", 325 | "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", 326 | "cpu": [ 327 | "s390x" 328 | ], 329 | "dev": true, 330 | "license": "MIT", 331 | "optional": true, 332 | "os": [ 333 | "linux" 334 | ], 335 | "engines": { 336 | "node": ">=18" 337 | } 338 | }, 339 | "node_modules/@esbuild/linux-x64": { 340 | "version": "0.25.0", 341 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", 342 | "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", 343 | "cpu": [ 344 | "x64" 345 | ], 346 | "dev": true, 347 | "license": "MIT", 348 | "optional": true, 349 | "os": [ 350 | "linux" 351 | ], 352 | "engines": { 353 | "node": ">=18" 354 | } 355 | }, 356 | "node_modules/@esbuild/netbsd-arm64": { 357 | "version": "0.25.0", 358 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", 359 | "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", 360 | "cpu": [ 361 | "arm64" 362 | ], 363 | "dev": true, 364 | "license": "MIT", 365 | "optional": true, 366 | "os": [ 367 | "netbsd" 368 | ], 369 | "engines": { 370 | "node": ">=18" 371 | } 372 | }, 373 | "node_modules/@esbuild/netbsd-x64": { 374 | "version": "0.25.0", 375 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", 376 | "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", 377 | "cpu": [ 378 | "x64" 379 | ], 380 | "dev": true, 381 | "license": "MIT", 382 | "optional": true, 383 | "os": [ 384 | "netbsd" 385 | ], 386 | "engines": { 387 | "node": ">=18" 388 | } 389 | }, 390 | "node_modules/@esbuild/openbsd-arm64": { 391 | "version": "0.25.0", 392 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", 393 | "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", 394 | "cpu": [ 395 | "arm64" 396 | ], 397 | "dev": true, 398 | "license": "MIT", 399 | "optional": true, 400 | "os": [ 401 | "openbsd" 402 | ], 403 | "engines": { 404 | "node": ">=18" 405 | } 406 | }, 407 | "node_modules/@esbuild/openbsd-x64": { 408 | "version": "0.25.0", 409 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", 410 | "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", 411 | "cpu": [ 412 | "x64" 413 | ], 414 | "dev": true, 415 | "license": "MIT", 416 | "optional": true, 417 | "os": [ 418 | "openbsd" 419 | ], 420 | "engines": { 421 | "node": ">=18" 422 | } 423 | }, 424 | "node_modules/@esbuild/sunos-x64": { 425 | "version": "0.25.0", 426 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", 427 | "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", 428 | "cpu": [ 429 | "x64" 430 | ], 431 | "dev": true, 432 | "license": "MIT", 433 | "optional": true, 434 | "os": [ 435 | "sunos" 436 | ], 437 | "engines": { 438 | "node": ">=18" 439 | } 440 | }, 441 | "node_modules/@esbuild/win32-arm64": { 442 | "version": "0.25.0", 443 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", 444 | "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", 445 | "cpu": [ 446 | "arm64" 447 | ], 448 | "dev": true, 449 | "license": "MIT", 450 | "optional": true, 451 | "os": [ 452 | "win32" 453 | ], 454 | "engines": { 455 | "node": ">=18" 456 | } 457 | }, 458 | "node_modules/@esbuild/win32-ia32": { 459 | "version": "0.25.0", 460 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", 461 | "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", 462 | "cpu": [ 463 | "ia32" 464 | ], 465 | "dev": true, 466 | "license": "MIT", 467 | "optional": true, 468 | "os": [ 469 | "win32" 470 | ], 471 | "engines": { 472 | "node": ">=18" 473 | } 474 | }, 475 | "node_modules/@esbuild/win32-x64": { 476 | "version": "0.25.0", 477 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", 478 | "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", 479 | "cpu": [ 480 | "x64" 481 | ], 482 | "dev": true, 483 | "license": "MIT", 484 | "optional": true, 485 | "os": [ 486 | "win32" 487 | ], 488 | "engines": { 489 | "node": ">=18" 490 | } 491 | }, 492 | "node_modules/@eslint-community/eslint-utils": { 493 | "version": "4.4.1", 494 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", 495 | "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", 496 | "dev": true, 497 | "license": "MIT", 498 | "dependencies": { 499 | "eslint-visitor-keys": "^3.4.3" 500 | }, 501 | "engines": { 502 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 503 | }, 504 | "funding": { 505 | "url": "https://opencollective.com/eslint" 506 | }, 507 | "peerDependencies": { 508 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 509 | } 510 | }, 511 | "node_modules/@eslint-community/regexpp": { 512 | "version": "4.12.1", 513 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", 514 | "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", 515 | "dev": true, 516 | "license": "MIT", 517 | "engines": { 518 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 519 | } 520 | }, 521 | "node_modules/@eslint/config-array": { 522 | "version": "0.19.2", 523 | "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", 524 | "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", 525 | "dev": true, 526 | "license": "Apache-2.0", 527 | "peer": true, 528 | "dependencies": { 529 | "@eslint/object-schema": "^2.1.6", 530 | "debug": "^4.3.1", 531 | "minimatch": "^3.1.2" 532 | }, 533 | "engines": { 534 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 535 | } 536 | }, 537 | "node_modules/@eslint/config-array/node_modules/brace-expansion": { 538 | "version": "1.1.11", 539 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 540 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 541 | "dev": true, 542 | "license": "MIT", 543 | "peer": true, 544 | "dependencies": { 545 | "balanced-match": "^1.0.0", 546 | "concat-map": "0.0.1" 547 | } 548 | }, 549 | "node_modules/@eslint/config-array/node_modules/minimatch": { 550 | "version": "3.1.2", 551 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 552 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 553 | "dev": true, 554 | "license": "ISC", 555 | "peer": true, 556 | "dependencies": { 557 | "brace-expansion": "^1.1.7" 558 | }, 559 | "engines": { 560 | "node": "*" 561 | } 562 | }, 563 | "node_modules/@eslint/core": { 564 | "version": "0.12.0", 565 | "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", 566 | "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", 567 | "dev": true, 568 | "license": "Apache-2.0", 569 | "peer": true, 570 | "dependencies": { 571 | "@types/json-schema": "^7.0.15" 572 | }, 573 | "engines": { 574 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 575 | } 576 | }, 577 | "node_modules/@eslint/eslintrc": { 578 | "version": "3.3.0", 579 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", 580 | "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", 581 | "dev": true, 582 | "license": "MIT", 583 | "peer": true, 584 | "dependencies": { 585 | "ajv": "^6.12.4", 586 | "debug": "^4.3.2", 587 | "espree": "^10.0.1", 588 | "globals": "^14.0.0", 589 | "ignore": "^5.2.0", 590 | "import-fresh": "^3.2.1", 591 | "js-yaml": "^4.1.0", 592 | "minimatch": "^3.1.2", 593 | "strip-json-comments": "^3.1.1" 594 | }, 595 | "engines": { 596 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 597 | }, 598 | "funding": { 599 | "url": "https://opencollective.com/eslint" 600 | } 601 | }, 602 | "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { 603 | "version": "1.1.11", 604 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 605 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 606 | "dev": true, 607 | "license": "MIT", 608 | "peer": true, 609 | "dependencies": { 610 | "balanced-match": "^1.0.0", 611 | "concat-map": "0.0.1" 612 | } 613 | }, 614 | "node_modules/@eslint/eslintrc/node_modules/minimatch": { 615 | "version": "3.1.2", 616 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 617 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 618 | "dev": true, 619 | "license": "ISC", 620 | "peer": true, 621 | "dependencies": { 622 | "brace-expansion": "^1.1.7" 623 | }, 624 | "engines": { 625 | "node": "*" 626 | } 627 | }, 628 | "node_modules/@eslint/js": { 629 | "version": "9.21.0", 630 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz", 631 | "integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==", 632 | "dev": true, 633 | "license": "MIT", 634 | "peer": true, 635 | "engines": { 636 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 637 | } 638 | }, 639 | "node_modules/@eslint/object-schema": { 640 | "version": "2.1.6", 641 | "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", 642 | "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", 643 | "dev": true, 644 | "license": "Apache-2.0", 645 | "peer": true, 646 | "engines": { 647 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 648 | } 649 | }, 650 | "node_modules/@eslint/plugin-kit": { 651 | "version": "0.2.7", 652 | "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", 653 | "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", 654 | "dev": true, 655 | "license": "Apache-2.0", 656 | "peer": true, 657 | "dependencies": { 658 | "@eslint/core": "^0.12.0", 659 | "levn": "^0.4.1" 660 | }, 661 | "engines": { 662 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 663 | } 664 | }, 665 | "node_modules/@humanfs/core": { 666 | "version": "0.19.1", 667 | "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", 668 | "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", 669 | "dev": true, 670 | "license": "Apache-2.0", 671 | "peer": true, 672 | "engines": { 673 | "node": ">=18.18.0" 674 | } 675 | }, 676 | "node_modules/@humanfs/node": { 677 | "version": "0.16.6", 678 | "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", 679 | "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", 680 | "dev": true, 681 | "license": "Apache-2.0", 682 | "peer": true, 683 | "dependencies": { 684 | "@humanfs/core": "^0.19.1", 685 | "@humanwhocodes/retry": "^0.3.0" 686 | }, 687 | "engines": { 688 | "node": ">=18.18.0" 689 | } 690 | }, 691 | "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { 692 | "version": "0.3.1", 693 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", 694 | "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", 695 | "dev": true, 696 | "license": "Apache-2.0", 697 | "peer": true, 698 | "engines": { 699 | "node": ">=18.18" 700 | }, 701 | "funding": { 702 | "type": "github", 703 | "url": "https://github.com/sponsors/nzakas" 704 | } 705 | }, 706 | "node_modules/@humanwhocodes/module-importer": { 707 | "version": "1.0.1", 708 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 709 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 710 | "dev": true, 711 | "license": "Apache-2.0", 712 | "peer": true, 713 | "engines": { 714 | "node": ">=12.22" 715 | }, 716 | "funding": { 717 | "type": "github", 718 | "url": "https://github.com/sponsors/nzakas" 719 | } 720 | }, 721 | "node_modules/@humanwhocodes/retry": { 722 | "version": "0.4.2", 723 | "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", 724 | "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", 725 | "dev": true, 726 | "license": "Apache-2.0", 727 | "peer": true, 728 | "engines": { 729 | "node": ">=18.18" 730 | }, 731 | "funding": { 732 | "type": "github", 733 | "url": "https://github.com/sponsors/nzakas" 734 | } 735 | }, 736 | "node_modules/@isaacs/cliui": { 737 | "version": "8.0.2", 738 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 739 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 740 | "license": "ISC", 741 | "dependencies": { 742 | "string-width": "^5.1.2", 743 | "string-width-cjs": "npm:string-width@^4.2.0", 744 | "strip-ansi": "^7.0.1", 745 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 746 | "wrap-ansi": "^8.1.0", 747 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 748 | }, 749 | "engines": { 750 | "node": ">=12" 751 | } 752 | }, 753 | "node_modules/@isaacs/cliui/node_modules/ansi-regex": { 754 | "version": "6.1.0", 755 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 756 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 757 | "license": "MIT", 758 | "engines": { 759 | "node": ">=12" 760 | }, 761 | "funding": { 762 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 763 | } 764 | }, 765 | "node_modules/@isaacs/cliui/node_modules/strip-ansi": { 766 | "version": "7.1.0", 767 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 768 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 769 | "license": "MIT", 770 | "dependencies": { 771 | "ansi-regex": "^6.0.1" 772 | }, 773 | "engines": { 774 | "node": ">=12" 775 | }, 776 | "funding": { 777 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 778 | } 779 | }, 780 | "node_modules/@jridgewell/gen-mapping": { 781 | "version": "0.3.8", 782 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 783 | "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 784 | "license": "MIT", 785 | "dependencies": { 786 | "@jridgewell/set-array": "^1.2.1", 787 | "@jridgewell/sourcemap-codec": "^1.4.10", 788 | "@jridgewell/trace-mapping": "^0.3.24" 789 | }, 790 | "engines": { 791 | "node": ">=6.0.0" 792 | } 793 | }, 794 | "node_modules/@jridgewell/resolve-uri": { 795 | "version": "3.1.2", 796 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 797 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 798 | "license": "MIT", 799 | "engines": { 800 | "node": ">=6.0.0" 801 | } 802 | }, 803 | "node_modules/@jridgewell/set-array": { 804 | "version": "1.2.1", 805 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 806 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 807 | "license": "MIT", 808 | "engines": { 809 | "node": ">=6.0.0" 810 | } 811 | }, 812 | "node_modules/@jridgewell/sourcemap-codec": { 813 | "version": "1.5.0", 814 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 815 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 816 | "license": "MIT" 817 | }, 818 | "node_modules/@jridgewell/trace-mapping": { 819 | "version": "0.3.25", 820 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 821 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 822 | "license": "MIT", 823 | "dependencies": { 824 | "@jridgewell/resolve-uri": "^3.1.0", 825 | "@jridgewell/sourcemap-codec": "^1.4.14" 826 | } 827 | }, 828 | "node_modules/@marijn/find-cluster-break": { 829 | "version": "1.0.2", 830 | "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", 831 | "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", 832 | "dev": true, 833 | "license": "MIT", 834 | "peer": true 835 | }, 836 | "node_modules/@nodelib/fs.scandir": { 837 | "version": "2.1.5", 838 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 839 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 840 | "license": "MIT", 841 | "dependencies": { 842 | "@nodelib/fs.stat": "2.0.5", 843 | "run-parallel": "^1.1.9" 844 | }, 845 | "engines": { 846 | "node": ">= 8" 847 | } 848 | }, 849 | "node_modules/@nodelib/fs.stat": { 850 | "version": "2.0.5", 851 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 852 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 853 | "license": "MIT", 854 | "engines": { 855 | "node": ">= 8" 856 | } 857 | }, 858 | "node_modules/@nodelib/fs.walk": { 859 | "version": "1.2.8", 860 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 861 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 862 | "license": "MIT", 863 | "dependencies": { 864 | "@nodelib/fs.scandir": "2.1.5", 865 | "fastq": "^1.6.0" 866 | }, 867 | "engines": { 868 | "node": ">= 8" 869 | } 870 | }, 871 | "node_modules/@pkgjs/parseargs": { 872 | "version": "0.11.0", 873 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 874 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 875 | "license": "MIT", 876 | "optional": true, 877 | "engines": { 878 | "node": ">=14" 879 | } 880 | }, 881 | "node_modules/@types/codemirror": { 882 | "version": "5.60.8", 883 | "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.8.tgz", 884 | "integrity": "sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==", 885 | "dev": true, 886 | "license": "MIT", 887 | "dependencies": { 888 | "@types/tern": "*" 889 | } 890 | }, 891 | "node_modules/@types/debug": { 892 | "version": "4.1.12", 893 | "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", 894 | "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", 895 | "dev": true, 896 | "license": "MIT", 897 | "dependencies": { 898 | "@types/ms": "*" 899 | } 900 | }, 901 | "node_modules/@types/estree": { 902 | "version": "1.0.6", 903 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 904 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 905 | "dev": true, 906 | "license": "MIT" 907 | }, 908 | "node_modules/@types/json-schema": { 909 | "version": "7.0.15", 910 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 911 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 912 | "dev": true, 913 | "license": "MIT", 914 | "peer": true 915 | }, 916 | "node_modules/@types/ms": { 917 | "version": "2.1.0", 918 | "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", 919 | "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", 920 | "dev": true, 921 | "license": "MIT" 922 | }, 923 | "node_modules/@types/node": { 924 | "version": "22.13.5", 925 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz", 926 | "integrity": "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==", 927 | "dev": true, 928 | "license": "MIT", 929 | "dependencies": { 930 | "undici-types": "~6.20.0" 931 | } 932 | }, 933 | "node_modules/@types/postcss-prefix-selector": { 934 | "version": "1.16.3", 935 | "resolved": "https://registry.npmjs.org/@types/postcss-prefix-selector/-/postcss-prefix-selector-1.16.3.tgz", 936 | "integrity": "sha512-YZLPWRkJIrYjwaqojVDXzaRCAEYslRAm8Shznwwn+ZFA4iKQR4LZlS3d+ZMVteFz4iyQnngZZG7k/GIzV1f3mQ==", 937 | "dev": true, 938 | "license": "MIT", 939 | "dependencies": { 940 | "postcss": "^8.4.27" 941 | } 942 | }, 943 | "node_modules/@types/tern": { 944 | "version": "0.23.9", 945 | "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.9.tgz", 946 | "integrity": "sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==", 947 | "dev": true, 948 | "license": "MIT", 949 | "dependencies": { 950 | "@types/estree": "*" 951 | } 952 | }, 953 | "node_modules/@typescript-eslint/eslint-plugin": { 954 | "version": "8.24.1", 955 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.1.tgz", 956 | "integrity": "sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==", 957 | "dev": true, 958 | "license": "MIT", 959 | "dependencies": { 960 | "@eslint-community/regexpp": "^4.10.0", 961 | "@typescript-eslint/scope-manager": "8.24.1", 962 | "@typescript-eslint/type-utils": "8.24.1", 963 | "@typescript-eslint/utils": "8.24.1", 964 | "@typescript-eslint/visitor-keys": "8.24.1", 965 | "graphemer": "^1.4.0", 966 | "ignore": "^5.3.1", 967 | "natural-compare": "^1.4.0", 968 | "ts-api-utils": "^2.0.1" 969 | }, 970 | "engines": { 971 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 972 | }, 973 | "funding": { 974 | "type": "opencollective", 975 | "url": "https://opencollective.com/typescript-eslint" 976 | }, 977 | "peerDependencies": { 978 | "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", 979 | "eslint": "^8.57.0 || ^9.0.0", 980 | "typescript": ">=4.8.4 <5.8.0" 981 | } 982 | }, 983 | "node_modules/@typescript-eslint/parser": { 984 | "version": "8.24.1", 985 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.24.1.tgz", 986 | "integrity": "sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==", 987 | "dev": true, 988 | "license": "MIT", 989 | "dependencies": { 990 | "@typescript-eslint/scope-manager": "8.24.1", 991 | "@typescript-eslint/types": "8.24.1", 992 | "@typescript-eslint/typescript-estree": "8.24.1", 993 | "@typescript-eslint/visitor-keys": "8.24.1", 994 | "debug": "^4.3.4" 995 | }, 996 | "engines": { 997 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 998 | }, 999 | "funding": { 1000 | "type": "opencollective", 1001 | "url": "https://opencollective.com/typescript-eslint" 1002 | }, 1003 | "peerDependencies": { 1004 | "eslint": "^8.57.0 || ^9.0.0", 1005 | "typescript": ">=4.8.4 <5.8.0" 1006 | } 1007 | }, 1008 | "node_modules/@typescript-eslint/scope-manager": { 1009 | "version": "8.24.1", 1010 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.1.tgz", 1011 | "integrity": "sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==", 1012 | "dev": true, 1013 | "license": "MIT", 1014 | "dependencies": { 1015 | "@typescript-eslint/types": "8.24.1", 1016 | "@typescript-eslint/visitor-keys": "8.24.1" 1017 | }, 1018 | "engines": { 1019 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1020 | }, 1021 | "funding": { 1022 | "type": "opencollective", 1023 | "url": "https://opencollective.com/typescript-eslint" 1024 | } 1025 | }, 1026 | "node_modules/@typescript-eslint/type-utils": { 1027 | "version": "8.24.1", 1028 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.24.1.tgz", 1029 | "integrity": "sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==", 1030 | "dev": true, 1031 | "license": "MIT", 1032 | "dependencies": { 1033 | "@typescript-eslint/typescript-estree": "8.24.1", 1034 | "@typescript-eslint/utils": "8.24.1", 1035 | "debug": "^4.3.4", 1036 | "ts-api-utils": "^2.0.1" 1037 | }, 1038 | "engines": { 1039 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1040 | }, 1041 | "funding": { 1042 | "type": "opencollective", 1043 | "url": "https://opencollective.com/typescript-eslint" 1044 | }, 1045 | "peerDependencies": { 1046 | "eslint": "^8.57.0 || ^9.0.0", 1047 | "typescript": ">=4.8.4 <5.8.0" 1048 | } 1049 | }, 1050 | "node_modules/@typescript-eslint/types": { 1051 | "version": "8.24.1", 1052 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.1.tgz", 1053 | "integrity": "sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==", 1054 | "dev": true, 1055 | "license": "MIT", 1056 | "engines": { 1057 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1058 | }, 1059 | "funding": { 1060 | "type": "opencollective", 1061 | "url": "https://opencollective.com/typescript-eslint" 1062 | } 1063 | }, 1064 | "node_modules/@typescript-eslint/typescript-estree": { 1065 | "version": "8.24.1", 1066 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.1.tgz", 1067 | "integrity": "sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==", 1068 | "dev": true, 1069 | "license": "MIT", 1070 | "dependencies": { 1071 | "@typescript-eslint/types": "8.24.1", 1072 | "@typescript-eslint/visitor-keys": "8.24.1", 1073 | "debug": "^4.3.4", 1074 | "fast-glob": "^3.3.2", 1075 | "is-glob": "^4.0.3", 1076 | "minimatch": "^9.0.4", 1077 | "semver": "^7.6.0", 1078 | "ts-api-utils": "^2.0.1" 1079 | }, 1080 | "engines": { 1081 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1082 | }, 1083 | "funding": { 1084 | "type": "opencollective", 1085 | "url": "https://opencollective.com/typescript-eslint" 1086 | }, 1087 | "peerDependencies": { 1088 | "typescript": ">=4.8.4 <5.8.0" 1089 | } 1090 | }, 1091 | "node_modules/@typescript-eslint/utils": { 1092 | "version": "8.24.1", 1093 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.24.1.tgz", 1094 | "integrity": "sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==", 1095 | "dev": true, 1096 | "license": "MIT", 1097 | "dependencies": { 1098 | "@eslint-community/eslint-utils": "^4.4.0", 1099 | "@typescript-eslint/scope-manager": "8.24.1", 1100 | "@typescript-eslint/types": "8.24.1", 1101 | "@typescript-eslint/typescript-estree": "8.24.1" 1102 | }, 1103 | "engines": { 1104 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1105 | }, 1106 | "funding": { 1107 | "type": "opencollective", 1108 | "url": "https://opencollective.com/typescript-eslint" 1109 | }, 1110 | "peerDependencies": { 1111 | "eslint": "^8.57.0 || ^9.0.0", 1112 | "typescript": ">=4.8.4 <5.8.0" 1113 | } 1114 | }, 1115 | "node_modules/@typescript-eslint/visitor-keys": { 1116 | "version": "8.24.1", 1117 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.1.tgz", 1118 | "integrity": "sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==", 1119 | "dev": true, 1120 | "license": "MIT", 1121 | "dependencies": { 1122 | "@typescript-eslint/types": "8.24.1", 1123 | "eslint-visitor-keys": "^4.2.0" 1124 | }, 1125 | "engines": { 1126 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1127 | }, 1128 | "funding": { 1129 | "type": "opencollective", 1130 | "url": "https://opencollective.com/typescript-eslint" 1131 | } 1132 | }, 1133 | "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { 1134 | "version": "4.2.0", 1135 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", 1136 | "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", 1137 | "dev": true, 1138 | "license": "Apache-2.0", 1139 | "engines": { 1140 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1141 | }, 1142 | "funding": { 1143 | "url": "https://opencollective.com/eslint" 1144 | } 1145 | }, 1146 | "node_modules/acorn": { 1147 | "version": "8.14.0", 1148 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", 1149 | "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", 1150 | "dev": true, 1151 | "license": "MIT", 1152 | "peer": true, 1153 | "bin": { 1154 | "acorn": "bin/acorn" 1155 | }, 1156 | "engines": { 1157 | "node": ">=0.4.0" 1158 | } 1159 | }, 1160 | "node_modules/acorn-jsx": { 1161 | "version": "5.3.2", 1162 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1163 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1164 | "dev": true, 1165 | "license": "MIT", 1166 | "peer": true, 1167 | "peerDependencies": { 1168 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1169 | } 1170 | }, 1171 | "node_modules/ajv": { 1172 | "version": "6.12.6", 1173 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1174 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1175 | "dev": true, 1176 | "license": "MIT", 1177 | "peer": true, 1178 | "dependencies": { 1179 | "fast-deep-equal": "^3.1.1", 1180 | "fast-json-stable-stringify": "^2.0.0", 1181 | "json-schema-traverse": "^0.4.1", 1182 | "uri-js": "^4.2.2" 1183 | }, 1184 | "funding": { 1185 | "type": "github", 1186 | "url": "https://github.com/sponsors/epoberezkin" 1187 | } 1188 | }, 1189 | "node_modules/ansi-regex": { 1190 | "version": "5.0.1", 1191 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1192 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1193 | "license": "MIT", 1194 | "engines": { 1195 | "node": ">=8" 1196 | } 1197 | }, 1198 | "node_modules/ansi-styles": { 1199 | "version": "4.3.0", 1200 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1201 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1202 | "license": "MIT", 1203 | "dependencies": { 1204 | "color-convert": "^2.0.1" 1205 | }, 1206 | "engines": { 1207 | "node": ">=8" 1208 | }, 1209 | "funding": { 1210 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1211 | } 1212 | }, 1213 | "node_modules/any-promise": { 1214 | "version": "1.3.0", 1215 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 1216 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", 1217 | "license": "MIT" 1218 | }, 1219 | "node_modules/anymatch": { 1220 | "version": "3.1.3", 1221 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1222 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1223 | "license": "ISC", 1224 | "dependencies": { 1225 | "normalize-path": "^3.0.0", 1226 | "picomatch": "^2.0.4" 1227 | }, 1228 | "engines": { 1229 | "node": ">= 8" 1230 | } 1231 | }, 1232 | "node_modules/arg": { 1233 | "version": "5.0.2", 1234 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 1235 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 1236 | "license": "MIT" 1237 | }, 1238 | "node_modules/argparse": { 1239 | "version": "2.0.1", 1240 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1241 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1242 | "dev": true, 1243 | "license": "Python-2.0", 1244 | "peer": true 1245 | }, 1246 | "node_modules/autoprefixer": { 1247 | "version": "10.4.20", 1248 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", 1249 | "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", 1250 | "funding": [ 1251 | { 1252 | "type": "opencollective", 1253 | "url": "https://opencollective.com/postcss/" 1254 | }, 1255 | { 1256 | "type": "tidelift", 1257 | "url": "https://tidelift.com/funding/github/npm/autoprefixer" 1258 | }, 1259 | { 1260 | "type": "github", 1261 | "url": "https://github.com/sponsors/ai" 1262 | } 1263 | ], 1264 | "license": "MIT", 1265 | "dependencies": { 1266 | "browserslist": "^4.23.3", 1267 | "caniuse-lite": "^1.0.30001646", 1268 | "fraction.js": "^4.3.7", 1269 | "normalize-range": "^0.1.2", 1270 | "picocolors": "^1.0.1", 1271 | "postcss-value-parser": "^4.2.0" 1272 | }, 1273 | "bin": { 1274 | "autoprefixer": "bin/autoprefixer" 1275 | }, 1276 | "engines": { 1277 | "node": "^10 || ^12 || >=14" 1278 | }, 1279 | "peerDependencies": { 1280 | "postcss": "^8.1.0" 1281 | } 1282 | }, 1283 | "node_modules/balanced-match": { 1284 | "version": "1.0.2", 1285 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1286 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1287 | "license": "MIT" 1288 | }, 1289 | "node_modules/binary-extensions": { 1290 | "version": "2.3.0", 1291 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 1292 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 1293 | "license": "MIT", 1294 | "engines": { 1295 | "node": ">=8" 1296 | }, 1297 | "funding": { 1298 | "url": "https://github.com/sponsors/sindresorhus" 1299 | } 1300 | }, 1301 | "node_modules/brace-expansion": { 1302 | "version": "2.0.1", 1303 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1304 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1305 | "license": "MIT", 1306 | "dependencies": { 1307 | "balanced-match": "^1.0.0" 1308 | } 1309 | }, 1310 | "node_modules/braces": { 1311 | "version": "3.0.3", 1312 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1313 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1314 | "license": "MIT", 1315 | "dependencies": { 1316 | "fill-range": "^7.1.1" 1317 | }, 1318 | "engines": { 1319 | "node": ">=8" 1320 | } 1321 | }, 1322 | "node_modules/browserslist": { 1323 | "version": "4.24.4", 1324 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", 1325 | "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", 1326 | "funding": [ 1327 | { 1328 | "type": "opencollective", 1329 | "url": "https://opencollective.com/browserslist" 1330 | }, 1331 | { 1332 | "type": "tidelift", 1333 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1334 | }, 1335 | { 1336 | "type": "github", 1337 | "url": "https://github.com/sponsors/ai" 1338 | } 1339 | ], 1340 | "license": "MIT", 1341 | "dependencies": { 1342 | "caniuse-lite": "^1.0.30001688", 1343 | "electron-to-chromium": "^1.5.73", 1344 | "node-releases": "^2.0.19", 1345 | "update-browserslist-db": "^1.1.1" 1346 | }, 1347 | "bin": { 1348 | "browserslist": "cli.js" 1349 | }, 1350 | "engines": { 1351 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1352 | } 1353 | }, 1354 | "node_modules/builtin-modules": { 1355 | "version": "4.0.0", 1356 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-4.0.0.tgz", 1357 | "integrity": "sha512-p1n8zyCkt1BVrKNFymOHjcDSAl7oq/gUvfgULv2EblgpPVQlQr9yHnWjg9IJ2MhfwPqiYqMMrr01OY7yQoK2yA==", 1358 | "dev": true, 1359 | "license": "MIT", 1360 | "engines": { 1361 | "node": ">=18.20" 1362 | }, 1363 | "funding": { 1364 | "url": "https://github.com/sponsors/sindresorhus" 1365 | } 1366 | }, 1367 | "node_modules/callsites": { 1368 | "version": "3.1.0", 1369 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1370 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1371 | "dev": true, 1372 | "license": "MIT", 1373 | "peer": true, 1374 | "engines": { 1375 | "node": ">=6" 1376 | } 1377 | }, 1378 | "node_modules/camelcase-css": { 1379 | "version": "2.0.1", 1380 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 1381 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 1382 | "license": "MIT", 1383 | "engines": { 1384 | "node": ">= 6" 1385 | } 1386 | }, 1387 | "node_modules/caniuse-lite": { 1388 | "version": "1.0.30001700", 1389 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001700.tgz", 1390 | "integrity": "sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==", 1391 | "funding": [ 1392 | { 1393 | "type": "opencollective", 1394 | "url": "https://opencollective.com/browserslist" 1395 | }, 1396 | { 1397 | "type": "tidelift", 1398 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1399 | }, 1400 | { 1401 | "type": "github", 1402 | "url": "https://github.com/sponsors/ai" 1403 | } 1404 | ], 1405 | "license": "CC-BY-4.0" 1406 | }, 1407 | "node_modules/chalk": { 1408 | "version": "4.1.2", 1409 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1410 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1411 | "dev": true, 1412 | "license": "MIT", 1413 | "peer": true, 1414 | "dependencies": { 1415 | "ansi-styles": "^4.1.0", 1416 | "supports-color": "^7.1.0" 1417 | }, 1418 | "engines": { 1419 | "node": ">=10" 1420 | }, 1421 | "funding": { 1422 | "url": "https://github.com/chalk/chalk?sponsor=1" 1423 | } 1424 | }, 1425 | "node_modules/chokidar": { 1426 | "version": "3.6.0", 1427 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 1428 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 1429 | "license": "MIT", 1430 | "dependencies": { 1431 | "anymatch": "~3.1.2", 1432 | "braces": "~3.0.2", 1433 | "glob-parent": "~5.1.2", 1434 | "is-binary-path": "~2.1.0", 1435 | "is-glob": "~4.0.1", 1436 | "normalize-path": "~3.0.0", 1437 | "readdirp": "~3.6.0" 1438 | }, 1439 | "engines": { 1440 | "node": ">= 8.10.0" 1441 | }, 1442 | "funding": { 1443 | "url": "https://paulmillr.com/funding/" 1444 | }, 1445 | "optionalDependencies": { 1446 | "fsevents": "~2.3.2" 1447 | } 1448 | }, 1449 | "node_modules/chokidar/node_modules/glob-parent": { 1450 | "version": "5.1.2", 1451 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1452 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1453 | "license": "ISC", 1454 | "dependencies": { 1455 | "is-glob": "^4.0.1" 1456 | }, 1457 | "engines": { 1458 | "node": ">= 6" 1459 | } 1460 | }, 1461 | "node_modules/color-convert": { 1462 | "version": "2.0.1", 1463 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1464 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1465 | "license": "MIT", 1466 | "dependencies": { 1467 | "color-name": "~1.1.4" 1468 | }, 1469 | "engines": { 1470 | "node": ">=7.0.0" 1471 | } 1472 | }, 1473 | "node_modules/color-name": { 1474 | "version": "1.1.4", 1475 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1476 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1477 | "license": "MIT" 1478 | }, 1479 | "node_modules/commander": { 1480 | "version": "4.1.1", 1481 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 1482 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 1483 | "license": "MIT", 1484 | "engines": { 1485 | "node": ">= 6" 1486 | } 1487 | }, 1488 | "node_modules/concat-map": { 1489 | "version": "0.0.1", 1490 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1491 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1492 | "dev": true, 1493 | "license": "MIT", 1494 | "peer": true 1495 | }, 1496 | "node_modules/cross-spawn": { 1497 | "version": "7.0.6", 1498 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 1499 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 1500 | "license": "MIT", 1501 | "dependencies": { 1502 | "path-key": "^3.1.0", 1503 | "shebang-command": "^2.0.0", 1504 | "which": "^2.0.1" 1505 | }, 1506 | "engines": { 1507 | "node": ">= 8" 1508 | } 1509 | }, 1510 | "node_modules/cssesc": { 1511 | "version": "3.0.0", 1512 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1513 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 1514 | "license": "MIT", 1515 | "bin": { 1516 | "cssesc": "bin/cssesc" 1517 | }, 1518 | "engines": { 1519 | "node": ">=4" 1520 | } 1521 | }, 1522 | "node_modules/debug": { 1523 | "version": "4.4.0", 1524 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 1525 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 1526 | "license": "MIT", 1527 | "dependencies": { 1528 | "ms": "^2.1.3" 1529 | }, 1530 | "engines": { 1531 | "node": ">=6.0" 1532 | }, 1533 | "peerDependenciesMeta": { 1534 | "supports-color": { 1535 | "optional": true 1536 | } 1537 | } 1538 | }, 1539 | "node_modules/deep-is": { 1540 | "version": "0.1.4", 1541 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1542 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1543 | "dev": true, 1544 | "license": "MIT", 1545 | "peer": true 1546 | }, 1547 | "node_modules/didyoumean": { 1548 | "version": "1.2.2", 1549 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 1550 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 1551 | "license": "Apache-2.0" 1552 | }, 1553 | "node_modules/dlv": { 1554 | "version": "1.1.3", 1555 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 1556 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 1557 | "license": "MIT" 1558 | }, 1559 | "node_modules/eastasianwidth": { 1560 | "version": "0.2.0", 1561 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 1562 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 1563 | "license": "MIT" 1564 | }, 1565 | "node_modules/electron-to-chromium": { 1566 | "version": "1.5.103", 1567 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.103.tgz", 1568 | "integrity": "sha512-P6+XzIkfndgsrjROJWfSvVEgNHtPgbhVyTkwLjUM2HU/h7pZRORgaTlHqfAikqxKmdJMLW8fftrdGWbd/Ds0FA==", 1569 | "license": "ISC" 1570 | }, 1571 | "node_modules/emoji-regex": { 1572 | "version": "9.2.2", 1573 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 1574 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 1575 | "license": "MIT" 1576 | }, 1577 | "node_modules/esbuild": { 1578 | "version": "0.25.0", 1579 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", 1580 | "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", 1581 | "dev": true, 1582 | "hasInstallScript": true, 1583 | "license": "MIT", 1584 | "bin": { 1585 | "esbuild": "bin/esbuild" 1586 | }, 1587 | "engines": { 1588 | "node": ">=18" 1589 | }, 1590 | "optionalDependencies": { 1591 | "@esbuild/aix-ppc64": "0.25.0", 1592 | "@esbuild/android-arm": "0.25.0", 1593 | "@esbuild/android-arm64": "0.25.0", 1594 | "@esbuild/android-x64": "0.25.0", 1595 | "@esbuild/darwin-arm64": "0.25.0", 1596 | "@esbuild/darwin-x64": "0.25.0", 1597 | "@esbuild/freebsd-arm64": "0.25.0", 1598 | "@esbuild/freebsd-x64": "0.25.0", 1599 | "@esbuild/linux-arm": "0.25.0", 1600 | "@esbuild/linux-arm64": "0.25.0", 1601 | "@esbuild/linux-ia32": "0.25.0", 1602 | "@esbuild/linux-loong64": "0.25.0", 1603 | "@esbuild/linux-mips64el": "0.25.0", 1604 | "@esbuild/linux-ppc64": "0.25.0", 1605 | "@esbuild/linux-riscv64": "0.25.0", 1606 | "@esbuild/linux-s390x": "0.25.0", 1607 | "@esbuild/linux-x64": "0.25.0", 1608 | "@esbuild/netbsd-arm64": "0.25.0", 1609 | "@esbuild/netbsd-x64": "0.25.0", 1610 | "@esbuild/openbsd-arm64": "0.25.0", 1611 | "@esbuild/openbsd-x64": "0.25.0", 1612 | "@esbuild/sunos-x64": "0.25.0", 1613 | "@esbuild/win32-arm64": "0.25.0", 1614 | "@esbuild/win32-ia32": "0.25.0", 1615 | "@esbuild/win32-x64": "0.25.0" 1616 | } 1617 | }, 1618 | "node_modules/escalade": { 1619 | "version": "3.2.0", 1620 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 1621 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 1622 | "license": "MIT", 1623 | "engines": { 1624 | "node": ">=6" 1625 | } 1626 | }, 1627 | "node_modules/escape-string-regexp": { 1628 | "version": "4.0.0", 1629 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1630 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1631 | "dev": true, 1632 | "license": "MIT", 1633 | "peer": true, 1634 | "engines": { 1635 | "node": ">=10" 1636 | }, 1637 | "funding": { 1638 | "url": "https://github.com/sponsors/sindresorhus" 1639 | } 1640 | }, 1641 | "node_modules/eslint": { 1642 | "version": "9.21.0", 1643 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz", 1644 | "integrity": "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==", 1645 | "dev": true, 1646 | "license": "MIT", 1647 | "peer": true, 1648 | "dependencies": { 1649 | "@eslint-community/eslint-utils": "^4.2.0", 1650 | "@eslint-community/regexpp": "^4.12.1", 1651 | "@eslint/config-array": "^0.19.2", 1652 | "@eslint/core": "^0.12.0", 1653 | "@eslint/eslintrc": "^3.3.0", 1654 | "@eslint/js": "9.21.0", 1655 | "@eslint/plugin-kit": "^0.2.7", 1656 | "@humanfs/node": "^0.16.6", 1657 | "@humanwhocodes/module-importer": "^1.0.1", 1658 | "@humanwhocodes/retry": "^0.4.2", 1659 | "@types/estree": "^1.0.6", 1660 | "@types/json-schema": "^7.0.15", 1661 | "ajv": "^6.12.4", 1662 | "chalk": "^4.0.0", 1663 | "cross-spawn": "^7.0.6", 1664 | "debug": "^4.3.2", 1665 | "escape-string-regexp": "^4.0.0", 1666 | "eslint-scope": "^8.2.0", 1667 | "eslint-visitor-keys": "^4.2.0", 1668 | "espree": "^10.3.0", 1669 | "esquery": "^1.5.0", 1670 | "esutils": "^2.0.2", 1671 | "fast-deep-equal": "^3.1.3", 1672 | "file-entry-cache": "^8.0.0", 1673 | "find-up": "^5.0.0", 1674 | "glob-parent": "^6.0.2", 1675 | "ignore": "^5.2.0", 1676 | "imurmurhash": "^0.1.4", 1677 | "is-glob": "^4.0.0", 1678 | "json-stable-stringify-without-jsonify": "^1.0.1", 1679 | "lodash.merge": "^4.6.2", 1680 | "minimatch": "^3.1.2", 1681 | "natural-compare": "^1.4.0", 1682 | "optionator": "^0.9.3" 1683 | }, 1684 | "bin": { 1685 | "eslint": "bin/eslint.js" 1686 | }, 1687 | "engines": { 1688 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1689 | }, 1690 | "funding": { 1691 | "url": "https://eslint.org/donate" 1692 | }, 1693 | "peerDependencies": { 1694 | "jiti": "*" 1695 | }, 1696 | "peerDependenciesMeta": { 1697 | "jiti": { 1698 | "optional": true 1699 | } 1700 | } 1701 | }, 1702 | "node_modules/eslint-scope": { 1703 | "version": "8.2.0", 1704 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", 1705 | "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", 1706 | "dev": true, 1707 | "license": "BSD-2-Clause", 1708 | "peer": true, 1709 | "dependencies": { 1710 | "esrecurse": "^4.3.0", 1711 | "estraverse": "^5.2.0" 1712 | }, 1713 | "engines": { 1714 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1715 | }, 1716 | "funding": { 1717 | "url": "https://opencollective.com/eslint" 1718 | } 1719 | }, 1720 | "node_modules/eslint-visitor-keys": { 1721 | "version": "3.4.3", 1722 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1723 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1724 | "dev": true, 1725 | "license": "Apache-2.0", 1726 | "engines": { 1727 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1728 | }, 1729 | "funding": { 1730 | "url": "https://opencollective.com/eslint" 1731 | } 1732 | }, 1733 | "node_modules/eslint/node_modules/brace-expansion": { 1734 | "version": "1.1.11", 1735 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1736 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1737 | "dev": true, 1738 | "license": "MIT", 1739 | "peer": true, 1740 | "dependencies": { 1741 | "balanced-match": "^1.0.0", 1742 | "concat-map": "0.0.1" 1743 | } 1744 | }, 1745 | "node_modules/eslint/node_modules/eslint-visitor-keys": { 1746 | "version": "4.2.0", 1747 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", 1748 | "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", 1749 | "dev": true, 1750 | "license": "Apache-2.0", 1751 | "peer": true, 1752 | "engines": { 1753 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1754 | }, 1755 | "funding": { 1756 | "url": "https://opencollective.com/eslint" 1757 | } 1758 | }, 1759 | "node_modules/eslint/node_modules/minimatch": { 1760 | "version": "3.1.2", 1761 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1762 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1763 | "dev": true, 1764 | "license": "ISC", 1765 | "peer": true, 1766 | "dependencies": { 1767 | "brace-expansion": "^1.1.7" 1768 | }, 1769 | "engines": { 1770 | "node": "*" 1771 | } 1772 | }, 1773 | "node_modules/espree": { 1774 | "version": "10.3.0", 1775 | "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", 1776 | "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", 1777 | "dev": true, 1778 | "license": "BSD-2-Clause", 1779 | "peer": true, 1780 | "dependencies": { 1781 | "acorn": "^8.14.0", 1782 | "acorn-jsx": "^5.3.2", 1783 | "eslint-visitor-keys": "^4.2.0" 1784 | }, 1785 | "engines": { 1786 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1787 | }, 1788 | "funding": { 1789 | "url": "https://opencollective.com/eslint" 1790 | } 1791 | }, 1792 | "node_modules/espree/node_modules/eslint-visitor-keys": { 1793 | "version": "4.2.0", 1794 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", 1795 | "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", 1796 | "dev": true, 1797 | "license": "Apache-2.0", 1798 | "peer": true, 1799 | "engines": { 1800 | "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1801 | }, 1802 | "funding": { 1803 | "url": "https://opencollective.com/eslint" 1804 | } 1805 | }, 1806 | "node_modules/esquery": { 1807 | "version": "1.6.0", 1808 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", 1809 | "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", 1810 | "dev": true, 1811 | "license": "BSD-3-Clause", 1812 | "peer": true, 1813 | "dependencies": { 1814 | "estraverse": "^5.1.0" 1815 | }, 1816 | "engines": { 1817 | "node": ">=0.10" 1818 | } 1819 | }, 1820 | "node_modules/esrecurse": { 1821 | "version": "4.3.0", 1822 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1823 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1824 | "dev": true, 1825 | "license": "BSD-2-Clause", 1826 | "peer": true, 1827 | "dependencies": { 1828 | "estraverse": "^5.2.0" 1829 | }, 1830 | "engines": { 1831 | "node": ">=4.0" 1832 | } 1833 | }, 1834 | "node_modules/estraverse": { 1835 | "version": "5.3.0", 1836 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1837 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1838 | "dev": true, 1839 | "license": "BSD-2-Clause", 1840 | "peer": true, 1841 | "engines": { 1842 | "node": ">=4.0" 1843 | } 1844 | }, 1845 | "node_modules/esutils": { 1846 | "version": "2.0.3", 1847 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1848 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1849 | "dev": true, 1850 | "license": "BSD-2-Clause", 1851 | "peer": true, 1852 | "engines": { 1853 | "node": ">=0.10.0" 1854 | } 1855 | }, 1856 | "node_modules/fast-deep-equal": { 1857 | "version": "3.1.3", 1858 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1859 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1860 | "dev": true, 1861 | "license": "MIT", 1862 | "peer": true 1863 | }, 1864 | "node_modules/fast-glob": { 1865 | "version": "3.3.3", 1866 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", 1867 | "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", 1868 | "license": "MIT", 1869 | "dependencies": { 1870 | "@nodelib/fs.stat": "^2.0.2", 1871 | "@nodelib/fs.walk": "^1.2.3", 1872 | "glob-parent": "^5.1.2", 1873 | "merge2": "^1.3.0", 1874 | "micromatch": "^4.0.8" 1875 | }, 1876 | "engines": { 1877 | "node": ">=8.6.0" 1878 | } 1879 | }, 1880 | "node_modules/fast-glob/node_modules/glob-parent": { 1881 | "version": "5.1.2", 1882 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1883 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1884 | "license": "ISC", 1885 | "dependencies": { 1886 | "is-glob": "^4.0.1" 1887 | }, 1888 | "engines": { 1889 | "node": ">= 6" 1890 | } 1891 | }, 1892 | "node_modules/fast-json-stable-stringify": { 1893 | "version": "2.1.0", 1894 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1895 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1896 | "dev": true, 1897 | "license": "MIT", 1898 | "peer": true 1899 | }, 1900 | "node_modules/fast-levenshtein": { 1901 | "version": "2.0.6", 1902 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1903 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1904 | "dev": true, 1905 | "license": "MIT", 1906 | "peer": true 1907 | }, 1908 | "node_modules/fastq": { 1909 | "version": "1.19.0", 1910 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", 1911 | "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", 1912 | "license": "ISC", 1913 | "dependencies": { 1914 | "reusify": "^1.0.4" 1915 | } 1916 | }, 1917 | "node_modules/file-entry-cache": { 1918 | "version": "8.0.0", 1919 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", 1920 | "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", 1921 | "dev": true, 1922 | "license": "MIT", 1923 | "peer": true, 1924 | "dependencies": { 1925 | "flat-cache": "^4.0.0" 1926 | }, 1927 | "engines": { 1928 | "node": ">=16.0.0" 1929 | } 1930 | }, 1931 | "node_modules/fill-range": { 1932 | "version": "7.1.1", 1933 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1934 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1935 | "license": "MIT", 1936 | "dependencies": { 1937 | "to-regex-range": "^5.0.1" 1938 | }, 1939 | "engines": { 1940 | "node": ">=8" 1941 | } 1942 | }, 1943 | "node_modules/find-up": { 1944 | "version": "5.0.0", 1945 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1946 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1947 | "dev": true, 1948 | "license": "MIT", 1949 | "peer": true, 1950 | "dependencies": { 1951 | "locate-path": "^6.0.0", 1952 | "path-exists": "^4.0.0" 1953 | }, 1954 | "engines": { 1955 | "node": ">=10" 1956 | }, 1957 | "funding": { 1958 | "url": "https://github.com/sponsors/sindresorhus" 1959 | } 1960 | }, 1961 | "node_modules/flat-cache": { 1962 | "version": "4.0.1", 1963 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", 1964 | "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", 1965 | "dev": true, 1966 | "license": "MIT", 1967 | "peer": true, 1968 | "dependencies": { 1969 | "flatted": "^3.2.9", 1970 | "keyv": "^4.5.4" 1971 | }, 1972 | "engines": { 1973 | "node": ">=16" 1974 | } 1975 | }, 1976 | "node_modules/flatted": { 1977 | "version": "3.3.3", 1978 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", 1979 | "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", 1980 | "dev": true, 1981 | "license": "ISC", 1982 | "peer": true 1983 | }, 1984 | "node_modules/foreground-child": { 1985 | "version": "3.3.0", 1986 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", 1987 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", 1988 | "license": "ISC", 1989 | "dependencies": { 1990 | "cross-spawn": "^7.0.0", 1991 | "signal-exit": "^4.0.1" 1992 | }, 1993 | "engines": { 1994 | "node": ">=14" 1995 | }, 1996 | "funding": { 1997 | "url": "https://github.com/sponsors/isaacs" 1998 | } 1999 | }, 2000 | "node_modules/fraction.js": { 2001 | "version": "4.3.7", 2002 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", 2003 | "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", 2004 | "license": "MIT", 2005 | "engines": { 2006 | "node": "*" 2007 | }, 2008 | "funding": { 2009 | "type": "patreon", 2010 | "url": "https://github.com/sponsors/rawify" 2011 | } 2012 | }, 2013 | "node_modules/fsevents": { 2014 | "version": "2.3.3", 2015 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2016 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2017 | "hasInstallScript": true, 2018 | "license": "MIT", 2019 | "optional": true, 2020 | "os": [ 2021 | "darwin" 2022 | ], 2023 | "engines": { 2024 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 2025 | } 2026 | }, 2027 | "node_modules/function-bind": { 2028 | "version": "1.1.2", 2029 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2030 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2031 | "license": "MIT", 2032 | "funding": { 2033 | "url": "https://github.com/sponsors/ljharb" 2034 | } 2035 | }, 2036 | "node_modules/glob-parent": { 2037 | "version": "6.0.2", 2038 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 2039 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2040 | "license": "ISC", 2041 | "dependencies": { 2042 | "is-glob": "^4.0.3" 2043 | }, 2044 | "engines": { 2045 | "node": ">=10.13.0" 2046 | } 2047 | }, 2048 | "node_modules/globals": { 2049 | "version": "14.0.0", 2050 | "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", 2051 | "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", 2052 | "dev": true, 2053 | "license": "MIT", 2054 | "peer": true, 2055 | "engines": { 2056 | "node": ">=18" 2057 | }, 2058 | "funding": { 2059 | "url": "https://github.com/sponsors/sindresorhus" 2060 | } 2061 | }, 2062 | "node_modules/graphemer": { 2063 | "version": "1.4.0", 2064 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 2065 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 2066 | "dev": true, 2067 | "license": "MIT" 2068 | }, 2069 | "node_modules/has-flag": { 2070 | "version": "4.0.0", 2071 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2072 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2073 | "dev": true, 2074 | "license": "MIT", 2075 | "peer": true, 2076 | "engines": { 2077 | "node": ">=8" 2078 | } 2079 | }, 2080 | "node_modules/hasown": { 2081 | "version": "2.0.2", 2082 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 2083 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 2084 | "license": "MIT", 2085 | "dependencies": { 2086 | "function-bind": "^1.1.2" 2087 | }, 2088 | "engines": { 2089 | "node": ">= 0.4" 2090 | } 2091 | }, 2092 | "node_modules/ignore": { 2093 | "version": "5.3.2", 2094 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 2095 | "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 2096 | "dev": true, 2097 | "license": "MIT", 2098 | "engines": { 2099 | "node": ">= 4" 2100 | } 2101 | }, 2102 | "node_modules/import-fresh": { 2103 | "version": "3.3.1", 2104 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", 2105 | "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", 2106 | "dev": true, 2107 | "license": "MIT", 2108 | "peer": true, 2109 | "dependencies": { 2110 | "parent-module": "^1.0.0", 2111 | "resolve-from": "^4.0.0" 2112 | }, 2113 | "engines": { 2114 | "node": ">=6" 2115 | }, 2116 | "funding": { 2117 | "url": "https://github.com/sponsors/sindresorhus" 2118 | } 2119 | }, 2120 | "node_modules/imurmurhash": { 2121 | "version": "0.1.4", 2122 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2123 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2124 | "dev": true, 2125 | "license": "MIT", 2126 | "peer": true, 2127 | "engines": { 2128 | "node": ">=0.8.19" 2129 | } 2130 | }, 2131 | "node_modules/is-binary-path": { 2132 | "version": "2.1.0", 2133 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2134 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2135 | "license": "MIT", 2136 | "dependencies": { 2137 | "binary-extensions": "^2.0.0" 2138 | }, 2139 | "engines": { 2140 | "node": ">=8" 2141 | } 2142 | }, 2143 | "node_modules/is-core-module": { 2144 | "version": "2.16.1", 2145 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 2146 | "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 2147 | "license": "MIT", 2148 | "dependencies": { 2149 | "hasown": "^2.0.2" 2150 | }, 2151 | "engines": { 2152 | "node": ">= 0.4" 2153 | }, 2154 | "funding": { 2155 | "url": "https://github.com/sponsors/ljharb" 2156 | } 2157 | }, 2158 | "node_modules/is-extglob": { 2159 | "version": "2.1.1", 2160 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2161 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2162 | "license": "MIT", 2163 | "engines": { 2164 | "node": ">=0.10.0" 2165 | } 2166 | }, 2167 | "node_modules/is-fullwidth-code-point": { 2168 | "version": "3.0.0", 2169 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2170 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2171 | "license": "MIT", 2172 | "engines": { 2173 | "node": ">=8" 2174 | } 2175 | }, 2176 | "node_modules/is-glob": { 2177 | "version": "4.0.3", 2178 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2179 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2180 | "license": "MIT", 2181 | "dependencies": { 2182 | "is-extglob": "^2.1.1" 2183 | }, 2184 | "engines": { 2185 | "node": ">=0.10.0" 2186 | } 2187 | }, 2188 | "node_modules/is-number": { 2189 | "version": "7.0.0", 2190 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2191 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2192 | "license": "MIT", 2193 | "engines": { 2194 | "node": ">=0.12.0" 2195 | } 2196 | }, 2197 | "node_modules/isexe": { 2198 | "version": "2.0.0", 2199 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2200 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2201 | "license": "ISC" 2202 | }, 2203 | "node_modules/jackspeak": { 2204 | "version": "3.4.3", 2205 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 2206 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 2207 | "license": "BlueOak-1.0.0", 2208 | "dependencies": { 2209 | "@isaacs/cliui": "^8.0.2" 2210 | }, 2211 | "funding": { 2212 | "url": "https://github.com/sponsors/isaacs" 2213 | }, 2214 | "optionalDependencies": { 2215 | "@pkgjs/parseargs": "^0.11.0" 2216 | } 2217 | }, 2218 | "node_modules/jiti": { 2219 | "version": "1.21.7", 2220 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", 2221 | "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", 2222 | "license": "MIT", 2223 | "bin": { 2224 | "jiti": "bin/jiti.js" 2225 | } 2226 | }, 2227 | "node_modules/js-yaml": { 2228 | "version": "4.1.0", 2229 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2230 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2231 | "dev": true, 2232 | "license": "MIT", 2233 | "peer": true, 2234 | "dependencies": { 2235 | "argparse": "^2.0.1" 2236 | }, 2237 | "bin": { 2238 | "js-yaml": "bin/js-yaml.js" 2239 | } 2240 | }, 2241 | "node_modules/json-buffer": { 2242 | "version": "3.0.1", 2243 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2244 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2245 | "dev": true, 2246 | "license": "MIT", 2247 | "peer": true 2248 | }, 2249 | "node_modules/json-schema-traverse": { 2250 | "version": "0.4.1", 2251 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2252 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2253 | "dev": true, 2254 | "license": "MIT", 2255 | "peer": true 2256 | }, 2257 | "node_modules/json-stable-stringify-without-jsonify": { 2258 | "version": "1.0.1", 2259 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2260 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2261 | "dev": true, 2262 | "license": "MIT", 2263 | "peer": true 2264 | }, 2265 | "node_modules/keyv": { 2266 | "version": "4.5.4", 2267 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 2268 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 2269 | "dev": true, 2270 | "license": "MIT", 2271 | "peer": true, 2272 | "dependencies": { 2273 | "json-buffer": "3.0.1" 2274 | } 2275 | }, 2276 | "node_modules/levn": { 2277 | "version": "0.4.1", 2278 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2279 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2280 | "dev": true, 2281 | "license": "MIT", 2282 | "peer": true, 2283 | "dependencies": { 2284 | "prelude-ls": "^1.2.1", 2285 | "type-check": "~0.4.0" 2286 | }, 2287 | "engines": { 2288 | "node": ">= 0.8.0" 2289 | } 2290 | }, 2291 | "node_modules/lilconfig": { 2292 | "version": "3.1.3", 2293 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", 2294 | "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", 2295 | "license": "MIT", 2296 | "engines": { 2297 | "node": ">=14" 2298 | }, 2299 | "funding": { 2300 | "url": "https://github.com/sponsors/antonk52" 2301 | } 2302 | }, 2303 | "node_modules/lines-and-columns": { 2304 | "version": "1.2.4", 2305 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 2306 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 2307 | "license": "MIT" 2308 | }, 2309 | "node_modules/locate-path": { 2310 | "version": "6.0.0", 2311 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2312 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2313 | "dev": true, 2314 | "license": "MIT", 2315 | "peer": true, 2316 | "dependencies": { 2317 | "p-locate": "^5.0.0" 2318 | }, 2319 | "engines": { 2320 | "node": ">=10" 2321 | }, 2322 | "funding": { 2323 | "url": "https://github.com/sponsors/sindresorhus" 2324 | } 2325 | }, 2326 | "node_modules/lodash.merge": { 2327 | "version": "4.6.2", 2328 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2329 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2330 | "dev": true, 2331 | "license": "MIT", 2332 | "peer": true 2333 | }, 2334 | "node_modules/lru-cache": { 2335 | "version": "10.4.3", 2336 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 2337 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 2338 | "license": "ISC" 2339 | }, 2340 | "node_modules/merge2": { 2341 | "version": "1.4.1", 2342 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2343 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2344 | "license": "MIT", 2345 | "engines": { 2346 | "node": ">= 8" 2347 | } 2348 | }, 2349 | "node_modules/micromatch": { 2350 | "version": "4.0.8", 2351 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 2352 | "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 2353 | "license": "MIT", 2354 | "dependencies": { 2355 | "braces": "^3.0.3", 2356 | "picomatch": "^2.3.1" 2357 | }, 2358 | "engines": { 2359 | "node": ">=8.6" 2360 | } 2361 | }, 2362 | "node_modules/minimatch": { 2363 | "version": "9.0.5", 2364 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 2365 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 2366 | "license": "ISC", 2367 | "dependencies": { 2368 | "brace-expansion": "^2.0.1" 2369 | }, 2370 | "engines": { 2371 | "node": ">=16 || 14 >=14.17" 2372 | }, 2373 | "funding": { 2374 | "url": "https://github.com/sponsors/isaacs" 2375 | } 2376 | }, 2377 | "node_modules/minipass": { 2378 | "version": "7.1.2", 2379 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 2380 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 2381 | "license": "ISC", 2382 | "engines": { 2383 | "node": ">=16 || 14 >=14.17" 2384 | } 2385 | }, 2386 | "node_modules/moment": { 2387 | "version": "2.29.4", 2388 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 2389 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", 2390 | "dev": true, 2391 | "license": "MIT", 2392 | "engines": { 2393 | "node": "*" 2394 | } 2395 | }, 2396 | "node_modules/ms": { 2397 | "version": "2.1.3", 2398 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2399 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2400 | "license": "MIT" 2401 | }, 2402 | "node_modules/mz": { 2403 | "version": "2.7.0", 2404 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 2405 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 2406 | "license": "MIT", 2407 | "dependencies": { 2408 | "any-promise": "^1.0.0", 2409 | "object-assign": "^4.0.1", 2410 | "thenify-all": "^1.0.0" 2411 | } 2412 | }, 2413 | "node_modules/nanoid": { 2414 | "version": "3.3.8", 2415 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", 2416 | "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", 2417 | "funding": [ 2418 | { 2419 | "type": "github", 2420 | "url": "https://github.com/sponsors/ai" 2421 | } 2422 | ], 2423 | "license": "MIT", 2424 | "bin": { 2425 | "nanoid": "bin/nanoid.cjs" 2426 | }, 2427 | "engines": { 2428 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2429 | } 2430 | }, 2431 | "node_modules/natural-compare": { 2432 | "version": "1.4.0", 2433 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2434 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2435 | "dev": true, 2436 | "license": "MIT" 2437 | }, 2438 | "node_modules/node-releases": { 2439 | "version": "2.0.19", 2440 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", 2441 | "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", 2442 | "license": "MIT" 2443 | }, 2444 | "node_modules/normalize-path": { 2445 | "version": "3.0.0", 2446 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2447 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2448 | "license": "MIT", 2449 | "engines": { 2450 | "node": ">=0.10.0" 2451 | } 2452 | }, 2453 | "node_modules/normalize-range": { 2454 | "version": "0.1.2", 2455 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 2456 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", 2457 | "license": "MIT", 2458 | "engines": { 2459 | "node": ">=0.10.0" 2460 | } 2461 | }, 2462 | "node_modules/object-assign": { 2463 | "version": "4.1.1", 2464 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2465 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 2466 | "license": "MIT", 2467 | "engines": { 2468 | "node": ">=0.10.0" 2469 | } 2470 | }, 2471 | "node_modules/object-hash": { 2472 | "version": "3.0.0", 2473 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 2474 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 2475 | "license": "MIT", 2476 | "engines": { 2477 | "node": ">= 6" 2478 | } 2479 | }, 2480 | "node_modules/obsidian": { 2481 | "version": "1.8.7", 2482 | "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.8.7.tgz", 2483 | "integrity": "sha512-h4bWwNFAGRXlMlMAzdEiIM2ppTGlrh7uGOJS6w4gClrsjc+ei/3YAtU2VdFUlCiPuTHpY4aBpFJJW75S1Tl/JA==", 2484 | "dev": true, 2485 | "license": "MIT", 2486 | "dependencies": { 2487 | "@types/codemirror": "5.60.8", 2488 | "moment": "2.29.4" 2489 | }, 2490 | "peerDependencies": { 2491 | "@codemirror/state": "^6.0.0", 2492 | "@codemirror/view": "^6.0.0" 2493 | } 2494 | }, 2495 | "node_modules/optionator": { 2496 | "version": "0.9.4", 2497 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", 2498 | "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", 2499 | "dev": true, 2500 | "license": "MIT", 2501 | "peer": true, 2502 | "dependencies": { 2503 | "deep-is": "^0.1.3", 2504 | "fast-levenshtein": "^2.0.6", 2505 | "levn": "^0.4.1", 2506 | "prelude-ls": "^1.2.1", 2507 | "type-check": "^0.4.0", 2508 | "word-wrap": "^1.2.5" 2509 | }, 2510 | "engines": { 2511 | "node": ">= 0.8.0" 2512 | } 2513 | }, 2514 | "node_modules/p-limit": { 2515 | "version": "3.1.0", 2516 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 2517 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 2518 | "dev": true, 2519 | "license": "MIT", 2520 | "peer": true, 2521 | "dependencies": { 2522 | "yocto-queue": "^0.1.0" 2523 | }, 2524 | "engines": { 2525 | "node": ">=10" 2526 | }, 2527 | "funding": { 2528 | "url": "https://github.com/sponsors/sindresorhus" 2529 | } 2530 | }, 2531 | "node_modules/p-locate": { 2532 | "version": "5.0.0", 2533 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 2534 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 2535 | "dev": true, 2536 | "license": "MIT", 2537 | "peer": true, 2538 | "dependencies": { 2539 | "p-limit": "^3.0.2" 2540 | }, 2541 | "engines": { 2542 | "node": ">=10" 2543 | }, 2544 | "funding": { 2545 | "url": "https://github.com/sponsors/sindresorhus" 2546 | } 2547 | }, 2548 | "node_modules/package-json-from-dist": { 2549 | "version": "1.0.1", 2550 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 2551 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", 2552 | "license": "BlueOak-1.0.0" 2553 | }, 2554 | "node_modules/parent-module": { 2555 | "version": "1.0.1", 2556 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2557 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2558 | "dev": true, 2559 | "license": "MIT", 2560 | "peer": true, 2561 | "dependencies": { 2562 | "callsites": "^3.0.0" 2563 | }, 2564 | "engines": { 2565 | "node": ">=6" 2566 | } 2567 | }, 2568 | "node_modules/path-exists": { 2569 | "version": "4.0.0", 2570 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 2571 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 2572 | "dev": true, 2573 | "license": "MIT", 2574 | "peer": true, 2575 | "engines": { 2576 | "node": ">=8" 2577 | } 2578 | }, 2579 | "node_modules/path-key": { 2580 | "version": "3.1.1", 2581 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2582 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2583 | "license": "MIT", 2584 | "engines": { 2585 | "node": ">=8" 2586 | } 2587 | }, 2588 | "node_modules/path-parse": { 2589 | "version": "1.0.7", 2590 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2591 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2592 | "license": "MIT" 2593 | }, 2594 | "node_modules/path-scurry": { 2595 | "version": "1.11.1", 2596 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 2597 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 2598 | "license": "BlueOak-1.0.0", 2599 | "dependencies": { 2600 | "lru-cache": "^10.2.0", 2601 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 2602 | }, 2603 | "engines": { 2604 | "node": ">=16 || 14 >=14.18" 2605 | }, 2606 | "funding": { 2607 | "url": "https://github.com/sponsors/isaacs" 2608 | } 2609 | }, 2610 | "node_modules/picocolors": { 2611 | "version": "1.1.1", 2612 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 2613 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 2614 | "license": "ISC" 2615 | }, 2616 | "node_modules/picomatch": { 2617 | "version": "2.3.1", 2618 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2619 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2620 | "license": "MIT", 2621 | "engines": { 2622 | "node": ">=8.6" 2623 | }, 2624 | "funding": { 2625 | "url": "https://github.com/sponsors/jonschlinkert" 2626 | } 2627 | }, 2628 | "node_modules/pify": { 2629 | "version": "2.3.0", 2630 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2631 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 2632 | "license": "MIT", 2633 | "engines": { 2634 | "node": ">=0.10.0" 2635 | } 2636 | }, 2637 | "node_modules/pirates": { 2638 | "version": "4.0.6", 2639 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 2640 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 2641 | "license": "MIT", 2642 | "engines": { 2643 | "node": ">= 6" 2644 | } 2645 | }, 2646 | "node_modules/postcss": { 2647 | "version": "8.5.3", 2648 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", 2649 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", 2650 | "funding": [ 2651 | { 2652 | "type": "opencollective", 2653 | "url": "https://opencollective.com/postcss/" 2654 | }, 2655 | { 2656 | "type": "tidelift", 2657 | "url": "https://tidelift.com/funding/github/npm/postcss" 2658 | }, 2659 | { 2660 | "type": "github", 2661 | "url": "https://github.com/sponsors/ai" 2662 | } 2663 | ], 2664 | "license": "MIT", 2665 | "dependencies": { 2666 | "nanoid": "^3.3.8", 2667 | "picocolors": "^1.1.1", 2668 | "source-map-js": "^1.2.1" 2669 | }, 2670 | "engines": { 2671 | "node": "^10 || ^12 || >=14" 2672 | } 2673 | }, 2674 | "node_modules/postcss-import": { 2675 | "version": "15.1.0", 2676 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 2677 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 2678 | "license": "MIT", 2679 | "dependencies": { 2680 | "postcss-value-parser": "^4.0.0", 2681 | "read-cache": "^1.0.0", 2682 | "resolve": "^1.1.7" 2683 | }, 2684 | "engines": { 2685 | "node": ">=14.0.0" 2686 | }, 2687 | "peerDependencies": { 2688 | "postcss": "^8.0.0" 2689 | } 2690 | }, 2691 | "node_modules/postcss-js": { 2692 | "version": "4.0.1", 2693 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", 2694 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", 2695 | "license": "MIT", 2696 | "dependencies": { 2697 | "camelcase-css": "^2.0.1" 2698 | }, 2699 | "engines": { 2700 | "node": "^12 || ^14 || >= 16" 2701 | }, 2702 | "funding": { 2703 | "type": "opencollective", 2704 | "url": "https://opencollective.com/postcss/" 2705 | }, 2706 | "peerDependencies": { 2707 | "postcss": "^8.4.21" 2708 | } 2709 | }, 2710 | "node_modules/postcss-load-config": { 2711 | "version": "4.0.2", 2712 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", 2713 | "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", 2714 | "funding": [ 2715 | { 2716 | "type": "opencollective", 2717 | "url": "https://opencollective.com/postcss/" 2718 | }, 2719 | { 2720 | "type": "github", 2721 | "url": "https://github.com/sponsors/ai" 2722 | } 2723 | ], 2724 | "license": "MIT", 2725 | "dependencies": { 2726 | "lilconfig": "^3.0.0", 2727 | "yaml": "^2.3.4" 2728 | }, 2729 | "engines": { 2730 | "node": ">= 14" 2731 | }, 2732 | "peerDependencies": { 2733 | "postcss": ">=8.0.9", 2734 | "ts-node": ">=9.0.0" 2735 | }, 2736 | "peerDependenciesMeta": { 2737 | "postcss": { 2738 | "optional": true 2739 | }, 2740 | "ts-node": { 2741 | "optional": true 2742 | } 2743 | } 2744 | }, 2745 | "node_modules/postcss-nested": { 2746 | "version": "6.2.0", 2747 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", 2748 | "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", 2749 | "funding": [ 2750 | { 2751 | "type": "opencollective", 2752 | "url": "https://opencollective.com/postcss/" 2753 | }, 2754 | { 2755 | "type": "github", 2756 | "url": "https://github.com/sponsors/ai" 2757 | } 2758 | ], 2759 | "license": "MIT", 2760 | "dependencies": { 2761 | "postcss-selector-parser": "^6.1.1" 2762 | }, 2763 | "engines": { 2764 | "node": ">=12.0" 2765 | }, 2766 | "peerDependencies": { 2767 | "postcss": "^8.2.14" 2768 | } 2769 | }, 2770 | "node_modules/postcss-prefix-selector": { 2771 | "version": "2.1.0", 2772 | "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-2.1.0.tgz", 2773 | "integrity": "sha512-UJjQ5CJZuvDGbrGzanqZyH1R/dUSxil/IxfQyeUg+POmZGhG4nz4FERhrgy75+JiUESw0ws3+GxXofapOBbdkg==", 2774 | "license": "MIT", 2775 | "peerDependencies": { 2776 | "postcss": "^8.0.0" 2777 | } 2778 | }, 2779 | "node_modules/postcss-selector-parser": { 2780 | "version": "6.1.2", 2781 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", 2782 | "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", 2783 | "license": "MIT", 2784 | "dependencies": { 2785 | "cssesc": "^3.0.0", 2786 | "util-deprecate": "^1.0.2" 2787 | }, 2788 | "engines": { 2789 | "node": ">=4" 2790 | } 2791 | }, 2792 | "node_modules/postcss-value-parser": { 2793 | "version": "4.2.0", 2794 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 2795 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 2796 | "license": "MIT" 2797 | }, 2798 | "node_modules/prelude-ls": { 2799 | "version": "1.2.1", 2800 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 2801 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 2802 | "dev": true, 2803 | "license": "MIT", 2804 | "peer": true, 2805 | "engines": { 2806 | "node": ">= 0.8.0" 2807 | } 2808 | }, 2809 | "node_modules/punycode": { 2810 | "version": "2.3.1", 2811 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 2812 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 2813 | "dev": true, 2814 | "license": "MIT", 2815 | "peer": true, 2816 | "engines": { 2817 | "node": ">=6" 2818 | } 2819 | }, 2820 | "node_modules/queue-microtask": { 2821 | "version": "1.2.3", 2822 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2823 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2824 | "funding": [ 2825 | { 2826 | "type": "github", 2827 | "url": "https://github.com/sponsors/feross" 2828 | }, 2829 | { 2830 | "type": "patreon", 2831 | "url": "https://www.patreon.com/feross" 2832 | }, 2833 | { 2834 | "type": "consulting", 2835 | "url": "https://feross.org/support" 2836 | } 2837 | ], 2838 | "license": "MIT" 2839 | }, 2840 | "node_modules/read-cache": { 2841 | "version": "1.0.0", 2842 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 2843 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 2844 | "license": "MIT", 2845 | "dependencies": { 2846 | "pify": "^2.3.0" 2847 | } 2848 | }, 2849 | "node_modules/readdirp": { 2850 | "version": "3.6.0", 2851 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2852 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2853 | "license": "MIT", 2854 | "dependencies": { 2855 | "picomatch": "^2.2.1" 2856 | }, 2857 | "engines": { 2858 | "node": ">=8.10.0" 2859 | } 2860 | }, 2861 | "node_modules/resolve": { 2862 | "version": "1.22.10", 2863 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", 2864 | "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", 2865 | "license": "MIT", 2866 | "dependencies": { 2867 | "is-core-module": "^2.16.0", 2868 | "path-parse": "^1.0.7", 2869 | "supports-preserve-symlinks-flag": "^1.0.0" 2870 | }, 2871 | "bin": { 2872 | "resolve": "bin/resolve" 2873 | }, 2874 | "engines": { 2875 | "node": ">= 0.4" 2876 | }, 2877 | "funding": { 2878 | "url": "https://github.com/sponsors/ljharb" 2879 | } 2880 | }, 2881 | "node_modules/resolve-from": { 2882 | "version": "4.0.0", 2883 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2884 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2885 | "dev": true, 2886 | "license": "MIT", 2887 | "peer": true, 2888 | "engines": { 2889 | "node": ">=4" 2890 | } 2891 | }, 2892 | "node_modules/reusify": { 2893 | "version": "1.0.4", 2894 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2895 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2896 | "license": "MIT", 2897 | "engines": { 2898 | "iojs": ">=1.0.0", 2899 | "node": ">=0.10.0" 2900 | } 2901 | }, 2902 | "node_modules/run-parallel": { 2903 | "version": "1.2.0", 2904 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2905 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2906 | "funding": [ 2907 | { 2908 | "type": "github", 2909 | "url": "https://github.com/sponsors/feross" 2910 | }, 2911 | { 2912 | "type": "patreon", 2913 | "url": "https://www.patreon.com/feross" 2914 | }, 2915 | { 2916 | "type": "consulting", 2917 | "url": "https://feross.org/support" 2918 | } 2919 | ], 2920 | "license": "MIT", 2921 | "dependencies": { 2922 | "queue-microtask": "^1.2.2" 2923 | } 2924 | }, 2925 | "node_modules/semver": { 2926 | "version": "7.7.1", 2927 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", 2928 | "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", 2929 | "dev": true, 2930 | "license": "ISC", 2931 | "bin": { 2932 | "semver": "bin/semver.js" 2933 | }, 2934 | "engines": { 2935 | "node": ">=10" 2936 | } 2937 | }, 2938 | "node_modules/shebang-command": { 2939 | "version": "2.0.0", 2940 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2941 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2942 | "license": "MIT", 2943 | "dependencies": { 2944 | "shebang-regex": "^3.0.0" 2945 | }, 2946 | "engines": { 2947 | "node": ">=8" 2948 | } 2949 | }, 2950 | "node_modules/shebang-regex": { 2951 | "version": "3.0.0", 2952 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2953 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2954 | "license": "MIT", 2955 | "engines": { 2956 | "node": ">=8" 2957 | } 2958 | }, 2959 | "node_modules/signal-exit": { 2960 | "version": "4.1.0", 2961 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 2962 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 2963 | "license": "ISC", 2964 | "engines": { 2965 | "node": ">=14" 2966 | }, 2967 | "funding": { 2968 | "url": "https://github.com/sponsors/isaacs" 2969 | } 2970 | }, 2971 | "node_modules/source-map-js": { 2972 | "version": "1.2.1", 2973 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 2974 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 2975 | "license": "BSD-3-Clause", 2976 | "engines": { 2977 | "node": ">=0.10.0" 2978 | } 2979 | }, 2980 | "node_modules/string-width": { 2981 | "version": "5.1.2", 2982 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 2983 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 2984 | "license": "MIT", 2985 | "dependencies": { 2986 | "eastasianwidth": "^0.2.0", 2987 | "emoji-regex": "^9.2.2", 2988 | "strip-ansi": "^7.0.1" 2989 | }, 2990 | "engines": { 2991 | "node": ">=12" 2992 | }, 2993 | "funding": { 2994 | "url": "https://github.com/sponsors/sindresorhus" 2995 | } 2996 | }, 2997 | "node_modules/string-width-cjs": { 2998 | "name": "string-width", 2999 | "version": "4.2.3", 3000 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3001 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3002 | "license": "MIT", 3003 | "dependencies": { 3004 | "emoji-regex": "^8.0.0", 3005 | "is-fullwidth-code-point": "^3.0.0", 3006 | "strip-ansi": "^6.0.1" 3007 | }, 3008 | "engines": { 3009 | "node": ">=8" 3010 | } 3011 | }, 3012 | "node_modules/string-width-cjs/node_modules/emoji-regex": { 3013 | "version": "8.0.0", 3014 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 3015 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 3016 | "license": "MIT" 3017 | }, 3018 | "node_modules/string-width/node_modules/ansi-regex": { 3019 | "version": "6.1.0", 3020 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 3021 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 3022 | "license": "MIT", 3023 | "engines": { 3024 | "node": ">=12" 3025 | }, 3026 | "funding": { 3027 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 3028 | } 3029 | }, 3030 | "node_modules/string-width/node_modules/strip-ansi": { 3031 | "version": "7.1.0", 3032 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 3033 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 3034 | "license": "MIT", 3035 | "dependencies": { 3036 | "ansi-regex": "^6.0.1" 3037 | }, 3038 | "engines": { 3039 | "node": ">=12" 3040 | }, 3041 | "funding": { 3042 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 3043 | } 3044 | }, 3045 | "node_modules/strip-ansi": { 3046 | "version": "6.0.1", 3047 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3048 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3049 | "license": "MIT", 3050 | "dependencies": { 3051 | "ansi-regex": "^5.0.1" 3052 | }, 3053 | "engines": { 3054 | "node": ">=8" 3055 | } 3056 | }, 3057 | "node_modules/strip-ansi-cjs": { 3058 | "name": "strip-ansi", 3059 | "version": "6.0.1", 3060 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3061 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3062 | "license": "MIT", 3063 | "dependencies": { 3064 | "ansi-regex": "^5.0.1" 3065 | }, 3066 | "engines": { 3067 | "node": ">=8" 3068 | } 3069 | }, 3070 | "node_modules/strip-json-comments": { 3071 | "version": "3.1.1", 3072 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3073 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3074 | "dev": true, 3075 | "license": "MIT", 3076 | "peer": true, 3077 | "engines": { 3078 | "node": ">=8" 3079 | }, 3080 | "funding": { 3081 | "url": "https://github.com/sponsors/sindresorhus" 3082 | } 3083 | }, 3084 | "node_modules/style-mod": { 3085 | "version": "4.1.2", 3086 | "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", 3087 | "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", 3088 | "dev": true, 3089 | "license": "MIT", 3090 | "peer": true 3091 | }, 3092 | "node_modules/sucrase": { 3093 | "version": "3.35.0", 3094 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", 3095 | "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", 3096 | "license": "MIT", 3097 | "dependencies": { 3098 | "@jridgewell/gen-mapping": "^0.3.2", 3099 | "commander": "^4.0.0", 3100 | "glob": "^10.3.10", 3101 | "lines-and-columns": "^1.1.6", 3102 | "mz": "^2.7.0", 3103 | "pirates": "^4.0.1", 3104 | "ts-interface-checker": "^0.1.9" 3105 | }, 3106 | "bin": { 3107 | "sucrase": "bin/sucrase", 3108 | "sucrase-node": "bin/sucrase-node" 3109 | }, 3110 | "engines": { 3111 | "node": ">=16 || 14 >=14.17" 3112 | } 3113 | }, 3114 | "node_modules/sucrase/node_modules/glob": { 3115 | "version": "10.4.5", 3116 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 3117 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 3118 | "license": "ISC", 3119 | "dependencies": { 3120 | "foreground-child": "^3.1.0", 3121 | "jackspeak": "^3.1.2", 3122 | "minimatch": "^9.0.4", 3123 | "minipass": "^7.1.2", 3124 | "package-json-from-dist": "^1.0.0", 3125 | "path-scurry": "^1.11.1" 3126 | }, 3127 | "bin": { 3128 | "glob": "dist/esm/bin.mjs" 3129 | }, 3130 | "funding": { 3131 | "url": "https://github.com/sponsors/isaacs" 3132 | } 3133 | }, 3134 | "node_modules/supports-color": { 3135 | "version": "7.2.0", 3136 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3137 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3138 | "dev": true, 3139 | "license": "MIT", 3140 | "peer": true, 3141 | "dependencies": { 3142 | "has-flag": "^4.0.0" 3143 | }, 3144 | "engines": { 3145 | "node": ">=8" 3146 | } 3147 | }, 3148 | "node_modules/supports-preserve-symlinks-flag": { 3149 | "version": "1.0.0", 3150 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 3151 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 3152 | "license": "MIT", 3153 | "engines": { 3154 | "node": ">= 0.4" 3155 | }, 3156 | "funding": { 3157 | "url": "https://github.com/sponsors/ljharb" 3158 | } 3159 | }, 3160 | "node_modules/tailwindcss": { 3161 | "version": "3.4.17", 3162 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", 3163 | "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", 3164 | "license": "MIT", 3165 | "dependencies": { 3166 | "@alloc/quick-lru": "^5.2.0", 3167 | "arg": "^5.0.2", 3168 | "chokidar": "^3.6.0", 3169 | "didyoumean": "^1.2.2", 3170 | "dlv": "^1.1.3", 3171 | "fast-glob": "^3.3.2", 3172 | "glob-parent": "^6.0.2", 3173 | "is-glob": "^4.0.3", 3174 | "jiti": "^1.21.6", 3175 | "lilconfig": "^3.1.3", 3176 | "micromatch": "^4.0.8", 3177 | "normalize-path": "^3.0.0", 3178 | "object-hash": "^3.0.0", 3179 | "picocolors": "^1.1.1", 3180 | "postcss": "^8.4.47", 3181 | "postcss-import": "^15.1.0", 3182 | "postcss-js": "^4.0.1", 3183 | "postcss-load-config": "^4.0.2", 3184 | "postcss-nested": "^6.2.0", 3185 | "postcss-selector-parser": "^6.1.2", 3186 | "resolve": "^1.22.8", 3187 | "sucrase": "^3.35.0" 3188 | }, 3189 | "bin": { 3190 | "tailwind": "lib/cli.js", 3191 | "tailwindcss": "lib/cli.js" 3192 | }, 3193 | "engines": { 3194 | "node": ">=14.0.0" 3195 | } 3196 | }, 3197 | "node_modules/thenify": { 3198 | "version": "3.3.1", 3199 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 3200 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 3201 | "license": "MIT", 3202 | "dependencies": { 3203 | "any-promise": "^1.0.0" 3204 | } 3205 | }, 3206 | "node_modules/thenify-all": { 3207 | "version": "1.6.0", 3208 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 3209 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 3210 | "license": "MIT", 3211 | "dependencies": { 3212 | "thenify": ">= 3.1.0 < 4" 3213 | }, 3214 | "engines": { 3215 | "node": ">=0.8" 3216 | } 3217 | }, 3218 | "node_modules/to-regex-range": { 3219 | "version": "5.0.1", 3220 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3221 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3222 | "license": "MIT", 3223 | "dependencies": { 3224 | "is-number": "^7.0.0" 3225 | }, 3226 | "engines": { 3227 | "node": ">=8.0" 3228 | } 3229 | }, 3230 | "node_modules/ts-api-utils": { 3231 | "version": "2.0.1", 3232 | "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", 3233 | "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", 3234 | "dev": true, 3235 | "license": "MIT", 3236 | "engines": { 3237 | "node": ">=18.12" 3238 | }, 3239 | "peerDependencies": { 3240 | "typescript": ">=4.8.4" 3241 | } 3242 | }, 3243 | "node_modules/ts-interface-checker": { 3244 | "version": "0.1.13", 3245 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 3246 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", 3247 | "license": "Apache-2.0" 3248 | }, 3249 | "node_modules/tslib": { 3250 | "version": "2.8.1", 3251 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 3252 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 3253 | "dev": true, 3254 | "license": "0BSD" 3255 | }, 3256 | "node_modules/type-check": { 3257 | "version": "0.4.0", 3258 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3259 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3260 | "dev": true, 3261 | "license": "MIT", 3262 | "peer": true, 3263 | "dependencies": { 3264 | "prelude-ls": "^1.2.1" 3265 | }, 3266 | "engines": { 3267 | "node": ">= 0.8.0" 3268 | } 3269 | }, 3270 | "node_modules/typescript": { 3271 | "version": "5.7.3", 3272 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", 3273 | "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", 3274 | "dev": true, 3275 | "license": "Apache-2.0", 3276 | "bin": { 3277 | "tsc": "bin/tsc", 3278 | "tsserver": "bin/tsserver" 3279 | }, 3280 | "engines": { 3281 | "node": ">=14.17" 3282 | } 3283 | }, 3284 | "node_modules/undici-types": { 3285 | "version": "6.20.0", 3286 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", 3287 | "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", 3288 | "dev": true, 3289 | "license": "MIT" 3290 | }, 3291 | "node_modules/update-browserslist-db": { 3292 | "version": "1.1.2", 3293 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", 3294 | "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", 3295 | "funding": [ 3296 | { 3297 | "type": "opencollective", 3298 | "url": "https://opencollective.com/browserslist" 3299 | }, 3300 | { 3301 | "type": "tidelift", 3302 | "url": "https://tidelift.com/funding/github/npm/browserslist" 3303 | }, 3304 | { 3305 | "type": "github", 3306 | "url": "https://github.com/sponsors/ai" 3307 | } 3308 | ], 3309 | "license": "MIT", 3310 | "dependencies": { 3311 | "escalade": "^3.2.0", 3312 | "picocolors": "^1.1.1" 3313 | }, 3314 | "bin": { 3315 | "update-browserslist-db": "cli.js" 3316 | }, 3317 | "peerDependencies": { 3318 | "browserslist": ">= 4.21.0" 3319 | } 3320 | }, 3321 | "node_modules/uri-js": { 3322 | "version": "4.4.1", 3323 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3324 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3325 | "dev": true, 3326 | "license": "BSD-2-Clause", 3327 | "peer": true, 3328 | "dependencies": { 3329 | "punycode": "^2.1.0" 3330 | } 3331 | }, 3332 | "node_modules/util-deprecate": { 3333 | "version": "1.0.2", 3334 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3335 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 3336 | "license": "MIT" 3337 | }, 3338 | "node_modules/w3c-keyname": { 3339 | "version": "2.2.8", 3340 | "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", 3341 | "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", 3342 | "dev": true, 3343 | "license": "MIT", 3344 | "peer": true 3345 | }, 3346 | "node_modules/which": { 3347 | "version": "2.0.2", 3348 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3349 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3350 | "license": "ISC", 3351 | "dependencies": { 3352 | "isexe": "^2.0.0" 3353 | }, 3354 | "bin": { 3355 | "node-which": "bin/node-which" 3356 | }, 3357 | "engines": { 3358 | "node": ">= 8" 3359 | } 3360 | }, 3361 | "node_modules/word-wrap": { 3362 | "version": "1.2.5", 3363 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", 3364 | "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", 3365 | "dev": true, 3366 | "license": "MIT", 3367 | "peer": true, 3368 | "engines": { 3369 | "node": ">=0.10.0" 3370 | } 3371 | }, 3372 | "node_modules/wrap-ansi": { 3373 | "version": "8.1.0", 3374 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 3375 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 3376 | "license": "MIT", 3377 | "dependencies": { 3378 | "ansi-styles": "^6.1.0", 3379 | "string-width": "^5.0.1", 3380 | "strip-ansi": "^7.0.1" 3381 | }, 3382 | "engines": { 3383 | "node": ">=12" 3384 | }, 3385 | "funding": { 3386 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3387 | } 3388 | }, 3389 | "node_modules/wrap-ansi-cjs": { 3390 | "name": "wrap-ansi", 3391 | "version": "7.0.0", 3392 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3393 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3394 | "license": "MIT", 3395 | "dependencies": { 3396 | "ansi-styles": "^4.0.0", 3397 | "string-width": "^4.1.0", 3398 | "strip-ansi": "^6.0.0" 3399 | }, 3400 | "engines": { 3401 | "node": ">=10" 3402 | }, 3403 | "funding": { 3404 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3405 | } 3406 | }, 3407 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 3408 | "version": "8.0.0", 3409 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 3410 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 3411 | "license": "MIT" 3412 | }, 3413 | "node_modules/wrap-ansi-cjs/node_modules/string-width": { 3414 | "version": "4.2.3", 3415 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3416 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3417 | "license": "MIT", 3418 | "dependencies": { 3419 | "emoji-regex": "^8.0.0", 3420 | "is-fullwidth-code-point": "^3.0.0", 3421 | "strip-ansi": "^6.0.1" 3422 | }, 3423 | "engines": { 3424 | "node": ">=8" 3425 | } 3426 | }, 3427 | "node_modules/wrap-ansi/node_modules/ansi-regex": { 3428 | "version": "6.1.0", 3429 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 3430 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 3431 | "license": "MIT", 3432 | "engines": { 3433 | "node": ">=12" 3434 | }, 3435 | "funding": { 3436 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 3437 | } 3438 | }, 3439 | "node_modules/wrap-ansi/node_modules/ansi-styles": { 3440 | "version": "6.2.1", 3441 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 3442 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 3443 | "license": "MIT", 3444 | "engines": { 3445 | "node": ">=12" 3446 | }, 3447 | "funding": { 3448 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 3449 | } 3450 | }, 3451 | "node_modules/wrap-ansi/node_modules/strip-ansi": { 3452 | "version": "7.1.0", 3453 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 3454 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 3455 | "license": "MIT", 3456 | "dependencies": { 3457 | "ansi-regex": "^6.0.1" 3458 | }, 3459 | "engines": { 3460 | "node": ">=12" 3461 | }, 3462 | "funding": { 3463 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 3464 | } 3465 | }, 3466 | "node_modules/yaml": { 3467 | "version": "2.7.0", 3468 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", 3469 | "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", 3470 | "license": "ISC", 3471 | "bin": { 3472 | "yaml": "bin.mjs" 3473 | }, 3474 | "engines": { 3475 | "node": ">= 14" 3476 | } 3477 | }, 3478 | "node_modules/yocto-queue": { 3479 | "version": "0.1.0", 3480 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3481 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3482 | "dev": true, 3483 | "license": "MIT", 3484 | "peer": true, 3485 | "engines": { 3486 | "node": ">=10" 3487 | }, 3488 | "funding": { 3489 | "url": "https://github.com/sponsors/sindresorhus" 3490 | } 3491 | } 3492 | } 3493 | } 3494 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tailwind-snippet-obsidian-plugin", 3 | "version": "0.6.4", 4 | "description": "Use TailwindCSS utility classes in your Obsidian vault's markup.", 5 | "main": "main.js", 6 | "scripts": { 7 | "dev": "node esbuild.config.mjs", 8 | "predev": "cp node_modules/tailwindcss/lib/css/preflight.css .", 9 | "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", 10 | "prebuild": "cp node_modules/tailwindcss/lib/css/preflight.css .", 11 | "version": "node version-bump.mjs && git add manifest.json versions.json" 12 | }, 13 | "keywords": [ 14 | "Obsidian", 15 | "TailwindCSS", 16 | "PostCSS" 17 | ], 18 | "author": "Nicholas Wilcox ", 19 | "repository": { 20 | "type": "git", 21 | "url": "https://github.com/nicholas-wilcox/tailwind-snippet-obsidian-plugin.git" 22 | }, 23 | "license": "MIT", 24 | "devDependencies": { 25 | "@types/debug": "^4.1.12", 26 | "@types/node": "^22.0.0", 27 | "@types/postcss-prefix-selector": "^1.15.0", 28 | "@typescript-eslint/eslint-plugin": "^8.24.1", 29 | "@typescript-eslint/parser": "^8.24.1", 30 | "builtin-modules": "^4.0.0", 31 | "esbuild": "^0.25.0", 32 | "obsidian": "latest", 33 | "tslib": "^2.6.3", 34 | "typescript": "^5.5.4" 35 | }, 36 | "dependencies": { 37 | "autoprefixer": "^10.4.14", 38 | "debug": "^4.3.6", 39 | "postcss": "^8.4.24", 40 | "postcss-prefix-selector": "^2.1.0", 41 | "tailwindcss": "^3.3.2" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /settings.ts: -------------------------------------------------------------------------------- 1 | import { App, normalizePath, PluginSettingTab, Setting } from "obsidian"; 2 | import TailwindSnippetPlugin from "./main"; 3 | 4 | export interface TailwindSnippetPluginSettings { 5 | enablePreflight: boolean; 6 | addPrefixSelector: boolean; 7 | prefixSelector: string; 8 | entryPoint: string; 9 | themeConfig: string; 10 | contentConfig: string[]; 11 | } 12 | 13 | export const DEFAULT_SETTINGS: TailwindSnippetPluginSettings = { 14 | enablePreflight: false, 15 | addPrefixSelector: false, 16 | prefixSelector: ".tailwind", 17 | entryPoint: "", 18 | themeConfig: "", 19 | contentConfig: [], 20 | }; 21 | 22 | export class SettingTab extends PluginSettingTab { 23 | plugin: TailwindSnippetPlugin; 24 | 25 | constructor(app: App, plugin: TailwindSnippetPlugin) { 26 | super(app, plugin); 27 | this.plugin = plugin; 28 | } 29 | 30 | get configDir() { 31 | return this.plugin.vault.configDir; 32 | } 33 | 34 | async exists(path: string, sensitive?: boolean) { 35 | return this.plugin.adapter.exists(path, sensitive); 36 | } 37 | 38 | async testFile(path: string) { 39 | return this.exists(normalizePath(`${this.configDir}/${path}`)); 40 | } 41 | 42 | setErrorMessage(controlEl: HTMLElement, message?: string) { 43 | if (message) { 44 | let errorMessage: HTMLElement | null = 45 | controlEl.querySelector(".error-message"); 46 | if (errorMessage === null) { 47 | errorMessage = document.createElement("span"); 48 | errorMessage.addClass("error-message"); 49 | controlEl.appendChild(errorMessage); 50 | } 51 | errorMessage.innerText = message; 52 | controlEl.addClass("error"); 53 | } else { 54 | controlEl.removeClass("error"); 55 | controlEl.querySelectorAll(".error-message").forEach((el) => el.remove()); 56 | } 57 | } 58 | 59 | display(): void { 60 | const { containerEl } = this; 61 | containerEl.empty(); 62 | 63 | const enablePreflightSetting = new Setting(containerEl) 64 | .setName("Enable Preflight") 65 | .setDesc( 66 | `Adds TailwindCSS's Preflight to the generated stylesheet. (NOTE: Not all Preflight styles will be applied, and Obsidian's UI may be affected.)`, 67 | ) 68 | .addToggle((toggle) => 69 | toggle 70 | .setValue(this.plugin.settings.enablePreflight) 71 | .onChange(async (value: boolean) => { 72 | this.plugin.settings.enablePreflight = value; 73 | await this.plugin.saveSettings(); 74 | }), 75 | ); 76 | 77 | const addPrefixSelectorSetting = new Setting(containerEl) 78 | .setName("Add prefix to Tailwind selectors") 79 | .setDesc( 80 | `Prefixes all selectors in Tailwind's style rules with another selector. This can be used to prevent Preflight styles from affecting Obsidian's UI.`, 81 | ) 82 | .addToggle((toggle) => 83 | toggle 84 | .setValue(this.plugin.settings.addPrefixSelector) 85 | .onChange(async (value: boolean) => { 86 | this.plugin.settings.addPrefixSelector = value; 87 | prefixSelectorSetting.setDisabled(!value); 88 | await this.plugin.saveSettings(); 89 | }), 90 | ); 91 | 92 | const prefixSelectorSetting = new Setting(containerEl) 93 | .setName("Prefix selector") 94 | .setDesc( 95 | `Will be combined with all Tailwind selectors using a descendant combinator. (e.g. ".myClass, #sectionId" => ".tailwind .myClass, .tailwind #sectionId")`, 96 | ) 97 | .setClass("prefix-selector") 98 | .addText((text) => 99 | text 100 | .setValue(this.plugin.settings.prefixSelector) 101 | .setDisabled(!this.plugin.settings.addPrefixSelector) 102 | .onChange(async (value: string) => { 103 | this.plugin.settings.prefixSelector = value; 104 | await this.plugin.saveSettings(); 105 | }), 106 | ); 107 | 108 | const entryPoint = new Setting(containerEl) 109 | .setName("PostCSS entrypoint") 110 | .setDesc( 111 | `A custom CSS snippet that will be processed by PostCSS and Tailwind instead of the prepackaged input file.`, 112 | ) 113 | .addText((text) => { 114 | text 115 | .setValue(this.plugin.settings.entryPoint) 116 | .onChange(async (value: string) => { 117 | if (value === "" || (await this.testFile(value))) { 118 | this.plugin.settings.entryPoint = value; 119 | this.setErrorMessage(entryPoint.controlEl); 120 | await this.plugin.saveSettings(); 121 | } else { 122 | this.setErrorMessage( 123 | entryPoint.controlEl, 124 | `Could not find file "${value}"`, 125 | ); 126 | } 127 | }); 128 | }); 129 | 130 | const themeConfig = new Setting(containerEl) 131 | .setName("Tailwind theme") 132 | .setDesc( 133 | `The theme of the Tailwind configuration object. This can be used to extend or replace the default theme.`, 134 | ) 135 | .addText((text) => 136 | text 137 | .setValue(this.plugin.settings.themeConfig) 138 | .onChange(async (value: string) => { 139 | if (value === "" || (await this.testFile(value))) { 140 | this.plugin.settings.themeConfig = value; 141 | this.setErrorMessage(themeConfig.controlEl); 142 | await this.plugin.saveSettings(); 143 | } else { 144 | this.setErrorMessage( 145 | themeConfig.controlEl, 146 | `Could not find file "${value}"`, 147 | ); 148 | } 149 | }), 150 | ); 151 | 152 | const contentConfig = new Setting(containerEl) 153 | .setName("Tailwind entrypoints") 154 | .setDesc( 155 | `A comma-separated list of file globs (relative to your Vault's configuration folder) that will be inspected by Tailwind in addition to your notes`, 156 | ) 157 | .addTextArea((text) => 158 | text 159 | .setValue(this.plugin.settings.contentConfig.join(",\n")) 160 | .onChange(async (value) => { 161 | this.plugin.settings.contentConfig = value 162 | .split(",") 163 | .map((s) => s.trim()) 164 | .filter((s) => Boolean(s)); 165 | await this.plugin.saveSettings(); 166 | }), 167 | ); 168 | } 169 | } 170 | -------------------------------------------------------------------------------- /src/log.ts: -------------------------------------------------------------------------------- 1 | import debug from "debug"; 2 | 3 | export const log = debug("tailwind-snippet"); 4 | export const INFO = log.extend("INFO"); 5 | export const DEBUG = log.extend("DEBUG"); 6 | export const ERROR = log.extend("ERROR"); 7 | -------------------------------------------------------------------------------- /src/paint-roller.ts: -------------------------------------------------------------------------------- 1 | // https://lucide.dev/icons/paint-roller 2 | export const paintRollerSvg = 3 | ''; 4 | -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | .setting-item.prefix-selector { 2 | margin-left: var(--size-4-8); 3 | } 4 | 5 | .setting-item-control.error input[type="text"] { 6 | border-color: var(--background-modifier-error); 7 | } 8 | 9 | .setting-item-control.error input[type="text"]:focus { 10 | box-shadow: 0 0 0 2px var(--background-modifier-error-hover); 11 | } 12 | 13 | .setting-item-control.error { 14 | position: relative; 15 | } 16 | 17 | .setting-item-control.error .error-message { 18 | position: absolute; 19 | top: 100%; 20 | left: 0; 21 | color: var(--background-modifier-error); 22 | text-align: left; 23 | } 24 | -------------------------------------------------------------------------------- /tailwind.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "inlineSourceMap": true, 5 | "inlineSources": true, 6 | "module": "ESNext", 7 | "target": "ES6", 8 | "allowJs": true, 9 | "noImplicitAny": true, 10 | "moduleResolution": "node", 11 | "importHelpers": true, 12 | "isolatedModules": true, 13 | "strictNullChecks": true, 14 | "allowSyntheticDefaultImports": true, 15 | "resolveJsonModule": true, 16 | "lib": ["DOM", "ES5", "ES6", "ES7"] 17 | }, 18 | "include": ["**/*.ts"] 19 | } 20 | -------------------------------------------------------------------------------- /version-bump.mjs: -------------------------------------------------------------------------------- 1 | import { readFileSync, writeFileSync } from "fs"; 2 | 3 | const targetVersion = process.env.npm_package_version; 4 | 5 | // read minAppVersion from manifest.json and bump version to target version 6 | let manifest = JSON.parse(readFileSync("manifest.json", "utf8")); 7 | const { minAppVersion } = manifest; 8 | manifest.version = targetVersion; 9 | writeFileSync("manifest.json", JSON.stringify(manifest, null, "\t")); 10 | 11 | // update versions.json with target version and minAppVersion from manifest.json 12 | let versions = JSON.parse(readFileSync("versions.json", "utf8")); 13 | versions[targetVersion] = minAppVersion; 14 | writeFileSync("versions.json", JSON.stringify(versions, null, "\t")); 15 | -------------------------------------------------------------------------------- /versions.json: -------------------------------------------------------------------------------- 1 | { 2 | "0.1.0": "0.15.0", 3 | "0.2.0": "0.15.0", 4 | "0.2.1": "0.15.0", 5 | "0.2.2": "0.15.0", 6 | "0.3.0": "0.15.0", 7 | "0.3.1": "0.15.0", 8 | "0.4.0": "0.15.0", 9 | "0.4.1": "0.15.0", 10 | "0.5.0": "0.15.0", 11 | "0.5.1": "0.15.0", 12 | "0.6.0": "0.15.0", 13 | "0.6.1": "0.15.0", 14 | "0.6.2": "0.15.0", 15 | "0.6.3": "0.15.0", 16 | "0.6.4": "0.15.0" 17 | } --------------------------------------------------------------------------------