- Display your favorite technologies, tools, or the tech stack your project uses with these fully customizable, good-looking cards on your GitHub README!
-
-
-
-
+ Show off your favorite technologies and tools by using these cards in your GitHub README.
## β‘ Quick Start
-The easiest way to start using these cards is to visit our website, where you can customize your card with a live preview.
-[https://github-readme-tech-stack.vercel.app](https://github-readme-tech-stack.vercel.app)
-
-
-
-
-
+The easiest way to get started is to visit our website, where you can customize and preview your card live.
+[https://github-readme-tech-stack.vercel.app](https://github-readme-tech-stack.vercel.app)
-## π§ Query parameters
-None of the fields are required. Every query parameter has a default value displayed below.
-
-| Parameter | Example | Default value | Description |
-|---------- |---------|---------------|------------ |
-| **title** | `?title=My%20Title` | My Tech Stack | The title of the card. `%20` can be used as a space. |
-| **theme** | `?theme=github_dark` | github | The theme of the card. You can browse between the themes [here](docs/THEMES.md). |
-| **align** | `?align=center` | left | The alignment of the badges. (`left`, `center`, `right`) |
-| **titleAlign** | `?align=center` | left | The alignment of the title. (`left`, `center`, `right`) |
-| **showBorder** | `?showBorder=false` | true | Display the border around the card or not. (`true`, `false`) |
-| **hideTitle** | `?hideTitle=true` | false | Display the title of the card or not. (`true`, `false`) |
-| **hideBg** | `?hideBg=true` | false | If true, sets the background to transparent. (`true`, `false`) |
-| **borderRadius** | `?borderRadius=12.5` | 4.5 | Number between 0 and 50. |
-| **fontFamily** | `?fontFamily=consolas` | Segoe UI | The font family of the title. If the specified family doesn't exist, the default is used. |
-| **fontSize** | `?fontSize=20` | 18 | The size of the title. Accepts a number between 15 and 30. |
-| **fontWeight** | `?fontWeight=normal` | semibold | The thickness of the title. (`thin`, `normal`, `semibold`, `bold`) |
-| **width** | `?width=500` | 495 | The width of the card. Accepts a valid number. |
-| **gap** | `?gap=15` | 10 | The gap between the badges. Accepts a number between 0 and 30. |
-| **lineHeight** | `?lineHeight=10` | 7 | The gap between the lines. Accepts a number between 0 and 30. |
-| **lineCount** | `?lineCount=2` | 1 | The number of lines you want to add to your card. |
-| **line{n}** | `?line1=html5,html5,auto` | - | The current line of the badge, where {n} is a number. *`(1 <= n <= lineCount)`* |
+
-## πͺ Themes
-These cards come with several built-in themes you can use. You can find all of them by clicking [here](docs/THEMES.md).
-If you have a cool new theme in mind, or add one for yourself and others, please check [#45](https://github.com/0l1v3rr/github-readme-tech-stack/issues/45)
+## β Why?
-### π Customizing a theme
-You can customize a theme using these query parameters.
-These parameters accept only valid hexadecimal colors, otherwise, they are not applied. Please use `%23` instead of `#`.
+As a developer, it's important to showcase your expertise in different technologies to potential collaborators and employers. With **github-readme-tech-stack**, you can easily create a visual representation of the technologies used in your GitHub repository and include it in your **profile README**. This can help you stand out and attract the attention of others who are looking for developers with specific skill sets.
-> **Warning**
-> If the `?theme=` parameter is specified, any of these color customizations will override the theme's values.
+The images are fully customizable, so you can choose the technologies you want to showcase and even adjust the colors, icons, and the alignment to match your personal brand.
-| Parameter | Example | Description |
-|-----------|---------|-------------|
-| **bg** | `?bg=%2383324c` | The color of the background. |
-| **border** | `?border=%232da7c7` | The color of the border. |
-| **badge** | `?badge=%2383324c` | The color of the badges. |
-| **titleColor** | `?titleColor=%232da7c7` | The color of the title. |
+Personally, I've always wanted to show off my skills in a clean and modern way. I could do that with just the badges, but they didn't match the style of [github-readme-streak-stats](https://github.com/DenverCoder1/github-readme-streak-stats) and [github-readme-stats](https://github.com/anuraghazra/github-readme-stats). With **github-readme-tech-stack**, that's no longer a problem, it naturally matches those cards!
-## β Important
-- We suggest you not put too many badges inside one card, because the loading time can be too slow, and it can overflow the 15s limit, which results in a card that's not displayed. The maximum amount of badges inside one card should be around 16. If you want to display more, do it in two or three cards.
-- If you use our [Demo Website](https://github-readme-tech-stack.vercel.app) to generate and customize your card, and it displays an empty screen, it's because your browser cached the previously deployed names of the JS bundles. In order to resolve this issue, clear your browser's cache or open the site in incognito mode.
-- The cards display [shields.io](https://shields.io/) badges. You can browse between the choosable icons [here](https://simpleicons.org/).
+## π Features
+
+- **Easy to use:** Creating a Tech Stack image is as simple as adding a markdown tag to your `profile README`.
+- **Demo website:** github-readme-tech-stack has a demo website, where you can build your own card with no effort.
+- **Customizable:** Choose the technologies you want to showcase and customize the colors and icons to match your personal brand.
+- **Custom icons:** You can even upload and use your **own** `svg` icons if they don't already exist.
+- **Multiple themes:** These cards come with several pre-made themes that you can use. However, if none of the themes suits your style, you can easily create your **own**!
+- **Badges:** github-readme-tech-stack uses [shields.io](https://shields.io/) badges and [simple-icons](https://simpleicons.org/) under the hood.
+- **Style:** github-readme-tech-stack is designed to match the style of [github-readme-streak-stats](https://github.com/DenverCoder1/github-readme-streak-stats), [github-readme-stats](https://github.com/anuraghazra/github-readme-stats) and many other cool tools.
-## π§ Tips
+## π§ Query parameters
-### πͺ’ Align the card in the markdown
-If you're using markdown, you may want to align your cards. There's an easy way to do it with the align attribute:
-```html
-
-```
+None of the fields are required. Each query parameter has a default value, which is listed below.
+
+
+What are the available query params?
+
+| Parameter | Example | Default value | Description |
+| ---------------- | ------------------------ | ------------- | ----------------------------------------------------------------------------------------- |
+| **title** | `title=My%20Title` | My Tech Stack | The title of the card. `%20` can be used as a space. |
+| **theme** | `theme=github_dark` | github | The theme of the card. You can browse between the themes [here](docs/THEMES.md). |
+| **align** | `align=center` | left | The alignment of the badges. (`left`, `center`, `right`) |
+| **titleAlign** | `align=center` | left | The alignment of the title. (`left`, `center`, `right`) |
+| **showBorder** | `showBorder=false` | true | Display the border around the card or not. (`true`, `false`) |
+| **hideTitle** | `hideTitle=true` | false | Display the title of the card or not. (`true`, `false`) |
+| **hideBg** | `hideBg=true` | false | If true, sets the background to transparent. (`true`, `false`) |
+| **borderRadius** | `borderRadius=12.5` | 4.5 | Number between 0 and 50. |
+| **fontFamily** | `fontFamily=consolas` | Segoe UI | The font family of the title. If the specified family doesn't exist, the default is used. |
+| **fontSize** | `fontSize=20` | 18 | The size of the title. Accepts a number between 15 and 30. |
+| **fontWeight** | `fontWeight=normal` | semibold | The thickness of the title. (`thin`, `normal`, `semibold`, `bold`) |
+| **width** | `width=500` | 495 | The width of the card. Accepts a valid number. |
+| **gap** | `gap=15` | 10 | The gap between the badges. Accepts a number between 0 and 30. |
+| **lineHeight** | `lineHeight=10` | 7 | The gap between the lines. Accepts a number between 0 and 30. |
+| **lineCount** | `lineCount=2` | 1 | The number of lines you want to add to your card. |
+| **line{n}** | `line1=html5,html5,auto` | - | The current line of the badge, where {n} is a number. _`(1 <= n <= lineCount)`_ |
+| **bg** | `bg=%2383324c` | - | The color of the background. |
+| **border** | `border=%232da7c7` | - | The color of the border. |
+| **badge** | `badge=%2383324c` | - | The color of the badges. |
+| **titleColor** | `titleColor=%232da7c7` | - | The color of the title. |
+
+
-### π GitHub's media feature
-You can use [GitHub's new feature](https://github.blog/changelog/2022-05-19-specify-theme-context-for-images-in-markdown-beta/) to specify whether to display images for light or dark mode users.
-
-```html
-
-
-
-
-
-```
+
-### π Adding custom SVG logo
-We support this using [Base64](https://en.wikipedia.org/wiki/Base64) format.
-**[\*](https://stackoverflow.com/questions/38985050/how-do-i-use-the-logo-option-in-shields-io-badges) Here's an easy 3-step guide:**
-1. Download the SVG and use one of the many online tools, e.g. [http://b64.io/](http://b64.io/), to encode it.
-2. Encode the Base64 string in [percent-encoding](https://en.wikipedia.org/wiki/Percent-encoding). Take the Base64 string and use one of the many online tools, e.g. [http://meyerweb.com/eric/tools/dencoder/](http://meyerweb.com/eric/tools/dencoder/), to encode the string.
-3. Finally, replace the first element of a badge (the `logoName`) with this string inside the URL. (`,typescript,2D79C7;`)
+## πͺ Themes
+
+These cards come with several built-in themes that you can use. You can find them all by clicking [here](docs/THEMES.md).
+You can also customize the themes. It's easier to do with the [demo website](#β‘-quick-start).
## βοΈ Building from source
-If you don't have NodeJS, [download and install it](https://nodejs.org/en/).
-Then open a terminal and type these commands:
-**Backend:**
```sh
# Clone the project:
git clone https://github.com/0l1v3rr/github-readme-tech-stack.git
@@ -154,31 +95,25 @@ cd github-readme-tech-stack
npm i
npm run prepare
-# Run the application:
+# Running the application:
npm run dev
-```
-**Frontend:**
-```sh
-cd client
-
-# Install the dependencies:
-npm i
-
-# Run the application:
-npm start
+# Running the storybook:
+npm run storybook
```
## π§βπ€βπ§ Contributing
-Every contribution is welcomed.
+
+All contributions are welcome.
You can find a contributing guideline [here](CONTRIBUTING.md).
-This project is licensed under the [MIT License](LICENSE).
+This project is released under the [MIT License](LICENSE).
## π‘ Inspiration
+
- [github-readme-streak-stats](https://github.com/DenverCoder1/github-readme-streak-stats)
- [github-readme-stats](https://github.com/anuraghazra/github-readme-stats)
- [github-profile-summary-cards](https://github.com/vn7n24fzkq/github-profile-summary-cards)
diff --git a/SECURITY.md b/SECURITY.md
index 4e0c2fb9..8f2c3834 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -4,10 +4,8 @@
| Version | Supported |
| ------- | ------------------ |
-| 1.3.x | :white_check_mark: |
-| 1.2.x | :white_check_mark: |
-| 1.1.x | :white_check_mark: |
-| < 1.1.0 | :x: |
+| 2.x.x | :white_check_mark: |
+| 1.x.x | :x: |
## Reporting a Vulnerability
diff --git a/client/.gitignore b/client/.gitignore
deleted file mode 100644
index 89967363..00000000
--- a/client/.gitignore
+++ /dev/null
@@ -1,20 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-
-# testing
-/coverage
-
-# misc
-.DS_Store
-.env.local
-.env.development.local
-.env.test.local
-.env.production.local
-
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
diff --git a/client/build/asset-manifest.json b/client/build/asset-manifest.json
deleted file mode 100644
index 6d724785..00000000
--- a/client/build/asset-manifest.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "files": {
- "main.css": "/static/css/main.92a0c7f7.css",
- "main.js": "/static/js/main.dce67da4.js",
- "index.html": "/index.html",
- "main.92a0c7f7.css.map": "/static/css/main.92a0c7f7.css.map",
- "main.dce67da4.js.map": "/static/js/main.dce67da4.js.map"
- },
- "entrypoints": [
- "static/css/main.92a0c7f7.css",
- "static/js/main.dce67da4.js"
- ]
-}
\ No newline at end of file
diff --git a/client/build/favicon.ico b/client/build/favicon.ico
deleted file mode 100644
index a11777cc..00000000
Binary files a/client/build/favicon.ico and /dev/null differ
diff --git a/client/build/index.html b/client/build/index.html
deleted file mode 100644
index eb8ebe24..00000000
--- a/client/build/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-GitHub Readme Tech Stack
\ No newline at end of file
diff --git a/client/build/robots.txt b/client/build/robots.txt
deleted file mode 100644
index e9e57dc4..00000000
--- a/client/build/robots.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# https://www.robotstxt.org/robotstxt.html
-User-agent: *
-Disallow:
diff --git a/client/build/static/css/main.92a0c7f7.css b/client/build/static/css/main.92a0c7f7.css
deleted file mode 100644
index 18ef6024..00000000
--- a/client/build/static/css/main.92a0c7f7.css
+++ /dev/null
@@ -1,4 +0,0 @@
-/*
-! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com
-*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}::-webkit-scrollbar{height:.75rem;width:.75rem}::-webkit-scrollbar-track{--tw-bg-opacity:1;background-color:rgb(33 38 45/var(--tw-bg-opacity))}::-webkit-scrollbar-thumb{--tw-bg-opacity:1;background-clip:content-box;background-color:rgb(54 59 66/var(--tw-bg-opacity));border:3px solid transparent;border-radius:.375rem;transition-duration:.15s;-webkit-transition-property:all;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}body{--tw-bg-opacity:1;background-color:rgb(13 17 23/var(--tw-bg-opacity))}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.left-1\/2{left:50%}.-top-7{top:-1.75rem}.top-16{top:4rem}.left-0{left:0}.top-0{top:0}.top-1\/2{top:50%}.right-5{right:1.25rem}.z-50{z-index:50}.z-20{z-index:20}.z-30{z-index:30}.z-10{z-index:10}.m-4{margin:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-4{margin-bottom:1rem;margin-top:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-bottom:.5rem;margin-top:.5rem}.my-3{margin-bottom:.75rem;margin-top:.75rem}.mt-6{margin-top:1.5rem}.mt-5{margin-top:1.25rem}.mt-4{margin-top:1rem}.mt-2{margin-top:.5rem}.ml-auto{margin-left:auto}.mb-1{margin-bottom:.25rem}.mt-1{margin-top:.25rem}.block{display:block}.flex{display:flex}.hidden{display:none}.h-\[\.8px\]{height:.8px}.h-8{height:2rem}.h-4{height:1rem}.h-fit{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.h-screen{height:100vh}.max-h-48{max-height:12rem}.max-h-\[95vh\]{max-height:95vh}.min-h-screen{min-height:100vh}.w-full{width:100%}.w-\[95\%\]{width:95%}.w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.w-10{width:2.5rem}.w-4{width:1rem}.w-screen{width:100vw}.min-w-\[10rem\]{min-width:10rem}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.translate-y-1\/4{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1\/4{--tw-translate-y:25%}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.scale-100{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-0{--tw-scale-x:0;--tw-scale-y:0}.scale-0,.scale-75{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-75{--tw-scale-x:.75;--tw-scale-y:.75}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.list-none{list-style-type:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-evenly{justify-content:space-evenly}.gap-4{gap:1rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-1{gap:.25rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.rounded-md{border-radius:.375rem}.rounded-full{border-radius:9999px}.rounded-2xl{border-radius:1rem}.rounded-tl-md{border-top-left-radius:.375rem}.rounded-bl-md{border-bottom-left-radius:.375rem}.rounded-tr-md{border-top-right-radius:.375rem}.rounded-br-md{border-bottom-right-radius:.375rem}.border{border-width:1px}.border-\[\.25em\]{border-width:.25em}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-gh-border{--tw-border-opacity:1;border-color:rgb(48 54 61/var(--tw-border-opacity))}.border-gh-button-border{--tw-border-opacity:1;border-color:rgb(54 59 66/var(--tw-border-opacity))}.border-gh-green-dark{--tw-border-opacity:1;border-color:rgb(29 89 39/var(--tw-border-opacity))}.border-gh-green-active{--tw-border-opacity:1;border-color:rgb(46 160 67/var(--tw-border-opacity))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.border-gh-bg-secondary{--tw-border-opacity:1;border-color:rgb(22 27 34/var(--tw-border-opacity))}.border-gh-button-border-active{--tw-border-opacity:1;border-color:rgb(139 148 158/var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-gh-border-dark{--tw-border-opacity:1;border-color:rgb(33 38 45/var(--tw-border-opacity))}.border-t-gh-text-secondary{--tw-border-opacity:1;border-top-color:rgb(139 148 158/var(--tw-border-opacity))}.bg-gh-bg{--tw-bg-opacity:1;background-color:rgb(13 17 23/var(--tw-bg-opacity))}.bg-gh-border{--tw-bg-opacity:1;background-color:rgb(48 54 61/var(--tw-bg-opacity))}.bg-gh-button{--tw-bg-opacity:1;background-color:rgb(33 38 45/var(--tw-bg-opacity))}.bg-gh-button-active{--tw-bg-opacity:1;background-color:rgb(48 54 61/var(--tw-bg-opacity))}.bg-gh-green{--tw-bg-opacity:1;background-color:rgb(35 134 54/var(--tw-bg-opacity))}.bg-gh-green-dark{--tw-bg-opacity:1;background-color:rgb(29 89 39/var(--tw-bg-opacity))}.bg-gh-bg-secondary{--tw-bg-opacity:1;background-color:rgb(22 27 34/var(--tw-bg-opacity))}.fill-gh-text-secondary{fill:#8b949e}.p-2{padding:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-\[\.45rem\]{padding-bottom:.45rem;padding-top:.45rem}.py-\[\.145rem\]{padding-bottom:.145rem;padding-top:.145rem}.py-\[\.417rem\]{padding-bottom:.417rem;padding-top:.417rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.pb-5{padding-bottom:1.25rem}.pb-2{padding-bottom:.5rem}.pb-1{padding-bottom:.25rem}.pt-\[\.16rem\]{padding-top:.16rem}.pl-\[1\.85rem\]{padding-left:1.85rem}.text-center{text-align:center}.font-dejavu{font-family:DejaVu Sans,sans-serif}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-sm{font-size:.875rem;line-height:1.25rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-\[\.8rem\]{font-size:.8rem}.text-base{font-size:1rem;line-height:1.5rem}.text-\[\.7rem\]{font-size:.7rem}.text-\[\.75rem\]{font-size:.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.font-semibold{font-weight:600}.italic{font-style:italic}.leading-none{line-height:1}.tracking-wider{letter-spacing:.05em}.text-gh-yellow{--tw-text-opacity:1;color:rgb(227 179 65/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-gh-text{--tw-text-opacity:1;color:rgb(190 209 217/var(--tw-text-opacity))}.text-gh-text-secondary{--tw-text-opacity:1;color:rgb(139 148 158/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-gh-blue{--tw-text-opacity:1;color:rgb(88 166 255/var(--tw-text-opacity))}.text-gh-border{--tw-text-opacity:1;color:rgb(48 54 61/var(--tw-text-opacity))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.text-gh-green-active{--tw-text-opacity:1;color:rgb(46 160 67/var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.shadow-2xl,.shadow-xl{box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-3xl{--tw-shadow:0 0 14px 0 rgba(0,0,0,.6);--tw-shadow-colored:0 0 14px 0 var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{-webkit-filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-150,.transition-all{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-75{transition-duration:75ms}.color-input{-webkit-appearance:none;appearance:none}.color-input::-webkit-color-swatch{border-radius:.125rem;border-width:0}.color-input::-moz-color-swatch{border-radius:.125rem;border-width:0}.placeholder\:text-gh-text-secondary::-webkit-input-placeholder{--tw-text-opacity:1;color:rgb(139 148 158/var(--tw-text-opacity))}.placeholder\:text-gh-text-secondary::placeholder{--tw-text-opacity:1;color:rgb(139 148 158/var(--tw-text-opacity))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:top-full:before{content:var(--tw-content);top:100%}.before\:left-1\/2:before{content:var(--tw-content);left:50%}.before\:h-2:before{content:var(--tw-content);height:.5rem}.before\:w-2:before{content:var(--tw-content);width:.5rem}.before\:-translate-x-1\/2:before{--tw-translate-x:-50%}.before\:-translate-x-1\/2:before,.before\:-translate-y-1\/2:before{content:var(--tw-content);-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.before\:-translate-y-1\/2:before{--tw-translate-y:-50%}.before\:rotate-45:before{--tw-rotate:45deg;content:var(--tw-content);-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.before\:border-b:before{border-bottom-width:1px;content:var(--tw-content)}.before\:border-r:before{border-right-width:1px;content:var(--tw-content)}.before\:border-solid:before{border-style:solid;content:var(--tw-content)}.before\:border-gh-border:before{--tw-border-opacity:1;border-color:rgb(48 54 61/var(--tw-border-opacity));content:var(--tw-content)}.before\:bg-gh-bg-secondary:before{--tw-bg-opacity:1;background-color:rgb(22 27 34/var(--tw-bg-opacity));content:var(--tw-content)}.before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.hover\:border-gh-button-border-active:hover{--tw-border-opacity:1;border-color:rgb(139 148 158/var(--tw-border-opacity))}.hover\:border-gh-red:hover{--tw-border-opacity:1;border-color:rgb(245 97 64/var(--tw-border-opacity))}.hover\:border-gh-green-active:hover{--tw-border-opacity:1;border-color:rgb(46 160 67/var(--tw-border-opacity))}.hover\:bg-gh-button-active:hover{--tw-bg-opacity:1;background-color:rgb(48 54 61/var(--tw-bg-opacity))}.hover\:bg-gh-green-active:hover{--tw-bg-opacity:1;background-color:rgb(46 160 67/var(--tw-bg-opacity))}.hover\:bg-gh-red:hover{--tw-bg-opacity:1;background-color:rgb(245 97 64/var(--tw-bg-opacity))}.hover\:bg-gh-bg-secondary:hover{--tw-bg-opacity:1;background-color:rgb(22 27 34/var(--tw-bg-opacity))}.hover\:bg-gh-button:hover{--tw-bg-opacity:1;background-color:rgb(33 38 45/var(--tw-bg-opacity))}.hover\:text-gh-text:hover{--tw-text-opacity:1;color:rgb(190 209 217/var(--tw-text-opacity))}.hover\:text-gh-blue:hover{--tw-text-opacity:1;color:rgb(88 166 255/var(--tw-text-opacity))}.hover\:text-gh-red-active:hover{--tw-text-opacity:1;color:rgb(247 129 102/var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\:text-green-400:hover{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.active\:border-gh-blue:active,.focus\:border-gh-blue:focus{--tw-border-opacity:1;border-color:rgb(88 166 255/var(--tw-border-opacity))}.group:hover .group-hover\:scale-100{--tw-scale-x:1;--tw-scale-y:1;-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:640px){.sm\:w-\[60\%\]{width:60%}}@media (min-width:768px){.md\:mx-32{margin-left:8rem;margin-right:8rem}.md\:block{display:block}.md\:flex{display:flex}.md\:w-\[50\%\]{width:50%}}@media (min-width:1024px){.lg\:mx-36{margin-left:9rem;margin-right:9rem}.lg\:w-1\/2{width:50%}.lg\:w-\[40\%\]{width:40%}.lg\:flex-row{flex-direction:row}}
-/*# sourceMappingURL=main.92a0c7f7.css.map*/
\ No newline at end of file
diff --git a/client/build/static/css/main.92a0c7f7.css.map b/client/build/static/css/main.92a0c7f7.css.map
deleted file mode 100644
index 2d9510f9..00000000
--- a/client/build/static/css/main.92a0c7f7.css.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"static/css/main.92a0c7f7.css","mappings":"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","sources":["index.css"],"sourcesContent":["@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n@layer base {\n *::-webkit-scrollbar {\n @apply w-[.75rem] h-[.75rem];\n }\n\n *::-webkit-scrollbar-track {\n @apply bg-gh-button;\n }\n\n *::-webkit-scrollbar-thumb {\n @apply bg-gh-button-border rounded-md transition-all border-[3px] \n border-solid border-transparent bg-clip-content;\n }\n\n body {\n @apply bg-gh-bg;\n }\n}\n\n@layer utilities {\n .color-input {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n }\n .color-input::-webkit-color-swatch {\n @apply border-0 rounded-sm;\n }\n .color-input::-moz-color-swatch {\n @apply border-0 rounded-sm;\n }\n}\n"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/client/build/static/js/main.dce67da4.js b/client/build/static/js/main.dce67da4.js
deleted file mode 100644
index a36947c3..00000000
--- a/client/build/static/js/main.dce67da4.js
+++ /dev/null
@@ -1,3 +0,0 @@
-/*! For license information please see main.dce67da4.js.LICENSE.txt */
-!function(){var e={472:function(e){e.exports="object"==typeof self?self.FormData:window.FormData},867:function(e,t,n){"use strict";var r=n(707),a=o(Error);function o(e){return t.displayName=e.displayName||e.name,t;function t(t){return t&&(t=r.apply(null,arguments)),new e(t)}}e.exports=a,a.eval=o(EvalError),a.range=o(RangeError),a.reference=o(ReferenceError),a.syntax=o(SyntaxError),a.type=o(TypeError),a.uri=o(URIError),a.create=o},707:function(e){!function(){var t;function n(e){for(var t,n,r,a,o=1,l=[].slice.call(arguments),i=0,u=e.length,s="",c=!1,d=!1,f=function(){return l[o++]},p=function(){for(var n="";/\d/.test(e[i]);)n+=e[i++],t=e[i];return n.length>0?parseInt(n):null};i/g,">").replace(/"/g,""").replace(/'/g,"'")}function h(e){var t=Object.create(null);for(var n in e)t[n]=e[n];for(var r=arguments.length,a=new Array(r>1?r-1:0),o=1;o")}},{key:"value",value:function(){return this.buffer}},{key:"span",value:function(e){this.buffer+='')}}]),e}(),v=function(e){"use strict";o(n,e);var t=l(n);function n(e){var r;return i(this,n),(r=t.call(this)).options=e,r}return u(n,[{key:"addKeyword",value:function(e,t){""!==e&&(this.openNode(t),this.addText(e),this.closeNode())}},{key:"addText",value:function(e){""!==e&&this.add(e)}},{key:"addSublanguage",value:function(e,t){var n=e.root;n.kind=t,n.sublanguage=!0,this.add(n)}},{key:"toHTML",value:function(){return new m(this,this.options).value()}},{key:"finalize",value:function(){return!0}}]),n}(function(){"use strict";function e(){i(this,e),this.rootNode={children:[]},this.stack=[this.rootNode]}return u(e,[{key:"top",get:function(){return this.stack[this.stack.length-1]}},{key:"root",get:function(){return this.rootNode}},{key:"add",value:function(e){this.top.children.push(e)}},{key:"openNode",value:function(e){var t={kind:e,children:[]};this.add(t),this.stack.push(t)}},{key:"closeNode",value:function(){if(this.stack.length>1)return this.stack.pop()}},{key:"closeAllNodes",value:function(){for(;this.closeNode(););}},{key:"toJSON",value:function(){return JSON.stringify(this.rootNode,null,4)}},{key:"walk",value:function(e){return this.constructor._walk(e,this.rootNode)}}],[{key:"_walk",value:function(e,t){var n=this;return"string"===typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach((function(t){return n._walk(e,t)})),e.closeNode(t)),e}},{key:"_collapse",value:function(t){"string"!==typeof t&&t.children&&(t.children.every((function(e){return"string"===typeof e}))?t.children=[t.children.join("")]:t.children.forEach((function(t){e._collapse(t)})))}}]),e}());function b(e){return e?"string"===typeof e?e:e.source:null}function y(){for(var e=arguments.length,t=new Array(e),n=0;n2&&void 0!==arguments[2]?arguments[2]:{},r=h({className:"comment",begin:e,end:t,contains:[]},n);return r.contains.push(P),r.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),r},L=R("//","$"),T=R("/\\*","\\*/"),z=R("#","$"),M={className:"number",begin:E,relevance:0},A={className:"number",begin:N,relevance:0},D={className:"number",begin:C,relevance:0},I={className:"number",begin:E+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},B={begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[j,{begin:/\[/,end:/\]/,relevance:0,contains:[j]}]}]},F={className:"title",begin:k,relevance:0},U={className:"title",begin:S,relevance:0},V={begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},H=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:k,UNDERSCORE_IDENT_RE:S,NUMBER_RE:E,C_NUMBER_RE:N,BINARY_NUMBER_RE:C,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=/^#![ ]*\//;return e.binary&&(e.begin=y(t,/.*\b/,e.binary,/\b.*/)),h({className:"meta",begin:t,end:/$/,relevance:0,"on:begin":function(e,t){0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:j,APOS_STRING_MODE:_,QUOTE_STRING_MODE:O,PHRASAL_WORDS_MODE:P,COMMENT:R,C_LINE_COMMENT_MODE:L,C_BLOCK_COMMENT_MODE:T,HASH_COMMENT_MODE:z,NUMBER_MODE:M,C_NUMBER_MODE:A,BINARY_NUMBER_MODE:D,CSS_NUMBER_MODE:I,REGEXP_MODE:B,TITLE_MODE:F,UNDERSCORE_TITLE_MODE:U,METHOD_GUARD:V,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":function(e,t){t.data._beginMatch=e[1]},"on:end":function(e,t){t.data._beginMatch!==e[1]&&t.ignoreMatch()}})}});function W(e,t){"."===e.input[e.index-1]&&t.ignoreMatch()}function $(e,t){t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=W,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function Q(e,t){Array.isArray(e.illegal)&&(e.illegal=x.apply(void 0,a(e.illegal)))}function q(e,t){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function K(e,t){void 0===e.relevance&&(e.relevance=1)}var G=["of","and","for","in","not","or","if","then","parent","list","value"],X="keyword";function J(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:X,r={};return"string"===typeof e?a(n,e.split(" ")):Array.isArray(e)?a(n,e):Object.keys(e).forEach((function(n){Object.assign(r,J(e[n],t,n))})),r;function a(e,n){t&&(n=n.map((function(e){return e.toLowerCase()}))),n.forEach((function(t){var n=t.split("|");r[n[0]]=[e,Y(n[0],n[1])]}))}}function Y(e,t){return t?Number(t):function(e){return G.includes(e.toLowerCase())}(e)?0:1}function Z(e,t){t.plugins;function n(t,n){return new RegExp(b(t),"m"+(e.case_insensitive?"i":"")+(n?"g":""))}var o=function(){"use strict";function e(){i(this,e),this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}return u(e,[{key:"addRule",value:function(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=function(e){return new RegExp(e.toString()+"|").exec("").length-1}(e)+1}},{key:"compile",value:function(){0===this.regexes.length&&(this.exec=function(){return null});var e=this.regexes.map((function(e){return e[1]}));this.matcherRe=n(function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"|",n=0;return e.map((function(e){for(var t=n+=1,r=b(e),a="";r.length>0;){var o=w.exec(r);if(!o){a+=r;break}a+=r.substring(0,o.index),r=r.substring(o.index+o[0].length),"\\"===o[0][0]&&o[1]?a+="\\"+String(Number(o[1])+t):(a+=o[0],"("===o[0]&&n++)}return a})).map((function(e){return"(".concat(e,")")})).join(t)}(e),!0),this.lastIndex=0}},{key:"exec",value:function(e){this.matcherRe.lastIndex=this.lastIndex;var t=this.matcherRe.exec(e);if(!t)return null;var n=t.findIndex((function(e,t){return t>0&&void 0!==e})),r=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,r)}}]),e}(),l=function(){"use strict";function e(){i(this,e),this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}return u(e,[{key:"getMatcher",value:function(e){if(this.multiRegexes[e])return this.multiRegexes[e];var t=new o;return this.rules.slice(e).forEach((function(e){var n=r(e,2),a=n[0],o=n[1];return t.addRule(a,o)})),t.compile(),this.multiRegexes[e]=t,t}},{key:"resumingScanAtSamePosition",value:function(){return 0!==this.regexIndex}},{key:"considerAll",value:function(){this.regexIndex=0}},{key:"addRule",value:function(e,t){this.rules.push([e,t]),"begin"===t.type&&this.count++}},{key:"exec",value:function(e){var t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;var n=t.exec(e);if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{var r=this.getMatcher(0);r.lastIndex=this.lastIndex+1,n=r.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}]),e}();if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=h(e.classNameAliases||{}),function t(r,o){var i,u=r;if(r.isCompiled)return u;[q].forEach((function(e){return e(r,o)})),e.compilerExtensions.forEach((function(e){return e(r,o)})),r.__beforeBegin=null,[$,Q,K].forEach((function(e){return e(r,o)})),r.isCompiled=!0;var s=null;if("object"===typeof r.keywords&&(s=r.keywords.$pattern,delete r.keywords.$pattern),r.keywords&&(r.keywords=J(r.keywords,e.case_insensitive)),r.lexemes&&s)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return s=s||r.lexemes||/\w+/,u.keywordPatternRe=n(s,!0),o&&(r.begin||(r.begin=/\B|\b/),u.beginRe=n(r.begin),r.endSameAsBegin&&(r.end=r.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),r.end&&(u.endRe=n(r.end)),u.terminatorEnd=b(r.end)||"",r.endsWithParent&&o.terminatorEnd&&(u.terminatorEnd+=(r.end?"|":"")+o.terminatorEnd)),r.illegal&&(u.illegalRe=n(r.illegal)),r.contains||(r.contains=[]),r.contains=(i=[]).concat.apply(i,a(r.contains.map((function(e){return function(e){e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(t){return h(e,{variants:null},t)})));if(e.cachedVariants)return e.cachedVariants;if(ee(e))return h(e,{starts:e.starts?h(e.starts):null});if(Object.isFrozen(e))return h(e);return e}("self"===e?r:e)})))),r.contains.forEach((function(e){t(e,u)})),r.starts&&t(r.starts,o),u.matcher=function(e){var t=new l;return e.contains.forEach((function(e){return t.addRule(e.begin,{rule:e,type:"begin"})})),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t}(u),u}(e)}function ee(e){return!!e&&(e.endsWithParent||ee(e.starts))}function te(e){var t={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className:function(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted:function(){if(!this.autoDetect&&!e.getLanguage(this.language))return console.warn('The language "'.concat(this.language,'" you specified could not be found.')),this.unknownLanguage=!0,p(this.code);var t={};return this.autoDetect?(t=e.highlightAuto(this.code),this.detectedLanguage=t.language):(t=e.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),t.value},autoDetect:function(){return!this.language||(e=this.autodetect,Boolean(e||""===e));var e},ignoreIllegals:function(){return!0}},render:function(e){return e("pre",{},[e("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:t,VuePlugin:{install:function(e){e.component("highlightjs",t)}}}}var ne={"after:highlightElement":function(e){var t=e.el,n=e.result,r=e.text,a=ae(t);if(a.length){var o=document.createElement("div");o.innerHTML=n.value,n.value=function(e,t,n){var r=0,a="",o=[];function l(){return e.length&&t.length?e[0].offset!==t[0].offset?e[0].offset"}function u(e){a+=""+re(e)+">"}function s(e){("start"===e.event?i:u)(e.node)}for(;e.length||t.length;){var c=l();if(a+=p(n.substring(r,c[0].offset)),r=c[0].offset,c===e){o.reverse().forEach(u);do{s(c.splice(0,1)[0]),c=l()}while(c===e&&c.length&&c[0].offset===r);o.reverse().forEach(i)}else"start"===c[0].event?o.push(c[0].node):o.pop(),s(c.splice(0,1)[0])}return a+p(n.substr(r))}(a,ae(o),r)}}};function re(e){return e.nodeName.toLowerCase()}function ae(e){var t=[];return function e(n,r){for(var a=n.firstChild;a;a=a.nextSibling)3===a.nodeType?r+=a.nodeValue.length:1===a.nodeType&&(t.push({event:"start",offset:r,node:a}),r=e(a,r),re(a).match(/br|hr|img|input/)||t.push({event:"stop",offset:r,node:a}));return r}(e,0),t}var oe={},le=function(e){console.error(e)},ie=function(e){for(var t,n=arguments.length,r=new Array(n>1?n-1:0),a=1;a]+>|\t|)+|\n)/gm,i="Could not find the language '{}', did you forget to load/include a language module?",u={disableAutodetect:!0,name:"Plain text",contains:[]},s={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:v};function d(e){return s.noHighlightRe.test(e)}function p(e,t,n,r){var a="",o="";"object"===typeof t?(a=e,n=t.ignoreIllegals,o=t.language,r=void 0):(ue("10.7.0","highlight(lang, code, ...args) has been deprecated."),ue("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),o=e,a=t);var l={code:a,language:o};C("before:highlight",l);var i=l.result?l.result:h(l.language,l.code,n,r);return i.code=l.code,C("after:highlight",i),i}function h(e,n,l,u){function c(e,t){var n=k.case_insensitive?t[0].toLowerCase():t[0];return Object.prototype.hasOwnProperty.call(e.keywords,n)&&e.keywords[n]}function d(){null!=C.subLanguage?function(){if(""!==O){var e=null;if("string"===typeof C.subLanguage){if(!t[C.subLanguage])return void _.addText(O);e=h(C.subLanguage,O,!0,j[C.subLanguage]),j[C.subLanguage]=e.top}else e=g(O,C.subLanguage.length?C.subLanguage:null);C.relevance>0&&(P+=e.relevance),_.addSublanguage(e.emitter,e.language)}}():function(){if(C.keywords){var e=0;C.keywordPatternRe.lastIndex=0;for(var t=C.keywordPatternRe.exec(O),n="";t;){n+=O.substring(e,t.index);var a=c(C,t);if(a){var o=r(a,2),l=o[0],i=o[1];if(_.addText(n),n="",P+=i,l.startsWith("_"))n+=t[0];else{var u=k.classNameAliases[l]||l;_.addKeyword(t[0],u)}}else n+=t[0];e=C.keywordPatternRe.lastIndex,t=C.keywordPatternRe.exec(O)}n+=O.substr(e),_.addText(n)}else _.addText(O)}(),O=""}function p(e){return e.className&&_.openNode(k.classNameAliases[e.className]||e.className),C=Object.create(e,{parent:{value:C}})}function m(e,t,n){var r=function(e,t){var n=e&&e.exec(t);return n&&0===n.index}(e.endRe,n);if(r){if(e["on:end"]){var a=new f(e);e["on:end"](t,a),a.isMatchIgnored&&(r=!1)}if(r){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return m(e.parent,t,n)}function v(e){return 0===C.matcher.regexIndex?(O+=e[0],1):(T=!0,0)}function b(e){for(var t=e[0],n=e.rule,r=new f(n),a=0,o=[n.__beforeBegin,n["on:begin"]];a")+'"');throw u.mode=C,u}if("end"===r.type){var s=y(r);if(s!==de)return s}if("illegal"===r.type&&""===a)return 1;if(L>1e5&&L>3*r.index)throw new Error("potential infinite loop, way more iterations than matches");return O+=a,a.length}var k=S(e);if(!k)throw le(i.replace("{}",e)),new Error('Unknown language: "'+e+'"');var E=Z(k,{plugins:a}),N="",C=u||E,j={},_=new s.__emitter(s);!function(){for(var e=[],t=C;t!==k;t=t.parent)t.className&&e.unshift(t.className);e.forEach((function(e){return _.openNode(e)}))}();var O="",P=0,R=0,L=0,T=!1;try{for(C.matcher.considerAll();;){L++,T?T=!1:C.matcher.considerAll(),C.matcher.lastIndex=R;var z=C.matcher.exec(n);if(!z)break;var M=w(n.substring(R,z.index),z);R=z.index+M}return w(n.substr(R)),_.closeAllNodes(),_.finalize(),N=_.toHTML(),{relevance:Math.floor(P),value:N,language:e,illegal:!1,emitter:_,top:C}}catch(A){if(A.message&&A.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:A.message,context:n.slice(R-100,R+100),mode:A.mode},sofar:N,relevance:0,value:se(n),emitter:_};if(o)return{illegal:!1,relevance:0,value:se(n),emitter:_,language:e,top:C,errorRaised:A};throw A}}function g(e,n){n=n||s.languages||Object.keys(t);var a=function(e){var t={relevance:0,emitter:new s.__emitter(s),value:se(e),illegal:!1,top:u};return t.emitter.addText(e),t}(e),o=n.filter(S).filter(N).map((function(t){return h(t,e,!1)}));o.unshift(a);var l=o.sort((function(e,t){if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(S(e.language).supersetOf===t.language)return 1;if(S(t.language).supersetOf===e.language)return-1}return 0})),i=r(l,2),c=i[0],d=i[1],f=c;return f.second_best=d,f}var m={"before:highlightElement":function(e){var t=e.el;s.useBR&&(t.innerHTML=t.innerHTML.replace(/\n/g,"").replace(/ /g,"\n"))},"after:highlightElement":function(e){var t=e.result;s.useBR&&(t.value=t.value.replace(/\n/g," "))}},b=/^(<[^>]+>|\t)+/gm,y={"after:highlightElement":function(e){var t=e.result;s.tabReplace&&(t.value=t.value.replace(b,(function(e){return e.replace(/\t/g,s.tabReplace)})))}};function x(e){var t=function(e){var t=e.className+" ";t+=e.parentNode?e.parentNode.className:"";var n=s.languageDetectRe.exec(t);if(n){var r=S(n[1]);return r||(ie(i.replace("{}",n[1])),ie("Falling back to no-highlight mode for this block.",e)),r?n[1]:"no-highlight"}return t.split(/\s+/).find((function(e){return d(e)||S(e)}))}(e);if(!d(t)){C("before:highlightElement",{el:e,language:t});var r=e.textContent,a=t?p(r,{language:t,ignoreIllegals:!0}):g(r);C("after:highlightElement",{el:e,result:a,text:r}),e.innerHTML=a.value,function(e,t,r){var a=t?n[t]:r;e.classList.add("hljs"),a&&e.classList.add(a)}(e,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}}var w=!1;function k(){"loading"!==document.readyState?document.querySelectorAll("pre code").forEach(x):w=!0}function S(e){return e=(e||"").toLowerCase(),t[e]||t[n[e]]}function E(e,t){var r=t.languageName;"string"===typeof e&&(e=[e]),e.forEach((function(e){n[e.toLowerCase()]=r}))}function N(e){var t=S(e);return t&&!t.disableAutodetect}function C(e,t){var n=e;a.forEach((function(e){e[n]&&e[n](t)}))}for(var j in"undefined"!==typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function(){w&&k()}),!1),Object.assign(e,{highlight:p,highlightAuto:g,highlightAll:k,fixMarkup:function(e){return ue("10.2.0","fixMarkup will be removed entirely in v11.0"),ue("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),t=e,s.tabReplace||s.useBR?t.replace(l,(function(e){return"\n"===e?s.useBR?" ":e:s.tabReplace?e.replace(/\t/g,s.tabReplace):e})):t;var t},highlightElement:x,highlightBlock:function(e){return ue("10.7.0","highlightBlock will be removed entirely in v12.0"),ue("10.7.0","Please use highlightElement now."),x(e)},configure:function(e){e.useBR&&(ue("10.3.0","'useBR' will be removed entirely in v11.0"),ue("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),s=ce(s,e)},initHighlighting:function e(){e.called||(e.called=!0,ue("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead."),document.querySelectorAll("pre code").forEach(x))},initHighlightingOnLoad:function(){ue("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."),w=!0},registerLanguage:function(n,r){var a=null;try{a=r(e)}catch(l){if(le("Language definition for '{}' could not be registered.".replace("{}",n)),!o)throw l;le(l),a=u}a.name||(a.name=n),t[n]=a,a.rawDefinition=r.bind(null,e),a.aliases&&E(a.aliases,{languageName:n})},unregisterLanguage:function(e){delete t[e];for(var r=0,a=Object.keys(n);r`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[l,s,u,i,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[l,i,s,u]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},o,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/