├── .github └── workflows │ └── nextjs.yml ├── .gitignore ├── .idea ├── .gitignore ├── bionicpython.iml ├── misc.xml ├── modules.xml └── vcs.xml ├── .idx └── dev.nix ├── .vscode └── settings.json ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── bionicpython ├── bionicpython.py └── converter.py ├── cli ├── .coveragerc ├── .gitignore ├── .readthedocs.yml ├── AUTHORS.rst ├── CHANGELOG.rst ├── CONTRIBUTING.rst ├── LICENSE.txt ├── README.rst ├── docs │ ├── Makefile │ ├── _static │ │ └── .gitignore │ ├── authors.rst │ ├── changelog.rst │ ├── conf.py │ ├── contributing.rst │ ├── index.rst │ ├── license.rst │ ├── readme.rst │ └── requirements.txt ├── pyproject.toml ├── setup.cfg ├── setup.py ├── src │ └── cli │ │ ├── __init__.py │ │ ├── converter.py │ │ └── skeleton.py ├── tests │ ├── conftest.py │ └── test_skeleton.py └── tox.ini ├── eslint.config.mjs ├── image └── README │ ├── 1700793569388.png │ └── 1700793580179.png ├── jsconfig.json ├── next.config.ts ├── package.json ├── pnpm-lock.yaml ├── postcss.config.mjs ├── public ├── file.svg ├── globe.svg ├── next.svg ├── vercel.svg └── window.svg ├── requirements.txt ├── setup.ps1 ├── setup.py ├── setup.sh ├── src └── app │ ├── favicon.ico │ ├── globals.css │ ├── layout.tsx │ └── page.tsx ├── tailwind.config.ts └── tsconfig.json /.github/workflows/nextjs.yml: -------------------------------------------------------------------------------- 1 | # Sample workflow for building and deploying a Next.js site to GitHub Pages 2 | # 3 | # To get started with Next.js see: https://nextjs.org/docs/getting-started 4 | # Testing 5 | name: Deploy Next.js site to Pages 6 | 7 | on: 8 | # Runs on pushes targeting the default branch 9 | push: 10 | branches: ["next"] 11 | 12 | # Allows you to run this workflow manually from the Actions tab 13 | workflow_dispatch: 14 | 15 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 16 | permissions: 17 | contents: read 18 | pages: write 19 | id-token: write 20 | 21 | # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. 22 | # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. 23 | concurrency: 24 | group: "pages" 25 | cancel-in-progress: false 26 | 27 | jobs: 28 | # Build job 29 | build: 30 | runs-on: ubuntu-latest 31 | steps: 32 | - name: Checkout 33 | uses: actions/checkout@v4 34 | - name: Detect package manager 35 | id: detect-package-manager 36 | run: | 37 | if [ -f "${{ github.workspace }}/yarn.lock" ]; then 38 | echo "manager=yarn" >> $GITHUB_OUTPUT 39 | echo "command=install" >> $GITHUB_OUTPUT 40 | echo "runner=yarn" >> $GITHUB_OUTPUT 41 | exit 0 42 | elif [ -f "${{ github.workspace }}/package-lock.json" ]; then 43 | echo "manager=npm" >> $GITHUB_OUTPUT 44 | echo "command=ci" >> $GITHUB_OUTPUT 45 | echo "runner=npx --no-install" >> $GITHUB_OUTPUT 46 | exit 0 47 | elif [ -f "${{ github.workspace }}/pnpm-lock.yaml" ]; then 48 | echo "manager=pnpm" >> $GITHUB_OUTPUT 49 | echo "command=install" >> $GITHUB_OUTPUT 50 | echo "runner=pnpm" >> $GITHUB_OUTPUT 51 | exit 0 52 | else 53 | echo "Unable to determine package manager" 54 | exit 1 55 | fi 56 | - name: Install pnpm 57 | uses: pnpm/action-setup@v3 58 | with: 59 | version: 8 60 | - name: Setup Node 61 | uses: actions/setup-node@v4 62 | with: 63 | node-version: "20" 64 | cache: "pnpm" 65 | - name: Setup Pages 66 | uses: actions/configure-pages@v5 67 | with: 68 | # Automatically inject basePath in your Next.js configuration file and disable 69 | # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized). 70 | # 71 | # You may remove this line if you want to manage the configuration yourself. 72 | static_site_generator: next 73 | - name: Restore cache 74 | uses: actions/cache@v4 75 | with: 76 | path: | 77 | .next/cache 78 | # Generate a new cache whenever packages or source files change. 79 | key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }} 80 | # If source files changed but packages didn't, rebuild from a prior cache. 81 | restore-keys: | 82 | ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}- 83 | - name: Install dependencies 84 | run: ${{ steps.detect-package-manager.outputs.runner }} ${{ steps.detect-package-manager.outputs.command }} 85 | - name: Build with Next.js 86 | run: ${{ steps.detect-package-manager.outputs.runner }} build 87 | - name: Upload artifact 88 | uses: actions/upload-pages-artifact@v3 89 | with: 90 | path: ./out 91 | 92 | # Deployment job 93 | deploy: 94 | environment: 95 | name: github-pages 96 | url: ${{ steps.deployment.outputs.page_url }} 97 | runs-on: ubuntu-latest 98 | needs: build 99 | steps: 100 | - name: Deploy to GitHub Pages 101 | id: deployment 102 | uses: actions/deploy-pages@v4 103 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | 3 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 4 | 5 | # dependencies 6 | /node_modules 7 | /.pnp 8 | .pnp.* 9 | .yarn/* 10 | !.yarn/patches 11 | !.yarn/plugins 12 | !.yarn/releases 13 | !.yarn/versions 14 | 15 | # testing 16 | /coverage 17 | 18 | # next.js 19 | /.next/ 20 | /out/ 21 | 22 | # production 23 | /build 24 | 25 | # misc 26 | .DS_Store 27 | *.pem 28 | 29 | # debug 30 | npm-debug.log* 31 | yarn-debug.log* 32 | yarn-error.log* 33 | .pnpm-debug.log* 34 | 35 | # env files (can opt-in for committing if needed) 36 | .env* 37 | 38 | # vercel 39 | .vercel 40 | 41 | # typescript 42 | *.tsbuildinfo 43 | next-env.d.ts 44 | flow/ -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | # GitHub Copilot persisted chat sessions 10 | /copilot/chatSessions 11 | -------------------------------------------------------------------------------- /.idea/bionicpython.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idx/dev.nix: -------------------------------------------------------------------------------- 1 | # To learn more about how to use Nix to configure your environment 2 | # see: https://developers.google.com/idx/guides/customize-idx-env 3 | { pkgs, ... }: { 4 | # Which nixpkgs channel to use. 5 | channel = "stable-23.11"; # or "unstable" 6 | 7 | # Use https://search.nixos.org/packages to find packages 8 | packages = [ 9 | # pkgs.go 10 | # pkgs.python311 11 | # pkgs.python311Packages.pip 12 | # pkgs.nodejs_20 13 | # pkgs.nodePackages.nodemon 14 | pkgs.nodePackages.firebase-tools 15 | pkgs.jdk17 16 | pkgs.unzip 17 | pkgs.cargo 18 | # pkgs.rustc 19 | pkgs.clang 20 | pkgs.rustup 21 | 22 | ]; 23 | 24 | # Sets environment variables in the workspace 25 | env = {}; 26 | idx = { 27 | # Search for the extensions you want on https://open-vsx.org/ and use "publisher.id" 28 | extensions = [ 29 | # "vscodevim.vim" 30 | 31 | "Dart-Code.flutter" 32 | "Dart-Code.dart-code" 33 | 34 | ]; 35 | 36 | # Enable previews 37 | # previews = { 38 | # enable = true; 39 | # previews = { 40 | # # web = { 41 | # # # Example: run "npm run dev" with PORT set to IDX's defined port for previews, 42 | # # # and show it in IDX's web preview panel 43 | # # command = ["npm" "run" "dev"]; 44 | # # manager = "web"; 45 | # # env = { 46 | # # # Environment variables to set for your server 47 | # # PORT = "$PORT"; 48 | # # }; 49 | # # }; 50 | # }; 51 | # }; 52 | 53 | 54 | 55 | 56 | 57 | workspace = { 58 | 59 | 60 | # Runs when a workspace is first created with this `dev.nix` file 61 | onCreate = { 62 | build-flutter = '' 63 | cd /home/user/myapp/android 64 | 65 | ./gradlew \ 66 | --parallel \ 67 | -Pverbose=true \ 68 | -Ptarget-platform=android-x86 \ 69 | -Ptarget=/home/user/myapp/lib/main.dart \ 70 | -Pbase-application-name=android.app.Application \ 71 | -Pdart-defines=RkxVVFRFUl9XRUJfQ0FOVkFTS0lUX1VSTD1odHRwczovL3d3dy5nc3RhdGljLmNvbS9mbHV0dGVyLWNhbnZhc2tpdC85NzU1MDkwN2I3MGY0ZjNiMzI4YjZjMTYwMGRmMjFmYWMxYTE4ODlhLw== \ 72 | -Pdart-obfuscation=false \ 73 | -Ptrack-widget-creation=true \ 74 | -Ptree-shake-icons=false \ 75 | -Pfilesystem-scheme=org-dartlang-root \ 76 | assembleDebug 77 | 78 | # TODO: Execute web build in debug mode. 79 | # flutter run does this transparently either way 80 | # https://github.com/flutter/flutter/issues/96283#issuecomment-1144750411 81 | # flutter build web --profile --dart-define=Dart2jsOptimization=O0 82 | 83 | adb -s localhost:5555 wait-for-device 84 | ''; 85 | }; 86 | 87 | }; 88 | 89 | # Enable previews and customize configuration 90 | previews = { 91 | enable = true; 92 | previews = { 93 | web = { 94 | command = ["flutter" "run" "--machine" "-d" "web-server" "--web-hostname" "0.0.0.0" "--web-port" "$PORT"]; 95 | manager = "flutter"; 96 | }; 97 | android = { 98 | command = ["flutter" "run" "--machine" "-d" "android" "-d" "localhost:5555"]; 99 | manager = "flutter"; 100 | }; 101 | }; 102 | }; 103 | 104 | 105 | 106 | 107 | # Workspace lifecycle hooks 108 | # workspace = { 109 | # # Runs when a workspace is first created 110 | # onCreate = { 111 | # # Example: install JS dependencies from NPM 112 | # # npm-install = "npm install"; 113 | # }; 114 | # # Runs when the workspace is (re)started 115 | # onStart = { 116 | # # Example: start a background task to watch and re-build backend code 117 | # # watch-backend = "npm run watch-backend"; 118 | # }; 119 | # }; 120 | }; 121 | } 122 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "IDX.aI.enableInlineCompletion": true, 3 | "IDX.aI.enableCodebaseIndexing": true 4 | } -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution 2 | 3 | please feel free to open a PR! -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 nathfavour 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 | # BionicPython 🚀✨ 2 | 3 | Transform your PDFs and DOCX files into an eye-catching, easy-to-read **Bionic Reading** format in no time! 💥 4 | 5 | ## Why BionicPython? 🤔 6 | - Boost reading speed and comprehension. 7 | - Enjoy a visually stimulating reading experience. 8 | - Simplify conversion with a single command. 9 | 10 | ## Before & After 📸 11 | ### Normal Format 12 | ![1700793569388](image/README/1700793569388.png) 13 | ### Bionic Format 14 | ![1700793580179](image/README/1700793580179.png) 15 | 16 | ## Quick Start 🚦 17 | 1. **Clone this repository** 18 | `git clone https://github.com/username/bionicpython.git` 19 | 2. **Install requirements** 20 | ```bash 21 | pip install -r requirements.txt 22 | ``` 23 | 3. **Convert your PDF/DOCX** 24 | ```bash 25 | python bionicpython/bionicpython.py 26 | ``` 27 | 4. **Enjoy your new bionified file** 28 | A new DOCX is created in the same directory (convert to PDF if you want). 29 | 30 | > **Note**: If you're on macOS or Linux, try `setup.sh`. On Windows, run `setup.ps1`. Both aim to simplify setup. 31 | 32 | ## Roadmap 🛣️ 33 | - [X] Provide usage guide 34 | - [X] Create a pip package 35 | - [ ] Add other ebook formats like EPUB 36 | - [X] Optimize performance 37 | - [X] Build a GUI (we’re on it!) 38 | 39 | ## Keeping You Posted 📰 40 | We're actively improving and appreciate your suggestions and contributions. 41 | Feel free to open an **issue** or **pull request** anytime! 42 | 43 | ![Project Banner](image.png) -------------------------------------------------------------------------------- /bionicpython/bionicpython.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import math 3 | from docx import Document 4 | import os 5 | import argparse 6 | import math 7 | from docx import Document 8 | import os 9 | import spacy 10 | import subprocess 11 | import sys 12 | import re 13 | 14 | 15 | 16 | 17 | def process_word(word, ratio): 18 | # Calculate the number of characters to make bold 19 | num_chars = math.ceil(len(word) * ratio) 20 | 21 | # Split the word into the part that should be bold and the part that shouldn't 22 | bold_part = word[:num_chars] 23 | normal_part = word[num_chars:] 24 | 25 | # Create runs for the bold part and the normal part 26 | bold_run = (bold_part, True) 27 | normal_run = (normal_part, False) 28 | 29 | # Return the runs as a list 30 | return [bold_run, normal_run] 31 | 32 | 33 | 34 | 35 | def process_document(doc_path, ratio): 36 | output_path = os.path.splitext(doc_path)[0] + '_modified.docx' 37 | 38 | # Check if the file path is for a .docx file 39 | if doc_path.endswith('.docx'): 40 | print("Already in docx format") 41 | elif doc_path.endswith('.pdf'): 42 | docx_path = doc_path.replace('.pdf', '.docx') 43 | try: 44 | # Run the conversion script as a subprocess 45 | subprocess.run([sys.executable, 'converter.py', '--pdf', doc_path, '--docx', docx_path]) 46 | 47 | # Modify this command to run in the absolute path (with relation to this script) to converter.py 48 | subprocess.run([sys.executable, 'converter.py', '--pdf', doc_path, '--docx', docx_path]) 49 | 50 | # Replace '.pdf' with '.docx' in the file path 51 | doc_path = docx_path 52 | except subprocess.CalledProcessError as e: 53 | print("Error converting PDF:", e) 54 | sys.exit(1) 55 | else: 56 | print("Files of this format are not supported yet") 57 | print("Please use either .pdf or .docx files") 58 | sys.exit() 59 | 60 | # Load the spacy model for word recognition (wrap in try-except) 61 | try: 62 | nlp = spacy.load('en_core_web_sm') 63 | except OSError as e: 64 | print("Error loading spaCy model:", e) 65 | sys.exit(1) 66 | 67 | try: 68 | # Open the .docx file 69 | word_doc = Document(doc_path) 70 | 71 | for paragraph in word_doc.paragraphs: 72 | for run in paragraph.runs: 73 | # Skip if the run is already bold 74 | if run.bold: 75 | continue 76 | 77 | # Split the run text into words 78 | words = run.text.split(' ') 79 | words = [' ' + word if i != 0 else word for i, word in enumerate(words)] 80 | 81 | # Process each word 82 | new_runs = [] 83 | for word in words: 84 | # Use spacy to recognize the words 85 | doc = nlp(word) 86 | for token in doc: 87 | # Bolden a ratio of the characters in the word 88 | runs = process_word(token.text, ratio) 89 | new_runs.extend(runs) 90 | 91 | # Clear the original run 92 | run.text = '' 93 | 94 | # Add new runs with the appropriate formatting 95 | for text, is_bold in new_runs: 96 | new_run = paragraph.add_run(text) 97 | new_run.bold = is_bold 98 | 99 | # Save the document (wrap in try-except) 100 | try: 101 | word_doc.save(output_path) 102 | except PermissionError as e: 103 | print("Error saving document:", e) 104 | sys.exit(1) 105 | 106 | except Exception as e: # Catch any other unexpected errors 107 | print("Unexpected error processing document:", e) 108 | sys.exit(1) 109 | 110 | # Get the directory and filename from the input path 111 | dir_name, file_name = os.path.split(doc_path) 112 | 113 | # Prepend 'processed_' to the filename 114 | new_file_name = 'processed_' + file_name 115 | 116 | # Combine the directory and new filename to get the output path 117 | # output_path = os.path.splitext(doc_path)[0] + '_modified.docx' 118 | print(output_path) 119 | 120 | 121 | def main(): 122 | parser = argparse.ArgumentParser() 123 | parser.add_argument('doc_path', help='Path to the .docx file') 124 | parser.add_argument('--ratio', type=float, default=0.5, help='Ratio of characters to make bold') 125 | args = parser.parse_args() 126 | 127 | process_document(args.doc_path, args.ratio) 128 | 129 | if __name__ == '__main__': 130 | main() 131 | 132 | # def process_document(doc_path, ratio): 133 | # # Check if the file path is for a .docx file 134 | # if not doc_path.endswith('.docx'): 135 | # print("Invalid file format. Please provide a .docx file.") 136 | # return 137 | 138 | # # Load the spacy model for word recognition 139 | # nlp = spacy.load('en_core_web_sm') 140 | 141 | # # Open the .docx file 142 | # doc = Document(doc_path) 143 | 144 | # for paragraph in doc.paragraphs: 145 | # for run in paragraph.runs: 146 | # # Skip if the run is already bold 147 | # if run.bold: 148 | # continue 149 | 150 | # # Split the run text into words 151 | # words = run.text.split() 152 | 153 | # # Process each word 154 | # new_runs = [] 155 | # for word in words: 156 | # # Use spacy to recognize the words 157 | # doc = nlp(word) 158 | # for token in doc: 159 | # # Bolden a ratio of the characters in the word 160 | # runs = process_word(token.text, ratio) 161 | # new_runs.extend(runs) 162 | 163 | # # Clear the original run 164 | # run.text = '' 165 | 166 | # # Add new runs with the appropriate formatting 167 | # for text, is_bold in new_runs: 168 | # new_run = paragraph.add_run(text) 169 | # new_run.bold = is_bold 170 | 171 | 172 | # # Get the directory and filename from the input path 173 | # dir_name, file_name = os.path.split(doc_path) 174 | 175 | # # Prepend 'processed_' to the filename 176 | # new_file_name = 'processed_' + file_name 177 | 178 | # # Combine the directory and new filename to get the output path 179 | # output_path = os.path.join(dir_name, new_file_name) 180 | 181 | # doc.save(output_path) 182 | 183 | 184 | # def process_word(word, ratio): 185 | # # Calculate the number of characters to make bold 186 | # num_chars = math.ceil(len(word) * ratio) 187 | 188 | # # Make the specified number of characters bold 189 | # bold_word = word[:num_chars] + word[num_chars:].bold() 190 | 191 | # return bold_word 192 | 193 | # def process_document(doc_path, ratio): 194 | # # Check if the file path is for a .docx file 195 | # if not doc_path.endswith('.docx'): 196 | # print("Invalid file format. Please provide a .docx file.") 197 | # return 198 | 199 | # # Load the spacy model for word recognition 200 | # nlp = spacy.load('en_core_web_sm') 201 | 202 | # # Open the .docx file 203 | # doc = Document(doc_path) 204 | 205 | # for paragraph in doc.paragraphs: 206 | # for run in paragraph.runs: 207 | # # Skip if the run is already bold 208 | # if run.bold: 209 | # continue 210 | 211 | # # Split the run text into words 212 | # words = run.text.split() 213 | 214 | # # Process each word 215 | # new_words = [] 216 | # for word in words: 217 | # # Use spacy to recognize the words 218 | # doc = nlp(word) 219 | # for token in doc: 220 | # # Bolden a ratio of the characters in the word 221 | # bold_word = process_word(token.text, ratio) 222 | # new_words.append(bold_word) 223 | 224 | # # Replace the run text with the processed words 225 | # run.text = ' '.join(new_words) 226 | # print("processed another paragraph...") 227 | 228 | # # Get the directory and filename from the input path 229 | # dir_name, file_name = os.path.split(doc_path) 230 | 231 | # # Prepend 'processed_' to the filename 232 | # new_file_name = 'processed_' + file_name 233 | 234 | # # Combine the directory and new filename to get the output path 235 | # output_path = os.path.join(dir_name, new_file_name) 236 | 237 | # doc.save(output_path) 238 | 239 | 240 | # def main(): 241 | # parser = argparse.ArgumentParser() 242 | # parser.add_argument('doc_path', help='Path to the .docx file') 243 | # parser.add_argument('--ratio', type=float, default=0.5, help='Ratio of characters to make bold') 244 | # args = parser.parse_args() 245 | 246 | # process_document(args.doc_path, args.ratio) 247 | 248 | # if __name__ == '__main__': 249 | # main() 250 | 251 | 252 | 253 | 254 | # python bionic.py /path/to/your/document.docx 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | # def process_word(word, ratio): 279 | # # Calculate the number of characters to make bold 280 | # num_bold_chars = math.ceil(len(word) * ratio) 281 | 282 | # # Create a new run for each part of the word 283 | # bold_run = word[:num_bold_chars] 284 | # normal_run = word[num_bold_chars:] 285 | 286 | # return bold_run, normal_run 287 | 288 | # # def process_document(doc_path, ratio): 289 | # # doc = Document(doc_path) 290 | 291 | # # for paragraph in doc.paragraphs: 292 | # # for run in paragraph.runs: 293 | # # # Skip if the run is already bold 294 | # # if run.bold: 295 | # # continue 296 | 297 | # # # Split the run text into words 298 | # # words = run.text.split() 299 | 300 | # # # Process each word 301 | # # new_words = [] 302 | # # for word in words: 303 | # # bold_run, normal_run = process_word(word, ratio) 304 | # # new_words.append(bold_run) 305 | # # new_words.append(normal_run) 306 | 307 | # # # Replace the run text with the processed words 308 | # # run.text = ' '.join(new_words) 309 | 310 | # # doc.save('processed_' + doc_path) 311 | 312 | # # def process_document(doc_path, ratio): 313 | # # doc = Document(doc_path) 314 | 315 | # # for paragraph in doc.paragraphs: 316 | # # for run in paragraph.runs: 317 | # # # Skip if the run is already bold 318 | # # if run.bold: 319 | # # continue 320 | 321 | # # # Split the run text into words 322 | # # words = run.text.split() 323 | 324 | # # # Process each word 325 | # # new_words = [] 326 | # # for word in words: 327 | # # bold_run, normal_run = process_word(word, ratio) 328 | # # new_words.append(bold_run) 329 | # # new_words.append(normal_run) 330 | 331 | # # # Replace the run text with the processed words 332 | # # run.text = ' '.join(new_words) 333 | 334 | # # # Get the directory and filename from the input path 335 | # # dir_name, file_name = os.path.split(doc_path) 336 | 337 | # # # Prepend 'processed_' to the filename 338 | # # new_file_name = 'processed_' + file_name 339 | 340 | # # # Combine the directory and new filename to get the output path 341 | # # output_path = os.path.join(dir_name, new_file_name) 342 | 343 | # # doc.save(output_path) 344 | 345 | # def process_document(doc_path, ratio): 346 | # doc = Document(doc_path) 347 | # new_doc = Document() 348 | 349 | # for paragraph in doc.paragraphs: 350 | # new_paragraph = new_doc.add_paragraph() 351 | 352 | # for run in paragraph.runs: 353 | # # Skip if the run is already bold 354 | # if run.bold: 355 | # continue 356 | 357 | # # Split the run text into words 358 | # words = run.text.split() 359 | 360 | # # Process each word 361 | # for word in words: 362 | # bold_run_text, normal_run_text = process_word(word, ratio) 363 | 364 | # # Add new runs to the new paragraph 365 | # if bold_run_text: 366 | # bold_run = new_paragraph.add_run(bold_run_text) 367 | # bold_run.bold = True 368 | 369 | # if normal_run_text: 370 | # normal_run = new_paragraph.add_run(normal_run_text) 371 | 372 | # # Get the directory and filename from the input path 373 | # dir_name, file_name = os.path.split(doc_path) 374 | 375 | # # Prepend 'processed_' to the filename 376 | # new_file_name = 'processed_' + file_name 377 | 378 | # # Combine the directory and new filename to get the output path 379 | # output_path = os.path.join(dir_name, new_file_name) 380 | 381 | # new_doc.save(output_path) 382 | 383 | 384 | # def main(): 385 | # parser = argparse.ArgumentParser() 386 | # parser.add_argument('doc_path', help='Path to the .docx file') 387 | # parser.add_argument('--ratio', type=float, default=0.5, help='Ratio of characters to make bold') 388 | # args = parser.parse_args() 389 | 390 | # process_document(args.doc_path, args.ratio) 391 | 392 | # if __name__ == '__main__': 393 | # main() 394 | 395 | 396 | 397 | 398 | -------------------------------------------------------------------------------- /bionicpython/converter.py: -------------------------------------------------------------------------------- 1 | # from pdf2docx import Converter 2 | 3 | # pdf_file = '/Users/xcode/Downloads/maths.pdf' 4 | # docx_file = '/Users/xcode/Downloads/maths.docx' 5 | 6 | # # convert pdf to docx 7 | # cv = Converter(pdf_file) 8 | # cv.convert(docx_file) # all pages by default 9 | # cv.close() 10 | 11 | import argparse 12 | from pdf2docx import Converter 13 | 14 | parser = argparse.ArgumentParser(description='Convert PDF to DOCX') 15 | parser.add_argument('--pdf', help='Path to the PDF file', required=True) 16 | parser.add_argument('--docx', help='Path to the output DOCX file', required=True) 17 | 18 | args = parser.parse_args() 19 | 20 | pdf_file = args.pdf 21 | docx_file = args.docx 22 | 23 | # convert pdf to docx 24 | cv = Converter(pdf_file) 25 | cv.convert(docx_file) # all pages by default 26 | cv.close() -------------------------------------------------------------------------------- /cli/.coveragerc: -------------------------------------------------------------------------------- 1 | # .coveragerc to control coverage.py 2 | [run] 3 | branch = True 4 | source = cli 5 | # omit = bad_file.py 6 | 7 | [paths] 8 | source = 9 | src/ 10 | */site-packages/ 11 | 12 | [report] 13 | # Regexes for lines to exclude from consideration 14 | exclude_lines = 15 | # Have to re-enable the standard pragma 16 | pragma: no cover 17 | 18 | # Don't complain about missing debug-only code: 19 | def __repr__ 20 | if self\.debug 21 | 22 | # Don't complain if tests don't hit defensive assertion code: 23 | raise AssertionError 24 | raise NotImplementedError 25 | 26 | # Don't complain if non-runnable code isn't run: 27 | if 0: 28 | if __name__ == .__main__.: 29 | -------------------------------------------------------------------------------- /cli/.gitignore: -------------------------------------------------------------------------------- 1 | # Temporary and binary files 2 | *~ 3 | *.py[cod] 4 | *.so 5 | *.cfg 6 | !.isort.cfg 7 | !setup.cfg 8 | *.orig 9 | *.log 10 | *.pot 11 | __pycache__/* 12 | .cache/* 13 | .*.swp 14 | */.ipynb_checkpoints/* 15 | .DS_Store 16 | 17 | # Project files 18 | .ropeproject 19 | .project 20 | .pydevproject 21 | .settings 22 | .idea 23 | .vscode 24 | tags 25 | 26 | # Package files 27 | *.egg 28 | *.eggs/ 29 | .installed.cfg 30 | *.egg-info 31 | 32 | # Unittest and coverage 33 | htmlcov/* 34 | .coverage 35 | .coverage.* 36 | .tox 37 | junit*.xml 38 | coverage.xml 39 | .pytest_cache/ 40 | 41 | # Build and docs folder/files 42 | build/* 43 | dist/* 44 | sdist/* 45 | docs/api/* 46 | docs/_rst/* 47 | docs/_build/* 48 | cover/* 49 | MANIFEST 50 | 51 | # Per-project virtualenvs 52 | .venv*/ 53 | .conda*/ 54 | .python-version 55 | -------------------------------------------------------------------------------- /cli/.readthedocs.yml: -------------------------------------------------------------------------------- 1 | # Read the Docs configuration file 2 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 3 | 4 | # Required 5 | version: 2 6 | 7 | # Build documentation in the docs/ directory with Sphinx 8 | sphinx: 9 | configuration: docs/conf.py 10 | 11 | # Build documentation with MkDocs 12 | #mkdocs: 13 | # configuration: mkdocs.yml 14 | 15 | # Optionally build your docs in additional formats such as PDF 16 | formats: 17 | - pdf 18 | 19 | build: 20 | os: ubuntu-22.04 21 | tools: 22 | python: "3.11" 23 | 24 | python: 25 | install: 26 | - requirements: docs/requirements.txt 27 | - {path: ., method: pip} 28 | -------------------------------------------------------------------------------- /cli/AUTHORS.rst: -------------------------------------------------------------------------------- 1 | ============ 2 | Contributors 3 | ============ 4 | 5 | * nathfavour <116535483+nathfavour@users.noreply.github.com> 6 | -------------------------------------------------------------------------------- /cli/CHANGELOG.rst: -------------------------------------------------------------------------------- 1 | ========= 2 | Changelog 3 | ========= 4 | 5 | Version 0.1 6 | =========== 7 | 8 | - Feature A added 9 | - FIX: nasty bug #1729 fixed 10 | - add your changes here! 11 | -------------------------------------------------------------------------------- /cli/CONTRIBUTING.rst: -------------------------------------------------------------------------------- 1 | .. todo:: THIS IS SUPPOSED TO BE AN EXAMPLE. MODIFY IT ACCORDING TO YOUR NEEDS! 2 | 3 | The document assumes you are using a source repository service that promotes a 4 | contribution model similar to `GitHub's fork and pull request workflow`_. 5 | While this is true for the majority of services (like GitHub, GitLab, 6 | BitBucket), it might not be the case for private repositories (e.g., when 7 | using Gerrit). 8 | 9 | Also notice that the code examples might refer to GitHub URLs or the text 10 | might use GitHub specific terminology (e.g., *Pull Request* instead of *Merge 11 | Request*). 12 | 13 | Please make sure to check the document having these assumptions in mind 14 | and update things accordingly. 15 | 16 | .. todo:: Provide the correct links/replacements at the bottom of the document. 17 | 18 | .. todo:: You might want to have a look on `PyScaffold's contributor's guide`_, 19 | 20 | especially if your project is open source. The text should be very similar to 21 | this template, but there are a few extra contents that you might decide to 22 | also include, like mentioning labels of your issue tracker or automated 23 | releases. 24 | 25 | 26 | ============ 27 | Contributing 28 | ============ 29 | 30 | Welcome to ``cli`` contributor's guide. 31 | 32 | This document focuses on getting any potential contributor familiarized 33 | with the development processes, but `other kinds of contributions`_ are also 34 | appreciated. 35 | 36 | If you are new to using git_ or have never collaborated in a project previously, 37 | please have a look at `contribution-guide.org`_. Other resources are also 38 | listed in the excellent `guide created by FreeCodeCamp`_ [#contrib1]_. 39 | 40 | Please notice, all users and contributors are expected to be **open, 41 | considerate, reasonable, and respectful**. When in doubt, `Python Software 42 | Foundation's Code of Conduct`_ is a good reference in terms of behavior 43 | guidelines. 44 | 45 | 46 | Issue Reports 47 | ============= 48 | 49 | If you experience bugs or general issues with ``cli``, please have a look 50 | on the `issue tracker`_. If you don't see anything useful there, please feel 51 | free to fire an issue report. 52 | 53 | .. tip:: 54 | Please don't forget to include the closed issues in your search. 55 | Sometimes a solution was already reported, and the problem is considered 56 | **solved**. 57 | 58 | New issue reports should include information about your programming environment 59 | (e.g., operating system, Python version) and steps to reproduce the problem. 60 | Please try also to simplify the reproduction steps to a very minimal example 61 | that still illustrates the problem you are facing. By removing other factors, 62 | you help us to identify the root cause of the issue. 63 | 64 | 65 | Documentation Improvements 66 | ========================== 67 | 68 | You can help improve ``cli`` docs by making them more readable and coherent, or 69 | by adding missing information and correcting mistakes. 70 | 71 | ``cli`` documentation uses Sphinx_ as its main documentation compiler. 72 | This means that the docs are kept in the same repository as the project code, and 73 | that any documentation update is done in the same way was a code contribution. 74 | 75 | .. todo:: Don't forget to mention which markup language you are using. 76 | 77 | e.g., reStructuredText_ or CommonMark_ with MyST_ extensions. 78 | 79 | .. todo:: If your project is hosted on GitHub, you can also mention the following tip: 80 | 81 | .. tip:: 82 | Please notice that the `GitHub web interface`_ provides a quick way of 83 | propose changes in ``cli``'s files. While this mechanism can 84 | be tricky for normal code contributions, it works perfectly fine for 85 | contributing to the docs, and can be quite handy. 86 | 87 | If you are interested in trying this method out, please navigate to 88 | the ``docs`` folder in the source repository_, find which file you 89 | would like to propose changes and click in the little pencil icon at the 90 | top, to open `GitHub's code editor`_. Once you finish editing the file, 91 | please write a message in the form at the bottom of the page describing 92 | which changes have you made and what are the motivations behind them and 93 | submit your proposal. 94 | 95 | When working on documentation changes in your local machine, you can 96 | compile them using |tox|_:: 97 | 98 | tox -e docs 99 | 100 | and use Python's built-in web server for a preview in your web browser 101 | (``http://localhost:8000``):: 102 | 103 | python3 -m http.server --directory 'docs/_build/html' 104 | 105 | 106 | Code Contributions 107 | ================== 108 | 109 | .. todo:: Please include a reference or explanation about the internals of the project. 110 | 111 | An architecture description, design principles or at least a summary of the 112 | main concepts will make it easy for potential contributors to get started 113 | quickly. 114 | 115 | Submit an issue 116 | --------------- 117 | 118 | Before you work on any non-trivial code contribution it's best to first create 119 | a report in the `issue tracker`_ to start a discussion on the subject. 120 | This often provides additional considerations and avoids unnecessary work. 121 | 122 | Create an environment 123 | --------------------- 124 | 125 | Before you start coding, we recommend creating an isolated `virtual 126 | environment`_ to avoid any problems with your installed Python packages. 127 | This can easily be done via either |virtualenv|_:: 128 | 129 | virtualenv 130 | source /bin/activate 131 | 132 | or Miniconda_:: 133 | 134 | conda create -n cli python=3 six virtualenv pytest pytest-cov 135 | conda activate cli 136 | 137 | Clone the repository 138 | -------------------- 139 | 140 | #. Create an user account on |the repository service| if you do not already have one. 141 | #. Fork the project repository_: click on the *Fork* button near the top of the 142 | page. This creates a copy of the code under your account on |the repository service|. 143 | #. Clone this copy to your local disk:: 144 | 145 | git clone git@github.com:YourLogin/cli.git 146 | cd cli 147 | 148 | #. You should run:: 149 | 150 | pip install -U pip setuptools -e . 151 | 152 | to be able to import the package under development in the Python REPL. 153 | 154 | .. todo:: if you are not using pre-commit, please remove the following item: 155 | 156 | #. Install |pre-commit|_:: 157 | 158 | pip install pre-commit 159 | pre-commit install 160 | 161 | ``cli`` comes with a lot of hooks configured to automatically help the 162 | developer to check the code being written. 163 | 164 | Implement your changes 165 | ---------------------- 166 | 167 | #. Create a branch to hold your changes:: 168 | 169 | git checkout -b my-feature 170 | 171 | and start making changes. Never work on the main branch! 172 | 173 | #. Start your work on this branch. Don't forget to add docstrings_ to new 174 | functions, modules and classes, especially if they are part of public APIs. 175 | 176 | #. Add yourself to the list of contributors in ``AUTHORS.rst``. 177 | 178 | #. When you’re done editing, do:: 179 | 180 | git add 181 | git commit 182 | 183 | to record your changes in git_. 184 | 185 | .. todo:: if you are not using pre-commit, please remove the following item: 186 | 187 | Please make sure to see the validation messages from |pre-commit|_ and fix 188 | any eventual issues. 189 | This should automatically use flake8_/black_ to check/fix the code style 190 | in a way that is compatible with the project. 191 | 192 | .. important:: Don't forget to add unit tests and documentation in case your 193 | contribution adds an additional feature and is not just a bugfix. 194 | 195 | Moreover, writing a `descriptive commit message`_ is highly recommended. 196 | In case of doubt, you can check the commit history with:: 197 | 198 | git log --graph --decorate --pretty=oneline --abbrev-commit --all 199 | 200 | to look for recurring communication patterns. 201 | 202 | #. Please check that your changes don't break any unit tests with:: 203 | 204 | tox 205 | 206 | (after having installed |tox|_ with ``pip install tox`` or ``pipx``). 207 | 208 | You can also use |tox|_ to run several other pre-configured tasks in the 209 | repository. Try ``tox -av`` to see a list of the available checks. 210 | 211 | Submit your contribution 212 | ------------------------ 213 | 214 | #. If everything works fine, push your local branch to |the repository service| with:: 215 | 216 | git push -u origin my-feature 217 | 218 | #. Go to the web page of your fork and click |contribute button| 219 | to send your changes for review. 220 | 221 | .. todo:: if you are using GitHub, you can uncomment the following paragraph 222 | 223 | Find more detailed information in `creating a PR`_. You might also want to open 224 | the PR as a draft first and mark it as ready for review after the feedbacks 225 | from the continuous integration (CI) system or any required fixes. 226 | 227 | 228 | Troubleshooting 229 | --------------- 230 | 231 | The following tips can be used when facing problems to build or test the 232 | package: 233 | 234 | #. Make sure to fetch all the tags from the upstream repository_. 235 | The command ``git describe --abbrev=0 --tags`` should return the version you 236 | are expecting. If you are trying to run CI scripts in a fork repository, 237 | make sure to push all the tags. 238 | You can also try to remove all the egg files or the complete egg folder, i.e., 239 | ``.eggs``, as well as the ``*.egg-info`` folders in the ``src`` folder or 240 | potentially in the root of your project. 241 | 242 | #. Sometimes |tox|_ misses out when new dependencies are added, especially to 243 | ``setup.cfg`` and ``docs/requirements.txt``. If you find any problems with 244 | missing dependencies when running a command with |tox|_, try to recreate the 245 | ``tox`` environment using the ``-r`` flag. For example, instead of:: 246 | 247 | tox -e docs 248 | 249 | Try running:: 250 | 251 | tox -r -e docs 252 | 253 | #. Make sure to have a reliable |tox|_ installation that uses the correct 254 | Python version (e.g., 3.7+). When in doubt you can run:: 255 | 256 | tox --version 257 | # OR 258 | which tox 259 | 260 | If you have trouble and are seeing weird errors upon running |tox|_, you can 261 | also try to create a dedicated `virtual environment`_ with a |tox|_ binary 262 | freshly installed. For example:: 263 | 264 | virtualenv .venv 265 | source .venv/bin/activate 266 | .venv/bin/pip install tox 267 | .venv/bin/tox -e all 268 | 269 | #. `Pytest can drop you`_ in an interactive session in the case an error occurs. 270 | In order to do that you need to pass a ``--pdb`` option (for example by 271 | running ``tox -- -k --pdb``). 272 | You can also setup breakpoints manually instead of using the ``--pdb`` option. 273 | 274 | 275 | Maintainer tasks 276 | ================ 277 | 278 | Releases 279 | -------- 280 | 281 | .. todo:: This section assumes you are using PyPI to publicly release your package. 282 | 283 | If instead you are using a different/private package index, please update 284 | the instructions accordingly. 285 | 286 | If you are part of the group of maintainers and have correct user permissions 287 | on PyPI_, the following steps can be used to release a new version for 288 | ``cli``: 289 | 290 | #. Make sure all unit tests are successful. 291 | #. Tag the current commit on the main branch with a release tag, e.g., ``v1.2.3``. 292 | #. Push the new tag to the upstream repository_, e.g., ``git push upstream v1.2.3`` 293 | #. Clean up the ``dist`` and ``build`` folders with ``tox -e clean`` 294 | (or ``rm -rf dist build``) 295 | to avoid confusion with old builds and Sphinx docs. 296 | #. Run ``tox -e build`` and check that the files in ``dist`` have 297 | the correct version (no ``.dirty`` or git_ hash) according to the git_ tag. 298 | Also check the sizes of the distributions, if they are too big (e.g., > 299 | 500KB), unwanted clutter may have been accidentally included. 300 | #. Run ``tox -e publish -- --repository pypi`` and check that everything was 301 | uploaded to PyPI_ correctly. 302 | 303 | 304 | 305 | .. [#contrib1] Even though, these resources focus on open source projects and 306 | communities, the general ideas behind collaborating with other developers 307 | to collectively create software are general and can be applied to all sorts 308 | of environments, including private companies and proprietary code bases. 309 | 310 | 311 | .. <-- start --> 312 | .. todo:: Please review and change the following definitions: 313 | 314 | .. |the repository service| replace:: GitHub 315 | .. |contribute button| replace:: "Create pull request" 316 | 317 | .. _repository: https://github.com//cli 318 | .. _issue tracker: https://github.com//cli/issues 319 | .. <-- end --> 320 | 321 | 322 | .. |virtualenv| replace:: ``virtualenv`` 323 | .. |pre-commit| replace:: ``pre-commit`` 324 | .. |tox| replace:: ``tox`` 325 | 326 | 327 | .. _black: https://pypi.org/project/black/ 328 | .. _CommonMark: https://commonmark.org/ 329 | .. _contribution-guide.org: https://www.contribution-guide.org/ 330 | .. _creating a PR: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request 331 | .. _descriptive commit message: https://chris.beams.io/posts/git-commit 332 | .. _docstrings: https://www.sphinx-doc.org/en/master/usage/extensions/napoleon.html 333 | .. _first-contributions tutorial: https://github.com/firstcontributions/first-contributions 334 | .. _flake8: https://flake8.pycqa.org/en/stable/ 335 | .. _git: https://git-scm.com 336 | .. _GitHub's fork and pull request workflow: https://guides.github.com/activities/forking/ 337 | .. _guide created by FreeCodeCamp: https://github.com/FreeCodeCamp/how-to-contribute-to-open-source 338 | .. _Miniconda: https://docs.conda.io/en/latest/miniconda.html 339 | .. _MyST: https://myst-parser.readthedocs.io/en/latest/syntax/syntax.html 340 | .. _other kinds of contributions: https://opensource.guide/how-to-contribute 341 | .. _pre-commit: https://pre-commit.com/ 342 | .. _PyPI: https://pypi.org/ 343 | .. _PyScaffold's contributor's guide: https://pyscaffold.org/en/stable/contributing.html 344 | .. _Pytest can drop you: https://docs.pytest.org/en/stable/how-to/failures.html#using-python-library-pdb-with-pytest 345 | .. _Python Software Foundation's Code of Conduct: https://www.python.org/psf/conduct/ 346 | .. _reStructuredText: https://www.sphinx-doc.org/en/master/usage/restructuredtext/ 347 | .. _Sphinx: https://www.sphinx-doc.org/en/master/ 348 | .. _tox: https://tox.wiki/en/stable/ 349 | .. _virtual environment: https://realpython.com/python-virtual-environments-a-primer/ 350 | .. _virtualenv: https://virtualenv.pypa.io/en/stable/ 351 | 352 | .. _GitHub web interface: https://docs.github.com/en/repositories/working-with-files/managing-files/editing-files 353 | .. _GitHub's code editor: https://docs.github.com/en/repositories/working-with-files/managing-files/editing-files 354 | -------------------------------------------------------------------------------- /cli/LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2025 nathfavour 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 | -------------------------------------------------------------------------------- /cli/README.rst: -------------------------------------------------------------------------------- 1 | .. These are examples of badges you might want to add to your README: 2 | please update the URLs accordingly 3 | 4 | .. image:: https://api.cirrus-ci.com/github//cli.svg?branch=main 5 | :alt: Built Status 6 | :target: https://cirrus-ci.com/github//cli 7 | .. image:: https://readthedocs.org/projects/cli/badge/?version=latest 8 | :alt: ReadTheDocs 9 | :target: https://cli.readthedocs.io/en/stable/ 10 | .. image:: https://img.shields.io/coveralls/github//cli/main.svg 11 | :alt: Coveralls 12 | :target: https://coveralls.io/r//cli 13 | .. image:: https://img.shields.io/pypi/v/cli.svg 14 | :alt: PyPI-Server 15 | :target: https://pypi.org/project/cli/ 16 | .. image:: https://img.shields.io/conda/vn/conda-forge/cli.svg 17 | :alt: Conda-Forge 18 | :target: https://anaconda.org/conda-forge/cli 19 | .. image:: https://pepy.tech/badge/cli/month 20 | :alt: Monthly Downloads 21 | :target: https://pepy.tech/project/cli 22 | .. image:: https://img.shields.io/twitter/url/http/shields.io.svg?style=social&label=Twitter 23 | :alt: Twitter 24 | :target: https://twitter.com/cli 25 | 26 | .. image:: https://img.shields.io/badge/-PyScaffold-005CA0?logo=pyscaffold 27 | :alt: Project generated with PyScaffold 28 | :target: https://pyscaffold.org/ 29 | 30 | | 31 | 32 | === 33 | cli 34 | === 35 | 36 | 37 | Add a short description here! 38 | 39 | 40 | A longer description of your project goes here... 41 | 42 | 43 | .. _pyscaffold-notes: 44 | 45 | Note 46 | ==== 47 | 48 | This project has been set up using PyScaffold 4.6. For details and usage 49 | information on PyScaffold see https://pyscaffold.org/. 50 | -------------------------------------------------------------------------------- /cli/docs/Makefile: -------------------------------------------------------------------------------- 1 | # Makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = . 9 | BUILDDIR = _build 10 | AUTODOCDIR = api 11 | 12 | # User-friendly check for sphinx-build 13 | ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $?), 1) 14 | $(error "The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from https://sphinx-doc.org/") 15 | endif 16 | 17 | .PHONY: help clean Makefile 18 | 19 | # Put it first so that "make" without argument is like "make help". 20 | help: 21 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 22 | 23 | clean: 24 | rm -rf $(BUILDDIR)/* $(AUTODOCDIR) 25 | 26 | # Catch-all target: route all unknown targets to Sphinx using the new 27 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 28 | %: Makefile 29 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 30 | -------------------------------------------------------------------------------- /cli/docs/_static/.gitignore: -------------------------------------------------------------------------------- 1 | # Empty directory 2 | -------------------------------------------------------------------------------- /cli/docs/authors.rst: -------------------------------------------------------------------------------- 1 | .. _authors: 2 | .. include:: ../AUTHORS.rst 3 | -------------------------------------------------------------------------------- /cli/docs/changelog.rst: -------------------------------------------------------------------------------- 1 | .. _changes: 2 | .. include:: ../CHANGELOG.rst 3 | -------------------------------------------------------------------------------- /cli/docs/conf.py: -------------------------------------------------------------------------------- 1 | # This file is execfile()d with the current directory set to its containing dir. 2 | # 3 | # This file only contains a selection of the most common options. For a full 4 | # list see the documentation: 5 | # https://www.sphinx-doc.org/en/master/usage/configuration.html 6 | # 7 | # All configuration values have a default; values that are commented out 8 | # serve to show the default. 9 | 10 | import os 11 | import sys 12 | import shutil 13 | 14 | # -- Path setup -------------------------------------------------------------- 15 | 16 | __location__ = os.path.dirname(__file__) 17 | 18 | # If extensions (or modules to document with autodoc) are in another directory, 19 | # add these directories to sys.path here. If the directory is relative to the 20 | # documentation root, use os.path.abspath to make it absolute, like shown here. 21 | sys.path.insert(0, os.path.join(__location__, "../src")) 22 | 23 | # -- Run sphinx-apidoc ------------------------------------------------------- 24 | # This hack is necessary since RTD does not issue `sphinx-apidoc` before running 25 | # `sphinx-build -b html . _build/html`. See Issue: 26 | # https://github.com/readthedocs/readthedocs.org/issues/1139 27 | # DON'T FORGET: Check the box "Install your project inside a virtualenv using 28 | # setup.py install" in the RTD Advanced Settings. 29 | # Additionally it helps us to avoid running apidoc manually 30 | 31 | try: # for Sphinx >= 1.7 32 | from sphinx.ext import apidoc 33 | except ImportError: 34 | from sphinx import apidoc 35 | 36 | output_dir = os.path.join(__location__, "api") 37 | module_dir = os.path.join(__location__, "../src/cli") 38 | try: 39 | shutil.rmtree(output_dir) 40 | except FileNotFoundError: 41 | pass 42 | 43 | try: 44 | import sphinx 45 | 46 | cmd_line = f"sphinx-apidoc --implicit-namespaces -f -o {output_dir} {module_dir}" 47 | 48 | args = cmd_line.split(" ") 49 | if tuple(sphinx.__version__.split(".")) >= ("1", "7"): 50 | # This is a rudimentary parse_version to avoid external dependencies 51 | args = args[1:] 52 | 53 | apidoc.main(args) 54 | except Exception as e: 55 | print("Running `sphinx-apidoc` failed!\n{}".format(e)) 56 | 57 | # -- General configuration --------------------------------------------------- 58 | 59 | # If your documentation needs a minimal Sphinx version, state it here. 60 | # needs_sphinx = '1.0' 61 | 62 | # Add any Sphinx extension module names here, as strings. They can be extensions 63 | # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. 64 | extensions = [ 65 | "sphinx.ext.autodoc", 66 | "sphinx.ext.intersphinx", 67 | "sphinx.ext.todo", 68 | "sphinx.ext.autosummary", 69 | "sphinx.ext.viewcode", 70 | "sphinx.ext.coverage", 71 | "sphinx.ext.doctest", 72 | "sphinx.ext.ifconfig", 73 | "sphinx.ext.mathjax", 74 | "sphinx.ext.napoleon", 75 | ] 76 | 77 | # Add any paths that contain templates here, relative to this directory. 78 | templates_path = ["_templates"] 79 | 80 | # The suffix of source filenames. 81 | source_suffix = ".rst" 82 | 83 | # The encoding of source files. 84 | # source_encoding = 'utf-8-sig' 85 | 86 | # The master toctree document. 87 | master_doc = "index" 88 | 89 | # General information about the project. 90 | project = "cli" 91 | copyright = "2025, nathfavour" 92 | 93 | # The version info for the project you're documenting, acts as replacement for 94 | # |version| and |release|, also used in various other places throughout the 95 | # built documents. 96 | # 97 | # version: The short X.Y version. 98 | # release: The full version, including alpha/beta/rc tags. 99 | # If you don’t need the separation provided between version and release, 100 | # just set them both to the same value. 101 | try: 102 | from cli import __version__ as version 103 | except ImportError: 104 | version = "" 105 | 106 | if not version or version.lower() == "unknown": 107 | version = os.getenv("READTHEDOCS_VERSION", "unknown") # automatically set by RTD 108 | 109 | release = version 110 | 111 | # The language for content autogenerated by Sphinx. Refer to documentation 112 | # for a list of supported languages. 113 | # language = None 114 | 115 | # There are two options for replacing |today|: either, you set today to some 116 | # non-false value, then it is used: 117 | # today = '' 118 | # Else, today_fmt is used as the format for a strftime call. 119 | # today_fmt = '%B %d, %Y' 120 | 121 | # List of patterns, relative to source directory, that match files and 122 | # directories to ignore when looking for source files. 123 | exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", ".venv"] 124 | 125 | # The reST default role (used for this markup: `text`) to use for all documents. 126 | # default_role = None 127 | 128 | # If true, '()' will be appended to :func: etc. cross-reference text. 129 | # add_function_parentheses = True 130 | 131 | # If true, the current module name will be prepended to all description 132 | # unit titles (such as .. function::). 133 | # add_module_names = True 134 | 135 | # If true, sectionauthor and moduleauthor directives will be shown in the 136 | # output. They are ignored by default. 137 | # show_authors = False 138 | 139 | # The name of the Pygments (syntax highlighting) style to use. 140 | pygments_style = "sphinx" 141 | 142 | # A list of ignored prefixes for module index sorting. 143 | # modindex_common_prefix = [] 144 | 145 | # If true, keep warnings as "system message" paragraphs in the built documents. 146 | # keep_warnings = False 147 | 148 | # If this is True, todo emits a warning for each TODO entries. The default is False. 149 | todo_emit_warnings = True 150 | 151 | 152 | # -- Options for HTML output ------------------------------------------------- 153 | 154 | # The theme to use for HTML and HTML Help pages. See the documentation for 155 | # a list of builtin themes. 156 | html_theme = "alabaster" 157 | 158 | # Theme options are theme-specific and customize the look and feel of a theme 159 | # further. For a list of options available for each theme, see the 160 | # documentation. 161 | html_theme_options = { 162 | "sidebar_width": "300px", 163 | "page_width": "1200px" 164 | } 165 | 166 | # Add any paths that contain custom themes here, relative to this directory. 167 | # html_theme_path = [] 168 | 169 | # The name for this set of Sphinx documents. If None, it defaults to 170 | # " v documentation". 171 | # html_title = None 172 | 173 | # A shorter title for the navigation bar. Default is the same as html_title. 174 | # html_short_title = None 175 | 176 | # The name of an image file (relative to this directory) to place at the top 177 | # of the sidebar. 178 | # html_logo = "" 179 | 180 | # The name of an image file (within the static path) to use as favicon of the 181 | # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 182 | # pixels large. 183 | # html_favicon = None 184 | 185 | # Add any paths that contain custom static files (such as style sheets) here, 186 | # relative to this directory. They are copied after the builtin static files, 187 | # so a file named "default.css" will overwrite the builtin "default.css". 188 | html_static_path = ["_static"] 189 | 190 | # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, 191 | # using the given strftime format. 192 | # html_last_updated_fmt = '%b %d, %Y' 193 | 194 | # If true, SmartyPants will be used to convert quotes and dashes to 195 | # typographically correct entities. 196 | # html_use_smartypants = True 197 | 198 | # Custom sidebar templates, maps document names to template names. 199 | # html_sidebars = {} 200 | 201 | # Additional templates that should be rendered to pages, maps page names to 202 | # template names. 203 | # html_additional_pages = {} 204 | 205 | # If false, no module index is generated. 206 | # html_domain_indices = True 207 | 208 | # If false, no index is generated. 209 | # html_use_index = True 210 | 211 | # If true, the index is split into individual pages for each letter. 212 | # html_split_index = False 213 | 214 | # If true, links to the reST sources are added to the pages. 215 | # html_show_sourcelink = True 216 | 217 | # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. 218 | # html_show_sphinx = True 219 | 220 | # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. 221 | # html_show_copyright = True 222 | 223 | # If true, an OpenSearch description file will be output, and all pages will 224 | # contain a tag referring to it. The value of this option must be the 225 | # base URL from which the finished HTML is served. 226 | # html_use_opensearch = '' 227 | 228 | # This is the file name suffix for HTML files (e.g. ".xhtml"). 229 | # html_file_suffix = None 230 | 231 | # Output file base name for HTML help builder. 232 | htmlhelp_basename = "cli-doc" 233 | 234 | 235 | # -- Options for LaTeX output ------------------------------------------------ 236 | 237 | latex_elements = { 238 | # The paper size ("letterpaper" or "a4paper"). 239 | # "papersize": "letterpaper", 240 | # The font size ("10pt", "11pt" or "12pt"). 241 | # "pointsize": "10pt", 242 | # Additional stuff for the LaTeX preamble. 243 | # "preamble": "", 244 | } 245 | 246 | # Grouping the document tree into LaTeX files. List of tuples 247 | # (source start file, target name, title, author, documentclass [howto/manual]). 248 | latex_documents = [ 249 | ("index", "user_guide.tex", "cli Documentation", "nathfavour", "manual") 250 | ] 251 | 252 | # The name of an image file (relative to this directory) to place at the top of 253 | # the title page. 254 | # latex_logo = "" 255 | 256 | # For "manual" documents, if this is true, then toplevel headings are parts, 257 | # not chapters. 258 | # latex_use_parts = False 259 | 260 | # If true, show page references after internal links. 261 | # latex_show_pagerefs = False 262 | 263 | # If true, show URL addresses after external links. 264 | # latex_show_urls = False 265 | 266 | # Documents to append as an appendix to all manuals. 267 | # latex_appendices = [] 268 | 269 | # If false, no module index is generated. 270 | # latex_domain_indices = True 271 | 272 | # -- External mapping -------------------------------------------------------- 273 | python_version = ".".join(map(str, sys.version_info[0:2])) 274 | intersphinx_mapping = { 275 | "sphinx": ("https://www.sphinx-doc.org/en/master", None), 276 | "python": ("https://docs.python.org/" + python_version, None), 277 | "matplotlib": ("https://matplotlib.org", None), 278 | "numpy": ("https://numpy.org/doc/stable", None), 279 | "sklearn": ("https://scikit-learn.org/stable", None), 280 | "pandas": ("https://pandas.pydata.org/pandas-docs/stable", None), 281 | "scipy": ("https://docs.scipy.org/doc/scipy/reference", None), 282 | "setuptools": ("https://setuptools.pypa.io/en/stable/", None), 283 | "pyscaffold": ("https://pyscaffold.org/en/stable", None), 284 | } 285 | 286 | print(f"loading configurations for {project} {version} ...", file=sys.stderr) 287 | -------------------------------------------------------------------------------- /cli/docs/contributing.rst: -------------------------------------------------------------------------------- 1 | .. include:: ../CONTRIBUTING.rst 2 | -------------------------------------------------------------------------------- /cli/docs/index.rst: -------------------------------------------------------------------------------- 1 | === 2 | cli 3 | === 4 | 5 | This is the documentation of **cli**. 6 | 7 | .. note:: 8 | 9 | This is the main page of your project's `Sphinx`_ documentation. 10 | It is formatted in `reStructuredText`_. Add additional pages 11 | by creating rst-files in ``docs`` and adding them to the `toctree`_ below. 12 | Use then `references`_ in order to link them from this page, e.g. 13 | :ref:`authors` and :ref:`changes`. 14 | 15 | It is also possible to refer to the documentation of other Python packages 16 | with the `Python domain syntax`_. By default you can reference the 17 | documentation of `Sphinx`_, `Python`_, `NumPy`_, `SciPy`_, `matplotlib`_, 18 | `Pandas`_, `Scikit-Learn`_. You can add more by extending the 19 | ``intersphinx_mapping`` in your Sphinx's ``conf.py``. 20 | 21 | The pretty useful extension `autodoc`_ is activated by default and lets 22 | you include documentation from docstrings. Docstrings can be written in 23 | `Google style`_ (recommended!), `NumPy style`_ and `classical style`_. 24 | 25 | 26 | Contents 27 | ======== 28 | 29 | .. toctree:: 30 | :maxdepth: 2 31 | 32 | Overview 33 | Contributions & Help 34 | License 35 | Authors 36 | Changelog 37 | Module Reference 38 | 39 | 40 | Indices and tables 41 | ================== 42 | 43 | * :ref:`genindex` 44 | * :ref:`modindex` 45 | * :ref:`search` 46 | 47 | .. _toctree: https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html 48 | .. _reStructuredText: https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html 49 | .. _references: https://www.sphinx-doc.org/en/stable/markup/inline.html 50 | .. _Python domain syntax: https://www.sphinx-doc.org/en/master/usage/restructuredtext/domains.html#the-python-domain 51 | .. _Sphinx: https://www.sphinx-doc.org/ 52 | .. _Python: https://docs.python.org/ 53 | .. _Numpy: https://numpy.org/doc/stable 54 | .. _SciPy: https://docs.scipy.org/doc/scipy/reference/ 55 | .. _matplotlib: https://matplotlib.org/contents.html# 56 | .. _Pandas: https://pandas.pydata.org/pandas-docs/stable 57 | .. _Scikit-Learn: https://scikit-learn.org/stable 58 | .. _autodoc: https://www.sphinx-doc.org/en/master/ext/autodoc.html 59 | .. _Google style: https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings 60 | .. _NumPy style: https://numpydoc.readthedocs.io/en/latest/format.html 61 | .. _classical style: https://www.sphinx-doc.org/en/master/domains.html#info-field-lists 62 | -------------------------------------------------------------------------------- /cli/docs/license.rst: -------------------------------------------------------------------------------- 1 | .. _license: 2 | 3 | ======= 4 | License 5 | ======= 6 | 7 | .. include:: ../LICENSE.txt 8 | -------------------------------------------------------------------------------- /cli/docs/readme.rst: -------------------------------------------------------------------------------- 1 | .. _readme: 2 | .. include:: ../README.rst 3 | -------------------------------------------------------------------------------- /cli/docs/requirements.txt: -------------------------------------------------------------------------------- 1 | # Requirements file for ReadTheDocs, check .readthedocs.yml. 2 | # To build the module reference correctly, make sure every external package 3 | # under `install_requires` in `setup.cfg` is also listed here! 4 | sphinx>=3.2.1 5 | # sphinx_rtd_theme 6 | -------------------------------------------------------------------------------- /cli/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | # AVOID CHANGING REQUIRES: IT WILL BE UPDATED BY PYSCAFFOLD! 3 | requires = ["setuptools>=46.1.0", "setuptools_scm[toml]>=5"] 4 | build-backend = "setuptools.build_meta" 5 | 6 | [tool.setuptools_scm] 7 | # For smarter version schemes and other configuration options, 8 | # check out https://github.com/pypa/setuptools_scm 9 | version_scheme = "no-guess-dev" 10 | -------------------------------------------------------------------------------- /cli/setup.cfg: -------------------------------------------------------------------------------- 1 | # This file is used to configure your project. 2 | # Read more about the various options under: 3 | # https://setuptools.pypa.io/en/latest/userguide/declarative_config.html 4 | # https://setuptools.pypa.io/en/latest/references/keywords.html 5 | 6 | [metadata] 7 | name = cli 8 | description = Add a short description here! 9 | author = nathfavour 10 | author_email = 116535483+nathfavour@users.noreply.github.com 11 | license = MIT 12 | license_files = LICENSE.txt 13 | long_description = file: README.rst 14 | long_description_content_type = text/x-rst; charset=UTF-8 15 | url = https://github.com/pyscaffold/pyscaffold/ 16 | # Add here related links, for example: 17 | project_urls = 18 | Documentation = https://pyscaffold.org/ 19 | # Source = https://github.com/pyscaffold/pyscaffold/ 20 | # Changelog = https://pyscaffold.org/en/latest/changelog.html 21 | # Tracker = https://github.com/pyscaffold/pyscaffold/issues 22 | # Conda-Forge = https://anaconda.org/conda-forge/pyscaffold 23 | # Download = https://pypi.org/project/PyScaffold/#files 24 | # Twitter = https://twitter.com/PyScaffold 25 | 26 | # Change if running only on Windows, Mac or Linux (comma-separated) 27 | platforms = any 28 | 29 | # Add here all kinds of additional classifiers as defined under 30 | # https://pypi.org/classifiers/ 31 | classifiers = 32 | Development Status :: 4 - Beta 33 | Programming Language :: Python 34 | 35 | 36 | [options] 37 | zip_safe = False 38 | packages = find_namespace: 39 | include_package_data = True 40 | package_dir = 41 | =src 42 | 43 | # Require a min/specific Python version (comma-separated conditions) 44 | # python_requires = >=3.8 45 | 46 | # Add here dependencies of your project (line-separated), e.g. requests>=2.2,<3.0. 47 | # Version specifiers like >=2.2,<3.0 avoid problems due to API changes in 48 | # new major versions. This works if the required packages follow Semantic Versioning. 49 | # For more information, check out https://semver.org/. 50 | install_requires = 51 | importlib-metadata; python_version<"3.8" 52 | 53 | 54 | [options.packages.find] 55 | where = src 56 | exclude = 57 | tests 58 | 59 | [options.extras_require] 60 | # Add here additional requirements for extra features, to install with: 61 | # `pip install cli[PDF]` like: 62 | # PDF = ReportLab; RXP 63 | 64 | # Add here test requirements (semicolon/line-separated) 65 | testing = 66 | setuptools 67 | pytest 68 | pytest-cov 69 | 70 | [options.entry_points] 71 | # Add here console scripts like: 72 | # console_scripts = 73 | # script_name = cli.module:function 74 | # For example: 75 | # console_scripts = 76 | # fibonacci = cli.skeleton:run 77 | # And any other entry points, for example: 78 | # pyscaffold.cli = 79 | # awesome = pyscaffoldext.awesome.extension:AwesomeExtension 80 | 81 | [tool:pytest] 82 | # Specify command line options as you would do when invoking pytest directly. 83 | # e.g. --cov-report html (or xml) for html/xml output or --junitxml junit.xml 84 | # in order to write a coverage file that can be read by Jenkins. 85 | # CAUTION: --cov flags may prohibit setting breakpoints while debugging. 86 | # Comment those flags to avoid this pytest issue. 87 | addopts = 88 | --cov cli --cov-report term-missing 89 | --verbose 90 | norecursedirs = 91 | dist 92 | build 93 | .tox 94 | testpaths = tests 95 | # Use pytest markers to select/deselect specific tests 96 | # markers = 97 | # slow: mark tests as slow (deselect with '-m "not slow"') 98 | # system: mark end-to-end system tests 99 | 100 | [devpi:upload] 101 | # Options for the devpi: PyPI server and packaging tool 102 | # VCS export must be deactivated since we are using setuptools-scm 103 | no_vcs = 1 104 | formats = bdist_wheel 105 | 106 | [flake8] 107 | # Some sane defaults for the code style checker flake8 108 | max_line_length = 88 109 | extend_ignore = E203, W503 110 | # ^ Black-compatible 111 | # E203 and W503 have edge cases handled by black 112 | exclude = 113 | .tox 114 | build 115 | dist 116 | .eggs 117 | docs/conf.py 118 | 119 | [pyscaffold] 120 | # PyScaffold's parameters when the project was created. 121 | # This will be used when updating. Do not change! 122 | version = 4.6 123 | package = cli 124 | -------------------------------------------------------------------------------- /cli/setup.py: -------------------------------------------------------------------------------- 1 | """ 2 | Setup file for cli. 3 | Use setup.cfg to configure your project. 4 | 5 | This file was generated with PyScaffold 4.6. 6 | PyScaffold helps you to put up the scaffold of your new Python project. 7 | Learn more under: https://pyscaffold.org/ 8 | """ 9 | 10 | from setuptools import setup 11 | 12 | if __name__ == "__main__": 13 | try: 14 | setup(use_scm_version={"version_scheme": "no-guess-dev"}) 15 | except: # noqa 16 | print( 17 | "\n\nAn error occurred while building the project, " 18 | "please ensure you have the most updated version of setuptools, " 19 | "setuptools_scm and wheel with:\n" 20 | " pip install -U setuptools setuptools_scm wheel\n\n" 21 | ) 22 | raise 23 | -------------------------------------------------------------------------------- /cli/src/cli/__init__.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | if sys.version_info[:2] >= (3, 8): 4 | # TODO: Import directly (no need for conditional) when `python_requires = >= 3.8` 5 | from importlib.metadata import PackageNotFoundError, version # pragma: no cover 6 | else: 7 | from importlib_metadata import PackageNotFoundError, version # pragma: no cover 8 | 9 | try: 10 | # Change here if project is renamed and does not equal the package name 11 | dist_name = __name__ 12 | __version__ = version(dist_name) 13 | except PackageNotFoundError: # pragma: no cover 14 | __version__ = "unknown" 15 | finally: 16 | del version, PackageNotFoundError 17 | -------------------------------------------------------------------------------- /cli/src/cli/converter.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathfavour/bionicpython/ecc18760935cf22dc2b5769d830902db990390fc/cli/src/cli/converter.py -------------------------------------------------------------------------------- /cli/src/cli/skeleton.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathfavour/bionicpython/ecc18760935cf22dc2b5769d830902db990390fc/cli/src/cli/skeleton.py -------------------------------------------------------------------------------- /cli/tests/conftest.py: -------------------------------------------------------------------------------- 1 | """ 2 | Dummy conftest.py for cli. 3 | 4 | If you don't know what this is for, just leave it empty. 5 | Read more about conftest.py under: 6 | - https://docs.pytest.org/en/stable/fixture.html 7 | - https://docs.pytest.org/en/stable/writing_plugins.html 8 | """ 9 | 10 | # import pytest 11 | -------------------------------------------------------------------------------- /cli/tests/test_skeleton.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | from cli.skeleton import fib, main 4 | 5 | __author__ = "nathfavour" 6 | __copyright__ = "nathfavour" 7 | __license__ = "MIT" 8 | 9 | 10 | def test_fib(): 11 | """API Tests""" 12 | assert fib(1) == 1 13 | assert fib(2) == 1 14 | assert fib(7) == 13 15 | with pytest.raises(AssertionError): 16 | fib(-10) 17 | 18 | 19 | def test_main(capsys): 20 | """CLI Tests""" 21 | # capsys is a pytest fixture that allows asserts against stdout/stderr 22 | # https://docs.pytest.org/en/stable/capture.html 23 | main(["7"]) 24 | captured = capsys.readouterr() 25 | assert "The 7-th Fibonacci number is 13" in captured.out 26 | -------------------------------------------------------------------------------- /cli/tox.ini: -------------------------------------------------------------------------------- 1 | # Tox configuration file 2 | # Read more under https://tox.wiki/ 3 | # THIS SCRIPT IS SUPPOSED TO BE AN EXAMPLE. MODIFY IT ACCORDING TO YOUR NEEDS! 4 | 5 | [tox] 6 | minversion = 3.24 7 | envlist = default 8 | isolated_build = True 9 | 10 | 11 | [testenv] 12 | description = Invoke pytest to run automated tests 13 | setenv = 14 | TOXINIDIR = {toxinidir} 15 | passenv = 16 | HOME 17 | SETUPTOOLS_* 18 | extras = 19 | testing 20 | commands = 21 | pytest {posargs} 22 | 23 | 24 | # # To run `tox -e lint` you need to make sure you have a 25 | # # `.pre-commit-config.yaml` file. See https://pre-commit.com 26 | # [testenv:lint] 27 | # description = Perform static analysis and style checks 28 | # skip_install = True 29 | # deps = pre-commit 30 | # passenv = 31 | # HOMEPATH 32 | # PROGRAMDATA 33 | # SETUPTOOLS_* 34 | # commands = 35 | # pre-commit run --all-files {posargs:--show-diff-on-failure} 36 | 37 | 38 | [testenv:{build,clean}] 39 | description = 40 | build: Build the package in isolation according to PEP517, see https://github.com/pypa/build 41 | clean: Remove old distribution files and temporary build artifacts (./build and ./dist) 42 | # https://setuptools.pypa.io/en/stable/build_meta.html#how-to-use-it 43 | skip_install = True 44 | changedir = {toxinidir} 45 | deps = 46 | build: build[virtualenv] 47 | passenv = 48 | SETUPTOOLS_* 49 | commands = 50 | clean: python -c 'import shutil; [shutil.rmtree(p, True) for p in ("build", "dist", "docs/_build")]' 51 | clean: python -c 'import pathlib, shutil; [shutil.rmtree(p, True) for p in pathlib.Path("src").glob("*.egg-info")]' 52 | build: python -m build {posargs} 53 | # By default, both `sdist` and `wheel` are built. If your sdist is too big or you don't want 54 | # to make it available, consider running: `tox -e build -- --wheel` 55 | 56 | 57 | [testenv:{docs,doctests,linkcheck}] 58 | description = 59 | docs: Invoke sphinx-build to build the docs 60 | doctests: Invoke sphinx-build to run doctests 61 | linkcheck: Check for broken links in the documentation 62 | passenv = 63 | SETUPTOOLS_* 64 | setenv = 65 | DOCSDIR = {toxinidir}/docs 66 | BUILDDIR = {toxinidir}/docs/_build 67 | docs: BUILD = html 68 | doctests: BUILD = doctest 69 | linkcheck: BUILD = linkcheck 70 | deps = 71 | -r {toxinidir}/docs/requirements.txt 72 | # ^ requirements.txt shared with Read The Docs 73 | commands = 74 | sphinx-build --color -b {env:BUILD} -d "{env:BUILDDIR}/doctrees" "{env:DOCSDIR}" "{env:BUILDDIR}/{env:BUILD}" {posargs} 75 | 76 | 77 | [testenv:publish] 78 | description = 79 | Publish the package you have been developing to a package index server. 80 | By default, it uses testpypi. If you really want to publish your package 81 | to be publicly accessible in PyPI, use the `-- --repository pypi` option. 82 | skip_install = True 83 | changedir = {toxinidir} 84 | passenv = 85 | # See: https://twine.readthedocs.io/en/latest/ 86 | TWINE_USERNAME 87 | TWINE_PASSWORD 88 | TWINE_REPOSITORY 89 | TWINE_REPOSITORY_URL 90 | deps = twine 91 | commands = 92 | python -m twine check dist/* 93 | python -m twine upload {posargs:--repository {env:TWINE_REPOSITORY:testpypi}} dist/* 94 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /image/README/1700793569388.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathfavour/bionicpython/ecc18760935cf22dc2b5769d830902db990390fc/image/README/1700793569388.png -------------------------------------------------------------------------------- /image/README/1700793580179.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathfavour/bionicpython/ecc18760935cf22dc2b5769d830902db990390fc/image/README/1700793580179.png -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "@/*": ["./*"] 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | /* config options here */ 5 | }; 6 | 7 | export default nextConfig; 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "webapp", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev --turbopack", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "react": "^19.0.0", 13 | "react-dom": "^19.0.0", 14 | "next": "15.1.6" 15 | }, 16 | "devDependencies": { 17 | "typescript": "^5", 18 | "@types/node": "^20", 19 | "@types/react": "^19", 20 | "@types/react-dom": "^19", 21 | "postcss": "^8", 22 | "tailwindcss": "^3.4.1", 23 | "eslint": "^9", 24 | "eslint-config-next": "15.1.6", 25 | "@eslint/eslintrc": "^3" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | next: 12 | specifier: 15.1.6 13 | version: 15.1.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 14 | react: 15 | specifier: ^19.0.0 16 | version: 19.0.0 17 | react-dom: 18 | specifier: ^19.0.0 19 | version: 19.0.0(react@19.0.0) 20 | devDependencies: 21 | '@eslint/eslintrc': 22 | specifier: ^3 23 | version: 3.2.0 24 | '@types/node': 25 | specifier: ^20 26 | version: 20.17.17 27 | '@types/react': 28 | specifier: ^19 29 | version: 19.0.8 30 | '@types/react-dom': 31 | specifier: ^19 32 | version: 19.0.3(@types/react@19.0.8) 33 | eslint: 34 | specifier: ^9 35 | version: 9.20.0(jiti@1.21.7) 36 | eslint-config-next: 37 | specifier: 15.1.6 38 | version: 15.1.6(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3) 39 | postcss: 40 | specifier: ^8 41 | version: 8.5.1 42 | tailwindcss: 43 | specifier: ^3.4.1 44 | version: 3.4.17 45 | typescript: 46 | specifier: ^5 47 | version: 5.7.3 48 | 49 | packages: 50 | 51 | '@alloc/quick-lru@5.2.0': 52 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 53 | engines: {node: '>=10'} 54 | 55 | '@emnapi/runtime@1.3.1': 56 | resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} 57 | 58 | '@eslint-community/eslint-utils@4.4.1': 59 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 60 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 61 | peerDependencies: 62 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 63 | 64 | '@eslint-community/regexpp@4.12.1': 65 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 66 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 67 | 68 | '@eslint/config-array@0.19.2': 69 | resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} 70 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 71 | 72 | '@eslint/core@0.10.0': 73 | resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} 74 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 75 | 76 | '@eslint/core@0.11.0': 77 | resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==} 78 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 79 | 80 | '@eslint/eslintrc@3.2.0': 81 | resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} 82 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 83 | 84 | '@eslint/js@9.20.0': 85 | resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==} 86 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 87 | 88 | '@eslint/object-schema@2.1.6': 89 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 90 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 91 | 92 | '@eslint/plugin-kit@0.2.5': 93 | resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} 94 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 95 | 96 | '@humanfs/core@0.19.1': 97 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 98 | engines: {node: '>=18.18.0'} 99 | 100 | '@humanfs/node@0.16.6': 101 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 102 | engines: {node: '>=18.18.0'} 103 | 104 | '@humanwhocodes/module-importer@1.0.1': 105 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 106 | engines: {node: '>=12.22'} 107 | 108 | '@humanwhocodes/retry@0.3.1': 109 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 110 | engines: {node: '>=18.18'} 111 | 112 | '@humanwhocodes/retry@0.4.1': 113 | resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} 114 | engines: {node: '>=18.18'} 115 | 116 | '@img/sharp-darwin-arm64@0.33.5': 117 | resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} 118 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 119 | cpu: [arm64] 120 | os: [darwin] 121 | 122 | '@img/sharp-darwin-x64@0.33.5': 123 | resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} 124 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 125 | cpu: [x64] 126 | os: [darwin] 127 | 128 | '@img/sharp-libvips-darwin-arm64@1.0.4': 129 | resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} 130 | cpu: [arm64] 131 | os: [darwin] 132 | 133 | '@img/sharp-libvips-darwin-x64@1.0.4': 134 | resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} 135 | cpu: [x64] 136 | os: [darwin] 137 | 138 | '@img/sharp-libvips-linux-arm64@1.0.4': 139 | resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} 140 | cpu: [arm64] 141 | os: [linux] 142 | 143 | '@img/sharp-libvips-linux-arm@1.0.5': 144 | resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} 145 | cpu: [arm] 146 | os: [linux] 147 | 148 | '@img/sharp-libvips-linux-s390x@1.0.4': 149 | resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} 150 | cpu: [s390x] 151 | os: [linux] 152 | 153 | '@img/sharp-libvips-linux-x64@1.0.4': 154 | resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} 155 | cpu: [x64] 156 | os: [linux] 157 | 158 | '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 159 | resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} 160 | cpu: [arm64] 161 | os: [linux] 162 | 163 | '@img/sharp-libvips-linuxmusl-x64@1.0.4': 164 | resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} 165 | cpu: [x64] 166 | os: [linux] 167 | 168 | '@img/sharp-linux-arm64@0.33.5': 169 | resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} 170 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 171 | cpu: [arm64] 172 | os: [linux] 173 | 174 | '@img/sharp-linux-arm@0.33.5': 175 | resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} 176 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 177 | cpu: [arm] 178 | os: [linux] 179 | 180 | '@img/sharp-linux-s390x@0.33.5': 181 | resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} 182 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 183 | cpu: [s390x] 184 | os: [linux] 185 | 186 | '@img/sharp-linux-x64@0.33.5': 187 | resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} 188 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 189 | cpu: [x64] 190 | os: [linux] 191 | 192 | '@img/sharp-linuxmusl-arm64@0.33.5': 193 | resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} 194 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 195 | cpu: [arm64] 196 | os: [linux] 197 | 198 | '@img/sharp-linuxmusl-x64@0.33.5': 199 | resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} 200 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 201 | cpu: [x64] 202 | os: [linux] 203 | 204 | '@img/sharp-wasm32@0.33.5': 205 | resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} 206 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 207 | cpu: [wasm32] 208 | 209 | '@img/sharp-win32-ia32@0.33.5': 210 | resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} 211 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 212 | cpu: [ia32] 213 | os: [win32] 214 | 215 | '@img/sharp-win32-x64@0.33.5': 216 | resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} 217 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 218 | cpu: [x64] 219 | os: [win32] 220 | 221 | '@isaacs/cliui@8.0.2': 222 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 223 | engines: {node: '>=12'} 224 | 225 | '@jridgewell/gen-mapping@0.3.8': 226 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 227 | engines: {node: '>=6.0.0'} 228 | 229 | '@jridgewell/resolve-uri@3.1.2': 230 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 231 | engines: {node: '>=6.0.0'} 232 | 233 | '@jridgewell/set-array@1.2.1': 234 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 235 | engines: {node: '>=6.0.0'} 236 | 237 | '@jridgewell/sourcemap-codec@1.5.0': 238 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 239 | 240 | '@jridgewell/trace-mapping@0.3.25': 241 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 242 | 243 | '@next/env@15.1.6': 244 | resolution: {integrity: sha512-d9AFQVPEYNr+aqokIiPLNK/MTyt3DWa/dpKveiAaVccUadFbhFEvY6FXYX2LJO2Hv7PHnLBu2oWwB4uBuHjr/w==} 245 | 246 | '@next/eslint-plugin-next@15.1.6': 247 | resolution: {integrity: sha512-+slMxhTgILUntZDGNgsKEYHUvpn72WP1YTlkmEhS51vnVd7S9jEEy0n9YAMcI21vUG4akTw9voWH02lrClt/yw==} 248 | 249 | '@next/swc-darwin-arm64@15.1.6': 250 | resolution: {integrity: sha512-u7lg4Mpl9qWpKgy6NzEkz/w0/keEHtOybmIl0ykgItBxEM5mYotS5PmqTpo+Rhg8FiOiWgwr8USxmKQkqLBCrw==} 251 | engines: {node: '>= 10'} 252 | cpu: [arm64] 253 | os: [darwin] 254 | 255 | '@next/swc-darwin-x64@15.1.6': 256 | resolution: {integrity: sha512-x1jGpbHbZoZ69nRuogGL2MYPLqohlhnT9OCU6E6QFewwup+z+M6r8oU47BTeJcWsF2sdBahp5cKiAcDbwwK/lg==} 257 | engines: {node: '>= 10'} 258 | cpu: [x64] 259 | os: [darwin] 260 | 261 | '@next/swc-linux-arm64-gnu@15.1.6': 262 | resolution: {integrity: sha512-jar9sFw0XewXsBzPf9runGzoivajeWJUc/JkfbLTC4it9EhU8v7tCRLH7l5Y1ReTMN6zKJO0kKAGqDk8YSO2bg==} 263 | engines: {node: '>= 10'} 264 | cpu: [arm64] 265 | os: [linux] 266 | 267 | '@next/swc-linux-arm64-musl@15.1.6': 268 | resolution: {integrity: sha512-+n3u//bfsrIaZch4cgOJ3tXCTbSxz0s6brJtU3SzLOvkJlPQMJ+eHVRi6qM2kKKKLuMY+tcau8XD9CJ1OjeSQQ==} 269 | engines: {node: '>= 10'} 270 | cpu: [arm64] 271 | os: [linux] 272 | 273 | '@next/swc-linux-x64-gnu@15.1.6': 274 | resolution: {integrity: sha512-SpuDEXixM3PycniL4iVCLyUyvcl6Lt0mtv3am08sucskpG0tYkW1KlRhTgj4LI5ehyxriVVcfdoxuuP8csi3kQ==} 275 | engines: {node: '>= 10'} 276 | cpu: [x64] 277 | os: [linux] 278 | 279 | '@next/swc-linux-x64-musl@15.1.6': 280 | resolution: {integrity: sha512-L4druWmdFSZIIRhF+G60API5sFB7suTbDRhYWSjiw0RbE+15igQvE2g2+S973pMGvwN3guw7cJUjA/TmbPWTHQ==} 281 | engines: {node: '>= 10'} 282 | cpu: [x64] 283 | os: [linux] 284 | 285 | '@next/swc-win32-arm64-msvc@15.1.6': 286 | resolution: {integrity: sha512-s8w6EeqNmi6gdvM19tqKKWbCyOBvXFbndkGHl+c9YrzsLARRdCHsD9S1fMj8gsXm9v8vhC8s3N8rjuC/XrtkEg==} 287 | engines: {node: '>= 10'} 288 | cpu: [arm64] 289 | os: [win32] 290 | 291 | '@next/swc-win32-x64-msvc@15.1.6': 292 | resolution: {integrity: sha512-6xomMuu54FAFxttYr5PJbEfu96godcxBTRk1OhAvJq0/EnmFU/Ybiax30Snis4vdWZ9LGpf7Roy5fSs7v/5ROQ==} 293 | engines: {node: '>= 10'} 294 | cpu: [x64] 295 | os: [win32] 296 | 297 | '@nodelib/fs.scandir@2.1.5': 298 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 299 | engines: {node: '>= 8'} 300 | 301 | '@nodelib/fs.stat@2.0.5': 302 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 303 | engines: {node: '>= 8'} 304 | 305 | '@nodelib/fs.walk@1.2.8': 306 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 307 | engines: {node: '>= 8'} 308 | 309 | '@nolyfill/is-core-module@1.0.39': 310 | resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} 311 | engines: {node: '>=12.4.0'} 312 | 313 | '@pkgjs/parseargs@0.11.0': 314 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 315 | engines: {node: '>=14'} 316 | 317 | '@rtsao/scc@1.1.0': 318 | resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} 319 | 320 | '@rushstack/eslint-patch@1.10.5': 321 | resolution: {integrity: sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A==} 322 | 323 | '@swc/counter@0.1.3': 324 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} 325 | 326 | '@swc/helpers@0.5.15': 327 | resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} 328 | 329 | '@types/estree@1.0.6': 330 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 331 | 332 | '@types/json-schema@7.0.15': 333 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 334 | 335 | '@types/json5@0.0.29': 336 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 337 | 338 | '@types/node@20.17.17': 339 | resolution: {integrity: sha512-/WndGO4kIfMicEQLTi/mDANUu/iVUhT7KboZPdEqqHQ4aTS+3qT3U5gIqWDFV+XouorjfgGqvKILJeHhuQgFYg==} 340 | 341 | '@types/react-dom@19.0.3': 342 | resolution: {integrity: sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==} 343 | peerDependencies: 344 | '@types/react': ^19.0.0 345 | 346 | '@types/react@19.0.8': 347 | resolution: {integrity: sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw==} 348 | 349 | '@typescript-eslint/eslint-plugin@8.23.0': 350 | resolution: {integrity: sha512-vBz65tJgRrA1Q5gWlRfvoH+w943dq9K1p1yDBY2pc+a1nbBLZp7fB9+Hk8DaALUbzjqlMfgaqlVPT1REJdkt/w==} 351 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 352 | peerDependencies: 353 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 354 | eslint: ^8.57.0 || ^9.0.0 355 | typescript: '>=4.8.4 <5.8.0' 356 | 357 | '@typescript-eslint/parser@8.23.0': 358 | resolution: {integrity: sha512-h2lUByouOXFAlMec2mILeELUbME5SZRN/7R9Cw2RD2lRQQY08MWMM+PmVVKKJNK1aIwqTo9t/0CvOxwPbRIE2Q==} 359 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 360 | peerDependencies: 361 | eslint: ^8.57.0 || ^9.0.0 362 | typescript: '>=4.8.4 <5.8.0' 363 | 364 | '@typescript-eslint/scope-manager@8.23.0': 365 | resolution: {integrity: sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw==} 366 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 367 | 368 | '@typescript-eslint/type-utils@8.23.0': 369 | resolution: {integrity: sha512-iIuLdYpQWZKbiH+RkCGc6iu+VwscP5rCtQ1lyQ7TYuKLrcZoeJVpcLiG8DliXVkUxirW/PWlmS+d6yD51L9jvA==} 370 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 371 | peerDependencies: 372 | eslint: ^8.57.0 || ^9.0.0 373 | typescript: '>=4.8.4 <5.8.0' 374 | 375 | '@typescript-eslint/types@8.23.0': 376 | resolution: {integrity: sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ==} 377 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 378 | 379 | '@typescript-eslint/typescript-estree@8.23.0': 380 | resolution: {integrity: sha512-LcqzfipsB8RTvH8FX24W4UUFk1bl+0yTOf9ZA08XngFwMg4Kj8A+9hwz8Cr/ZS4KwHrmo9PJiLZkOt49vPnuvQ==} 381 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 382 | peerDependencies: 383 | typescript: '>=4.8.4 <5.8.0' 384 | 385 | '@typescript-eslint/utils@8.23.0': 386 | resolution: {integrity: sha512-uB/+PSo6Exu02b5ZEiVtmY6RVYO7YU5xqgzTIVZwTHvvK3HsL8tZZHFaTLFtRG3CsV4A5mhOv+NZx5BlhXPyIA==} 387 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 388 | peerDependencies: 389 | eslint: ^8.57.0 || ^9.0.0 390 | typescript: '>=4.8.4 <5.8.0' 391 | 392 | '@typescript-eslint/visitor-keys@8.23.0': 393 | resolution: {integrity: sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ==} 394 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 395 | 396 | acorn-jsx@5.3.2: 397 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 398 | peerDependencies: 399 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 400 | 401 | acorn@8.14.0: 402 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 403 | engines: {node: '>=0.4.0'} 404 | hasBin: true 405 | 406 | ajv@6.12.6: 407 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 408 | 409 | ansi-regex@5.0.1: 410 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 411 | engines: {node: '>=8'} 412 | 413 | ansi-regex@6.1.0: 414 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 415 | engines: {node: '>=12'} 416 | 417 | ansi-styles@4.3.0: 418 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 419 | engines: {node: '>=8'} 420 | 421 | ansi-styles@6.2.1: 422 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 423 | engines: {node: '>=12'} 424 | 425 | any-promise@1.3.0: 426 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 427 | 428 | anymatch@3.1.3: 429 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 430 | engines: {node: '>= 8'} 431 | 432 | arg@5.0.2: 433 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 434 | 435 | argparse@2.0.1: 436 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 437 | 438 | aria-query@5.3.2: 439 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 440 | engines: {node: '>= 0.4'} 441 | 442 | array-buffer-byte-length@1.0.2: 443 | resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} 444 | engines: {node: '>= 0.4'} 445 | 446 | array-includes@3.1.8: 447 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} 448 | engines: {node: '>= 0.4'} 449 | 450 | array.prototype.findlast@1.2.5: 451 | resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} 452 | engines: {node: '>= 0.4'} 453 | 454 | array.prototype.findlastindex@1.2.5: 455 | resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} 456 | engines: {node: '>= 0.4'} 457 | 458 | array.prototype.flat@1.3.3: 459 | resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} 460 | engines: {node: '>= 0.4'} 461 | 462 | array.prototype.flatmap@1.3.3: 463 | resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} 464 | engines: {node: '>= 0.4'} 465 | 466 | array.prototype.tosorted@1.1.4: 467 | resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} 468 | engines: {node: '>= 0.4'} 469 | 470 | arraybuffer.prototype.slice@1.0.4: 471 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} 472 | engines: {node: '>= 0.4'} 473 | 474 | ast-types-flow@0.0.8: 475 | resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} 476 | 477 | async-function@1.0.0: 478 | resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} 479 | engines: {node: '>= 0.4'} 480 | 481 | available-typed-arrays@1.0.7: 482 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 483 | engines: {node: '>= 0.4'} 484 | 485 | axe-core@4.10.2: 486 | resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} 487 | engines: {node: '>=4'} 488 | 489 | axobject-query@4.1.0: 490 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 491 | engines: {node: '>= 0.4'} 492 | 493 | balanced-match@1.0.2: 494 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 495 | 496 | binary-extensions@2.3.0: 497 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 498 | engines: {node: '>=8'} 499 | 500 | brace-expansion@1.1.11: 501 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 502 | 503 | brace-expansion@2.0.1: 504 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 505 | 506 | braces@3.0.3: 507 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 508 | engines: {node: '>=8'} 509 | 510 | busboy@1.6.0: 511 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 512 | engines: {node: '>=10.16.0'} 513 | 514 | call-bind-apply-helpers@1.0.1: 515 | resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} 516 | engines: {node: '>= 0.4'} 517 | 518 | call-bind@1.0.8: 519 | resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} 520 | engines: {node: '>= 0.4'} 521 | 522 | call-bound@1.0.3: 523 | resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} 524 | engines: {node: '>= 0.4'} 525 | 526 | callsites@3.1.0: 527 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 528 | engines: {node: '>=6'} 529 | 530 | camelcase-css@2.0.1: 531 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 532 | engines: {node: '>= 6'} 533 | 534 | caniuse-lite@1.0.30001699: 535 | resolution: {integrity: sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==} 536 | 537 | chalk@4.1.2: 538 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 539 | engines: {node: '>=10'} 540 | 541 | chokidar@3.6.0: 542 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 543 | engines: {node: '>= 8.10.0'} 544 | 545 | client-only@0.0.1: 546 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 547 | 548 | color-convert@2.0.1: 549 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 550 | engines: {node: '>=7.0.0'} 551 | 552 | color-name@1.1.4: 553 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 554 | 555 | color-string@1.9.1: 556 | resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 557 | 558 | color@4.2.3: 559 | resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} 560 | engines: {node: '>=12.5.0'} 561 | 562 | commander@4.1.1: 563 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 564 | engines: {node: '>= 6'} 565 | 566 | concat-map@0.0.1: 567 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 568 | 569 | cross-spawn@7.0.6: 570 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 571 | engines: {node: '>= 8'} 572 | 573 | cssesc@3.0.0: 574 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 575 | engines: {node: '>=4'} 576 | hasBin: true 577 | 578 | csstype@3.1.3: 579 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 580 | 581 | damerau-levenshtein@1.0.8: 582 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} 583 | 584 | data-view-buffer@1.0.2: 585 | resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} 586 | engines: {node: '>= 0.4'} 587 | 588 | data-view-byte-length@1.0.2: 589 | resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} 590 | engines: {node: '>= 0.4'} 591 | 592 | data-view-byte-offset@1.0.1: 593 | resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} 594 | engines: {node: '>= 0.4'} 595 | 596 | debug@3.2.7: 597 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 598 | peerDependencies: 599 | supports-color: '*' 600 | peerDependenciesMeta: 601 | supports-color: 602 | optional: true 603 | 604 | debug@4.4.0: 605 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 606 | engines: {node: '>=6.0'} 607 | peerDependencies: 608 | supports-color: '*' 609 | peerDependenciesMeta: 610 | supports-color: 611 | optional: true 612 | 613 | deep-is@0.1.4: 614 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 615 | 616 | define-data-property@1.1.4: 617 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 618 | engines: {node: '>= 0.4'} 619 | 620 | define-properties@1.2.1: 621 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 622 | engines: {node: '>= 0.4'} 623 | 624 | detect-libc@2.0.3: 625 | resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} 626 | engines: {node: '>=8'} 627 | 628 | didyoumean@1.2.2: 629 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 630 | 631 | dlv@1.1.3: 632 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 633 | 634 | doctrine@2.1.0: 635 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 636 | engines: {node: '>=0.10.0'} 637 | 638 | dunder-proto@1.0.1: 639 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 640 | engines: {node: '>= 0.4'} 641 | 642 | eastasianwidth@0.2.0: 643 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 644 | 645 | emoji-regex@8.0.0: 646 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 647 | 648 | emoji-regex@9.2.2: 649 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 650 | 651 | enhanced-resolve@5.18.1: 652 | resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} 653 | engines: {node: '>=10.13.0'} 654 | 655 | es-abstract@1.23.9: 656 | resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} 657 | engines: {node: '>= 0.4'} 658 | 659 | es-define-property@1.0.1: 660 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 661 | engines: {node: '>= 0.4'} 662 | 663 | es-errors@1.3.0: 664 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 665 | engines: {node: '>= 0.4'} 666 | 667 | es-iterator-helpers@1.2.1: 668 | resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} 669 | engines: {node: '>= 0.4'} 670 | 671 | es-object-atoms@1.1.1: 672 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 673 | engines: {node: '>= 0.4'} 674 | 675 | es-set-tostringtag@2.1.0: 676 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 677 | engines: {node: '>= 0.4'} 678 | 679 | es-shim-unscopables@1.0.2: 680 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 681 | 682 | es-to-primitive@1.3.0: 683 | resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} 684 | engines: {node: '>= 0.4'} 685 | 686 | escape-string-regexp@4.0.0: 687 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 688 | engines: {node: '>=10'} 689 | 690 | eslint-config-next@15.1.6: 691 | resolution: {integrity: sha512-Wd1uy6y7nBbXUSg9QAuQ+xYEKli5CgUhLjz1QHW11jLDis5vK5XB3PemL6jEmy7HrdhaRFDz+GTZ/3FoH+EUjg==} 692 | peerDependencies: 693 | eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 694 | typescript: '>=3.3.1' 695 | peerDependenciesMeta: 696 | typescript: 697 | optional: true 698 | 699 | eslint-import-resolver-node@0.3.9: 700 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 701 | 702 | eslint-import-resolver-typescript@3.7.0: 703 | resolution: {integrity: sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==} 704 | engines: {node: ^14.18.0 || >=16.0.0} 705 | peerDependencies: 706 | eslint: '*' 707 | eslint-plugin-import: '*' 708 | eslint-plugin-import-x: '*' 709 | peerDependenciesMeta: 710 | eslint-plugin-import: 711 | optional: true 712 | eslint-plugin-import-x: 713 | optional: true 714 | 715 | eslint-module-utils@2.12.0: 716 | resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} 717 | engines: {node: '>=4'} 718 | peerDependencies: 719 | '@typescript-eslint/parser': '*' 720 | eslint: '*' 721 | eslint-import-resolver-node: '*' 722 | eslint-import-resolver-typescript: '*' 723 | eslint-import-resolver-webpack: '*' 724 | peerDependenciesMeta: 725 | '@typescript-eslint/parser': 726 | optional: true 727 | eslint: 728 | optional: true 729 | eslint-import-resolver-node: 730 | optional: true 731 | eslint-import-resolver-typescript: 732 | optional: true 733 | eslint-import-resolver-webpack: 734 | optional: true 735 | 736 | eslint-plugin-import@2.31.0: 737 | resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} 738 | engines: {node: '>=4'} 739 | peerDependencies: 740 | '@typescript-eslint/parser': '*' 741 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 742 | peerDependenciesMeta: 743 | '@typescript-eslint/parser': 744 | optional: true 745 | 746 | eslint-plugin-jsx-a11y@6.10.2: 747 | resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} 748 | engines: {node: '>=4.0'} 749 | peerDependencies: 750 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 751 | 752 | eslint-plugin-react-hooks@5.1.0: 753 | resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} 754 | engines: {node: '>=10'} 755 | peerDependencies: 756 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 757 | 758 | eslint-plugin-react@7.37.4: 759 | resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} 760 | engines: {node: '>=4'} 761 | peerDependencies: 762 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 763 | 764 | eslint-scope@8.2.0: 765 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} 766 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 767 | 768 | eslint-visitor-keys@3.4.3: 769 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 770 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 771 | 772 | eslint-visitor-keys@4.2.0: 773 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 774 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 775 | 776 | eslint@9.20.0: 777 | resolution: {integrity: sha512-aL4F8167Hg4IvsW89ejnpTwx+B/UQRzJPGgbIOl+4XqffWsahVVsLEWoZvnrVuwpWmnRd7XeXmQI1zlKcFDteA==} 778 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 779 | hasBin: true 780 | peerDependencies: 781 | jiti: '*' 782 | peerDependenciesMeta: 783 | jiti: 784 | optional: true 785 | 786 | espree@10.3.0: 787 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 788 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 789 | 790 | esquery@1.6.0: 791 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 792 | engines: {node: '>=0.10'} 793 | 794 | esrecurse@4.3.0: 795 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 796 | engines: {node: '>=4.0'} 797 | 798 | estraverse@5.3.0: 799 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 800 | engines: {node: '>=4.0'} 801 | 802 | esutils@2.0.3: 803 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 804 | engines: {node: '>=0.10.0'} 805 | 806 | fast-deep-equal@3.1.3: 807 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 808 | 809 | fast-glob@3.3.1: 810 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 811 | engines: {node: '>=8.6.0'} 812 | 813 | fast-glob@3.3.3: 814 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 815 | engines: {node: '>=8.6.0'} 816 | 817 | fast-json-stable-stringify@2.1.0: 818 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 819 | 820 | fast-levenshtein@2.0.6: 821 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 822 | 823 | fastq@1.19.0: 824 | resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} 825 | 826 | file-entry-cache@8.0.0: 827 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 828 | engines: {node: '>=16.0.0'} 829 | 830 | fill-range@7.1.1: 831 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 832 | engines: {node: '>=8'} 833 | 834 | find-up@5.0.0: 835 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 836 | engines: {node: '>=10'} 837 | 838 | flat-cache@4.0.1: 839 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 840 | engines: {node: '>=16'} 841 | 842 | flatted@3.3.2: 843 | resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} 844 | 845 | for-each@0.3.4: 846 | resolution: {integrity: sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==} 847 | engines: {node: '>= 0.4'} 848 | 849 | foreground-child@3.3.0: 850 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 851 | engines: {node: '>=14'} 852 | 853 | fsevents@2.3.3: 854 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 855 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 856 | os: [darwin] 857 | 858 | function-bind@1.1.2: 859 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 860 | 861 | function.prototype.name@1.1.8: 862 | resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} 863 | engines: {node: '>= 0.4'} 864 | 865 | functions-have-names@1.2.3: 866 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 867 | 868 | get-intrinsic@1.2.7: 869 | resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} 870 | engines: {node: '>= 0.4'} 871 | 872 | get-proto@1.0.1: 873 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 874 | engines: {node: '>= 0.4'} 875 | 876 | get-symbol-description@1.1.0: 877 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} 878 | engines: {node: '>= 0.4'} 879 | 880 | get-tsconfig@4.10.0: 881 | resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} 882 | 883 | glob-parent@5.1.2: 884 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 885 | engines: {node: '>= 6'} 886 | 887 | glob-parent@6.0.2: 888 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 889 | engines: {node: '>=10.13.0'} 890 | 891 | glob@10.4.5: 892 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 893 | hasBin: true 894 | 895 | globals@14.0.0: 896 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 897 | engines: {node: '>=18'} 898 | 899 | globalthis@1.0.4: 900 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 901 | engines: {node: '>= 0.4'} 902 | 903 | gopd@1.2.0: 904 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 905 | engines: {node: '>= 0.4'} 906 | 907 | graceful-fs@4.2.11: 908 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 909 | 910 | graphemer@1.4.0: 911 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 912 | 913 | has-bigints@1.1.0: 914 | resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} 915 | engines: {node: '>= 0.4'} 916 | 917 | has-flag@4.0.0: 918 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 919 | engines: {node: '>=8'} 920 | 921 | has-property-descriptors@1.0.2: 922 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 923 | 924 | has-proto@1.2.0: 925 | resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} 926 | engines: {node: '>= 0.4'} 927 | 928 | has-symbols@1.1.0: 929 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 930 | engines: {node: '>= 0.4'} 931 | 932 | has-tostringtag@1.0.2: 933 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 934 | engines: {node: '>= 0.4'} 935 | 936 | hasown@2.0.2: 937 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 938 | engines: {node: '>= 0.4'} 939 | 940 | ignore@5.3.2: 941 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 942 | engines: {node: '>= 4'} 943 | 944 | import-fresh@3.3.1: 945 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 946 | engines: {node: '>=6'} 947 | 948 | imurmurhash@0.1.4: 949 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 950 | engines: {node: '>=0.8.19'} 951 | 952 | internal-slot@1.1.0: 953 | resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} 954 | engines: {node: '>= 0.4'} 955 | 956 | is-array-buffer@3.0.5: 957 | resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} 958 | engines: {node: '>= 0.4'} 959 | 960 | is-arrayish@0.3.2: 961 | resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} 962 | 963 | is-async-function@2.1.1: 964 | resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} 965 | engines: {node: '>= 0.4'} 966 | 967 | is-bigint@1.1.0: 968 | resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} 969 | engines: {node: '>= 0.4'} 970 | 971 | is-binary-path@2.1.0: 972 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 973 | engines: {node: '>=8'} 974 | 975 | is-boolean-object@1.2.2: 976 | resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} 977 | engines: {node: '>= 0.4'} 978 | 979 | is-bun-module@1.3.0: 980 | resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} 981 | 982 | is-callable@1.2.7: 983 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 984 | engines: {node: '>= 0.4'} 985 | 986 | is-core-module@2.16.1: 987 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 988 | engines: {node: '>= 0.4'} 989 | 990 | is-data-view@1.0.2: 991 | resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} 992 | engines: {node: '>= 0.4'} 993 | 994 | is-date-object@1.1.0: 995 | resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} 996 | engines: {node: '>= 0.4'} 997 | 998 | is-extglob@2.1.1: 999 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1000 | engines: {node: '>=0.10.0'} 1001 | 1002 | is-finalizationregistry@1.1.1: 1003 | resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} 1004 | engines: {node: '>= 0.4'} 1005 | 1006 | is-fullwidth-code-point@3.0.0: 1007 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1008 | engines: {node: '>=8'} 1009 | 1010 | is-generator-function@1.1.0: 1011 | resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} 1012 | engines: {node: '>= 0.4'} 1013 | 1014 | is-glob@4.0.3: 1015 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1016 | engines: {node: '>=0.10.0'} 1017 | 1018 | is-map@2.0.3: 1019 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 1020 | engines: {node: '>= 0.4'} 1021 | 1022 | is-number-object@1.1.1: 1023 | resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} 1024 | engines: {node: '>= 0.4'} 1025 | 1026 | is-number@7.0.0: 1027 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1028 | engines: {node: '>=0.12.0'} 1029 | 1030 | is-regex@1.2.1: 1031 | resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} 1032 | engines: {node: '>= 0.4'} 1033 | 1034 | is-set@2.0.3: 1035 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 1036 | engines: {node: '>= 0.4'} 1037 | 1038 | is-shared-array-buffer@1.0.4: 1039 | resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} 1040 | engines: {node: '>= 0.4'} 1041 | 1042 | is-string@1.1.1: 1043 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} 1044 | engines: {node: '>= 0.4'} 1045 | 1046 | is-symbol@1.1.1: 1047 | resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} 1048 | engines: {node: '>= 0.4'} 1049 | 1050 | is-typed-array@1.1.15: 1051 | resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} 1052 | engines: {node: '>= 0.4'} 1053 | 1054 | is-weakmap@2.0.2: 1055 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 1056 | engines: {node: '>= 0.4'} 1057 | 1058 | is-weakref@1.1.1: 1059 | resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} 1060 | engines: {node: '>= 0.4'} 1061 | 1062 | is-weakset@2.0.4: 1063 | resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} 1064 | engines: {node: '>= 0.4'} 1065 | 1066 | isarray@2.0.5: 1067 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1068 | 1069 | isexe@2.0.0: 1070 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1071 | 1072 | iterator.prototype@1.1.5: 1073 | resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} 1074 | engines: {node: '>= 0.4'} 1075 | 1076 | jackspeak@3.4.3: 1077 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1078 | 1079 | jiti@1.21.7: 1080 | resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} 1081 | hasBin: true 1082 | 1083 | js-tokens@4.0.0: 1084 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1085 | 1086 | js-yaml@4.1.0: 1087 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1088 | hasBin: true 1089 | 1090 | json-buffer@3.0.1: 1091 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1092 | 1093 | json-schema-traverse@0.4.1: 1094 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1095 | 1096 | json-stable-stringify-without-jsonify@1.0.1: 1097 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1098 | 1099 | json5@1.0.2: 1100 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 1101 | hasBin: true 1102 | 1103 | jsx-ast-utils@3.3.5: 1104 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} 1105 | engines: {node: '>=4.0'} 1106 | 1107 | keyv@4.5.4: 1108 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1109 | 1110 | language-subtag-registry@0.3.23: 1111 | resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} 1112 | 1113 | language-tags@1.0.9: 1114 | resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} 1115 | engines: {node: '>=0.10'} 1116 | 1117 | levn@0.4.1: 1118 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1119 | engines: {node: '>= 0.8.0'} 1120 | 1121 | lilconfig@3.1.3: 1122 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 1123 | engines: {node: '>=14'} 1124 | 1125 | lines-and-columns@1.2.4: 1126 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1127 | 1128 | locate-path@6.0.0: 1129 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1130 | engines: {node: '>=10'} 1131 | 1132 | lodash.merge@4.6.2: 1133 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1134 | 1135 | loose-envify@1.4.0: 1136 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1137 | hasBin: true 1138 | 1139 | lru-cache@10.4.3: 1140 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1141 | 1142 | math-intrinsics@1.1.0: 1143 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1144 | engines: {node: '>= 0.4'} 1145 | 1146 | merge2@1.4.1: 1147 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1148 | engines: {node: '>= 8'} 1149 | 1150 | micromatch@4.0.8: 1151 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1152 | engines: {node: '>=8.6'} 1153 | 1154 | minimatch@3.1.2: 1155 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1156 | 1157 | minimatch@9.0.5: 1158 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1159 | engines: {node: '>=16 || 14 >=14.17'} 1160 | 1161 | minimist@1.2.8: 1162 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1163 | 1164 | minipass@7.1.2: 1165 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1166 | engines: {node: '>=16 || 14 >=14.17'} 1167 | 1168 | ms@2.1.3: 1169 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1170 | 1171 | mz@2.7.0: 1172 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1173 | 1174 | nanoid@3.3.8: 1175 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 1176 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1177 | hasBin: true 1178 | 1179 | natural-compare@1.4.0: 1180 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1181 | 1182 | next@15.1.6: 1183 | resolution: {integrity: sha512-Hch4wzbaX0vKQtalpXvUiw5sYivBy4cm5rzUKrBnUB/y436LGrvOUqYvlSeNVCWFO/770gDlltR9gqZH62ct4Q==} 1184 | engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} 1185 | hasBin: true 1186 | peerDependencies: 1187 | '@opentelemetry/api': ^1.1.0 1188 | '@playwright/test': ^1.41.2 1189 | babel-plugin-react-compiler: '*' 1190 | react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 1191 | react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 1192 | sass: ^1.3.0 1193 | peerDependenciesMeta: 1194 | '@opentelemetry/api': 1195 | optional: true 1196 | '@playwright/test': 1197 | optional: true 1198 | babel-plugin-react-compiler: 1199 | optional: true 1200 | sass: 1201 | optional: true 1202 | 1203 | normalize-path@3.0.0: 1204 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1205 | engines: {node: '>=0.10.0'} 1206 | 1207 | object-assign@4.1.1: 1208 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1209 | engines: {node: '>=0.10.0'} 1210 | 1211 | object-hash@3.0.0: 1212 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1213 | engines: {node: '>= 6'} 1214 | 1215 | object-inspect@1.13.4: 1216 | resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 1217 | engines: {node: '>= 0.4'} 1218 | 1219 | object-keys@1.1.1: 1220 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1221 | engines: {node: '>= 0.4'} 1222 | 1223 | object.assign@4.1.7: 1224 | resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} 1225 | engines: {node: '>= 0.4'} 1226 | 1227 | object.entries@1.1.8: 1228 | resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} 1229 | engines: {node: '>= 0.4'} 1230 | 1231 | object.fromentries@2.0.8: 1232 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 1233 | engines: {node: '>= 0.4'} 1234 | 1235 | object.groupby@1.0.3: 1236 | resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} 1237 | engines: {node: '>= 0.4'} 1238 | 1239 | object.values@1.2.1: 1240 | resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} 1241 | engines: {node: '>= 0.4'} 1242 | 1243 | optionator@0.9.4: 1244 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1245 | engines: {node: '>= 0.8.0'} 1246 | 1247 | own-keys@1.0.1: 1248 | resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} 1249 | engines: {node: '>= 0.4'} 1250 | 1251 | p-limit@3.1.0: 1252 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1253 | engines: {node: '>=10'} 1254 | 1255 | p-locate@5.0.0: 1256 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1257 | engines: {node: '>=10'} 1258 | 1259 | package-json-from-dist@1.0.1: 1260 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1261 | 1262 | parent-module@1.0.1: 1263 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1264 | engines: {node: '>=6'} 1265 | 1266 | path-exists@4.0.0: 1267 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1268 | engines: {node: '>=8'} 1269 | 1270 | path-key@3.1.1: 1271 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1272 | engines: {node: '>=8'} 1273 | 1274 | path-parse@1.0.7: 1275 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1276 | 1277 | path-scurry@1.11.1: 1278 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1279 | engines: {node: '>=16 || 14 >=14.18'} 1280 | 1281 | picocolors@1.1.1: 1282 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1283 | 1284 | picomatch@2.3.1: 1285 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1286 | engines: {node: '>=8.6'} 1287 | 1288 | pify@2.3.0: 1289 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1290 | engines: {node: '>=0.10.0'} 1291 | 1292 | pirates@4.0.6: 1293 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1294 | engines: {node: '>= 6'} 1295 | 1296 | possible-typed-array-names@1.1.0: 1297 | resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} 1298 | engines: {node: '>= 0.4'} 1299 | 1300 | postcss-import@15.1.0: 1301 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 1302 | engines: {node: '>=14.0.0'} 1303 | peerDependencies: 1304 | postcss: ^8.0.0 1305 | 1306 | postcss-js@4.0.1: 1307 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 1308 | engines: {node: ^12 || ^14 || >= 16} 1309 | peerDependencies: 1310 | postcss: ^8.4.21 1311 | 1312 | postcss-load-config@4.0.2: 1313 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 1314 | engines: {node: '>= 14'} 1315 | peerDependencies: 1316 | postcss: '>=8.0.9' 1317 | ts-node: '>=9.0.0' 1318 | peerDependenciesMeta: 1319 | postcss: 1320 | optional: true 1321 | ts-node: 1322 | optional: true 1323 | 1324 | postcss-nested@6.2.0: 1325 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} 1326 | engines: {node: '>=12.0'} 1327 | peerDependencies: 1328 | postcss: ^8.2.14 1329 | 1330 | postcss-selector-parser@6.1.2: 1331 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} 1332 | engines: {node: '>=4'} 1333 | 1334 | postcss-value-parser@4.2.0: 1335 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1336 | 1337 | postcss@8.4.31: 1338 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 1339 | engines: {node: ^10 || ^12 || >=14} 1340 | 1341 | postcss@8.5.1: 1342 | resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} 1343 | engines: {node: ^10 || ^12 || >=14} 1344 | 1345 | prelude-ls@1.2.1: 1346 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1347 | engines: {node: '>= 0.8.0'} 1348 | 1349 | prop-types@15.8.1: 1350 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1351 | 1352 | punycode@2.3.1: 1353 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1354 | engines: {node: '>=6'} 1355 | 1356 | queue-microtask@1.2.3: 1357 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1358 | 1359 | react-dom@19.0.0: 1360 | resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} 1361 | peerDependencies: 1362 | react: ^19.0.0 1363 | 1364 | react-is@16.13.1: 1365 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1366 | 1367 | react@19.0.0: 1368 | resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} 1369 | engines: {node: '>=0.10.0'} 1370 | 1371 | read-cache@1.0.0: 1372 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 1373 | 1374 | readdirp@3.6.0: 1375 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1376 | engines: {node: '>=8.10.0'} 1377 | 1378 | reflect.getprototypeof@1.0.10: 1379 | resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} 1380 | engines: {node: '>= 0.4'} 1381 | 1382 | regexp.prototype.flags@1.5.4: 1383 | resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} 1384 | engines: {node: '>= 0.4'} 1385 | 1386 | resolve-from@4.0.0: 1387 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1388 | engines: {node: '>=4'} 1389 | 1390 | resolve-pkg-maps@1.0.0: 1391 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1392 | 1393 | resolve@1.22.10: 1394 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1395 | engines: {node: '>= 0.4'} 1396 | hasBin: true 1397 | 1398 | resolve@2.0.0-next.5: 1399 | resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} 1400 | hasBin: true 1401 | 1402 | reusify@1.0.4: 1403 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1404 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1405 | 1406 | run-parallel@1.2.0: 1407 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1408 | 1409 | safe-array-concat@1.1.3: 1410 | resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} 1411 | engines: {node: '>=0.4'} 1412 | 1413 | safe-push-apply@1.0.0: 1414 | resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} 1415 | engines: {node: '>= 0.4'} 1416 | 1417 | safe-regex-test@1.1.0: 1418 | resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} 1419 | engines: {node: '>= 0.4'} 1420 | 1421 | scheduler@0.25.0: 1422 | resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} 1423 | 1424 | semver@6.3.1: 1425 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1426 | hasBin: true 1427 | 1428 | semver@7.7.1: 1429 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1430 | engines: {node: '>=10'} 1431 | hasBin: true 1432 | 1433 | set-function-length@1.2.2: 1434 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1435 | engines: {node: '>= 0.4'} 1436 | 1437 | set-function-name@2.0.2: 1438 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1439 | engines: {node: '>= 0.4'} 1440 | 1441 | set-proto@1.0.0: 1442 | resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} 1443 | engines: {node: '>= 0.4'} 1444 | 1445 | sharp@0.33.5: 1446 | resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} 1447 | engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1448 | 1449 | shebang-command@2.0.0: 1450 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1451 | engines: {node: '>=8'} 1452 | 1453 | shebang-regex@3.0.0: 1454 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1455 | engines: {node: '>=8'} 1456 | 1457 | side-channel-list@1.0.0: 1458 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 1459 | engines: {node: '>= 0.4'} 1460 | 1461 | side-channel-map@1.0.1: 1462 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 1463 | engines: {node: '>= 0.4'} 1464 | 1465 | side-channel-weakmap@1.0.2: 1466 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 1467 | engines: {node: '>= 0.4'} 1468 | 1469 | side-channel@1.1.0: 1470 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 1471 | engines: {node: '>= 0.4'} 1472 | 1473 | signal-exit@4.1.0: 1474 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1475 | engines: {node: '>=14'} 1476 | 1477 | simple-swizzle@0.2.2: 1478 | resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} 1479 | 1480 | source-map-js@1.2.1: 1481 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1482 | engines: {node: '>=0.10.0'} 1483 | 1484 | stable-hash@0.0.4: 1485 | resolution: {integrity: sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==} 1486 | 1487 | streamsearch@1.1.0: 1488 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 1489 | engines: {node: '>=10.0.0'} 1490 | 1491 | string-width@4.2.3: 1492 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1493 | engines: {node: '>=8'} 1494 | 1495 | string-width@5.1.2: 1496 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1497 | engines: {node: '>=12'} 1498 | 1499 | string.prototype.includes@2.0.1: 1500 | resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} 1501 | engines: {node: '>= 0.4'} 1502 | 1503 | string.prototype.matchall@4.0.12: 1504 | resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} 1505 | engines: {node: '>= 0.4'} 1506 | 1507 | string.prototype.repeat@1.0.0: 1508 | resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} 1509 | 1510 | string.prototype.trim@1.2.10: 1511 | resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} 1512 | engines: {node: '>= 0.4'} 1513 | 1514 | string.prototype.trimend@1.0.9: 1515 | resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} 1516 | engines: {node: '>= 0.4'} 1517 | 1518 | string.prototype.trimstart@1.0.8: 1519 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1520 | engines: {node: '>= 0.4'} 1521 | 1522 | strip-ansi@6.0.1: 1523 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1524 | engines: {node: '>=8'} 1525 | 1526 | strip-ansi@7.1.0: 1527 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1528 | engines: {node: '>=12'} 1529 | 1530 | strip-bom@3.0.0: 1531 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1532 | engines: {node: '>=4'} 1533 | 1534 | strip-json-comments@3.1.1: 1535 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1536 | engines: {node: '>=8'} 1537 | 1538 | styled-jsx@5.1.6: 1539 | resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} 1540 | engines: {node: '>= 12.0.0'} 1541 | peerDependencies: 1542 | '@babel/core': '*' 1543 | babel-plugin-macros: '*' 1544 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' 1545 | peerDependenciesMeta: 1546 | '@babel/core': 1547 | optional: true 1548 | babel-plugin-macros: 1549 | optional: true 1550 | 1551 | sucrase@3.35.0: 1552 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1553 | engines: {node: '>=16 || 14 >=14.17'} 1554 | hasBin: true 1555 | 1556 | supports-color@7.2.0: 1557 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1558 | engines: {node: '>=8'} 1559 | 1560 | supports-preserve-symlinks-flag@1.0.0: 1561 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1562 | engines: {node: '>= 0.4'} 1563 | 1564 | tailwindcss@3.4.17: 1565 | resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} 1566 | engines: {node: '>=14.0.0'} 1567 | hasBin: true 1568 | 1569 | tapable@2.2.1: 1570 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 1571 | engines: {node: '>=6'} 1572 | 1573 | thenify-all@1.6.0: 1574 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1575 | engines: {node: '>=0.8'} 1576 | 1577 | thenify@3.3.1: 1578 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1579 | 1580 | to-regex-range@5.0.1: 1581 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1582 | engines: {node: '>=8.0'} 1583 | 1584 | ts-api-utils@2.0.1: 1585 | resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} 1586 | engines: {node: '>=18.12'} 1587 | peerDependencies: 1588 | typescript: '>=4.8.4' 1589 | 1590 | ts-interface-checker@0.1.13: 1591 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1592 | 1593 | tsconfig-paths@3.15.0: 1594 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} 1595 | 1596 | tslib@2.8.1: 1597 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1598 | 1599 | type-check@0.4.0: 1600 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1601 | engines: {node: '>= 0.8.0'} 1602 | 1603 | typed-array-buffer@1.0.3: 1604 | resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} 1605 | engines: {node: '>= 0.4'} 1606 | 1607 | typed-array-byte-length@1.0.3: 1608 | resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} 1609 | engines: {node: '>= 0.4'} 1610 | 1611 | typed-array-byte-offset@1.0.4: 1612 | resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} 1613 | engines: {node: '>= 0.4'} 1614 | 1615 | typed-array-length@1.0.7: 1616 | resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} 1617 | engines: {node: '>= 0.4'} 1618 | 1619 | typescript@5.7.3: 1620 | resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} 1621 | engines: {node: '>=14.17'} 1622 | hasBin: true 1623 | 1624 | unbox-primitive@1.1.0: 1625 | resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} 1626 | engines: {node: '>= 0.4'} 1627 | 1628 | undici-types@6.19.8: 1629 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 1630 | 1631 | uri-js@4.4.1: 1632 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1633 | 1634 | util-deprecate@1.0.2: 1635 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1636 | 1637 | which-boxed-primitive@1.1.1: 1638 | resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} 1639 | engines: {node: '>= 0.4'} 1640 | 1641 | which-builtin-type@1.2.1: 1642 | resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} 1643 | engines: {node: '>= 0.4'} 1644 | 1645 | which-collection@1.0.2: 1646 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 1647 | engines: {node: '>= 0.4'} 1648 | 1649 | which-typed-array@1.1.18: 1650 | resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} 1651 | engines: {node: '>= 0.4'} 1652 | 1653 | which@2.0.2: 1654 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1655 | engines: {node: '>= 8'} 1656 | hasBin: true 1657 | 1658 | word-wrap@1.2.5: 1659 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1660 | engines: {node: '>=0.10.0'} 1661 | 1662 | wrap-ansi@7.0.0: 1663 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1664 | engines: {node: '>=10'} 1665 | 1666 | wrap-ansi@8.1.0: 1667 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1668 | engines: {node: '>=12'} 1669 | 1670 | yaml@2.7.0: 1671 | resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} 1672 | engines: {node: '>= 14'} 1673 | hasBin: true 1674 | 1675 | yocto-queue@0.1.0: 1676 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1677 | engines: {node: '>=10'} 1678 | 1679 | snapshots: 1680 | 1681 | '@alloc/quick-lru@5.2.0': {} 1682 | 1683 | '@emnapi/runtime@1.3.1': 1684 | dependencies: 1685 | tslib: 2.8.1 1686 | optional: true 1687 | 1688 | '@eslint-community/eslint-utils@4.4.1(eslint@9.20.0(jiti@1.21.7))': 1689 | dependencies: 1690 | eslint: 9.20.0(jiti@1.21.7) 1691 | eslint-visitor-keys: 3.4.3 1692 | 1693 | '@eslint-community/regexpp@4.12.1': {} 1694 | 1695 | '@eslint/config-array@0.19.2': 1696 | dependencies: 1697 | '@eslint/object-schema': 2.1.6 1698 | debug: 4.4.0 1699 | minimatch: 3.1.2 1700 | transitivePeerDependencies: 1701 | - supports-color 1702 | 1703 | '@eslint/core@0.10.0': 1704 | dependencies: 1705 | '@types/json-schema': 7.0.15 1706 | 1707 | '@eslint/core@0.11.0': 1708 | dependencies: 1709 | '@types/json-schema': 7.0.15 1710 | 1711 | '@eslint/eslintrc@3.2.0': 1712 | dependencies: 1713 | ajv: 6.12.6 1714 | debug: 4.4.0 1715 | espree: 10.3.0 1716 | globals: 14.0.0 1717 | ignore: 5.3.2 1718 | import-fresh: 3.3.1 1719 | js-yaml: 4.1.0 1720 | minimatch: 3.1.2 1721 | strip-json-comments: 3.1.1 1722 | transitivePeerDependencies: 1723 | - supports-color 1724 | 1725 | '@eslint/js@9.20.0': {} 1726 | 1727 | '@eslint/object-schema@2.1.6': {} 1728 | 1729 | '@eslint/plugin-kit@0.2.5': 1730 | dependencies: 1731 | '@eslint/core': 0.10.0 1732 | levn: 0.4.1 1733 | 1734 | '@humanfs/core@0.19.1': {} 1735 | 1736 | '@humanfs/node@0.16.6': 1737 | dependencies: 1738 | '@humanfs/core': 0.19.1 1739 | '@humanwhocodes/retry': 0.3.1 1740 | 1741 | '@humanwhocodes/module-importer@1.0.1': {} 1742 | 1743 | '@humanwhocodes/retry@0.3.1': {} 1744 | 1745 | '@humanwhocodes/retry@0.4.1': {} 1746 | 1747 | '@img/sharp-darwin-arm64@0.33.5': 1748 | optionalDependencies: 1749 | '@img/sharp-libvips-darwin-arm64': 1.0.4 1750 | optional: true 1751 | 1752 | '@img/sharp-darwin-x64@0.33.5': 1753 | optionalDependencies: 1754 | '@img/sharp-libvips-darwin-x64': 1.0.4 1755 | optional: true 1756 | 1757 | '@img/sharp-libvips-darwin-arm64@1.0.4': 1758 | optional: true 1759 | 1760 | '@img/sharp-libvips-darwin-x64@1.0.4': 1761 | optional: true 1762 | 1763 | '@img/sharp-libvips-linux-arm64@1.0.4': 1764 | optional: true 1765 | 1766 | '@img/sharp-libvips-linux-arm@1.0.5': 1767 | optional: true 1768 | 1769 | '@img/sharp-libvips-linux-s390x@1.0.4': 1770 | optional: true 1771 | 1772 | '@img/sharp-libvips-linux-x64@1.0.4': 1773 | optional: true 1774 | 1775 | '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 1776 | optional: true 1777 | 1778 | '@img/sharp-libvips-linuxmusl-x64@1.0.4': 1779 | optional: true 1780 | 1781 | '@img/sharp-linux-arm64@0.33.5': 1782 | optionalDependencies: 1783 | '@img/sharp-libvips-linux-arm64': 1.0.4 1784 | optional: true 1785 | 1786 | '@img/sharp-linux-arm@0.33.5': 1787 | optionalDependencies: 1788 | '@img/sharp-libvips-linux-arm': 1.0.5 1789 | optional: true 1790 | 1791 | '@img/sharp-linux-s390x@0.33.5': 1792 | optionalDependencies: 1793 | '@img/sharp-libvips-linux-s390x': 1.0.4 1794 | optional: true 1795 | 1796 | '@img/sharp-linux-x64@0.33.5': 1797 | optionalDependencies: 1798 | '@img/sharp-libvips-linux-x64': 1.0.4 1799 | optional: true 1800 | 1801 | '@img/sharp-linuxmusl-arm64@0.33.5': 1802 | optionalDependencies: 1803 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 1804 | optional: true 1805 | 1806 | '@img/sharp-linuxmusl-x64@0.33.5': 1807 | optionalDependencies: 1808 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4 1809 | optional: true 1810 | 1811 | '@img/sharp-wasm32@0.33.5': 1812 | dependencies: 1813 | '@emnapi/runtime': 1.3.1 1814 | optional: true 1815 | 1816 | '@img/sharp-win32-ia32@0.33.5': 1817 | optional: true 1818 | 1819 | '@img/sharp-win32-x64@0.33.5': 1820 | optional: true 1821 | 1822 | '@isaacs/cliui@8.0.2': 1823 | dependencies: 1824 | string-width: 5.1.2 1825 | string-width-cjs: string-width@4.2.3 1826 | strip-ansi: 7.1.0 1827 | strip-ansi-cjs: strip-ansi@6.0.1 1828 | wrap-ansi: 8.1.0 1829 | wrap-ansi-cjs: wrap-ansi@7.0.0 1830 | 1831 | '@jridgewell/gen-mapping@0.3.8': 1832 | dependencies: 1833 | '@jridgewell/set-array': 1.2.1 1834 | '@jridgewell/sourcemap-codec': 1.5.0 1835 | '@jridgewell/trace-mapping': 0.3.25 1836 | 1837 | '@jridgewell/resolve-uri@3.1.2': {} 1838 | 1839 | '@jridgewell/set-array@1.2.1': {} 1840 | 1841 | '@jridgewell/sourcemap-codec@1.5.0': {} 1842 | 1843 | '@jridgewell/trace-mapping@0.3.25': 1844 | dependencies: 1845 | '@jridgewell/resolve-uri': 3.1.2 1846 | '@jridgewell/sourcemap-codec': 1.5.0 1847 | 1848 | '@next/env@15.1.6': {} 1849 | 1850 | '@next/eslint-plugin-next@15.1.6': 1851 | dependencies: 1852 | fast-glob: 3.3.1 1853 | 1854 | '@next/swc-darwin-arm64@15.1.6': 1855 | optional: true 1856 | 1857 | '@next/swc-darwin-x64@15.1.6': 1858 | optional: true 1859 | 1860 | '@next/swc-linux-arm64-gnu@15.1.6': 1861 | optional: true 1862 | 1863 | '@next/swc-linux-arm64-musl@15.1.6': 1864 | optional: true 1865 | 1866 | '@next/swc-linux-x64-gnu@15.1.6': 1867 | optional: true 1868 | 1869 | '@next/swc-linux-x64-musl@15.1.6': 1870 | optional: true 1871 | 1872 | '@next/swc-win32-arm64-msvc@15.1.6': 1873 | optional: true 1874 | 1875 | '@next/swc-win32-x64-msvc@15.1.6': 1876 | optional: true 1877 | 1878 | '@nodelib/fs.scandir@2.1.5': 1879 | dependencies: 1880 | '@nodelib/fs.stat': 2.0.5 1881 | run-parallel: 1.2.0 1882 | 1883 | '@nodelib/fs.stat@2.0.5': {} 1884 | 1885 | '@nodelib/fs.walk@1.2.8': 1886 | dependencies: 1887 | '@nodelib/fs.scandir': 2.1.5 1888 | fastq: 1.19.0 1889 | 1890 | '@nolyfill/is-core-module@1.0.39': {} 1891 | 1892 | '@pkgjs/parseargs@0.11.0': 1893 | optional: true 1894 | 1895 | '@rtsao/scc@1.1.0': {} 1896 | 1897 | '@rushstack/eslint-patch@1.10.5': {} 1898 | 1899 | '@swc/counter@0.1.3': {} 1900 | 1901 | '@swc/helpers@0.5.15': 1902 | dependencies: 1903 | tslib: 2.8.1 1904 | 1905 | '@types/estree@1.0.6': {} 1906 | 1907 | '@types/json-schema@7.0.15': {} 1908 | 1909 | '@types/json5@0.0.29': {} 1910 | 1911 | '@types/node@20.17.17': 1912 | dependencies: 1913 | undici-types: 6.19.8 1914 | 1915 | '@types/react-dom@19.0.3(@types/react@19.0.8)': 1916 | dependencies: 1917 | '@types/react': 19.0.8 1918 | 1919 | '@types/react@19.0.8': 1920 | dependencies: 1921 | csstype: 3.1.3 1922 | 1923 | '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3)': 1924 | dependencies: 1925 | '@eslint-community/regexpp': 4.12.1 1926 | '@typescript-eslint/parser': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3) 1927 | '@typescript-eslint/scope-manager': 8.23.0 1928 | '@typescript-eslint/type-utils': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3) 1929 | '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3) 1930 | '@typescript-eslint/visitor-keys': 8.23.0 1931 | eslint: 9.20.0(jiti@1.21.7) 1932 | graphemer: 1.4.0 1933 | ignore: 5.3.2 1934 | natural-compare: 1.4.0 1935 | ts-api-utils: 2.0.1(typescript@5.7.3) 1936 | typescript: 5.7.3 1937 | transitivePeerDependencies: 1938 | - supports-color 1939 | 1940 | '@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3)': 1941 | dependencies: 1942 | '@typescript-eslint/scope-manager': 8.23.0 1943 | '@typescript-eslint/types': 8.23.0 1944 | '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) 1945 | '@typescript-eslint/visitor-keys': 8.23.0 1946 | debug: 4.4.0 1947 | eslint: 9.20.0(jiti@1.21.7) 1948 | typescript: 5.7.3 1949 | transitivePeerDependencies: 1950 | - supports-color 1951 | 1952 | '@typescript-eslint/scope-manager@8.23.0': 1953 | dependencies: 1954 | '@typescript-eslint/types': 8.23.0 1955 | '@typescript-eslint/visitor-keys': 8.23.0 1956 | 1957 | '@typescript-eslint/type-utils@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3)': 1958 | dependencies: 1959 | '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) 1960 | '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3) 1961 | debug: 4.4.0 1962 | eslint: 9.20.0(jiti@1.21.7) 1963 | ts-api-utils: 2.0.1(typescript@5.7.3) 1964 | typescript: 5.7.3 1965 | transitivePeerDependencies: 1966 | - supports-color 1967 | 1968 | '@typescript-eslint/types@8.23.0': {} 1969 | 1970 | '@typescript-eslint/typescript-estree@8.23.0(typescript@5.7.3)': 1971 | dependencies: 1972 | '@typescript-eslint/types': 8.23.0 1973 | '@typescript-eslint/visitor-keys': 8.23.0 1974 | debug: 4.4.0 1975 | fast-glob: 3.3.3 1976 | is-glob: 4.0.3 1977 | minimatch: 9.0.5 1978 | semver: 7.7.1 1979 | ts-api-utils: 2.0.1(typescript@5.7.3) 1980 | typescript: 5.7.3 1981 | transitivePeerDependencies: 1982 | - supports-color 1983 | 1984 | '@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3)': 1985 | dependencies: 1986 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.0(jiti@1.21.7)) 1987 | '@typescript-eslint/scope-manager': 8.23.0 1988 | '@typescript-eslint/types': 8.23.0 1989 | '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) 1990 | eslint: 9.20.0(jiti@1.21.7) 1991 | typescript: 5.7.3 1992 | transitivePeerDependencies: 1993 | - supports-color 1994 | 1995 | '@typescript-eslint/visitor-keys@8.23.0': 1996 | dependencies: 1997 | '@typescript-eslint/types': 8.23.0 1998 | eslint-visitor-keys: 4.2.0 1999 | 2000 | acorn-jsx@5.3.2(acorn@8.14.0): 2001 | dependencies: 2002 | acorn: 8.14.0 2003 | 2004 | acorn@8.14.0: {} 2005 | 2006 | ajv@6.12.6: 2007 | dependencies: 2008 | fast-deep-equal: 3.1.3 2009 | fast-json-stable-stringify: 2.1.0 2010 | json-schema-traverse: 0.4.1 2011 | uri-js: 4.4.1 2012 | 2013 | ansi-regex@5.0.1: {} 2014 | 2015 | ansi-regex@6.1.0: {} 2016 | 2017 | ansi-styles@4.3.0: 2018 | dependencies: 2019 | color-convert: 2.0.1 2020 | 2021 | ansi-styles@6.2.1: {} 2022 | 2023 | any-promise@1.3.0: {} 2024 | 2025 | anymatch@3.1.3: 2026 | dependencies: 2027 | normalize-path: 3.0.0 2028 | picomatch: 2.3.1 2029 | 2030 | arg@5.0.2: {} 2031 | 2032 | argparse@2.0.1: {} 2033 | 2034 | aria-query@5.3.2: {} 2035 | 2036 | array-buffer-byte-length@1.0.2: 2037 | dependencies: 2038 | call-bound: 1.0.3 2039 | is-array-buffer: 3.0.5 2040 | 2041 | array-includes@3.1.8: 2042 | dependencies: 2043 | call-bind: 1.0.8 2044 | define-properties: 1.2.1 2045 | es-abstract: 1.23.9 2046 | es-object-atoms: 1.1.1 2047 | get-intrinsic: 1.2.7 2048 | is-string: 1.1.1 2049 | 2050 | array.prototype.findlast@1.2.5: 2051 | dependencies: 2052 | call-bind: 1.0.8 2053 | define-properties: 1.2.1 2054 | es-abstract: 1.23.9 2055 | es-errors: 1.3.0 2056 | es-object-atoms: 1.1.1 2057 | es-shim-unscopables: 1.0.2 2058 | 2059 | array.prototype.findlastindex@1.2.5: 2060 | dependencies: 2061 | call-bind: 1.0.8 2062 | define-properties: 1.2.1 2063 | es-abstract: 1.23.9 2064 | es-errors: 1.3.0 2065 | es-object-atoms: 1.1.1 2066 | es-shim-unscopables: 1.0.2 2067 | 2068 | array.prototype.flat@1.3.3: 2069 | dependencies: 2070 | call-bind: 1.0.8 2071 | define-properties: 1.2.1 2072 | es-abstract: 1.23.9 2073 | es-shim-unscopables: 1.0.2 2074 | 2075 | array.prototype.flatmap@1.3.3: 2076 | dependencies: 2077 | call-bind: 1.0.8 2078 | define-properties: 1.2.1 2079 | es-abstract: 1.23.9 2080 | es-shim-unscopables: 1.0.2 2081 | 2082 | array.prototype.tosorted@1.1.4: 2083 | dependencies: 2084 | call-bind: 1.0.8 2085 | define-properties: 1.2.1 2086 | es-abstract: 1.23.9 2087 | es-errors: 1.3.0 2088 | es-shim-unscopables: 1.0.2 2089 | 2090 | arraybuffer.prototype.slice@1.0.4: 2091 | dependencies: 2092 | array-buffer-byte-length: 1.0.2 2093 | call-bind: 1.0.8 2094 | define-properties: 1.2.1 2095 | es-abstract: 1.23.9 2096 | es-errors: 1.3.0 2097 | get-intrinsic: 1.2.7 2098 | is-array-buffer: 3.0.5 2099 | 2100 | ast-types-flow@0.0.8: {} 2101 | 2102 | async-function@1.0.0: {} 2103 | 2104 | available-typed-arrays@1.0.7: 2105 | dependencies: 2106 | possible-typed-array-names: 1.1.0 2107 | 2108 | axe-core@4.10.2: {} 2109 | 2110 | axobject-query@4.1.0: {} 2111 | 2112 | balanced-match@1.0.2: {} 2113 | 2114 | binary-extensions@2.3.0: {} 2115 | 2116 | brace-expansion@1.1.11: 2117 | dependencies: 2118 | balanced-match: 1.0.2 2119 | concat-map: 0.0.1 2120 | 2121 | brace-expansion@2.0.1: 2122 | dependencies: 2123 | balanced-match: 1.0.2 2124 | 2125 | braces@3.0.3: 2126 | dependencies: 2127 | fill-range: 7.1.1 2128 | 2129 | busboy@1.6.0: 2130 | dependencies: 2131 | streamsearch: 1.1.0 2132 | 2133 | call-bind-apply-helpers@1.0.1: 2134 | dependencies: 2135 | es-errors: 1.3.0 2136 | function-bind: 1.1.2 2137 | 2138 | call-bind@1.0.8: 2139 | dependencies: 2140 | call-bind-apply-helpers: 1.0.1 2141 | es-define-property: 1.0.1 2142 | get-intrinsic: 1.2.7 2143 | set-function-length: 1.2.2 2144 | 2145 | call-bound@1.0.3: 2146 | dependencies: 2147 | call-bind-apply-helpers: 1.0.1 2148 | get-intrinsic: 1.2.7 2149 | 2150 | callsites@3.1.0: {} 2151 | 2152 | camelcase-css@2.0.1: {} 2153 | 2154 | caniuse-lite@1.0.30001699: {} 2155 | 2156 | chalk@4.1.2: 2157 | dependencies: 2158 | ansi-styles: 4.3.0 2159 | supports-color: 7.2.0 2160 | 2161 | chokidar@3.6.0: 2162 | dependencies: 2163 | anymatch: 3.1.3 2164 | braces: 3.0.3 2165 | glob-parent: 5.1.2 2166 | is-binary-path: 2.1.0 2167 | is-glob: 4.0.3 2168 | normalize-path: 3.0.0 2169 | readdirp: 3.6.0 2170 | optionalDependencies: 2171 | fsevents: 2.3.3 2172 | 2173 | client-only@0.0.1: {} 2174 | 2175 | color-convert@2.0.1: 2176 | dependencies: 2177 | color-name: 1.1.4 2178 | 2179 | color-name@1.1.4: {} 2180 | 2181 | color-string@1.9.1: 2182 | dependencies: 2183 | color-name: 1.1.4 2184 | simple-swizzle: 0.2.2 2185 | optional: true 2186 | 2187 | color@4.2.3: 2188 | dependencies: 2189 | color-convert: 2.0.1 2190 | color-string: 1.9.1 2191 | optional: true 2192 | 2193 | commander@4.1.1: {} 2194 | 2195 | concat-map@0.0.1: {} 2196 | 2197 | cross-spawn@7.0.6: 2198 | dependencies: 2199 | path-key: 3.1.1 2200 | shebang-command: 2.0.0 2201 | which: 2.0.2 2202 | 2203 | cssesc@3.0.0: {} 2204 | 2205 | csstype@3.1.3: {} 2206 | 2207 | damerau-levenshtein@1.0.8: {} 2208 | 2209 | data-view-buffer@1.0.2: 2210 | dependencies: 2211 | call-bound: 1.0.3 2212 | es-errors: 1.3.0 2213 | is-data-view: 1.0.2 2214 | 2215 | data-view-byte-length@1.0.2: 2216 | dependencies: 2217 | call-bound: 1.0.3 2218 | es-errors: 1.3.0 2219 | is-data-view: 1.0.2 2220 | 2221 | data-view-byte-offset@1.0.1: 2222 | dependencies: 2223 | call-bound: 1.0.3 2224 | es-errors: 1.3.0 2225 | is-data-view: 1.0.2 2226 | 2227 | debug@3.2.7: 2228 | dependencies: 2229 | ms: 2.1.3 2230 | 2231 | debug@4.4.0: 2232 | dependencies: 2233 | ms: 2.1.3 2234 | 2235 | deep-is@0.1.4: {} 2236 | 2237 | define-data-property@1.1.4: 2238 | dependencies: 2239 | es-define-property: 1.0.1 2240 | es-errors: 1.3.0 2241 | gopd: 1.2.0 2242 | 2243 | define-properties@1.2.1: 2244 | dependencies: 2245 | define-data-property: 1.1.4 2246 | has-property-descriptors: 1.0.2 2247 | object-keys: 1.1.1 2248 | 2249 | detect-libc@2.0.3: 2250 | optional: true 2251 | 2252 | didyoumean@1.2.2: {} 2253 | 2254 | dlv@1.1.3: {} 2255 | 2256 | doctrine@2.1.0: 2257 | dependencies: 2258 | esutils: 2.0.3 2259 | 2260 | dunder-proto@1.0.1: 2261 | dependencies: 2262 | call-bind-apply-helpers: 1.0.1 2263 | es-errors: 1.3.0 2264 | gopd: 1.2.0 2265 | 2266 | eastasianwidth@0.2.0: {} 2267 | 2268 | emoji-regex@8.0.0: {} 2269 | 2270 | emoji-regex@9.2.2: {} 2271 | 2272 | enhanced-resolve@5.18.1: 2273 | dependencies: 2274 | graceful-fs: 4.2.11 2275 | tapable: 2.2.1 2276 | 2277 | es-abstract@1.23.9: 2278 | dependencies: 2279 | array-buffer-byte-length: 1.0.2 2280 | arraybuffer.prototype.slice: 1.0.4 2281 | available-typed-arrays: 1.0.7 2282 | call-bind: 1.0.8 2283 | call-bound: 1.0.3 2284 | data-view-buffer: 1.0.2 2285 | data-view-byte-length: 1.0.2 2286 | data-view-byte-offset: 1.0.1 2287 | es-define-property: 1.0.1 2288 | es-errors: 1.3.0 2289 | es-object-atoms: 1.1.1 2290 | es-set-tostringtag: 2.1.0 2291 | es-to-primitive: 1.3.0 2292 | function.prototype.name: 1.1.8 2293 | get-intrinsic: 1.2.7 2294 | get-proto: 1.0.1 2295 | get-symbol-description: 1.1.0 2296 | globalthis: 1.0.4 2297 | gopd: 1.2.0 2298 | has-property-descriptors: 1.0.2 2299 | has-proto: 1.2.0 2300 | has-symbols: 1.1.0 2301 | hasown: 2.0.2 2302 | internal-slot: 1.1.0 2303 | is-array-buffer: 3.0.5 2304 | is-callable: 1.2.7 2305 | is-data-view: 1.0.2 2306 | is-regex: 1.2.1 2307 | is-shared-array-buffer: 1.0.4 2308 | is-string: 1.1.1 2309 | is-typed-array: 1.1.15 2310 | is-weakref: 1.1.1 2311 | math-intrinsics: 1.1.0 2312 | object-inspect: 1.13.4 2313 | object-keys: 1.1.1 2314 | object.assign: 4.1.7 2315 | own-keys: 1.0.1 2316 | regexp.prototype.flags: 1.5.4 2317 | safe-array-concat: 1.1.3 2318 | safe-push-apply: 1.0.0 2319 | safe-regex-test: 1.1.0 2320 | set-proto: 1.0.0 2321 | string.prototype.trim: 1.2.10 2322 | string.prototype.trimend: 1.0.9 2323 | string.prototype.trimstart: 1.0.8 2324 | typed-array-buffer: 1.0.3 2325 | typed-array-byte-length: 1.0.3 2326 | typed-array-byte-offset: 1.0.4 2327 | typed-array-length: 1.0.7 2328 | unbox-primitive: 1.1.0 2329 | which-typed-array: 1.1.18 2330 | 2331 | es-define-property@1.0.1: {} 2332 | 2333 | es-errors@1.3.0: {} 2334 | 2335 | es-iterator-helpers@1.2.1: 2336 | dependencies: 2337 | call-bind: 1.0.8 2338 | call-bound: 1.0.3 2339 | define-properties: 1.2.1 2340 | es-abstract: 1.23.9 2341 | es-errors: 1.3.0 2342 | es-set-tostringtag: 2.1.0 2343 | function-bind: 1.1.2 2344 | get-intrinsic: 1.2.7 2345 | globalthis: 1.0.4 2346 | gopd: 1.2.0 2347 | has-property-descriptors: 1.0.2 2348 | has-proto: 1.2.0 2349 | has-symbols: 1.1.0 2350 | internal-slot: 1.1.0 2351 | iterator.prototype: 1.1.5 2352 | safe-array-concat: 1.1.3 2353 | 2354 | es-object-atoms@1.1.1: 2355 | dependencies: 2356 | es-errors: 1.3.0 2357 | 2358 | es-set-tostringtag@2.1.0: 2359 | dependencies: 2360 | es-errors: 1.3.0 2361 | get-intrinsic: 1.2.7 2362 | has-tostringtag: 1.0.2 2363 | hasown: 2.0.2 2364 | 2365 | es-shim-unscopables@1.0.2: 2366 | dependencies: 2367 | hasown: 2.0.2 2368 | 2369 | es-to-primitive@1.3.0: 2370 | dependencies: 2371 | is-callable: 1.2.7 2372 | is-date-object: 1.1.0 2373 | is-symbol: 1.1.1 2374 | 2375 | escape-string-regexp@4.0.0: {} 2376 | 2377 | eslint-config-next@15.1.6(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3): 2378 | dependencies: 2379 | '@next/eslint-plugin-next': 15.1.6 2380 | '@rushstack/eslint-patch': 1.10.5 2381 | '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3) 2382 | '@typescript-eslint/parser': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3) 2383 | eslint: 9.20.0(jiti@1.21.7) 2384 | eslint-import-resolver-node: 0.3.9 2385 | eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.20.0(jiti@1.21.7)) 2386 | eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.20.0(jiti@1.21.7)) 2387 | eslint-plugin-jsx-a11y: 6.10.2(eslint@9.20.0(jiti@1.21.7)) 2388 | eslint-plugin-react: 7.37.4(eslint@9.20.0(jiti@1.21.7)) 2389 | eslint-plugin-react-hooks: 5.1.0(eslint@9.20.0(jiti@1.21.7)) 2390 | optionalDependencies: 2391 | typescript: 5.7.3 2392 | transitivePeerDependencies: 2393 | - eslint-import-resolver-webpack 2394 | - eslint-plugin-import-x 2395 | - supports-color 2396 | 2397 | eslint-import-resolver-node@0.3.9: 2398 | dependencies: 2399 | debug: 3.2.7 2400 | is-core-module: 2.16.1 2401 | resolve: 1.22.10 2402 | transitivePeerDependencies: 2403 | - supports-color 2404 | 2405 | eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.20.0(jiti@1.21.7)): 2406 | dependencies: 2407 | '@nolyfill/is-core-module': 1.0.39 2408 | debug: 4.4.0 2409 | enhanced-resolve: 5.18.1 2410 | eslint: 9.20.0(jiti@1.21.7) 2411 | fast-glob: 3.3.3 2412 | get-tsconfig: 4.10.0 2413 | is-bun-module: 1.3.0 2414 | is-glob: 4.0.3 2415 | stable-hash: 0.0.4 2416 | optionalDependencies: 2417 | eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.20.0(jiti@1.21.7)) 2418 | transitivePeerDependencies: 2419 | - supports-color 2420 | 2421 | eslint-module-utils@2.12.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.20.0(jiti@1.21.7)): 2422 | dependencies: 2423 | debug: 3.2.7 2424 | optionalDependencies: 2425 | '@typescript-eslint/parser': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3) 2426 | eslint: 9.20.0(jiti@1.21.7) 2427 | eslint-import-resolver-node: 0.3.9 2428 | eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.20.0(jiti@1.21.7)) 2429 | transitivePeerDependencies: 2430 | - supports-color 2431 | 2432 | eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.20.0(jiti@1.21.7)): 2433 | dependencies: 2434 | '@rtsao/scc': 1.1.0 2435 | array-includes: 3.1.8 2436 | array.prototype.findlastindex: 1.2.5 2437 | array.prototype.flat: 1.3.3 2438 | array.prototype.flatmap: 1.3.3 2439 | debug: 3.2.7 2440 | doctrine: 2.1.0 2441 | eslint: 9.20.0(jiti@1.21.7) 2442 | eslint-import-resolver-node: 0.3.9 2443 | eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.20.0(jiti@1.21.7)) 2444 | hasown: 2.0.2 2445 | is-core-module: 2.16.1 2446 | is-glob: 4.0.3 2447 | minimatch: 3.1.2 2448 | object.fromentries: 2.0.8 2449 | object.groupby: 1.0.3 2450 | object.values: 1.2.1 2451 | semver: 6.3.1 2452 | string.prototype.trimend: 1.0.9 2453 | tsconfig-paths: 3.15.0 2454 | optionalDependencies: 2455 | '@typescript-eslint/parser': 8.23.0(eslint@9.20.0(jiti@1.21.7))(typescript@5.7.3) 2456 | transitivePeerDependencies: 2457 | - eslint-import-resolver-typescript 2458 | - eslint-import-resolver-webpack 2459 | - supports-color 2460 | 2461 | eslint-plugin-jsx-a11y@6.10.2(eslint@9.20.0(jiti@1.21.7)): 2462 | dependencies: 2463 | aria-query: 5.3.2 2464 | array-includes: 3.1.8 2465 | array.prototype.flatmap: 1.3.3 2466 | ast-types-flow: 0.0.8 2467 | axe-core: 4.10.2 2468 | axobject-query: 4.1.0 2469 | damerau-levenshtein: 1.0.8 2470 | emoji-regex: 9.2.2 2471 | eslint: 9.20.0(jiti@1.21.7) 2472 | hasown: 2.0.2 2473 | jsx-ast-utils: 3.3.5 2474 | language-tags: 1.0.9 2475 | minimatch: 3.1.2 2476 | object.fromentries: 2.0.8 2477 | safe-regex-test: 1.1.0 2478 | string.prototype.includes: 2.0.1 2479 | 2480 | eslint-plugin-react-hooks@5.1.0(eslint@9.20.0(jiti@1.21.7)): 2481 | dependencies: 2482 | eslint: 9.20.0(jiti@1.21.7) 2483 | 2484 | eslint-plugin-react@7.37.4(eslint@9.20.0(jiti@1.21.7)): 2485 | dependencies: 2486 | array-includes: 3.1.8 2487 | array.prototype.findlast: 1.2.5 2488 | array.prototype.flatmap: 1.3.3 2489 | array.prototype.tosorted: 1.1.4 2490 | doctrine: 2.1.0 2491 | es-iterator-helpers: 1.2.1 2492 | eslint: 9.20.0(jiti@1.21.7) 2493 | estraverse: 5.3.0 2494 | hasown: 2.0.2 2495 | jsx-ast-utils: 3.3.5 2496 | minimatch: 3.1.2 2497 | object.entries: 1.1.8 2498 | object.fromentries: 2.0.8 2499 | object.values: 1.2.1 2500 | prop-types: 15.8.1 2501 | resolve: 2.0.0-next.5 2502 | semver: 6.3.1 2503 | string.prototype.matchall: 4.0.12 2504 | string.prototype.repeat: 1.0.0 2505 | 2506 | eslint-scope@8.2.0: 2507 | dependencies: 2508 | esrecurse: 4.3.0 2509 | estraverse: 5.3.0 2510 | 2511 | eslint-visitor-keys@3.4.3: {} 2512 | 2513 | eslint-visitor-keys@4.2.0: {} 2514 | 2515 | eslint@9.20.0(jiti@1.21.7): 2516 | dependencies: 2517 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.0(jiti@1.21.7)) 2518 | '@eslint-community/regexpp': 4.12.1 2519 | '@eslint/config-array': 0.19.2 2520 | '@eslint/core': 0.11.0 2521 | '@eslint/eslintrc': 3.2.0 2522 | '@eslint/js': 9.20.0 2523 | '@eslint/plugin-kit': 0.2.5 2524 | '@humanfs/node': 0.16.6 2525 | '@humanwhocodes/module-importer': 1.0.1 2526 | '@humanwhocodes/retry': 0.4.1 2527 | '@types/estree': 1.0.6 2528 | '@types/json-schema': 7.0.15 2529 | ajv: 6.12.6 2530 | chalk: 4.1.2 2531 | cross-spawn: 7.0.6 2532 | debug: 4.4.0 2533 | escape-string-regexp: 4.0.0 2534 | eslint-scope: 8.2.0 2535 | eslint-visitor-keys: 4.2.0 2536 | espree: 10.3.0 2537 | esquery: 1.6.0 2538 | esutils: 2.0.3 2539 | fast-deep-equal: 3.1.3 2540 | file-entry-cache: 8.0.0 2541 | find-up: 5.0.0 2542 | glob-parent: 6.0.2 2543 | ignore: 5.3.2 2544 | imurmurhash: 0.1.4 2545 | is-glob: 4.0.3 2546 | json-stable-stringify-without-jsonify: 1.0.1 2547 | lodash.merge: 4.6.2 2548 | minimatch: 3.1.2 2549 | natural-compare: 1.4.0 2550 | optionator: 0.9.4 2551 | optionalDependencies: 2552 | jiti: 1.21.7 2553 | transitivePeerDependencies: 2554 | - supports-color 2555 | 2556 | espree@10.3.0: 2557 | dependencies: 2558 | acorn: 8.14.0 2559 | acorn-jsx: 5.3.2(acorn@8.14.0) 2560 | eslint-visitor-keys: 4.2.0 2561 | 2562 | esquery@1.6.0: 2563 | dependencies: 2564 | estraverse: 5.3.0 2565 | 2566 | esrecurse@4.3.0: 2567 | dependencies: 2568 | estraverse: 5.3.0 2569 | 2570 | estraverse@5.3.0: {} 2571 | 2572 | esutils@2.0.3: {} 2573 | 2574 | fast-deep-equal@3.1.3: {} 2575 | 2576 | fast-glob@3.3.1: 2577 | dependencies: 2578 | '@nodelib/fs.stat': 2.0.5 2579 | '@nodelib/fs.walk': 1.2.8 2580 | glob-parent: 5.1.2 2581 | merge2: 1.4.1 2582 | micromatch: 4.0.8 2583 | 2584 | fast-glob@3.3.3: 2585 | dependencies: 2586 | '@nodelib/fs.stat': 2.0.5 2587 | '@nodelib/fs.walk': 1.2.8 2588 | glob-parent: 5.1.2 2589 | merge2: 1.4.1 2590 | micromatch: 4.0.8 2591 | 2592 | fast-json-stable-stringify@2.1.0: {} 2593 | 2594 | fast-levenshtein@2.0.6: {} 2595 | 2596 | fastq@1.19.0: 2597 | dependencies: 2598 | reusify: 1.0.4 2599 | 2600 | file-entry-cache@8.0.0: 2601 | dependencies: 2602 | flat-cache: 4.0.1 2603 | 2604 | fill-range@7.1.1: 2605 | dependencies: 2606 | to-regex-range: 5.0.1 2607 | 2608 | find-up@5.0.0: 2609 | dependencies: 2610 | locate-path: 6.0.0 2611 | path-exists: 4.0.0 2612 | 2613 | flat-cache@4.0.1: 2614 | dependencies: 2615 | flatted: 3.3.2 2616 | keyv: 4.5.4 2617 | 2618 | flatted@3.3.2: {} 2619 | 2620 | for-each@0.3.4: 2621 | dependencies: 2622 | is-callable: 1.2.7 2623 | 2624 | foreground-child@3.3.0: 2625 | dependencies: 2626 | cross-spawn: 7.0.6 2627 | signal-exit: 4.1.0 2628 | 2629 | fsevents@2.3.3: 2630 | optional: true 2631 | 2632 | function-bind@1.1.2: {} 2633 | 2634 | function.prototype.name@1.1.8: 2635 | dependencies: 2636 | call-bind: 1.0.8 2637 | call-bound: 1.0.3 2638 | define-properties: 1.2.1 2639 | functions-have-names: 1.2.3 2640 | hasown: 2.0.2 2641 | is-callable: 1.2.7 2642 | 2643 | functions-have-names@1.2.3: {} 2644 | 2645 | get-intrinsic@1.2.7: 2646 | dependencies: 2647 | call-bind-apply-helpers: 1.0.1 2648 | es-define-property: 1.0.1 2649 | es-errors: 1.3.0 2650 | es-object-atoms: 1.1.1 2651 | function-bind: 1.1.2 2652 | get-proto: 1.0.1 2653 | gopd: 1.2.0 2654 | has-symbols: 1.1.0 2655 | hasown: 2.0.2 2656 | math-intrinsics: 1.1.0 2657 | 2658 | get-proto@1.0.1: 2659 | dependencies: 2660 | dunder-proto: 1.0.1 2661 | es-object-atoms: 1.1.1 2662 | 2663 | get-symbol-description@1.1.0: 2664 | dependencies: 2665 | call-bound: 1.0.3 2666 | es-errors: 1.3.0 2667 | get-intrinsic: 1.2.7 2668 | 2669 | get-tsconfig@4.10.0: 2670 | dependencies: 2671 | resolve-pkg-maps: 1.0.0 2672 | 2673 | glob-parent@5.1.2: 2674 | dependencies: 2675 | is-glob: 4.0.3 2676 | 2677 | glob-parent@6.0.2: 2678 | dependencies: 2679 | is-glob: 4.0.3 2680 | 2681 | glob@10.4.5: 2682 | dependencies: 2683 | foreground-child: 3.3.0 2684 | jackspeak: 3.4.3 2685 | minimatch: 9.0.5 2686 | minipass: 7.1.2 2687 | package-json-from-dist: 1.0.1 2688 | path-scurry: 1.11.1 2689 | 2690 | globals@14.0.0: {} 2691 | 2692 | globalthis@1.0.4: 2693 | dependencies: 2694 | define-properties: 1.2.1 2695 | gopd: 1.2.0 2696 | 2697 | gopd@1.2.0: {} 2698 | 2699 | graceful-fs@4.2.11: {} 2700 | 2701 | graphemer@1.4.0: {} 2702 | 2703 | has-bigints@1.1.0: {} 2704 | 2705 | has-flag@4.0.0: {} 2706 | 2707 | has-property-descriptors@1.0.2: 2708 | dependencies: 2709 | es-define-property: 1.0.1 2710 | 2711 | has-proto@1.2.0: 2712 | dependencies: 2713 | dunder-proto: 1.0.1 2714 | 2715 | has-symbols@1.1.0: {} 2716 | 2717 | has-tostringtag@1.0.2: 2718 | dependencies: 2719 | has-symbols: 1.1.0 2720 | 2721 | hasown@2.0.2: 2722 | dependencies: 2723 | function-bind: 1.1.2 2724 | 2725 | ignore@5.3.2: {} 2726 | 2727 | import-fresh@3.3.1: 2728 | dependencies: 2729 | parent-module: 1.0.1 2730 | resolve-from: 4.0.0 2731 | 2732 | imurmurhash@0.1.4: {} 2733 | 2734 | internal-slot@1.1.0: 2735 | dependencies: 2736 | es-errors: 1.3.0 2737 | hasown: 2.0.2 2738 | side-channel: 1.1.0 2739 | 2740 | is-array-buffer@3.0.5: 2741 | dependencies: 2742 | call-bind: 1.0.8 2743 | call-bound: 1.0.3 2744 | get-intrinsic: 1.2.7 2745 | 2746 | is-arrayish@0.3.2: 2747 | optional: true 2748 | 2749 | is-async-function@2.1.1: 2750 | dependencies: 2751 | async-function: 1.0.0 2752 | call-bound: 1.0.3 2753 | get-proto: 1.0.1 2754 | has-tostringtag: 1.0.2 2755 | safe-regex-test: 1.1.0 2756 | 2757 | is-bigint@1.1.0: 2758 | dependencies: 2759 | has-bigints: 1.1.0 2760 | 2761 | is-binary-path@2.1.0: 2762 | dependencies: 2763 | binary-extensions: 2.3.0 2764 | 2765 | is-boolean-object@1.2.2: 2766 | dependencies: 2767 | call-bound: 1.0.3 2768 | has-tostringtag: 1.0.2 2769 | 2770 | is-bun-module@1.3.0: 2771 | dependencies: 2772 | semver: 7.7.1 2773 | 2774 | is-callable@1.2.7: {} 2775 | 2776 | is-core-module@2.16.1: 2777 | dependencies: 2778 | hasown: 2.0.2 2779 | 2780 | is-data-view@1.0.2: 2781 | dependencies: 2782 | call-bound: 1.0.3 2783 | get-intrinsic: 1.2.7 2784 | is-typed-array: 1.1.15 2785 | 2786 | is-date-object@1.1.0: 2787 | dependencies: 2788 | call-bound: 1.0.3 2789 | has-tostringtag: 1.0.2 2790 | 2791 | is-extglob@2.1.1: {} 2792 | 2793 | is-finalizationregistry@1.1.1: 2794 | dependencies: 2795 | call-bound: 1.0.3 2796 | 2797 | is-fullwidth-code-point@3.0.0: {} 2798 | 2799 | is-generator-function@1.1.0: 2800 | dependencies: 2801 | call-bound: 1.0.3 2802 | get-proto: 1.0.1 2803 | has-tostringtag: 1.0.2 2804 | safe-regex-test: 1.1.0 2805 | 2806 | is-glob@4.0.3: 2807 | dependencies: 2808 | is-extglob: 2.1.1 2809 | 2810 | is-map@2.0.3: {} 2811 | 2812 | is-number-object@1.1.1: 2813 | dependencies: 2814 | call-bound: 1.0.3 2815 | has-tostringtag: 1.0.2 2816 | 2817 | is-number@7.0.0: {} 2818 | 2819 | is-regex@1.2.1: 2820 | dependencies: 2821 | call-bound: 1.0.3 2822 | gopd: 1.2.0 2823 | has-tostringtag: 1.0.2 2824 | hasown: 2.0.2 2825 | 2826 | is-set@2.0.3: {} 2827 | 2828 | is-shared-array-buffer@1.0.4: 2829 | dependencies: 2830 | call-bound: 1.0.3 2831 | 2832 | is-string@1.1.1: 2833 | dependencies: 2834 | call-bound: 1.0.3 2835 | has-tostringtag: 1.0.2 2836 | 2837 | is-symbol@1.1.1: 2838 | dependencies: 2839 | call-bound: 1.0.3 2840 | has-symbols: 1.1.0 2841 | safe-regex-test: 1.1.0 2842 | 2843 | is-typed-array@1.1.15: 2844 | dependencies: 2845 | which-typed-array: 1.1.18 2846 | 2847 | is-weakmap@2.0.2: {} 2848 | 2849 | is-weakref@1.1.1: 2850 | dependencies: 2851 | call-bound: 1.0.3 2852 | 2853 | is-weakset@2.0.4: 2854 | dependencies: 2855 | call-bound: 1.0.3 2856 | get-intrinsic: 1.2.7 2857 | 2858 | isarray@2.0.5: {} 2859 | 2860 | isexe@2.0.0: {} 2861 | 2862 | iterator.prototype@1.1.5: 2863 | dependencies: 2864 | define-data-property: 1.1.4 2865 | es-object-atoms: 1.1.1 2866 | get-intrinsic: 1.2.7 2867 | get-proto: 1.0.1 2868 | has-symbols: 1.1.0 2869 | set-function-name: 2.0.2 2870 | 2871 | jackspeak@3.4.3: 2872 | dependencies: 2873 | '@isaacs/cliui': 8.0.2 2874 | optionalDependencies: 2875 | '@pkgjs/parseargs': 0.11.0 2876 | 2877 | jiti@1.21.7: {} 2878 | 2879 | js-tokens@4.0.0: {} 2880 | 2881 | js-yaml@4.1.0: 2882 | dependencies: 2883 | argparse: 2.0.1 2884 | 2885 | json-buffer@3.0.1: {} 2886 | 2887 | json-schema-traverse@0.4.1: {} 2888 | 2889 | json-stable-stringify-without-jsonify@1.0.1: {} 2890 | 2891 | json5@1.0.2: 2892 | dependencies: 2893 | minimist: 1.2.8 2894 | 2895 | jsx-ast-utils@3.3.5: 2896 | dependencies: 2897 | array-includes: 3.1.8 2898 | array.prototype.flat: 1.3.3 2899 | object.assign: 4.1.7 2900 | object.values: 1.2.1 2901 | 2902 | keyv@4.5.4: 2903 | dependencies: 2904 | json-buffer: 3.0.1 2905 | 2906 | language-subtag-registry@0.3.23: {} 2907 | 2908 | language-tags@1.0.9: 2909 | dependencies: 2910 | language-subtag-registry: 0.3.23 2911 | 2912 | levn@0.4.1: 2913 | dependencies: 2914 | prelude-ls: 1.2.1 2915 | type-check: 0.4.0 2916 | 2917 | lilconfig@3.1.3: {} 2918 | 2919 | lines-and-columns@1.2.4: {} 2920 | 2921 | locate-path@6.0.0: 2922 | dependencies: 2923 | p-locate: 5.0.0 2924 | 2925 | lodash.merge@4.6.2: {} 2926 | 2927 | loose-envify@1.4.0: 2928 | dependencies: 2929 | js-tokens: 4.0.0 2930 | 2931 | lru-cache@10.4.3: {} 2932 | 2933 | math-intrinsics@1.1.0: {} 2934 | 2935 | merge2@1.4.1: {} 2936 | 2937 | micromatch@4.0.8: 2938 | dependencies: 2939 | braces: 3.0.3 2940 | picomatch: 2.3.1 2941 | 2942 | minimatch@3.1.2: 2943 | dependencies: 2944 | brace-expansion: 1.1.11 2945 | 2946 | minimatch@9.0.5: 2947 | dependencies: 2948 | brace-expansion: 2.0.1 2949 | 2950 | minimist@1.2.8: {} 2951 | 2952 | minipass@7.1.2: {} 2953 | 2954 | ms@2.1.3: {} 2955 | 2956 | mz@2.7.0: 2957 | dependencies: 2958 | any-promise: 1.3.0 2959 | object-assign: 4.1.1 2960 | thenify-all: 1.6.0 2961 | 2962 | nanoid@3.3.8: {} 2963 | 2964 | natural-compare@1.4.0: {} 2965 | 2966 | next@15.1.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 2967 | dependencies: 2968 | '@next/env': 15.1.6 2969 | '@swc/counter': 0.1.3 2970 | '@swc/helpers': 0.5.15 2971 | busboy: 1.6.0 2972 | caniuse-lite: 1.0.30001699 2973 | postcss: 8.4.31 2974 | react: 19.0.0 2975 | react-dom: 19.0.0(react@19.0.0) 2976 | styled-jsx: 5.1.6(react@19.0.0) 2977 | optionalDependencies: 2978 | '@next/swc-darwin-arm64': 15.1.6 2979 | '@next/swc-darwin-x64': 15.1.6 2980 | '@next/swc-linux-arm64-gnu': 15.1.6 2981 | '@next/swc-linux-arm64-musl': 15.1.6 2982 | '@next/swc-linux-x64-gnu': 15.1.6 2983 | '@next/swc-linux-x64-musl': 15.1.6 2984 | '@next/swc-win32-arm64-msvc': 15.1.6 2985 | '@next/swc-win32-x64-msvc': 15.1.6 2986 | sharp: 0.33.5 2987 | transitivePeerDependencies: 2988 | - '@babel/core' 2989 | - babel-plugin-macros 2990 | 2991 | normalize-path@3.0.0: {} 2992 | 2993 | object-assign@4.1.1: {} 2994 | 2995 | object-hash@3.0.0: {} 2996 | 2997 | object-inspect@1.13.4: {} 2998 | 2999 | object-keys@1.1.1: {} 3000 | 3001 | object.assign@4.1.7: 3002 | dependencies: 3003 | call-bind: 1.0.8 3004 | call-bound: 1.0.3 3005 | define-properties: 1.2.1 3006 | es-object-atoms: 1.1.1 3007 | has-symbols: 1.1.0 3008 | object-keys: 1.1.1 3009 | 3010 | object.entries@1.1.8: 3011 | dependencies: 3012 | call-bind: 1.0.8 3013 | define-properties: 1.2.1 3014 | es-object-atoms: 1.1.1 3015 | 3016 | object.fromentries@2.0.8: 3017 | dependencies: 3018 | call-bind: 1.0.8 3019 | define-properties: 1.2.1 3020 | es-abstract: 1.23.9 3021 | es-object-atoms: 1.1.1 3022 | 3023 | object.groupby@1.0.3: 3024 | dependencies: 3025 | call-bind: 1.0.8 3026 | define-properties: 1.2.1 3027 | es-abstract: 1.23.9 3028 | 3029 | object.values@1.2.1: 3030 | dependencies: 3031 | call-bind: 1.0.8 3032 | call-bound: 1.0.3 3033 | define-properties: 1.2.1 3034 | es-object-atoms: 1.1.1 3035 | 3036 | optionator@0.9.4: 3037 | dependencies: 3038 | deep-is: 0.1.4 3039 | fast-levenshtein: 2.0.6 3040 | levn: 0.4.1 3041 | prelude-ls: 1.2.1 3042 | type-check: 0.4.0 3043 | word-wrap: 1.2.5 3044 | 3045 | own-keys@1.0.1: 3046 | dependencies: 3047 | get-intrinsic: 1.2.7 3048 | object-keys: 1.1.1 3049 | safe-push-apply: 1.0.0 3050 | 3051 | p-limit@3.1.0: 3052 | dependencies: 3053 | yocto-queue: 0.1.0 3054 | 3055 | p-locate@5.0.0: 3056 | dependencies: 3057 | p-limit: 3.1.0 3058 | 3059 | package-json-from-dist@1.0.1: {} 3060 | 3061 | parent-module@1.0.1: 3062 | dependencies: 3063 | callsites: 3.1.0 3064 | 3065 | path-exists@4.0.0: {} 3066 | 3067 | path-key@3.1.1: {} 3068 | 3069 | path-parse@1.0.7: {} 3070 | 3071 | path-scurry@1.11.1: 3072 | dependencies: 3073 | lru-cache: 10.4.3 3074 | minipass: 7.1.2 3075 | 3076 | picocolors@1.1.1: {} 3077 | 3078 | picomatch@2.3.1: {} 3079 | 3080 | pify@2.3.0: {} 3081 | 3082 | pirates@4.0.6: {} 3083 | 3084 | possible-typed-array-names@1.1.0: {} 3085 | 3086 | postcss-import@15.1.0(postcss@8.5.1): 3087 | dependencies: 3088 | postcss: 8.5.1 3089 | postcss-value-parser: 4.2.0 3090 | read-cache: 1.0.0 3091 | resolve: 1.22.10 3092 | 3093 | postcss-js@4.0.1(postcss@8.5.1): 3094 | dependencies: 3095 | camelcase-css: 2.0.1 3096 | postcss: 8.5.1 3097 | 3098 | postcss-load-config@4.0.2(postcss@8.5.1): 3099 | dependencies: 3100 | lilconfig: 3.1.3 3101 | yaml: 2.7.0 3102 | optionalDependencies: 3103 | postcss: 8.5.1 3104 | 3105 | postcss-nested@6.2.0(postcss@8.5.1): 3106 | dependencies: 3107 | postcss: 8.5.1 3108 | postcss-selector-parser: 6.1.2 3109 | 3110 | postcss-selector-parser@6.1.2: 3111 | dependencies: 3112 | cssesc: 3.0.0 3113 | util-deprecate: 1.0.2 3114 | 3115 | postcss-value-parser@4.2.0: {} 3116 | 3117 | postcss@8.4.31: 3118 | dependencies: 3119 | nanoid: 3.3.8 3120 | picocolors: 1.1.1 3121 | source-map-js: 1.2.1 3122 | 3123 | postcss@8.5.1: 3124 | dependencies: 3125 | nanoid: 3.3.8 3126 | picocolors: 1.1.1 3127 | source-map-js: 1.2.1 3128 | 3129 | prelude-ls@1.2.1: {} 3130 | 3131 | prop-types@15.8.1: 3132 | dependencies: 3133 | loose-envify: 1.4.0 3134 | object-assign: 4.1.1 3135 | react-is: 16.13.1 3136 | 3137 | punycode@2.3.1: {} 3138 | 3139 | queue-microtask@1.2.3: {} 3140 | 3141 | react-dom@19.0.0(react@19.0.0): 3142 | dependencies: 3143 | react: 19.0.0 3144 | scheduler: 0.25.0 3145 | 3146 | react-is@16.13.1: {} 3147 | 3148 | react@19.0.0: {} 3149 | 3150 | read-cache@1.0.0: 3151 | dependencies: 3152 | pify: 2.3.0 3153 | 3154 | readdirp@3.6.0: 3155 | dependencies: 3156 | picomatch: 2.3.1 3157 | 3158 | reflect.getprototypeof@1.0.10: 3159 | dependencies: 3160 | call-bind: 1.0.8 3161 | define-properties: 1.2.1 3162 | es-abstract: 1.23.9 3163 | es-errors: 1.3.0 3164 | es-object-atoms: 1.1.1 3165 | get-intrinsic: 1.2.7 3166 | get-proto: 1.0.1 3167 | which-builtin-type: 1.2.1 3168 | 3169 | regexp.prototype.flags@1.5.4: 3170 | dependencies: 3171 | call-bind: 1.0.8 3172 | define-properties: 1.2.1 3173 | es-errors: 1.3.0 3174 | get-proto: 1.0.1 3175 | gopd: 1.2.0 3176 | set-function-name: 2.0.2 3177 | 3178 | resolve-from@4.0.0: {} 3179 | 3180 | resolve-pkg-maps@1.0.0: {} 3181 | 3182 | resolve@1.22.10: 3183 | dependencies: 3184 | is-core-module: 2.16.1 3185 | path-parse: 1.0.7 3186 | supports-preserve-symlinks-flag: 1.0.0 3187 | 3188 | resolve@2.0.0-next.5: 3189 | dependencies: 3190 | is-core-module: 2.16.1 3191 | path-parse: 1.0.7 3192 | supports-preserve-symlinks-flag: 1.0.0 3193 | 3194 | reusify@1.0.4: {} 3195 | 3196 | run-parallel@1.2.0: 3197 | dependencies: 3198 | queue-microtask: 1.2.3 3199 | 3200 | safe-array-concat@1.1.3: 3201 | dependencies: 3202 | call-bind: 1.0.8 3203 | call-bound: 1.0.3 3204 | get-intrinsic: 1.2.7 3205 | has-symbols: 1.1.0 3206 | isarray: 2.0.5 3207 | 3208 | safe-push-apply@1.0.0: 3209 | dependencies: 3210 | es-errors: 1.3.0 3211 | isarray: 2.0.5 3212 | 3213 | safe-regex-test@1.1.0: 3214 | dependencies: 3215 | call-bound: 1.0.3 3216 | es-errors: 1.3.0 3217 | is-regex: 1.2.1 3218 | 3219 | scheduler@0.25.0: {} 3220 | 3221 | semver@6.3.1: {} 3222 | 3223 | semver@7.7.1: {} 3224 | 3225 | set-function-length@1.2.2: 3226 | dependencies: 3227 | define-data-property: 1.1.4 3228 | es-errors: 1.3.0 3229 | function-bind: 1.1.2 3230 | get-intrinsic: 1.2.7 3231 | gopd: 1.2.0 3232 | has-property-descriptors: 1.0.2 3233 | 3234 | set-function-name@2.0.2: 3235 | dependencies: 3236 | define-data-property: 1.1.4 3237 | es-errors: 1.3.0 3238 | functions-have-names: 1.2.3 3239 | has-property-descriptors: 1.0.2 3240 | 3241 | set-proto@1.0.0: 3242 | dependencies: 3243 | dunder-proto: 1.0.1 3244 | es-errors: 1.3.0 3245 | es-object-atoms: 1.1.1 3246 | 3247 | sharp@0.33.5: 3248 | dependencies: 3249 | color: 4.2.3 3250 | detect-libc: 2.0.3 3251 | semver: 7.7.1 3252 | optionalDependencies: 3253 | '@img/sharp-darwin-arm64': 0.33.5 3254 | '@img/sharp-darwin-x64': 0.33.5 3255 | '@img/sharp-libvips-darwin-arm64': 1.0.4 3256 | '@img/sharp-libvips-darwin-x64': 1.0.4 3257 | '@img/sharp-libvips-linux-arm': 1.0.5 3258 | '@img/sharp-libvips-linux-arm64': 1.0.4 3259 | '@img/sharp-libvips-linux-s390x': 1.0.4 3260 | '@img/sharp-libvips-linux-x64': 1.0.4 3261 | '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 3262 | '@img/sharp-libvips-linuxmusl-x64': 1.0.4 3263 | '@img/sharp-linux-arm': 0.33.5 3264 | '@img/sharp-linux-arm64': 0.33.5 3265 | '@img/sharp-linux-s390x': 0.33.5 3266 | '@img/sharp-linux-x64': 0.33.5 3267 | '@img/sharp-linuxmusl-arm64': 0.33.5 3268 | '@img/sharp-linuxmusl-x64': 0.33.5 3269 | '@img/sharp-wasm32': 0.33.5 3270 | '@img/sharp-win32-ia32': 0.33.5 3271 | '@img/sharp-win32-x64': 0.33.5 3272 | optional: true 3273 | 3274 | shebang-command@2.0.0: 3275 | dependencies: 3276 | shebang-regex: 3.0.0 3277 | 3278 | shebang-regex@3.0.0: {} 3279 | 3280 | side-channel-list@1.0.0: 3281 | dependencies: 3282 | es-errors: 1.3.0 3283 | object-inspect: 1.13.4 3284 | 3285 | side-channel-map@1.0.1: 3286 | dependencies: 3287 | call-bound: 1.0.3 3288 | es-errors: 1.3.0 3289 | get-intrinsic: 1.2.7 3290 | object-inspect: 1.13.4 3291 | 3292 | side-channel-weakmap@1.0.2: 3293 | dependencies: 3294 | call-bound: 1.0.3 3295 | es-errors: 1.3.0 3296 | get-intrinsic: 1.2.7 3297 | object-inspect: 1.13.4 3298 | side-channel-map: 1.0.1 3299 | 3300 | side-channel@1.1.0: 3301 | dependencies: 3302 | es-errors: 1.3.0 3303 | object-inspect: 1.13.4 3304 | side-channel-list: 1.0.0 3305 | side-channel-map: 1.0.1 3306 | side-channel-weakmap: 1.0.2 3307 | 3308 | signal-exit@4.1.0: {} 3309 | 3310 | simple-swizzle@0.2.2: 3311 | dependencies: 3312 | is-arrayish: 0.3.2 3313 | optional: true 3314 | 3315 | source-map-js@1.2.1: {} 3316 | 3317 | stable-hash@0.0.4: {} 3318 | 3319 | streamsearch@1.1.0: {} 3320 | 3321 | string-width@4.2.3: 3322 | dependencies: 3323 | emoji-regex: 8.0.0 3324 | is-fullwidth-code-point: 3.0.0 3325 | strip-ansi: 6.0.1 3326 | 3327 | string-width@5.1.2: 3328 | dependencies: 3329 | eastasianwidth: 0.2.0 3330 | emoji-regex: 9.2.2 3331 | strip-ansi: 7.1.0 3332 | 3333 | string.prototype.includes@2.0.1: 3334 | dependencies: 3335 | call-bind: 1.0.8 3336 | define-properties: 1.2.1 3337 | es-abstract: 1.23.9 3338 | 3339 | string.prototype.matchall@4.0.12: 3340 | dependencies: 3341 | call-bind: 1.0.8 3342 | call-bound: 1.0.3 3343 | define-properties: 1.2.1 3344 | es-abstract: 1.23.9 3345 | es-errors: 1.3.0 3346 | es-object-atoms: 1.1.1 3347 | get-intrinsic: 1.2.7 3348 | gopd: 1.2.0 3349 | has-symbols: 1.1.0 3350 | internal-slot: 1.1.0 3351 | regexp.prototype.flags: 1.5.4 3352 | set-function-name: 2.0.2 3353 | side-channel: 1.1.0 3354 | 3355 | string.prototype.repeat@1.0.0: 3356 | dependencies: 3357 | define-properties: 1.2.1 3358 | es-abstract: 1.23.9 3359 | 3360 | string.prototype.trim@1.2.10: 3361 | dependencies: 3362 | call-bind: 1.0.8 3363 | call-bound: 1.0.3 3364 | define-data-property: 1.1.4 3365 | define-properties: 1.2.1 3366 | es-abstract: 1.23.9 3367 | es-object-atoms: 1.1.1 3368 | has-property-descriptors: 1.0.2 3369 | 3370 | string.prototype.trimend@1.0.9: 3371 | dependencies: 3372 | call-bind: 1.0.8 3373 | call-bound: 1.0.3 3374 | define-properties: 1.2.1 3375 | es-object-atoms: 1.1.1 3376 | 3377 | string.prototype.trimstart@1.0.8: 3378 | dependencies: 3379 | call-bind: 1.0.8 3380 | define-properties: 1.2.1 3381 | es-object-atoms: 1.1.1 3382 | 3383 | strip-ansi@6.0.1: 3384 | dependencies: 3385 | ansi-regex: 5.0.1 3386 | 3387 | strip-ansi@7.1.0: 3388 | dependencies: 3389 | ansi-regex: 6.1.0 3390 | 3391 | strip-bom@3.0.0: {} 3392 | 3393 | strip-json-comments@3.1.1: {} 3394 | 3395 | styled-jsx@5.1.6(react@19.0.0): 3396 | dependencies: 3397 | client-only: 0.0.1 3398 | react: 19.0.0 3399 | 3400 | sucrase@3.35.0: 3401 | dependencies: 3402 | '@jridgewell/gen-mapping': 0.3.8 3403 | commander: 4.1.1 3404 | glob: 10.4.5 3405 | lines-and-columns: 1.2.4 3406 | mz: 2.7.0 3407 | pirates: 4.0.6 3408 | ts-interface-checker: 0.1.13 3409 | 3410 | supports-color@7.2.0: 3411 | dependencies: 3412 | has-flag: 4.0.0 3413 | 3414 | supports-preserve-symlinks-flag@1.0.0: {} 3415 | 3416 | tailwindcss@3.4.17: 3417 | dependencies: 3418 | '@alloc/quick-lru': 5.2.0 3419 | arg: 5.0.2 3420 | chokidar: 3.6.0 3421 | didyoumean: 1.2.2 3422 | dlv: 1.1.3 3423 | fast-glob: 3.3.3 3424 | glob-parent: 6.0.2 3425 | is-glob: 4.0.3 3426 | jiti: 1.21.7 3427 | lilconfig: 3.1.3 3428 | micromatch: 4.0.8 3429 | normalize-path: 3.0.0 3430 | object-hash: 3.0.0 3431 | picocolors: 1.1.1 3432 | postcss: 8.5.1 3433 | postcss-import: 15.1.0(postcss@8.5.1) 3434 | postcss-js: 4.0.1(postcss@8.5.1) 3435 | postcss-load-config: 4.0.2(postcss@8.5.1) 3436 | postcss-nested: 6.2.0(postcss@8.5.1) 3437 | postcss-selector-parser: 6.1.2 3438 | resolve: 1.22.10 3439 | sucrase: 3.35.0 3440 | transitivePeerDependencies: 3441 | - ts-node 3442 | 3443 | tapable@2.2.1: {} 3444 | 3445 | thenify-all@1.6.0: 3446 | dependencies: 3447 | thenify: 3.3.1 3448 | 3449 | thenify@3.3.1: 3450 | dependencies: 3451 | any-promise: 1.3.0 3452 | 3453 | to-regex-range@5.0.1: 3454 | dependencies: 3455 | is-number: 7.0.0 3456 | 3457 | ts-api-utils@2.0.1(typescript@5.7.3): 3458 | dependencies: 3459 | typescript: 5.7.3 3460 | 3461 | ts-interface-checker@0.1.13: {} 3462 | 3463 | tsconfig-paths@3.15.0: 3464 | dependencies: 3465 | '@types/json5': 0.0.29 3466 | json5: 1.0.2 3467 | minimist: 1.2.8 3468 | strip-bom: 3.0.0 3469 | 3470 | tslib@2.8.1: {} 3471 | 3472 | type-check@0.4.0: 3473 | dependencies: 3474 | prelude-ls: 1.2.1 3475 | 3476 | typed-array-buffer@1.0.3: 3477 | dependencies: 3478 | call-bound: 1.0.3 3479 | es-errors: 1.3.0 3480 | is-typed-array: 1.1.15 3481 | 3482 | typed-array-byte-length@1.0.3: 3483 | dependencies: 3484 | call-bind: 1.0.8 3485 | for-each: 0.3.4 3486 | gopd: 1.2.0 3487 | has-proto: 1.2.0 3488 | is-typed-array: 1.1.15 3489 | 3490 | typed-array-byte-offset@1.0.4: 3491 | dependencies: 3492 | available-typed-arrays: 1.0.7 3493 | call-bind: 1.0.8 3494 | for-each: 0.3.4 3495 | gopd: 1.2.0 3496 | has-proto: 1.2.0 3497 | is-typed-array: 1.1.15 3498 | reflect.getprototypeof: 1.0.10 3499 | 3500 | typed-array-length@1.0.7: 3501 | dependencies: 3502 | call-bind: 1.0.8 3503 | for-each: 0.3.4 3504 | gopd: 1.2.0 3505 | is-typed-array: 1.1.15 3506 | possible-typed-array-names: 1.1.0 3507 | reflect.getprototypeof: 1.0.10 3508 | 3509 | typescript@5.7.3: {} 3510 | 3511 | unbox-primitive@1.1.0: 3512 | dependencies: 3513 | call-bound: 1.0.3 3514 | has-bigints: 1.1.0 3515 | has-symbols: 1.1.0 3516 | which-boxed-primitive: 1.1.1 3517 | 3518 | undici-types@6.19.8: {} 3519 | 3520 | uri-js@4.4.1: 3521 | dependencies: 3522 | punycode: 2.3.1 3523 | 3524 | util-deprecate@1.0.2: {} 3525 | 3526 | which-boxed-primitive@1.1.1: 3527 | dependencies: 3528 | is-bigint: 1.1.0 3529 | is-boolean-object: 1.2.2 3530 | is-number-object: 1.1.1 3531 | is-string: 1.1.1 3532 | is-symbol: 1.1.1 3533 | 3534 | which-builtin-type@1.2.1: 3535 | dependencies: 3536 | call-bound: 1.0.3 3537 | function.prototype.name: 1.1.8 3538 | has-tostringtag: 1.0.2 3539 | is-async-function: 2.1.1 3540 | is-date-object: 1.1.0 3541 | is-finalizationregistry: 1.1.1 3542 | is-generator-function: 1.1.0 3543 | is-regex: 1.2.1 3544 | is-weakref: 1.1.1 3545 | isarray: 2.0.5 3546 | which-boxed-primitive: 1.1.1 3547 | which-collection: 1.0.2 3548 | which-typed-array: 1.1.18 3549 | 3550 | which-collection@1.0.2: 3551 | dependencies: 3552 | is-map: 2.0.3 3553 | is-set: 2.0.3 3554 | is-weakmap: 2.0.2 3555 | is-weakset: 2.0.4 3556 | 3557 | which-typed-array@1.1.18: 3558 | dependencies: 3559 | available-typed-arrays: 1.0.7 3560 | call-bind: 1.0.8 3561 | call-bound: 1.0.3 3562 | for-each: 0.3.4 3563 | gopd: 1.2.0 3564 | has-tostringtag: 1.0.2 3565 | 3566 | which@2.0.2: 3567 | dependencies: 3568 | isexe: 2.0.0 3569 | 3570 | word-wrap@1.2.5: {} 3571 | 3572 | wrap-ansi@7.0.0: 3573 | dependencies: 3574 | ansi-styles: 4.3.0 3575 | string-width: 4.2.3 3576 | strip-ansi: 6.0.1 3577 | 3578 | wrap-ansi@8.1.0: 3579 | dependencies: 3580 | ansi-styles: 6.2.1 3581 | string-width: 5.1.2 3582 | strip-ansi: 7.1.0 3583 | 3584 | yaml@2.7.0: {} 3585 | 3586 | yocto-queue@0.1.0: {} 3587 | -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/globe.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pdf2docx 2 | python-docx 3 | spacy -------------------------------------------------------------------------------- /setup.ps1: -------------------------------------------------------------------------------- 1 | # Check if a command exists 2 | function Test-CommandExists { 3 | param ( 4 | [string]$Command 5 | ) 6 | $exists = $null -ne (Get-Command $Command -ErrorAction SilentlyContinue) 7 | return $exists 8 | } 9 | 10 | # Install Python on Windows 11 | function Install-PythonWindows { 12 | Write-Host "Attempting to install Python 3.11..." 13 | # Python installation on Windows should be done manually or through an installer 14 | Write-Host "Please install Python 3.11 manually from the official website." 15 | exit 16 | } 17 | 18 | # 1. Check if Python is installed 19 | if (-not (Test-CommandExists "python") -and -not (Test-CommandExists "python3")) { 20 | Write-Host "Python is not installed. Attempting to install..." 21 | Install-PythonWindows 22 | # Recheck if Python is installed 23 | if (-not (Test-CommandExists "python") -and -not (Test-CommandExists "python3")) { 24 | Write-Host "Python installation failed. Please install Python manually." 25 | exit 26 | } 27 | } else { 28 | Write-Host "Python is already installed." 29 | } 30 | 31 | # 2. Check if Flutter is installed 32 | if (-not (Test-CommandExists "flutter")) { 33 | Write-Host "Warning: If you want to build the GUI, you might need Flutter (optionally)." 34 | } 35 | 36 | # 3. Install requirements using pip 37 | try { 38 | pip install -r requirements.txt -ErrorAction Stop 39 | } catch { 40 | try { 41 | pip3 install -r requirements.txt -ErrorAction Stop 42 | } catch { 43 | Write-Host "Failed to install requirements with pip and pip3. Attempting to install pip..." 44 | python -m ensurepip 45 | if ($LASTEXITCODE -ne 0) { 46 | python3 -m ensurepip 47 | } 48 | if ($LASTEXITCODE -ne 0) { 49 | Write-Host "Failed to install pip. Please reinstall Python manually." 50 | exit 51 | } 52 | pip install -r requirements.txt 53 | } 54 | } 55 | 56 | # 4. Download spacy model 57 | try { 58 | python -m spacy download en_core_web_sm -ErrorAction Stop 59 | } catch { 60 | python3 -m spacy download en_core_web_sm 61 | if ($LASTEXITCODE -ne 0) { 62 | Write-Host "Failed to download spacy model. Please check your Python installation." 63 | exit 64 | } 65 | } 66 | 67 | # 5. Inform the user about the next steps 68 | Write-Host "To use the CLI, run the following command from the current directory:" 69 | Write-Host "python bionicpython/bionicpython.py ''" 70 | Write-Host "Remember to insert the path in quotes if it isn't already." -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup, find_packages 2 | 3 | setup( 4 | name='Your-Package-Name', 5 | version='0.1', 6 | packages=find_packages(), 7 | description='convert your pdfs and docx to bionic reading format.', 8 | author='Nathaniel', 9 | # author_email='your.email@example.com', 10 | url='https://github.com/nathfavour/bionicpython', 11 | install_requires=[ 12 | 'pdf2docx', 13 | 'python-docx', 14 | 'spacy', 15 | ], 16 | ) -------------------------------------------------------------------------------- /setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Function to check if command exists 4 | command_exists() { 5 | command -v "$1" >/dev/null 2>&1 6 | } 7 | 8 | # Function to install Python on macOS 9 | install_python_macos() { 10 | echo "Installing Python 3.11 using Homebrew..." 11 | brew install python@3.11 12 | } 13 | 14 | # Function to install Python on Linux 15 | install_python_linux() { 16 | echo "Installing Python 3.11 using apt..." 17 | sudo apt update 18 | sudo apt install python3.11 -y 19 | } 20 | 21 | # 1. Check if Python is installed 22 | if ! command_exists python && ! command_exists python3; then 23 | echo "Python is not installed. Attempting to install..." 24 | if [[ "$OSTYPE" == "darwin"* ]]; then 25 | install_python_macos 26 | else 27 | install_python_linux 28 | fi 29 | # Open a new terminal to check if installation was successful 30 | if ! command_exists python && ! command_exists python3; then 31 | echo "Python installation failed. Please install Python manually." 32 | exit 1 33 | fi 34 | else 35 | echo "Python is already installed." 36 | fi 37 | 38 | # 2. Check if Flutter is installed 39 | if ! command_exists flutter; then 40 | echo "Warning: If you want to build the GUI, you might need Flutter (optionally)." 41 | fi 42 | 43 | # 3. Install requirements using pip 44 | open_new_terminal_and_run() { 45 | if [[ "$OSTYPE" == "darwin"* ]]; then 46 | osascript -e 'tell app "Terminal" to do script "'"$1"'"' 47 | else 48 | x-terminal-emulator -e $1 49 | fi 50 | } 51 | 52 | open_new_terminal_and_run " 53 | if ! pip install -r requirements.txt && ! pip3 install -r requirements.txt; then 54 | if ! command_exists pip; then 55 | python -m ensurepip || python3 -m ensurepip 56 | fi 57 | if ! pip install -r requirements.txt && ! pip3 install -r requirements.txt; then 58 | echo 'Failed to install requirements. Please reinstall Python manually.' 59 | exit 1 60 | fi 61 | fi 62 | " 63 | 64 | # 4. Download spacy model 65 | if ! python -m spacy download en_core_web_sm && ! python3 -m spacy download en_core_web_sm; then 66 | echo "Failed to download spacy model. Please check your Python installation." 67 | exit 1 68 | fi 69 | 70 | # 5. Inform the user about the next steps 71 | echo "To use the CLI, run the following command from the current directory:" 72 | echo "python bionicpython/bionicpython.py ''" 73 | echo "Remember to insert the path in quotes if it isn't already." -------------------------------------------------------------------------------- /src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nathfavour/bionicpython/ecc18760935cf22dc2b5769d830902db990390fc/src/app/favicon.ico -------------------------------------------------------------------------------- /src/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --background: #ffffff; 7 | --foreground: #171717; 8 | } 9 | 10 | @media (prefers-color-scheme: dark) { 11 | :root { 12 | --background: #0a0a0a; 13 | --foreground: #ededed; 14 | } 15 | } 16 | 17 | body { 18 | color: var(--foreground); 19 | background: var(--background); 20 | font-family: Arial, Helvetica, sans-serif; 21 | } 22 | -------------------------------------------------------------------------------- /src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { Metadata } from "next"; 2 | import { Geist, Geist_Mono } from "next/font/google"; 3 | import "./globals.css"; 4 | 5 | const geistSans = Geist({ 6 | variable: "--font-geist-sans", 7 | subsets: ["latin"], 8 | }); 9 | 10 | const geistMono = Geist_Mono({ 11 | variable: "--font-geist-mono", 12 | subsets: ["latin"], 13 | }); 14 | 15 | export const metadata: Metadata = { 16 | title: "Create Next App", 17 | description: "Generated by create next app", 18 | }; 19 | 20 | export default function RootLayout({ 21 | children, 22 | }: Readonly<{ 23 | children: React.ReactNode; 24 | }>) { 25 | return ( 26 | 27 | 30 | {children} 31 | 32 | 33 | ); 34 | } 35 | -------------------------------------------------------------------------------- /src/app/page.tsx: -------------------------------------------------------------------------------- 1 | import Image from "next/image"; 2 | 3 | export default function Home() { 4 | return ( 5 |
6 |
7 | Next.js logo 15 |
    16 |
  1. 17 | Get started by editing{" "} 18 | 19 | src/app/page.tsx 20 | 21 | . 22 |
  2. 23 |
  3. Save and see your changes instantly.
  4. 24 |
25 | 26 | 51 |
52 | 99 |
100 | ); 101 | } 102 | -------------------------------------------------------------------------------- /tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from "tailwindcss"; 2 | 3 | export default { 4 | content: [ 5 | "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./src/components/**/*.{js,ts,jsx,tsx,mdx}", 7 | "./src/app/**/*.{js,ts,jsx,tsx,mdx}", 8 | ], 9 | theme: { 10 | extend: { 11 | colors: { 12 | background: "var(--background)", 13 | foreground: "var(--foreground)", 14 | }, 15 | }, 16 | }, 17 | plugins: [], 18 | } satisfies Config; 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2017", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "noEmit": true, 9 | "esModuleInterop": true, 10 | "module": "esnext", 11 | "moduleResolution": "bundler", 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "jsx": "preserve", 15 | "incremental": true, 16 | "plugins": [ 17 | { 18 | "name": "next" 19 | } 20 | ], 21 | "paths": { 22 | "@/*": ["./src/*"] 23 | } 24 | }, 25 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", "../next.config.ts"], 26 | "exclude": ["node_modules"] 27 | } 28 | --------------------------------------------------------------------------------