diff --git a/.nojekyll b/.nojekyll deleted file mode 100644 index e69de29b..00000000 diff --git a/.well-known/brave-rewards-verification.txt b/.well-known/brave-rewards-verification.txt deleted file mode 100644 index 43156e4a..00000000 --- a/.well-known/brave-rewards-verification.txt +++ /dev/null @@ -1,4 +0,0 @@ -This is a Brave Rewards publisher verification file. - -Domain: ali4heydari.github.io -Token: cd099c140a71429252423849934c114b130c7f683619bdb11659ba00414d4a23 diff --git a/404.html b/404.html deleted file mode 100644 index f16a34af..00000000 --- a/404.html +++ /dev/null @@ -1 +0,0 @@ -404: This page could not be found

404

This page could not be found.

\ No newline at end of file diff --git a/_next/data/FI7bR2RtPsi5KMHnONtnm/index.json b/_next/data/FI7bR2RtPsi5KMHnONtnm/index.json deleted file mode 100644 index 0cbfdd91..00000000 --- a/_next/data/FI7bR2RtPsi5KMHnONtnm/index.json +++ /dev/null @@ -1 +0,0 @@ -{"pageProps":{"allExperiences":[{"company":"Iran University of Science and Technology","position":"Teacher assistant","startDate":"2017-10-01","endDate":"2018-01-01","body":{"raw":"\nAdvanced programming course supervised by [Prof. Sauleh Eetemadi](https://sauleh.github.io/).\n\nMy responsibilities include:\n\n- Design, implementation and documentation programming assignments.\n- Hold weekly practice classes.\n","html":"

Advanced programming course supervised by Prof. Sauleh Eetemadi.

\n

My responsibilities include:

\n"},"_id":"experiences/01-ap-ta.mdx","_raw":{"sourceFilePath":"experiences/01-ap-ta.mdx","sourceFileName":"01-ap-ta.mdx","sourceFileDir":"experiences","contentType":"mdx","flattenedPath":"experiences/01-ap-ta"},"type":"Experience","readingTime":{"text":"1 min read","minutes":0.115,"time":6900,"words":23},"wordCount":25,"slug":"01-ap-ta"},{"company":"Iran University of Science and Technology","position":"Head Teacher assistant","startDate":"2019-02-01","endDate":"2019-08-01","body":{"raw":"\nAdvanced programming course supervised by [Prof. Sauleh Eetemadi](https://sauleh.github.io/).\n\nMy responsibilities include:\n\n- Manage and coordinate TAs, Code reviewers, and other course staff.\n- Design, implementation and documentation programming assignments. assignments with a documentation are available via [the link](https://sauleh.github.io/ap97/assignments/)\n- Hold weekly practice classes and workshops with topics such as Git, Azure DevOps, clean code, WPF.\n- Design, implementation, documentation and scoring programming exams. The mentioned exams with their corresponding answers are available via [the link](https://sauleh.github.io/ap97/assignments/)\n- More info in [course home page](https://sauleh.github.io/ap97)\n","html":"

Advanced programming course supervised by Prof. Sauleh Eetemadi.

\n

My responsibilities include:

\n"},"_id":"experiences/02-ap-head-ta.mdx","_raw":{"sourceFilePath":"experiences/02-ap-head-ta.mdx","sourceFileName":"02-ap-head-ta.mdx","sourceFileDir":"experiences","contentType":"mdx","flattenedPath":"experiences/02-ap-head-ta"},"type":"Experience","readingTime":{"text":"1 min read","minutes":0.41,"time":24600,"words":82},"wordCount":84,"slug":"02-ap-head-ta"},{"company":"Iran's national elites foundation","position":"Software Engineer","startDate":"2020-01-01","endDate":"2020-11-01","body":{"raw":"\nA project funded by Iran's National Elites Foundation and supervised by [Prof. Behroozi](http://ee.sharif.edu/~behroozi/) and [Prof. Soleymani](http://sharif.edu/~soleymani/).\n\nMy Responsibilities include:\n\n- Carrying out team coordination and work\n- Meeting with hospital, clinic, and laboratory managers for requirements engineering and data gathering.\n- We developed a follow-up automation software that is used in the process of discharging patients and can help hospitals and clinics stay in touch with their patients and coordinate the next check ups of the patient. It also provides the patients with educational content. This system is currently being used by Sina hospital.\n","html":"

A project funded by Iran's National Elites Foundation and supervised by Prof. Behroozi and Prof. Soleymani.

\n

My Responsibilities include:

\n"},"_id":"experiences/03-bmn.mdx","_raw":{"sourceFilePath":"experiences/03-bmn.mdx","sourceFileName":"03-bmn.mdx","sourceFileDir":"experiences","contentType":"mdx","flattenedPath":"experiences/03-bmn"},"type":"Experience","readingTime":{"text":"1 min read","minutes":0.47,"time":28200,"words":94},"wordCount":96,"slug":"03-bmn"},{"company":"eFarda eCommerce Company","position":"Fullstack Developer","startDate":"2020-06-01","endDate":"Present","body":{"raw":"\nMy Responsibilities include:\n\n- Training and setting up the use of Git\n- Migrate all codes from TFS version control to Git\n- Develop web APIs\n- Work with bank external APIs\n- Setup CI/CD and Docker for projects\n- Design and implement front-end of new projects\n\n[company site](https://www.efarda.ir/)\n","html":"

My Responsibilities include:

\n\n

company site

"},"_id":"experiences/04-efarda.mdx","_raw":{"sourceFilePath":"experiences/04-efarda.mdx","sourceFileName":"04-efarda.mdx","sourceFileDir":"experiences","contentType":"mdx","flattenedPath":"experiences/04-efarda"},"type":"Experience","readingTime":{"text":"1 min read","minutes":0.245,"time":14700,"words":49},"wordCount":51,"slug":"04-efarda"}]},"__N_SSG":true} \ No newline at end of file diff --git a/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/dormify.json b/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/dormify.json deleted file mode 100644 index 1162b943..00000000 --- a/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/dormify.json +++ /dev/null @@ -1 +0,0 @@ -{"pageProps":{"project":{"category":"project","cover":"/images/_markdowns/projects/dormify/cover.png","title":"Dormify","description":"Software engineering course project","startDate":"2020-03-30","endDate":"2020-06-01","published":true,"tags":["βš› React (fully functional components βš“)","🐍 Lerna","🐈 Yarn","TypeScript","Cypress","πŸ‘’ Jest","πŸ™ testing-library","Storybook","Material-UI","Apollo GraphQL client","CSS-in-JS","πŸ“„ React-Hook-Form","🌐 i18next","Django","Graphene","nginx","🐳 Docker","πŸš€ Azure pipelines","🐘 PostgreSQL","Azure feeds"],"body":{"raw":"\n![dormify](/images/_markdowns/projects/dormify/cover.png)\n\n![home-page](/images/_markdowns/projects/dormify/home-page2.png)\n\n![sign-up](/images/_markdowns/projects/dormify/sign-up.png)\n\n![validate-invitation](/images/_markdowns/projects/dormify/validate-invitation.png)\n\n- Carrying out team coordination and work\n- Meeting with dormitory managers for requirements engineering and data gathering.\n- We hold scrum meeting (planning, daily ...) in Microsoft Teams during COVID19 pandemic\n- We designed and developed a software for managing dormitory stuffs like ticketing, issue tracking, guest invitation\n- We designed fully dockerized and automated CI/CD during development of software\n\n#### Description of CI/CD\n\nour project contains two packages. One package called common that contains reusable components\nand utilities and main package called student-panel.\nI designed a pipeline that contains of 3 stage:\n\n- build\n- type-coverage (using [type-coverage package](https://github.com/plantain-00/type-coverage))\n- test (unit testing with Jest and e2e testing with Cypress)\n\nAfter each build we collect artifacts containing build output, test result and coverage,\nCypress videos and screenshots and type-coverage results.\n\n#### Some screenshots form CI/CD:\n\n#### Pipelines\n\n![pipelines](/images/_markdowns/projects/dormify/pipelines.png)\n\n#### Pipeline result\n\n![pipeline-result](/images/_markdowns/projects/dormify/pipeline-result.png)\n\n#### Test results\n\n![test-results](/images/_markdowns/projects/dormify/test-results.png)\n\n#### Coverage results\n\n![coverage-results](/images/_markdowns/projects/dormify/coverage-results.png)\n\n#### Deployment\n\n![deployment](/images/_markdowns/projects/dormify/deployment.png)\n\n#### Artifacts\n\n![artifacts](/images/_markdowns/projects/dormify/artifacts.png)\n\n#### Cypress video output\n\n![cypress-video-output](/images/_markdowns/projects/dormify/cypress-video-output.png)\n\n#### Azure feed (private npm registry)\n\n![azure-feed](/images/_markdowns/projects/dormify/feeds.png)\n","html":"

\"dormify\"

\n

\"home-page\"

\n

\"sign-up\"

\n

\"validate-invitation\"

\n\n

Description of CI/CD

\n

our project contains two packages. One package called common that contains reusable components\nand utilities and main package called student-panel.\nI designed a pipeline that contains of 3 stage:

\n\n

After each build we collect artifacts containing build output, test result and coverage,\nCypress videos and screenshots and type-coverage results.

\n

Some screenshots form CI/CD:

\n

Pipelines

\n

\"pipelines\"

\n

Pipeline result

\n

\"pipeline-result\"

\n

Test results

\n

\"test-results\"

\n

Coverage results

\n

\"coverage-results\"

\n

Deployment

\n

\"deployment\"

\n

Artifacts

\n

\"artifacts\"

\n

Cypress video output

\n

\"cypress-video-output\"

\n

Azure feed (private npm registry)

\n

\"azure-feed\"

"},"_id":"projects/dormify.mdx","_raw":{"sourceFilePath":"projects/dormify.mdx","sourceFileName":"dormify.mdx","sourceFileDir":"projects","contentType":"mdx","flattenedPath":"projects/dormify"},"type":"Project","readingTime":{"text":"1 min read","minutes":0.87,"time":52200,"words":174},"wordCount":176,"slug":"dormify"}},"__N_SSG":true} \ No newline at end of file diff --git a/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/mano-computer.json b/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/mano-computer.json deleted file mode 100644 index 32e80209..00000000 --- a/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/mano-computer.json +++ /dev/null @@ -1 +0,0 @@ -{"pageProps":{"project":{"category":"project","cover":"/images/_markdowns/projects/mano-computer/cover.png","title":"Mano Computer Simulation","description":"Simulate Mano computer in Proteus 8","startDate":"2018-12-07","endDate":"2019-01-06","published":true,"tags":["Proteus 8 πŸ’₯"],"body":{"raw":"\n![Mano Computer Simulation](/images/_markdowns/projects/mano-computer/cover.png)\n\nComputer Architecture course project. I simulated Mano computer in Proteus 8\n\n[GitHub repository](https://github.com/ali4heydari/ManoComputer)\n","html":"

\"Mano

\n

Computer Architecture course project. I simulated Mano computer in Proteus 8

\n

GitHub repository

"},"_id":"projects/mano-computer.mdx","_raw":{"sourceFilePath":"projects/mano-computer.mdx","sourceFileName":"mano-computer.mdx","sourceFileDir":"projects","contentType":"mdx","flattenedPath":"projects/mano-computer"},"type":"Project","readingTime":{"text":"1 min read","minutes":0.08,"time":4800,"words":16},"wordCount":18,"slug":"mano-computer"}},"__N_SSG":true} \ No newline at end of file diff --git a/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/quine-mc-cluskey.json b/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/quine-mc-cluskey.json deleted file mode 100644 index e6657b42..00000000 --- a/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/quine-mc-cluskey.json +++ /dev/null @@ -1 +0,0 @@ -{"pageProps":{"project":{"category":"project","cover":"/images/_markdowns/projects/quine-mc-cluskey/cover.png","title":"Quine McCluskey Solver","description":"Minimize boolean functions using the Quine McCluskey method desktop application","startDate":"2018-12-12","endDate":"2019-12-24","published":true,"tags":["C#","WPF"],"body":{"raw":"\n![Quine McCluskey Solver](/images/_markdowns/projects/quine-mc-cluskey/cover.png)\n\nMinimize boolean functions using the Quine McCluskey method desktop application\n\n- Logic circuits course project\n\n[GitHub repository](https://github.com/ali4heydari/QuineMcCluskey)\n","html":"

\"Quine

\n

Minimize boolean functions using the Quine McCluskey method desktop application

\n\n

GitHub repository

"},"_id":"projects/quine-mc-cluskey.mdx","_raw":{"sourceFilePath":"projects/quine-mc-cluskey.mdx","sourceFileName":"quine-mc-cluskey.mdx","sourceFileDir":"projects","contentType":"mdx","flattenedPath":"projects/quine-mc-cluskey"},"type":"Project","readingTime":{"text":"1 min read","minutes":0.1,"time":6000,"words":20},"wordCount":22,"slug":"quine-mc-cluskey"}},"__N_SSG":true} \ No newline at end of file diff --git a/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/sina-heart.json b/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/sina-heart.json deleted file mode 100644 index 91b40a5a..00000000 --- a/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/sina-heart.json +++ /dev/null @@ -1 +0,0 @@ -{"pageProps":{"project":{"category":"project","cover":"/images/_markdowns/projects/sina-heart/cover.png","title":"Sina Heart","description":"follow-up automation software","startDate":"2019-12-13","endDate":"2020-10-13","published":true,"tags":["React (fully functional components βš“) βš›","Next.js","Lerna 🐍","Yarn 🐈","TypeScript","Material-UI","CSS-in-JS","Firebase πŸ”₯","Apollo GraphQL client","React-Hook-Form πŸ“„","Recharts πŸ“Š","i18next 🌐","Django","Graphene","nginx","Docker 🐳","GitLab CI 🦊","PostgreSQL 🐘"],"body":{"raw":"\n[live demo πŸ”₯](https://sina-front.vercel.app/)\n\n![follow-up automation software](/images/_markdowns/projects/sina-heart/cover.png)\n\n- Carrying out team coordination and work\n- Meeting with hospital, clinic and laboratory managers for requirements engineering and data gathering.\n- We developed a follow-up automation software that is used in the process of discharging patients and can help hospitals and clinics stay in touch with their patients and coordinate the next check ups of the patient. It also provides the patients with educational content. This system is currently being used by Sina hospital.\n","html":"

live demo πŸ”₯

\n

\"follow-up

\n"},"_id":"projects/sina-heart.mdx","_raw":{"sourceFilePath":"projects/sina-heart.mdx","sourceFileName":"sina-heart.mdx","sourceFileDir":"projects","contentType":"mdx","flattenedPath":"projects/sina-heart"},"type":"Project","readingTime":{"text":"1 min read","minutes":0.405,"time":24300,"words":81},"wordCount":83,"slug":"sina-heart"}},"__N_SSG":true} \ No newline at end of file diff --git a/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/sportify.json b/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/sportify.json deleted file mode 100644 index e5415468..00000000 --- a/_next/data/FI7bR2RtPsi5KMHnONtnm/projects/sportify.json +++ /dev/null @@ -1 +0,0 @@ -{"pageProps":{"project":{"category":"project","cover":"/images/_markdowns/projects/sportify/cover.png","title":"Sportify","description":"A simple site for football and basketball news","startDate":"2018-11-20","endDate":"2019-01-02","published":true,"tags":["βš› React (class components)","Redux","TypeScript","JavaScript","🐜 Ant Design","CSS-in-JS","CSS modules","SQLite","Django REST API"],"body":{"raw":"\n![Sportify](/images/_markdowns/projects/sportify/cover.png)\n\n- Web Development course project\n\n[GitHub repository](https://github.com/ali4heydari/sportify-frontend)\n","html":"

\"Sportify\"

\n\n

GitHub repository

"},"_id":"projects/sportify.mdx","_raw":{"sourceFilePath":"projects/sportify.mdx","sourceFileName":"sportify.mdx","sourceFileDir":"projects","contentType":"mdx","flattenedPath":"projects/sportify"},"type":"Project","readingTime":{"text":"1 min read","minutes":0.04,"time":2400,"words":8},"wordCount":10,"slug":"sportify"}},"__N_SSG":true} \ No newline at end of file diff --git a/_next/data/FI7bR2RtPsi5KMHnONtnm/resume.json b/_next/data/FI7bR2RtPsi5KMHnONtnm/resume.json deleted file mode 100644 index 1d9842e4..00000000 --- a/_next/data/FI7bR2RtPsi5KMHnONtnm/resume.json +++ /dev/null @@ -1 +0,0 @@ -{"pageProps":{"allExperiences":[{"company":"Iran University of Science and Technology","position":"Teacher assistant","startDate":"2017-10-01","endDate":"2018-01-01","body":{"raw":"\nAdvanced programming course supervised by [Prof. Sauleh Eetemadi](https://sauleh.github.io/).\n\nMy responsibilities include:\n\n- Design, implementation and documentation programming assignments.\n- Hold weekly practice classes.\n","html":"

Advanced programming course supervised by Prof. Sauleh Eetemadi.

\n

My responsibilities include:

\n"},"_id":"experiences/01-ap-ta.mdx","_raw":{"sourceFilePath":"experiences/01-ap-ta.mdx","sourceFileName":"01-ap-ta.mdx","sourceFileDir":"experiences","contentType":"mdx","flattenedPath":"experiences/01-ap-ta"},"type":"Experience","readingTime":{"text":"1 min read","minutes":0.115,"time":6900,"words":23},"wordCount":25,"slug":"01-ap-ta"},{"company":"Iran University of Science and Technology","position":"Head Teacher assistant","startDate":"2019-02-01","endDate":"2019-08-01","body":{"raw":"\nAdvanced programming course supervised by [Prof. Sauleh Eetemadi](https://sauleh.github.io/).\n\nMy responsibilities include:\n\n- Manage and coordinate TAs, Code reviewers, and other course staff.\n- Design, implementation and documentation programming assignments. assignments with a documentation are available via [the link](https://sauleh.github.io/ap97/assignments/)\n- Hold weekly practice classes and workshops with topics such as Git, Azure DevOps, clean code, WPF.\n- Design, implementation, documentation and scoring programming exams. The mentioned exams with their corresponding answers are available via [the link](https://sauleh.github.io/ap97/assignments/)\n- More info in [course home page](https://sauleh.github.io/ap97)\n","html":"

Advanced programming course supervised by Prof. Sauleh Eetemadi.

\n

My responsibilities include:

\n"},"_id":"experiences/02-ap-head-ta.mdx","_raw":{"sourceFilePath":"experiences/02-ap-head-ta.mdx","sourceFileName":"02-ap-head-ta.mdx","sourceFileDir":"experiences","contentType":"mdx","flattenedPath":"experiences/02-ap-head-ta"},"type":"Experience","readingTime":{"text":"1 min read","minutes":0.41,"time":24600,"words":82},"wordCount":84,"slug":"02-ap-head-ta"},{"company":"Iran's national elites foundation","position":"Software Engineer","startDate":"2020-01-01","endDate":"2020-11-01","body":{"raw":"\nA project funded by Iran's National Elites Foundation and supervised by [Prof. Behroozi](http://ee.sharif.edu/~behroozi/) and [Prof. Soleymani](http://sharif.edu/~soleymani/).\n\nMy Responsibilities include:\n\n- Carrying out team coordination and work\n- Meeting with hospital, clinic, and laboratory managers for requirements engineering and data gathering.\n- We developed a follow-up automation software that is used in the process of discharging patients and can help hospitals and clinics stay in touch with their patients and coordinate the next check ups of the patient. It also provides the patients with educational content. This system is currently being used by Sina hospital.\n","html":"

A project funded by Iran's National Elites Foundation and supervised by Prof. Behroozi and Prof. Soleymani.

\n

My Responsibilities include:

\n"},"_id":"experiences/03-bmn.mdx","_raw":{"sourceFilePath":"experiences/03-bmn.mdx","sourceFileName":"03-bmn.mdx","sourceFileDir":"experiences","contentType":"mdx","flattenedPath":"experiences/03-bmn"},"type":"Experience","readingTime":{"text":"1 min read","minutes":0.47,"time":28200,"words":94},"wordCount":96,"slug":"03-bmn"},{"company":"eFarda eCommerce Company","position":"Fullstack Developer","startDate":"2020-06-01","endDate":"Present","body":{"raw":"\nMy Responsibilities include:\n\n- Training and setting up the use of Git\n- Migrate all codes from TFS version control to Git\n- Develop web APIs\n- Work with bank external APIs\n- Setup CI/CD and Docker for projects\n- Design and implement front-end of new projects\n\n[company site](https://www.efarda.ir/)\n","html":"

My Responsibilities include:

\n\n

company site

"},"_id":"experiences/04-efarda.mdx","_raw":{"sourceFilePath":"experiences/04-efarda.mdx","sourceFileName":"04-efarda.mdx","sourceFileDir":"experiences","contentType":"mdx","flattenedPath":"experiences/04-efarda"},"type":"Experience","readingTime":{"text":"1 min read","minutes":0.245,"time":14700,"words":49},"wordCount":51,"slug":"04-efarda"}],"allEducation":[{"university":"Sharif University Of Technology","degree":"Bachelor","startDate":"2016-10-01","endDate":"2017-09-01","body":{"raw":"\nChemical engineering. (I left Sharif University to change my field of study)\n","html":"

Chemical engineering. (I left Sharif University to change my field of study)

"},"_id":"educations/01-sharif-che.mdx","_raw":{"sourceFilePath":"educations/01-sharif-che.mdx","sourceFileName":"01-sharif-che.mdx","sourceFileDir":"educations","contentType":"mdx","flattenedPath":"educations/01-sharif-che"},"type":"Education","readingTime":{"text":"1 min read","minutes":0.06,"time":3600,"words":12},"wordCount":14,"slug":"01-sharif-che"},{"university":"Iran University of Science and Technology","degree":"Bachelor","startDate":"2017-10-01","endDate":"Present","body":{"raw":"\nComputer engineering\n","html":"

Computer engineering

"},"_id":"educations/02-iust-ce.mdx","_raw":{"sourceFilePath":"educations/02-iust-ce.mdx","sourceFileName":"02-iust-ce.mdx","sourceFileDir":"educations","contentType":"mdx","flattenedPath":"educations/02-iust-ce"},"type":"Education","readingTime":{"text":"1 min read","minutes":0.01,"time":600,"words":2},"wordCount":4,"slug":"02-iust-ce"}]},"__N_SSG":true} \ No newline at end of file diff --git a/_next/data/FI7bR2RtPsi5KMHnONtnm/tools.json b/_next/data/FI7bR2RtPsi5KMHnONtnm/tools.json deleted file mode 100644 index 5210a8e4..00000000 --- a/_next/data/FI7bR2RtPsi5KMHnONtnm/tools.json +++ /dev/null @@ -1 +0,0 @@ -{"pageProps":{"tools":{"title":"Tools","subtitle":"My favorite tools","body":{"raw":"\nI like to list my favorite tools, so I can keep track of them, and I can also point friends to this list.\n\n## Git\n\n##### [Git-Flow πŸ”€](https://github.com/petervanderdoes/gitflow-avh)\n\nA collection of Git extensions to provide high-level repository operations for Vincent Driessen's [branching model](https://nvie.com/posts/a-successful-git-branching-model/).\n\n##### [Delta](https://github.com/dandavison/delta)\n\nIt’s the best viewer I’ve found for Git and diff output.\n\n##### [Meld](https://meldmerge.org/)\n\nThe best free tool I've found for compare folders. I also use Meld to fix git merge conflicts.\n\n##### [Commitizen CLI](https://github.com/commitizen/cz-cli)\n\nA command-line utility helper to commit with a good message and stop commit with message like `update`!\n\n##### [Commit lint](https://github.com/conventional-changelog/commitlint)\n\nLint commit messages. It can config and use beside commitizen CLI.\n\n##### [Husky 🐢](https://github.com/typicode/husky)\n\nGit hooks made easy. I use husky with [lint staged πŸ’©](https://github.com/okonet/lint-staged) or [pretty quick](https://github.com/azz/pretty-quick)\n\n##### [Git Jump 🦘](https://github.com/mykolaharmash/git-jump)\n\nInteractive CLI to better navigate and switch Git branches.\n\n## IDEs and Editors\n\n### Jetbrains IDEs\n\n#### plugins\n\n##### [Power mode II πŸ”₯](https://plugins.jetbrains.com/plugin/8251-power-mode-ii)\n\n##### [Atom material icons](https://plugins.jetbrains.com/plugin/10044-atom-material-icons)\n\n##### [Rainbow Brackets 🌈](https://plugins.jetbrains.com/plugin/10080-rainbow-brackets)\n\n##### [String Manipulation πŸ–Š](https://plugins.jetbrains.com/plugin/2162-string-manipulation)\n\n##### [Translation γŠ—](https://plugins.jetbrains.com/plugin/8579-translation)\n\n##### [Git Flow Integration πŸ”€](https://github.com/OpherV/gitflow4idea/)\n\n##### [JS GraphQL πŸ•Έ](https://github.com/jimkyndemeyer/js-graphql-intellij-plugin)\n\n### [VS Code](https://code.visualstudio.com/)\n\n#### plugins\n\n##### [LaTeX Workshop](https://github.com/James-Yu/LaTeX-Workshop)\n\n## Node.js related tools\n\n##### [NVM windows](https://github.com/coreybutler/nvm-windows)\n\n##### [NVM Linux](https://github.com/nvm-sh/nvm)\n\n## Other\n\n##### [OBS Studio πŸŽ₯](https://github.com/obsproject/obs-studio)\n\nThe best free tool I've found for recording and live stream stuffs\n\n##### [bat](https://github.com/sharkdp/bat)\n\nA cat(1) clone with wings.\n\n##### [fzf](https://github.com/junegunn/fzf)\n\nA command-line fuzzy finder\n\n##### [Ferdi](https://github.com/getferdi/ferdi)\n","html":"

I like to list my favorite tools, so I can keep track of them, and I can also point friends to this list.

\n

Git

\n
Git-Flow πŸ”€
\n

A collection of Git extensions to provide high-level repository operations for Vincent Driessen's branching model.

\n
Delta
\n

It’s the best viewer I’ve found for Git and diff output.

\n
Meld
\n

The best free tool I've found for compare folders. I also use Meld to fix git merge conflicts.

\n
Commitizen CLI
\n

A command-line utility helper to commit with a good message and stop commit with message like update!

\n
Commit lint
\n

Lint commit messages. It can config and use beside commitizen CLI.

\n
Husky 🐢
\n

Git hooks made easy. I use husky with lint staged πŸ’© or pretty quick

\n
Git Jump 🦘
\n

Interactive CLI to better navigate and switch Git branches.

\n

IDEs and Editors

\n

Jetbrains IDEs

\n

plugins

\n
Power mode II πŸ”₯
\n
Atom material icons
\n
Rainbow Brackets 🌈
\n
String Manipulation πŸ–Š
\n
Translation γŠ—
\n
Git Flow Integration πŸ”€
\n
JS GraphQL πŸ•Έ
\n

VS Code

\n

plugins

\n
LaTeX Workshop
\n

Node.js related tools

\n
NVM windows
\n
NVM Linux
\n

Other

\n
OBS Studio πŸŽ₯
\n

The best free tool I've found for recording and live stream stuffs

\n
bat
\n

A cat(1) clone with wings.

\n
fzf
\n

A command-line fuzzy finder

\n
Ferdi
"},"_id":"tools/index.mdx","_raw":{"sourceFilePath":"tools/index.mdx","sourceFileName":"index.mdx","sourceFileDir":"tools","contentType":"mdx","flattenedPath":"tools"},"type":"Tool","readingTime":{"text":"2 min read","minutes":1.145,"time":68700,"words":229},"wordCount":231,"slug":"index"}},"__N_SSG":true} \ No newline at end of file diff --git a/_next/static/FI7bR2RtPsi5KMHnONtnm/_buildManifest.js b/_next/static/FI7bR2RtPsi5KMHnONtnm/_buildManifest.js deleted file mode 100644 index ab4d1d49..00000000 --- a/_next/static/FI7bR2RtPsi5KMHnONtnm/_buildManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__BUILD_MANIFEST=function(s,c,e){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":[s,c,"static/css/1ca69f0dfdd62745.css","static/chunks/pages/index-24e53b78632803c4.js"],"/_error":["static/chunks/pages/_error-2280fa386d040b66.js"],"/blog":[s,c,"static/css/a89e38ca5a57e99a.css","static/chunks/pages/blog-4ba2f39eaa15e3ac.js"],"/blog/[slug]":[s,c,"static/css/13a2b055cdbda696.css","static/chunks/pages/blog/[slug]-9e72dc812701157f.js"],"/contact":[s,c,e,"static/chunks/pages/contact-24b13a4368e2b614.js"],"/projects":[s,c,"static/css/7fe86a2086bc5037.css","static/chunks/pages/projects-ccdca72ec4f289a9.js"],"/projects/[slug]":[s,c,"static/css/6482db3edd746b7d.css","static/chunks/pages/projects/[slug]-d970ffbf19658c9b.js"],"/resume":[s,c,e,"static/chunks/pages/resume-a484c786e2bd28ea.js"],"/skills":[s,c,"static/css/50241b0d598cb56b.css","static/chunks/pages/skills-fcf5d5da7ac546cf.js"],"/tools":[s,c,e,"static/chunks/pages/tools-a87d38d0e35869cc.js"],sortedPages:["/","/_app","/_error","/blog","/blog/[slug]","/contact","/projects","/projects/[slug]","/resume","/skills","/tools"]}}("static/chunks/185-ffb46217461ae609.js","static/chunks/273-2d8152ca9d1c7078.js","static/css/8a70dd190661c456.css"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file diff --git a/_next/static/FI7bR2RtPsi5KMHnONtnm/_middlewareManifest.js b/_next/static/FI7bR2RtPsi5KMHnONtnm/_middlewareManifest.js deleted file mode 100644 index a17fc8bf..00000000 --- a/_next/static/FI7bR2RtPsi5KMHnONtnm/_middlewareManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__MIDDLEWARE_MANIFEST=[];self.__MIDDLEWARE_MANIFEST_CB&&self.__MIDDLEWARE_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/FI7bR2RtPsi5KMHnONtnm/_ssgManifest.js b/_next/static/FI7bR2RtPsi5KMHnONtnm/_ssgManifest.js deleted file mode 100644 index 85807e77..00000000 --- a/_next/static/FI7bR2RtPsi5KMHnONtnm/_ssgManifest.js +++ /dev/null @@ -1 +0,0 @@ -self.__SSG_MANIFEST=new Set(["\u002F","\u002Fresume","\u002Ftools","\u002Fblog\u002F[slug]","\u002Fprojects\u002F[slug]"]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() \ No newline at end of file diff --git a/_next/static/chunks/185-ffb46217461ae609.js b/_next/static/chunks/185-ffb46217461ae609.js deleted file mode 100644 index cdfbe354..00000000 --- a/_next/static/chunks/185-ffb46217461ae609.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{4184:function(e,t){var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M19,19H5V8H19M16,1V3H8V1H6V3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3H18V1M17,12H12V17H17V12Z"}))},i=o.memo?o.memo(l):l;e.exports=i},1488:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M22,24L16.75,19L17.38,21H4.5A2.5,2.5 0 0,1 2,18.5V3.5A2.5,2.5 0 0,1 4.5,1H19.5A2.5,2.5 0 0,1 22,3.5V24M12,6.8C9.32,6.8 7.44,7.95 7.44,7.95C8.47,7.03 10.27,6.5 10.27,6.5L10.1,6.33C8.41,6.36 6.88,7.53 6.88,7.53C5.16,11.12 5.27,14.22 5.27,14.22C6.67,16.03 8.75,15.9 8.75,15.9L9.46,15C8.21,14.73 7.42,13.62 7.42,13.62C7.42,13.62 9.3,14.9 12,14.9C14.7,14.9 16.58,13.62 16.58,13.62C16.58,13.62 15.79,14.73 14.54,15L15.25,15.9C15.25,15.9 17.33,16.03 18.73,14.22C18.73,14.22 18.84,11.12 17.12,7.53C17.12,7.53 15.59,6.36 13.9,6.33L13.73,6.5C13.73,6.5 15.53,7.03 16.56,7.95C16.56,7.95 14.68,6.8 12,6.8M9.93,10.59C10.58,10.59 11.11,11.16 11.1,11.86C11.1,12.55 10.58,13.13 9.93,13.13C9.29,13.13 8.77,12.55 8.77,11.86C8.77,11.16 9.28,10.59 9.93,10.59M14.1,10.59C14.75,10.59 15.27,11.16 15.27,11.86C15.27,12.55 14.75,13.13 14.1,13.13C13.46,13.13 12.94,12.55 12.94,11.86C12.94,11.16 13.45,10.59 14.1,10.59Z"}))},i=o.memo?o.memo(l):l;e.exports=i},548:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M20,8L12,13L4,8V6L12,11L20,6M20,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V6C22,4.89 21.1,4 20,4Z"}))},i=o.memo?o.memo(l):l;e.exports=i},6892:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M12 2.04C6.5 2.04 2 6.53 2 12.06C2 17.06 5.66 21.21 10.44 21.96V14.96H7.9V12.06H10.44V9.85C10.44 7.34 11.93 5.96 14.22 5.96C15.31 5.96 16.45 6.15 16.45 6.15V8.62H15.19C13.95 8.62 13.56 9.39 13.56 10.18V12.06H16.34L15.89 14.96H13.56V21.96A10 10 0 0 0 22 12.06C22 6.53 17.5 2.04 12 2.04Z"}))},i=o.memo?o.memo(l):l;e.exports=i},6095:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M12,2A10,10 0 0,0 2,12C2,16.42 4.87,20.17 8.84,21.5C9.34,21.58 9.5,21.27 9.5,21C9.5,20.77 9.5,20.14 9.5,19.31C6.73,19.91 6.14,17.97 6.14,17.97C5.68,16.81 5.03,16.5 5.03,16.5C4.12,15.88 5.1,15.9 5.1,15.9C6.1,15.97 6.63,16.93 6.63,16.93C7.5,18.45 8.97,18 9.54,17.76C9.63,17.11 9.89,16.67 10.17,16.42C7.95,16.17 5.62,15.31 5.62,11.5C5.62,10.39 6,9.5 6.65,8.79C6.55,8.54 6.2,7.5 6.75,6.15C6.75,6.15 7.59,5.88 9.5,7.17C10.29,6.95 11.15,6.84 12,6.84C12.85,6.84 13.71,6.95 14.5,7.17C16.41,5.88 17.25,6.15 17.25,6.15C17.8,7.5 17.45,8.54 17.35,8.79C18,9.5 18.38,10.39 18.38,11.5C18.38,15.32 16.04,16.16 13.81,16.41C14.17,16.72 14.5,17.33 14.5,18.26C14.5,19.6 14.5,20.68 14.5,21C14.5,21.27 14.66,21.59 15.17,21.5C19.14,20.16 22,16.42 22,12A10,10 0 0,0 12,2Z"}))},i=o.memo?o.memo(l):l;e.exports=i},4891:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M21.94 13.11L20.89 9.89C20.89 9.86 20.88 9.83 20.87 9.8L18.76 3.32C18.65 3 18.33 2.75 17.96 2.75C17.6 2.75 17.28 3 17.17 3.33L15.17 9.5H8.84L6.83 3.33C6.72 3 6.4 2.75 6.04 2.75H6.04C5.67 2.75 5.35 3 5.24 3.33L3.13 9.82C3.13 9.82 3.13 9.83 3.13 9.83L2.06 13.11C1.9 13.61 2.07 14.15 2.5 14.45L11.72 21.16C11.89 21.28 12.11 21.28 12.28 21.15L21.5 14.45C21.93 14.15 22.1 13.61 21.94 13.11M8.15 10.45L10.72 18.36L4.55 10.45M13.28 18.37L15.75 10.78L15.85 10.45H19.46L13.87 17.61M17.97 3.94L19.78 9.5H16.16M14.86 10.45L13.07 15.96L12 19.24L9.14 10.45M6.03 3.94L7.84 9.5H4.23M3.05 13.69C2.96 13.62 2.92 13.5 2.96 13.4L3.75 10.97L9.57 18.42M20.95 13.69L14.44 18.42L14.46 18.39L20.25 10.97L21.04 13.4C21.08 13.5 21.04 13.62 20.95 13.69"}))},i=o.memo?o.memo(l):l;e.exports=i},1778:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M7.8,2H16.2C19.4,2 22,4.6 22,7.8V16.2A5.8,5.8 0 0,1 16.2,22H7.8C4.6,22 2,19.4 2,16.2V7.8A5.8,5.8 0 0,1 7.8,2M7.6,4A3.6,3.6 0 0,0 4,7.6V16.4C4,18.39 5.61,20 7.6,20H16.4A3.6,3.6 0 0,0 20,16.4V7.6C20,5.61 18.39,4 16.4,4H7.6M17.25,5.5A1.25,1.25 0 0,1 18.5,6.75A1.25,1.25 0 0,1 17.25,8A1.25,1.25 0 0,1 16,6.75A1.25,1.25 0 0,1 17.25,5.5M12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9Z"}))},i=o.memo?o.memo(l):l;e.exports=i},5947:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M19 3A2 2 0 0 1 21 5V19A2 2 0 0 1 19 21H5A2 2 0 0 1 3 19V5A2 2 0 0 1 5 3H19M18.5 18.5V13.2A3.26 3.26 0 0 0 15.24 9.94C14.39 9.94 13.4 10.46 12.92 11.24V10.13H10.13V18.5H12.92V13.57C12.92 12.8 13.54 12.17 14.31 12.17A1.4 1.4 0 0 1 15.71 13.57V18.5H18.5M6.88 8.56A1.68 1.68 0 0 0 8.56 6.88C8.56 5.95 7.81 5.19 6.88 5.19A1.69 1.69 0 0 0 5.19 6.88C5.19 7.81 5.95 8.56 6.88 8.56M8.27 18.5V10.13H5.5V18.5H8.27Z"}))},i=o.memo?o.memo(l):l;e.exports=i},7132:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M6.62,10.79C8.06,13.62 10.38,15.94 13.21,17.38L15.41,15.18C15.69,14.9 16.08,14.82 16.43,14.93C17.55,15.3 18.75,15.5 20,15.5A1,1 0 0,1 21,16.5V20A1,1 0 0,1 20,21A17,17 0 0,1 3,4A1,1 0 0,1 4,3H7.5A1,1 0 0,1 8.5,4C8.5,5.25 8.7,6.45 9.07,7.57C9.18,7.92 9.1,8.31 8.82,8.59L6.62,10.79Z"}))},i=o.memo?o.memo(l):l;e.exports=i},1978:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M18,6C20.07,8.04 20.85,10.89 20.36,13.55C20.77,14.27 21,15.11 21,16A5,5 0 0,1 16,21C15.11,21 14.27,20.77 13.55,20.36C10.89,20.85 8.04,20.07 6,18C3.93,15.96 3.15,13.11 3.64,10.45C3.23,9.73 3,8.89 3,8A5,5 0 0,1 8,3C8.89,3 9.73,3.23 10.45,3.64C13.11,3.15 15.96,3.93 18,6M12.04,17.16C14.91,17.16 16.34,15.78 16.34,13.92C16.34,12.73 15.78,11.46 13.61,10.97L11.62,10.53C10.86,10.36 10,10.13 10,9.42C10,8.7 10.6,8.2 11.7,8.2C13.93,8.2 13.72,9.73 14.83,9.73C15.41,9.73 15.91,9.39 15.91,8.8C15.91,7.43 13.72,6.4 11.86,6.4C9.85,6.4 7.7,7.26 7.7,9.54C7.7,10.64 8.09,11.81 10.25,12.35L12.94,13.03C13.75,13.23 13.95,13.68 13.95,14.1C13.95,14.78 13.27,15.45 12.04,15.45C9.63,15.45 9.96,13.6 8.67,13.6C8.09,13.6 7.67,14 7.67,14.57C7.67,15.68 9,17.16 12.04,17.16Z"}))},i=o.memo?o.memo(l):l;e.exports=i},8653:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M19,19H5V5H19M19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3M10,8V16L15,12L10,8Z"}))},i=o.memo?o.memo(l):l;e.exports=i},5254:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M17.9,10.9C14.7,9 9.35,8.8 6.3,9.75C5.8,9.9 5.3,9.6 5.15,9.15C5,8.65 5.3,8.15 5.75,8C9.3,6.95 15.15,7.15 18.85,9.35C19.3,9.6 19.45,10.2 19.2,10.65C18.95,11 18.35,11.15 17.9,10.9M17.8,13.7C17.55,14.05 17.1,14.2 16.75,13.95C14.05,12.3 9.95,11.8 6.8,12.8C6.4,12.9 5.95,12.7 5.85,12.3C5.75,11.9 5.95,11.45 6.35,11.35C10,10.25 14.5,10.8 17.6,12.7C17.9,12.85 18.05,13.35 17.8,13.7M16.6,16.45C16.4,16.75 16.05,16.85 15.75,16.65C13.4,15.2 10.45,14.9 6.95,15.7C6.6,15.8 6.3,15.55 6.2,15.25C6.1,14.9 6.35,14.6 6.65,14.5C10.45,13.65 13.75,14 16.35,15.6C16.7,15.75 16.75,16.15 16.6,16.45M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z"}))},i=o.memo?o.memo(l):l;e.exports=i},4756:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M17.36,20.2V14.82H19.15V22H3V14.82H4.8V20.2H17.36M6.77,14.32L7.14,12.56L15.93,14.41L15.56,16.17L6.77,14.32M7.93,10.11L8.69,8.5L16.83,12.28L16.07,13.9L7.93,10.11M10.19,6.12L11.34,4.74L18.24,10.5L17.09,11.87L10.19,6.12M14.64,1.87L20,9.08L18.56,10.15L13.2,2.94L14.64,1.87M6.59,18.41V16.61H15.57V18.41H6.59Z"}))},i=o.memo?o.memo(l):l;e.exports=i},5534:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M11.64 5.93H13.07V10.21H11.64M15.57 5.93H17V10.21H15.57M7 2L3.43 5.57V18.43H7.71V22L11.29 18.43H14.14L20.57 12V2M19.14 11.29L16.29 14.14H13.43L10.93 16.64V14.14H7.71V3.43H19.14Z"}))},i=o.memo?o.memo(l):l;e.exports=i},978:function(e,t,n){"use strict";var r,o=(r=n(7294))&&"object"===typeof r&&"default"in r?r.default:r,a=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}(e,["color","size","children"])),u="mdi-icon "+(i.className||"");return o.createElement("svg",a({},i,{className:u,width:l,height:l,fill:n,viewBox:"0 0 24 24"}),o.createElement("path",{d:"M22.46,6C21.69,6.35 20.86,6.58 20,6.69C20.88,6.16 21.56,5.32 21.88,4.31C21.05,4.81 20.13,5.16 19.16,5.36C18.37,4.5 17.26,4 16,4C13.65,4 11.73,5.92 11.73,8.29C11.73,8.63 11.77,8.96 11.84,9.27C8.28,9.09 5.11,7.38 3,4.79C2.63,5.42 2.42,6.16 2.42,6.94C2.42,8.43 3.17,9.75 4.33,10.5C3.62,10.5 2.96,10.3 2.38,10C2.38,10 2.38,10 2.38,10.03C2.38,12.11 3.86,13.85 5.82,14.24C5.46,14.34 5.08,14.39 4.69,14.39C4.42,14.39 4.15,14.36 3.89,14.31C4.43,16 6,17.26 7.89,17.29C6.43,18.45 4.58,19.13 2.56,19.13C2.22,19.13 1.88,19.11 1.54,19.07C3.44,20.29 5.7,21 8.12,21C16,21 20.33,14.46 20.33,8.79C20.33,8.6 20.33,8.42 20.32,8.23C21.16,7.63 21.88,6.87 22.46,6Z"}))},i=o.memo?o.memo(l):l;e.exports=i},8418:function(e,t,n){"use strict";function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0;t&&n&&t(n)}))}),e);return u.set(n,t={id:n,observer:a,elements:o}),t}(n),o=r.id,a=r.observer,l=r.elements;return l.set(e,t),a.observe(e),function(){if(l.delete(e),a.unobserve(e),0===l.size){a.disconnect(),u.delete(o);var t=s.findIndex((function(e){return e.root===o.root&&e.margin===o.margin}));t>-1&&s.splice(t,1)}}}(e,(function(e){return e&&f(e)}),{root:m,rootMargin:n}))}),[r,m,n,p]);return a.useEffect((function(){if(!i&&!p){var e=l.requestIdleCallback((function(){return f(!0)}));return function(){return l.cancelIdleCallback(e)}}}),[p]),a.useEffect((function(){t&&b(t.current)}),[t]),[y,p]};var a=n(7294),l=n(9311),i="undefined"!==typeof IntersectionObserver;var u=new Map,s=[]},1664:function(e,t,n){e.exports=n(8418)},6727:function(e,t,n){"use strict";n.d(t,{pJ:function(){return Oe}});var r=n(7294),o=n(3935);function a(){let e=[],t=[],n={enqueue(e){t.push(e)},requestAnimationFrame(...e){let t=requestAnimationFrame(...e);n.add((()=>cancelAnimationFrame(t)))},nextFrame(...e){n.requestAnimationFrame((()=>{n.requestAnimationFrame(...e)}))},setTimeout(...e){let t=setTimeout(...e);n.add((()=>clearTimeout(t)))},add(t){e.push(t)},dispose(){for(let t of e.splice(0))t()},async workQueue(){for(let e of t.splice(0))await e()}};return n}function l(){let[e]=(0,r.useState)(a);return(0,r.useEffect)((()=>()=>e.dispose()),[e]),e}var i="undefined"!=typeof window?r.useLayoutEffect:r.useEffect,u={serverHandoffComplete:!1};function s(){let[e,t]=(0,r.useState)(u.serverHandoffComplete);return(0,r.useEffect)((()=>{!0!==e&&t(!0)}),[e]),(0,r.useEffect)((()=>{!1===u.serverHandoffComplete&&(u.serverHandoffComplete=!0)}),[]),e}var c=0;function d(){return++c}function p(){let e=s(),[t,n]=(0,r.useState)(e?d:null);return i((()=>{null===t&&n(d())}),[t]),null!=t?""+t:void 0}function f(e){let t=(0,r.useRef)(e);return(0,r.useEffect)((()=>{t.current=e}),[e]),t}function v(e,t){let[n,o]=(0,r.useState)(e),a=f(e);return i((()=>o(a.current)),[a,o,...t]),n}function m(...e){let t=(0,r.useRef)(e);return(0,r.useEffect)((()=>{t.current=e}),[e]),(0,r.useCallback)((e=>{for(let n of t.current)null!=n&&("function"==typeof n?n(e):n.current=e)}),[t])}function b(e,t,...n){if(e in t){let r=t[e];return"function"==typeof r?r(...n):r}let r=new Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(t).map((e=>`"${e}"`)).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,b),r}function y({props:e,slot:t,defaultTag:n,features:r,visible:o=!0,name:a}){if(o)return h(e,t,n,a);let l=null!=r?r:0;if(2&l){let{static:r=!1,...o}=e;if(r)return h(o,t,n,a)}if(1&l){let{unmount:r=!0,...o}=e;return b(r?0:1,{0:()=>null,1:()=>h({...o,hidden:!0,style:{display:"none"}},t,n,a)})}return h(e,t,n,a)}function h(e,t={},n,o){let{as:a=n,children:l,refName:i="ref",...u}=g(e,["unmount","static"]),s=void 0!==e.ref?{[i]:e.ref}:{},c="function"==typeof l?l(t):l;if(u.className&&"function"==typeof u.className&&(u.className=u.className(t)),a===r.Fragment&&Object.keys(u).length>0){if(!(0,r.isValidElement)(c)||Array.isArray(c)&&c.length>1)throw new Error(['Passing props on "Fragment"!',"",`The current component <${o} /> is rendering a "Fragment".`,"However we need to passthrough the following props:",Object.keys(u).map((e=>` - ${e}`)).join("\n"),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".',"Render a single element as the child so that we can forward the props onto that element."].map((e=>` - ${e}`)).join("\n")].join("\n"));return(0,r.cloneElement)(c,Object.assign({},function(e,t,n){let r=Object.assign({},e);for(let o of n)void 0!==e[o]&&void 0!==t[o]&&Object.assign(r,{[o](n){n.defaultPrevented||e[o](n),n.defaultPrevented||t[o](n)}});return r}(function(e){let t=Object.assign({},e);for(let n in t)void 0===t[n]&&delete t[n];return t}(g(u,["ref"])),c.props,["onClick"]),s))}return(0,r.createElement)(a,Object.assign({},g(u,["ref"]),a!==r.Fragment&&s),c)}function C(e){var t;return Object.assign((0,r.forwardRef)(e),{displayName:null!=(t=e.displayName)?t:e.name})}function g(e,t=[]){let n=Object.assign({},e);for(let r of t)r in n&&delete n[r];return n}function x(e,t){let n=t.resolveItems();if(n.length<=0)return null;let r=t.resolveActiveIndex(),o=null!=r?r:-1,a=(()=>{switch(e.focus){case 0:return n.findIndex((e=>!t.resolveDisabled(e)));case 1:{let e=n.slice().reverse().findIndex(((e,n,r)=>!(-1!==o&&r.length-n-1>=o)&&!t.resolveDisabled(e)));return-1===e?e:n.length-1-e}case 2:return n.findIndex(((e,n)=>!(n<=o)&&!t.resolveDisabled(e)));case 3:{let e=n.slice().reverse().findIndex((e=>!t.resolveDisabled(e)));return-1===e?e:n.length-1-e}case 4:return n.findIndex((n=>t.resolveId(n)===e.id));case 5:return null;default:!function(e){throw new Error("Unexpected object: "+e)}(e)}})();return-1===a?r:a}function E(e){let t=e.parentElement,n=null;for(;t&&!(t instanceof HTMLFieldSetElement);)t instanceof HTMLLegendElement&&(n=t),t=t.parentElement;let r=""===(null==t?void 0:t.getAttribute("disabled"));return(!r||!function(e){if(!e)return!1;let t=e.previousElementSibling;for(;null!==t;){if(t instanceof HTMLLegendElement)return!1;t=t.previousElementSibling}return!0}(n))&&r}function w(e,t,n){let o=(0,r.useRef)(t);o.current=t,(0,r.useEffect)((()=>{function t(e){o.current.call(window,e)}return window.addEventListener(e,t,n),()=>window.removeEventListener(e,t,n)}),[e,n])}var I=(0,r.createContext)(null);function R(){return(0,r.useContext)(I)}function O({value:e,children:t}){return r.createElement(I.Provider,{value:e},t)}function k(e){var t;if(e.type)return e.type;let n=null!=(t=e.as)?t:"button";return"string"==typeof n&&"button"===n.toLowerCase()?"button":void 0}function S(e,t){let[n,o]=(0,r.useState)((()=>k(e)));return i((()=>{o(k(e))}),[e.type,e.as]),i((()=>{n||!t.current||t.current instanceof HTMLButtonElement&&!t.current.hasAttribute("type")&&o("button")}),[n,t]),n}function P({container:e,accept:t,walk:n,enabled:o=!0}){let a=(0,r.useRef)(t),l=(0,r.useRef)(n);(0,r.useEffect)((()=>{a.current=t,l.current=n}),[t,n]),i((()=>{if(!e||!o)return;let t=a.current,n=l.current,r=Object.assign((e=>t(e)),{acceptNode:t}),i=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,r,!1);for(;i.nextNode();)n(i.currentNode)}),[e,o,a,l])}I.displayName="OpenClosedContext";var L={1:e=>e.disabled||1===e.comboboxState?e:{...e,activeOptionIndex:null,comboboxState:1},0:e=>e.disabled||0===e.comboboxState?e:{...e,comboboxState:0},2:(e,t)=>e.disabled===t.disabled?e:{...e,disabled:t.disabled},3(e,t){if(e.disabled||e.optionsRef.current&&!e.optionsPropsRef.current.static&&1===e.comboboxState)return e;let n=x(t,{resolveItems:()=>e.options,resolveActiveIndex:()=>e.activeOptionIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.current.disabled});return e.activeOptionIndex===n?e:{...e,activeOptionIndex:n}},4:(e,t)=>{var n;let r=null!==e.activeOptionIndex?e.options[e.activeOptionIndex]:null,o=Array.from(null==(n=e.optionsRef.current)?void 0:n.querySelectorAll('[id^="headlessui-combobox-option-"]')).reduce(((e,t,n)=>Object.assign(e,{[t.id]:n})),{}),a=[...e.options,{id:t.id,dataRef:t.dataRef}].sort(((e,t)=>o[e.id]-o[t.id]));return{...e,options:a,activeOptionIndex:null===r?null:a.indexOf(r)}},5:(e,t)=>{let n=e.options.slice(),r=null!==e.activeOptionIndex?n[e.activeOptionIndex]:null,o=n.findIndex((e=>e.id===t.id));return-1!==o&&n.splice(o,1),{...e,options:n,activeOptionIndex:o===e.activeOptionIndex||null===r?null:n.indexOf(r)}}},T=(0,r.createContext)(null);function M(e){let t=(0,r.useContext)(T);if(null===t){let t=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,M),t}return t}T.displayName="ComboboxContext";var D=(0,r.createContext)(null);function A(){let e=(0,r.useContext)(D);if(null===e){let e=new Error("ComboboxActions is missing a parent component.");throw Error.captureStackTrace&&Error.captureStackTrace(e,A),e}return e}function j(e,t){return b(t.type,L,e,t)}D.displayName="ComboboxActions";var F=r.Fragment,N=C((function(e,t){let{value:n,onChange:o,disabled:a=!1,...l}=e,u=(0,r.useRef)({value:n,onChange:o}),s=(0,r.useRef)({static:!1,hold:!1}),c=(0,r.useRef)({displayValue:void 0}),d=(0,r.useReducer)(j,{comboboxState:1,comboboxPropsRef:u,optionsPropsRef:s,inputPropsRef:c,labelRef:(0,r.createRef)(),inputRef:(0,r.createRef)(),buttonRef:(0,r.createRef)(),optionsRef:(0,r.createRef)(),disabled:a,options:[],activeOptionIndex:null}),[{comboboxState:p,options:f,activeOptionIndex:v,optionsRef:m,inputRef:h,buttonRef:C},g]=d;i((()=>{u.current.value=n}),[n,u]),i((()=>{u.current.onChange=o}),[o,u]),i((()=>g({type:2,disabled:a})),[a]),w("mousedown",(e=>{var t,n,r;let o=e.target;0===p&&((null==(t=C.current)?void 0:t.contains(o))||(null==(n=h.current)?void 0:n.contains(o))||(null==(r=m.current)?void 0:r.contains(o))||g({type:1}))}));let x=null===v?null:f[v].dataRef.current.value,E=(0,r.useMemo)((()=>({open:0===p,disabled:a,activeIndex:v,activeOption:x})),[p,a,f,v]),I=(0,r.useCallback)((()=>{if(!h.current||void 0===n)return;let e=c.current.displayValue;"function"==typeof e?h.current.value=e(n):"string"==typeof n&&(h.current.value=n)}),[n,h,c]),R=(0,r.useCallback)((e=>{let t=f.find((t=>t.id===e));if(!t)return;let{dataRef:n}=t;u.current.onChange(n.current.value),I()}),[f,u,h]),k=(0,r.useCallback)((()=>{if(null!==v){let{dataRef:e}=f[v];u.current.onChange(e.current.value),I()}}),[v,f,u,h]),S=(0,r.useMemo)((()=>({selectOption:R,selectActiveOption:k})),[R,k]);return i((()=>{1===p&&I()}),[I,p]),i(I,[I]),r.createElement(D.Provider,{value:S},r.createElement(T.Provider,{value:d},r.createElement(O,{value:b(p,{0:0,1:1})},y({props:null===t?l:{...l,ref:t},slot:E,defaultTag:F,name:"Combobox"}))))})),H=C((function(e,t){var n,o;let{value:a,onChange:u,displayValue:s,...c}=e,[d,h]=M("Combobox.Input"),C=A(),g=m(d.inputRef,t),x=d.inputPropsRef,E=`headlessui-combobox-input-${p()}`,w=l(),I=f(u);i((()=>{x.current.displayValue=s}),[s,x]);let R=(0,r.useCallback)((e=>{switch(e.key){case"Enter":e.preventDefault(),e.stopPropagation(),C.selectActiveOption(),h({type:1});break;case"ArrowDown":return e.preventDefault(),e.stopPropagation(),b(d.comboboxState,{0:()=>h({type:3,focus:2}),1:()=>{h({type:0}),w.nextFrame((()=>{d.comboboxPropsRef.current.value||h({type:3,focus:0})}))}});case"ArrowUp":return e.preventDefault(),e.stopPropagation(),b(d.comboboxState,{0:()=>h({type:3,focus:1}),1:()=>{h({type:0}),w.nextFrame((()=>{d.comboboxPropsRef.current.value||h({type:3,focus:3})}))}});case"Home":case"PageUp":return e.preventDefault(),e.stopPropagation(),h({type:3,focus:0});case"End":case"PageDown":return e.preventDefault(),e.stopPropagation(),h({type:3,focus:3});case"Escape":return e.preventDefault(),d.optionsRef.current&&!d.optionsPropsRef.current.static&&e.stopPropagation(),h({type:1});case"Tab":C.selectActiveOption(),h({type:1})}}),[w,h,d,C]),O=(0,r.useCallback)((e=>{var t;h({type:0}),null==(t=I.current)||t.call(I,e)}),[h,I]),k=v((()=>{if(d.labelRef.current)return[d.labelRef.current.id].join(" ")}),[d.labelRef.current]),S=(0,r.useMemo)((()=>({open:0===d.comboboxState,disabled:d.disabled})),[d]);return y({props:{...c,...{ref:g,id:E,role:"combobox",type:"text","aria-controls":null==(n=d.optionsRef.current)?void 0:n.id,"aria-expanded":d.disabled?void 0:0===d.comboboxState,"aria-activedescendant":null===d.activeOptionIndex||null==(o=d.options[d.activeOptionIndex])?void 0:o.id,"aria-labelledby":k,disabled:d.disabled,onKeyDown:R,onChange:O}},slot:S,defaultTag:"input",name:"Combobox.Input"})})),V=C((function(e,t){var n;let[o,a]=M("Combobox.Button"),i=A(),u=m(o.buttonRef,t),s=`headlessui-combobox-button-${p()}`,c=l(),d=(0,r.useCallback)((e=>{switch(e.key){case"ArrowDown":return e.preventDefault(),e.stopPropagation(),1===o.comboboxState&&(a({type:0}),c.nextFrame((()=>{o.comboboxPropsRef.current.value||a({type:3,focus:0})}))),c.nextFrame((()=>{var e;return null==(e=o.inputRef.current)?void 0:e.focus({preventScroll:!0})}));case"ArrowUp":return e.preventDefault(),e.stopPropagation(),1===o.comboboxState&&(a({type:0}),c.nextFrame((()=>{o.comboboxPropsRef.current.value||a({type:3,focus:3})}))),c.nextFrame((()=>{var e;return null==(e=o.inputRef.current)?void 0:e.focus({preventScroll:!0})}));case"Escape":return e.preventDefault(),o.optionsRef.current&&!o.optionsPropsRef.current.static&&e.stopPropagation(),a({type:1}),c.nextFrame((()=>{var e;return null==(e=o.inputRef.current)?void 0:e.focus({preventScroll:!0})}))}}),[c,a,o,i]),f=(0,r.useCallback)((e=>{if(E(e.currentTarget))return e.preventDefault();0===o.comboboxState?a({type:1}):(e.preventDefault(),a({type:0})),c.nextFrame((()=>{var e;return null==(e=o.inputRef.current)?void 0:e.focus({preventScroll:!0})}))}),[a,c,o]),b=v((()=>{if(o.labelRef.current)return[o.labelRef.current.id,s].join(" ")}),[o.labelRef.current,s]),h=(0,r.useMemo)((()=>({open:0===o.comboboxState,disabled:o.disabled})),[o]);return y({props:{...e,...{ref:u,id:s,type:S(e,o.buttonRef),tabIndex:-1,"aria-haspopup":!0,"aria-controls":null==(n=o.optionsRef.current)?void 0:n.id,"aria-expanded":o.disabled?void 0:0===o.comboboxState,"aria-labelledby":b,disabled:o.disabled,onClick:f,onKeyDown:d}},slot:h,defaultTag:"button",name:"Combobox.Button"})}));var $=C((function(e,t){var n;let{hold:o=!1,...a}=e,[l]=M("Combobox.Options"),{optionsPropsRef:u}=l,s=m(l.optionsRef,t),c=`headlessui-combobox-options-${p()}`,d=R(),f=null!==d?0===d:0===l.comboboxState;i((()=>{var t;u.current.static=null!=(t=e.static)&&t}),[u,e.static]),i((()=>{u.current.hold=o}),[o,u]),P({container:l.optionsRef.current,enabled:0===l.comboboxState,accept:e=>"option"===e.getAttribute("role")?NodeFilter.FILTER_REJECT:e.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT,walk(e){e.setAttribute("role","none")}});let b=v((()=>{var e,t,n;return null!=(n=null==(e=l.labelRef.current)?void 0:e.id)?n:null==(t=l.buttonRef.current)?void 0:t.id}),[l.labelRef.current,l.buttonRef.current]),h=(0,r.useMemo)((()=>({open:0===l.comboboxState})),[l]);return y({props:{...a,...{"aria-activedescendant":null===l.activeOptionIndex||null==(n=l.options[l.activeOptionIndex])?void 0:n.id,"aria-labelledby":b,role:"listbox",id:c,ref:s}},slot:h,defaultTag:"ul",features:3,visible:f,name:"Combobox.Options"})}));Object.assign(N,{Input:H,Button:V,Label:function(e){let[t]=M("Combobox.Label"),n=`headlessui-combobox-label-${p()}`,o=(0,r.useCallback)((()=>{var e;return null==(e=t.inputRef.current)?void 0:e.focus({preventScroll:!0})}),[t.inputRef]),a=(0,r.useMemo)((()=>({open:0===t.comboboxState,disabled:t.disabled})),[t]);return y({props:{...e,...{ref:t.labelRef,id:n,onClick:o}},slot:a,defaultTag:"label",name:"Combobox.Label"})},Options:$,Option:function(e){let{disabled:t=!1,value:n,...o}=e,[l,u]=M("Combobox.Option"),s=A(),c=`headlessui-combobox-option-${p()}`,d=null!==l.activeOptionIndex&&l.options[l.activeOptionIndex].id===c,f=l.comboboxPropsRef.current.value===n,v=(0,r.useRef)({disabled:t,value:n});i((()=>{v.current.disabled=t}),[v,t]),i((()=>{v.current.value=n}),[v,n]),i((()=>{var e,t;v.current.textValue=null==(t=null==(e=document.getElementById(c))?void 0:e.textContent)?void 0:t.toLowerCase()}),[v,c]);let m=(0,r.useCallback)((()=>s.selectOption(c)),[s,c]);i((()=>(u({type:4,id:c,dataRef:v}),()=>u({type:5,id:c}))),[v,c]),i((()=>{0===l.comboboxState&&(!f||u({type:3,focus:4,id:c}))}),[l.comboboxState,f,c]),i((()=>{if(0!==l.comboboxState||!d)return;let e=a();return e.requestAnimationFrame((()=>{var e,t;null==(t=null==(e=document.getElementById(c))?void 0:e.scrollIntoView)||t.call(e,{block:"nearest"})})),e.dispose}),[c,d,l.comboboxState,l.activeOptionIndex]);let b=(0,r.useCallback)((e=>{if(t)return e.preventDefault();m(),u({type:1}),a().nextFrame((()=>{var e;return null==(e=l.inputRef.current)?void 0:e.focus({preventScroll:!0})}))}),[u,l.inputRef,t,m]),h=(0,r.useCallback)((()=>{if(t)return u({type:3,focus:5});u({type:3,focus:4,id:c})}),[t,c,u]),C=(0,r.useCallback)((()=>{t||d||u({type:3,focus:4,id:c})}),[t,d,c,u]),g=(0,r.useCallback)((()=>{t||!d||l.optionsPropsRef.current.hold||u({type:3,focus:5})}),[t,d,u,l.comboboxState,l.comboboxPropsRef]),x=(0,r.useMemo)((()=>({active:d,selected:f,disabled:t})),[d,f,t]);return y({props:{...o,id:c,role:"option",tabIndex:!0===t?void 0:-1,"aria-disabled":!0===t||void 0,"aria-selected":!0===f||void 0,disabled:void 0,onClick:b,onFocus:h,onPointerMove:C,onMouseMove:C,onPointerLeave:g,onMouseLeave:g},slot:x,defaultTag:"li",name:"Combobox.Option"})}});var B=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map((e=>`${e}:not([tabindex='-1'])`)).join(",");function z(e=document.body){return null==e?[]:Array.from(e.querySelectorAll(B))}function K(e,t=0){return e!==document.body&&b(t,{0:()=>e.matches(B),1(){let t=e;for(;null!==t;){if(t.matches(B))return!0;t=t.parentElement}return!1}})}function U(e){null==e||e.focus({preventScroll:!0})}function G(e,t){let n,r=Array.isArray(e)?e.slice().sort(((e,t)=>{let n=e.compareDocumentPosition(t);return n&Node.DOCUMENT_POSITION_FOLLOWING?-1:n&Node.DOCUMENT_POSITION_PRECEDING?1:0})):z(e),o=document.activeElement,a=(()=>{if(5&t)return 1;if(10&t)return-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),l=(()=>{if(1&t)return 0;if(2&t)return Math.max(0,r.indexOf(o))-1;if(4&t)return Math.max(0,r.indexOf(o))+1;if(8&t)return r.length-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),i=32&t?{preventScroll:!0}:{},u=0,s=r.length;do{if(u>=s||u+s<=0)return 0;let e=l+u;if(16&t)e=(e+s)%s;else{if(e<0)return 3;if(e>=s)return 1}n=r[e],null==n||n.focus(i),u+=a}while(n!==document.activeElement);return n.hasAttribute("tabindex")||n.setAttribute("tabindex","0"),2}function _(){let e=(0,r.useRef)(!1);return(0,r.useEffect)((()=>(e.current=!0,()=>{e.current=!1})),[]),e}function Q(e,t=30,{initialFocus:n,containers:o}={}){let a=(0,r.useRef)("undefined"!=typeof window?document.activeElement:null),l=(0,r.useRef)(null),i=_(),u=Boolean(16&t),s=Boolean(2&t);(0,r.useEffect)((()=>{!u||(a.current=document.activeElement)}),[u]),(0,r.useEffect)((()=>{if(u)return()=>{U(a.current),a.current=null}}),[u]),(0,r.useEffect)((()=>{if(!s||!e.current)return;let t=document.activeElement;if(null==n?void 0:n.current){if((null==n?void 0:n.current)===t)return void(l.current=t)}else if(e.current.contains(t))return void(l.current=t);(null==n?void 0:n.current)?U(n.current):0===G(e.current,1)&&console.warn("There are no focusable elements inside the "),l.current=document.activeElement}),[e,n,s]),w("keydown",(n=>{!(4&t)||!e.current||"Tab"===n.key&&(n.preventDefault(),2===G(e.current,16|(n.shiftKey?2:4))&&(l.current=document.activeElement))})),w("focus",(n=>{if(!(8&t))return;let r=new Set(null==o?void 0:o.current);if(r.add(e),!r.size)return;let a=l.current;if(!a||!i.current)return;let u=n.target;u&&u instanceof HTMLElement?function(e,t){var n;for(let r of e)if(null==(n=r.current)?void 0:n.contains(t))return!0;return!1}(r,u)?(l.current=u,U(u)):(n.preventDefault(),n.stopPropagation(),U(a)):U(l.current)}),!0)}var Z=new Set,q=new Map;function W(e){e.setAttribute("aria-hidden","true"),e.inert=!0}function Y(e){let t=q.get(e);!t||(null===t["aria-hidden"]?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",t["aria-hidden"]),e.inert=t.inert)}var J=(0,r.createContext)(!1);function X(e){return r.createElement(J.Provider,{value:e.force},e.children)}function ee(){let e=(0,r.useContext)(J),t=(0,r.useContext)(oe),[n,o]=(0,r.useState)((()=>{if(!e&&null!==t||"undefined"==typeof window)return null;let n=document.getElementById("headlessui-portal-root");if(n)return n;let r=document.createElement("div");return r.setAttribute("id","headlessui-portal-root"),document.body.appendChild(r)}));return(0,r.useEffect)((()=>{null!==n&&(document.body.contains(n)||document.body.appendChild(n))}),[n]),(0,r.useEffect)((()=>{e||null!==t&&o(t.current)}),[t,o,e]),n}var te=r.Fragment;function ne(e){let t=e,n=ee(),[a]=(0,r.useState)((()=>"undefined"==typeof window?null:document.createElement("div"))),l=s();return i((()=>{if(n&&a)return n.appendChild(a),()=>{var e;!n||!a||(n.removeChild(a),n.childNodes.length<=0&&(null==(e=n.parentElement)||e.removeChild(n)))}}),[n,a]),l&&n&&a?(0,o.createPortal)(y({props:t,defaultTag:te,name:"Portal"}),a):null}var re=r.Fragment,oe=(0,r.createContext)(null);ne.Group=function(e){let{target:t,...n}=e;return r.createElement(oe.Provider,{value:t},y({props:n,defaultTag:re,name:"Popover.Group"}))};var ae=(0,r.createContext)(null);function le(){let e=(0,r.useContext)(ae);if(null===e){let e=new Error("You used a component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(e,le),e}return e}function ie(){let[e,t]=(0,r.useState)([]);return[e.length>0?e.join(" "):void 0,(0,r.useMemo)((()=>function(e){let n=(0,r.useCallback)((e=>(t((t=>[...t,e])),()=>t((t=>{let n=t.slice(),r=n.indexOf(e);return-1!==r&&n.splice(r,1),n})))),[]),o=(0,r.useMemo)((()=>({register:n,slot:e.slot,name:e.name,props:e.props})),[n,e.slot,e.name,e.props]);return r.createElement(ae.Provider,{value:o},e.children)}),[t])]}function ue(e){let t=le(),n=`headlessui-description-${p()}`;return i((()=>t.register(n)),[n,t.register]),y({props:{...e,...{...t.props,id:n}},slot:t.slot||{},defaultTag:"p",name:t.name||"Description"})}var se=(0,r.createContext)((()=>{}));function ce({children:e,onUpdate:t,type:n,element:o}){let a=(0,r.useContext)(se),l=(0,r.useCallback)(((...e)=>{null==t||t(...e),a(...e)}),[a,t]);return i((()=>(l(0,n,o),()=>l(1,n,o))),[l,n,o]),r.createElement(se.Provider,{value:l},e)}se.displayName="StackContext";var de={0:(e,t)=>e.titleId===t.id?e:{...e,titleId:t.id}},pe=(0,r.createContext)(null);function fe(e){let t=(0,r.useContext)(pe);if(null===t){let t=new Error(`<${e} /> is missing a parent <${ye.displayName} /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,fe),t}return t}function ve(e,t){return b(t.type,de,e,t)}pe.displayName="DialogContext";var me=C((function(e,t){let{open:n,onClose:o,initialFocus:a,...l}=e,[u,c]=(0,r.useState)(0),d=R();void 0===n&&null!==d&&(n=b(d,{0:!0,1:!1}));let f=(0,r.useRef)(new Set),v=(0,r.useRef)(null),h=m(v,t),C=e.hasOwnProperty("open")||null!==d,g=e.hasOwnProperty("onClose");if(!C&&!g)throw new Error("You have to provide an `open` and an `onClose` prop to the `Dialog` component.");if(!C)throw new Error("You provided an `onClose` prop to the `Dialog`, but forgot an `open` prop.");if(!g)throw new Error("You provided an `open` prop to the `Dialog`, but forgot an `onClose` prop.");if("boolean"!=typeof n)throw new Error(`You provided an \`open\` prop to the \`Dialog\`, but the value is not a boolean. Received: ${n}`);if("function"!=typeof o)throw new Error(`You provided an \`onClose\` prop to the \`Dialog\`, but the value is not a function. Received: ${o}`);let x=n?0:1,E=null!==d?0===d:0===x,[I,O]=(0,r.useReducer)(ve,{titleId:null,descriptionId:null}),k=(0,r.useCallback)((()=>o(!1)),[o]),S=(0,r.useCallback)((e=>O({type:0,id:e})),[O]),P=s()&&0===x,L=u>1,T=null!==(0,r.useContext)(pe);Q(v,P?b(L?"parent":"leaf",{parent:16,leaf:30}):1,{initialFocus:a,containers:f}),function(e,t=!0){i((()=>{if(!t||!e.current)return;let n=e.current;Z.add(n);for(let e of q.keys())e.contains(n)&&(Y(e),q.delete(e));return document.querySelectorAll("body > *").forEach((e=>{if(e instanceof HTMLElement){for(let t of Z)if(e.contains(t))return;1===Z.size&&(q.set(e,{"aria-hidden":e.getAttribute("aria-hidden"),inert:e.inert}),W(e))}})),()=>{if(Z.delete(n),Z.size>0)document.querySelectorAll("body > *").forEach((e=>{if(e instanceof HTMLElement&&!q.has(e)){for(let t of Z)if(e.contains(t))return;q.set(e,{"aria-hidden":e.getAttribute("aria-hidden"),inert:e.inert}),W(e)}}));else for(let e of q.keys())Y(e),q.delete(e)}}),[t])}(v,!!L&&P),w("mousedown",(e=>{var t;let n=e.target;0===x&&(L||(null==(t=v.current)?void 0:t.contains(n))||k())})),w("keydown",(e=>{"Escape"===e.key&&0===x&&(L||(e.preventDefault(),e.stopPropagation(),k()))})),(0,r.useEffect)((()=>{if(0!==x||T)return;let e=document.documentElement.style.overflow,t=document.documentElement.style.paddingRight,n=window.innerWidth-document.documentElement.clientWidth;return document.documentElement.style.overflow="hidden",document.documentElement.style.paddingRight=`${n}px`,()=>{document.documentElement.style.overflow=e,document.documentElement.style.paddingRight=t}}),[x,T]),(0,r.useEffect)((()=>{if(0!==x||!v.current)return;let e=new IntersectionObserver((e=>{for(let t of e)0===t.boundingClientRect.x&&0===t.boundingClientRect.y&&0===t.boundingClientRect.width&&0===t.boundingClientRect.height&&k()}));return e.observe(v.current),()=>e.disconnect()}),[x,v,k]);let[M,D]=ie(),A=`headlessui-dialog-${p()}`,j=(0,r.useMemo)((()=>[{dialogState:x,close:k,setTitleId:S},I]),[x,I,k,S]),F=(0,r.useMemo)((()=>({open:0===x})),[x]),N={ref:h,id:A,role:"dialog","aria-modal":0===x||void 0,"aria-labelledby":I.titleId,"aria-describedby":M,onClick(e){e.stopPropagation()}},H=l;return r.createElement(ce,{type:"Dialog",element:v,onUpdate:(0,r.useCallback)(((e,t,n)=>{"Dialog"===t&&b(e,{0(){f.current.add(n),c((e=>e+1))},1(){f.current.add(n),c((e=>e-1))}})}),[])},r.createElement(X,{force:!0},r.createElement(ne,null,r.createElement(pe.Provider,{value:j},r.createElement(ne.Group,{target:v},r.createElement(X,{force:!1},r.createElement(D,{slot:F,name:"Dialog.Description"},y({props:{...H,...N},slot:F,defaultTag:"div",features:3,visible:E,name:"Dialog"}))))))))})),be=C((function(e,t){let[{dialogState:n,close:o}]=fe("Dialog.Overlay");return y({props:{...e,ref:m(t),id:`headlessui-dialog-overlay-${p()}`,"aria-hidden":!0,onClick:(0,r.useCallback)((e=>{if(e.target===e.currentTarget){if(E(e.currentTarget))return e.preventDefault();e.preventDefault(),e.stopPropagation(),o()}}),[o])},slot:(0,r.useMemo)((()=>({open:0===n})),[n]),defaultTag:"div",name:"Dialog.Overlay"})}));var ye=Object.assign(me,{Overlay:be,Title:function(e){let[{dialogState:t,setTitleId:n}]=fe("Dialog.Title"),o=`headlessui-dialog-title-${p()}`;(0,r.useEffect)((()=>(n(o),()=>n(null))),[o,n]);let a=(0,r.useMemo)((()=>({open:0===t})),[t]);return y({props:{...e,id:o},slot:a,defaultTag:"h2",name:"Dialog.Title"})},Description:ue}),he={0:e=>({...e,disclosureState:b(e.disclosureState,{0:1,1:0})}),1:e=>1===e.disclosureState?e:{...e,disclosureState:1},4:e=>!0===e.linkedPanel?e:{...e,linkedPanel:!0},5:e=>!1===e.linkedPanel?e:{...e,linkedPanel:!1},2:(e,t)=>e.buttonId===t.buttonId?e:{...e,buttonId:t.buttonId},3:(e,t)=>e.panelId===t.panelId?e:{...e,panelId:t.panelId}},Ce=(0,r.createContext)(null);function ge(e){let t=(0,r.useContext)(Ce);if(null===t){let t=new Error(`<${e} /> is missing a parent <${Oe.name} /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,ge),t}return t}Ce.displayName="DisclosureContext";var xe=(0,r.createContext)(null);function Ee(e){let t=(0,r.useContext)(xe);if(null===t){let t=new Error(`<${e} /> is missing a parent <${Oe.name} /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,Ee),t}return t}xe.displayName="DisclosureAPIContext";var we=(0,r.createContext)(null);function Ie(e,t){return b(t.type,he,e,t)}we.displayName="DisclosurePanelContext";var Re=r.Fragment;function Oe(e){let{defaultOpen:t=!1,...n}=e,o=`headlessui-disclosure-button-${p()}`,a=`headlessui-disclosure-panel-${p()}`,l=(0,r.useReducer)(Ie,{disclosureState:t?0:1,linkedPanel:!1,buttonId:o,panelId:a}),[{disclosureState:i},u]=l;(0,r.useEffect)((()=>u({type:2,buttonId:o})),[o,u]),(0,r.useEffect)((()=>u({type:3,panelId:a})),[a,u]);let s=(0,r.useCallback)((e=>{u({type:1});let t=e?e instanceof HTMLElement?e:e.current instanceof HTMLElement?e.current:document.getElementById(o):document.getElementById(o);null==t||t.focus()}),[u,o]),c=(0,r.useMemo)((()=>({close:s})),[s]),d=(0,r.useMemo)((()=>({open:0===i,close:s})),[i,s]);return r.createElement(Ce.Provider,{value:l},r.createElement(xe.Provider,{value:c},r.createElement(O,{value:b(i,{0:0,1:1})},y({props:n,slot:d,defaultTag:Re,name:"Disclosure"}))))}var ke=C((function(e,t){let[n,o]=ge("Disclosure.Button"),a=(0,r.useRef)(null),l=m(a,t),i=(0,r.useContext)(we),u=null!==i&&i===n.panelId,s=(0,r.useCallback)((e=>{var t;if(u){if(1===n.disclosureState)return;switch(e.key){case" ":case"Enter":e.preventDefault(),e.stopPropagation(),o({type:0}),null==(t=document.getElementById(n.buttonId))||t.focus()}}else switch(e.key){case" ":case"Enter":e.preventDefault(),e.stopPropagation(),o({type:0})}}),[o,u,n.disclosureState,n.buttonId]),c=(0,r.useCallback)((e=>{if(" "===e.key)e.preventDefault()}),[]),d=(0,r.useCallback)((t=>{var r;E(t.currentTarget)||e.disabled||(u?(o({type:0}),null==(r=document.getElementById(n.buttonId))||r.focus()):o({type:0}))}),[o,e.disabled,n.buttonId,u]),p=(0,r.useMemo)((()=>({open:0===n.disclosureState})),[n]),f=S(e,a);return y({props:{...e,...u?{ref:l,type:f,onKeyDown:s,onClick:d}:{ref:l,id:n.buttonId,type:f,"aria-expanded":e.disabled?void 0:0===n.disclosureState,"aria-controls":n.linkedPanel?n.panelId:void 0,onKeyDown:s,onKeyUp:c,onClick:d}},slot:p,defaultTag:"button",name:"Disclosure.Button"})})),Se=C((function(e,t){let[n,o]=ge("Disclosure.Panel"),{close:a}=Ee("Disclosure.Panel"),l=m(t,(()=>{n.linkedPanel||o({type:4})})),i=R(),u=null!==i?0===i:0===n.disclosureState;(0,r.useEffect)((()=>()=>o({type:5})),[o]),(0,r.useEffect)((()=>{var t;1===n.disclosureState&&(null==(t=e.unmount)||t)&&o({type:5})}),[n.disclosureState,e.unmount,o]);let s=(0,r.useMemo)((()=>({open:0===n.disclosureState,close:a})),[n,a]),c={ref:l,id:n.panelId},d=e;return r.createElement(we.Provider,{value:n.panelId},y({props:{...d,...c},slot:s,defaultTag:"div",features:3,visible:u,name:"Disclosure.Panel"}))}));Oe.Button=ke,Oe.Panel=Se;var Pe={1:e=>e.disabled||1===e.listboxState?e:{...e,activeOptionIndex:null,listboxState:1},0:e=>e.disabled||0===e.listboxState?e:{...e,listboxState:0},2:(e,t)=>e.disabled===t.disabled?e:{...e,disabled:t.disabled},3:(e,t)=>e.orientation===t.orientation?e:{...e,orientation:t.orientation},4(e,t){if(e.disabled||1===e.listboxState)return e;let n=x(t,{resolveItems:()=>e.options,resolveActiveIndex:()=>e.activeOptionIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.current.disabled});return""===e.searchQuery&&e.activeOptionIndex===n?e:{...e,searchQuery:"",activeOptionIndex:n}},5:(e,t)=>{if(e.disabled||1===e.listboxState)return e;let n=""!==e.searchQuery?0:1,r=e.searchQuery+t.value.toLowerCase(),o=(null!==e.activeOptionIndex?e.options.slice(e.activeOptionIndex+n).concat(e.options.slice(0,e.activeOptionIndex+n)):e.options).find((e=>{var t;return!e.dataRef.current.disabled&&(null==(t=e.dataRef.current.textValue)?void 0:t.startsWith(r))})),a=o?e.options.indexOf(o):-1;return-1===a||a===e.activeOptionIndex?{...e,searchQuery:r}:{...e,searchQuery:r,activeOptionIndex:a}},6:e=>e.disabled||1===e.listboxState||""===e.searchQuery?e:{...e,searchQuery:""},7:(e,t)=>{var n;let r=Array.from(null==(n=e.optionsRef.current)?void 0:n.querySelectorAll('[id^="headlessui-listbox-option-"]')).reduce(((e,t,n)=>Object.assign(e,{[t.id]:n})),{}),o=[...e.options,{id:t.id,dataRef:t.dataRef}].sort(((e,t)=>r[e.id]-r[t.id]));return{...e,options:o}},8:(e,t)=>{let n=e.options.slice(),r=null!==e.activeOptionIndex?n[e.activeOptionIndex]:null,o=n.findIndex((e=>e.id===t.id));return-1!==o&&n.splice(o,1),{...e,options:n,activeOptionIndex:o===e.activeOptionIndex||null===r?null:n.indexOf(r)}}},Le=(0,r.createContext)(null);function Te(e){let t=(0,r.useContext)(Le);if(null===t){let t=new Error(`<${e} /> is missing a parent <${Ae.name} /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,Te),t}return t}function Me(e,t){return b(t.type,Pe,e,t)}Le.displayName="ListboxContext";var De=r.Fragment;function Ae(e){let{value:t,onChange:n,disabled:o=!1,horizontal:a=!1,...l}=e,u=a?"horizontal":"vertical",s=(0,r.useReducer)(Me,{listboxState:1,propsRef:{current:{value:t,onChange:n}},labelRef:(0,r.createRef)(),buttonRef:(0,r.createRef)(),optionsRef:(0,r.createRef)(),disabled:o,orientation:u,options:[],searchQuery:"",activeOptionIndex:null}),[{listboxState:c,propsRef:d,optionsRef:p,buttonRef:f},v]=s;i((()=>{d.current.value=t}),[t,d]),i((()=>{d.current.onChange=n}),[n,d]),i((()=>v({type:2,disabled:o})),[o]),i((()=>v({type:3,orientation:u})),[u]),w("mousedown",(e=>{var t,n,r;let o=e.target;0===c&&((null==(t=f.current)?void 0:t.contains(o))||(null==(n=p.current)?void 0:n.contains(o))||(v({type:1}),K(o,1)||(e.preventDefault(),null==(r=f.current)||r.focus())))}));let m=(0,r.useMemo)((()=>({open:0===c,disabled:o})),[c,o]);return r.createElement(Le.Provider,{value:s},r.createElement(O,{value:b(c,{0:0,1:1})},y({props:l,slot:m,defaultTag:De,name:"Listbox"})))}var je=C((function(e,t){var n;let[o,a]=Te("Listbox.Button"),i=m(o.buttonRef,t),u=`headlessui-listbox-button-${p()}`,s=l(),c=(0,r.useCallback)((e=>{switch(e.key){case" ":case"Enter":case"ArrowDown":e.preventDefault(),a({type:0}),s.nextFrame((()=>{o.propsRef.current.value||a({type:4,focus:0})}));break;case"ArrowUp":e.preventDefault(),a({type:0}),s.nextFrame((()=>{o.propsRef.current.value||a({type:4,focus:3})}))}}),[a,o,s]),d=(0,r.useCallback)((e=>{if(" "===e.key)e.preventDefault()}),[]),f=(0,r.useCallback)((e=>{if(E(e.currentTarget))return e.preventDefault();0===o.listboxState?(a({type:1}),s.nextFrame((()=>{var e;return null==(e=o.buttonRef.current)?void 0:e.focus({preventScroll:!0})}))):(e.preventDefault(),a({type:0}))}),[a,s,o]),b=v((()=>{if(o.labelRef.current)return[o.labelRef.current.id,u].join(" ")}),[o.labelRef.current,u]),h=(0,r.useMemo)((()=>({open:0===o.listboxState,disabled:o.disabled})),[o]);return y({props:{...e,...{ref:i,id:u,type:S(e,o.buttonRef),"aria-haspopup":!0,"aria-controls":null==(n=o.optionsRef.current)?void 0:n.id,"aria-expanded":o.disabled?void 0:0===o.listboxState,"aria-labelledby":b,disabled:o.disabled,onKeyDown:c,onKeyUp:d,onClick:f}},slot:h,defaultTag:"button",name:"Listbox.Button"})}));var Fe=C((function(e,t){var n;let[o,u]=Te("Listbox.Options"),s=m(o.optionsRef,t),c=`headlessui-listbox-options-${p()}`,d=l(),f=l(),h=R(),C=null!==h?0===h:0===o.listboxState;i((()=>{let e=o.optionsRef.current;!e||0===o.listboxState&&e!==document.activeElement&&e.focus({preventScroll:!0})}),[o.listboxState,o.optionsRef]);let g=(0,r.useCallback)((e=>{switch(f.dispose(),e.key){case" ":if(""!==o.searchQuery)return e.preventDefault(),e.stopPropagation(),u({type:5,value:e.key});case"Enter":if(e.preventDefault(),e.stopPropagation(),u({type:1}),null!==o.activeOptionIndex){let{dataRef:e}=o.options[o.activeOptionIndex];o.propsRef.current.onChange(e.current.value)}a().nextFrame((()=>{var e;return null==(e=o.buttonRef.current)?void 0:e.focus({preventScroll:!0})}));break;case b(o.orientation,{vertical:"ArrowDown",horizontal:"ArrowRight"}):return e.preventDefault(),e.stopPropagation(),u({type:4,focus:2});case b(o.orientation,{vertical:"ArrowUp",horizontal:"ArrowLeft"}):return e.preventDefault(),e.stopPropagation(),u({type:4,focus:1});case"Home":case"PageUp":return e.preventDefault(),e.stopPropagation(),u({type:4,focus:0});case"End":case"PageDown":return e.preventDefault(),e.stopPropagation(),u({type:4,focus:3});case"Escape":return e.preventDefault(),e.stopPropagation(),u({type:1}),d.nextFrame((()=>{var e;return null==(e=o.buttonRef.current)?void 0:e.focus({preventScroll:!0})}));case"Tab":e.preventDefault(),e.stopPropagation();break;default:1===e.key.length&&(u({type:5,value:e.key}),f.setTimeout((()=>u({type:6})),350))}}),[d,u,f,o]),x=v((()=>{var e,t,n;return null!=(n=null==(e=o.labelRef.current)?void 0:e.id)?n:null==(t=o.buttonRef.current)?void 0:t.id}),[o.labelRef.current,o.buttonRef.current]),E=(0,r.useMemo)((()=>({open:0===o.listboxState})),[o]);return y({props:{...e,...{"aria-activedescendant":null===o.activeOptionIndex||null==(n=o.options[o.activeOptionIndex])?void 0:n.id,"aria-labelledby":x,"aria-orientation":o.orientation,id:c,onKeyDown:g,role:"listbox",tabIndex:0,ref:s}},slot:E,defaultTag:"ul",features:3,visible:C,name:"Listbox.Options"})}));Ae.Button=je,Ae.Label=function(e){let[t]=Te("Listbox.Label"),n=`headlessui-listbox-label-${p()}`,o=(0,r.useCallback)((()=>{var e;return null==(e=t.buttonRef.current)?void 0:e.focus({preventScroll:!0})}),[t.buttonRef]),a=(0,r.useMemo)((()=>({open:0===t.listboxState,disabled:t.disabled})),[t]);return y({props:{...e,...{ref:t.labelRef,id:n,onClick:o}},slot:a,defaultTag:"label",name:"Listbox.Label"})},Ae.Options=Fe,Ae.Option=function(e){let{disabled:t=!1,value:n,...o}=e,[l,u]=Te("Listbox.Option"),s=`headlessui-listbox-option-${p()}`,c=null!==l.activeOptionIndex&&l.options[l.activeOptionIndex].id===s,d=l.propsRef.current.value===n,f=(0,r.useRef)({disabled:t,value:n});i((()=>{f.current.disabled=t}),[f,t]),i((()=>{f.current.value=n}),[f,n]),i((()=>{var e,t;f.current.textValue=null==(t=null==(e=document.getElementById(s))?void 0:e.textContent)?void 0:t.toLowerCase()}),[f,s]);let v=(0,r.useCallback)((()=>l.propsRef.current.onChange(n)),[l.propsRef,n]);i((()=>(u({type:7,id:s,dataRef:f}),()=>u({type:8,id:s}))),[f,s]),i((()=>{var e,t;0===l.listboxState&&(!d||(u({type:4,focus:4,id:s}),null==(t=null==(e=document.getElementById(s))?void 0:e.focus)||t.call(e)))}),[l.listboxState]),i((()=>{if(0!==l.listboxState||!c)return;let e=a();return e.requestAnimationFrame((()=>{var e,t;null==(t=null==(e=document.getElementById(s))?void 0:e.scrollIntoView)||t.call(e,{block:"nearest"})})),e.dispose}),[s,c,l.listboxState,l.activeOptionIndex]);let m=(0,r.useCallback)((e=>{if(t)return e.preventDefault();v(),u({type:1}),a().nextFrame((()=>{var e;return null==(e=l.buttonRef.current)?void 0:e.focus({preventScroll:!0})}))}),[u,l.buttonRef,t,v]),b=(0,r.useCallback)((()=>{if(t)return u({type:4,focus:5});u({type:4,focus:4,id:s})}),[t,s,u]),h=(0,r.useCallback)((()=>{t||c||u({type:4,focus:4,id:s})}),[t,c,s,u]),C=(0,r.useCallback)((()=>{t||!c||u({type:4,focus:5})}),[t,c,u]),g=(0,r.useMemo)((()=>({active:c,selected:d,disabled:t})),[c,d,t]);return y({props:{...o,id:s,role:"option",tabIndex:!0===t?void 0:-1,"aria-disabled":!0===t||void 0,"aria-selected":!0===d||void 0,disabled:void 0,onClick:m,onFocus:b,onPointerMove:h,onMouseMove:h,onPointerLeave:C,onMouseLeave:C},slot:g,defaultTag:"li",name:"Listbox.Option"})};var Ne={1:e=>1===e.menuState?e:{...e,activeItemIndex:null,menuState:1},0:e=>0===e.menuState?e:{...e,menuState:0},2:(e,t)=>{let n=x(t,{resolveItems:()=>e.items,resolveActiveIndex:()=>e.activeItemIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.current.disabled});return""===e.searchQuery&&e.activeItemIndex===n?e:{...e,searchQuery:"",activeItemIndex:n}},3:(e,t)=>{let n=""!==e.searchQuery?0:1,r=e.searchQuery+t.value.toLowerCase(),o=(null!==e.activeItemIndex?e.items.slice(e.activeItemIndex+n).concat(e.items.slice(0,e.activeItemIndex+n)):e.items).find((e=>{var t;return(null==(t=e.dataRef.current.textValue)?void 0:t.startsWith(r))&&!e.dataRef.current.disabled})),a=o?e.items.indexOf(o):-1;return-1===a||a===e.activeItemIndex?{...e,searchQuery:r}:{...e,searchQuery:r,activeItemIndex:a}},4:e=>""===e.searchQuery?e:{...e,searchQuery:"",searchActiveItemIndex:null},5:(e,t)=>{var n;let r=Array.from(null==(n=e.itemsRef.current)?void 0:n.querySelectorAll('[id^="headlessui-menu-item-"]')).reduce(((e,t,n)=>Object.assign(e,{[t.id]:n})),{}),o=[...e.items,{id:t.id,dataRef:t.dataRef}].sort(((e,t)=>r[e.id]-r[t.id]));return{...e,items:o}},6:(e,t)=>{let n=e.items.slice(),r=null!==e.activeItemIndex?n[e.activeItemIndex]:null,o=n.findIndex((e=>e.id===t.id));return-1!==o&&n.splice(o,1),{...e,items:n,activeItemIndex:o===e.activeItemIndex||null===r?null:n.indexOf(r)}}},He=(0,r.createContext)(null);function Ve(e){let t=(0,r.useContext)(He);if(null===t){let t=new Error(`<${e} /> is missing a parent <${ze.name} /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,Ve),t}return t}function $e(e,t){return b(t.type,Ne,e,t)}He.displayName="MenuContext";var Be=r.Fragment;function ze(e){let t=(0,r.useReducer)($e,{menuState:1,buttonRef:(0,r.createRef)(),itemsRef:(0,r.createRef)(),items:[],searchQuery:"",activeItemIndex:null}),[{menuState:n,itemsRef:o,buttonRef:a},l]=t;w("mousedown",(e=>{var t,r,i;let u=e.target;0===n&&((null==(t=a.current)?void 0:t.contains(u))||(null==(r=o.current)?void 0:r.contains(u))||(l({type:1}),K(u,1)||(e.preventDefault(),null==(i=a.current)||i.focus())))}));let i=(0,r.useMemo)((()=>({open:0===n})),[n]);return r.createElement(He.Provider,{value:t},r.createElement(O,{value:b(n,{0:0,1:1})},y({props:e,slot:i,defaultTag:Be,name:"Menu"})))}var Ke=C((function(e,t){var n;let[o,a]=Ve("Menu.Button"),i=m(o.buttonRef,t),u=`headlessui-menu-button-${p()}`,s=l(),c=(0,r.useCallback)((e=>{switch(e.key){case" ":case"Enter":case"ArrowDown":e.preventDefault(),e.stopPropagation(),a({type:0}),s.nextFrame((()=>a({type:2,focus:0})));break;case"ArrowUp":e.preventDefault(),e.stopPropagation(),a({type:0}),s.nextFrame((()=>a({type:2,focus:3})))}}),[a,s]),d=(0,r.useCallback)((e=>{if(" "===e.key)e.preventDefault()}),[]),f=(0,r.useCallback)((t=>{if(E(t.currentTarget))return t.preventDefault();e.disabled||(0===o.menuState?(a({type:1}),s.nextFrame((()=>{var e;return null==(e=o.buttonRef.current)?void 0:e.focus({preventScroll:!0})}))):(t.preventDefault(),t.stopPropagation(),a({type:0})))}),[a,s,o,e.disabled]),v=(0,r.useMemo)((()=>({open:0===o.menuState})),[o]);return y({props:{...e,...{ref:i,id:u,type:S(e,o.buttonRef),"aria-haspopup":!0,"aria-controls":null==(n=o.itemsRef.current)?void 0:n.id,"aria-expanded":e.disabled?void 0:0===o.menuState,onKeyDown:c,onKeyUp:d,onClick:f}},slot:v,defaultTag:"button",name:"Menu.Button"})})),Ue=C((function(e,t){var n,o;let[i,u]=Ve("Menu.Items"),s=m(i.itemsRef,t),c=`headlessui-menu-items-${p()}`,d=l(),f=R(),v=null!==f?0===f:0===i.menuState;(0,r.useEffect)((()=>{let e=i.itemsRef.current;!e||0===i.menuState&&e!==document.activeElement&&e.focus({preventScroll:!0})}),[i.menuState,i.itemsRef]),P({container:i.itemsRef.current,enabled:0===i.menuState,accept:e=>"menuitem"===e.getAttribute("role")?NodeFilter.FILTER_REJECT:e.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT,walk(e){e.setAttribute("role","none")}});let b=(0,r.useCallback)((e=>{var t;switch(d.dispose(),e.key){case" ":if(""!==i.searchQuery)return e.preventDefault(),e.stopPropagation(),u({type:3,value:e.key});case"Enter":if(e.preventDefault(),e.stopPropagation(),u({type:1}),null!==i.activeItemIndex){let{id:e}=i.items[i.activeItemIndex];null==(t=document.getElementById(e))||t.click()}a().nextFrame((()=>{var e;return null==(e=i.buttonRef.current)?void 0:e.focus({preventScroll:!0})}));break;case"ArrowDown":return e.preventDefault(),e.stopPropagation(),u({type:2,focus:2});case"ArrowUp":return e.preventDefault(),e.stopPropagation(),u({type:2,focus:1});case"Home":case"PageUp":return e.preventDefault(),e.stopPropagation(),u({type:2,focus:0});case"End":case"PageDown":return e.preventDefault(),e.stopPropagation(),u({type:2,focus:3});case"Escape":e.preventDefault(),e.stopPropagation(),u({type:1}),a().nextFrame((()=>{var e;return null==(e=i.buttonRef.current)?void 0:e.focus({preventScroll:!0})}));break;case"Tab":e.preventDefault(),e.stopPropagation();break;default:1===e.key.length&&(u({type:3,value:e.key}),d.setTimeout((()=>u({type:4})),350))}}),[u,d,i]),h=(0,r.useCallback)((e=>{if(" "===e.key)e.preventDefault()}),[]),C=(0,r.useMemo)((()=>({open:0===i.menuState})),[i]);return y({props:{...e,...{"aria-activedescendant":null===i.activeItemIndex||null==(n=i.items[i.activeItemIndex])?void 0:n.id,"aria-labelledby":null==(o=i.buttonRef.current)?void 0:o.id,id:c,onKeyDown:b,onKeyUp:h,role:"menu",tabIndex:0,ref:s}},slot:C,defaultTag:"div",features:3,visible:v,name:"Menu.Items"})})),Ge=r.Fragment;ze.Button=Ke,ze.Items=Ue,ze.Item=function(e){let{disabled:t=!1,onClick:n,...o}=e,[l,u]=Ve("Menu.Item"),s=`headlessui-menu-item-${p()}`,c=null!==l.activeItemIndex&&l.items[l.activeItemIndex].id===s;i((()=>{if(0!==l.menuState||!c)return;let e=a();return e.requestAnimationFrame((()=>{var e,t;null==(t=null==(e=document.getElementById(s))?void 0:e.scrollIntoView)||t.call(e,{block:"nearest"})})),e.dispose}),[s,c,l.menuState,l.activeItemIndex]);let d=(0,r.useRef)({disabled:t});i((()=>{d.current.disabled=t}),[d,t]),i((()=>{var e,t;d.current.textValue=null==(t=null==(e=document.getElementById(s))?void 0:e.textContent)?void 0:t.toLowerCase()}),[d,s]),i((()=>(u({type:5,id:s,dataRef:d}),()=>u({type:6,id:s}))),[d,s]);let f=(0,r.useCallback)((e=>t?e.preventDefault():(u({type:1}),a().nextFrame((()=>{var e;return null==(e=l.buttonRef.current)?void 0:e.focus({preventScroll:!0})})),n?n(e):void 0)),[u,l.buttonRef,t,n]),v=(0,r.useCallback)((()=>{if(t)return u({type:2,focus:5});u({type:2,focus:4,id:s})}),[t,s,u]),m=(0,r.useCallback)((()=>{t||c||u({type:2,focus:4,id:s})}),[t,c,s,u]),b=(0,r.useCallback)((()=>{t||!c||u({type:2,focus:5})}),[t,c,u]),h=(0,r.useMemo)((()=>({active:c,disabled:t})),[c,t]);return y({props:{...o,id:s,role:"menuitem",tabIndex:!0===t?void 0:-1,"aria-disabled":!0===t||void 0,disabled:void 0,onClick:f,onFocus:v,onPointerMove:m,onMouseMove:m,onPointerLeave:b,onMouseLeave:b},slot:h,defaultTag:Ge,name:"Menu.Item"})};var _e={0:e=>({...e,popoverState:b(e.popoverState,{0:1,1:0})}),1:e=>1===e.popoverState?e:{...e,popoverState:1},2:(e,t)=>e.button===t.button?e:{...e,button:t.button},3:(e,t)=>e.buttonId===t.buttonId?e:{...e,buttonId:t.buttonId},4:(e,t)=>e.panel===t.panel?e:{...e,panel:t.panel},5:(e,t)=>e.panelId===t.panelId?e:{...e,panelId:t.panelId}},Qe=(0,r.createContext)(null);function Ze(e){let t=(0,r.useContext)(Qe);if(null===t){let t=new Error(`<${e} /> is missing a parent <${tt.name} /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,Ze),t}return t}Qe.displayName="PopoverContext";var qe=(0,r.createContext)(null);function We(e){let t=(0,r.useContext)(qe);if(null===t){let t=new Error(`<${e} /> is missing a parent <${tt.name} /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,We),t}return t}qe.displayName="PopoverAPIContext";var Ye=(0,r.createContext)(null);function Je(){return(0,r.useContext)(Ye)}Ye.displayName="PopoverGroupContext";var Xe=(0,r.createContext)(null);function et(e,t){return b(t.type,_e,e,t)}Xe.displayName="PopoverPanelContext";function tt(e){let t=`headlessui-popover-button-${p()}`,n=`headlessui-popover-panel-${p()}`,o=(0,r.useReducer)(et,{popoverState:1,button:null,buttonId:t,panel:null,panelId:n}),[{popoverState:a,button:l,panel:i},u]=o;(0,r.useEffect)((()=>u({type:3,buttonId:t})),[t,u]),(0,r.useEffect)((()=>u({type:5,panelId:n})),[n,u]);let s=(0,r.useMemo)((()=>({buttonId:t,panelId:n,close:()=>u({type:1})})),[t,n,u]),c=Je(),d=null==c?void 0:c.registerPopover,f=(0,r.useCallback)((()=>{var e;return null!=(e=null==c?void 0:c.isFocusWithinPopoverGroup())?e:(null==l?void 0:l.contains(document.activeElement))||(null==i?void 0:i.contains(document.activeElement))}),[c,l,i]);(0,r.useEffect)((()=>null==d?void 0:d(s)),[d,s]),w("focus",(()=>{0===a&&(f()||!l||!i||u({type:1}))}),!0),w("mousedown",(e=>{let t=e.target;0===a&&((null==l?void 0:l.contains(t))||(null==i?void 0:i.contains(t))||(u({type:1}),K(t,1)||(e.preventDefault(),null==l||l.focus())))}));let v=(0,r.useCallback)((e=>{u({type:1});let t=e?e instanceof HTMLElement?e:e.current instanceof HTMLElement?e.current:l:l;null==t||t.focus()}),[u,l]),m=(0,r.useMemo)((()=>({close:v})),[v]),h=(0,r.useMemo)((()=>({open:0===a,close:v})),[a,v]);return r.createElement(Qe.Provider,{value:o},r.createElement(qe.Provider,{value:m},r.createElement(O,{value:b(a,{0:0,1:1})},y({props:e,slot:h,defaultTag:"div",name:"Popover"}))))}var nt=C((function(e,t){let[n,o]=Ze("Popover.Button"),a=(0,r.useRef)(null),l=Je(),i=null==l?void 0:l.closeOthers,u=(0,r.useContext)(Xe),s=null!==u&&u===n.panelId,c=m(a,t,s?null:e=>o({type:2,button:e})),d=m(a,t),p=(0,r.useRef)(null),f=(0,r.useRef)("undefined"==typeof window?null:document.activeElement);w("focus",(()=>{f.current=p.current,p.current=document.activeElement}),!0);let v=(0,r.useCallback)((e=>{var t,r;if(s){if(1===n.popoverState)return;switch(e.key){case" ":case"Enter":e.preventDefault(),e.stopPropagation(),o({type:1}),null==(t=n.button)||t.focus()}}else switch(e.key){case" ":case"Enter":e.preventDefault(),e.stopPropagation(),1===n.popoverState&&(null==i||i(n.buttonId)),o({type:0});break;case"Escape":if(0!==n.popoverState)return null==i?void 0:i(n.buttonId);if(!a.current||!a.current.contains(document.activeElement))return;e.preventDefault(),e.stopPropagation(),o({type:1});break;case"Tab":if(0!==n.popoverState||!n.panel||!n.button)return;if(e.shiftKey){if(!f.current||(null==(r=n.button)?void 0:r.contains(f.current))||n.panel.contains(f.current))return;let t=z(),o=t.indexOf(f.current);if(t.indexOf(n.button)>o)return;e.preventDefault(),e.stopPropagation(),G(n.panel,8)}else e.preventDefault(),e.stopPropagation(),G(n.panel,1)}}),[o,n.popoverState,n.buttonId,n.button,n.panel,a,i,s]),b=(0,r.useCallback)((e=>{var t;if(!s&&(" "===e.key&&e.preventDefault(),0===n.popoverState&&n.panel&&n.button)&&"Tab"===e.key){if(!f.current||(null==(t=n.button)?void 0:t.contains(f.current))||n.panel.contains(f.current))return;let r=z(),o=r.indexOf(f.current);if(r.indexOf(n.button)>o)return;e.preventDefault(),e.stopPropagation(),G(n.panel,8)}}),[n.popoverState,n.panel,n.button,s]),h=(0,r.useCallback)((t=>{var r,a;E(t.currentTarget)||e.disabled||(s?(o({type:1}),null==(r=n.button)||r.focus()):(1===n.popoverState&&(null==i||i(n.buttonId)),null==(a=n.button)||a.focus(),o({type:0})))}),[o,n.button,n.popoverState,n.buttonId,e.disabled,i,s]),C=(0,r.useMemo)((()=>({open:0===n.popoverState})),[n]),g=S(e,a);return y({props:{...e,...s?{ref:d,type:g,onKeyDown:v,onClick:h}:{ref:c,id:n.buttonId,type:g,"aria-expanded":e.disabled?void 0:0===n.popoverState,"aria-controls":n.panel?n.panelId:void 0,onKeyDown:v,onKeyUp:b,onClick:h}},slot:C,defaultTag:"button",name:"Popover.Button"})})),rt=C((function(e,t){let[{popoverState:n},o]=Ze("Popover.Overlay"),a=m(t),l=`headlessui-popover-overlay-${p()}`,i=R(),u=null!==i?0===i:0===n;return y({props:{...e,ref:a,id:l,"aria-hidden":!0,onClick:(0,r.useCallback)((e=>{if(E(e.currentTarget))return e.preventDefault();o({type:1})}),[o])},slot:(0,r.useMemo)((()=>({open:0===n})),[n]),defaultTag:"div",features:3,visible:u,name:"Popover.Overlay"})})),ot=C((function(e,t){let{focus:n=!1,...o}=e,[a,l]=Ze("Popover.Panel"),{close:i}=We("Popover.Panel"),u=(0,r.useRef)(null),s=m(u,t,(e=>{l({type:4,panel:e})})),c=R(),d=null!==c?0===c:0===a.popoverState,p=(0,r.useCallback)((e=>{var t;if("Escape"===e.key){if(0!==a.popoverState||!u.current||!u.current.contains(document.activeElement))return;e.preventDefault(),e.stopPropagation(),l({type:1}),null==(t=a.button)||t.focus()}}),[a,u,l]);(0,r.useEffect)((()=>()=>l({type:4,panel:null})),[l]),(0,r.useEffect)((()=>{var t;e.static||1===a.popoverState&&(null==(t=e.unmount)||t)&&l({type:4,panel:null})}),[a.popoverState,e.unmount,e.static,l]),(0,r.useEffect)((()=>{if(!n||0!==a.popoverState||!u.current)return;let e=document.activeElement;u.current.contains(e)||G(u.current,1)}),[n,u,a.popoverState]),w("keydown",(e=>{var t;if(0!==a.popoverState||!u.current||"Tab"!==e.key||!document.activeElement||!u.current||!u.current.contains(document.activeElement))return;e.preventDefault();let n=G(u.current,e.shiftKey?2:4);if(3===n)return null==(t=a.button)?void 0:t.focus();if(1===n){if(!a.button)return;let e=z(),t=e.indexOf(a.button);0===G(e.splice(t+1).filter((e=>{var t;return!(null==(t=u.current)?void 0:t.contains(e))})),1)&&G(document.body,1)}})),w("focus",(()=>{var e;!n||0===a.popoverState&&(!u.current||(null==(e=u.current)?void 0:e.contains(document.activeElement))||l({type:1}))}),!0);let f=(0,r.useMemo)((()=>({open:0===a.popoverState,close:i})),[a,i]),v={ref:s,id:a.panelId,onKeyDown:p};return r.createElement(Xe.Provider,{value:a.panelId},y({props:{...o,...v},slot:f,defaultTag:"div",features:3,visible:d,name:"Popover.Panel"}))}));tt.Button=nt,tt.Overlay=rt,tt.Panel=ot,tt.Group=function(e){let t=(0,r.useRef)(null),[n,o]=(0,r.useState)([]),a=(0,r.useCallback)((e=>{o((t=>{let n=t.indexOf(e);if(-1!==n){let e=t.slice();return e.splice(n,1),e}return t}))}),[o]),l=(0,r.useCallback)((e=>(o((t=>[...t,e])),()=>a(e))),[o,a]),i=(0,r.useCallback)((()=>{var e;let r=document.activeElement;return!!(null==(e=t.current)?void 0:e.contains(r))||n.some((e=>{var t,n;return(null==(t=document.getElementById(e.buttonId))?void 0:t.contains(r))||(null==(n=document.getElementById(e.panelId))?void 0:n.contains(r))}))}),[t,n]),u=(0,r.useCallback)((e=>{for(let t of n)t.buttonId!==e&&t.close()}),[n]),s=(0,r.useMemo)((()=>({registerPopover:l,unregisterPopover:a,isFocusWithinPopoverGroup:i,closeOthers:u})),[l,a,i,u]),c=(0,r.useMemo)((()=>({})),[]),d={ref:t},p=e;return r.createElement(Ye.Provider,{value:s},y({props:{...p,...d},slot:c,defaultTag:"div",name:"Popover.Group"}))};var at=(0,r.createContext)(null);function lt(){let e=(0,r.useContext)(at);if(null===e){let e=new Error("You used a