├── .github └── workflows │ └── deploy.yml ├── .gitignore ├── LICENSE.md ├── README.md ├── composer.json ├── docs ├── .vitepress │ └── config.mts ├── contribute │ ├── contribution.md │ └── report-bugs.md ├── getting-started │ ├── changelog.md │ ├── installation.md │ └── versions.md ├── home.md ├── index.md ├── methods │ └── strings.md ├── public │ ├── css │ │ └── style.css │ └── img │ │ ├── laravel-red.svg │ │ ├── laravel_black.svg │ │ ├── logo-full-scream.png │ │ ├── logo-github.png │ │ └── logo.png └── usage │ ├── default-classes.md │ ├── global-functions.md │ └── personalized-classes.md ├── package-lock.json ├── package.json └── src ├── Bases └── BaseHelpers.php ├── Commands ├── CreateHelpers.php ├── CreateHelpersFunctions.php ├── GenerateHelpers.php └── Traits │ └── CommandUtilities.php ├── Helpers.php ├── Native ├── LaravelArray.php ├── LaravelDate.php ├── LaravelFile.php ├── LaravelNumber.php └── LaravelStrings.php ├── Providers └── HelpersServiceProvider.php └── Stubs ├── Arr.stub ├── Custom.stub ├── Date.stub ├── File.stub ├── Functions.stub ├── Number.stub └── Str.stub /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy VitePress site to Pages 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | 7 | # Allows you to run this workflow manually from the Actions tab 8 | workflow_dispatch: 9 | 10 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 11 | permissions: 12 | contents: read 13 | pages: write 14 | id-token: write 15 | 16 | # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. 17 | # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. 18 | concurrency: 19 | group: pages 20 | cancel-in-progress: false 21 | 22 | jobs: 23 | # Build job 24 | build: 25 | runs-on: ubuntu-latest 26 | steps: 27 | - name: Checkout 28 | uses: actions/checkout@v3 29 | with: 30 | fetch-depth: 0 # Not needed if lastUpdated is not enabled 31 | # - uses: pnpm/action-setup@v2 # Uncomment this if you're using pnpm 32 | # - uses: oven-sh/setup-bun@v1 # Uncomment this if you're using Bun 33 | - name: Setup Node 34 | uses: actions/setup-node@v3 35 | with: 36 | node-version: 18 37 | cache: npm # or pnpm / yarn 38 | - name: Setup Pages 39 | uses: actions/configure-pages@v3 40 | - name: Install dependencies 41 | run: npm ci # or pnpm install / yarn install / bun install 42 | - name: Build with VitePress 43 | run: | 44 | npm run docs:build # or pnpm docs:build / yarn docs:build / bun run docs:build 45 | touch docs/.vitepress/dist/.nojekyll 46 | - name: Upload artifact 47 | uses: actions/upload-pages-artifact@v2 48 | with: 49 | path: docs/.vitepress/dist 50 | 51 | # Deployment job 52 | deploy: 53 | environment: 54 | name: github-pages 55 | url: ${{ steps.deployment.outputs.page_url }} 56 | needs: build 57 | runs-on: ubuntu-latest 58 | name: Deploy 59 | steps: 60 | - name: Deploy to GitHub Pages 61 | id: deployment 62 | uses: actions/deploy-pages@v2 63 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore common macOS files and directories 2 | **/.DS_Store 3 | 4 | # Ignore automatically generated files and directories 5 | /vendor/ 6 | /.fleet 7 | /.idea 8 | /.vscode 9 | 10 | 11 | # Ignore Composer generated directory and files 12 | /vendor 13 | composer.lock 14 | node_modules 15 | docs/.vitepress/cache 16 | docs/.vitepress/dist 17 | docs/.vitepress/.temp 18 | 19 | # Ignore development tool generated files and directories 20 | .fleet 21 | .idea 22 | .vscode 23 | 24 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Raúl Mauricio Uñate Castro 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. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🚀 Laravel Helpers 🚀 2 | 3 | ![Logo-laravel_helpers](https://github.com/alejandrodiazpinilla/LaravelHelpers/assets/51100789/196c643d-a5f7-4c23-be17-275610608fef) 4 | 5 | 6 | For many years, I have used Laravel, and I believe it is the framework that breathes the best life into PHP. However, the creation of Helpers has not been standardized within this framework. Thus, I decided to create a standard and implement it across the various systems and companies I have worked with. Today, many colleagues have decided to support this initiative and create a package that becomes a powerful feature in Laravel. 7 | 8 | Our solution offers a simple, efficient, and elegant way to execute your application's custom methods from any class or view, making development much easier. Enhance your Laravel project while maintaining the elegance and cleanliness of your code with this package. 9 | 10 | We have oriented the entire use of Helpers towards classes and, most importantly, centralized the existing Laravel helpers through the categories of this package. We include native Laravel functionalities accessible through classes like `Str::` and `Arr::`. Other helpers that are not accessed via classes but as functions should continue to be used as presented in Laravel's official documentation. 11 | 12 | It's time to standardize how we create and use helpers in our projects. 13 | 14 | ## Documentation 15 | [![📖📖📖 **FULL DOCUMENTATION** 📖📖📖](https://img.shields.io/badge/FULL%20DOCUMENTATION-Visit%20Here-blue?style=for-the-badge)](https://rmunate.github.io/LaravelHelpers/) 16 | 17 | ## Installation 18 | 19 | ### Requirements 20 | 21 | To use this solution, ensure the following: 22 | 23 | **PHP:** Version 8.0 or higher 24 | 25 | **Laravel Framework:** Version 10.0 or higher 26 | 27 | To install the dependency via **composer**, run the following command: 28 | 29 | ```shell 30 | composer require rmunate/laravel_helpers 31 | ``` 32 | 33 | This will download the latest available version of the package. 34 | 35 | Ensure that in your `composer.json`, you have the library listed with the latest version: `"rmunate/laravel_helpers": "^3.0"` 36 | 37 | 38 | ## License 39 | This project is under the [MIT License](https://choosealicense.com/licenses/mit/). 40 | 41 | 🌟 Support My Projects! 🚀 42 | 43 | [![Become a Sponsor](https://img.shields.io/badge/-Become%20a%20Sponsor-blue?style=for-the-badge&logo=github)](https://github.com/sponsors/rmunate) 44 | 45 | Make any contributions you see fit; the code is entirely yours. Together, we can do amazing things and improve the world of development. Your support is invaluable. ✨ 46 | 47 | If you have ideas, suggestions, or just want to collaborate, we are open to everything! Join our community and be part of our journey to success! 🌐👩‍💻👨‍💻 48 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rmunate/laravel_helpers", 3 | "description": "Empower Your Laravel Journey: Unleash the Power of Helpers! Unlock a world of possibilities with our standard creation and seamless utilization of helpers within the Laravel framework. Our solution offers a simple, efficient, and elegant way to execute your application's custom methods from any class or view, making development a breeze. Supercharge your Laravel project and elevate your coding experience with our Helper Library.", 4 | "keywords": [ 5 | "rmunate", 6 | "artisan", 7 | "laravel", 8 | "helpers" 9 | ], 10 | "homepage": "https://github.com/rmunate/LaravelHelpers", 11 | "type": "library", 12 | "license": "MIT", 13 | "autoload": { 14 | "psr-4": { 15 | "Helpers\\Illuminate\\Support\\": "src/" 16 | }, 17 | "files": [ 18 | "src/Helpers.php" 19 | ] 20 | }, 21 | "authors": [ 22 | { 23 | "name": "Raul Mauricio Uñate Castro", 24 | "email": "raulmauriciounate@gmail.com", 25 | "homepage": "https://github.com/rmunate", 26 | "role": "owner" 27 | } 28 | ], 29 | "require": { 30 | "php": "^8.0", 31 | "illuminate/support": "^11.0|^12.0", 32 | "illuminate/console": "^11.0|^12.0" 33 | }, 34 | "require-dev": {}, 35 | "extra": { 36 | "branch-alias": { 37 | "dev-master": "1.0.x-dev" 38 | }, 39 | "laravel": { 40 | "providers": [ 41 | "Helpers\\Illuminate\\Support\\Providers\\HelpersServiceProvider" 42 | ] 43 | } 44 | }, 45 | "minimum-stability": "dev", 46 | "prefer-stable": true 47 | } 48 | -------------------------------------------------------------------------------- /docs/.vitepress/config.mts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitepress' 2 | 3 | export default defineConfig({ 4 | title: "Laravel Helpers", 5 | description: "Your own integrated solutions with Laravel's Core! 💻✨", 6 | lang: 'en-US', 7 | lastUpdated: true, 8 | base: '/LaravelHelpers', 9 | themeConfig: { 10 | footer: { 11 | message: 'Released under the MIT License.', 12 | copyright: 'Copyright © 2021-2024 Raul Mauricio Uñate' 13 | }, 14 | editLink: { 15 | pattern: 'https://github.com/rmunate/LaravelHelpers/tree/main/docs/:path' 16 | }, 17 | logo: '/img/logo.png', 18 | nav: [ 19 | { 20 | text: 'Docs ^3.0', 21 | link: '/', 22 | } 23 | ], 24 | sidebar: [ 25 | { 26 | text: 'Getting Started', 27 | collapsed: false, 28 | items: [ 29 | {text: 'Introduction', link: '/home'}, 30 | {text: 'Installation', link: '/getting-started/installation'}, 31 | {text: 'Versions', link: '/getting-started/versions'}, 32 | {text: 'Release Notes', link: '/getting-started/changelog'}, 33 | ] 34 | }, { 35 | text: 'Usage', 36 | collapsed: true, 37 | items: [ 38 | {text: 'Default Classes', link: '/usage/default-classes'}, 39 | {text: 'Personalized Classes', link: '/usage/personalized-classes'}, 40 | {text: 'Global Functions', link: '/usage/global-functions'} 41 | ] 42 | }, { 43 | text: 'Added Methods', 44 | collapsed: true, 45 | items: [ 46 | {text: 'Strings', link: '/methods/strings'} 47 | ] 48 | },{ 49 | text: 'Contribute', 50 | collapsed: true, 51 | items: [ 52 | {text: 'Bug Report', link: '/contribute/report-bugs'}, 53 | {text: 'Contribution', link: '/contribute/contribution'} 54 | ] 55 | } 56 | ], 57 | socialLinks: [ 58 | {icon: 'github', link: 'https://github.com/rmunate/LaravelHelpers'} 59 | ], 60 | search: { 61 | provider: 'local' 62 | } 63 | }, 64 | head: [ 65 | ['link', { 66 | rel: 'stylesheet', 67 | href: '/LaravelHelpers/css/style.css' 68 | } 69 | ], 70 | ['link', { 71 | rel: 'icon', 72 | href: '/LaravelHelpers/img/logo.png', 73 | type: 'image/png' 74 | } 75 | ], 76 | ['meta', { 77 | property: 'og:image', 78 | content: '/LaravelHelpers/img/logo-github.png' 79 | } 80 | ], 81 | ['meta', { 82 | property: 'og:image:secure_url', 83 | content: '/LaravelHelpers/img/logo-github.png' 84 | } 85 | ], 86 | ['meta', { 87 | property: 'og:image:width', 88 | content: '600' 89 | } 90 | ], 91 | ['meta', { 92 | property: 'og:image:height', 93 | content: '400' 94 | } 95 | ], 96 | ['meta', { 97 | property: 'og:title', 98 | content: 'Laravel Helpers' 99 | } 100 | ], 101 | ['meta', { 102 | property: 'og:description', 103 | content: "Your own integrated solutions with Laravel's Core! 💻✨" 104 | } 105 | ], 106 | ['meta', { 107 | property: 'og:url', 108 | content: 'https://rmunate.github.io/LaravelHelpers/' 109 | } 110 | ], 111 | ['meta', { 112 | property: 'og:type', 113 | content: 'website' 114 | } 115 | ] 116 | ], 117 | 118 | }) -------------------------------------------------------------------------------- /docs/contribute/contribution.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Contributing 3 | editLink: true 4 | outline: deep 5 | --- 6 | 7 | 49 | 50 | # Contributing 51 | 52 | ## How to Contribute to this Solution? 53 | 54 | If you see ways in which we can improve, change how we handle information, adjust pre-built blocks, or add new features, or even develop them yourself and add them. 55 | 56 | We are eager to receive your pull requests! 57 | 58 | Simply fork the repository on GitHub and create pull requests (PRs) to the main branch once you have prepared your changes. 59 | 60 | It is essential to provide a clear justification for the changes or new features, accompanied by a usage manual. 61 | 62 | ::: tip TEST 63 | Remember to test your code before submitting pull requests. 64 | ::: 65 | 66 | ## Developers and Contributors 67 | 68 | 69 | 70 | ## License 71 | This project is under the [MIT License](https://choosealicense.com/licenses/mit/). 72 | 73 | 🌟 Support My Projects! 🚀 74 | 75 | [![Become a Sponsor](https://img.shields.io/badge/-Become%20a%20Sponsor-blue?style=for-the-badge&logo=github)](https://github.com/sponsors/rmunate) 76 | 77 | Make any contributions you see fit; the code is entirely yours. Together, we can do amazing things and improve the world of development. Your support is invaluable. ✨ 78 | 79 | If you have ideas, suggestions, or just want to collaborate, we are open to everything! Join our community and be part of our journey to success! 🌐👩‍💻👨‍💻 -------------------------------------------------------------------------------- /docs/contribute/report-bugs.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Bug Report 3 | editLink: true 4 | outline: deep 5 | --- 6 | 7 | # Bug Report 8 | 9 | If you find errors or opportunities within the package, you can create an incident that we will attend to in the shortest time possible. 10 | 11 | Here!: 12 | [https://github.com/rmunate/LaravelHelpers/issues/new](https://github.com/rmunate/LaravelHelpers/issues/new) 13 | 14 | Remember that you can also contribute as a collaborator of this solution. 15 | -------------------------------------------------------------------------------- /docs/getting-started/changelog.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Release Notes 3 | editLink: true 4 | outline: deep 5 | --- 6 | 7 | ::: warning We strongly recommend migrating to the current version 8 | If you have applications using previous versions, we highly recommend migrating to the current version. Please note that the current version does not support functionalities from earlier versions as its source code has been completely rewritten. 9 | ::: 10 | 11 | # Release Notes 12 | 13 | ## [3.0.0] - 2024-05-27 14 | 15 | ### Changed 16 | 17 | - Adjusted the handling of Laravel's native helpers by adding the `Number` class, which is currently included in the Laravel core. 18 | 19 | ### Removed 20 | 21 | - Removed the `Helper` class that functioned as a dynamic accessor to the classes defined within the Helpers folder. 22 | -------------------------------------------------------------------------------- /docs/getting-started/installation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Installation 3 | editLink: true 4 | outline: deep 5 | --- 6 | 7 | # Installation 8 | 9 | ## Requirements 10 | 11 | To use this solution, ensure the following: 12 | 13 | **PHP:** Version 8.0 or higher 14 | 15 | **Laravel Framework:** Version 10.0 or higher 16 | 17 | ## Installation 18 | 19 | To install the dependency via **composer**, run the following command: 20 | 21 | ```shell 22 | composer require rmunate/laravel_helpers 23 | ``` 24 | 25 | This will download the latest available version of the package. 26 | 27 | Ensure that in your `composer.json`, you have the library listed with the latest version: `"rmunate/laravel_helpers": "^3.0"` 28 | -------------------------------------------------------------------------------- /docs/getting-started/versions.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Versions 3 | editLink: true 4 | outline: deep 5 | --- 6 | 7 | # Versions 8 | 9 | During the development of this solution, multiple tool versions were released. It's crucial to note that previous versions are NOT compatible with the latest update. This documentation is tailored specifically for the usage of the current version. 10 | 11 | We highly recommend migrating from older versions to the latest release, as no support is provided for any previous versions. 12 | 13 | | Version | Release Date | End of Support Date | 14 | |--------------------------------------------------------|--------------|---------------------| 15 | | ^0.1   | 2021-10-21 | 2021-12-31 | 16 | | ^1.0   | 2021-11-13 | 2023-01-15 | 17 | | ^2.0   | 2022-10-05 | 2024-05-27 | 18 | | ^3.0   | 2024-05-27 | 2024-12-31 | 19 | -------------------------------------------------------------------------------- /docs/home.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Introduction 3 | editLink: true 4 | outline: deep 5 | --- 6 | 7 | ![logo-spell-number](/img/logo-full-scream.png) 8 | 9 | ## Introduction 10 | 11 | For many years, I have used Laravel, and I believe it is the framework that breathes the best life into PHP. However, the creation of Helpers has not been standardized within this framework. Thus, I decided to create a standard and implement it across the various systems and companies I have worked with. Today, many colleagues have decided to support this initiative and create a package that becomes a powerful feature in Laravel. 12 | 13 | Our solution offers a simple, efficient, and elegant way to execute your application's custom methods from any class or view, making development much easier. Enhance your Laravel project while maintaining the elegance and cleanliness of your code with this package. 14 | 15 | We have oriented the entire use of Helpers towards classes and, most importantly, centralized the existing Laravel helpers through the categories of this package. We include native Laravel functionalities accessible through classes like `Str::` and `Arr::`. Other helpers that are not accessed via classes but as functions should continue to be used as presented in Laravel's official documentation. 16 | 17 | It's time to standardize how we create and use helpers in our projects. -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: home 3 | 4 | hero: 5 | name: Laravel 6 | text: Helpers 7 | tagline: Your own integrated solutions with Laravel's Core! 💻✨ 8 | image: 9 | src: img/logo.png 10 | alt: VitePress 11 | actions: 12 | - theme: brand 13 | text: Get Started 14 | link: /home 15 | - theme: alt 16 | text: View on GitHub 17 | link: https://github.com/rmunate/LaravelHelpers 18 | 19 | features: 20 | - icon: 🌐 21 | title: Standardize Helper Usage in Your Project 22 | details: Establish a consistent standard for creating and using helpers in your Laravel projects. Define a clear structure for creating and calling them within your project. 23 | - icon: 🚀 24 | title: Add Your Own Solutions 25 | details: Imagine Laravel adding all your personal solutions. While it's challenging for maintainers to accept numerous features, it's time for the community to contribute and enhance the ecosystem. 26 | - icon: 📢 27 | title: Easy Invocation 28 | details: Utilize the same class names exposed by Laravel with the added convenience of being readily accessible in your project. 29 | --- -------------------------------------------------------------------------------- /docs/methods/strings.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: String Helper Methods 3 | editLink: true 4 | outline: deep 5 | --- 6 | 7 | # String Helper Methods 8 | 9 | The `Str` class provides various static methods for checking the characteristics of strings. Below is the documentation for each available method. 10 | 11 | ### `isAlphanumeric` 12 | 13 | Checks if a string contains only alphanumeric characters (letters and numbers). 14 | 15 | #### Parameters 16 | 17 | - `string $string`: The string to check. 18 | 19 | #### Returns 20 | 21 | - `bool`: `True` if the string is alphanumeric, `false` otherwise. 22 | 23 | #### Example 24 | 25 | ```php 26 | use App\Helpers\Str; 27 | 28 | $result = Str::isAlphanumeric('abc123'); // True 29 | $result = Str::isAlphanumeric('abc 123'); // False 30 | ``` 31 | 32 | ### `isAlpha` 33 | 34 | Checks if a string contains only alphabetic characters (letters). 35 | 36 | #### Parameters 37 | 38 | - `string $string`: The string to check. 39 | 40 | #### Returns 41 | 42 | - `bool`: `True` if the string is alphabetic, `false` otherwise. 43 | 44 | #### Example 45 | 46 | ```php 47 | use App\Helpers\Str; 48 | 49 | $result = Str::isAlpha('abc'); // True 50 | $result = Str::isAlpha('abc123'); // False 51 | ``` 52 | 53 | ### `isControl` 54 | 55 | Checks if a string contains control characters. 56 | 57 | #### Parameters 58 | 59 | - `string $string`: The string to check. 60 | 61 | #### Returns 62 | 63 | - `bool`: `True` if the string contains control characters, `false` otherwise. 64 | 65 | #### Example 66 | 67 | ```php 68 | use App\Helpers\Str; 69 | 70 | $result = Str::isControl("\n\r"); // True 71 | $result = Str::isControl('abc'); // False 72 | ``` 73 | 74 | ### `isDigit` 75 | 76 | Checks if a string contains only numeric characters (digits). 77 | 78 | #### Parameters 79 | 80 | - `string $string`: The string to check. 81 | 82 | #### Returns 83 | 84 | - `bool`: `True` if the string contains only numeric characters, `false` otherwise. 85 | 86 | #### Example 87 | 88 | ```php 89 | use App\Helpers\Str; 90 | 91 | $result = Str::isDigit('12345'); // True 92 | $result = Str::isDigit('123a45'); // False 93 | ``` 94 | 95 | ### `isGraph` 96 | 97 | Checks if a string contains only printable characters excluding spaces. 98 | 99 | #### Parameters 100 | 101 | - `string $string`: The string to check. 102 | 103 | #### Returns 104 | 105 | - `bool`: `True` if the string contains only printable characters excluding spaces, `false` otherwise. 106 | 107 | #### Example 108 | 109 | ```php 110 | use App\Helpers\Str; 111 | 112 | $result = Str::isGraph('abc123!@#'); // True 113 | $result = Str::isGraph('abc 123'); // False 114 | ``` 115 | 116 | ### `isLower` 117 | 118 | Checks if a string contains only lowercase alphabetic characters. 119 | 120 | #### Parameters 121 | 122 | - `string $string`: The string to check. 123 | 124 | #### Returns 125 | 126 | - `bool`: `True` if the string contains only lowercase characters, `false` otherwise. 127 | 128 | #### Example 129 | 130 | ```php 131 | use App\Helpers\Str; 132 | 133 | $result = Str::isLower('abc'); // True 134 | $result = Str::isLower('Abc'); // False 135 | ``` 136 | 137 | ### `isPrint` 138 | 139 | Checks if a string contains only printable characters. 140 | 141 | #### Parameters 142 | 143 | - `string $string`: The string to check. 144 | 145 | #### Returns 146 | 147 | - `bool`: `True` if the string contains only printable characters, `false` otherwise. 148 | 149 | #### Example 150 | 151 | ```php 152 | use App\Helpers\Str; 153 | 154 | $result = Str::isPrint('abc123'); // True 155 | $result = Str::isPrint("abc\n123"); // False 156 | ``` 157 | 158 | ### `isPunct` 159 | 160 | Checks if a string contains only printable characters that are neither spaces nor alphanumeric. 161 | 162 | #### Parameters 163 | 164 | - `string $string`: The string to check. 165 | 166 | #### Returns 167 | 168 | - `bool`: `True` if the string contains only punctuation characters, `false` otherwise. 169 | 170 | #### Example 171 | 172 | ```php 173 | use App\Helpers\Str; 174 | 175 | $result = Str::isPunct('!@#'); // True 176 | $result = Str::isPunct('abc!'); // False 177 | ``` 178 | 179 | ### `isSpace` 180 | 181 | Checks if a string contains only whitespace characters. 182 | 183 | #### Parameters 184 | 185 | - `string $string`: The string to check. 186 | 187 | #### Returns 188 | 189 | - `bool`: `True` if the string contains only whitespace characters, `false` otherwise. 190 | 191 | #### Example 192 | 193 | ```php 194 | use App\Helpers\Str; 195 | 196 | $result = Str::isSpace(' '); // True 197 | $result = Str::isSpace('abc'); // False 198 | ``` 199 | 200 | ### `isUpper` 201 | 202 | Checks if a string contains only uppercase alphabetic characters. 203 | 204 | #### Parameters 205 | 206 | - `string $string`: The string to check. 207 | 208 | #### Returns 209 | 210 | - `bool`: `True` if the string contains only uppercase characters, `false` otherwise. 211 | 212 | #### Example 213 | 214 | ```php 215 | use App\Helpers\Str; 216 | 217 | $result = Str::isUpper('ABC'); // True 218 | $result = Str::isUpper('Abc'); // False 219 | ``` 220 | 221 | ### `isHex` 222 | 223 | Checks if a string contains only hexadecimal characters (digits 0-9 and letters A-F/a-f). 224 | 225 | #### Parameters 226 | 227 | - `string $string`: The string to check. 228 | 229 | #### Returns 230 | 231 | - `bool`: `True` if the string contains only hexadecimal characters, `false` otherwise. 232 | 233 | #### Example 234 | 235 | ```php 236 | use App\Helpers\Str; 237 | 238 | $result = Str::isHex('1a2b3c'); // True 239 | $result = Str::isHex('1g2h3i'); // False 240 | ``` -------------------------------------------------------------------------------- /docs/public/css/style.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --vp-home-hero-name-color: #9e1620; 3 | --vp-button-brand-border: black; 4 | --vp-button-brand-bg: white; 5 | --vp-button-brand-text: black; 6 | --vp-button-brand-hover-bg: #9e1620; 7 | --vp-c-brand-1: #9e1620; 8 | } 9 | 10 | .tagline{ 11 | font-size: 22px !important; 12 | } -------------------------------------------------------------------------------- /docs/public/img/laravel-red.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/public/img/laravel_black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /docs/public/img/logo-full-scream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmunate/LaravelHelpers/13204b3fda56730b859bab505ce7a5bccaa82d27/docs/public/img/logo-full-scream.png -------------------------------------------------------------------------------- /docs/public/img/logo-github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmunate/LaravelHelpers/13204b3fda56730b859bab505ce7a5bccaa82d27/docs/public/img/logo-github.png -------------------------------------------------------------------------------- /docs/public/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmunate/LaravelHelpers/13204b3fda56730b859bab505ce7a5bccaa82d27/docs/public/img/logo.png -------------------------------------------------------------------------------- /docs/usage/default-classes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Default Classes 3 | editLink: true 4 | outline: deep 5 | --- 6 | 7 | # Default Classes 8 | 9 | After installing the dependency in your project, you can generate the initial structure for helpers by running the following command: 10 | 11 | ```shell 12 | php artisan helper:init 13 | ``` 14 | 15 | ## Helpers Folder 16 | 17 | This will create a folder named `Helpers` inside the `app/` directory, where you will find the standard classes suggested for creating your own helpers. 18 | 19 | The structure of the `Helpers` folder will be as follows: 20 | 21 | ```shell 22 | app/ 23 | └── Helpers/ 24 | └── Arr.php 25 | └── Date.php 26 | └── File.php 27 | └── Number.php 28 | └── Str.php 29 | //... 30 | ``` 31 | 32 | These classes will replace the default classes exposed by the Laravel framework. For example, `Illuminate\Support\Str` will no longer need to be invoked. To use any of the helpers originally integrated into the framework, simply call the `App\Helpers\Str` class. 33 | 34 | ```php 35 | use App\Helpers\Str; 36 | 37 | $string = Str::ucfirst('foo bar'); 38 | 39 | // Foo bar 40 | ``` 41 | 42 | ## Creating New Methods 43 | 44 | In the corresponding `App\Helpers\*` class, you can create methods that are convenient for your project. For example, following this example, we will create a string class that brings a bit of `Python` flavor to `PHP`. 45 | 46 | ```php 47 | class Str extends BaseHelpers 48 | { 49 | /** 50 | * Fill the string with zeros on the left to reach the specified length. 51 | * 52 | * @param string $input The input string. 53 | * @param int $width The desired width of the output string. 54 | * @return string The zero-filled string. 55 | */ 56 | public static function zfill(string $input, int $width): string { 57 | 58 | /** 59 | * Check if the input string length is already 60 | * greater than or equal to the desired width 61 | */ 62 | if (strlen($input) >= $width) { 63 | return $input; 64 | } 65 | 66 | /* Calculate the number of zeros needed */ 67 | $zerosNeeded = $width - strlen($input); 68 | 69 | /* Pad the string with zeros on the left */ 70 | return str_repeat('0', $zerosNeeded) . $input; 71 | } 72 | } 73 | ``` 74 | 75 | You can now invoke the class whenever and wherever you need it. 76 | 77 | ```php 78 | use App\Helpers\Str; 79 | 80 | Str::zfill('42', 5); 81 | // Output: 00042 82 | ``` -------------------------------------------------------------------------------- /docs/usage/global-functions.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Global Functions 3 | editLink: true 4 | outline: deep 5 | --- 6 | 7 | # Global Functions 8 | 9 | If you're a fan of functional programming and prefer to define some globally accessible functions in your application, you can create a file to host your different functions, which will be available project-wide by default. 10 | 11 | To create the file where you'll define the functions, simply run the command: 12 | 13 | ```shell 14 | php artisan helper:functions 15 | ``` 16 | 17 | ## Helpers File 18 | 19 | The above command will create a file named `Functions` within the `Helpers` folder in your Laravel project's `app` directory: 20 | 21 | ```shell 22 | app/ 23 | └── Helpers/ 24 | └── Functions.php 25 | //... 26 | ``` 27 | 28 | ## Defining Global Functions 29 | 30 | With this file in your project, you can start defining global variables as shown in the following example. We'll simply create a function that returns the currently logged-in user. 31 | 32 | ```php 33 | if (! function_exists('current_user')) { 34 | function current_user() 35 | { 36 | return auth()->user(); 37 | } 38 | } 39 | ``` 40 | 41 | Notice how before defining the function, we've used `function_exists`, which ensures that if a function with this name doesn't already exist, this new one will be created. 42 | 43 | Now, to call this function from anywhere in your project, whether in Blade views or in classes, controllers, models, etc., you simply use the function directly: 44 | 45 | ```php 46 | $user = current_user(); 47 | ``` 48 | 49 | You don't need to modify the `composer.json` file as various tutorials on the internet suggest; this file comes preloaded. -------------------------------------------------------------------------------- /docs/usage/personalized-classes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Custom Classes 3 | editLink: true 4 | outline: deep 5 | --- 6 | 7 | # Custom Classes 8 | 9 | If your project's needs go beyond the categories of standard classes, you can create your own solutions. 10 | 11 | With a simple command, you can create your own static helper classes. 12 | 13 | ```shell 14 | php artisan helper:create Html 15 | ``` 16 | In this case, `Html` is the name of the Helpers category, but you can use any name you prefer. Just make sure it follows PascalCase. 17 | 18 | The above command will create a new class within the `Helpers` folder with the name you specified. 19 | 20 | ```shell 21 | app/ 22 | └── Helpers/ 23 | └── Html.php 24 | //... 25 | ``` 26 | 27 | ## Defining Static Methods 28 | 29 | For this example, let's create a method in the `Html` class that handles rendering a text input. 30 | 31 | ```php 32 | class Html extends BaseHelpers 33 | { 34 | 35 | /** 36 | * Render a text input field. 37 | * 38 | * @param string $name The name attribute of the input field. 39 | * @param string $value The value attribute of the input field (default is an empty string). 40 | * @return string The rendered HTML for the input field. 41 | */ 42 | public static function textInput(string $name, string $value = ''): string 43 | { 44 | return ''; 46 | } 47 | 48 | } 49 | ``` 50 | 51 | Now you can use your helper wherever you need it. 52 | 53 | ## Example Usage of Helper in Blade 54 | 55 | If you want to execute your helper within Blade, you can do so with the following syntax. 56 | 57 | ```blade 58 | {!! \App\Helpers\Html::textInput('username', 'rmunate') !!} 59 | ``` 60 | 61 | ## Usage in Classes 62 | 63 | If, on the other hand, you'll be using it in controllers, services, or specific classes in your application, you can simply import the class and make the corresponding call. 64 | 65 | ```php 66 | use App\Helpers\Html; 67 | 68 | $input = Html::textInput('username', 'rmunate'); 69 | ``` -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "LaravelHelpers", 3 | "lockfileVersion": 2, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "devDependencies": { 8 | "vitepress": "^1.2.0" 9 | } 10 | }, 11 | "node_modules/@algolia/autocomplete-core": { 12 | "version": "1.9.3", 13 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", 14 | "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", 15 | "dev": true, 16 | "dependencies": { 17 | "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", 18 | "@algolia/autocomplete-shared": "1.9.3" 19 | } 20 | }, 21 | "node_modules/@algolia/autocomplete-plugin-algolia-insights": { 22 | "version": "1.9.3", 23 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", 24 | "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", 25 | "dev": true, 26 | "dependencies": { 27 | "@algolia/autocomplete-shared": "1.9.3" 28 | }, 29 | "peerDependencies": { 30 | "search-insights": ">= 1 < 3" 31 | } 32 | }, 33 | "node_modules/@algolia/autocomplete-preset-algolia": { 34 | "version": "1.9.3", 35 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", 36 | "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", 37 | "dev": true, 38 | "dependencies": { 39 | "@algolia/autocomplete-shared": "1.9.3" 40 | }, 41 | "peerDependencies": { 42 | "@algolia/client-search": ">= 4.9.1 < 6", 43 | "algoliasearch": ">= 4.9.1 < 6" 44 | } 45 | }, 46 | "node_modules/@algolia/autocomplete-shared": { 47 | "version": "1.9.3", 48 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", 49 | "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", 50 | "dev": true, 51 | "peerDependencies": { 52 | "@algolia/client-search": ">= 4.9.1 < 6", 53 | "algoliasearch": ">= 4.9.1 < 6" 54 | } 55 | }, 56 | "node_modules/@algolia/cache-browser-local-storage": { 57 | "version": "4.23.3", 58 | "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.23.3.tgz", 59 | "integrity": "sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg==", 60 | "dev": true, 61 | "dependencies": { 62 | "@algolia/cache-common": "4.23.3" 63 | } 64 | }, 65 | "node_modules/@algolia/cache-common": { 66 | "version": "4.23.3", 67 | "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.23.3.tgz", 68 | "integrity": "sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A==", 69 | "dev": true 70 | }, 71 | "node_modules/@algolia/cache-in-memory": { 72 | "version": "4.23.3", 73 | "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.23.3.tgz", 74 | "integrity": "sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg==", 75 | "dev": true, 76 | "dependencies": { 77 | "@algolia/cache-common": "4.23.3" 78 | } 79 | }, 80 | "node_modules/@algolia/client-account": { 81 | "version": "4.23.3", 82 | "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.23.3.tgz", 83 | "integrity": "sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA==", 84 | "dev": true, 85 | "dependencies": { 86 | "@algolia/client-common": "4.23.3", 87 | "@algolia/client-search": "4.23.3", 88 | "@algolia/transporter": "4.23.3" 89 | } 90 | }, 91 | "node_modules/@algolia/client-analytics": { 92 | "version": "4.23.3", 93 | "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.23.3.tgz", 94 | "integrity": "sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA==", 95 | "dev": true, 96 | "dependencies": { 97 | "@algolia/client-common": "4.23.3", 98 | "@algolia/client-search": "4.23.3", 99 | "@algolia/requester-common": "4.23.3", 100 | "@algolia/transporter": "4.23.3" 101 | } 102 | }, 103 | "node_modules/@algolia/client-common": { 104 | "version": "4.23.3", 105 | "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.23.3.tgz", 106 | "integrity": "sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==", 107 | "dev": true, 108 | "dependencies": { 109 | "@algolia/requester-common": "4.23.3", 110 | "@algolia/transporter": "4.23.3" 111 | } 112 | }, 113 | "node_modules/@algolia/client-personalization": { 114 | "version": "4.23.3", 115 | "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.23.3.tgz", 116 | "integrity": "sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g==", 117 | "dev": true, 118 | "dependencies": { 119 | "@algolia/client-common": "4.23.3", 120 | "@algolia/requester-common": "4.23.3", 121 | "@algolia/transporter": "4.23.3" 122 | } 123 | }, 124 | "node_modules/@algolia/client-search": { 125 | "version": "4.23.3", 126 | "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.23.3.tgz", 127 | "integrity": "sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==", 128 | "dev": true, 129 | "dependencies": { 130 | "@algolia/client-common": "4.23.3", 131 | "@algolia/requester-common": "4.23.3", 132 | "@algolia/transporter": "4.23.3" 133 | } 134 | }, 135 | "node_modules/@algolia/logger-common": { 136 | "version": "4.23.3", 137 | "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.23.3.tgz", 138 | "integrity": "sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g==", 139 | "dev": true 140 | }, 141 | "node_modules/@algolia/logger-console": { 142 | "version": "4.23.3", 143 | "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.23.3.tgz", 144 | "integrity": "sha512-8xoiseoWDKuCVnWP8jHthgaeobDLolh00KJAdMe9XPrWPuf1by732jSpgy2BlsLTaT9m32pHI8CRfrOqQzHv3A==", 145 | "dev": true, 146 | "dependencies": { 147 | "@algolia/logger-common": "4.23.3" 148 | } 149 | }, 150 | "node_modules/@algolia/recommend": { 151 | "version": "4.23.3", 152 | "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.23.3.tgz", 153 | "integrity": "sha512-9fK4nXZF0bFkdcLBRDexsnGzVmu4TSYZqxdpgBW2tEyfuSSY54D4qSRkLmNkrrz4YFvdh2GM1gA8vSsnZPR73w==", 154 | "dev": true, 155 | "dependencies": { 156 | "@algolia/cache-browser-local-storage": "4.23.3", 157 | "@algolia/cache-common": "4.23.3", 158 | "@algolia/cache-in-memory": "4.23.3", 159 | "@algolia/client-common": "4.23.3", 160 | "@algolia/client-search": "4.23.3", 161 | "@algolia/logger-common": "4.23.3", 162 | "@algolia/logger-console": "4.23.3", 163 | "@algolia/requester-browser-xhr": "4.23.3", 164 | "@algolia/requester-common": "4.23.3", 165 | "@algolia/requester-node-http": "4.23.3", 166 | "@algolia/transporter": "4.23.3" 167 | } 168 | }, 169 | "node_modules/@algolia/requester-browser-xhr": { 170 | "version": "4.23.3", 171 | "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.23.3.tgz", 172 | "integrity": "sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==", 173 | "dev": true, 174 | "dependencies": { 175 | "@algolia/requester-common": "4.23.3" 176 | } 177 | }, 178 | "node_modules/@algolia/requester-common": { 179 | "version": "4.23.3", 180 | "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.23.3.tgz", 181 | "integrity": "sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw==", 182 | "dev": true 183 | }, 184 | "node_modules/@algolia/requester-node-http": { 185 | "version": "4.23.3", 186 | "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.23.3.tgz", 187 | "integrity": "sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==", 188 | "dev": true, 189 | "dependencies": { 190 | "@algolia/requester-common": "4.23.3" 191 | } 192 | }, 193 | "node_modules/@algolia/transporter": { 194 | "version": "4.23.3", 195 | "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.23.3.tgz", 196 | "integrity": "sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ==", 197 | "dev": true, 198 | "dependencies": { 199 | "@algolia/cache-common": "4.23.3", 200 | "@algolia/logger-common": "4.23.3", 201 | "@algolia/requester-common": "4.23.3" 202 | } 203 | }, 204 | "node_modules/@babel/parser": { 205 | "version": "7.24.6", 206 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", 207 | "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", 208 | "dev": true, 209 | "bin": { 210 | "parser": "bin/babel-parser.js" 211 | }, 212 | "engines": { 213 | "node": ">=6.0.0" 214 | } 215 | }, 216 | "node_modules/@docsearch/css": { 217 | "version": "3.6.0", 218 | "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.0.tgz", 219 | "integrity": "sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==", 220 | "dev": true 221 | }, 222 | "node_modules/@docsearch/js": { 223 | "version": "3.6.0", 224 | "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.6.0.tgz", 225 | "integrity": "sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==", 226 | "dev": true, 227 | "dependencies": { 228 | "@docsearch/react": "3.6.0", 229 | "preact": "^10.0.0" 230 | } 231 | }, 232 | "node_modules/@docsearch/react": { 233 | "version": "3.6.0", 234 | "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.0.tgz", 235 | "integrity": "sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==", 236 | "dev": true, 237 | "dependencies": { 238 | "@algolia/autocomplete-core": "1.9.3", 239 | "@algolia/autocomplete-preset-algolia": "1.9.3", 240 | "@docsearch/css": "3.6.0", 241 | "algoliasearch": "^4.19.1" 242 | }, 243 | "peerDependencies": { 244 | "@types/react": ">= 16.8.0 < 19.0.0", 245 | "react": ">= 16.8.0 < 19.0.0", 246 | "react-dom": ">= 16.8.0 < 19.0.0", 247 | "search-insights": ">= 1 < 3" 248 | }, 249 | "peerDependenciesMeta": { 250 | "@types/react": { 251 | "optional": true 252 | }, 253 | "react": { 254 | "optional": true 255 | }, 256 | "react-dom": { 257 | "optional": true 258 | }, 259 | "search-insights": { 260 | "optional": true 261 | } 262 | } 263 | }, 264 | "node_modules/@esbuild/aix-ppc64": { 265 | "version": "0.20.2", 266 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", 267 | "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", 268 | "cpu": [ 269 | "ppc64" 270 | ], 271 | "dev": true, 272 | "optional": true, 273 | "os": [ 274 | "aix" 275 | ], 276 | "engines": { 277 | "node": ">=12" 278 | } 279 | }, 280 | "node_modules/@esbuild/android-arm": { 281 | "version": "0.20.2", 282 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", 283 | "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", 284 | "cpu": [ 285 | "arm" 286 | ], 287 | "dev": true, 288 | "optional": true, 289 | "os": [ 290 | "android" 291 | ], 292 | "engines": { 293 | "node": ">=12" 294 | } 295 | }, 296 | "node_modules/@esbuild/android-arm64": { 297 | "version": "0.20.2", 298 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", 299 | "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", 300 | "cpu": [ 301 | "arm64" 302 | ], 303 | "dev": true, 304 | "optional": true, 305 | "os": [ 306 | "android" 307 | ], 308 | "engines": { 309 | "node": ">=12" 310 | } 311 | }, 312 | "node_modules/@esbuild/android-x64": { 313 | "version": "0.20.2", 314 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", 315 | "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", 316 | "cpu": [ 317 | "x64" 318 | ], 319 | "dev": true, 320 | "optional": true, 321 | "os": [ 322 | "android" 323 | ], 324 | "engines": { 325 | "node": ">=12" 326 | } 327 | }, 328 | "node_modules/@esbuild/darwin-arm64": { 329 | "version": "0.20.2", 330 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", 331 | "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", 332 | "cpu": [ 333 | "arm64" 334 | ], 335 | "dev": true, 336 | "optional": true, 337 | "os": [ 338 | "darwin" 339 | ], 340 | "engines": { 341 | "node": ">=12" 342 | } 343 | }, 344 | "node_modules/@esbuild/darwin-x64": { 345 | "version": "0.20.2", 346 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", 347 | "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", 348 | "cpu": [ 349 | "x64" 350 | ], 351 | "dev": true, 352 | "optional": true, 353 | "os": [ 354 | "darwin" 355 | ], 356 | "engines": { 357 | "node": ">=12" 358 | } 359 | }, 360 | "node_modules/@esbuild/freebsd-arm64": { 361 | "version": "0.20.2", 362 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", 363 | "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", 364 | "cpu": [ 365 | "arm64" 366 | ], 367 | "dev": true, 368 | "optional": true, 369 | "os": [ 370 | "freebsd" 371 | ], 372 | "engines": { 373 | "node": ">=12" 374 | } 375 | }, 376 | "node_modules/@esbuild/freebsd-x64": { 377 | "version": "0.20.2", 378 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", 379 | "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", 380 | "cpu": [ 381 | "x64" 382 | ], 383 | "dev": true, 384 | "optional": true, 385 | "os": [ 386 | "freebsd" 387 | ], 388 | "engines": { 389 | "node": ">=12" 390 | } 391 | }, 392 | "node_modules/@esbuild/linux-arm": { 393 | "version": "0.20.2", 394 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", 395 | "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", 396 | "cpu": [ 397 | "arm" 398 | ], 399 | "dev": true, 400 | "optional": true, 401 | "os": [ 402 | "linux" 403 | ], 404 | "engines": { 405 | "node": ">=12" 406 | } 407 | }, 408 | "node_modules/@esbuild/linux-arm64": { 409 | "version": "0.20.2", 410 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", 411 | "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", 412 | "cpu": [ 413 | "arm64" 414 | ], 415 | "dev": true, 416 | "optional": true, 417 | "os": [ 418 | "linux" 419 | ], 420 | "engines": { 421 | "node": ">=12" 422 | } 423 | }, 424 | "node_modules/@esbuild/linux-ia32": { 425 | "version": "0.20.2", 426 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", 427 | "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", 428 | "cpu": [ 429 | "ia32" 430 | ], 431 | "dev": true, 432 | "optional": true, 433 | "os": [ 434 | "linux" 435 | ], 436 | "engines": { 437 | "node": ">=12" 438 | } 439 | }, 440 | "node_modules/@esbuild/linux-loong64": { 441 | "version": "0.20.2", 442 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", 443 | "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", 444 | "cpu": [ 445 | "loong64" 446 | ], 447 | "dev": true, 448 | "optional": true, 449 | "os": [ 450 | "linux" 451 | ], 452 | "engines": { 453 | "node": ">=12" 454 | } 455 | }, 456 | "node_modules/@esbuild/linux-mips64el": { 457 | "version": "0.20.2", 458 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", 459 | "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", 460 | "cpu": [ 461 | "mips64el" 462 | ], 463 | "dev": true, 464 | "optional": true, 465 | "os": [ 466 | "linux" 467 | ], 468 | "engines": { 469 | "node": ">=12" 470 | } 471 | }, 472 | "node_modules/@esbuild/linux-ppc64": { 473 | "version": "0.20.2", 474 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", 475 | "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", 476 | "cpu": [ 477 | "ppc64" 478 | ], 479 | "dev": true, 480 | "optional": true, 481 | "os": [ 482 | "linux" 483 | ], 484 | "engines": { 485 | "node": ">=12" 486 | } 487 | }, 488 | "node_modules/@esbuild/linux-riscv64": { 489 | "version": "0.20.2", 490 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", 491 | "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", 492 | "cpu": [ 493 | "riscv64" 494 | ], 495 | "dev": true, 496 | "optional": true, 497 | "os": [ 498 | "linux" 499 | ], 500 | "engines": { 501 | "node": ">=12" 502 | } 503 | }, 504 | "node_modules/@esbuild/linux-s390x": { 505 | "version": "0.20.2", 506 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", 507 | "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", 508 | "cpu": [ 509 | "s390x" 510 | ], 511 | "dev": true, 512 | "optional": true, 513 | "os": [ 514 | "linux" 515 | ], 516 | "engines": { 517 | "node": ">=12" 518 | } 519 | }, 520 | "node_modules/@esbuild/linux-x64": { 521 | "version": "0.20.2", 522 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", 523 | "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", 524 | "cpu": [ 525 | "x64" 526 | ], 527 | "dev": true, 528 | "optional": true, 529 | "os": [ 530 | "linux" 531 | ], 532 | "engines": { 533 | "node": ">=12" 534 | } 535 | }, 536 | "node_modules/@esbuild/netbsd-x64": { 537 | "version": "0.20.2", 538 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", 539 | "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", 540 | "cpu": [ 541 | "x64" 542 | ], 543 | "dev": true, 544 | "optional": true, 545 | "os": [ 546 | "netbsd" 547 | ], 548 | "engines": { 549 | "node": ">=12" 550 | } 551 | }, 552 | "node_modules/@esbuild/openbsd-x64": { 553 | "version": "0.20.2", 554 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", 555 | "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", 556 | "cpu": [ 557 | "x64" 558 | ], 559 | "dev": true, 560 | "optional": true, 561 | "os": [ 562 | "openbsd" 563 | ], 564 | "engines": { 565 | "node": ">=12" 566 | } 567 | }, 568 | "node_modules/@esbuild/sunos-x64": { 569 | "version": "0.20.2", 570 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", 571 | "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", 572 | "cpu": [ 573 | "x64" 574 | ], 575 | "dev": true, 576 | "optional": true, 577 | "os": [ 578 | "sunos" 579 | ], 580 | "engines": { 581 | "node": ">=12" 582 | } 583 | }, 584 | "node_modules/@esbuild/win32-arm64": { 585 | "version": "0.20.2", 586 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", 587 | "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", 588 | "cpu": [ 589 | "arm64" 590 | ], 591 | "dev": true, 592 | "optional": true, 593 | "os": [ 594 | "win32" 595 | ], 596 | "engines": { 597 | "node": ">=12" 598 | } 599 | }, 600 | "node_modules/@esbuild/win32-ia32": { 601 | "version": "0.20.2", 602 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", 603 | "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", 604 | "cpu": [ 605 | "ia32" 606 | ], 607 | "dev": true, 608 | "optional": true, 609 | "os": [ 610 | "win32" 611 | ], 612 | "engines": { 613 | "node": ">=12" 614 | } 615 | }, 616 | "node_modules/@esbuild/win32-x64": { 617 | "version": "0.20.2", 618 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", 619 | "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", 620 | "cpu": [ 621 | "x64" 622 | ], 623 | "dev": true, 624 | "optional": true, 625 | "os": [ 626 | "win32" 627 | ], 628 | "engines": { 629 | "node": ">=12" 630 | } 631 | }, 632 | "node_modules/@jridgewell/sourcemap-codec": { 633 | "version": "1.4.15", 634 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 635 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 636 | "dev": true 637 | }, 638 | "node_modules/@rollup/rollup-android-arm-eabi": { 639 | "version": "4.18.0", 640 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", 641 | "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", 642 | "cpu": [ 643 | "arm" 644 | ], 645 | "dev": true, 646 | "optional": true, 647 | "os": [ 648 | "android" 649 | ] 650 | }, 651 | "node_modules/@rollup/rollup-android-arm64": { 652 | "version": "4.18.0", 653 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", 654 | "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", 655 | "cpu": [ 656 | "arm64" 657 | ], 658 | "dev": true, 659 | "optional": true, 660 | "os": [ 661 | "android" 662 | ] 663 | }, 664 | "node_modules/@rollup/rollup-darwin-arm64": { 665 | "version": "4.18.0", 666 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", 667 | "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", 668 | "cpu": [ 669 | "arm64" 670 | ], 671 | "dev": true, 672 | "optional": true, 673 | "os": [ 674 | "darwin" 675 | ] 676 | }, 677 | "node_modules/@rollup/rollup-darwin-x64": { 678 | "version": "4.18.0", 679 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", 680 | "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", 681 | "cpu": [ 682 | "x64" 683 | ], 684 | "dev": true, 685 | "optional": true, 686 | "os": [ 687 | "darwin" 688 | ] 689 | }, 690 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 691 | "version": "4.18.0", 692 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", 693 | "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", 694 | "cpu": [ 695 | "arm" 696 | ], 697 | "dev": true, 698 | "optional": true, 699 | "os": [ 700 | "linux" 701 | ] 702 | }, 703 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 704 | "version": "4.18.0", 705 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", 706 | "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", 707 | "cpu": [ 708 | "arm" 709 | ], 710 | "dev": true, 711 | "optional": true, 712 | "os": [ 713 | "linux" 714 | ] 715 | }, 716 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 717 | "version": "4.18.0", 718 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", 719 | "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", 720 | "cpu": [ 721 | "arm64" 722 | ], 723 | "dev": true, 724 | "optional": true, 725 | "os": [ 726 | "linux" 727 | ] 728 | }, 729 | "node_modules/@rollup/rollup-linux-arm64-musl": { 730 | "version": "4.18.0", 731 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", 732 | "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", 733 | "cpu": [ 734 | "arm64" 735 | ], 736 | "dev": true, 737 | "optional": true, 738 | "os": [ 739 | "linux" 740 | ] 741 | }, 742 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 743 | "version": "4.18.0", 744 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", 745 | "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", 746 | "cpu": [ 747 | "ppc64" 748 | ], 749 | "dev": true, 750 | "optional": true, 751 | "os": [ 752 | "linux" 753 | ] 754 | }, 755 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 756 | "version": "4.18.0", 757 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", 758 | "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", 759 | "cpu": [ 760 | "riscv64" 761 | ], 762 | "dev": true, 763 | "optional": true, 764 | "os": [ 765 | "linux" 766 | ] 767 | }, 768 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 769 | "version": "4.18.0", 770 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", 771 | "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", 772 | "cpu": [ 773 | "s390x" 774 | ], 775 | "dev": true, 776 | "optional": true, 777 | "os": [ 778 | "linux" 779 | ] 780 | }, 781 | "node_modules/@rollup/rollup-linux-x64-gnu": { 782 | "version": "4.18.0", 783 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", 784 | "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", 785 | "cpu": [ 786 | "x64" 787 | ], 788 | "dev": true, 789 | "optional": true, 790 | "os": [ 791 | "linux" 792 | ] 793 | }, 794 | "node_modules/@rollup/rollup-linux-x64-musl": { 795 | "version": "4.18.0", 796 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", 797 | "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", 798 | "cpu": [ 799 | "x64" 800 | ], 801 | "dev": true, 802 | "optional": true, 803 | "os": [ 804 | "linux" 805 | ] 806 | }, 807 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 808 | "version": "4.18.0", 809 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", 810 | "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", 811 | "cpu": [ 812 | "arm64" 813 | ], 814 | "dev": true, 815 | "optional": true, 816 | "os": [ 817 | "win32" 818 | ] 819 | }, 820 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 821 | "version": "4.18.0", 822 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", 823 | "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", 824 | "cpu": [ 825 | "ia32" 826 | ], 827 | "dev": true, 828 | "optional": true, 829 | "os": [ 830 | "win32" 831 | ] 832 | }, 833 | "node_modules/@rollup/rollup-win32-x64-msvc": { 834 | "version": "4.18.0", 835 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", 836 | "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", 837 | "cpu": [ 838 | "x64" 839 | ], 840 | "dev": true, 841 | "optional": true, 842 | "os": [ 843 | "win32" 844 | ] 845 | }, 846 | "node_modules/@shikijs/core": { 847 | "version": "1.6.0", 848 | "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.6.0.tgz", 849 | "integrity": "sha512-NIEAi5U5R7BLkbW1pG/ZKu3eb1lzc3/+jD0lFsuxMT7zjaf9bbNwdNyMr7zh/Zl8EXQtQ+MYBAt5G+JLu+5DlA==", 850 | "dev": true 851 | }, 852 | "node_modules/@shikijs/transformers": { 853 | "version": "1.6.0", 854 | "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.6.0.tgz", 855 | "integrity": "sha512-qGfHe1ECiqfE2STPWvfogIj/9Q0SK+MCRJdoITkW7AmFuB7DmbFnBT2US84+zklJOB51MzNO8RUXZiauWssJlQ==", 856 | "dev": true, 857 | "dependencies": { 858 | "shiki": "1.6.0" 859 | } 860 | }, 861 | "node_modules/@types/estree": { 862 | "version": "1.0.5", 863 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 864 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", 865 | "dev": true 866 | }, 867 | "node_modules/@types/linkify-it": { 868 | "version": "5.0.0", 869 | "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", 870 | "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", 871 | "dev": true 872 | }, 873 | "node_modules/@types/markdown-it": { 874 | "version": "14.1.1", 875 | "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.1.tgz", 876 | "integrity": "sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==", 877 | "dev": true, 878 | "dependencies": { 879 | "@types/linkify-it": "^5", 880 | "@types/mdurl": "^2" 881 | } 882 | }, 883 | "node_modules/@types/mdurl": { 884 | "version": "2.0.0", 885 | "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", 886 | "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", 887 | "dev": true 888 | }, 889 | "node_modules/@types/web-bluetooth": { 890 | "version": "0.0.20", 891 | "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", 892 | "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", 893 | "dev": true 894 | }, 895 | "node_modules/@vitejs/plugin-vue": { 896 | "version": "5.0.4", 897 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", 898 | "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", 899 | "dev": true, 900 | "engines": { 901 | "node": "^18.0.0 || >=20.0.0" 902 | }, 903 | "peerDependencies": { 904 | "vite": "^5.0.0", 905 | "vue": "^3.2.25" 906 | } 907 | }, 908 | "node_modules/@vue/compiler-core": { 909 | "version": "3.4.27", 910 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", 911 | "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", 912 | "dev": true, 913 | "dependencies": { 914 | "@babel/parser": "^7.24.4", 915 | "@vue/shared": "3.4.27", 916 | "entities": "^4.5.0", 917 | "estree-walker": "^2.0.2", 918 | "source-map-js": "^1.2.0" 919 | } 920 | }, 921 | "node_modules/@vue/compiler-dom": { 922 | "version": "3.4.27", 923 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", 924 | "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", 925 | "dev": true, 926 | "dependencies": { 927 | "@vue/compiler-core": "3.4.27", 928 | "@vue/shared": "3.4.27" 929 | } 930 | }, 931 | "node_modules/@vue/compiler-sfc": { 932 | "version": "3.4.27", 933 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", 934 | "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", 935 | "dev": true, 936 | "dependencies": { 937 | "@babel/parser": "^7.24.4", 938 | "@vue/compiler-core": "3.4.27", 939 | "@vue/compiler-dom": "3.4.27", 940 | "@vue/compiler-ssr": "3.4.27", 941 | "@vue/shared": "3.4.27", 942 | "estree-walker": "^2.0.2", 943 | "magic-string": "^0.30.10", 944 | "postcss": "^8.4.38", 945 | "source-map-js": "^1.2.0" 946 | } 947 | }, 948 | "node_modules/@vue/compiler-ssr": { 949 | "version": "3.4.27", 950 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", 951 | "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==", 952 | "dev": true, 953 | "dependencies": { 954 | "@vue/compiler-dom": "3.4.27", 955 | "@vue/shared": "3.4.27" 956 | } 957 | }, 958 | "node_modules/@vue/devtools-api": { 959 | "version": "7.2.1", 960 | "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.2.1.tgz", 961 | "integrity": "sha512-6oNCtyFOrNdqm6GUkFujsCgFlpbsHLnZqq7edeM/+cxAbMyCWvsaCsIMUaz7AiluKLccCGEM8fhOsjaKgBvb7g==", 962 | "dev": true, 963 | "dependencies": { 964 | "@vue/devtools-kit": "^7.2.1" 965 | } 966 | }, 967 | "node_modules/@vue/devtools-kit": { 968 | "version": "7.2.1", 969 | "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.2.1.tgz", 970 | "integrity": "sha512-Wak/fin1X0Q8LLIfCAHBrdaaB+R6IdpSXsDByPHbQ3BmkCP0/cIo/oEGp9i0U2+gEqD4L3V9RDjNf1S34DTzQQ==", 971 | "dev": true, 972 | "dependencies": { 973 | "@vue/devtools-shared": "^7.2.1", 974 | "hookable": "^5.5.3", 975 | "mitt": "^3.0.1", 976 | "perfect-debounce": "^1.0.0", 977 | "speakingurl": "^14.0.1" 978 | }, 979 | "peerDependencies": { 980 | "vue": "^3.0.0" 981 | } 982 | }, 983 | "node_modules/@vue/devtools-shared": { 984 | "version": "7.2.1", 985 | "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.2.1.tgz", 986 | "integrity": "sha512-PCJF4UknJmOal68+X9XHyVeQ+idv0LFujkTOIW30+GaMJqwFVN9LkQKX4gLqn61KkGMdJTzQ1bt7EJag3TI6AA==", 987 | "dev": true, 988 | "dependencies": { 989 | "rfdc": "^1.3.1" 990 | } 991 | }, 992 | "node_modules/@vue/reactivity": { 993 | "version": "3.4.27", 994 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz", 995 | "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==", 996 | "dev": true, 997 | "dependencies": { 998 | "@vue/shared": "3.4.27" 999 | } 1000 | }, 1001 | "node_modules/@vue/runtime-core": { 1002 | "version": "3.4.27", 1003 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz", 1004 | "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==", 1005 | "dev": true, 1006 | "dependencies": { 1007 | "@vue/reactivity": "3.4.27", 1008 | "@vue/shared": "3.4.27" 1009 | } 1010 | }, 1011 | "node_modules/@vue/runtime-dom": { 1012 | "version": "3.4.27", 1013 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz", 1014 | "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==", 1015 | "dev": true, 1016 | "dependencies": { 1017 | "@vue/runtime-core": "3.4.27", 1018 | "@vue/shared": "3.4.27", 1019 | "csstype": "^3.1.3" 1020 | } 1021 | }, 1022 | "node_modules/@vue/server-renderer": { 1023 | "version": "3.4.27", 1024 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz", 1025 | "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==", 1026 | "dev": true, 1027 | "dependencies": { 1028 | "@vue/compiler-ssr": "3.4.27", 1029 | "@vue/shared": "3.4.27" 1030 | }, 1031 | "peerDependencies": { 1032 | "vue": "3.4.27" 1033 | } 1034 | }, 1035 | "node_modules/@vue/shared": { 1036 | "version": "3.4.27", 1037 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", 1038 | "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==", 1039 | "dev": true 1040 | }, 1041 | "node_modules/@vueuse/core": { 1042 | "version": "10.10.0", 1043 | "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.10.0.tgz", 1044 | "integrity": "sha512-vexJ/YXYs2S42B783rI95lMt3GzEwkxzC8Hb0Ndpd8rD+p+Lk/Za4bd797Ym7yq4jXqdSyj3JLChunF/vyYjUw==", 1045 | "dev": true, 1046 | "dependencies": { 1047 | "@types/web-bluetooth": "^0.0.20", 1048 | "@vueuse/metadata": "10.10.0", 1049 | "@vueuse/shared": "10.10.0", 1050 | "vue-demi": ">=0.14.7" 1051 | }, 1052 | "funding": { 1053 | "url": "https://github.com/sponsors/antfu" 1054 | } 1055 | }, 1056 | "node_modules/@vueuse/core/node_modules/vue-demi": { 1057 | "version": "0.14.7", 1058 | "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", 1059 | "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", 1060 | "dev": true, 1061 | "hasInstallScript": true, 1062 | "bin": { 1063 | "vue-demi-fix": "bin/vue-demi-fix.js", 1064 | "vue-demi-switch": "bin/vue-demi-switch.js" 1065 | }, 1066 | "engines": { 1067 | "node": ">=12" 1068 | }, 1069 | "funding": { 1070 | "url": "https://github.com/sponsors/antfu" 1071 | }, 1072 | "peerDependencies": { 1073 | "@vue/composition-api": "^1.0.0-rc.1", 1074 | "vue": "^3.0.0-0 || ^2.6.0" 1075 | }, 1076 | "peerDependenciesMeta": { 1077 | "@vue/composition-api": { 1078 | "optional": true 1079 | } 1080 | } 1081 | }, 1082 | "node_modules/@vueuse/integrations": { 1083 | "version": "10.10.0", 1084 | "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.10.0.tgz", 1085 | "integrity": "sha512-vHGeK7X6mkdkpcm1eE9t3Cpm21pNVfZRwrjwwbrEs9XftnSgszF4831G2rei8Dt9cIYJIfFV+iyx/29muimJPQ==", 1086 | "dev": true, 1087 | "dependencies": { 1088 | "@vueuse/core": "10.10.0", 1089 | "@vueuse/shared": "10.10.0", 1090 | "vue-demi": ">=0.14.7" 1091 | }, 1092 | "funding": { 1093 | "url": "https://github.com/sponsors/antfu" 1094 | }, 1095 | "peerDependencies": { 1096 | "async-validator": "*", 1097 | "axios": "*", 1098 | "change-case": "*", 1099 | "drauu": "*", 1100 | "focus-trap": "*", 1101 | "fuse.js": "*", 1102 | "idb-keyval": "*", 1103 | "jwt-decode": "*", 1104 | "nprogress": "*", 1105 | "qrcode": "*", 1106 | "sortablejs": "*", 1107 | "universal-cookie": "*" 1108 | }, 1109 | "peerDependenciesMeta": { 1110 | "async-validator": { 1111 | "optional": true 1112 | }, 1113 | "axios": { 1114 | "optional": true 1115 | }, 1116 | "change-case": { 1117 | "optional": true 1118 | }, 1119 | "drauu": { 1120 | "optional": true 1121 | }, 1122 | "focus-trap": { 1123 | "optional": true 1124 | }, 1125 | "fuse.js": { 1126 | "optional": true 1127 | }, 1128 | "idb-keyval": { 1129 | "optional": true 1130 | }, 1131 | "jwt-decode": { 1132 | "optional": true 1133 | }, 1134 | "nprogress": { 1135 | "optional": true 1136 | }, 1137 | "qrcode": { 1138 | "optional": true 1139 | }, 1140 | "sortablejs": { 1141 | "optional": true 1142 | }, 1143 | "universal-cookie": { 1144 | "optional": true 1145 | } 1146 | } 1147 | }, 1148 | "node_modules/@vueuse/integrations/node_modules/vue-demi": { 1149 | "version": "0.14.7", 1150 | "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", 1151 | "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", 1152 | "dev": true, 1153 | "hasInstallScript": true, 1154 | "bin": { 1155 | "vue-demi-fix": "bin/vue-demi-fix.js", 1156 | "vue-demi-switch": "bin/vue-demi-switch.js" 1157 | }, 1158 | "engines": { 1159 | "node": ">=12" 1160 | }, 1161 | "funding": { 1162 | "url": "https://github.com/sponsors/antfu" 1163 | }, 1164 | "peerDependencies": { 1165 | "@vue/composition-api": "^1.0.0-rc.1", 1166 | "vue": "^3.0.0-0 || ^2.6.0" 1167 | }, 1168 | "peerDependenciesMeta": { 1169 | "@vue/composition-api": { 1170 | "optional": true 1171 | } 1172 | } 1173 | }, 1174 | "node_modules/@vueuse/metadata": { 1175 | "version": "10.10.0", 1176 | "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.10.0.tgz", 1177 | "integrity": "sha512-UNAo2sTCAW5ge6OErPEHb5z7NEAg3XcO9Cj7OK45aZXfLLH1QkexDcZD77HBi5zvEiLOm1An+p/4b5K3Worpug==", 1178 | "dev": true, 1179 | "funding": { 1180 | "url": "https://github.com/sponsors/antfu" 1181 | } 1182 | }, 1183 | "node_modules/@vueuse/shared": { 1184 | "version": "10.10.0", 1185 | "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.10.0.tgz", 1186 | "integrity": "sha512-2aW33Ac0Uk0U+9yo3Ypg9s5KcR42cuehRWl7vnUHadQyFvCktseyxxEPBi1Eiq4D2yBGACOnqLZpx1eMc7g5Og==", 1187 | "dev": true, 1188 | "dependencies": { 1189 | "vue-demi": ">=0.14.7" 1190 | }, 1191 | "funding": { 1192 | "url": "https://github.com/sponsors/antfu" 1193 | } 1194 | }, 1195 | "node_modules/@vueuse/shared/node_modules/vue-demi": { 1196 | "version": "0.14.7", 1197 | "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", 1198 | "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", 1199 | "dev": true, 1200 | "hasInstallScript": true, 1201 | "bin": { 1202 | "vue-demi-fix": "bin/vue-demi-fix.js", 1203 | "vue-demi-switch": "bin/vue-demi-switch.js" 1204 | }, 1205 | "engines": { 1206 | "node": ">=12" 1207 | }, 1208 | "funding": { 1209 | "url": "https://github.com/sponsors/antfu" 1210 | }, 1211 | "peerDependencies": { 1212 | "@vue/composition-api": "^1.0.0-rc.1", 1213 | "vue": "^3.0.0-0 || ^2.6.0" 1214 | }, 1215 | "peerDependenciesMeta": { 1216 | "@vue/composition-api": { 1217 | "optional": true 1218 | } 1219 | } 1220 | }, 1221 | "node_modules/algoliasearch": { 1222 | "version": "4.23.3", 1223 | "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.23.3.tgz", 1224 | "integrity": "sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg==", 1225 | "dev": true, 1226 | "dependencies": { 1227 | "@algolia/cache-browser-local-storage": "4.23.3", 1228 | "@algolia/cache-common": "4.23.3", 1229 | "@algolia/cache-in-memory": "4.23.3", 1230 | "@algolia/client-account": "4.23.3", 1231 | "@algolia/client-analytics": "4.23.3", 1232 | "@algolia/client-common": "4.23.3", 1233 | "@algolia/client-personalization": "4.23.3", 1234 | "@algolia/client-search": "4.23.3", 1235 | "@algolia/logger-common": "4.23.3", 1236 | "@algolia/logger-console": "4.23.3", 1237 | "@algolia/recommend": "4.23.3", 1238 | "@algolia/requester-browser-xhr": "4.23.3", 1239 | "@algolia/requester-common": "4.23.3", 1240 | "@algolia/requester-node-http": "4.23.3", 1241 | "@algolia/transporter": "4.23.3" 1242 | } 1243 | }, 1244 | "node_modules/csstype": { 1245 | "version": "3.1.3", 1246 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 1247 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 1248 | "dev": true 1249 | }, 1250 | "node_modules/entities": { 1251 | "version": "4.5.0", 1252 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 1253 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 1254 | "dev": true, 1255 | "engines": { 1256 | "node": ">=0.12" 1257 | }, 1258 | "funding": { 1259 | "url": "https://github.com/fb55/entities?sponsor=1" 1260 | } 1261 | }, 1262 | "node_modules/esbuild": { 1263 | "version": "0.20.2", 1264 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", 1265 | "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", 1266 | "dev": true, 1267 | "hasInstallScript": true, 1268 | "bin": { 1269 | "esbuild": "bin/esbuild" 1270 | }, 1271 | "engines": { 1272 | "node": ">=12" 1273 | }, 1274 | "optionalDependencies": { 1275 | "@esbuild/aix-ppc64": "0.20.2", 1276 | "@esbuild/android-arm": "0.20.2", 1277 | "@esbuild/android-arm64": "0.20.2", 1278 | "@esbuild/android-x64": "0.20.2", 1279 | "@esbuild/darwin-arm64": "0.20.2", 1280 | "@esbuild/darwin-x64": "0.20.2", 1281 | "@esbuild/freebsd-arm64": "0.20.2", 1282 | "@esbuild/freebsd-x64": "0.20.2", 1283 | "@esbuild/linux-arm": "0.20.2", 1284 | "@esbuild/linux-arm64": "0.20.2", 1285 | "@esbuild/linux-ia32": "0.20.2", 1286 | "@esbuild/linux-loong64": "0.20.2", 1287 | "@esbuild/linux-mips64el": "0.20.2", 1288 | "@esbuild/linux-ppc64": "0.20.2", 1289 | "@esbuild/linux-riscv64": "0.20.2", 1290 | "@esbuild/linux-s390x": "0.20.2", 1291 | "@esbuild/linux-x64": "0.20.2", 1292 | "@esbuild/netbsd-x64": "0.20.2", 1293 | "@esbuild/openbsd-x64": "0.20.2", 1294 | "@esbuild/sunos-x64": "0.20.2", 1295 | "@esbuild/win32-arm64": "0.20.2", 1296 | "@esbuild/win32-ia32": "0.20.2", 1297 | "@esbuild/win32-x64": "0.20.2" 1298 | } 1299 | }, 1300 | "node_modules/estree-walker": { 1301 | "version": "2.0.2", 1302 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1303 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1304 | "dev": true 1305 | }, 1306 | "node_modules/focus-trap": { 1307 | "version": "7.5.4", 1308 | "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", 1309 | "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", 1310 | "dev": true, 1311 | "dependencies": { 1312 | "tabbable": "^6.2.0" 1313 | } 1314 | }, 1315 | "node_modules/fsevents": { 1316 | "version": "2.3.3", 1317 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1318 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1319 | "dev": true, 1320 | "hasInstallScript": true, 1321 | "optional": true, 1322 | "os": [ 1323 | "darwin" 1324 | ], 1325 | "engines": { 1326 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1327 | } 1328 | }, 1329 | "node_modules/hookable": { 1330 | "version": "5.5.3", 1331 | "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", 1332 | "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", 1333 | "dev": true 1334 | }, 1335 | "node_modules/magic-string": { 1336 | "version": "0.30.10", 1337 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", 1338 | "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", 1339 | "dev": true, 1340 | "dependencies": { 1341 | "@jridgewell/sourcemap-codec": "^1.4.15" 1342 | } 1343 | }, 1344 | "node_modules/mark.js": { 1345 | "version": "8.11.1", 1346 | "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", 1347 | "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", 1348 | "dev": true 1349 | }, 1350 | "node_modules/minisearch": { 1351 | "version": "6.3.0", 1352 | "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz", 1353 | "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==", 1354 | "dev": true 1355 | }, 1356 | "node_modules/mitt": { 1357 | "version": "3.0.1", 1358 | "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", 1359 | "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", 1360 | "dev": true 1361 | }, 1362 | "node_modules/nanoid": { 1363 | "version": "3.3.7", 1364 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 1365 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 1366 | "dev": true, 1367 | "funding": [ 1368 | { 1369 | "type": "github", 1370 | "url": "https://github.com/sponsors/ai" 1371 | } 1372 | ], 1373 | "bin": { 1374 | "nanoid": "bin/nanoid.cjs" 1375 | }, 1376 | "engines": { 1377 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1378 | } 1379 | }, 1380 | "node_modules/perfect-debounce": { 1381 | "version": "1.0.0", 1382 | "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", 1383 | "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", 1384 | "dev": true 1385 | }, 1386 | "node_modules/picocolors": { 1387 | "version": "1.0.1", 1388 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", 1389 | "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", 1390 | "dev": true 1391 | }, 1392 | "node_modules/postcss": { 1393 | "version": "8.4.38", 1394 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", 1395 | "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", 1396 | "dev": true, 1397 | "funding": [ 1398 | { 1399 | "type": "opencollective", 1400 | "url": "https://opencollective.com/postcss/" 1401 | }, 1402 | { 1403 | "type": "tidelift", 1404 | "url": "https://tidelift.com/funding/github/npm/postcss" 1405 | }, 1406 | { 1407 | "type": "github", 1408 | "url": "https://github.com/sponsors/ai" 1409 | } 1410 | ], 1411 | "dependencies": { 1412 | "nanoid": "^3.3.7", 1413 | "picocolors": "^1.0.0", 1414 | "source-map-js": "^1.2.0" 1415 | }, 1416 | "engines": { 1417 | "node": "^10 || ^12 || >=14" 1418 | } 1419 | }, 1420 | "node_modules/preact": { 1421 | "version": "10.22.0", 1422 | "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.0.tgz", 1423 | "integrity": "sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==", 1424 | "dev": true, 1425 | "funding": { 1426 | "type": "opencollective", 1427 | "url": "https://opencollective.com/preact" 1428 | } 1429 | }, 1430 | "node_modules/rfdc": { 1431 | "version": "1.3.1", 1432 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", 1433 | "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", 1434 | "dev": true 1435 | }, 1436 | "node_modules/rollup": { 1437 | "version": "4.18.0", 1438 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", 1439 | "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", 1440 | "dev": true, 1441 | "dependencies": { 1442 | "@types/estree": "1.0.5" 1443 | }, 1444 | "bin": { 1445 | "rollup": "dist/bin/rollup" 1446 | }, 1447 | "engines": { 1448 | "node": ">=18.0.0", 1449 | "npm": ">=8.0.0" 1450 | }, 1451 | "optionalDependencies": { 1452 | "@rollup/rollup-android-arm-eabi": "4.18.0", 1453 | "@rollup/rollup-android-arm64": "4.18.0", 1454 | "@rollup/rollup-darwin-arm64": "4.18.0", 1455 | "@rollup/rollup-darwin-x64": "4.18.0", 1456 | "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", 1457 | "@rollup/rollup-linux-arm-musleabihf": "4.18.0", 1458 | "@rollup/rollup-linux-arm64-gnu": "4.18.0", 1459 | "@rollup/rollup-linux-arm64-musl": "4.18.0", 1460 | "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", 1461 | "@rollup/rollup-linux-riscv64-gnu": "4.18.0", 1462 | "@rollup/rollup-linux-s390x-gnu": "4.18.0", 1463 | "@rollup/rollup-linux-x64-gnu": "4.18.0", 1464 | "@rollup/rollup-linux-x64-musl": "4.18.0", 1465 | "@rollup/rollup-win32-arm64-msvc": "4.18.0", 1466 | "@rollup/rollup-win32-ia32-msvc": "4.18.0", 1467 | "@rollup/rollup-win32-x64-msvc": "4.18.0", 1468 | "fsevents": "~2.3.2" 1469 | } 1470 | }, 1471 | "node_modules/search-insights": { 1472 | "version": "2.14.0", 1473 | "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.14.0.tgz", 1474 | "integrity": "sha512-OLN6MsPMCghDOqlCtsIsYgtsC0pnwVTyT9Mu6A3ewOj1DxvzZF6COrn2g86E/c05xbktB0XN04m/t1Z+n+fTGw==", 1475 | "dev": true, 1476 | "peer": true 1477 | }, 1478 | "node_modules/shiki": { 1479 | "version": "1.6.0", 1480 | "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.6.0.tgz", 1481 | "integrity": "sha512-P31ROeXcVgW/k3Z+vUUErcxoTah7ZRaimctOpzGuqAntqnnSmx1HOsvnbAB8Z2qfXPRhw61yptAzCsuKOhTHwQ==", 1482 | "dev": true, 1483 | "dependencies": { 1484 | "@shikijs/core": "1.6.0" 1485 | } 1486 | }, 1487 | "node_modules/source-map-js": { 1488 | "version": "1.2.0", 1489 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", 1490 | "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", 1491 | "dev": true, 1492 | "engines": { 1493 | "node": ">=0.10.0" 1494 | } 1495 | }, 1496 | "node_modules/speakingurl": { 1497 | "version": "14.0.1", 1498 | "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", 1499 | "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", 1500 | "dev": true, 1501 | "engines": { 1502 | "node": ">=0.10.0" 1503 | } 1504 | }, 1505 | "node_modules/tabbable": { 1506 | "version": "6.2.0", 1507 | "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", 1508 | "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", 1509 | "dev": true 1510 | }, 1511 | "node_modules/vite": { 1512 | "version": "5.2.11", 1513 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", 1514 | "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", 1515 | "dev": true, 1516 | "dependencies": { 1517 | "esbuild": "^0.20.1", 1518 | "postcss": "^8.4.38", 1519 | "rollup": "^4.13.0" 1520 | }, 1521 | "bin": { 1522 | "vite": "bin/vite.js" 1523 | }, 1524 | "engines": { 1525 | "node": "^18.0.0 || >=20.0.0" 1526 | }, 1527 | "funding": { 1528 | "url": "https://github.com/vitejs/vite?sponsor=1" 1529 | }, 1530 | "optionalDependencies": { 1531 | "fsevents": "~2.3.3" 1532 | }, 1533 | "peerDependencies": { 1534 | "@types/node": "^18.0.0 || >=20.0.0", 1535 | "less": "*", 1536 | "lightningcss": "^1.21.0", 1537 | "sass": "*", 1538 | "stylus": "*", 1539 | "sugarss": "*", 1540 | "terser": "^5.4.0" 1541 | }, 1542 | "peerDependenciesMeta": { 1543 | "@types/node": { 1544 | "optional": true 1545 | }, 1546 | "less": { 1547 | "optional": true 1548 | }, 1549 | "lightningcss": { 1550 | "optional": true 1551 | }, 1552 | "sass": { 1553 | "optional": true 1554 | }, 1555 | "stylus": { 1556 | "optional": true 1557 | }, 1558 | "sugarss": { 1559 | "optional": true 1560 | }, 1561 | "terser": { 1562 | "optional": true 1563 | } 1564 | } 1565 | }, 1566 | "node_modules/vitepress": { 1567 | "version": "1.2.2", 1568 | "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.2.2.tgz", 1569 | "integrity": "sha512-uZ3nXR5NY4nYj3RJWCo5jev9qlNZAQo5SUXu1U0QSUx84cUm/o7hCTDVjZ4njVSVui+PsV1oAbdQOg8ygbaf4w==", 1570 | "dev": true, 1571 | "dependencies": { 1572 | "@docsearch/css": "^3.6.0", 1573 | "@docsearch/js": "^3.6.0", 1574 | "@shikijs/core": "^1.5.2", 1575 | "@shikijs/transformers": "^1.5.2", 1576 | "@types/markdown-it": "^14.1.1", 1577 | "@vitejs/plugin-vue": "^5.0.4", 1578 | "@vue/devtools-api": "^7.2.0", 1579 | "@vue/shared": "^3.4.27", 1580 | "@vueuse/core": "^10.9.0", 1581 | "@vueuse/integrations": "^10.9.0", 1582 | "focus-trap": "^7.5.4", 1583 | "mark.js": "8.11.1", 1584 | "minisearch": "^6.3.0", 1585 | "shiki": "^1.5.2", 1586 | "vite": "^5.2.11", 1587 | "vue": "^3.4.27" 1588 | }, 1589 | "bin": { 1590 | "vitepress": "bin/vitepress.js" 1591 | }, 1592 | "peerDependencies": { 1593 | "markdown-it-mathjax3": "^4", 1594 | "postcss": "^8" 1595 | }, 1596 | "peerDependenciesMeta": { 1597 | "markdown-it-mathjax3": { 1598 | "optional": true 1599 | }, 1600 | "postcss": { 1601 | "optional": true 1602 | } 1603 | } 1604 | }, 1605 | "node_modules/vue": { 1606 | "version": "3.4.27", 1607 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz", 1608 | "integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==", 1609 | "dev": true, 1610 | "dependencies": { 1611 | "@vue/compiler-dom": "3.4.27", 1612 | "@vue/compiler-sfc": "3.4.27", 1613 | "@vue/runtime-dom": "3.4.27", 1614 | "@vue/server-renderer": "3.4.27", 1615 | "@vue/shared": "3.4.27" 1616 | }, 1617 | "peerDependencies": { 1618 | "typescript": "*" 1619 | }, 1620 | "peerDependenciesMeta": { 1621 | "typescript": { 1622 | "optional": true 1623 | } 1624 | } 1625 | } 1626 | }, 1627 | "dependencies": { 1628 | "@algolia/autocomplete-core": { 1629 | "version": "1.9.3", 1630 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", 1631 | "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", 1632 | "dev": true, 1633 | "requires": { 1634 | "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", 1635 | "@algolia/autocomplete-shared": "1.9.3" 1636 | } 1637 | }, 1638 | "@algolia/autocomplete-plugin-algolia-insights": { 1639 | "version": "1.9.3", 1640 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", 1641 | "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", 1642 | "dev": true, 1643 | "requires": { 1644 | "@algolia/autocomplete-shared": "1.9.3" 1645 | } 1646 | }, 1647 | "@algolia/autocomplete-preset-algolia": { 1648 | "version": "1.9.3", 1649 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", 1650 | "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", 1651 | "dev": true, 1652 | "requires": { 1653 | "@algolia/autocomplete-shared": "1.9.3" 1654 | } 1655 | }, 1656 | "@algolia/autocomplete-shared": { 1657 | "version": "1.9.3", 1658 | "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", 1659 | "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", 1660 | "dev": true, 1661 | "requires": {} 1662 | }, 1663 | "@algolia/cache-browser-local-storage": { 1664 | "version": "4.23.3", 1665 | "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.23.3.tgz", 1666 | "integrity": "sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg==", 1667 | "dev": true, 1668 | "requires": { 1669 | "@algolia/cache-common": "4.23.3" 1670 | } 1671 | }, 1672 | "@algolia/cache-common": { 1673 | "version": "4.23.3", 1674 | "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.23.3.tgz", 1675 | "integrity": "sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A==", 1676 | "dev": true 1677 | }, 1678 | "@algolia/cache-in-memory": { 1679 | "version": "4.23.3", 1680 | "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.23.3.tgz", 1681 | "integrity": "sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg==", 1682 | "dev": true, 1683 | "requires": { 1684 | "@algolia/cache-common": "4.23.3" 1685 | } 1686 | }, 1687 | "@algolia/client-account": { 1688 | "version": "4.23.3", 1689 | "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.23.3.tgz", 1690 | "integrity": "sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA==", 1691 | "dev": true, 1692 | "requires": { 1693 | "@algolia/client-common": "4.23.3", 1694 | "@algolia/client-search": "4.23.3", 1695 | "@algolia/transporter": "4.23.3" 1696 | } 1697 | }, 1698 | "@algolia/client-analytics": { 1699 | "version": "4.23.3", 1700 | "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.23.3.tgz", 1701 | "integrity": "sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA==", 1702 | "dev": true, 1703 | "requires": { 1704 | "@algolia/client-common": "4.23.3", 1705 | "@algolia/client-search": "4.23.3", 1706 | "@algolia/requester-common": "4.23.3", 1707 | "@algolia/transporter": "4.23.3" 1708 | } 1709 | }, 1710 | "@algolia/client-common": { 1711 | "version": "4.23.3", 1712 | "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.23.3.tgz", 1713 | "integrity": "sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==", 1714 | "dev": true, 1715 | "requires": { 1716 | "@algolia/requester-common": "4.23.3", 1717 | "@algolia/transporter": "4.23.3" 1718 | } 1719 | }, 1720 | "@algolia/client-personalization": { 1721 | "version": "4.23.3", 1722 | "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.23.3.tgz", 1723 | "integrity": "sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g==", 1724 | "dev": true, 1725 | "requires": { 1726 | "@algolia/client-common": "4.23.3", 1727 | "@algolia/requester-common": "4.23.3", 1728 | "@algolia/transporter": "4.23.3" 1729 | } 1730 | }, 1731 | "@algolia/client-search": { 1732 | "version": "4.23.3", 1733 | "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.23.3.tgz", 1734 | "integrity": "sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==", 1735 | "dev": true, 1736 | "requires": { 1737 | "@algolia/client-common": "4.23.3", 1738 | "@algolia/requester-common": "4.23.3", 1739 | "@algolia/transporter": "4.23.3" 1740 | } 1741 | }, 1742 | "@algolia/logger-common": { 1743 | "version": "4.23.3", 1744 | "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.23.3.tgz", 1745 | "integrity": "sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g==", 1746 | "dev": true 1747 | }, 1748 | "@algolia/logger-console": { 1749 | "version": "4.23.3", 1750 | "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.23.3.tgz", 1751 | "integrity": "sha512-8xoiseoWDKuCVnWP8jHthgaeobDLolh00KJAdMe9XPrWPuf1by732jSpgy2BlsLTaT9m32pHI8CRfrOqQzHv3A==", 1752 | "dev": true, 1753 | "requires": { 1754 | "@algolia/logger-common": "4.23.3" 1755 | } 1756 | }, 1757 | "@algolia/recommend": { 1758 | "version": "4.23.3", 1759 | "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.23.3.tgz", 1760 | "integrity": "sha512-9fK4nXZF0bFkdcLBRDexsnGzVmu4TSYZqxdpgBW2tEyfuSSY54D4qSRkLmNkrrz4YFvdh2GM1gA8vSsnZPR73w==", 1761 | "dev": true, 1762 | "requires": { 1763 | "@algolia/cache-browser-local-storage": "4.23.3", 1764 | "@algolia/cache-common": "4.23.3", 1765 | "@algolia/cache-in-memory": "4.23.3", 1766 | "@algolia/client-common": "4.23.3", 1767 | "@algolia/client-search": "4.23.3", 1768 | "@algolia/logger-common": "4.23.3", 1769 | "@algolia/logger-console": "4.23.3", 1770 | "@algolia/requester-browser-xhr": "4.23.3", 1771 | "@algolia/requester-common": "4.23.3", 1772 | "@algolia/requester-node-http": "4.23.3", 1773 | "@algolia/transporter": "4.23.3" 1774 | } 1775 | }, 1776 | "@algolia/requester-browser-xhr": { 1777 | "version": "4.23.3", 1778 | "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.23.3.tgz", 1779 | "integrity": "sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==", 1780 | "dev": true, 1781 | "requires": { 1782 | "@algolia/requester-common": "4.23.3" 1783 | } 1784 | }, 1785 | "@algolia/requester-common": { 1786 | "version": "4.23.3", 1787 | "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.23.3.tgz", 1788 | "integrity": "sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw==", 1789 | "dev": true 1790 | }, 1791 | "@algolia/requester-node-http": { 1792 | "version": "4.23.3", 1793 | "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.23.3.tgz", 1794 | "integrity": "sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==", 1795 | "dev": true, 1796 | "requires": { 1797 | "@algolia/requester-common": "4.23.3" 1798 | } 1799 | }, 1800 | "@algolia/transporter": { 1801 | "version": "4.23.3", 1802 | "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.23.3.tgz", 1803 | "integrity": "sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ==", 1804 | "dev": true, 1805 | "requires": { 1806 | "@algolia/cache-common": "4.23.3", 1807 | "@algolia/logger-common": "4.23.3", 1808 | "@algolia/requester-common": "4.23.3" 1809 | } 1810 | }, 1811 | "@babel/parser": { 1812 | "version": "7.24.6", 1813 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", 1814 | "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", 1815 | "dev": true 1816 | }, 1817 | "@docsearch/css": { 1818 | "version": "3.6.0", 1819 | "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.0.tgz", 1820 | "integrity": "sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==", 1821 | "dev": true 1822 | }, 1823 | "@docsearch/js": { 1824 | "version": "3.6.0", 1825 | "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.6.0.tgz", 1826 | "integrity": "sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==", 1827 | "dev": true, 1828 | "requires": { 1829 | "@docsearch/react": "3.6.0", 1830 | "preact": "^10.0.0" 1831 | } 1832 | }, 1833 | "@docsearch/react": { 1834 | "version": "3.6.0", 1835 | "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.0.tgz", 1836 | "integrity": "sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==", 1837 | "dev": true, 1838 | "requires": { 1839 | "@algolia/autocomplete-core": "1.9.3", 1840 | "@algolia/autocomplete-preset-algolia": "1.9.3", 1841 | "@docsearch/css": "3.6.0", 1842 | "algoliasearch": "^4.19.1" 1843 | } 1844 | }, 1845 | "@esbuild/aix-ppc64": { 1846 | "version": "0.20.2", 1847 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", 1848 | "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", 1849 | "dev": true, 1850 | "optional": true 1851 | }, 1852 | "@esbuild/android-arm": { 1853 | "version": "0.20.2", 1854 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", 1855 | "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", 1856 | "dev": true, 1857 | "optional": true 1858 | }, 1859 | "@esbuild/android-arm64": { 1860 | "version": "0.20.2", 1861 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", 1862 | "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", 1863 | "dev": true, 1864 | "optional": true 1865 | }, 1866 | "@esbuild/android-x64": { 1867 | "version": "0.20.2", 1868 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", 1869 | "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", 1870 | "dev": true, 1871 | "optional": true 1872 | }, 1873 | "@esbuild/darwin-arm64": { 1874 | "version": "0.20.2", 1875 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", 1876 | "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", 1877 | "dev": true, 1878 | "optional": true 1879 | }, 1880 | "@esbuild/darwin-x64": { 1881 | "version": "0.20.2", 1882 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", 1883 | "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", 1884 | "dev": true, 1885 | "optional": true 1886 | }, 1887 | "@esbuild/freebsd-arm64": { 1888 | "version": "0.20.2", 1889 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", 1890 | "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", 1891 | "dev": true, 1892 | "optional": true 1893 | }, 1894 | "@esbuild/freebsd-x64": { 1895 | "version": "0.20.2", 1896 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", 1897 | "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", 1898 | "dev": true, 1899 | "optional": true 1900 | }, 1901 | "@esbuild/linux-arm": { 1902 | "version": "0.20.2", 1903 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", 1904 | "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", 1905 | "dev": true, 1906 | "optional": true 1907 | }, 1908 | "@esbuild/linux-arm64": { 1909 | "version": "0.20.2", 1910 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", 1911 | "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", 1912 | "dev": true, 1913 | "optional": true 1914 | }, 1915 | "@esbuild/linux-ia32": { 1916 | "version": "0.20.2", 1917 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", 1918 | "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", 1919 | "dev": true, 1920 | "optional": true 1921 | }, 1922 | "@esbuild/linux-loong64": { 1923 | "version": "0.20.2", 1924 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", 1925 | "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", 1926 | "dev": true, 1927 | "optional": true 1928 | }, 1929 | "@esbuild/linux-mips64el": { 1930 | "version": "0.20.2", 1931 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", 1932 | "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", 1933 | "dev": true, 1934 | "optional": true 1935 | }, 1936 | "@esbuild/linux-ppc64": { 1937 | "version": "0.20.2", 1938 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", 1939 | "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", 1940 | "dev": true, 1941 | "optional": true 1942 | }, 1943 | "@esbuild/linux-riscv64": { 1944 | "version": "0.20.2", 1945 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", 1946 | "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", 1947 | "dev": true, 1948 | "optional": true 1949 | }, 1950 | "@esbuild/linux-s390x": { 1951 | "version": "0.20.2", 1952 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", 1953 | "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", 1954 | "dev": true, 1955 | "optional": true 1956 | }, 1957 | "@esbuild/linux-x64": { 1958 | "version": "0.20.2", 1959 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", 1960 | "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", 1961 | "dev": true, 1962 | "optional": true 1963 | }, 1964 | "@esbuild/netbsd-x64": { 1965 | "version": "0.20.2", 1966 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", 1967 | "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", 1968 | "dev": true, 1969 | "optional": true 1970 | }, 1971 | "@esbuild/openbsd-x64": { 1972 | "version": "0.20.2", 1973 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", 1974 | "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", 1975 | "dev": true, 1976 | "optional": true 1977 | }, 1978 | "@esbuild/sunos-x64": { 1979 | "version": "0.20.2", 1980 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", 1981 | "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", 1982 | "dev": true, 1983 | "optional": true 1984 | }, 1985 | "@esbuild/win32-arm64": { 1986 | "version": "0.20.2", 1987 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", 1988 | "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", 1989 | "dev": true, 1990 | "optional": true 1991 | }, 1992 | "@esbuild/win32-ia32": { 1993 | "version": "0.20.2", 1994 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", 1995 | "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", 1996 | "dev": true, 1997 | "optional": true 1998 | }, 1999 | "@esbuild/win32-x64": { 2000 | "version": "0.20.2", 2001 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", 2002 | "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", 2003 | "dev": true, 2004 | "optional": true 2005 | }, 2006 | "@jridgewell/sourcemap-codec": { 2007 | "version": "1.4.15", 2008 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 2009 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 2010 | "dev": true 2011 | }, 2012 | "@rollup/rollup-android-arm-eabi": { 2013 | "version": "4.18.0", 2014 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", 2015 | "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", 2016 | "dev": true, 2017 | "optional": true 2018 | }, 2019 | "@rollup/rollup-android-arm64": { 2020 | "version": "4.18.0", 2021 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", 2022 | "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", 2023 | "dev": true, 2024 | "optional": true 2025 | }, 2026 | "@rollup/rollup-darwin-arm64": { 2027 | "version": "4.18.0", 2028 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", 2029 | "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", 2030 | "dev": true, 2031 | "optional": true 2032 | }, 2033 | "@rollup/rollup-darwin-x64": { 2034 | "version": "4.18.0", 2035 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", 2036 | "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", 2037 | "dev": true, 2038 | "optional": true 2039 | }, 2040 | "@rollup/rollup-linux-arm-gnueabihf": { 2041 | "version": "4.18.0", 2042 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", 2043 | "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", 2044 | "dev": true, 2045 | "optional": true 2046 | }, 2047 | "@rollup/rollup-linux-arm-musleabihf": { 2048 | "version": "4.18.0", 2049 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", 2050 | "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", 2051 | "dev": true, 2052 | "optional": true 2053 | }, 2054 | "@rollup/rollup-linux-arm64-gnu": { 2055 | "version": "4.18.0", 2056 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", 2057 | "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", 2058 | "dev": true, 2059 | "optional": true 2060 | }, 2061 | "@rollup/rollup-linux-arm64-musl": { 2062 | "version": "4.18.0", 2063 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", 2064 | "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", 2065 | "dev": true, 2066 | "optional": true 2067 | }, 2068 | "@rollup/rollup-linux-powerpc64le-gnu": { 2069 | "version": "4.18.0", 2070 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", 2071 | "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", 2072 | "dev": true, 2073 | "optional": true 2074 | }, 2075 | "@rollup/rollup-linux-riscv64-gnu": { 2076 | "version": "4.18.0", 2077 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", 2078 | "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", 2079 | "dev": true, 2080 | "optional": true 2081 | }, 2082 | "@rollup/rollup-linux-s390x-gnu": { 2083 | "version": "4.18.0", 2084 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", 2085 | "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", 2086 | "dev": true, 2087 | "optional": true 2088 | }, 2089 | "@rollup/rollup-linux-x64-gnu": { 2090 | "version": "4.18.0", 2091 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", 2092 | "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", 2093 | "dev": true, 2094 | "optional": true 2095 | }, 2096 | "@rollup/rollup-linux-x64-musl": { 2097 | "version": "4.18.0", 2098 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", 2099 | "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", 2100 | "dev": true, 2101 | "optional": true 2102 | }, 2103 | "@rollup/rollup-win32-arm64-msvc": { 2104 | "version": "4.18.0", 2105 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", 2106 | "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", 2107 | "dev": true, 2108 | "optional": true 2109 | }, 2110 | "@rollup/rollup-win32-ia32-msvc": { 2111 | "version": "4.18.0", 2112 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", 2113 | "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", 2114 | "dev": true, 2115 | "optional": true 2116 | }, 2117 | "@rollup/rollup-win32-x64-msvc": { 2118 | "version": "4.18.0", 2119 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", 2120 | "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", 2121 | "dev": true, 2122 | "optional": true 2123 | }, 2124 | "@shikijs/core": { 2125 | "version": "1.6.0", 2126 | "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.6.0.tgz", 2127 | "integrity": "sha512-NIEAi5U5R7BLkbW1pG/ZKu3eb1lzc3/+jD0lFsuxMT7zjaf9bbNwdNyMr7zh/Zl8EXQtQ+MYBAt5G+JLu+5DlA==", 2128 | "dev": true 2129 | }, 2130 | "@shikijs/transformers": { 2131 | "version": "1.6.0", 2132 | "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.6.0.tgz", 2133 | "integrity": "sha512-qGfHe1ECiqfE2STPWvfogIj/9Q0SK+MCRJdoITkW7AmFuB7DmbFnBT2US84+zklJOB51MzNO8RUXZiauWssJlQ==", 2134 | "dev": true, 2135 | "requires": { 2136 | "shiki": "1.6.0" 2137 | } 2138 | }, 2139 | "@types/estree": { 2140 | "version": "1.0.5", 2141 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 2142 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", 2143 | "dev": true 2144 | }, 2145 | "@types/linkify-it": { 2146 | "version": "5.0.0", 2147 | "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", 2148 | "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", 2149 | "dev": true 2150 | }, 2151 | "@types/markdown-it": { 2152 | "version": "14.1.1", 2153 | "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.1.tgz", 2154 | "integrity": "sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==", 2155 | "dev": true, 2156 | "requires": { 2157 | "@types/linkify-it": "^5", 2158 | "@types/mdurl": "^2" 2159 | } 2160 | }, 2161 | "@types/mdurl": { 2162 | "version": "2.0.0", 2163 | "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", 2164 | "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", 2165 | "dev": true 2166 | }, 2167 | "@types/web-bluetooth": { 2168 | "version": "0.0.20", 2169 | "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", 2170 | "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", 2171 | "dev": true 2172 | }, 2173 | "@vitejs/plugin-vue": { 2174 | "version": "5.0.4", 2175 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", 2176 | "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", 2177 | "dev": true, 2178 | "requires": {} 2179 | }, 2180 | "@vue/compiler-core": { 2181 | "version": "3.4.27", 2182 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz", 2183 | "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==", 2184 | "dev": true, 2185 | "requires": { 2186 | "@babel/parser": "^7.24.4", 2187 | "@vue/shared": "3.4.27", 2188 | "entities": "^4.5.0", 2189 | "estree-walker": "^2.0.2", 2190 | "source-map-js": "^1.2.0" 2191 | } 2192 | }, 2193 | "@vue/compiler-dom": { 2194 | "version": "3.4.27", 2195 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz", 2196 | "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==", 2197 | "dev": true, 2198 | "requires": { 2199 | "@vue/compiler-core": "3.4.27", 2200 | "@vue/shared": "3.4.27" 2201 | } 2202 | }, 2203 | "@vue/compiler-sfc": { 2204 | "version": "3.4.27", 2205 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz", 2206 | "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==", 2207 | "dev": true, 2208 | "requires": { 2209 | "@babel/parser": "^7.24.4", 2210 | "@vue/compiler-core": "3.4.27", 2211 | "@vue/compiler-dom": "3.4.27", 2212 | "@vue/compiler-ssr": "3.4.27", 2213 | "@vue/shared": "3.4.27", 2214 | "estree-walker": "^2.0.2", 2215 | "magic-string": "^0.30.10", 2216 | "postcss": "^8.4.38", 2217 | "source-map-js": "^1.2.0" 2218 | } 2219 | }, 2220 | "@vue/compiler-ssr": { 2221 | "version": "3.4.27", 2222 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz", 2223 | "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==", 2224 | "dev": true, 2225 | "requires": { 2226 | "@vue/compiler-dom": "3.4.27", 2227 | "@vue/shared": "3.4.27" 2228 | } 2229 | }, 2230 | "@vue/devtools-api": { 2231 | "version": "7.2.1", 2232 | "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.2.1.tgz", 2233 | "integrity": "sha512-6oNCtyFOrNdqm6GUkFujsCgFlpbsHLnZqq7edeM/+cxAbMyCWvsaCsIMUaz7AiluKLccCGEM8fhOsjaKgBvb7g==", 2234 | "dev": true, 2235 | "requires": { 2236 | "@vue/devtools-kit": "^7.2.1" 2237 | } 2238 | }, 2239 | "@vue/devtools-kit": { 2240 | "version": "7.2.1", 2241 | "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.2.1.tgz", 2242 | "integrity": "sha512-Wak/fin1X0Q8LLIfCAHBrdaaB+R6IdpSXsDByPHbQ3BmkCP0/cIo/oEGp9i0U2+gEqD4L3V9RDjNf1S34DTzQQ==", 2243 | "dev": true, 2244 | "requires": { 2245 | "@vue/devtools-shared": "^7.2.1", 2246 | "hookable": "^5.5.3", 2247 | "mitt": "^3.0.1", 2248 | "perfect-debounce": "^1.0.0", 2249 | "speakingurl": "^14.0.1" 2250 | } 2251 | }, 2252 | "@vue/devtools-shared": { 2253 | "version": "7.2.1", 2254 | "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.2.1.tgz", 2255 | "integrity": "sha512-PCJF4UknJmOal68+X9XHyVeQ+idv0LFujkTOIW30+GaMJqwFVN9LkQKX4gLqn61KkGMdJTzQ1bt7EJag3TI6AA==", 2256 | "dev": true, 2257 | "requires": { 2258 | "rfdc": "^1.3.1" 2259 | } 2260 | }, 2261 | "@vue/reactivity": { 2262 | "version": "3.4.27", 2263 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz", 2264 | "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==", 2265 | "dev": true, 2266 | "requires": { 2267 | "@vue/shared": "3.4.27" 2268 | } 2269 | }, 2270 | "@vue/runtime-core": { 2271 | "version": "3.4.27", 2272 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz", 2273 | "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==", 2274 | "dev": true, 2275 | "requires": { 2276 | "@vue/reactivity": "3.4.27", 2277 | "@vue/shared": "3.4.27" 2278 | } 2279 | }, 2280 | "@vue/runtime-dom": { 2281 | "version": "3.4.27", 2282 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz", 2283 | "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==", 2284 | "dev": true, 2285 | "requires": { 2286 | "@vue/runtime-core": "3.4.27", 2287 | "@vue/shared": "3.4.27", 2288 | "csstype": "^3.1.3" 2289 | } 2290 | }, 2291 | "@vue/server-renderer": { 2292 | "version": "3.4.27", 2293 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz", 2294 | "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==", 2295 | "dev": true, 2296 | "requires": { 2297 | "@vue/compiler-ssr": "3.4.27", 2298 | "@vue/shared": "3.4.27" 2299 | } 2300 | }, 2301 | "@vue/shared": { 2302 | "version": "3.4.27", 2303 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz", 2304 | "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==", 2305 | "dev": true 2306 | }, 2307 | "@vueuse/core": { 2308 | "version": "10.10.0", 2309 | "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.10.0.tgz", 2310 | "integrity": "sha512-vexJ/YXYs2S42B783rI95lMt3GzEwkxzC8Hb0Ndpd8rD+p+Lk/Za4bd797Ym7yq4jXqdSyj3JLChunF/vyYjUw==", 2311 | "dev": true, 2312 | "requires": { 2313 | "@types/web-bluetooth": "^0.0.20", 2314 | "@vueuse/metadata": "10.10.0", 2315 | "@vueuse/shared": "10.10.0", 2316 | "vue-demi": ">=0.14.7" 2317 | }, 2318 | "dependencies": { 2319 | "vue-demi": { 2320 | "version": "0.14.7", 2321 | "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", 2322 | "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", 2323 | "dev": true, 2324 | "requires": {} 2325 | } 2326 | } 2327 | }, 2328 | "@vueuse/integrations": { 2329 | "version": "10.10.0", 2330 | "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.10.0.tgz", 2331 | "integrity": "sha512-vHGeK7X6mkdkpcm1eE9t3Cpm21pNVfZRwrjwwbrEs9XftnSgszF4831G2rei8Dt9cIYJIfFV+iyx/29muimJPQ==", 2332 | "dev": true, 2333 | "requires": { 2334 | "@vueuse/core": "10.10.0", 2335 | "@vueuse/shared": "10.10.0", 2336 | "vue-demi": ">=0.14.7" 2337 | }, 2338 | "dependencies": { 2339 | "vue-demi": { 2340 | "version": "0.14.7", 2341 | "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", 2342 | "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", 2343 | "dev": true, 2344 | "requires": {} 2345 | } 2346 | } 2347 | }, 2348 | "@vueuse/metadata": { 2349 | "version": "10.10.0", 2350 | "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.10.0.tgz", 2351 | "integrity": "sha512-UNAo2sTCAW5ge6OErPEHb5z7NEAg3XcO9Cj7OK45aZXfLLH1QkexDcZD77HBi5zvEiLOm1An+p/4b5K3Worpug==", 2352 | "dev": true 2353 | }, 2354 | "@vueuse/shared": { 2355 | "version": "10.10.0", 2356 | "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.10.0.tgz", 2357 | "integrity": "sha512-2aW33Ac0Uk0U+9yo3Ypg9s5KcR42cuehRWl7vnUHadQyFvCktseyxxEPBi1Eiq4D2yBGACOnqLZpx1eMc7g5Og==", 2358 | "dev": true, 2359 | "requires": { 2360 | "vue-demi": ">=0.14.7" 2361 | }, 2362 | "dependencies": { 2363 | "vue-demi": { 2364 | "version": "0.14.7", 2365 | "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz", 2366 | "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==", 2367 | "dev": true, 2368 | "requires": {} 2369 | } 2370 | } 2371 | }, 2372 | "algoliasearch": { 2373 | "version": "4.23.3", 2374 | "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.23.3.tgz", 2375 | "integrity": "sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg==", 2376 | "dev": true, 2377 | "requires": { 2378 | "@algolia/cache-browser-local-storage": "4.23.3", 2379 | "@algolia/cache-common": "4.23.3", 2380 | "@algolia/cache-in-memory": "4.23.3", 2381 | "@algolia/client-account": "4.23.3", 2382 | "@algolia/client-analytics": "4.23.3", 2383 | "@algolia/client-common": "4.23.3", 2384 | "@algolia/client-personalization": "4.23.3", 2385 | "@algolia/client-search": "4.23.3", 2386 | "@algolia/logger-common": "4.23.3", 2387 | "@algolia/logger-console": "4.23.3", 2388 | "@algolia/recommend": "4.23.3", 2389 | "@algolia/requester-browser-xhr": "4.23.3", 2390 | "@algolia/requester-common": "4.23.3", 2391 | "@algolia/requester-node-http": "4.23.3", 2392 | "@algolia/transporter": "4.23.3" 2393 | } 2394 | }, 2395 | "csstype": { 2396 | "version": "3.1.3", 2397 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 2398 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 2399 | "dev": true 2400 | }, 2401 | "entities": { 2402 | "version": "4.5.0", 2403 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 2404 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 2405 | "dev": true 2406 | }, 2407 | "esbuild": { 2408 | "version": "0.20.2", 2409 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", 2410 | "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", 2411 | "dev": true, 2412 | "requires": { 2413 | "@esbuild/aix-ppc64": "0.20.2", 2414 | "@esbuild/android-arm": "0.20.2", 2415 | "@esbuild/android-arm64": "0.20.2", 2416 | "@esbuild/android-x64": "0.20.2", 2417 | "@esbuild/darwin-arm64": "0.20.2", 2418 | "@esbuild/darwin-x64": "0.20.2", 2419 | "@esbuild/freebsd-arm64": "0.20.2", 2420 | "@esbuild/freebsd-x64": "0.20.2", 2421 | "@esbuild/linux-arm": "0.20.2", 2422 | "@esbuild/linux-arm64": "0.20.2", 2423 | "@esbuild/linux-ia32": "0.20.2", 2424 | "@esbuild/linux-loong64": "0.20.2", 2425 | "@esbuild/linux-mips64el": "0.20.2", 2426 | "@esbuild/linux-ppc64": "0.20.2", 2427 | "@esbuild/linux-riscv64": "0.20.2", 2428 | "@esbuild/linux-s390x": "0.20.2", 2429 | "@esbuild/linux-x64": "0.20.2", 2430 | "@esbuild/netbsd-x64": "0.20.2", 2431 | "@esbuild/openbsd-x64": "0.20.2", 2432 | "@esbuild/sunos-x64": "0.20.2", 2433 | "@esbuild/win32-arm64": "0.20.2", 2434 | "@esbuild/win32-ia32": "0.20.2", 2435 | "@esbuild/win32-x64": "0.20.2" 2436 | } 2437 | }, 2438 | "estree-walker": { 2439 | "version": "2.0.2", 2440 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 2441 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 2442 | "dev": true 2443 | }, 2444 | "focus-trap": { 2445 | "version": "7.5.4", 2446 | "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", 2447 | "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", 2448 | "dev": true, 2449 | "requires": { 2450 | "tabbable": "^6.2.0" 2451 | } 2452 | }, 2453 | "fsevents": { 2454 | "version": "2.3.3", 2455 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2456 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2457 | "dev": true, 2458 | "optional": true 2459 | }, 2460 | "hookable": { 2461 | "version": "5.5.3", 2462 | "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", 2463 | "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", 2464 | "dev": true 2465 | }, 2466 | "magic-string": { 2467 | "version": "0.30.10", 2468 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", 2469 | "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", 2470 | "dev": true, 2471 | "requires": { 2472 | "@jridgewell/sourcemap-codec": "^1.4.15" 2473 | } 2474 | }, 2475 | "mark.js": { 2476 | "version": "8.11.1", 2477 | "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", 2478 | "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", 2479 | "dev": true 2480 | }, 2481 | "minisearch": { 2482 | "version": "6.3.0", 2483 | "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz", 2484 | "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==", 2485 | "dev": true 2486 | }, 2487 | "mitt": { 2488 | "version": "3.0.1", 2489 | "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", 2490 | "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", 2491 | "dev": true 2492 | }, 2493 | "nanoid": { 2494 | "version": "3.3.7", 2495 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 2496 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 2497 | "dev": true 2498 | }, 2499 | "perfect-debounce": { 2500 | "version": "1.0.0", 2501 | "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", 2502 | "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", 2503 | "dev": true 2504 | }, 2505 | "picocolors": { 2506 | "version": "1.0.1", 2507 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", 2508 | "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", 2509 | "dev": true 2510 | }, 2511 | "postcss": { 2512 | "version": "8.4.38", 2513 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", 2514 | "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", 2515 | "dev": true, 2516 | "requires": { 2517 | "nanoid": "^3.3.7", 2518 | "picocolors": "^1.0.0", 2519 | "source-map-js": "^1.2.0" 2520 | } 2521 | }, 2522 | "preact": { 2523 | "version": "10.22.0", 2524 | "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.0.tgz", 2525 | "integrity": "sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==", 2526 | "dev": true 2527 | }, 2528 | "rfdc": { 2529 | "version": "1.3.1", 2530 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", 2531 | "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", 2532 | "dev": true 2533 | }, 2534 | "rollup": { 2535 | "version": "4.18.0", 2536 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", 2537 | "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", 2538 | "dev": true, 2539 | "requires": { 2540 | "@rollup/rollup-android-arm-eabi": "4.18.0", 2541 | "@rollup/rollup-android-arm64": "4.18.0", 2542 | "@rollup/rollup-darwin-arm64": "4.18.0", 2543 | "@rollup/rollup-darwin-x64": "4.18.0", 2544 | "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", 2545 | "@rollup/rollup-linux-arm-musleabihf": "4.18.0", 2546 | "@rollup/rollup-linux-arm64-gnu": "4.18.0", 2547 | "@rollup/rollup-linux-arm64-musl": "4.18.0", 2548 | "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", 2549 | "@rollup/rollup-linux-riscv64-gnu": "4.18.0", 2550 | "@rollup/rollup-linux-s390x-gnu": "4.18.0", 2551 | "@rollup/rollup-linux-x64-gnu": "4.18.0", 2552 | "@rollup/rollup-linux-x64-musl": "4.18.0", 2553 | "@rollup/rollup-win32-arm64-msvc": "4.18.0", 2554 | "@rollup/rollup-win32-ia32-msvc": "4.18.0", 2555 | "@rollup/rollup-win32-x64-msvc": "4.18.0", 2556 | "@types/estree": "1.0.5", 2557 | "fsevents": "~2.3.2" 2558 | } 2559 | }, 2560 | "search-insights": { 2561 | "version": "2.14.0", 2562 | "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.14.0.tgz", 2563 | "integrity": "sha512-OLN6MsPMCghDOqlCtsIsYgtsC0pnwVTyT9Mu6A3ewOj1DxvzZF6COrn2g86E/c05xbktB0XN04m/t1Z+n+fTGw==", 2564 | "dev": true, 2565 | "peer": true 2566 | }, 2567 | "shiki": { 2568 | "version": "1.6.0", 2569 | "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.6.0.tgz", 2570 | "integrity": "sha512-P31ROeXcVgW/k3Z+vUUErcxoTah7ZRaimctOpzGuqAntqnnSmx1HOsvnbAB8Z2qfXPRhw61yptAzCsuKOhTHwQ==", 2571 | "dev": true, 2572 | "requires": { 2573 | "@shikijs/core": "1.6.0" 2574 | } 2575 | }, 2576 | "source-map-js": { 2577 | "version": "1.2.0", 2578 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", 2579 | "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", 2580 | "dev": true 2581 | }, 2582 | "speakingurl": { 2583 | "version": "14.0.1", 2584 | "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", 2585 | "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", 2586 | "dev": true 2587 | }, 2588 | "tabbable": { 2589 | "version": "6.2.0", 2590 | "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", 2591 | "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", 2592 | "dev": true 2593 | }, 2594 | "vite": { 2595 | "version": "5.2.11", 2596 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", 2597 | "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", 2598 | "dev": true, 2599 | "requires": { 2600 | "esbuild": "^0.20.1", 2601 | "fsevents": "~2.3.3", 2602 | "postcss": "^8.4.38", 2603 | "rollup": "^4.13.0" 2604 | } 2605 | }, 2606 | "vitepress": { 2607 | "version": "1.2.2", 2608 | "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.2.2.tgz", 2609 | "integrity": "sha512-uZ3nXR5NY4nYj3RJWCo5jev9qlNZAQo5SUXu1U0QSUx84cUm/o7hCTDVjZ4njVSVui+PsV1oAbdQOg8ygbaf4w==", 2610 | "dev": true, 2611 | "requires": { 2612 | "@docsearch/css": "^3.6.0", 2613 | "@docsearch/js": "^3.6.0", 2614 | "@shikijs/core": "^1.5.2", 2615 | "@shikijs/transformers": "^1.5.2", 2616 | "@types/markdown-it": "^14.1.1", 2617 | "@vitejs/plugin-vue": "^5.0.4", 2618 | "@vue/devtools-api": "^7.2.0", 2619 | "@vue/shared": "^3.4.27", 2620 | "@vueuse/core": "^10.9.0", 2621 | "@vueuse/integrations": "^10.9.0", 2622 | "focus-trap": "^7.5.4", 2623 | "mark.js": "8.11.1", 2624 | "minisearch": "^6.3.0", 2625 | "shiki": "^1.5.2", 2626 | "vite": "^5.2.11", 2627 | "vue": "^3.4.27" 2628 | } 2629 | }, 2630 | "vue": { 2631 | "version": "3.4.27", 2632 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz", 2633 | "integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==", 2634 | "dev": true, 2635 | "requires": { 2636 | "@vue/compiler-dom": "3.4.27", 2637 | "@vue/compiler-sfc": "3.4.27", 2638 | "@vue/runtime-dom": "3.4.27", 2639 | "@vue/server-renderer": "3.4.27", 2640 | "@vue/shared": "3.4.27" 2641 | } 2642 | } 2643 | } 2644 | } 2645 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "vitepress": "^1.2.0" 4 | }, 5 | "scripts": { 6 | "docs:dev": "vitepress dev docs", 7 | "docs:build": "vitepress build docs", 8 | "docs:preview": "vitepress preview docs" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/Bases/BaseHelpers.php: -------------------------------------------------------------------------------- 1 | argument('name'); 35 | 36 | //Validate Name Class 37 | if (!$this->validateName($name)) { 38 | $this->notifyError('The name that you want to assign to the Helpers category is invalid, it must contain only letters and start each word with a capital letter without spaces or accents.'); 39 | 40 | return; 41 | } 42 | 43 | //Generate Name 44 | $className = $this->studly($name); 45 | $fileName = $this->fileName($className); 46 | 47 | // Ensure the Helpers directory exists 48 | $path = $this->ensureDirectoryExists('Helpers'); 49 | 50 | // Generate the content from a stub file 51 | $stub = $this->getStub($className); 52 | 53 | // Set the file path 54 | $filePath = $this->filePath($path, $fileName); 55 | 56 | // Put the generated content into the file 57 | if (!$this->fileExist($filePath) && $this->filePut($filePath, $stub)) { 58 | $this->notifyInfo("Helper class [$filePath] created successfully."); 59 | } else { 60 | $this->notifyError("Failed to create helper class [$filePath]. The class already exists"); 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/Commands/CreateHelpersFunctions.php: -------------------------------------------------------------------------------- 1 | ensureDirectoryExists('Helpers'); 35 | 36 | // Generate the content from a stub file 37 | $stub = $this->getStubFunction(); 38 | $fileName = 'Functions.php'; 39 | 40 | // Set the file path 41 | $filePath = $this->filePath($path, $fileName); 42 | 43 | // Put the generated content into the file 44 | if (!$this->fileExist($filePath) && $this->filePut($filePath, $stub)) { 45 | $this->notifyInfo("Helper file [$filePath] created successfully."); 46 | } else { 47 | $this->notifyError("Failed to create helper file [$filePath]. The file already exists."); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/Commands/GenerateHelpers.php: -------------------------------------------------------------------------------- 1 | ensureDirectoryExists('Helpers'); 48 | 49 | // Generate helper files 50 | foreach ($this->files as $file) { 51 | $filePath = $this->filePath($helpersPath, $file); 52 | 53 | if (!$this->fileExist($filePath)) { 54 | // Get the class name from the file path 55 | $className = $this->getClassName($filePath); 56 | 57 | // Get the content from a stub file 58 | $stub = $this->getStub($className); 59 | if ($this->filePut($filePath, $stub)) { 60 | $this->notifyInfo("Helper class [$filePath] created successfully."); 61 | } else { 62 | $this->notifyError("Failed to create helper class [$filePath]."); 63 | } 64 | } else { 65 | $this->notifyError("Failed to create helper class [$filePath]. The class already exists"); 66 | } 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/Commands/Traits/CommandUtilities.php: -------------------------------------------------------------------------------- 1 | components !== null; 30 | } 31 | 32 | /** 33 | * Display an error message using the 'components' property if available, otherwise use the default 'error' method. 34 | * 35 | * @param string $message 36 | * 37 | * @return void 38 | */ 39 | private function notifyError($message) 40 | { 41 | if ($this->validateComponents()) { 42 | $this->components->error($message); 43 | } else { 44 | $this->error($message); 45 | } 46 | } 47 | 48 | /** 49 | * Display an info message using the 'components' property if available, otherwise use the default 'info' method. 50 | * 51 | * @param string $message 52 | * 53 | * @return void 54 | */ 55 | private function notifyInfo($message) 56 | { 57 | if ($this->validateComponents()) { 58 | $this->components->info($message); 59 | } else { 60 | $this->info($message); 61 | } 62 | } 63 | 64 | /** 65 | * Convert a string to studly case. 66 | * 67 | * @param string $name 68 | * 69 | * @return string 70 | */ 71 | private function studly($name) 72 | { 73 | return Str::studly($name); 74 | } 75 | 76 | /** 77 | * Generate the file name by adding '.php' extension to the given name. 78 | * 79 | * @param string $name 80 | * 81 | * @return string 82 | */ 83 | private function fileName($name) 84 | { 85 | return $name.'.php'; 86 | } 87 | 88 | /** 89 | * Ensure the existence of the 'Helpers' directory and return its path. 90 | * 91 | * @return string 92 | */ 93 | private function ensureDirectoryExists($directory) 94 | { 95 | $path = app_path($directory); 96 | File::ensureDirectoryExists($path); 97 | 98 | return $path; 99 | } 100 | 101 | /** 102 | * Get the full file path by combining the directory path and the file name. 103 | * 104 | * @param string $path 105 | * @param string $fileName 106 | * 107 | * @return string 108 | */ 109 | private function filePath($path, $fileName) 110 | { 111 | return $path.'/'.$fileName; 112 | } 113 | 114 | /** 115 | * Check if the file exists. 116 | * 117 | * @param string $filePath 118 | * 119 | * @return bool 120 | */ 121 | private function fileExist($filePath) 122 | { 123 | return File::exists($filePath); 124 | } 125 | 126 | /** 127 | * Put the generated content into the file. 128 | * 129 | * @param string $filePath 130 | * @param string $stub 131 | * 132 | * @return bool 133 | */ 134 | private function filePut($filePath, $stub) 135 | { 136 | return File::put($filePath, $stub); 137 | } 138 | 139 | /** 140 | * Get the content of a file. 141 | * 142 | * @param string $path 143 | * 144 | * @return string 145 | */ 146 | private function fileGet($path) 147 | { 148 | return File::get($path); 149 | } 150 | 151 | /** 152 | * Replace a search string with a replace string in the target string. 153 | * 154 | * @param string $search 155 | * @param string $replace 156 | * @param string $target 157 | * 158 | * @return string 159 | */ 160 | private function replaceString($search, $replace, $target) 161 | { 162 | return str_replace($search, $replace, $target); 163 | } 164 | 165 | /** 166 | * Generate the content from the stub file. 167 | * 168 | * @param string $className 169 | * 170 | * @return string 171 | */ 172 | private function getStub($className) 173 | { 174 | $stubs = [ 175 | 'Arr' => '/../../Stubs/Arr.stub', 176 | 'Date' => '/../../Stubs/Date.stub', 177 | 'File' => '/../../Stubs/File.stub', 178 | 'Number' => '/../../Stubs/Number.stub', 179 | 'Str' => '/../../Stubs/Str.stub', 180 | ]; 181 | 182 | if (isset($stubs[$className])) { 183 | return $this->fileGet(__DIR__.$stubs[$className]); 184 | } else { 185 | return $this->replaceString('{{class}}', $className, $this->fileGet(__DIR__.'/../../Stubs/Custom.stub')); 186 | } 187 | } 188 | 189 | /** 190 | * Generate the content from the stub file. 191 | * 192 | * @return string 193 | */ 194 | private function getStubFunction() 195 | { 196 | return $this->fileGet(__DIR__.'/../../Stubs/Functions.stub'); 197 | } 198 | 199 | /** 200 | * Get the class name from the file path. 201 | * 202 | * @param string $filePath 203 | * 204 | * @return string 205 | */ 206 | private function getClassName($filePath) 207 | { 208 | return pathinfo($filePath, PATHINFO_FILENAME); 209 | } 210 | } 211 | -------------------------------------------------------------------------------- /src/Helpers.php: -------------------------------------------------------------------------------- 1 | registerCommands(); 17 | } 18 | 19 | /** 20 | * Register the commands provided by the service provider. 21 | * 22 | * @return void 23 | */ 24 | protected function registerCommands() 25 | { 26 | $this->commands([ 27 | \Helpers\Illuminate\Support\Commands\GenerateHelpers::class, 28 | \Helpers\Illuminate\Support\Commands\CreateHelpers::class, 29 | \Helpers\Illuminate\Support\Commands\CreateHelpersFunctions::class, 30 | ]); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/Stubs/Arr.stub: -------------------------------------------------------------------------------- 1 | parseCallback(string $callback, ?string $default = null) Parse a Class[@]method style callback into class and method. 52 | * @method static string plural(string $value, int|array|\Countable $count = 2) Get the plural form of an English word. 53 | * @method static string pluralStudly(string $value, int|array|\Countable $count = 2) Pluralize the last word of an English, studly caps case string. 54 | * @method static string password(int $length = 32, bool $letters = true, bool $numbers = true, bool $symbols = true, bool $spaces = false) Generate a random, secure password. 55 | * @method static int|false position(string $haystack, string $needle, int $offset = 0, ?string $encoding = null) Find the multi-byte safe position of the first occurrence of a given substring in a string. 56 | * @method static string random(int $length = 16) Generate a more truly "random" alpha-numeric string. 57 | * @method static void createRandomStringsUsing(?callable $factory = null) Set the callable that will be used to generate random strings. 58 | * @method static void createRandomStringsUsingSequence(array $sequence, $whenMissing = null) Set the sequence that will be used to generate random strings. 59 | * @method static void createRandomStringsNormally() Indicate that random strings should be created normally and not using a custom factory. 60 | * @method static string repeat(string $string, int $times) Repeat the given string. 61 | * @method static string replaceArray(string $search, iterable $replace, string $subject) Replace a given value in the string sequentially with an array. 62 | * @method static string toStringOr(mixed $value, string $fallback) Convert the given value to a string or return the given fallback on failure. 63 | * @method static string|string[] replace(string|iterable $search, string|iterable $replace, string|iterable $subject, bool $caseSensitive = true) Replace the given value in the given string. 64 | * @method static string replaceFirst(string $search, string $replace, string $subject) Replace the first occurrence of a given value in the string. 65 | * @method static string replaceStart(string $search, string $replace, string $subject) Replace the first occurrence of the given value if it appears at the start of the string. 66 | * @method static string replaceLast(string $search, string $replace, string $subject) Replace the last occurrence of a given value in the string. 67 | * @method static string replaceEnd(string $search, string $replace, string $subject) Replace the last occurrence of a given value if it appears at the end of the string. 68 | * @method static string|string[]|null replaceMatches(array|string $pattern, \Closure|string[]|string $replace, array|string $subject, int $limit = -1) Replace the patterns matching the given regular expression. 69 | * @method static string remove(string|iterable $search, string|iterable $subject, bool $caseSensitive = true) Remove any occurrence of the given string in the subject. 70 | * @method static string reverse(string $value) Reverse the given string. 71 | * @method static string start(string $value, string $prefix) Begin a string with a single instance of a given value. 72 | * @method static string upper(string $value) Convert the given string to upper-case. 73 | * @method static string title(string $value) Convert the given string to proper case. 74 | * @method static string headline(string $value) Convert the given string to proper case for each word. 75 | * @method static string apa(string $value) Convert the given string to APA-style title case. 76 | * @method static string singular(string $value) Get the singular form of an English word. 77 | * @method static string slug(string $title, string $separator = '-', ?string $language = 'en', array $dictionary = ['@' => 'at']) Generate a URL friendly "slug" from a given string. 78 | * @method static string snake(string $value, string $delimiter = '_') Convert a string to snake case. 79 | * @method static string trim(string $value, ?string $charlist = null) Remove all whitespace from both ends of a string. 80 | * @method static string ltrim(string $value, ?string $charlist = null) Remove all whitespace from the beginning of a string. 81 | * @method static string rtrim(string $value, ?string $charlist = null) Remove all whitespace from the end of a string. 82 | * @method static string squish(string $value) Remove all "extra" blank space from the given string. 83 | * @method static bool startsWith(string $haystack, string|iterable $needles) Determine if a given string starts with a given substring. 84 | * @method static string studly(string $value) Convert a value to studly caps case. 85 | * @method static string substr(string $string, int $start, ?int $length = null, string $encoding = 'UTF-8') Returns the portion of the string specified by the start and length parameters. 86 | * @method static int substrCount(string $haystack, string $needle, int $offset = 0, ?int $length = null) Returns the number of substring occurrences. 87 | * @method static string|string[] substrReplace(string|string[] $string, string|string[] $replace, int|int[] $offset = 0, ?int|int[] $length = null) Replace text within a portion of a string. 88 | * @method static string swap(array $map, string $subject) Swap multiple keywords in a string with other keywords. 89 | * @method static string take(string $string, int $limit) Take the first or last {$limit} characters of a string. 90 | * @method static string toBase64(string $string) Convert the given string to Base64 encoding. 91 | * @method static string|false fromBase64(string $string, bool $strict = false) Decode the given Base64 encoded string. 92 | * @method static string lcfirst(string $string) Make a string's first character lowercase. 93 | * @method static string ucfirst(string $string) Make a string's first character uppercase. 94 | * @method static string[] ucsplit(string $string) Split a string into pieces by uppercase characters. 95 | * @method static int wordCount(string $string, ?string $characters = null) Get the number of words a string contains. 96 | * @method static \Ramsey\Uuid\UuidInterface uuid() Generate a UUID (version 4). 97 | * @method static \Ramsey\Uuid\UuidInterface orderedUuid() Generate a time-ordered UUID. 98 | * @method static void createUuidsUsing(?callable $factory = null) Set the callable that will be used to generate UUIDs. 99 | * @method static void createUuidsUsingSequence(array $sequence, $whenMissing = null) Set the sequence that will be used to generate UUIDs. 100 | * @method static \Ramsey\Uuid\UuidInterface freezeUuids(?Closure $callback = null) Always return the same UUID when generating new UUIDs. 101 | * @method static void createUuidsNormally() Indicate that UUIDs should be created normally and not using a custom factory. 102 | * @method static \Symfony\Component\Uid\Ulid ulid(\DateTimeInterface|null $time = null) Generate a ULID. 103 | * @method static void createUlidsNormally() Indicate that ULIDs should be created normally and not using a custom factory. 104 | * @method static void createUlidsUsing(?callable $factory = null) Set the callable that will be used to generate ULIDs. 105 | * @method static void createUlidsUsingSequence(array $sequence, $whenMissing = null) Set the sequence that will be used to generate ULIDs. 106 | * @method static Ulid freezeUlids(?Closure $callback = null) Always return the same ULID when generating new ULIDs. 107 | * @method static void flushCache() Remove all strings from the casing caches. 108 | */ 109 | 110 | class Str extends BaseHelpers 111 | { 112 | use LaravelStrings; 113 | 114 | /** 115 | * Check for possible alphanumeric characters. 116 | * 117 | * @param string $string The string to check. 118 | * 119 | * @return bool True if the string is alphanumeric, false otherwise. 120 | */ 121 | public static function isAlphanumeric(string $string) 122 | { 123 | return ctype_alnum($string); 124 | } 125 | 126 | /** 127 | * Check for possible alphabetic characters. 128 | * 129 | * @param string $string The string to check. 130 | * 131 | * @return bool True if the string is alphabetic, false otherwise. 132 | */ 133 | public static function isAlpha(string $string) 134 | { 135 | return ctype_alpha($string); 136 | } 137 | 138 | /** 139 | * Check for possible control characters. 140 | * 141 | * @param string $string The string to check. 142 | * 143 | * @return bool True if the string contains control characters, false otherwise. 144 | */ 145 | public static function isControl(string $string) 146 | { 147 | return ctype_cntrl($string); 148 | } 149 | 150 | /** 151 | * Check for possible numeric characters. 152 | * 153 | * @param string $string The string to check. 154 | * 155 | * @return bool True if the string contains numeric characters, false otherwise. 156 | */ 157 | public static function isDigit(string $string) 158 | { 159 | return ctype_digit($string); 160 | } 161 | 162 | /** 163 | * Check for possible printable characters, excluding spaces. 164 | * 165 | * @param string $string The string to check. 166 | * 167 | * @return bool True if the string contains printable characters excluding spaces, false otherwise. 168 | */ 169 | public static function isGraph(string $string) 170 | { 171 | return ctype_graph($string); 172 | } 173 | 174 | /** 175 | * Check for possible lowercase characters. 176 | * 177 | * @param string $string The string to check. 178 | * 179 | * @return bool True if the string contains lowercase characters, false otherwise. 180 | */ 181 | public static function isLower(string $string) 182 | { 183 | return ctype_lower($string); 184 | } 185 | 186 | /** 187 | * Check for possible printable characters. 188 | * 189 | * @param string $string The string to check. 190 | * 191 | * @return bool True if the string contains printable characters, false otherwise. 192 | */ 193 | public static function isPrint(string $string) 194 | { 195 | return ctype_print($string); 196 | } 197 | 198 | /** 199 | * Check for possible printable characters that are neither spaces nor alphanumeric. 200 | * 201 | * @param string $string The string to check. 202 | * 203 | * @return bool True if the string contains printable characters that are neither spaces nor alphanumeric, false otherwise. 204 | */ 205 | public static function isPunct(string $string) 206 | { 207 | return ctype_punct($string); 208 | } 209 | 210 | /** 211 | * Check for possible whitespace characters. 212 | * 213 | * @param string $string The string to check. 214 | * 215 | * @return bool True if the string contains whitespace characters, false otherwise. 216 | */ 217 | public static function isSpace(string $string) 218 | { 219 | return ctype_space($string); 220 | } 221 | 222 | /** 223 | * Check for possible uppercase characters. 224 | * 225 | * @param string $string The string to check. 226 | * 227 | * @return bool True if the string contains uppercase characters, false otherwise. 228 | */ 229 | public static function isUpper(string $string) 230 | { 231 | return ctype_upper($string); 232 | } 233 | 234 | /** 235 | * Check for possible hexadecimal characters. 236 | * 237 | * @param string $string The string to check. 238 | * 239 | * @return bool True if the string contains hexadecimal characters, false otherwise. 240 | */ 241 | public static function isHex(string $string) 242 | { 243 | return ctype_xdigit($string); 244 | } 245 | } 246 | --------------------------------------------------------------------------------