├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── composer.json ├── package-lock.json ├── package.json ├── resources ├── dist │ └── progress.css └── views │ └── column.blade.php ├── src ├── FilamentProgressColumnServiceProvider.php └── ProgressColumn.php └── tailwind.config.js /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to `filament-progress-column` will be documented in this file. 4 | 5 | ## v1.0.1 - 2025-05-20 6 | 7 | ### What's Changed 8 | 9 | * Laravel 12 support by @Sicklou in https://github.com/ryangjchandler/filament-progress-column/pull/31 10 | 11 | **Full Changelog**: https://github.com/ryangjchandler/filament-progress-column/compare/v1.0.0...v1.0.1 12 | 13 | ## v1.0.0 - 2024-03-25 14 | 15 | * Support for Laravel 11. 16 | * Support for custom Filament generated colours. 17 | 18 | ## v0.4.1 - 2023-12-04 19 | 20 | **Full Changelog**: https://github.com/ryangjchandler/filament-progress-column/compare/v0.4.0...v0.4.1 21 | 22 | ## v0.4.0 - 2023-12-04 23 | 24 | ### What's Changed 25 | 26 | * build(deps): bump dependabot/fetch-metadata from 1.3.6 to 1.4.0 by @dependabot in https://github.com/ryangjchandler/filament-progress-column/pull/16 27 | * build(deps): bump dependabot/fetch-metadata from 1.4.0 to 1.5.1 by @dependabot in https://github.com/ryangjchandler/filament-progress-column/pull/17 28 | * build(deps): bump dependabot/fetch-metadata from 1.5.1 to 1.6.0 by @dependabot in https://github.com/ryangjchandler/filament-progress-column/pull/19 29 | * Filament v3 Support by @Log1x in https://github.com/ryangjchandler/filament-progress-column/pull/20 30 | 31 | ### New Contributors 32 | 33 | * @Log1x made their first contribution in https://github.com/ryangjchandler/filament-progress-column/pull/20 34 | 35 | **Full Changelog**: https://github.com/ryangjchandler/filament-progress-column/compare/v0.3.2...v0.4.0 36 | 37 | ## v0.3.2 - 2023-04-03 38 | 39 | ### What's Changed 40 | 41 | - build(deps): bump dependabot/fetch-metadata from 1.3.1 to 1.3.3 by @dependabot in https://github.com/ryangjchandler/filament-progress-column/pull/6 42 | - build(deps): bump dependabot/fetch-metadata from 1.3.3 to 1.3.4 by @dependabot in https://github.com/ryangjchandler/filament-progress-column/pull/8 43 | - build(deps): bump dependabot/fetch-metadata from 1.3.4 to 1.3.5 by @dependabot in https://github.com/ryangjchandler/filament-progress-column/pull/11 44 | - build(deps): bump dependabot/fetch-metadata from 1.3.5 to 1.3.6 by @dependabot in https://github.com/ryangjchandler/filament-progress-column/pull/13 45 | - chore: add support for Laravel 10 by @ryangjchandler in https://github.com/ryangjchandler/filament-progress-column/pull/15 46 | 47 | ### New Contributors 48 | 49 | - @dependabot made their first contribution in https://github.com/ryangjchandler/filament-progress-column/pull/6 50 | 51 | **Full Changelog**: https://github.com/ryangjchandler/filament-progress-column/compare/v0.3.1...v0.3.2 52 | 53 | ## v0.3.1 - 2022-06-29 54 | 55 | ### What's Changed 56 | 57 | - allow additional tailwind colors by @simonbuehler in https://github.com/ryangjchandler/filament-progress-column/pull/5 58 | 59 | **Full Changelog**: https://github.com/ryangjchandler/filament-progress-column/compare/v0.3.0...v0.3.1 60 | 61 | ## v0.3.0 - 2022-06-27 62 | 63 | ### What's Changed 64 | 65 | - Update README.md by @Sicklou in https://github.com/ryangjchandler/filament-progress-column/pull/3 66 | - add Color callback by @simonbuehler in https://github.com/ryangjchandler/filament-progress-column/pull/4 67 | 68 | ### New Contributors 69 | 70 | - @Sicklou made their first contribution in https://github.com/ryangjchandler/filament-progress-column/pull/3 71 | - @simonbuehler made their first contribution in https://github.com/ryangjchandler/filament-progress-column/pull/4 72 | 73 | **Full Changelog**: https://github.com/ryangjchandler/filament-progress-column/compare/v0.2.0...v0.3.0 74 | 75 | ## v0.2.0 - 2022-05-29 76 | 77 | ### What's Changed 78 | 79 | - feature: polling by @ryangjchandler in https://github.com/ryangjchandler/filament-progress-column/pull/2 80 | 81 | ### New Contributors 82 | 83 | - @ryangjchandler made their first contribution in https://github.com/ryangjchandler/filament-progress-column/pull/2 84 | 85 | **Full Changelog**: https://github.com/ryangjchandler/filament-progress-column/compare/v0.1.0...v0.2.0 86 | 87 | ## v0.1.0 - 2022-05-29 88 | 89 | **Full Changelog**: https://github.com/ryangjchandler/filament-progress-column/commits/v0.1.0 90 | 91 | ## 1.0.0 - 202X-XX-XX 92 | 93 | - initial release 94 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) ryangjchandler 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 13 | all 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 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Add a progress bar column to your Filament tables. 2 | 3 | [![Latest Version on Packagist](https://img.shields.io/packagist/v/ryangjchandler/filament-progress-column.svg?style=flat-square)](https://packagist.org/packages/ryangjchandler/filament-progress-column) 4 | [![GitHub Tests Action Status](https://img.shields.io/github/workflow/status/ryangjchandler/filament-progress-column/run-tests?label=tests)](https://github.com/ryangjchandler/filament-progress-column/actions?query=workflow%3Arun-tests+branch%3Amain) 5 | [![GitHub Code Style Action Status](https://img.shields.io/github/workflow/status/ryangjchandler/filament-progress-column/Check%20&%20fix%20styling?label=code%20style)](https://github.com/ryangjchandler/filament-progress-column/actions?query=workflow%3A"Check+%26+fix+styling"+branch%3Amain) 6 | [![Total Downloads](https://img.shields.io/packagist/dt/ryangjchandler/filament-progress-column.svg?style=flat-square)](https://packagist.org/packages/ryangjchandler/filament-progress-column) 7 | 8 | This package provides a `ProgessColumn` that can be used to display a progress bar in a Filament table. 9 | 10 | ## Installation 11 | 12 | You can install the package via Composer: 13 | 14 | ```bash 15 | composer require ryangjchandler/filament-progress-column 16 | ``` 17 | 18 | If you're **not** using the `filament/admin` package, you should also add the following line to the top of your CSS: 19 | 20 | ```css 21 | @import '../../vendor/ryangjchandler/filament-progress-column/resources/dist/progress.css' 22 | ``` 23 | 24 | Optionally, you can publish the views using 25 | 26 | ```bash 27 | php artisan vendor:publish --tag="filament-progress-column-views" 28 | ``` 29 | 30 | ## Usage 31 | 32 | Add the `ProgressColumn` to your table: 33 | 34 | ```php 35 | use RyanChandler\FilamentProgressColumn\ProgressColumn; 36 | 37 | protected function getTableColumns(): array 38 | { 39 | return [ 40 | ProgressColumn::make('progress'), 41 | ]; 42 | } 43 | ``` 44 | 45 | This will render a progress bar and used the value of `$record->progress` as the current progress. 46 | 47 |

48 | 49 |

50 | 51 | ### Dynamic progress calculation 52 | 53 | If you wish to calculate the progress dynamically, provide a `Closure` to the `ProgressColumn::progress()` method. 54 | 55 | ```php 56 | protected function getTableColumns(): array 57 | { 58 | return [ 59 | ProgressColumn::make('progress') 60 | ->progress(function ($record) { 61 | return ($record->rows_complete / $record->total_rows) * 100; 62 | }), 63 | ]; 64 | } 65 | ``` 66 | 67 | ### Polling 68 | 69 | If you would like your progress bar to update after a period of time, call the `ProgressBar::poll()` method and provide a valid modifier string for the `wire:poll` directive. 70 | 71 | ```php 72 | protected function getTableColumns(): array 73 | { 74 | return [ 75 | ProgressColumn::make('progress') 76 | ->poll('5s') 77 | ]; 78 | } 79 | ``` 80 | 81 | This will result in a `wire:poll.5s` directive being added to the column and the value of your progress bar will update every 5 seconds. 82 | 83 | #### Dynamic polling 84 | 85 | There might be scenarios where you only want to poll if some condition is met. This can be achieved by returning `?string` from a `Closure`. 86 | 87 | ```php 88 | protected function getTableColumns(): array 89 | { 90 | return [ 91 | ProgressColumn::make('progress') 92 | ->poll(function ($record) { 93 | return $record->progress < 100 ? '5s' : null; 94 | }) 95 | ]; 96 | } 97 | ``` 98 | 99 | Now the progress bar will only be updated every 5 seconds **if** the progress is less than 100. 100 | 101 | ### Colors 102 | 103 | By default, the progress bar will be the same as your `primary` color. If you wish to change this, provide a new string to `ProgressBar::color()`. 104 | 105 | ```php 106 | protected function getTableColumns(): array 107 | { 108 | return [ 109 | ProgressColumn::make('progress') 110 | ->color('warning'), 111 | ]; 112 | } 113 | ``` 114 | 115 | With a [custom filament theme](https://filamentphp.com/docs/2.x/admin/appearance#building-themes) you can add `'./app/Filament/Resources/*.php'` to the `content` section in `tailwind.config.js` so colors won't get purged and create [gradient colors](https://tailwindcss.com/docs/gradient-color-stops#middle-color) like 116 | 117 | ```php 118 | protected function getTableColumns(): array 119 | { 120 | return [ 121 | ProgressColumn::make('progress') 122 | ->color('bg-gradient-to-r from-indigo-500 via-purple-500 to-pink-500'), 123 | ]; 124 | } 125 | ``` 126 | 127 | ### Dynamic color calculation 128 | 129 | If you wish to calculate the color dynamically, provide a `Closure` to the `ProgressColumn::color()` method. 130 | 131 | ```php 132 | protected function getTableColumns(): array 133 | { 134 | return [ 135 | ProgressColumn::make('progress')->color(function ($record){ 136 | return $record->progress > 50 ? 'primary' : 'success'; 137 | }) 138 | ]; 139 | } 140 | ``` 141 | 142 | ## Testing 143 | 144 | ```bash 145 | composer test 146 | ``` 147 | 148 | ## Changelog 149 | 150 | Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently. 151 | 152 | ## Contributing 153 | 154 | Please see [CONTRIBUTING](.github/CONTRIBUTING.md) for details. 155 | 156 | ## Security Vulnerabilities 157 | 158 | Please review [our security policy](../../security/policy) on how to report security vulnerabilities. 159 | 160 | ## Credits 161 | 162 | - [Ryan Chandler](https://github.com/ryangjchandler) 163 | - [All Contributors](../../contributors) 164 | 165 | ## License 166 | 167 | The MIT License (MIT). Please see [License File](LICENSE.md) for more information. 168 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ryangjchandler/filament-progress-column", 3 | "description": "Add a progress bar column to your Filament tables.", 4 | "keywords": [ 5 | "ryangjchandler", 6 | "laravel", 7 | "filament-progress-column" 8 | ], 9 | "homepage": "https://github.com/ryangjchandler/filament-progress-column", 10 | "license": "MIT", 11 | "authors": [ 12 | { 13 | "name": "Ryan Chandler", 14 | "email": "support@ryangjchandler.co.uk", 15 | "role": "Developer" 16 | } 17 | ], 18 | "require": { 19 | "php": "^8.2", 20 | "filament/filament": "^3.0", 21 | "spatie/laravel-package-tools": "^1.9.2", 22 | "illuminate/contracts": "^11.0|^12.0" 23 | }, 24 | "require-dev": { 25 | "nunomaduro/collision": "^8.0", 26 | "nunomaduro/larastan": "^2.0.1", 27 | "orchestra/testbench": "^9.0", 28 | "pestphp/pest": "^2.0", 29 | "pestphp/pest-plugin-laravel": "^2.0", 30 | "phpstan/extension-installer": "^1.1", 31 | "phpstan/phpstan-deprecation-rules": "^1.0", 32 | "phpstan/phpstan-phpunit": "^1.0", 33 | "phpunit/phpunit": "^10.0", 34 | "spatie/laravel-ray": "^1.26" 35 | }, 36 | "autoload": { 37 | "psr-4": { 38 | "RyanChandler\\FilamentProgressColumn\\": "src", 39 | "RyanChandler\\FilamentProgressColumn\\Database\\Factories\\": "database/factories" 40 | } 41 | }, 42 | "autoload-dev": { 43 | "psr-4": { 44 | "RyanChandler\\FilamentProgressColumn\\Tests\\": "tests" 45 | } 46 | }, 47 | "scripts": { 48 | "analyse": "vendor/bin/phpstan analyse", 49 | "test": "vendor/bin/pest", 50 | "test-coverage": "vendor/bin/pest coverage" 51 | }, 52 | "config": { 53 | "sort-packages": true, 54 | "allow-plugins": { 55 | "pestphp/pest-plugin": true, 56 | "phpstan/extension-installer": true 57 | } 58 | }, 59 | "extra": { 60 | "laravel": { 61 | "providers": [ 62 | "RyanChandler\\FilamentProgressColumn\\FilamentProgressColumnServiceProvider" 63 | ], 64 | "aliases": { 65 | "FilamentProgressColumn": "RyanChandler\\FilamentProgressColumn\\Facades\\FilamentProgressColumn" 66 | } 67 | } 68 | }, 69 | "minimum-stability": "dev", 70 | "prefer-stable": true 71 | } 72 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "filament-progress-column", 3 | "lockfileVersion": 2, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "devDependencies": { 8 | "tailwindcss": "^3.0.24" 9 | } 10 | }, 11 | "node_modules/@nodelib/fs.scandir": { 12 | "version": "2.1.5", 13 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 14 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 15 | "dev": true, 16 | "dependencies": { 17 | "@nodelib/fs.stat": "2.0.5", 18 | "run-parallel": "^1.1.9" 19 | }, 20 | "engines": { 21 | "node": ">= 8" 22 | } 23 | }, 24 | "node_modules/@nodelib/fs.stat": { 25 | "version": "2.0.5", 26 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 27 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 28 | "dev": true, 29 | "engines": { 30 | "node": ">= 8" 31 | } 32 | }, 33 | "node_modules/@nodelib/fs.walk": { 34 | "version": "1.2.8", 35 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 36 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 37 | "dev": true, 38 | "dependencies": { 39 | "@nodelib/fs.scandir": "2.1.5", 40 | "fastq": "^1.6.0" 41 | }, 42 | "engines": { 43 | "node": ">= 8" 44 | } 45 | }, 46 | "node_modules/acorn": { 47 | "version": "7.4.1", 48 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 49 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 50 | "dev": true, 51 | "bin": { 52 | "acorn": "bin/acorn" 53 | }, 54 | "engines": { 55 | "node": ">=0.4.0" 56 | } 57 | }, 58 | "node_modules/acorn-node": { 59 | "version": "1.8.2", 60 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 61 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 62 | "dev": true, 63 | "dependencies": { 64 | "acorn": "^7.0.0", 65 | "acorn-walk": "^7.0.0", 66 | "xtend": "^4.0.2" 67 | } 68 | }, 69 | "node_modules/acorn-walk": { 70 | "version": "7.2.0", 71 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 72 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", 73 | "dev": true, 74 | "engines": { 75 | "node": ">=0.4.0" 76 | } 77 | }, 78 | "node_modules/anymatch": { 79 | "version": "3.1.2", 80 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 81 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 82 | "dev": true, 83 | "dependencies": { 84 | "normalize-path": "^3.0.0", 85 | "picomatch": "^2.0.4" 86 | }, 87 | "engines": { 88 | "node": ">= 8" 89 | } 90 | }, 91 | "node_modules/arg": { 92 | "version": "5.0.1", 93 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", 94 | "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", 95 | "dev": true 96 | }, 97 | "node_modules/binary-extensions": { 98 | "version": "2.2.0", 99 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 100 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 101 | "dev": true, 102 | "engines": { 103 | "node": ">=8" 104 | } 105 | }, 106 | "node_modules/braces": { 107 | "version": "3.0.2", 108 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 109 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 110 | "dev": true, 111 | "dependencies": { 112 | "fill-range": "^7.0.1" 113 | }, 114 | "engines": { 115 | "node": ">=8" 116 | } 117 | }, 118 | "node_modules/camelcase-css": { 119 | "version": "2.0.1", 120 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 121 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 122 | "dev": true, 123 | "engines": { 124 | "node": ">= 6" 125 | } 126 | }, 127 | "node_modules/chokidar": { 128 | "version": "3.5.3", 129 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 130 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 131 | "dev": true, 132 | "funding": [ 133 | { 134 | "type": "individual", 135 | "url": "https://paulmillr.com/funding/" 136 | } 137 | ], 138 | "dependencies": { 139 | "anymatch": "~3.1.2", 140 | "braces": "~3.0.2", 141 | "glob-parent": "~5.1.2", 142 | "is-binary-path": "~2.1.0", 143 | "is-glob": "~4.0.1", 144 | "normalize-path": "~3.0.0", 145 | "readdirp": "~3.6.0" 146 | }, 147 | "engines": { 148 | "node": ">= 8.10.0" 149 | }, 150 | "optionalDependencies": { 151 | "fsevents": "~2.3.2" 152 | } 153 | }, 154 | "node_modules/chokidar/node_modules/glob-parent": { 155 | "version": "5.1.2", 156 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 157 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 158 | "dev": true, 159 | "dependencies": { 160 | "is-glob": "^4.0.1" 161 | }, 162 | "engines": { 163 | "node": ">= 6" 164 | } 165 | }, 166 | "node_modules/color-name": { 167 | "version": "1.1.4", 168 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 169 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 170 | "dev": true 171 | }, 172 | "node_modules/cssesc": { 173 | "version": "3.0.0", 174 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 175 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 176 | "dev": true, 177 | "bin": { 178 | "cssesc": "bin/cssesc" 179 | }, 180 | "engines": { 181 | "node": ">=4" 182 | } 183 | }, 184 | "node_modules/defined": { 185 | "version": "1.0.0", 186 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 187 | "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", 188 | "dev": true 189 | }, 190 | "node_modules/detective": { 191 | "version": "5.2.1", 192 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", 193 | "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", 194 | "dev": true, 195 | "dependencies": { 196 | "acorn-node": "^1.8.2", 197 | "defined": "^1.0.0", 198 | "minimist": "^1.2.6" 199 | }, 200 | "bin": { 201 | "detective": "bin/detective.js" 202 | }, 203 | "engines": { 204 | "node": ">=0.8.0" 205 | } 206 | }, 207 | "node_modules/didyoumean": { 208 | "version": "1.2.2", 209 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 210 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 211 | "dev": true 212 | }, 213 | "node_modules/dlv": { 214 | "version": "1.1.3", 215 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 216 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 217 | "dev": true 218 | }, 219 | "node_modules/fast-glob": { 220 | "version": "3.2.11", 221 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", 222 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", 223 | "dev": true, 224 | "dependencies": { 225 | "@nodelib/fs.stat": "^2.0.2", 226 | "@nodelib/fs.walk": "^1.2.3", 227 | "glob-parent": "^5.1.2", 228 | "merge2": "^1.3.0", 229 | "micromatch": "^4.0.4" 230 | }, 231 | "engines": { 232 | "node": ">=8.6.0" 233 | } 234 | }, 235 | "node_modules/fast-glob/node_modules/glob-parent": { 236 | "version": "5.1.2", 237 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 238 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 239 | "dev": true, 240 | "dependencies": { 241 | "is-glob": "^4.0.1" 242 | }, 243 | "engines": { 244 | "node": ">= 6" 245 | } 246 | }, 247 | "node_modules/fastq": { 248 | "version": "1.13.0", 249 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 250 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 251 | "dev": true, 252 | "dependencies": { 253 | "reusify": "^1.0.4" 254 | } 255 | }, 256 | "node_modules/fill-range": { 257 | "version": "7.0.1", 258 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 259 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 260 | "dev": true, 261 | "dependencies": { 262 | "to-regex-range": "^5.0.1" 263 | }, 264 | "engines": { 265 | "node": ">=8" 266 | } 267 | }, 268 | "node_modules/fsevents": { 269 | "version": "2.3.2", 270 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 271 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 272 | "dev": true, 273 | "hasInstallScript": true, 274 | "optional": true, 275 | "os": [ 276 | "darwin" 277 | ], 278 | "engines": { 279 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 280 | } 281 | }, 282 | "node_modules/function-bind": { 283 | "version": "1.1.1", 284 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 285 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 286 | "dev": true 287 | }, 288 | "node_modules/glob-parent": { 289 | "version": "6.0.2", 290 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 291 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 292 | "dev": true, 293 | "dependencies": { 294 | "is-glob": "^4.0.3" 295 | }, 296 | "engines": { 297 | "node": ">=10.13.0" 298 | } 299 | }, 300 | "node_modules/has": { 301 | "version": "1.0.3", 302 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 303 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 304 | "dev": true, 305 | "dependencies": { 306 | "function-bind": "^1.1.1" 307 | }, 308 | "engines": { 309 | "node": ">= 0.4.0" 310 | } 311 | }, 312 | "node_modules/is-binary-path": { 313 | "version": "2.1.0", 314 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 315 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 316 | "dev": true, 317 | "dependencies": { 318 | "binary-extensions": "^2.0.0" 319 | }, 320 | "engines": { 321 | "node": ">=8" 322 | } 323 | }, 324 | "node_modules/is-core-module": { 325 | "version": "2.9.0", 326 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", 327 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", 328 | "dev": true, 329 | "dependencies": { 330 | "has": "^1.0.3" 331 | }, 332 | "funding": { 333 | "url": "https://github.com/sponsors/ljharb" 334 | } 335 | }, 336 | "node_modules/is-extglob": { 337 | "version": "2.1.1", 338 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 339 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 340 | "dev": true, 341 | "engines": { 342 | "node": ">=0.10.0" 343 | } 344 | }, 345 | "node_modules/is-glob": { 346 | "version": "4.0.3", 347 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 348 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 349 | "dev": true, 350 | "dependencies": { 351 | "is-extglob": "^2.1.1" 352 | }, 353 | "engines": { 354 | "node": ">=0.10.0" 355 | } 356 | }, 357 | "node_modules/is-number": { 358 | "version": "7.0.0", 359 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 360 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 361 | "dev": true, 362 | "engines": { 363 | "node": ">=0.12.0" 364 | } 365 | }, 366 | "node_modules/lilconfig": { 367 | "version": "2.0.5", 368 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", 369 | "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", 370 | "dev": true, 371 | "engines": { 372 | "node": ">=10" 373 | } 374 | }, 375 | "node_modules/merge2": { 376 | "version": "1.4.1", 377 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 378 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 379 | "dev": true, 380 | "engines": { 381 | "node": ">= 8" 382 | } 383 | }, 384 | "node_modules/micromatch": { 385 | "version": "4.0.5", 386 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 387 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 388 | "dev": true, 389 | "dependencies": { 390 | "braces": "^3.0.2", 391 | "picomatch": "^2.3.1" 392 | }, 393 | "engines": { 394 | "node": ">=8.6" 395 | } 396 | }, 397 | "node_modules/minimist": { 398 | "version": "1.2.6", 399 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 400 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 401 | "dev": true 402 | }, 403 | "node_modules/nanoid": { 404 | "version": "3.3.4", 405 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 406 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 407 | "dev": true, 408 | "bin": { 409 | "nanoid": "bin/nanoid.cjs" 410 | }, 411 | "engines": { 412 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 413 | } 414 | }, 415 | "node_modules/normalize-path": { 416 | "version": "3.0.0", 417 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 418 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 419 | "dev": true, 420 | "engines": { 421 | "node": ">=0.10.0" 422 | } 423 | }, 424 | "node_modules/object-hash": { 425 | "version": "3.0.0", 426 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 427 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 428 | "dev": true, 429 | "engines": { 430 | "node": ">= 6" 431 | } 432 | }, 433 | "node_modules/path-parse": { 434 | "version": "1.0.7", 435 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 436 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 437 | "dev": true 438 | }, 439 | "node_modules/picocolors": { 440 | "version": "1.0.0", 441 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 442 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 443 | "dev": true 444 | }, 445 | "node_modules/picomatch": { 446 | "version": "2.3.1", 447 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 448 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 449 | "dev": true, 450 | "engines": { 451 | "node": ">=8.6" 452 | }, 453 | "funding": { 454 | "url": "https://github.com/sponsors/jonschlinkert" 455 | } 456 | }, 457 | "node_modules/postcss": { 458 | "version": "8.4.14", 459 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", 460 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 461 | "dev": true, 462 | "funding": [ 463 | { 464 | "type": "opencollective", 465 | "url": "https://opencollective.com/postcss/" 466 | }, 467 | { 468 | "type": "tidelift", 469 | "url": "https://tidelift.com/funding/github/npm/postcss" 470 | } 471 | ], 472 | "dependencies": { 473 | "nanoid": "^3.3.4", 474 | "picocolors": "^1.0.0", 475 | "source-map-js": "^1.0.2" 476 | }, 477 | "engines": { 478 | "node": "^10 || ^12 || >=14" 479 | } 480 | }, 481 | "node_modules/postcss-js": { 482 | "version": "4.0.0", 483 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", 484 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", 485 | "dev": true, 486 | "dependencies": { 487 | "camelcase-css": "^2.0.1" 488 | }, 489 | "engines": { 490 | "node": "^12 || ^14 || >= 16" 491 | }, 492 | "funding": { 493 | "type": "opencollective", 494 | "url": "https://opencollective.com/postcss/" 495 | }, 496 | "peerDependencies": { 497 | "postcss": "^8.3.3" 498 | } 499 | }, 500 | "node_modules/postcss-load-config": { 501 | "version": "3.1.4", 502 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", 503 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", 504 | "dev": true, 505 | "dependencies": { 506 | "lilconfig": "^2.0.5", 507 | "yaml": "^1.10.2" 508 | }, 509 | "engines": { 510 | "node": ">= 10" 511 | }, 512 | "funding": { 513 | "type": "opencollective", 514 | "url": "https://opencollective.com/postcss/" 515 | }, 516 | "peerDependencies": { 517 | "postcss": ">=8.0.9", 518 | "ts-node": ">=9.0.0" 519 | }, 520 | "peerDependenciesMeta": { 521 | "postcss": { 522 | "optional": true 523 | }, 524 | "ts-node": { 525 | "optional": true 526 | } 527 | } 528 | }, 529 | "node_modules/postcss-nested": { 530 | "version": "5.0.6", 531 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", 532 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", 533 | "dev": true, 534 | "dependencies": { 535 | "postcss-selector-parser": "^6.0.6" 536 | }, 537 | "engines": { 538 | "node": ">=12.0" 539 | }, 540 | "funding": { 541 | "type": "opencollective", 542 | "url": "https://opencollective.com/postcss/" 543 | }, 544 | "peerDependencies": { 545 | "postcss": "^8.2.14" 546 | } 547 | }, 548 | "node_modules/postcss-selector-parser": { 549 | "version": "6.0.10", 550 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", 551 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", 552 | "dev": true, 553 | "dependencies": { 554 | "cssesc": "^3.0.0", 555 | "util-deprecate": "^1.0.2" 556 | }, 557 | "engines": { 558 | "node": ">=4" 559 | } 560 | }, 561 | "node_modules/postcss-value-parser": { 562 | "version": "4.2.0", 563 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 564 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 565 | "dev": true 566 | }, 567 | "node_modules/queue-microtask": { 568 | "version": "1.2.3", 569 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 570 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 571 | "dev": true, 572 | "funding": [ 573 | { 574 | "type": "github", 575 | "url": "https://github.com/sponsors/feross" 576 | }, 577 | { 578 | "type": "patreon", 579 | "url": "https://www.patreon.com/feross" 580 | }, 581 | { 582 | "type": "consulting", 583 | "url": "https://feross.org/support" 584 | } 585 | ] 586 | }, 587 | "node_modules/quick-lru": { 588 | "version": "5.1.1", 589 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 590 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 591 | "dev": true, 592 | "engines": { 593 | "node": ">=10" 594 | }, 595 | "funding": { 596 | "url": "https://github.com/sponsors/sindresorhus" 597 | } 598 | }, 599 | "node_modules/readdirp": { 600 | "version": "3.6.0", 601 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 602 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 603 | "dev": true, 604 | "dependencies": { 605 | "picomatch": "^2.2.1" 606 | }, 607 | "engines": { 608 | "node": ">=8.10.0" 609 | } 610 | }, 611 | "node_modules/resolve": { 612 | "version": "1.22.0", 613 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 614 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 615 | "dev": true, 616 | "dependencies": { 617 | "is-core-module": "^2.8.1", 618 | "path-parse": "^1.0.7", 619 | "supports-preserve-symlinks-flag": "^1.0.0" 620 | }, 621 | "bin": { 622 | "resolve": "bin/resolve" 623 | }, 624 | "funding": { 625 | "url": "https://github.com/sponsors/ljharb" 626 | } 627 | }, 628 | "node_modules/reusify": { 629 | "version": "1.0.4", 630 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 631 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 632 | "dev": true, 633 | "engines": { 634 | "iojs": ">=1.0.0", 635 | "node": ">=0.10.0" 636 | } 637 | }, 638 | "node_modules/run-parallel": { 639 | "version": "1.2.0", 640 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 641 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 642 | "dev": true, 643 | "funding": [ 644 | { 645 | "type": "github", 646 | "url": "https://github.com/sponsors/feross" 647 | }, 648 | { 649 | "type": "patreon", 650 | "url": "https://www.patreon.com/feross" 651 | }, 652 | { 653 | "type": "consulting", 654 | "url": "https://feross.org/support" 655 | } 656 | ], 657 | "dependencies": { 658 | "queue-microtask": "^1.2.2" 659 | } 660 | }, 661 | "node_modules/source-map-js": { 662 | "version": "1.0.2", 663 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 664 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 665 | "dev": true, 666 | "engines": { 667 | "node": ">=0.10.0" 668 | } 669 | }, 670 | "node_modules/supports-preserve-symlinks-flag": { 671 | "version": "1.0.0", 672 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 673 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 674 | "dev": true, 675 | "engines": { 676 | "node": ">= 0.4" 677 | }, 678 | "funding": { 679 | "url": "https://github.com/sponsors/ljharb" 680 | } 681 | }, 682 | "node_modules/tailwindcss": { 683 | "version": "3.0.24", 684 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz", 685 | "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==", 686 | "dev": true, 687 | "dependencies": { 688 | "arg": "^5.0.1", 689 | "chokidar": "^3.5.3", 690 | "color-name": "^1.1.4", 691 | "detective": "^5.2.0", 692 | "didyoumean": "^1.2.2", 693 | "dlv": "^1.1.3", 694 | "fast-glob": "^3.2.11", 695 | "glob-parent": "^6.0.2", 696 | "is-glob": "^4.0.3", 697 | "lilconfig": "^2.0.5", 698 | "normalize-path": "^3.0.0", 699 | "object-hash": "^3.0.0", 700 | "picocolors": "^1.0.0", 701 | "postcss": "^8.4.12", 702 | "postcss-js": "^4.0.0", 703 | "postcss-load-config": "^3.1.4", 704 | "postcss-nested": "5.0.6", 705 | "postcss-selector-parser": "^6.0.10", 706 | "postcss-value-parser": "^4.2.0", 707 | "quick-lru": "^5.1.1", 708 | "resolve": "^1.22.0" 709 | }, 710 | "bin": { 711 | "tailwind": "lib/cli.js", 712 | "tailwindcss": "lib/cli.js" 713 | }, 714 | "engines": { 715 | "node": ">=12.13.0" 716 | }, 717 | "peerDependencies": { 718 | "postcss": "^8.0.9" 719 | } 720 | }, 721 | "node_modules/to-regex-range": { 722 | "version": "5.0.1", 723 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 724 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 725 | "dev": true, 726 | "dependencies": { 727 | "is-number": "^7.0.0" 728 | }, 729 | "engines": { 730 | "node": ">=8.0" 731 | } 732 | }, 733 | "node_modules/util-deprecate": { 734 | "version": "1.0.2", 735 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 736 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 737 | "dev": true 738 | }, 739 | "node_modules/xtend": { 740 | "version": "4.0.2", 741 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 742 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 743 | "dev": true, 744 | "engines": { 745 | "node": ">=0.4" 746 | } 747 | }, 748 | "node_modules/yaml": { 749 | "version": "1.10.2", 750 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 751 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 752 | "dev": true, 753 | "engines": { 754 | "node": ">= 6" 755 | } 756 | } 757 | }, 758 | "dependencies": { 759 | "@nodelib/fs.scandir": { 760 | "version": "2.1.5", 761 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 762 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 763 | "dev": true, 764 | "requires": { 765 | "@nodelib/fs.stat": "2.0.5", 766 | "run-parallel": "^1.1.9" 767 | } 768 | }, 769 | "@nodelib/fs.stat": { 770 | "version": "2.0.5", 771 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 772 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 773 | "dev": true 774 | }, 775 | "@nodelib/fs.walk": { 776 | "version": "1.2.8", 777 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 778 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 779 | "dev": true, 780 | "requires": { 781 | "@nodelib/fs.scandir": "2.1.5", 782 | "fastq": "^1.6.0" 783 | } 784 | }, 785 | "acorn": { 786 | "version": "7.4.1", 787 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 788 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 789 | "dev": true 790 | }, 791 | "acorn-node": { 792 | "version": "1.8.2", 793 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 794 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 795 | "dev": true, 796 | "requires": { 797 | "acorn": "^7.0.0", 798 | "acorn-walk": "^7.0.0", 799 | "xtend": "^4.0.2" 800 | } 801 | }, 802 | "acorn-walk": { 803 | "version": "7.2.0", 804 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 805 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", 806 | "dev": true 807 | }, 808 | "anymatch": { 809 | "version": "3.1.2", 810 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 811 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 812 | "dev": true, 813 | "requires": { 814 | "normalize-path": "^3.0.0", 815 | "picomatch": "^2.0.4" 816 | } 817 | }, 818 | "arg": { 819 | "version": "5.0.1", 820 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", 821 | "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", 822 | "dev": true 823 | }, 824 | "binary-extensions": { 825 | "version": "2.2.0", 826 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 827 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 828 | "dev": true 829 | }, 830 | "braces": { 831 | "version": "3.0.2", 832 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 833 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 834 | "dev": true, 835 | "requires": { 836 | "fill-range": "^7.0.1" 837 | } 838 | }, 839 | "camelcase-css": { 840 | "version": "2.0.1", 841 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 842 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 843 | "dev": true 844 | }, 845 | "chokidar": { 846 | "version": "3.5.3", 847 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 848 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 849 | "dev": true, 850 | "requires": { 851 | "anymatch": "~3.1.2", 852 | "braces": "~3.0.2", 853 | "fsevents": "~2.3.2", 854 | "glob-parent": "~5.1.2", 855 | "is-binary-path": "~2.1.0", 856 | "is-glob": "~4.0.1", 857 | "normalize-path": "~3.0.0", 858 | "readdirp": "~3.6.0" 859 | }, 860 | "dependencies": { 861 | "glob-parent": { 862 | "version": "5.1.2", 863 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 864 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 865 | "dev": true, 866 | "requires": { 867 | "is-glob": "^4.0.1" 868 | } 869 | } 870 | } 871 | }, 872 | "color-name": { 873 | "version": "1.1.4", 874 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 875 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 876 | "dev": true 877 | }, 878 | "cssesc": { 879 | "version": "3.0.0", 880 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 881 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 882 | "dev": true 883 | }, 884 | "defined": { 885 | "version": "1.0.0", 886 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 887 | "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", 888 | "dev": true 889 | }, 890 | "detective": { 891 | "version": "5.2.1", 892 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", 893 | "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", 894 | "dev": true, 895 | "requires": { 896 | "acorn-node": "^1.8.2", 897 | "defined": "^1.0.0", 898 | "minimist": "^1.2.6" 899 | } 900 | }, 901 | "didyoumean": { 902 | "version": "1.2.2", 903 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 904 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 905 | "dev": true 906 | }, 907 | "dlv": { 908 | "version": "1.1.3", 909 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 910 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 911 | "dev": true 912 | }, 913 | "fast-glob": { 914 | "version": "3.2.11", 915 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", 916 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", 917 | "dev": true, 918 | "requires": { 919 | "@nodelib/fs.stat": "^2.0.2", 920 | "@nodelib/fs.walk": "^1.2.3", 921 | "glob-parent": "^5.1.2", 922 | "merge2": "^1.3.0", 923 | "micromatch": "^4.0.4" 924 | }, 925 | "dependencies": { 926 | "glob-parent": { 927 | "version": "5.1.2", 928 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 929 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 930 | "dev": true, 931 | "requires": { 932 | "is-glob": "^4.0.1" 933 | } 934 | } 935 | } 936 | }, 937 | "fastq": { 938 | "version": "1.13.0", 939 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 940 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 941 | "dev": true, 942 | "requires": { 943 | "reusify": "^1.0.4" 944 | } 945 | }, 946 | "fill-range": { 947 | "version": "7.0.1", 948 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 949 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 950 | "dev": true, 951 | "requires": { 952 | "to-regex-range": "^5.0.1" 953 | } 954 | }, 955 | "fsevents": { 956 | "version": "2.3.2", 957 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 958 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 959 | "dev": true, 960 | "optional": true 961 | }, 962 | "function-bind": { 963 | "version": "1.1.1", 964 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 965 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 966 | "dev": true 967 | }, 968 | "glob-parent": { 969 | "version": "6.0.2", 970 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 971 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 972 | "dev": true, 973 | "requires": { 974 | "is-glob": "^4.0.3" 975 | } 976 | }, 977 | "has": { 978 | "version": "1.0.3", 979 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 980 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 981 | "dev": true, 982 | "requires": { 983 | "function-bind": "^1.1.1" 984 | } 985 | }, 986 | "is-binary-path": { 987 | "version": "2.1.0", 988 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 989 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 990 | "dev": true, 991 | "requires": { 992 | "binary-extensions": "^2.0.0" 993 | } 994 | }, 995 | "is-core-module": { 996 | "version": "2.9.0", 997 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", 998 | "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", 999 | "dev": true, 1000 | "requires": { 1001 | "has": "^1.0.3" 1002 | } 1003 | }, 1004 | "is-extglob": { 1005 | "version": "2.1.1", 1006 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1007 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1008 | "dev": true 1009 | }, 1010 | "is-glob": { 1011 | "version": "4.0.3", 1012 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1013 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1014 | "dev": true, 1015 | "requires": { 1016 | "is-extglob": "^2.1.1" 1017 | } 1018 | }, 1019 | "is-number": { 1020 | "version": "7.0.0", 1021 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1022 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1023 | "dev": true 1024 | }, 1025 | "lilconfig": { 1026 | "version": "2.0.5", 1027 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", 1028 | "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", 1029 | "dev": true 1030 | }, 1031 | "merge2": { 1032 | "version": "1.4.1", 1033 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1034 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1035 | "dev": true 1036 | }, 1037 | "micromatch": { 1038 | "version": "4.0.5", 1039 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1040 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1041 | "dev": true, 1042 | "requires": { 1043 | "braces": "^3.0.2", 1044 | "picomatch": "^2.3.1" 1045 | } 1046 | }, 1047 | "minimist": { 1048 | "version": "1.2.6", 1049 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 1050 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 1051 | "dev": true 1052 | }, 1053 | "nanoid": { 1054 | "version": "3.3.4", 1055 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 1056 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 1057 | "dev": true 1058 | }, 1059 | "normalize-path": { 1060 | "version": "3.0.0", 1061 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1062 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1063 | "dev": true 1064 | }, 1065 | "object-hash": { 1066 | "version": "3.0.0", 1067 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 1068 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 1069 | "dev": true 1070 | }, 1071 | "path-parse": { 1072 | "version": "1.0.7", 1073 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1074 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1075 | "dev": true 1076 | }, 1077 | "picocolors": { 1078 | "version": "1.0.0", 1079 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1080 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1081 | "dev": true 1082 | }, 1083 | "picomatch": { 1084 | "version": "2.3.1", 1085 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1086 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1087 | "dev": true 1088 | }, 1089 | "postcss": { 1090 | "version": "8.4.14", 1091 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", 1092 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 1093 | "dev": true, 1094 | "requires": { 1095 | "nanoid": "^3.3.4", 1096 | "picocolors": "^1.0.0", 1097 | "source-map-js": "^1.0.2" 1098 | } 1099 | }, 1100 | "postcss-js": { 1101 | "version": "4.0.0", 1102 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", 1103 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", 1104 | "dev": true, 1105 | "requires": { 1106 | "camelcase-css": "^2.0.1" 1107 | } 1108 | }, 1109 | "postcss-load-config": { 1110 | "version": "3.1.4", 1111 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", 1112 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", 1113 | "dev": true, 1114 | "requires": { 1115 | "lilconfig": "^2.0.5", 1116 | "yaml": "^1.10.2" 1117 | } 1118 | }, 1119 | "postcss-nested": { 1120 | "version": "5.0.6", 1121 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", 1122 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", 1123 | "dev": true, 1124 | "requires": { 1125 | "postcss-selector-parser": "^6.0.6" 1126 | } 1127 | }, 1128 | "postcss-selector-parser": { 1129 | "version": "6.0.10", 1130 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", 1131 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", 1132 | "dev": true, 1133 | "requires": { 1134 | "cssesc": "^3.0.0", 1135 | "util-deprecate": "^1.0.2" 1136 | } 1137 | }, 1138 | "postcss-value-parser": { 1139 | "version": "4.2.0", 1140 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1141 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 1142 | "dev": true 1143 | }, 1144 | "queue-microtask": { 1145 | "version": "1.2.3", 1146 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1147 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1148 | "dev": true 1149 | }, 1150 | "quick-lru": { 1151 | "version": "5.1.1", 1152 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1153 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 1154 | "dev": true 1155 | }, 1156 | "readdirp": { 1157 | "version": "3.6.0", 1158 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1159 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1160 | "dev": true, 1161 | "requires": { 1162 | "picomatch": "^2.2.1" 1163 | } 1164 | }, 1165 | "resolve": { 1166 | "version": "1.22.0", 1167 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 1168 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 1169 | "dev": true, 1170 | "requires": { 1171 | "is-core-module": "^2.8.1", 1172 | "path-parse": "^1.0.7", 1173 | "supports-preserve-symlinks-flag": "^1.0.0" 1174 | } 1175 | }, 1176 | "reusify": { 1177 | "version": "1.0.4", 1178 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1179 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1180 | "dev": true 1181 | }, 1182 | "run-parallel": { 1183 | "version": "1.2.0", 1184 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1185 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1186 | "dev": true, 1187 | "requires": { 1188 | "queue-microtask": "^1.2.2" 1189 | } 1190 | }, 1191 | "source-map-js": { 1192 | "version": "1.0.2", 1193 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1194 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1195 | "dev": true 1196 | }, 1197 | "supports-preserve-symlinks-flag": { 1198 | "version": "1.0.0", 1199 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1200 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1201 | "dev": true 1202 | }, 1203 | "tailwindcss": { 1204 | "version": "3.0.24", 1205 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz", 1206 | "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==", 1207 | "dev": true, 1208 | "requires": { 1209 | "arg": "^5.0.1", 1210 | "chokidar": "^3.5.3", 1211 | "color-name": "^1.1.4", 1212 | "detective": "^5.2.0", 1213 | "didyoumean": "^1.2.2", 1214 | "dlv": "^1.1.3", 1215 | "fast-glob": "^3.2.11", 1216 | "glob-parent": "^6.0.2", 1217 | "is-glob": "^4.0.3", 1218 | "lilconfig": "^2.0.5", 1219 | "normalize-path": "^3.0.0", 1220 | "object-hash": "^3.0.0", 1221 | "picocolors": "^1.0.0", 1222 | "postcss": "^8.4.12", 1223 | "postcss-js": "^4.0.0", 1224 | "postcss-load-config": "^3.1.4", 1225 | "postcss-nested": "5.0.6", 1226 | "postcss-selector-parser": "^6.0.10", 1227 | "postcss-value-parser": "^4.2.0", 1228 | "quick-lru": "^5.1.1", 1229 | "resolve": "^1.22.0" 1230 | } 1231 | }, 1232 | "to-regex-range": { 1233 | "version": "5.0.1", 1234 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1235 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1236 | "dev": true, 1237 | "requires": { 1238 | "is-number": "^7.0.0" 1239 | } 1240 | }, 1241 | "util-deprecate": { 1242 | "version": "1.0.2", 1243 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1244 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1245 | "dev": true 1246 | }, 1247 | "xtend": { 1248 | "version": "4.0.2", 1249 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1250 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1251 | "dev": true 1252 | }, 1253 | "yaml": { 1254 | "version": "1.10.2", 1255 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 1256 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 1257 | "dev": true 1258 | } 1259 | } 1260 | } 1261 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "devDependencies": { 4 | "tailwindcss": "^3.0.24" 5 | }, 6 | "scripts": { 7 | "css": "npx tailwindcss -o ./resources/dist/progress.css", 8 | "watch": "npm run css -- --watch" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /resources/dist/progress.css: -------------------------------------------------------------------------------- 1 | *, ::before, ::after { 2 | --tw-border-spacing-x: 0; 3 | --tw-border-spacing-y: 0; 4 | --tw-translate-x: 0; 5 | --tw-translate-y: 0; 6 | --tw-rotate: 0; 7 | --tw-skew-x: 0; 8 | --tw-skew-y: 0; 9 | --tw-scale-x: 1; 10 | --tw-scale-y: 1; 11 | --tw-pan-x: ; 12 | --tw-pan-y: ; 13 | --tw-pinch-zoom: ; 14 | --tw-scroll-snap-strictness: proximity; 15 | --tw-gradient-from-position: ; 16 | --tw-gradient-via-position: ; 17 | --tw-gradient-to-position: ; 18 | --tw-ordinal: ; 19 | --tw-slashed-zero: ; 20 | --tw-numeric-figure: ; 21 | --tw-numeric-spacing: ; 22 | --tw-numeric-fraction: ; 23 | --tw-ring-inset: ; 24 | --tw-ring-offset-width: 0px; 25 | --tw-ring-offset-color: #fff; 26 | --tw-ring-color: rgb(59 130 246 / 0.5); 27 | --tw-ring-offset-shadow: 0 0 #0000; 28 | --tw-ring-shadow: 0 0 #0000; 29 | --tw-shadow: 0 0 #0000; 30 | --tw-shadow-colored: 0 0 #0000; 31 | --tw-blur: ; 32 | --tw-brightness: ; 33 | --tw-contrast: ; 34 | --tw-grayscale: ; 35 | --tw-hue-rotate: ; 36 | --tw-invert: ; 37 | --tw-saturate: ; 38 | --tw-sepia: ; 39 | --tw-drop-shadow: ; 40 | --tw-backdrop-blur: ; 41 | --tw-backdrop-brightness: ; 42 | --tw-backdrop-contrast: ; 43 | --tw-backdrop-grayscale: ; 44 | --tw-backdrop-hue-rotate: ; 45 | --tw-backdrop-invert: ; 46 | --tw-backdrop-opacity: ; 47 | --tw-backdrop-saturate: ; 48 | --tw-backdrop-sepia: 49 | } 50 | 51 | ::backdrop { 52 | --tw-border-spacing-x: 0; 53 | --tw-border-spacing-y: 0; 54 | --tw-translate-x: 0; 55 | --tw-translate-y: 0; 56 | --tw-rotate: 0; 57 | --tw-skew-x: 0; 58 | --tw-skew-y: 0; 59 | --tw-scale-x: 1; 60 | --tw-scale-y: 1; 61 | --tw-pan-x: ; 62 | --tw-pan-y: ; 63 | --tw-pinch-zoom: ; 64 | --tw-scroll-snap-strictness: proximity; 65 | --tw-gradient-from-position: ; 66 | --tw-gradient-via-position: ; 67 | --tw-gradient-to-position: ; 68 | --tw-ordinal: ; 69 | --tw-slashed-zero: ; 70 | --tw-numeric-figure: ; 71 | --tw-numeric-spacing: ; 72 | --tw-numeric-fraction: ; 73 | --tw-ring-inset: ; 74 | --tw-ring-offset-width: 0px; 75 | --tw-ring-offset-color: #fff; 76 | --tw-ring-color: rgb(59 130 246 / 0.5); 77 | --tw-ring-offset-shadow: 0 0 #0000; 78 | --tw-ring-shadow: 0 0 #0000; 79 | --tw-shadow: 0 0 #0000; 80 | --tw-shadow-colored: 0 0 #0000; 81 | --tw-blur: ; 82 | --tw-brightness: ; 83 | --tw-contrast: ; 84 | --tw-grayscale: ; 85 | --tw-hue-rotate: ; 86 | --tw-invert: ; 87 | --tw-saturate: ; 88 | --tw-sepia: ; 89 | --tw-drop-shadow: ; 90 | --tw-backdrop-blur: ; 91 | --tw-backdrop-brightness: ; 92 | --tw-backdrop-contrast: ; 93 | --tw-backdrop-grayscale: ; 94 | --tw-backdrop-hue-rotate: ; 95 | --tw-backdrop-invert: ; 96 | --tw-backdrop-opacity: ; 97 | --tw-backdrop-saturate: ; 98 | --tw-backdrop-sepia: 99 | } 100 | 101 | .filament-tables-progress-column :is(.flex) { 102 | display: flex 103 | } 104 | 105 | .filament-tables-progress-column :is(.h-2) { 106 | height: 0.5rem 107 | } 108 | 109 | .filament-tables-progress-column :is(.h-2\.5) { 110 | height: 0.625rem 111 | } 112 | 113 | .filament-tables-progress-column :is(.w-full) { 114 | width: 100% 115 | } 116 | 117 | .filament-tables-progress-column :is(.items-center) { 118 | align-items: center 119 | } 120 | 121 | .filament-tables-progress-column :is(.space-x-4 > :not([hidden]) ~ :not([hidden])) { 122 | --tw-space-x-reverse: 0; 123 | margin-right: calc(1rem * var(--tw-space-x-reverse)); 124 | margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))) 125 | } 126 | 127 | .filament-tables-progress-column :is(.rounded-full) { 128 | border-radius: 9999px 129 | } 130 | 131 | .filament-tables-progress-column :is(.bg-gray-200) { 132 | --tw-bg-opacity: 1; 133 | background-color: rgb(229 231 235 / var(--tw-bg-opacity)) 134 | } 135 | 136 | .filament-tables-progress-column :is(.px-4) { 137 | padding-left: 1rem; 138 | padding-right: 1rem 139 | } 140 | 141 | .filament-tables-progress-column :is(.text-sm) { 142 | font-size: 0.875rem; 143 | line-height: 1.25rem 144 | } 145 | 146 | .filament-tables-progress-column :is(.text-gray-700) { 147 | --tw-text-opacity: 1; 148 | color: rgb(55 65 81 / var(--tw-text-opacity)) 149 | } 150 | 151 | .filament-tables-progress-column :is(.dark .dark\:bg-gray-600) { 152 | --tw-bg-opacity: 1; 153 | background-color: rgb(75 85 99 / var(--tw-bg-opacity)) 154 | } 155 | 156 | .filament-tables-progress-column :is(.dark .dark\:text-gray-200) { 157 | --tw-text-opacity: 1; 158 | color: rgb(229 231 235 / var(--tw-text-opacity)) 159 | } -------------------------------------------------------------------------------- /resources/views/column.blade.php: -------------------------------------------------------------------------------- 1 | @php 2 | $color = $getColor(); 3 | $barStyles = \Filament\Support\get_color_css_variables( 4 | $color, 5 | shades: [600], 6 | ); 7 | $progress = $getProgress(); 8 | $poll = $getPoll(); 9 | @endphp 10 | 11 |
17 |
18 |
19 |
20 |
21 | 22 | {{ $progress }}% 23 |
24 |
25 | -------------------------------------------------------------------------------- /src/FilamentProgressColumnServiceProvider.php: -------------------------------------------------------------------------------- 1 | name(static::$name) 17 | ->hasViews(); 18 | } 19 | 20 | public function packageBooted(): void 21 | { 22 | FilamentAsset::register([ 23 | Css::make('filament-progress-column', __DIR__ . '/../resources/dist/progress.css'), 24 | ], 'ryanchandler/filament-progress-column'); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/ProgressColumn.php: -------------------------------------------------------------------------------- 1 | color = $callback; 21 | 22 | return $this; 23 | } 24 | 25 | public function getColor(): string 26 | { 27 | return $this->evaluate($this->color); 28 | } 29 | 30 | public function progress(Closure $callback): static 31 | { 32 | $this->progress = $callback; 33 | 34 | return $this; 35 | } 36 | 37 | public function getProgress(): int|float 38 | { 39 | if ($this->progress === null) { 40 | return floor($this->getStateFromRecord()); 41 | } 42 | 43 | return $this->evaluate($this->progress); 44 | } 45 | 46 | public function poll(string | Closure $duration): static 47 | { 48 | $this->poll = $duration; 49 | 50 | return $this; 51 | } 52 | 53 | public function getPoll(): ?string 54 | { 55 | return $this->evaluate($this->poll); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: [ 3 | './resources/views/**/*.blade.php' 4 | ], 5 | important: '.filament-tables-progress-column', 6 | darkMode: 'class', 7 | theme: { 8 | extend: {}, 9 | }, 10 | plugins: [], 11 | corePlugins: { 12 | preflight: false 13 | } 14 | } 15 | --------------------------------------------------------------------------------