├── .editorconfig ├── .eslintrc ├── .github └── workflows │ └── publish.yml ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── icon.png ├── index.html ├── package.json ├── pnpm-lock.yaml ├── screencast.gif ├── src └── main.ts ├── tsconfig.json └── vite.config.ts /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | charset = utf-8 7 | trim_trailing_whitespace = true 8 | insert_final_newline = true 9 | 10 | [*.md] 11 | max_line_length = off 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "es6": true, 4 | "browser": true 5 | }, 6 | "globals": { 7 | "Atomics": "readonly", 8 | "SharedArrayBuffer": "readonly" 9 | }, 10 | "parser": "@typescript-eslint/parser", 11 | "parserOptions": { 12 | "ecmaVersion": 2015, 13 | "sourceType": "module" 14 | }, 15 | "plugins": [ 16 | "@typescript-eslint" 17 | ], 18 | "rules": { 19 | "quotes": [ 20 | "warn", 21 | "single", 22 | { 23 | "allowTemplateLiterals": true 24 | } 25 | ], 26 | "arrow-parens": [ 27 | "warn", 28 | "as-needed" 29 | ], 30 | "comma-spacing": [ 31 | "warn", 32 | { 33 | "after": true 34 | } 35 | ], 36 | "linebreak-style": [ 37 | "error", 38 | "unix" 39 | ], 40 | "object-curly-spacing": [ 41 | "error", 42 | "always" 43 | ], 44 | "@typescript-eslint/semi": [ 45 | "warn" 46 | ] 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Build plugin 2 | 3 | on: 4 | push: 5 | # Sequence of patterns matched against refs/tags 6 | tags: 7 | - "*" # Push events to matching any tag format, i.e. 1.0, 20.15.10 8 | 9 | env: 10 | PLUGIN_NAME: logseq-plugin-comment-block 11 | 12 | jobs: 13 | build: 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - uses: actions/checkout@v4 18 | - name: Use Node.js 19 | uses: actions/setup-node@v4 20 | with: 21 | node-version: "20.x" # You might need to adjust this value to your own version 22 | - name: Build 23 | id: build 24 | run: | 25 | npm install -g pnpm 26 | pnpm install 27 | pnpm build 28 | mv dist ${{ env.PLUGIN_NAME }} 29 | zip -r ${{ env.PLUGIN_NAME }}.zip ${{ env.PLUGIN_NAME }} 30 | tar -cvzf ${{ env.PLUGIN_NAME }}.tar.gz -C ${{ env.PLUGIN_NAME }} . 31 | ls 32 | echo "::set-output name=tag_name::$(git tag --sort version:refname | tail -n 1)" 33 | 34 | - name: Create Release 35 | uses: ncipollo/release-action@v1 36 | id: create_release 37 | env: 38 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 39 | VERSION: ${{ github.ref }} 40 | with: 41 | allowUpdates: true 42 | draft: false 43 | prerelease: false 44 | 45 | - name: Upload zip file 46 | id: upload_zip 47 | uses: actions/upload-release-asset@v1 48 | env: 49 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 50 | with: 51 | upload_url: ${{ steps.create_release.outputs.upload_url }} 52 | asset_path: ./${{ env.PLUGIN_NAME }}.zip 53 | asset_name: ${{ env.PLUGIN_NAME }}-${{ steps.build.outputs.tag_name }}.zip 54 | asset_content_type: application/zip 55 | 56 | - name: Upload tar.gz file 57 | id: upload_metadata 58 | uses: actions/upload-release-asset@v1 59 | env: 60 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 61 | with: 62 | upload_url: ${{ steps.create_release.outputs.upload_url }} 63 | asset_path: ./${{ env.PLUGIN_NAME }}.tar.gz 64 | asset_name: ${{ env.PLUGIN_NAME }}-${{ steps.build.outputs.tag_name }}.tar.gz 65 | asset_content_type: application/json 66 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | 4 | .vscode/ 5 | .DS_Store 6 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## v0.0.9 4 | 5 | - infra: update github action config 6 | 7 | ## v0.0.8 8 | 9 | - infra: upgrade deps. 10 | - feat: add settings "putBlockRefAsChild" 11 | 12 | ## v0.0.7 13 | 14 | - fix: lock file 15 | 16 | ## v0.0.6 17 | 18 | - infra: upgrade deps. 19 | - feat: add comment block embed to children 20 | - fix: comment block can not trigger from parallel panel 21 | 22 | ## v0.0.5 23 | 24 | - fix: adjust short cut from `mod+shift+c` to `mod+shift+i` 25 | 26 | ## v0.0.4 27 | 28 | - infra: build tool changed from Webpack to Vite 29 | - infra: add Github Action 30 | - feat: add shortcut support, which is bound to `mod+shift+c` #4 31 | 32 | ## v0.0.3 33 | 34 | - Add screencast for README. 35 | - Cleanup code. 36 | 37 | ## v0.0.2 38 | 39 | - Rename command context menu to `Comment block`. 40 | - Fix: comment block can not be created. 41 | - Fix: can not reuse first empty block. 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 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 | # Logseq Comment Block 2 | 3 | [![Github All Releases](https://img.shields.io/github/downloads/vipzhicheng/logseq-plugin-comment-block/total.svg)](https://github.com/vipzhicheng/logseq-plugin-comment-block/releases) 4 | 5 | For building an automatic comment history for Logseq! You can comment any block and show the connected history on journal page, current page, block ref sidebar and "Comments" page. 6 | 7 | So, it should be a workflow of Logseq powered by plugin. 8 | 9 | ![screencast by Bailey](screencast.gif) 10 | 11 | ## Inspiration and Thanks 12 | 13 | The inspiration of this plugin comes from [our community](https://discord.com/channels/725182569297215569/915076465027055656/915226549857435709) by Bailey Jennings, and likely borrowed from Roam. 14 | 15 | ## Why need this 16 | 17 | If you have a long term plan/job/task, you may need to write down something about it day by day, use this way, you can keep your todo list clean and the progress connected. 18 | 19 | Also Bailey made a demo video on Youtube 20 | 21 | [![Watch the video](https://img.youtube.com/vi/TPP2ejiuk-g/maxresdefault.jpg)](https://www.youtube.com/watch?v=TPP2ejiuk-g) 22 | 23 | ## Installation 24 | 25 | ### Preparation 26 | 27 | - Click the 3 dots in the righthand corner and go to `Settings`. 28 | - Got to advanced and enable Developer mode. 29 | - Restart the app. 30 | - Click 3 dots and go to `Plugins`. 31 | 32 | ### Install plugins from Marketplace (recommended) 33 | 34 | - Click `Marketplace` button and then click `Plugins`. 35 | - Find the plugin and click `Install`. 36 | 37 | ### Install plugins manually 38 | 39 | - Download released version assets from Github. 40 | - Unzip it. 41 | - Click `Load unpacked plugin`, and select destination directory to the unziped folder. 42 | 43 | ## Usage 44 | 45 | - Trigger `Comment block` from block contextual menu. 46 | - Trigger `/Comment block` from block slash commands. 47 | - Trigger by shortcut `mod+shift+i`, mod means `command` on Mac and means `ctrl` on Windows. 48 | 49 | ## Settings 50 | 51 | - `putBlockRefAsChild': That means everytime you trigger a comment, it will insert a new block and add commented block ref as child. If you disable this, it will insert a new block as the child of commented block ref. Use this with CAUTION, because the embed feature will not work and it can not reuse the block ref if you trigger comment again. 52 | 53 | ## CAUTION 54 | 55 | If you change the `Preferred date format` on Settings page, you will lose your connections between journal and comments. 56 | 57 | ## ❤️ Buy me a coffee 58 | 59 | If you like this plugin and you will, you can choose to buy me a coffee via [this](https://www.buymeacoffee.com/vipzhicheng) and [this](https://afdian.net/@vipzhicheng), that means a lot to me. 60 | 61 | ## Licence 62 | 63 | MIT 64 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipzhicheng/logseq-plugin-comment-block/8da0b723c2ec4660d2136a6aed213aa022d03113/icon.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Comment block 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "logseq-plugin-comment-block", 3 | "version": "0.0.9", 4 | "license": "MIT", 5 | "main": "index.html", 6 | "logseq": { 7 | "icon": "./icon.png", 8 | "title": "Comment Block", 9 | "id": "logseq-plugin-comment-block" 10 | }, 11 | "scripts": { 12 | "build": "vite build && cp LICENSE README.md icon.png package.json ./dist/" 13 | }, 14 | "devDependencies": { 15 | "@types/node": "^22.14.0", 16 | "@typescript-eslint/eslint-plugin": "^8.29.0", 17 | "@typescript-eslint/parser": "^8.29.0", 18 | "eslint": "^9.23.0", 19 | "typescript": "^5.8.2", 20 | "vite": "^6.2.5" 21 | }, 22 | "dependencies": { 23 | "@logseq/libs": "0.0.17", 24 | "date-fns": "^4.1.0" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@logseq/libs': 9 | specifier: 0.0.17 10 | version: 0.0.17 11 | date-fns: 12 | specifier: ^4.1.0 13 | version: 4.1.0 14 | 15 | devDependencies: 16 | '@types/node': 17 | specifier: ^22.14.0 18 | version: 22.14.0 19 | '@typescript-eslint/eslint-plugin': 20 | specifier: ^8.29.0 21 | version: 8.29.0(@typescript-eslint/parser@8.29.0)(eslint@9.23.0)(typescript@5.8.2) 22 | '@typescript-eslint/parser': 23 | specifier: ^8.29.0 24 | version: 8.29.0(eslint@9.23.0)(typescript@5.8.2) 25 | eslint: 26 | specifier: ^9.23.0 27 | version: 9.23.0 28 | typescript: 29 | specifier: ^5.8.2 30 | version: 5.8.2 31 | vite: 32 | specifier: ^6.2.5 33 | version: 6.2.5(@types/node@22.14.0) 34 | 35 | packages: 36 | 37 | /@esbuild/aix-ppc64@0.25.2: 38 | resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} 39 | engines: {node: '>=18'} 40 | cpu: [ppc64] 41 | os: [aix] 42 | requiresBuild: true 43 | dev: true 44 | optional: true 45 | 46 | /@esbuild/android-arm64@0.25.2: 47 | resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} 48 | engines: {node: '>=18'} 49 | cpu: [arm64] 50 | os: [android] 51 | requiresBuild: true 52 | dev: true 53 | optional: true 54 | 55 | /@esbuild/android-arm@0.25.2: 56 | resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} 57 | engines: {node: '>=18'} 58 | cpu: [arm] 59 | os: [android] 60 | requiresBuild: true 61 | dev: true 62 | optional: true 63 | 64 | /@esbuild/android-x64@0.25.2: 65 | resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} 66 | engines: {node: '>=18'} 67 | cpu: [x64] 68 | os: [android] 69 | requiresBuild: true 70 | dev: true 71 | optional: true 72 | 73 | /@esbuild/darwin-arm64@0.25.2: 74 | resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} 75 | engines: {node: '>=18'} 76 | cpu: [arm64] 77 | os: [darwin] 78 | requiresBuild: true 79 | dev: true 80 | optional: true 81 | 82 | /@esbuild/darwin-x64@0.25.2: 83 | resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} 84 | engines: {node: '>=18'} 85 | cpu: [x64] 86 | os: [darwin] 87 | requiresBuild: true 88 | dev: true 89 | optional: true 90 | 91 | /@esbuild/freebsd-arm64@0.25.2: 92 | resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} 93 | engines: {node: '>=18'} 94 | cpu: [arm64] 95 | os: [freebsd] 96 | requiresBuild: true 97 | dev: true 98 | optional: true 99 | 100 | /@esbuild/freebsd-x64@0.25.2: 101 | resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} 102 | engines: {node: '>=18'} 103 | cpu: [x64] 104 | os: [freebsd] 105 | requiresBuild: true 106 | dev: true 107 | optional: true 108 | 109 | /@esbuild/linux-arm64@0.25.2: 110 | resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} 111 | engines: {node: '>=18'} 112 | cpu: [arm64] 113 | os: [linux] 114 | requiresBuild: true 115 | dev: true 116 | optional: true 117 | 118 | /@esbuild/linux-arm@0.25.2: 119 | resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} 120 | engines: {node: '>=18'} 121 | cpu: [arm] 122 | os: [linux] 123 | requiresBuild: true 124 | dev: true 125 | optional: true 126 | 127 | /@esbuild/linux-ia32@0.25.2: 128 | resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} 129 | engines: {node: '>=18'} 130 | cpu: [ia32] 131 | os: [linux] 132 | requiresBuild: true 133 | dev: true 134 | optional: true 135 | 136 | /@esbuild/linux-loong64@0.25.2: 137 | resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} 138 | engines: {node: '>=18'} 139 | cpu: [loong64] 140 | os: [linux] 141 | requiresBuild: true 142 | dev: true 143 | optional: true 144 | 145 | /@esbuild/linux-mips64el@0.25.2: 146 | resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} 147 | engines: {node: '>=18'} 148 | cpu: [mips64el] 149 | os: [linux] 150 | requiresBuild: true 151 | dev: true 152 | optional: true 153 | 154 | /@esbuild/linux-ppc64@0.25.2: 155 | resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} 156 | engines: {node: '>=18'} 157 | cpu: [ppc64] 158 | os: [linux] 159 | requiresBuild: true 160 | dev: true 161 | optional: true 162 | 163 | /@esbuild/linux-riscv64@0.25.2: 164 | resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} 165 | engines: {node: '>=18'} 166 | cpu: [riscv64] 167 | os: [linux] 168 | requiresBuild: true 169 | dev: true 170 | optional: true 171 | 172 | /@esbuild/linux-s390x@0.25.2: 173 | resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} 174 | engines: {node: '>=18'} 175 | cpu: [s390x] 176 | os: [linux] 177 | requiresBuild: true 178 | dev: true 179 | optional: true 180 | 181 | /@esbuild/linux-x64@0.25.2: 182 | resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} 183 | engines: {node: '>=18'} 184 | cpu: [x64] 185 | os: [linux] 186 | requiresBuild: true 187 | dev: true 188 | optional: true 189 | 190 | /@esbuild/netbsd-arm64@0.25.2: 191 | resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} 192 | engines: {node: '>=18'} 193 | cpu: [arm64] 194 | os: [netbsd] 195 | requiresBuild: true 196 | dev: true 197 | optional: true 198 | 199 | /@esbuild/netbsd-x64@0.25.2: 200 | resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} 201 | engines: {node: '>=18'} 202 | cpu: [x64] 203 | os: [netbsd] 204 | requiresBuild: true 205 | dev: true 206 | optional: true 207 | 208 | /@esbuild/openbsd-arm64@0.25.2: 209 | resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} 210 | engines: {node: '>=18'} 211 | cpu: [arm64] 212 | os: [openbsd] 213 | requiresBuild: true 214 | dev: true 215 | optional: true 216 | 217 | /@esbuild/openbsd-x64@0.25.2: 218 | resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} 219 | engines: {node: '>=18'} 220 | cpu: [x64] 221 | os: [openbsd] 222 | requiresBuild: true 223 | dev: true 224 | optional: true 225 | 226 | /@esbuild/sunos-x64@0.25.2: 227 | resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} 228 | engines: {node: '>=18'} 229 | cpu: [x64] 230 | os: [sunos] 231 | requiresBuild: true 232 | dev: true 233 | optional: true 234 | 235 | /@esbuild/win32-arm64@0.25.2: 236 | resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} 237 | engines: {node: '>=18'} 238 | cpu: [arm64] 239 | os: [win32] 240 | requiresBuild: true 241 | dev: true 242 | optional: true 243 | 244 | /@esbuild/win32-ia32@0.25.2: 245 | resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} 246 | engines: {node: '>=18'} 247 | cpu: [ia32] 248 | os: [win32] 249 | requiresBuild: true 250 | dev: true 251 | optional: true 252 | 253 | /@esbuild/win32-x64@0.25.2: 254 | resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} 255 | engines: {node: '>=18'} 256 | cpu: [x64] 257 | os: [win32] 258 | requiresBuild: true 259 | dev: true 260 | optional: true 261 | 262 | /@eslint-community/eslint-utils@4.5.1(eslint@9.23.0): 263 | resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} 264 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 265 | peerDependencies: 266 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 267 | dependencies: 268 | eslint: 9.23.0 269 | eslint-visitor-keys: 3.4.3 270 | dev: true 271 | 272 | /@eslint-community/regexpp@4.12.1: 273 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 274 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 275 | dev: true 276 | 277 | /@eslint/config-array@0.19.2: 278 | resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} 279 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 280 | dependencies: 281 | '@eslint/object-schema': 2.1.6 282 | debug: 4.4.0 283 | minimatch: 3.1.2 284 | transitivePeerDependencies: 285 | - supports-color 286 | dev: true 287 | 288 | /@eslint/config-helpers@0.2.1: 289 | resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} 290 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 291 | dev: true 292 | 293 | /@eslint/core@0.12.0: 294 | resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} 295 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 296 | dependencies: 297 | '@types/json-schema': 7.0.15 298 | dev: true 299 | 300 | /@eslint/core@0.13.0: 301 | resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} 302 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 303 | dependencies: 304 | '@types/json-schema': 7.0.15 305 | dev: true 306 | 307 | /@eslint/eslintrc@3.3.1: 308 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 309 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 310 | dependencies: 311 | ajv: 6.12.6 312 | debug: 4.4.0 313 | espree: 10.3.0 314 | globals: 14.0.0 315 | ignore: 5.3.2 316 | import-fresh: 3.3.1 317 | js-yaml: 4.1.0 318 | minimatch: 3.1.2 319 | strip-json-comments: 3.1.1 320 | transitivePeerDependencies: 321 | - supports-color 322 | dev: true 323 | 324 | /@eslint/js@9.23.0: 325 | resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} 326 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 327 | dev: true 328 | 329 | /@eslint/object-schema@2.1.6: 330 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 331 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 332 | dev: true 333 | 334 | /@eslint/plugin-kit@0.2.8: 335 | resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} 336 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 337 | dependencies: 338 | '@eslint/core': 0.13.0 339 | levn: 0.4.1 340 | dev: true 341 | 342 | /@humanfs/core@0.19.1: 343 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 344 | engines: {node: '>=18.18.0'} 345 | dev: true 346 | 347 | /@humanfs/node@0.16.6: 348 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 349 | engines: {node: '>=18.18.0'} 350 | dependencies: 351 | '@humanfs/core': 0.19.1 352 | '@humanwhocodes/retry': 0.3.1 353 | dev: true 354 | 355 | /@humanwhocodes/module-importer@1.0.1: 356 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 357 | engines: {node: '>=12.22'} 358 | dev: true 359 | 360 | /@humanwhocodes/retry@0.3.1: 361 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 362 | engines: {node: '>=18.18'} 363 | dev: true 364 | 365 | /@humanwhocodes/retry@0.4.2: 366 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} 367 | engines: {node: '>=18.18'} 368 | dev: true 369 | 370 | /@logseq/libs@0.0.17: 371 | resolution: {integrity: sha512-SkzzAaocmrgeHYrCOaRyEqzPOxw3d0qVEZSrt9qVvXE4tuEgbvEHR8tzI1N5RjgAv+PDWuGPiP7/mhcXHpINEw==} 372 | dependencies: 373 | csstype: 3.1.0 374 | debug: 4.3.4 375 | deepmerge: 4.3.1 376 | dompurify: 2.3.8 377 | eventemitter3: 4.0.7 378 | fast-deep-equal: 3.1.3 379 | lodash-es: 4.17.21 380 | path: 0.12.7 381 | snake-case: 3.0.4 382 | transitivePeerDependencies: 383 | - supports-color 384 | dev: false 385 | 386 | /@nodelib/fs.scandir@2.1.5: 387 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 388 | engines: {node: '>= 8'} 389 | dependencies: 390 | '@nodelib/fs.stat': 2.0.5 391 | run-parallel: 1.2.0 392 | dev: true 393 | 394 | /@nodelib/fs.stat@2.0.5: 395 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 396 | engines: {node: '>= 8'} 397 | dev: true 398 | 399 | /@nodelib/fs.walk@1.2.8: 400 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 401 | engines: {node: '>= 8'} 402 | dependencies: 403 | '@nodelib/fs.scandir': 2.1.5 404 | fastq: 1.19.1 405 | dev: true 406 | 407 | /@rollup/rollup-android-arm-eabi@4.39.0: 408 | resolution: {integrity: sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==} 409 | cpu: [arm] 410 | os: [android] 411 | requiresBuild: true 412 | dev: true 413 | optional: true 414 | 415 | /@rollup/rollup-android-arm64@4.39.0: 416 | resolution: {integrity: sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==} 417 | cpu: [arm64] 418 | os: [android] 419 | requiresBuild: true 420 | dev: true 421 | optional: true 422 | 423 | /@rollup/rollup-darwin-arm64@4.39.0: 424 | resolution: {integrity: sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==} 425 | cpu: [arm64] 426 | os: [darwin] 427 | requiresBuild: true 428 | dev: true 429 | optional: true 430 | 431 | /@rollup/rollup-darwin-x64@4.39.0: 432 | resolution: {integrity: sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==} 433 | cpu: [x64] 434 | os: [darwin] 435 | requiresBuild: true 436 | dev: true 437 | optional: true 438 | 439 | /@rollup/rollup-freebsd-arm64@4.39.0: 440 | resolution: {integrity: sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==} 441 | cpu: [arm64] 442 | os: [freebsd] 443 | requiresBuild: true 444 | dev: true 445 | optional: true 446 | 447 | /@rollup/rollup-freebsd-x64@4.39.0: 448 | resolution: {integrity: sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==} 449 | cpu: [x64] 450 | os: [freebsd] 451 | requiresBuild: true 452 | dev: true 453 | optional: true 454 | 455 | /@rollup/rollup-linux-arm-gnueabihf@4.39.0: 456 | resolution: {integrity: sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==} 457 | cpu: [arm] 458 | os: [linux] 459 | libc: [glibc] 460 | requiresBuild: true 461 | dev: true 462 | optional: true 463 | 464 | /@rollup/rollup-linux-arm-musleabihf@4.39.0: 465 | resolution: {integrity: sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==} 466 | cpu: [arm] 467 | os: [linux] 468 | libc: [musl] 469 | requiresBuild: true 470 | dev: true 471 | optional: true 472 | 473 | /@rollup/rollup-linux-arm64-gnu@4.39.0: 474 | resolution: {integrity: sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==} 475 | cpu: [arm64] 476 | os: [linux] 477 | libc: [glibc] 478 | requiresBuild: true 479 | dev: true 480 | optional: true 481 | 482 | /@rollup/rollup-linux-arm64-musl@4.39.0: 483 | resolution: {integrity: sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==} 484 | cpu: [arm64] 485 | os: [linux] 486 | libc: [musl] 487 | requiresBuild: true 488 | dev: true 489 | optional: true 490 | 491 | /@rollup/rollup-linux-loongarch64-gnu@4.39.0: 492 | resolution: {integrity: sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==} 493 | cpu: [loong64] 494 | os: [linux] 495 | libc: [glibc] 496 | requiresBuild: true 497 | dev: true 498 | optional: true 499 | 500 | /@rollup/rollup-linux-powerpc64le-gnu@4.39.0: 501 | resolution: {integrity: sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==} 502 | cpu: [ppc64] 503 | os: [linux] 504 | libc: [glibc] 505 | requiresBuild: true 506 | dev: true 507 | optional: true 508 | 509 | /@rollup/rollup-linux-riscv64-gnu@4.39.0: 510 | resolution: {integrity: sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==} 511 | cpu: [riscv64] 512 | os: [linux] 513 | libc: [glibc] 514 | requiresBuild: true 515 | dev: true 516 | optional: true 517 | 518 | /@rollup/rollup-linux-riscv64-musl@4.39.0: 519 | resolution: {integrity: sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==} 520 | cpu: [riscv64] 521 | os: [linux] 522 | libc: [musl] 523 | requiresBuild: true 524 | dev: true 525 | optional: true 526 | 527 | /@rollup/rollup-linux-s390x-gnu@4.39.0: 528 | resolution: {integrity: sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==} 529 | cpu: [s390x] 530 | os: [linux] 531 | libc: [glibc] 532 | requiresBuild: true 533 | dev: true 534 | optional: true 535 | 536 | /@rollup/rollup-linux-x64-gnu@4.39.0: 537 | resolution: {integrity: sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==} 538 | cpu: [x64] 539 | os: [linux] 540 | libc: [glibc] 541 | requiresBuild: true 542 | dev: true 543 | optional: true 544 | 545 | /@rollup/rollup-linux-x64-musl@4.39.0: 546 | resolution: {integrity: sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==} 547 | cpu: [x64] 548 | os: [linux] 549 | libc: [musl] 550 | requiresBuild: true 551 | dev: true 552 | optional: true 553 | 554 | /@rollup/rollup-win32-arm64-msvc@4.39.0: 555 | resolution: {integrity: sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==} 556 | cpu: [arm64] 557 | os: [win32] 558 | requiresBuild: true 559 | dev: true 560 | optional: true 561 | 562 | /@rollup/rollup-win32-ia32-msvc@4.39.0: 563 | resolution: {integrity: sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==} 564 | cpu: [ia32] 565 | os: [win32] 566 | requiresBuild: true 567 | dev: true 568 | optional: true 569 | 570 | /@rollup/rollup-win32-x64-msvc@4.39.0: 571 | resolution: {integrity: sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==} 572 | cpu: [x64] 573 | os: [win32] 574 | requiresBuild: true 575 | dev: true 576 | optional: true 577 | 578 | /@types/estree@1.0.7: 579 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 580 | dev: true 581 | 582 | /@types/json-schema@7.0.15: 583 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 584 | dev: true 585 | 586 | /@types/node@22.14.0: 587 | resolution: {integrity: sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==} 588 | dependencies: 589 | undici-types: 6.21.0 590 | dev: true 591 | 592 | /@typescript-eslint/eslint-plugin@8.29.0(@typescript-eslint/parser@8.29.0)(eslint@9.23.0)(typescript@5.8.2): 593 | resolution: {integrity: sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==} 594 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 595 | peerDependencies: 596 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 597 | eslint: ^8.57.0 || ^9.0.0 598 | typescript: '>=4.8.4 <5.9.0' 599 | dependencies: 600 | '@eslint-community/regexpp': 4.12.1 601 | '@typescript-eslint/parser': 8.29.0(eslint@9.23.0)(typescript@5.8.2) 602 | '@typescript-eslint/scope-manager': 8.29.0 603 | '@typescript-eslint/type-utils': 8.29.0(eslint@9.23.0)(typescript@5.8.2) 604 | '@typescript-eslint/utils': 8.29.0(eslint@9.23.0)(typescript@5.8.2) 605 | '@typescript-eslint/visitor-keys': 8.29.0 606 | eslint: 9.23.0 607 | graphemer: 1.4.0 608 | ignore: 5.3.2 609 | natural-compare: 1.4.0 610 | ts-api-utils: 2.1.0(typescript@5.8.2) 611 | typescript: 5.8.2 612 | transitivePeerDependencies: 613 | - supports-color 614 | dev: true 615 | 616 | /@typescript-eslint/parser@8.29.0(eslint@9.23.0)(typescript@5.8.2): 617 | resolution: {integrity: sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==} 618 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 619 | peerDependencies: 620 | eslint: ^8.57.0 || ^9.0.0 621 | typescript: '>=4.8.4 <5.9.0' 622 | dependencies: 623 | '@typescript-eslint/scope-manager': 8.29.0 624 | '@typescript-eslint/types': 8.29.0 625 | '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2) 626 | '@typescript-eslint/visitor-keys': 8.29.0 627 | debug: 4.4.0 628 | eslint: 9.23.0 629 | typescript: 5.8.2 630 | transitivePeerDependencies: 631 | - supports-color 632 | dev: true 633 | 634 | /@typescript-eslint/scope-manager@8.29.0: 635 | resolution: {integrity: sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==} 636 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 637 | dependencies: 638 | '@typescript-eslint/types': 8.29.0 639 | '@typescript-eslint/visitor-keys': 8.29.0 640 | dev: true 641 | 642 | /@typescript-eslint/type-utils@8.29.0(eslint@9.23.0)(typescript@5.8.2): 643 | resolution: {integrity: sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==} 644 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 645 | peerDependencies: 646 | eslint: ^8.57.0 || ^9.0.0 647 | typescript: '>=4.8.4 <5.9.0' 648 | dependencies: 649 | '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2) 650 | '@typescript-eslint/utils': 8.29.0(eslint@9.23.0)(typescript@5.8.2) 651 | debug: 4.4.0 652 | eslint: 9.23.0 653 | ts-api-utils: 2.1.0(typescript@5.8.2) 654 | typescript: 5.8.2 655 | transitivePeerDependencies: 656 | - supports-color 657 | dev: true 658 | 659 | /@typescript-eslint/types@8.29.0: 660 | resolution: {integrity: sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==} 661 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 662 | dev: true 663 | 664 | /@typescript-eslint/typescript-estree@8.29.0(typescript@5.8.2): 665 | resolution: {integrity: sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==} 666 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 667 | peerDependencies: 668 | typescript: '>=4.8.4 <5.9.0' 669 | dependencies: 670 | '@typescript-eslint/types': 8.29.0 671 | '@typescript-eslint/visitor-keys': 8.29.0 672 | debug: 4.4.0 673 | fast-glob: 3.3.3 674 | is-glob: 4.0.3 675 | minimatch: 9.0.5 676 | semver: 7.7.1 677 | ts-api-utils: 2.1.0(typescript@5.8.2) 678 | typescript: 5.8.2 679 | transitivePeerDependencies: 680 | - supports-color 681 | dev: true 682 | 683 | /@typescript-eslint/utils@8.29.0(eslint@9.23.0)(typescript@5.8.2): 684 | resolution: {integrity: sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==} 685 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 686 | peerDependencies: 687 | eslint: ^8.57.0 || ^9.0.0 688 | typescript: '>=4.8.4 <5.9.0' 689 | dependencies: 690 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0) 691 | '@typescript-eslint/scope-manager': 8.29.0 692 | '@typescript-eslint/types': 8.29.0 693 | '@typescript-eslint/typescript-estree': 8.29.0(typescript@5.8.2) 694 | eslint: 9.23.0 695 | typescript: 5.8.2 696 | transitivePeerDependencies: 697 | - supports-color 698 | dev: true 699 | 700 | /@typescript-eslint/visitor-keys@8.29.0: 701 | resolution: {integrity: sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==} 702 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 703 | dependencies: 704 | '@typescript-eslint/types': 8.29.0 705 | eslint-visitor-keys: 4.2.0 706 | dev: true 707 | 708 | /acorn-jsx@5.3.2(acorn@8.14.1): 709 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 710 | peerDependencies: 711 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 712 | dependencies: 713 | acorn: 8.14.1 714 | dev: true 715 | 716 | /acorn@8.14.1: 717 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 718 | engines: {node: '>=0.4.0'} 719 | hasBin: true 720 | dev: true 721 | 722 | /ajv@6.12.6: 723 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 724 | dependencies: 725 | fast-deep-equal: 3.1.3 726 | fast-json-stable-stringify: 2.1.0 727 | json-schema-traverse: 0.4.1 728 | uri-js: 4.4.1 729 | dev: true 730 | 731 | /ansi-styles@4.3.0: 732 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 733 | engines: {node: '>=8'} 734 | dependencies: 735 | color-convert: 2.0.1 736 | dev: true 737 | 738 | /argparse@2.0.1: 739 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 740 | dev: true 741 | 742 | /balanced-match@1.0.2: 743 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 744 | dev: true 745 | 746 | /brace-expansion@1.1.11: 747 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 748 | dependencies: 749 | balanced-match: 1.0.2 750 | concat-map: 0.0.1 751 | dev: true 752 | 753 | /brace-expansion@2.0.1: 754 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 755 | dependencies: 756 | balanced-match: 1.0.2 757 | dev: true 758 | 759 | /braces@3.0.3: 760 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 761 | engines: {node: '>=8'} 762 | dependencies: 763 | fill-range: 7.1.1 764 | dev: true 765 | 766 | /callsites@3.1.0: 767 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 768 | engines: {node: '>=6'} 769 | dev: true 770 | 771 | /chalk@4.1.2: 772 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 773 | engines: {node: '>=10'} 774 | dependencies: 775 | ansi-styles: 4.3.0 776 | supports-color: 7.2.0 777 | dev: true 778 | 779 | /color-convert@2.0.1: 780 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 781 | engines: {node: '>=7.0.0'} 782 | dependencies: 783 | color-name: 1.1.4 784 | dev: true 785 | 786 | /color-name@1.1.4: 787 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 788 | dev: true 789 | 790 | /concat-map@0.0.1: 791 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 792 | dev: true 793 | 794 | /cross-spawn@7.0.6: 795 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 796 | engines: {node: '>= 8'} 797 | dependencies: 798 | path-key: 3.1.1 799 | shebang-command: 2.0.0 800 | which: 2.0.2 801 | dev: true 802 | 803 | /csstype@3.1.0: 804 | resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==} 805 | dev: false 806 | 807 | /date-fns@4.1.0: 808 | resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} 809 | dev: false 810 | 811 | /debug@4.3.4: 812 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 813 | engines: {node: '>=6.0'} 814 | peerDependencies: 815 | supports-color: '*' 816 | peerDependenciesMeta: 817 | supports-color: 818 | optional: true 819 | dependencies: 820 | ms: 2.1.2 821 | dev: false 822 | 823 | /debug@4.4.0: 824 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 825 | engines: {node: '>=6.0'} 826 | peerDependencies: 827 | supports-color: '*' 828 | peerDependenciesMeta: 829 | supports-color: 830 | optional: true 831 | dependencies: 832 | ms: 2.1.3 833 | dev: true 834 | 835 | /deep-is@0.1.4: 836 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 837 | dev: true 838 | 839 | /deepmerge@4.3.1: 840 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 841 | engines: {node: '>=0.10.0'} 842 | dev: false 843 | 844 | /dompurify@2.3.8: 845 | resolution: {integrity: sha512-eVhaWoVibIzqdGYjwsBWodIQIaXFSB+cKDf4cfxLMsK0xiud6SE+/WCVx/Xw/UwQsa4cS3T2eITcdtmTg2UKcw==} 846 | dev: false 847 | 848 | /dot-case@3.0.4: 849 | resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} 850 | dependencies: 851 | no-case: 3.0.4 852 | tslib: 2.8.1 853 | dev: false 854 | 855 | /esbuild@0.25.2: 856 | resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} 857 | engines: {node: '>=18'} 858 | hasBin: true 859 | requiresBuild: true 860 | optionalDependencies: 861 | '@esbuild/aix-ppc64': 0.25.2 862 | '@esbuild/android-arm': 0.25.2 863 | '@esbuild/android-arm64': 0.25.2 864 | '@esbuild/android-x64': 0.25.2 865 | '@esbuild/darwin-arm64': 0.25.2 866 | '@esbuild/darwin-x64': 0.25.2 867 | '@esbuild/freebsd-arm64': 0.25.2 868 | '@esbuild/freebsd-x64': 0.25.2 869 | '@esbuild/linux-arm': 0.25.2 870 | '@esbuild/linux-arm64': 0.25.2 871 | '@esbuild/linux-ia32': 0.25.2 872 | '@esbuild/linux-loong64': 0.25.2 873 | '@esbuild/linux-mips64el': 0.25.2 874 | '@esbuild/linux-ppc64': 0.25.2 875 | '@esbuild/linux-riscv64': 0.25.2 876 | '@esbuild/linux-s390x': 0.25.2 877 | '@esbuild/linux-x64': 0.25.2 878 | '@esbuild/netbsd-arm64': 0.25.2 879 | '@esbuild/netbsd-x64': 0.25.2 880 | '@esbuild/openbsd-arm64': 0.25.2 881 | '@esbuild/openbsd-x64': 0.25.2 882 | '@esbuild/sunos-x64': 0.25.2 883 | '@esbuild/win32-arm64': 0.25.2 884 | '@esbuild/win32-ia32': 0.25.2 885 | '@esbuild/win32-x64': 0.25.2 886 | dev: true 887 | 888 | /escape-string-regexp@4.0.0: 889 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 890 | engines: {node: '>=10'} 891 | dev: true 892 | 893 | /eslint-scope@8.3.0: 894 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} 895 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 896 | dependencies: 897 | esrecurse: 4.3.0 898 | estraverse: 5.3.0 899 | dev: true 900 | 901 | /eslint-visitor-keys@3.4.3: 902 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 903 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 904 | dev: true 905 | 906 | /eslint-visitor-keys@4.2.0: 907 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 908 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 909 | dev: true 910 | 911 | /eslint@9.23.0: 912 | resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==} 913 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 914 | hasBin: true 915 | peerDependencies: 916 | jiti: '*' 917 | peerDependenciesMeta: 918 | jiti: 919 | optional: true 920 | dependencies: 921 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0) 922 | '@eslint-community/regexpp': 4.12.1 923 | '@eslint/config-array': 0.19.2 924 | '@eslint/config-helpers': 0.2.1 925 | '@eslint/core': 0.12.0 926 | '@eslint/eslintrc': 3.3.1 927 | '@eslint/js': 9.23.0 928 | '@eslint/plugin-kit': 0.2.8 929 | '@humanfs/node': 0.16.6 930 | '@humanwhocodes/module-importer': 1.0.1 931 | '@humanwhocodes/retry': 0.4.2 932 | '@types/estree': 1.0.7 933 | '@types/json-schema': 7.0.15 934 | ajv: 6.12.6 935 | chalk: 4.1.2 936 | cross-spawn: 7.0.6 937 | debug: 4.4.0 938 | escape-string-regexp: 4.0.0 939 | eslint-scope: 8.3.0 940 | eslint-visitor-keys: 4.2.0 941 | espree: 10.3.0 942 | esquery: 1.6.0 943 | esutils: 2.0.3 944 | fast-deep-equal: 3.1.3 945 | file-entry-cache: 8.0.0 946 | find-up: 5.0.0 947 | glob-parent: 6.0.2 948 | ignore: 5.3.2 949 | imurmurhash: 0.1.4 950 | is-glob: 4.0.3 951 | json-stable-stringify-without-jsonify: 1.0.1 952 | lodash.merge: 4.6.2 953 | minimatch: 3.1.2 954 | natural-compare: 1.4.0 955 | optionator: 0.9.4 956 | transitivePeerDependencies: 957 | - supports-color 958 | dev: true 959 | 960 | /espree@10.3.0: 961 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 962 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 963 | dependencies: 964 | acorn: 8.14.1 965 | acorn-jsx: 5.3.2(acorn@8.14.1) 966 | eslint-visitor-keys: 4.2.0 967 | dev: true 968 | 969 | /esquery@1.6.0: 970 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 971 | engines: {node: '>=0.10'} 972 | dependencies: 973 | estraverse: 5.3.0 974 | dev: true 975 | 976 | /esrecurse@4.3.0: 977 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 978 | engines: {node: '>=4.0'} 979 | dependencies: 980 | estraverse: 5.3.0 981 | dev: true 982 | 983 | /estraverse@5.3.0: 984 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 985 | engines: {node: '>=4.0'} 986 | dev: true 987 | 988 | /esutils@2.0.3: 989 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 990 | engines: {node: '>=0.10.0'} 991 | dev: true 992 | 993 | /eventemitter3@4.0.7: 994 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} 995 | dev: false 996 | 997 | /fast-deep-equal@3.1.3: 998 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 999 | 1000 | /fast-glob@3.3.3: 1001 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 1002 | engines: {node: '>=8.6.0'} 1003 | dependencies: 1004 | '@nodelib/fs.stat': 2.0.5 1005 | '@nodelib/fs.walk': 1.2.8 1006 | glob-parent: 5.1.2 1007 | merge2: 1.4.1 1008 | micromatch: 4.0.8 1009 | dev: true 1010 | 1011 | /fast-json-stable-stringify@2.1.0: 1012 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1013 | dev: true 1014 | 1015 | /fast-levenshtein@2.0.6: 1016 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1017 | dev: true 1018 | 1019 | /fastq@1.19.1: 1020 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 1021 | dependencies: 1022 | reusify: 1.1.0 1023 | dev: true 1024 | 1025 | /file-entry-cache@8.0.0: 1026 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 1027 | engines: {node: '>=16.0.0'} 1028 | dependencies: 1029 | flat-cache: 4.0.1 1030 | dev: true 1031 | 1032 | /fill-range@7.1.1: 1033 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1034 | engines: {node: '>=8'} 1035 | dependencies: 1036 | to-regex-range: 5.0.1 1037 | dev: true 1038 | 1039 | /find-up@5.0.0: 1040 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1041 | engines: {node: '>=10'} 1042 | dependencies: 1043 | locate-path: 6.0.0 1044 | path-exists: 4.0.0 1045 | dev: true 1046 | 1047 | /flat-cache@4.0.1: 1048 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 1049 | engines: {node: '>=16'} 1050 | dependencies: 1051 | flatted: 3.3.3 1052 | keyv: 4.5.4 1053 | dev: true 1054 | 1055 | /flatted@3.3.3: 1056 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 1057 | dev: true 1058 | 1059 | /fsevents@2.3.3: 1060 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1061 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1062 | os: [darwin] 1063 | requiresBuild: true 1064 | dev: true 1065 | optional: true 1066 | 1067 | /glob-parent@5.1.2: 1068 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1069 | engines: {node: '>= 6'} 1070 | dependencies: 1071 | is-glob: 4.0.3 1072 | dev: true 1073 | 1074 | /glob-parent@6.0.2: 1075 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1076 | engines: {node: '>=10.13.0'} 1077 | dependencies: 1078 | is-glob: 4.0.3 1079 | dev: true 1080 | 1081 | /globals@14.0.0: 1082 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1083 | engines: {node: '>=18'} 1084 | dev: true 1085 | 1086 | /graphemer@1.4.0: 1087 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1088 | dev: true 1089 | 1090 | /has-flag@4.0.0: 1091 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1092 | engines: {node: '>=8'} 1093 | dev: true 1094 | 1095 | /ignore@5.3.2: 1096 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1097 | engines: {node: '>= 4'} 1098 | dev: true 1099 | 1100 | /import-fresh@3.3.1: 1101 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 1102 | engines: {node: '>=6'} 1103 | dependencies: 1104 | parent-module: 1.0.1 1105 | resolve-from: 4.0.0 1106 | dev: true 1107 | 1108 | /imurmurhash@0.1.4: 1109 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1110 | engines: {node: '>=0.8.19'} 1111 | dev: true 1112 | 1113 | /inherits@2.0.3: 1114 | resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} 1115 | dev: false 1116 | 1117 | /is-extglob@2.1.1: 1118 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1119 | engines: {node: '>=0.10.0'} 1120 | dev: true 1121 | 1122 | /is-glob@4.0.3: 1123 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1124 | engines: {node: '>=0.10.0'} 1125 | dependencies: 1126 | is-extglob: 2.1.1 1127 | dev: true 1128 | 1129 | /is-number@7.0.0: 1130 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1131 | engines: {node: '>=0.12.0'} 1132 | dev: true 1133 | 1134 | /isexe@2.0.0: 1135 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1136 | dev: true 1137 | 1138 | /js-yaml@4.1.0: 1139 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1140 | hasBin: true 1141 | dependencies: 1142 | argparse: 2.0.1 1143 | dev: true 1144 | 1145 | /json-buffer@3.0.1: 1146 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1147 | dev: true 1148 | 1149 | /json-schema-traverse@0.4.1: 1150 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1151 | dev: true 1152 | 1153 | /json-stable-stringify-without-jsonify@1.0.1: 1154 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1155 | dev: true 1156 | 1157 | /keyv@4.5.4: 1158 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1159 | dependencies: 1160 | json-buffer: 3.0.1 1161 | dev: true 1162 | 1163 | /levn@0.4.1: 1164 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1165 | engines: {node: '>= 0.8.0'} 1166 | dependencies: 1167 | prelude-ls: 1.2.1 1168 | type-check: 0.4.0 1169 | dev: true 1170 | 1171 | /locate-path@6.0.0: 1172 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1173 | engines: {node: '>=10'} 1174 | dependencies: 1175 | p-locate: 5.0.0 1176 | dev: true 1177 | 1178 | /lodash-es@4.17.21: 1179 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} 1180 | dev: false 1181 | 1182 | /lodash.merge@4.6.2: 1183 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1184 | dev: true 1185 | 1186 | /lower-case@2.0.2: 1187 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 1188 | dependencies: 1189 | tslib: 2.8.1 1190 | dev: false 1191 | 1192 | /merge2@1.4.1: 1193 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1194 | engines: {node: '>= 8'} 1195 | dev: true 1196 | 1197 | /micromatch@4.0.8: 1198 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1199 | engines: {node: '>=8.6'} 1200 | dependencies: 1201 | braces: 3.0.3 1202 | picomatch: 2.3.1 1203 | dev: true 1204 | 1205 | /minimatch@3.1.2: 1206 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1207 | dependencies: 1208 | brace-expansion: 1.1.11 1209 | dev: true 1210 | 1211 | /minimatch@9.0.5: 1212 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1213 | engines: {node: '>=16 || 14 >=14.17'} 1214 | dependencies: 1215 | brace-expansion: 2.0.1 1216 | dev: true 1217 | 1218 | /ms@2.1.2: 1219 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1220 | dev: false 1221 | 1222 | /ms@2.1.3: 1223 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1224 | dev: true 1225 | 1226 | /nanoid@3.3.11: 1227 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1228 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1229 | hasBin: true 1230 | dev: true 1231 | 1232 | /natural-compare@1.4.0: 1233 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1234 | dev: true 1235 | 1236 | /no-case@3.0.4: 1237 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 1238 | dependencies: 1239 | lower-case: 2.0.2 1240 | tslib: 2.8.1 1241 | dev: false 1242 | 1243 | /optionator@0.9.4: 1244 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1245 | engines: {node: '>= 0.8.0'} 1246 | dependencies: 1247 | deep-is: 0.1.4 1248 | fast-levenshtein: 2.0.6 1249 | levn: 0.4.1 1250 | prelude-ls: 1.2.1 1251 | type-check: 0.4.0 1252 | word-wrap: 1.2.5 1253 | dev: true 1254 | 1255 | /p-limit@3.1.0: 1256 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1257 | engines: {node: '>=10'} 1258 | dependencies: 1259 | yocto-queue: 0.1.0 1260 | dev: true 1261 | 1262 | /p-locate@5.0.0: 1263 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1264 | engines: {node: '>=10'} 1265 | dependencies: 1266 | p-limit: 3.1.0 1267 | dev: true 1268 | 1269 | /parent-module@1.0.1: 1270 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1271 | engines: {node: '>=6'} 1272 | dependencies: 1273 | callsites: 3.1.0 1274 | dev: true 1275 | 1276 | /path-exists@4.0.0: 1277 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1278 | engines: {node: '>=8'} 1279 | dev: true 1280 | 1281 | /path-key@3.1.1: 1282 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1283 | engines: {node: '>=8'} 1284 | dev: true 1285 | 1286 | /path@0.12.7: 1287 | resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} 1288 | dependencies: 1289 | process: 0.11.10 1290 | util: 0.10.4 1291 | dev: false 1292 | 1293 | /picocolors@1.1.1: 1294 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1295 | dev: true 1296 | 1297 | /picomatch@2.3.1: 1298 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1299 | engines: {node: '>=8.6'} 1300 | dev: true 1301 | 1302 | /postcss@8.5.3: 1303 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 1304 | engines: {node: ^10 || ^12 || >=14} 1305 | dependencies: 1306 | nanoid: 3.3.11 1307 | picocolors: 1.1.1 1308 | source-map-js: 1.2.1 1309 | dev: true 1310 | 1311 | /prelude-ls@1.2.1: 1312 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1313 | engines: {node: '>= 0.8.0'} 1314 | dev: true 1315 | 1316 | /process@0.11.10: 1317 | resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} 1318 | engines: {node: '>= 0.6.0'} 1319 | dev: false 1320 | 1321 | /punycode@2.3.1: 1322 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1323 | engines: {node: '>=6'} 1324 | dev: true 1325 | 1326 | /queue-microtask@1.2.3: 1327 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1328 | dev: true 1329 | 1330 | /resolve-from@4.0.0: 1331 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1332 | engines: {node: '>=4'} 1333 | dev: true 1334 | 1335 | /reusify@1.1.0: 1336 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1337 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1338 | dev: true 1339 | 1340 | /rollup@4.39.0: 1341 | resolution: {integrity: sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==} 1342 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1343 | hasBin: true 1344 | dependencies: 1345 | '@types/estree': 1.0.7 1346 | optionalDependencies: 1347 | '@rollup/rollup-android-arm-eabi': 4.39.0 1348 | '@rollup/rollup-android-arm64': 4.39.0 1349 | '@rollup/rollup-darwin-arm64': 4.39.0 1350 | '@rollup/rollup-darwin-x64': 4.39.0 1351 | '@rollup/rollup-freebsd-arm64': 4.39.0 1352 | '@rollup/rollup-freebsd-x64': 4.39.0 1353 | '@rollup/rollup-linux-arm-gnueabihf': 4.39.0 1354 | '@rollup/rollup-linux-arm-musleabihf': 4.39.0 1355 | '@rollup/rollup-linux-arm64-gnu': 4.39.0 1356 | '@rollup/rollup-linux-arm64-musl': 4.39.0 1357 | '@rollup/rollup-linux-loongarch64-gnu': 4.39.0 1358 | '@rollup/rollup-linux-powerpc64le-gnu': 4.39.0 1359 | '@rollup/rollup-linux-riscv64-gnu': 4.39.0 1360 | '@rollup/rollup-linux-riscv64-musl': 4.39.0 1361 | '@rollup/rollup-linux-s390x-gnu': 4.39.0 1362 | '@rollup/rollup-linux-x64-gnu': 4.39.0 1363 | '@rollup/rollup-linux-x64-musl': 4.39.0 1364 | '@rollup/rollup-win32-arm64-msvc': 4.39.0 1365 | '@rollup/rollup-win32-ia32-msvc': 4.39.0 1366 | '@rollup/rollup-win32-x64-msvc': 4.39.0 1367 | fsevents: 2.3.3 1368 | dev: true 1369 | 1370 | /run-parallel@1.2.0: 1371 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1372 | dependencies: 1373 | queue-microtask: 1.2.3 1374 | dev: true 1375 | 1376 | /semver@7.7.1: 1377 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1378 | engines: {node: '>=10'} 1379 | hasBin: true 1380 | dev: true 1381 | 1382 | /shebang-command@2.0.0: 1383 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1384 | engines: {node: '>=8'} 1385 | dependencies: 1386 | shebang-regex: 3.0.0 1387 | dev: true 1388 | 1389 | /shebang-regex@3.0.0: 1390 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1391 | engines: {node: '>=8'} 1392 | dev: true 1393 | 1394 | /snake-case@3.0.4: 1395 | resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} 1396 | dependencies: 1397 | dot-case: 3.0.4 1398 | tslib: 2.8.1 1399 | dev: false 1400 | 1401 | /source-map-js@1.2.1: 1402 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1403 | engines: {node: '>=0.10.0'} 1404 | dev: true 1405 | 1406 | /strip-json-comments@3.1.1: 1407 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1408 | engines: {node: '>=8'} 1409 | dev: true 1410 | 1411 | /supports-color@7.2.0: 1412 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1413 | engines: {node: '>=8'} 1414 | dependencies: 1415 | has-flag: 4.0.0 1416 | dev: true 1417 | 1418 | /to-regex-range@5.0.1: 1419 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1420 | engines: {node: '>=8.0'} 1421 | dependencies: 1422 | is-number: 7.0.0 1423 | dev: true 1424 | 1425 | /ts-api-utils@2.1.0(typescript@5.8.2): 1426 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 1427 | engines: {node: '>=18.12'} 1428 | peerDependencies: 1429 | typescript: '>=4.8.4' 1430 | dependencies: 1431 | typescript: 5.8.2 1432 | dev: true 1433 | 1434 | /tslib@2.8.1: 1435 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1436 | dev: false 1437 | 1438 | /type-check@0.4.0: 1439 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1440 | engines: {node: '>= 0.8.0'} 1441 | dependencies: 1442 | prelude-ls: 1.2.1 1443 | dev: true 1444 | 1445 | /typescript@5.8.2: 1446 | resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} 1447 | engines: {node: '>=14.17'} 1448 | hasBin: true 1449 | dev: true 1450 | 1451 | /undici-types@6.21.0: 1452 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 1453 | dev: true 1454 | 1455 | /uri-js@4.4.1: 1456 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1457 | dependencies: 1458 | punycode: 2.3.1 1459 | dev: true 1460 | 1461 | /util@0.10.4: 1462 | resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} 1463 | dependencies: 1464 | inherits: 2.0.3 1465 | dev: false 1466 | 1467 | /vite@6.2.5(@types/node@22.14.0): 1468 | resolution: {integrity: sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==} 1469 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1470 | hasBin: true 1471 | peerDependencies: 1472 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1473 | jiti: '>=1.21.0' 1474 | less: '*' 1475 | lightningcss: ^1.21.0 1476 | sass: '*' 1477 | sass-embedded: '*' 1478 | stylus: '*' 1479 | sugarss: '*' 1480 | terser: ^5.16.0 1481 | tsx: ^4.8.1 1482 | yaml: ^2.4.2 1483 | peerDependenciesMeta: 1484 | '@types/node': 1485 | optional: true 1486 | jiti: 1487 | optional: true 1488 | less: 1489 | optional: true 1490 | lightningcss: 1491 | optional: true 1492 | sass: 1493 | optional: true 1494 | sass-embedded: 1495 | optional: true 1496 | stylus: 1497 | optional: true 1498 | sugarss: 1499 | optional: true 1500 | terser: 1501 | optional: true 1502 | tsx: 1503 | optional: true 1504 | yaml: 1505 | optional: true 1506 | dependencies: 1507 | '@types/node': 22.14.0 1508 | esbuild: 0.25.2 1509 | postcss: 8.5.3 1510 | rollup: 4.39.0 1511 | optionalDependencies: 1512 | fsevents: 2.3.3 1513 | dev: true 1514 | 1515 | /which@2.0.2: 1516 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1517 | engines: {node: '>= 8'} 1518 | hasBin: true 1519 | dependencies: 1520 | isexe: 2.0.0 1521 | dev: true 1522 | 1523 | /word-wrap@1.2.5: 1524 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1525 | engines: {node: '>=0.10.0'} 1526 | dev: true 1527 | 1528 | /yocto-queue@0.1.0: 1529 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1530 | engines: {node: '>=10'} 1531 | dev: true 1532 | -------------------------------------------------------------------------------- /screencast.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vipzhicheng/logseq-plugin-comment-block/8da0b723c2ec4660d2136a6aed213aa022d03113/screencast.gif -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import "@logseq/libs"; 2 | import { BlockEntity, SettingSchemaDesc } from "@logseq/libs/dist/LSPlugin"; 3 | import { format } from "date-fns"; 4 | 5 | const settingsVersion = "v2"; 6 | const defaultSettings = { 7 | showToolbarIcon: true, 8 | keyBindings: { 9 | commentBlock: "mod+shift+i", 10 | }, 11 | settingsVersion, 12 | disabled: false, 13 | }; 14 | 15 | type DefaultSettingsType = typeof defaultSettings; 16 | 17 | const initSettings = () => { 18 | let settings = logseq.settings; 19 | 20 | const shouldUpdateSettings = 21 | !settings || settings.settingsVersion != defaultSettings.settingsVersion; 22 | 23 | if (shouldUpdateSettings) { 24 | settings = defaultSettings; 25 | logseq.updateSettings(settings); 26 | } 27 | }; 28 | 29 | const getSettings = ( 30 | key: string | undefined, 31 | defaultValue: any = undefined 32 | ) => { 33 | let settings = logseq.settings; 34 | const merged = Object.assign(defaultSettings, settings); 35 | return key ? (merged[key] ? merged[key] : defaultValue) : merged; 36 | }; 37 | 38 | const defineSettings = (): SettingSchemaDesc[] => [ 39 | { 40 | key: "putBlockRefAsChild", 41 | type: "boolean", 42 | title: "Put block ref as child", 43 | description: 44 | "That means everytime you trigger a comment, it will insert a new block and add commented block ref as child. If you disable this, it will insert a new block as the child of commented block ref. Use this with CAUTION, because the embed feature will not work and it can not reuse the block ref if you trigger comment again.", 45 | default: false, 46 | }, 47 | ]; 48 | logseq.useSettingsSchema(defineSettings()); 49 | 50 | async function getLastBlock(pageName: string): Promise { 51 | const blocks = await logseq.Editor.getPageBlocksTree(pageName); 52 | if (blocks.length === 0) { 53 | return null; 54 | } 55 | return blocks[blocks.length - 1]; 56 | } 57 | 58 | const handler = async (e: any) => { 59 | let block; 60 | if (e && e.uuid) { 61 | block = await logseq.Editor.getBlock(e.uuid); 62 | } else { 63 | block = await logseq.Editor.getCurrentBlock(); 64 | } 65 | if (!block || !block.uuid) { 66 | return; 67 | } 68 | const config = await logseq.App.getUserConfigs(); 69 | if (!block?.properties?.id) { 70 | await logseq.Editor.upsertBlockProperty(e.uuid, "id", e.uuid); 71 | } 72 | 73 | const page = await logseq.Editor.getPage(block.page.id); 74 | if (page?.name) { 75 | const blocks = await logseq.Editor.getPageBlocksTree(page.name); 76 | let findCommentBlock = blocks.find( 77 | (item) => item.content && item.content.startsWith("[[Comments]]") 78 | ); 79 | 80 | const lastBlock = await getLastBlock(page.name); 81 | // Find Comment block 82 | if (!findCommentBlock && lastBlock?.uuid) { 83 | const newCommentBlock = await logseq.Editor.insertBlock( 84 | lastBlock.uuid, 85 | "[[Comments]]", 86 | { 87 | sibling: true, 88 | before: false, 89 | properties: { 90 | collapsed: true, 91 | }, 92 | } 93 | ); 94 | if (newCommentBlock) { 95 | findCommentBlock = newCommentBlock; 96 | } 97 | } 98 | 99 | // Insert Comment blocks 100 | if (findCommentBlock) { 101 | const todayTitle = format(new Date(), config.preferredDateFormat); 102 | 103 | // Reuse today block 104 | let todayBlock, findTodayBlock: any; 105 | if (findCommentBlock.children && findCommentBlock.children.length > 0) { 106 | findTodayBlock = findCommentBlock.children.find( 107 | (item: any) => 108 | item.content && item.content.startsWith(`[[${todayTitle}]]`) 109 | ); 110 | if (findTodayBlock?.uuid) { 111 | todayBlock = findTodayBlock; 112 | } else { 113 | todayBlock = await logseq.Editor.insertBlock( 114 | findCommentBlock.uuid, 115 | `[[${todayTitle}]]`, 116 | { 117 | sibling: false, 118 | properties: { 119 | collapsed: true, 120 | }, 121 | } 122 | ); 123 | } 124 | } else { 125 | todayBlock = await logseq.Editor.insertBlock( 126 | findCommentBlock.uuid, 127 | `[[${todayTitle}]]`, 128 | { 129 | sibling: false, 130 | properties: { 131 | collapsed: true, 132 | }, 133 | } 134 | ); 135 | } 136 | 137 | if (todayBlock?.uuid) { 138 | // process putBlockRefAsChild 139 | if (logseq.settings?.putBlockRefAsChild) { 140 | let commentBlock = await logseq.Editor.insertBlock( 141 | todayBlock?.uuid, 142 | ``, 143 | { 144 | sibling: false, 145 | } 146 | ); 147 | if (commentBlock?.uuid) { 148 | await logseq.Editor.openInRightSidebar(commentBlock?.uuid); 149 | await logseq.Editor.insertBlock( 150 | commentBlock?.uuid, 151 | `((${e.uuid}))`, 152 | { 153 | sibling: false, 154 | } 155 | ); 156 | await logseq.Editor.editBlock(commentBlock?.uuid); 157 | } 158 | } else { 159 | // Reuse block ref block 160 | let blockRefBlock, findBlockRefBlock; 161 | 162 | if (todayBlock.children && todayBlock.children.length > 0) { 163 | findBlockRefBlock = todayBlock.children.find( 164 | (item: any) => 165 | item.content && item.content.startsWith(`((${e.uuid}))`) 166 | ); 167 | if (findBlockRefBlock?.uuid) { 168 | blockRefBlock = findBlockRefBlock; 169 | } else { 170 | blockRefBlock = await logseq.Editor.insertBlock( 171 | todayBlock?.uuid, 172 | `((${e.uuid}))`, 173 | { 174 | sibling: false, 175 | } 176 | ); 177 | } 178 | } else { 179 | blockRefBlock = await logseq.Editor.insertBlock( 180 | todayBlock?.uuid, 181 | `((${e.uuid}))`, 182 | { 183 | sibling: false, 184 | } 185 | ); 186 | } 187 | 188 | if (blockRefBlock?.uuid) { 189 | await logseq.Editor.openInRightSidebar(blockRefBlock?.uuid); 190 | 191 | // Reuse the empty block 192 | let emptyBlock; 193 | if (blockRefBlock.children && blockRefBlock.children.length > 0) { 194 | const lastEditingBlock = 195 | blockRefBlock.children[blockRefBlock.children.length - 1]; 196 | if (lastEditingBlock?.content.length === 0) { 197 | emptyBlock = lastEditingBlock; 198 | } 199 | } 200 | 201 | if (!emptyBlock) { 202 | emptyBlock = await logseq.Editor.insertBlock( 203 | blockRefBlock?.uuid, 204 | "", 205 | { 206 | sibling: false, 207 | } 208 | ); 209 | } 210 | 211 | if (emptyBlock?.uuid) { 212 | await logseq.Editor.editBlock(emptyBlock?.uuid); 213 | } 214 | } 215 | } 216 | } 217 | } 218 | } 219 | }; 220 | 221 | const handleEmbed = async (e: any) => { 222 | let block; 223 | if (e && e.uuid) { 224 | block = await logseq.Editor.getBlock(e.uuid); 225 | } else { 226 | block = await logseq.Editor.getCurrentBlock(); 227 | } 228 | if (!block || !block.uuid) { 229 | return; 230 | } 231 | const page = await logseq.Editor.getPage(block.page.id); 232 | if (page?.name) { 233 | const blocks = await logseq.Editor.getPageBlocksTree(page.name); 234 | let findCommentBlock = blocks.find( 235 | (item) => item.content && item.content.startsWith("[[Comments]]") 236 | ); 237 | 238 | if (findCommentBlock && findCommentBlock.children) { 239 | for (let block1 of findCommentBlock.children) { 240 | if (block1) { 241 | // @ts-ignore 242 | for (let block2 of block1.children) { 243 | if ( 244 | (block2 as BlockEntity).content.indexOf(`((${block.uuid}))`) > -1 245 | ) { 246 | for (let block3 of block2.children) { 247 | if (!(block3 as BlockEntity)?.properties?.id) { 248 | await logseq.Editor.upsertBlockProperty( 249 | (block3 as BlockEntity).uuid, 250 | "id", 251 | (block3 as BlockEntity).uuid 252 | ); 253 | } 254 | 255 | await logseq.Editor.insertBlock( 256 | block.uuid, 257 | `((${(block3 as BlockEntity).uuid}))`, 258 | { 259 | before: false, 260 | sibling: false, 261 | } 262 | ); 263 | } 264 | } 265 | } 266 | } 267 | } 268 | 269 | await logseq.Editor.exitEditingMode(true); 270 | } 271 | } 272 | }; 273 | 274 | async function main() { 275 | initSettings(); 276 | const keyBindings = getSettings("keyBindings"); 277 | logseq.Editor.registerSlashCommand(`Comment block`, handler); 278 | logseq.Editor.registerBlockContextMenuItem(`Comment block`, handler); 279 | logseq.App.registerCommandPalette( 280 | { 281 | key: `comment-block`, 282 | label: `Comment block`, 283 | keybinding: { 284 | mode: "global", 285 | binding: keyBindings.commentBlock, 286 | }, 287 | }, 288 | handler 289 | ); 290 | 291 | logseq.Editor.registerSlashCommand( 292 | "Embed Comment blocks To Children", 293 | handleEmbed 294 | ); 295 | logseq.Editor.registerBlockContextMenuItem( 296 | `Embed Comment blocks To Children`, 297 | handleEmbed 298 | ); 299 | 300 | logseq.App.registerCommandPalette( 301 | { 302 | key: `embed-comment-block-to-children`, 303 | label: `Embed comment block to children`, 304 | }, 305 | handleEmbed 306 | ); 307 | } 308 | logseq.ready(main).catch(console.error); 309 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Basic Options */ 6 | // "incremental": true, /* Enable incremental compilation */ 7 | "target": "ES2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ 8 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ 9 | // "lib": [], /* Specify library files to be included in the compilation. */ 10 | // "allowJs": true, /* Allow javascript files to be compiled. */ 11 | // "checkJs": true, /* Report errors in .js files. */ 12 | // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ 13 | // "declaration": true, /* Generates corresponding '.d.ts' file. */ 14 | // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ 15 | "sourceMap": true, /* Generates corresponding '.map' file. */ 16 | // "outFile": "./", /* Concatenate and emit output to single file. */ 17 | // "outDir": "./", /* Redirect output structure to the directory. */ 18 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 19 | // "composite": true, /* Enable project compilation */ 20 | // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ 21 | // "removeComments": true, /* Do not emit comments to output. */ 22 | // "noEmit": true, /* Do not emit outputs. */ 23 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 24 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 25 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 26 | 27 | /* Strict Type-Checking Options */ 28 | "strict": true, /* Enable all strict type-checking options. */ 29 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 30 | // "strictNullChecks": true, /* Enable strict null checks. */ 31 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */ 32 | // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ 33 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 34 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 35 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ 36 | 37 | /* Additional Checks */ 38 | // "noUnusedLocals": true, /* Report errors on unused locals. */ 39 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 40 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 41 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 42 | 43 | /* Module Resolution Options */ 44 | // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 45 | "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ 46 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 47 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 48 | // "typeRoots": [], /* List of folders to include type definitions from. */ 49 | // "types": [], /* Type declaration files to be included in compilation. */ 50 | // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 51 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 52 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 53 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 54 | 55 | /* Source Map Options */ 56 | // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 57 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 58 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 59 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 60 | 61 | /* Experimental Options */ 62 | "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 63 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 64 | 65 | /* Advanced Options */ 66 | "skipLibCheck": true, /* Skip type checking of declaration files. */ 67 | "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import path from 'path'; 3 | 4 | export default defineConfig({ 5 | base: './', 6 | build: { 7 | sourcemap: false, 8 | target: 'esnext', 9 | minify: 'esbuild', 10 | chunkSizeWarningLimit: 1024, 11 | rollupOptions: { 12 | output: { 13 | manualChunks: { 14 | logseq: ['@logseq/libs'], 15 | }, 16 | }, 17 | }, 18 | }, 19 | resolve: { 20 | alias: { 21 | '@': path.resolve(__dirname, './src'), 22 | }, 23 | }, 24 | }); 25 | --------------------------------------------------------------------------------