diff --git a/deploy/vite.config.gh-pages.js b/deploy/vite.config.gh-pages.js index edf8777..42db94d 100644 --- a/deploy/vite.config.gh-pages.js +++ b/deploy/vite.config.gh-pages.js @@ -1,6 +1,12 @@ -module.exports = { +import { defineConfig } from 'vite'; +import injectHTML from 'vite-plugin-html-inject'; + +export default defineConfig({ base: '/github-profile-header-generator/', build: { emptyOutDir: true - } -} \ No newline at end of file + }, + plugins: [ + injectHTML(), + ], +}); diff --git a/images/favicon-16x16.png b/images/favicon-16x16.png index 01c99bc..3909475 100644 Binary files a/images/favicon-16x16.png and b/images/favicon-16x16.png differ diff --git a/images/favicon-32x32.png b/images/favicon-32x32.png index f520bd8..1a3f7f5 100644 Binary files a/images/favicon-32x32.png and b/images/favicon-32x32.png differ diff --git a/images/favicon.ico b/images/favicon.ico index 943711a..847e6f4 100644 Binary files a/images/favicon.ico and b/images/favicon.ico differ diff --git a/images/gphg.png b/images/gphg.png new file mode 100644 index 0000000..87b5ee6 Binary files /dev/null and b/images/gphg.png differ diff --git a/images/gphg.svg b/images/gphg.svg new file mode 100644 index 0000000..e2ac8ff --- /dev/null +++ b/images/gphg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/icons/info.svg b/images/icons/info.svg deleted file mode 100644 index 89aa418..0000000 --- a/images/icons/info.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/images/theme-previews/theme-0-preview.png b/images/theme-previews/theme-0-preview.png new file mode 100644 index 0000000..233edf1 Binary files /dev/null and b/images/theme-previews/theme-0-preview.png differ diff --git a/images/theme-previews/theme-1-preview.png b/images/theme-previews/theme-1-preview.png new file mode 100644 index 0000000..ab95061 Binary files /dev/null and b/images/theme-previews/theme-1-preview.png differ diff --git a/images/theme-previews/theme-10-preview.png b/images/theme-previews/theme-10-preview.png new file mode 100644 index 0000000..b6b89b0 Binary files /dev/null and b/images/theme-previews/theme-10-preview.png differ diff --git a/images/theme-previews/theme-11-preview.png b/images/theme-previews/theme-11-preview.png new file mode 100644 index 0000000..b63afb4 Binary files /dev/null and b/images/theme-previews/theme-11-preview.png differ diff --git a/images/theme-previews/theme-12-preview.png b/images/theme-previews/theme-12-preview.png new file mode 100644 index 0000000..f52cd61 Binary files /dev/null and b/images/theme-previews/theme-12-preview.png differ diff --git a/images/theme-previews/theme-13-preview.png b/images/theme-previews/theme-13-preview.png new file mode 100644 index 0000000..11423b5 Binary files /dev/null and b/images/theme-previews/theme-13-preview.png differ diff --git a/images/theme-previews/theme-14-preview.png b/images/theme-previews/theme-14-preview.png new file mode 100644 index 0000000..7a4b05f Binary files /dev/null and b/images/theme-previews/theme-14-preview.png differ diff --git a/images/theme-previews/theme-15-preview.png b/images/theme-previews/theme-15-preview.png new file mode 100644 index 0000000..edd6b09 Binary files /dev/null and b/images/theme-previews/theme-15-preview.png differ diff --git a/images/theme-previews/theme-16-preview.png b/images/theme-previews/theme-16-preview.png new file mode 100644 index 0000000..982cf1b Binary files /dev/null and b/images/theme-previews/theme-16-preview.png differ diff --git a/images/theme-previews/theme-17-preview.png b/images/theme-previews/theme-17-preview.png new file mode 100644 index 0000000..acfbd62 Binary files /dev/null and b/images/theme-previews/theme-17-preview.png differ diff --git a/images/theme-previews/theme-18-preview.png b/images/theme-previews/theme-18-preview.png new file mode 100644 index 0000000..a500af4 Binary files /dev/null and b/images/theme-previews/theme-18-preview.png differ diff --git a/images/theme-previews/theme-19-preview.png b/images/theme-previews/theme-19-preview.png new file mode 100644 index 0000000..b95296f Binary files /dev/null and b/images/theme-previews/theme-19-preview.png differ diff --git a/images/theme-previews/theme-2-preview.png b/images/theme-previews/theme-2-preview.png new file mode 100644 index 0000000..01670b3 Binary files /dev/null and b/images/theme-previews/theme-2-preview.png differ diff --git a/images/theme-previews/theme-20-preview.png b/images/theme-previews/theme-20-preview.png new file mode 100644 index 0000000..d2d2e37 Binary files /dev/null and b/images/theme-previews/theme-20-preview.png differ diff --git a/images/theme-previews/theme-21-preview.png b/images/theme-previews/theme-21-preview.png new file mode 100644 index 0000000..d407354 Binary files /dev/null and b/images/theme-previews/theme-21-preview.png differ diff --git a/images/theme-previews/theme-3-preview.png b/images/theme-previews/theme-3-preview.png new file mode 100644 index 0000000..1c3069e Binary files /dev/null and b/images/theme-previews/theme-3-preview.png differ diff --git a/images/theme-previews/theme-4-preview.png b/images/theme-previews/theme-4-preview.png new file mode 100644 index 0000000..2bafcf0 Binary files /dev/null and b/images/theme-previews/theme-4-preview.png differ diff --git a/images/theme-previews/theme-5-preview.png b/images/theme-previews/theme-5-preview.png new file mode 100644 index 0000000..bdd559a Binary files /dev/null and b/images/theme-previews/theme-5-preview.png differ diff --git a/images/theme-previews/theme-6-preview.png b/images/theme-previews/theme-6-preview.png new file mode 100644 index 0000000..87b3254 Binary files /dev/null and b/images/theme-previews/theme-6-preview.png differ diff --git a/images/theme-previews/theme-7-preview.png b/images/theme-previews/theme-7-preview.png new file mode 100644 index 0000000..b6e6e04 Binary files /dev/null and b/images/theme-previews/theme-7-preview.png differ diff --git a/images/theme-previews/theme-8-preview.png b/images/theme-previews/theme-8-preview.png new file mode 100644 index 0000000..571db33 Binary files /dev/null and b/images/theme-previews/theme-8-preview.png differ diff --git a/images/theme-previews/theme-9-preview.png b/images/theme-previews/theme-9-preview.png new file mode 100644 index 0000000..a645c88 Binary files /dev/null and b/images/theme-previews/theme-9-preview.png differ diff --git a/index.html b/index.html index 9a05119..d101eba 100644 --- a/index.html +++ b/index.html @@ -1,604 +1,46 @@ - - - - - Github Profile Header Generator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - -
-

- Github logo
- Github
- Profile Header Generator -

-

- A simple but nice header image generator
for your Github profile -

-

- - Star - -

-
- -
-

How to use it?

-
    -
  1. - Create a nice github header image.
    - -
  2. -
  3. - Create your GitHub profile README
    following - - this guide. - -
  4. -
  5. Upload your header to your profile repo.
  6. -
  7. - Add this line to your README: -

    ![Header](./your-header-image-name.png)

    -
  8. -
-
+
+ + + +
- -
-
-
-
Hey! I am ...
-
Fullstack developer
-
-
-
-
- - - - -
-
+
+ +
-
-
-
- - -
-
-
- - -
-
- - -
-
- - - 25 -
-
-
-
- -

-
-
- -

-
-
- -

-
-
-
- Text align: - - - -
-
-
- - -
-
- - -
-
-
-
- - - 40 -
-
- - - 20 -
-
-
-
- -
-
-
-
- -

-
-
- -

-
-
-
-
- - - 0 -
-
- - - 7 -
-
-
-
- - -
-
- - - 100 -
-
- - - 0.25 -
-
-
- Patterns: - - - - - - - - - - - - - - - - - -
-
+
+ + + + +
- -
-
-
-
- - - 100 -
-
-
- Decorations: - - - - - - - - - - - - - - - - - - -
-
- - -
- - đź’ˇUse an octocat from the - Github - Octodex -
- đź’ˇOr build your own at - MyOctocat.com -
-   (My octocat looks like broken but you can copy the svg result) -
-
-
-
-
- - - - - + + + - - - - - - - - - - - + \ No newline at end of file diff --git a/js/utils/background-patterns.js b/js/data/patterns.js similarity index 99% rename from js/utils/background-patterns.js rename to js/data/patterns.js index e5e5fef..7e4a682 100644 --- a/js/utils/background-patterns.js +++ b/js/data/patterns.js @@ -74,6 +74,10 @@ function getBackgroundSvg(option, color = 'FFFFFF', opacity = 0.25) { return `url("` + `data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56 28' width='56' height='28'%3E%3Cpath fill='%23${color}' fill-opacity='${opacity}' d='M56 26v2h-7.75c2.3-1.27 4.94-2 7.75-2zm-26 2a2 2 0 1 0-4 0h-4.09A25.98 25.98 0 0 0 0 16v-2c.67 0 1.34.02 2 .07V14a2 2 0 0 0-2-2v-2a4 4 0 0 1 3.98 3.6 28.09 28.09 0 0 1 2.8-3.86A8 8 0 0 0 0 6V4a9.99 9.99 0 0 1 8.17 4.23c.94-.95 1.96-1.83 3.03-2.63A13.98 13.98 0 0 0 0 0h7.75c2 1.1 3.73 2.63 5.1 4.45 1.12-.72 2.3-1.37 3.53-1.93A20.1 20.1 0 0 0 14.28 0h2.7c.45.56.88 1.14 1.29 1.74 1.3-.48 2.63-.87 4-1.15-.11-.2-.23-.4-.36-.59H26v.07a28.4 28.4 0 0 1 4 0V0h4.09l-.37.59c1.38.28 2.72.67 4.01 1.15.4-.6.84-1.18 1.3-1.74h2.69a20.1 20.1 0 0 0-2.1 2.52c1.23.56 2.41 1.2 3.54 1.93A16.08 16.08 0 0 1 48.25 0H56c-4.58 0-8.65 2.2-11.2 5.6 1.07.8 2.09 1.68 3.03 2.63A9.99 9.99 0 0 1 56 4v2a8 8 0 0 0-6.77 3.74c1.03 1.2 1.97 2.5 2.79 3.86A4 4 0 0 1 56 10v2a2 2 0 0 0-2 2.07 28.4 28.4 0 0 1 2-.07v2c-9.2 0-17.3 4.78-21.91 12H30zM7.75 28H0v-2c2.81 0 5.46.73 7.75 2zM56 20v2c-5.6 0-10.65 2.3-14.28 6h-2.7c4.04-4.89 10.15-8 16.98-8zm-39.03 8h-2.69C10.65 24.3 5.6 22 0 22v-2c6.83 0 12.94 3.11 16.97 8zm15.01-.4a28.09 28.09 0 0 1 2.8-3.86 8 8 0 0 0-13.55 0c1.03 1.2 1.97 2.5 2.79 3.86a4 4 0 0 1 7.96 0zm14.29-11.86c1.3-.48 2.63-.87 4-1.15a25.99 25.99 0 0 0-44.55 0c1.38.28 2.72.67 4.01 1.15a21.98 21.98 0 0 1 36.54 0zm-5.43 2.71c1.13-.72 2.3-1.37 3.54-1.93a19.98 19.98 0 0 0-32.76 0c1.23.56 2.41 1.2 3.54 1.93a15.98 15.98 0 0 1 25.68 0zm-4.67 3.78c.94-.95 1.96-1.83 3.03-2.63a13.98 13.98 0 0 0-22.4 0c1.07.8 2.09 1.68 3.03 2.63a9.99 9.99 0 0 1 16.34 0z'/%3E%3C/svg%3E` + `")`; + case 'bathroom-floor': + return `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='80' height='80' viewBox='0 0 80 80'%3E%3Cg fill='%23${color}' fill-opacity='${opacity}'%3E%3Cpath fill-rule='evenodd' d='M0 0h40v40H0V0zm40 40h40v40H40V40zm0-40h2l-2 2V0zm0 4l4-4h2l-6 6V4zm0 4l8-8h2L40 10V8zm0 4L52 0h2L40 14v-2zm0 4L56 0h2L40 18v-2zm0 4L60 0h2L40 22v-2zm0 4L64 0h2L40 26v-2zm0 4L68 0h2L40 30v-2zm0 4L72 0h2L40 34v-2zm0 4L76 0h2L40 38v-2zm0 4L80 0v2L42 40h-2zm4 0L80 4v2L46 40h-2zm4 0L80 8v2L50 40h-2zm4 0l28-28v2L54 40h-2zm4 0l24-24v2L58 40h-2zm4 0l20-20v2L62 40h-2zm4 0l16-16v2L66 40h-2zm4 0l12-12v2L70 40h-2zm4 0l8-8v2l-6 6h-2zm4 0l4-4v2l-2 2h-2z'/%3E%3C/g%3E%3C/svg%3E")`; + case 'squares-in-squares': + return `url("data:image/svg+xml,%3Csvg width='70' height='70' viewBox='0 0 70 70' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23${color}' fill-opacity='${opacity}' fill-rule='evenodd'%3E%3Cpath d='M0 0h35v35H0V0zm5 5h25v25H5V5zm5 5h15v15H10V10zm5 5h5v5h-5v-5zM40 5h25v25H40V5zm5 5h15v15H45V10zm5 5h5v5h-5v-5zM70 35H35v35h35V35zm-5 5H40v25h25V40zm-5 5H45v15h15V45zm-5 5h-5v5h5v-5zM30 40H5v25h25V40zm-5 5H10v15h15V45zm-5 5h-5v5h5v-5z'/%3E%3C/g%3E%3C/svg%3E")`; default: return 'none'; } diff --git a/js/data/themes.json b/js/data/themes.json new file mode 100644 index 0000000..0c582ef --- /dev/null +++ b/js/data/themes.json @@ -0,0 +1,345 @@ +[ + { + "background": "#446BAF", + "titleColor": "#FFFFFF", + "subtitleColor": "#FFFFFF", + "borderColor": "#FFFFFF", + "borderSize": 0, + "borderRadius": 7, + "textAlign": "flex-start", + "decoration": "my-octocat.png", + "decorationSize": 77, + "pattern": "bubbles", + "patternColor": "#FFFFFF", + "patternOpacity": 0.15, + "previewImage": "theme-1-preview.png" + }, + { + "background": "#112137", + "titleColor": "#FFFFFF", + "subtitleColor": "#05F1FA", + "borderColor": "#eeff00", + "borderSize": 4, + "borderRadius": 10, + "textAlign": "center", + "decoration": "github-mark.png", + "decorationSize": 100, + "pattern": "i-like-food", + "patternColor": "#FFFFFF", + "patternOpacity": 0.25, + "previewImage": "theme-2-preview.png" + }, + { + "background": "#000000", + "titleColor": "#FFFFFF", + "subtitleColor": "#c671d9", + "borderColor": "#FFFFFF", + "borderSize": 0, + "borderRadius": 15, + "textAlign": "center", + "decoration": "code.png", + "decorationSize": 100, + "pattern": "endless-constellation", + "patternColor": "#87d2ff", + "patternOpacity": 0.7, + "previewImage": "theme-3-preview.png" + }, + { + "background": "#ff0066", + "titleColor": "#FFFFFF", + "subtitleColor": "#0f0006", + "borderColor": "#FFFFFF", + "borderSize": 0, + "borderRadius": 15, + "textAlign": "flex-end", + "decoration": "dev-badge.png", + "decorationSize": 100, + "pattern": "temple", + "patternColor": "#FFFFFF", + "patternOpacity": 0.25, + "previewImage": "theme-4-preview.png" + }, + { + "background": "#FFFFFF", + "titleColor": "#f7b3ce", + "subtitleColor": "#55c1ae", + "borderColor": "#88aedc", + "borderSize": 7, + "borderRadius": 0, + "textAlign": "flex-end", + "decoration": "dev-rainbow.png", + "decorationSize": 100, + "pattern": "bubbles", + "patternColor": "#f3f095", + "patternOpacity": 0.7, + "previewImage": "theme-5-preview.png" + }, + { + "background": "#207e78", + "titleColor": "#d0b506", + "subtitleColor": "#8fd100", + "borderColor": "#ffffff", + "borderSize": 0, + "borderRadius": 7, + "textAlign": "center", + "decoration": "dev-white.png", + "decorationSize": 100, + "pattern": "i-like-food", + "patternColor": "#1b96f3", + "patternOpacity": 0.45, + "previewImage": "theme-6-preview.png" + }, + { + "background": "#000000", + "titleColor": "#4cfca7", + "subtitleColor": "#0ad6ff", + "borderColor": "#ffffff", + "borderSize": 0, + "borderRadius": 25, + "textAlign": "flex-end", + "decoration": "dev-white.png", + "decorationSize": 145, + "pattern": "overlapping-circles", + "patternColor": "#ffffff", + "patternOpacity": 0.3, + "previewImage": "theme-7-preview.png" + }, + { + "background": "#9340bf", + "titleColor": "#fbff00", + "subtitleColor": "#ffffff", + "borderColor": "#ffffff", + "borderSize": 0, + "borderRadius": 7, + "textAlign": "center", + "decoration": "none", + "decorationSize": 100, + "pattern": "jigsaw", + "patternColor": "#ffffff", + "patternOpacity": 0.25, + "titleFont": "Life Savers", + "subtitleFont": "Della Respira", + "previewImage": "theme-8-preview.png" + }, + { + "background": "#012d4e", + "titleColor": "#5affb7", + "subtitleColor": "#00d6bd", + "borderColor": "#ffffff", + "borderSize": 0, + "borderRadius": 200, + "textAlign": "flex-end", + "decoration": "binary-code.png", + "decorationSize": 122, + "pattern": "circuit-board", + "patternColor": "#94ffdb", + "patternOpacity": 0.3, + "titleFont": "Ubuntu", + "subtitleFont": "Courier New", + "previewImage": "theme-9-preview.png" + }, + { + "background": "#002a52", + "titleColor": "#ffffff", + "subtitleColor": "#ffffff", + "borderColor": "#b4b701", + "borderSize": 3, + "borderRadius": 0, + "textAlign": "center", + "decoration": "coding.png", + "decorationSize": 91, + "pattern": "lisbon", + "patternColor": "#bbff00", + "patternOpacity": 0.5, + "titleFont": "Della Respira", + "subtitleFont": "Quattrocento", + "previewImage": "theme-10-preview.png" + }, + { + "background": "#96349d", + "titleColor": "#ffffff", + "subtitleColor": "#bef3fe", + "borderColor": "#ffffff", + "borderSize": 0, + "borderRadius": 7, + "textAlign": "center", + "decoration": "rocket.png", + "decorationSize": 95, + "pattern": "endless-clouds", + "patternColor": "#ffffff", + "patternOpacity": 0.25, + "titleFont": "Maven Pro", + "subtitleFont": "Quattrocento", + "previewImage": "theme-11-preview.png" + }, + { + "background": "#6cbf40", + "titleColor": "#ffffff", + "subtitleColor": "#e7eb00", + "borderColor": "#ffffff", + "borderSize": 0, + "borderRadius": 11, + "textAlign": "flex-end", + "decoration": "idea.png", + "decorationSize": 80, + "pattern": "leaf", + "patternColor": "#ffffff", + "patternOpacity": 0.25, + "titleFont": "Della Respira", + "subtitleFont": "Della Respira", + "previewImage": "theme-12-preview.png" + }, + { + "background": "#252646", + "titleColor": "#fdbf00", + "subtitleColor": "#64e1dc", + "borderColor": "#ffffff", + "borderSize": 0, + "borderRadius": 15, + "textAlign": "flex-end", + "decoration": "coding-screen.png", + "decorationSize": 116, + "pattern": "github", + "patternColor": "#ffffff", + "patternOpacity": 0.1, + "titleFont": "Tahoma", + "subtitleFont": "Quattrocento", + "previewImage": "theme-13-preview.png" + }, + { + "background": "#001061", + "titleColor": "#ffffff", + "subtitleColor": "#ffffff", + "borderColor": "#ffffff", + "borderSize": 0, + "borderRadius": 0, + "textAlign": "center", + "decoration": "apple.png", + "decorationSize": 59, + "pattern": "endless-constellation", + "patternColor": "#ffffff", + "patternOpacity": 0.5, + "titleFont": "Maven Pro", + "subtitleFont": "Maven Pro", + "previewImage": "theme-14-preview.png" + }, + { + "background": "#b83700", + "titleColor": "#ffd500", + "subtitleColor": "#41d7e1", + "borderColor": "#ffffff", + "borderSize": 0, + "borderRadius": 15, + "textAlign": "flex-start", + "decoration": "idea.png", + "decorationSize": 100, + "pattern": "falling-triangles", + "patternColor": "#fff700", + "patternOpacity": 0.15, + "titleFont": "Ubuntu", + "subtitleFont": "Trebuchet MS", + "previewImage": "theme-15-preview.png" + }, + { + "background": "#4099bf", + "titleColor": "#ffffff", + "subtitleColor": "#ffc6b1", + "borderColor": "#ffffff", + "borderSize": 5, + "borderRadius": 7, + "textAlign": "flex-start", + "decoration": "my-octocat.png", + "decorationSize": 100, + "pattern": "bubbles", + "patternColor": "#ffffff", + "patternOpacity": 0.25, + "titleFont": "Ubuntu", + "subtitleFont": "Quattrocento", + "previewImage": "theme-16-preview.png" + }, + { + "background": "#eeb25d", + "titleColor": "#ffffff", + "subtitleColor": "#000000", + "borderColor": "#ffffff", + "borderSize": 5, + "borderRadius": 37, + "textAlign": "center", + "decoration": "octocat.png", + "decorationSize": 69, + "pattern": "bubbles", + "patternColor": "#ffffff", + "patternOpacity": 0.25, + "titleFont": "Della Respira", + "subtitleFont": "Life Savers", + "previewImage": "theme-17-preview.png" + }, + { + "background": "#000000", + "titleColor": "#ffffff", + "subtitleColor": "#ffffff", + "borderColor": "#299900", + "borderSize": 2, + "borderRadius": 0, + "textAlign": "flex-start", + "decoration": "github-mark.png", + "decorationSize": 60, + "pattern": "i-like-food", + "patternColor": "#27eb00", + "patternOpacity": 0.35, + "titleFont": "Maven Pro", + "subtitleFont": "Maven Pro", + "previewImage": "theme-18-preview.png" + }, + { + "background": "#000000", + "titleColor": "#ffffff", + "subtitleColor": "#00c732", + "borderColor": "#ffffff", + "borderSize": 0, + "borderRadius": 0, + "textAlign": "flex-end", + "decoration": "coding.png", + "decorationSize": 100, + "pattern": "circuit-board", + "patternColor": "#00ff6e", + "patternOpacity": 0.4, + "titleFont": "Courier New", + "subtitleFont": "Courier New", + "previewImage": "theme-19-preview.png" + }, + { + "background": "#37cd8c", + "titleColor": "#d5fe06", + "subtitleColor": "#85ffd0", + "borderColor": "#ffffff", + "borderSize": 0, + "borderRadius": 7, + "textAlign": "flex-start", + "decoration": "github-mark.png", + "decorationSize": 64, + "pattern": "temple", + "patternColor": "#ffffff", + "patternOpacity": 0.25, + "titleFont": "Lancelot", + "subtitleFont": "Athiti", + "previewImage": "theme-20-preview.png" + }, + { + "background": "#262626", + "titleColor": "#ffffff", + "subtitleColor": "#b0b0b0", + "borderColor": "#ffffff", + "borderSize": 2, + "borderRadius": 0, + "textAlign": "flex-start", + "decoration": "github-mark.png", + "decorationSize": 100, + "pattern": "bathroom-floor", + "patternColor": "#000000", + "patternOpacity": 1, + "titleFont": "Passero One", + "subtitleFont": "Source Code Pro", + "previewImage": "theme-21-preview.png" + } +] \ No newline at end of file diff --git a/js/default-theme.js b/js/default-theme.js deleted file mode 100644 index c8aeaeb..0000000 --- a/js/default-theme.js +++ /dev/null @@ -1,74 +0,0 @@ -/* ************** Elements ************** */ - -let toolbox = document.querySelector('.toolbox'); - -/* ************** Options ************** */ - -let selectedTheme = 'github'; - -/* ************** Theme options ************** */ - -document.querySelectorAll('.theme-option') - .forEach(button => { - button.addEventListener('click', (e) => { - console.log(e.target); - document.querySelectorAll('.theme-option').forEach(button => { button.classList.remove('active'); }); - button.classList.add('active'); - }); - if (button.getAttribute('data-theme') === selectedTheme) - button.classList.add('active'); - }) - -// Github theme - -let paddingValue = document.querySelector('#paddings-input').value || 25; -let padding = `${paddingValue}px`; - -const imageDecorationContainer = document.querySelector('.img-decoration-container'); -const imgDecorationElement = document.createElement('img'); -imgDecorationElement.className = 'img-decoration'; -imgDecorationElement.src = './images/decorations/my-octocat.png'; -imgDecorationElement.style.position = 'absolute'; -imgDecorationElement.style.bottom = 'calc(50%)'; -imgDecorationElement.style.transform = 'translateY(50%)' -imgDecorationElement.style.left = 'auto'; -imgDecorationElement.style.right = padding; -imgDecorationElement.style.width = '77px'; -imgDecorationElement.alt = 'Header image decoration' -imageDecorationContainer.appendChild(imgDecorationElement) - -toolbox.querySelectorAll('.align-buttons button') - .forEach(button => { - button.addEventListener('click', (e) => { - const element = e.target.tagName.toLowerCase() === 'img' ? - e.target.parentNode : - e.target; - const alignValue = element.getAttribute('data-align-value'); - const paddingValue = document.querySelector('#paddings-input').value || 25; - const padding = `${paddingValue}px`; - if (selectedTheme === 'github') { - const imageDecoration = document.querySelector('.img-decoration-container img'); - if (alignValue === 'flex-end') { - document.querySelector('.img-decoration-container .img-decoration-2')?.remove(); - imageDecoration.style.left = padding; - imageDecoration.style.right = 'auto'; - } else if (alignValue === 'flex-start') { - document.querySelector('.img-decoration-container .img-decoration-2')?.remove(); - imageDecoration.style.left = 'auto'; - imageDecoration.style.right = padding; - } else if (alignValue === 'center') { - imageDecoration.style.left = 'auto'; - imageDecoration.style.right = padding; - if (!document.querySelector('.img-decoration-container .img-decoration-2')) { - const clonedImageDecoration = imageDecoration.cloneNode(true); - clonedImageDecoration.style.left = padding; - clonedImageDecoration.style.right = 'auto'; - clonedImageDecoration.className = 'img-decoration-2'; - imageDecorationContainer.appendChild(clonedImageDecoration) - } - } - } - }); - }) - -/* ************** ************** ************** */ diff --git a/js/helpers/elements.js b/js/helpers/elements.js new file mode 100644 index 0000000..1c7fce4 --- /dev/null +++ b/js/helpers/elements.js @@ -0,0 +1,24 @@ +function getMainElements() { + let bannerImageContainer = document.querySelector('.header-image-container'); + let bannerImage = document.querySelector('#github-header-image'); + let bannerTitle = bannerImage.querySelector('.title'); + let bannerSubtitle = bannerImage.querySelector('.subtitle'); + + let toolbox = document.querySelector('.toolbox'); + let toolboxBackground = document.querySelector('.toolbox-background'); + let toolboxDecorations = document.querySelector('.toolbox-decorations'); + let toolboxPresets = document.querySelector('.toolbox-presets'); + + return { + bannerImageContainer, + bannerImage, + bannerTitle, + bannerSubtitle, + toolbox, + toolboxDecorations, + toolboxBackground, + toolboxPresets + } +} + +export { getMainElements }; \ No newline at end of file diff --git a/js/helpers/fonts.js b/js/helpers/fonts.js new file mode 100644 index 0000000..24cfc7a --- /dev/null +++ b/js/helpers/fonts.js @@ -0,0 +1,19 @@ +import { getMainElements } from "./elements"; + +const { + bannerTitle, + bannerSubtitle, + toolbox, +} = getMainElements(); + +function setFontValues() { + let titleFontSelect = toolbox.querySelector('.font-selectors-container #title-font-selector'); + let subtitleFontSelect = toolbox.querySelector('.font-selectors-container #subtitle-font-selector'); + + document.fonts.ready.then(() => { + bannerTitle.style.fontFamily = `"${titleFontSelect.value}"`; + bannerSubtitle.style.fontFamily = `"${subtitleFontSelect.value}"`; + }); +} + +export { setFontValues }; \ No newline at end of file diff --git a/js/helpers/helpers.js b/js/helpers/helpers.js new file mode 100644 index 0000000..38223c3 --- /dev/null +++ b/js/helpers/helpers.js @@ -0,0 +1,144 @@ +import themes from "../data/themes.json"; +import { getMainElements } from "./elements"; + +const { + bannerImageContainer, + bannerImage, + bannerTitle, + bannerSubtitle, + toolbox, + toolboxDecorations, + toolboxBackground, +} = getMainElements(); + +function getAllThemes() { + return themes +} + +function getTheme(index) { + return themes[index] +} + +function getRandomTheme() { + let random = Math.floor(Math.random() * themes.length); + return themes[random]; +} + +function updateBanner({ + background, + titleColor, + subtitleColor, + borderColor, + borderSize, + borderRadius, + textAlign, + decoration, + decorationSize, + pattern, + patternColor, + patternOpacity, + titleFont, + subtitleFont +}) { + if (background) bannerImage.style.backgroundColor = background; + if (titleColor) bannerTitle.style.color = titleColor; + if (subtitleColor) bannerSubtitle.style.color = subtitleColor; + if (borderColor || borderSize || borderRadius) { + bannerImage.style.border = `solid ${borderColor} ${borderSize}px`; + bannerImage.style.borderRadius = `${borderRadius}px`; + } + if (textAlign) + document.querySelector(`.align-buttons button[data-align-value="${textAlign}"]`).click(); + if (decoration) + document.querySelector(`.decorations-buttons button[data-decoration-value="${decoration}"]`).click(); + if (decorationSize) { } + if (pattern) { + document.querySelector(`.patterns-buttons button[data-pattern-value="${pattern}"]`).click(); + } + if (patternColor || patternOpacity) { + } + if (titleFont || subtitleFont) { + document.fonts.ready.then(() => { + bannerTitle.style.fontFamily = `"${titleFont}"`; + bannerSubtitle.style.fontFamily = `"${subtitleFont}"`; + }); + } +} + +function updateUIOptions({ + background, + titleColor, + subtitleColor, + borderColor, + borderSize, + borderRadius, + textAlign, + decoration, + decorationSize, + pattern, + patternColor, + patternOpacity, + titleFont, + subtitleFont +}) { + if (background) { + const mainTabBgColorSelector = document.querySelector('.color-selectors-container input#main-bg-color-selector'); + const backgroundTabBgColorSelector = document.querySelector('.bg-color-selectors input#background-bg-color-selector'); + mainTabBgColorSelector.value = background; + backgroundTabBgColorSelector.value = background; + } + if (titleColor) { + const mainTabtitleColorSelector = document.querySelector('.color-selectors-container input#title-color-selector'); + mainTabtitleColorSelector.value = titleColor; + } + if (subtitleColor) { + const mainTabSubtitleColorSelector = document.querySelector('.color-selectors-container input#subtitle-color-selector'); + mainTabSubtitleColorSelector.value = subtitleColor; + } + if (borderColor || borderSize || borderRadius) { + const borderColorSelector = document.querySelector('.bg-color-selectors input#border-color-selector'); + const borderInput = document.querySelector('.border-inputs input#border-input'); + const borderRadiusInput = document.querySelector('.border-inputs input#border-radius-input'); + borderColorSelector.value = borderColor; + borderInput.value = borderSize; + borderInput.nextElementSibling.value = borderSize; + borderRadiusInput.value = borderRadius; + borderRadiusInput.nextElementSibling.value = borderRadius; + } + if (textAlign) { } + if (decoration) { } + if (decorationSize) { + const decorationSizeInput = document.querySelector('.decorations-size-inputs input#decoration-size-input'); + decorationSizeInput.value = decorationSize; + decorationSizeInput.nextElementSibling.value = decorationSize; + } + if (pattern) { + + } + if (patternColor || patternOpacity) { + const patternOpacityInput = document.querySelector('.pattern-inputs input#pattern-opacity-input'); + const patternColorSelector = document.querySelector('.pattern-inputs input#pattern-color-selector'); + patternOpacityInput.value = patternOpacity + patternOpacityInput.nextElementSibling.value = patternOpacity + patternColorSelector.value = patternColor; + } + if (titleFont || subtitleFont) { + document.querySelector('.font-selectors-container #title-font-selector').value = titleFont ?? 'Red Hat Display'; + document.querySelector('.font-selectors-container #subtitle-font-selector').value = subtitleFont ?? 'Kalam'; + } +} + +function setTheme(theme) { + logTheme(theme); + updateUIOptions(theme); + updateBanner(theme); +} + +function logTheme(theme) { + if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') { + console.log(theme); + console.table(theme); + } +} + +export { getAllThemes, getTheme, getRandomTheme, setTheme }; \ No newline at end of file diff --git a/js/main.js b/js/main.js index d26f607..8b39dae 100644 --- a/js/main.js +++ b/js/main.js @@ -1,25 +1,28 @@ -import { setFontValues } from './utils/fonts'; -import { getRandomTheme } from './utils/themes'; +import { setFontValues } from './helpers/fonts'; +import { getRandomTheme, setTheme } from './helpers/helpers'; +import { snapdom } from '@zumer/snapdom'; +import { getMainElements } from './helpers/elements'; /* ************** Elements ************** */ -let headerImageContainer = document.querySelector('.header-image-container'); -let headerImage = document.querySelector('#github-header-image'); -let title = headerImage.querySelector('.title'); -let subtitle = headerImage.querySelector('.subtitle'); - -let toolbox = document.querySelector('.toolbox'); +const { + bannerImageContainer, + bannerImage, + bannerTitle, + bannerSubtitle, + toolbox, + toolboxDecorations, + toolboxBackground, +} = getMainElements(); /* ************** Options ************** */ -let selectedTheme = 'github'; - // Init -document.querySelector('.toolbox .size-inputs input#width-input').value = headerImageContainer.clientWidth; +document.querySelector('.toolbox .size-inputs input#width-input').value = bannerImageContainer.clientWidth; let titleFontSelect = toolbox.querySelector('.font-selectors-container #title-font-selector'); let subtitleFontSelect = toolbox.querySelector('.font-selectors-container #subtitle-font-selector'); -titleFontSelect.value='Red Hat Display'; -subtitleFontSelect.value='Kalam'; +titleFontSelect.value = 'Red Hat Display'; +subtitleFontSelect.value = 'Kalam'; // Demo reset after ended document.querySelector('.how-to-section video.demo').onended = (e) => e.target.currentTime = 0; @@ -28,37 +31,85 @@ document.querySelector('.how-to-section video.demo').onended = (e) => e.target.c // Download button document.querySelector('.download-button') - .addEventListener('click', () => { - html2canvas( - document.querySelector('#github-header-image'), - { - backgroundColor: null - // widtH: (headerImage.clientWidth * 2), - // height: (headerImage.style.height * 2) - }) - .then(function (canvas) { - // for testing - // document.body.before(canvas); - - let imageURL = canvas.toDataURL("image/png"); - let a = document.createElement("a"); - a.href = imageURL; - a.download = 'github-header-image'; - a.click(); + .addEventListener('click', async () => { + document.querySelector('.download-button img').src = './images/icons/loading.gif' + + try { + const el = document.querySelector('#github-header-image'); + await snapdom.download(el, { + embedFonts: true, + format: 'png', + filename: 'github-header-banner', + scale: 2 }); + document.querySelector('.download-button img').src = './images/icons/download.svg' + } catch (error) { + console.error('Image capture or download failed:', error); + } }) +// For local development +document.addEventListener("DOMContentLoaded", (event) => { + const displayButton = document.querySelector('.display-button'); + const miniatureButton = document.querySelector('.miniature-button'); + const testFontsTab = document.querySelector('.tablinks[data-name="test-fonts-section"]'); + + if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') { + const el = document.querySelector('#github-header-image'); + const container = document.querySelector('.header-image-container') + + if (displayButton) { + displayButton.style.display = "block"; + + displayButton.addEventListener('click', async () => { + const png = await snapdom.toPng(el, { embedFonts: true }); + + const prevImage = container.children[1]; + if (prevImage) container.removeChild(prevImage); + + container.appendChild(png); + document.querySelector('.toolbox-container .toolbox-tools').style.height = 'calc(100vh - 230px - 3rem - 35px - 1rem - 230px)' + }) + } + if (miniatureButton) { + miniatureButton.style.display = "block"; + console.log('Running on localhost! display appending image option ...'); + + miniatureButton.addEventListener('click', async () => { + const png = await snapdom.toPng(el, { embedFonts: true, scale: 0.25 }); + + const prevImage = container.children[1]; + if (prevImage) container.removeChild(prevImage); + + container.appendChild(png); + document.querySelector('.toolbox-container .toolbox-tools').style.height = 'calc(100vh - 230px - 3rem - 35px - 1rem - 46px)' + }) + } + if (testFontsTab) { + // testFontsTab.style.display = "block" + } + } +}); + // Toogle Dark Mode button document.querySelector('.dark-mode-button') .addEventListener('click', (e) => { let resultBox = document.querySelector('.result-box'); const toogleDarkModeButton = document.querySelector('.dark-mode-button'); + const toogleRandomizeButton = document.querySelector('.randomize-button'); + const toogleDownloadButton = document.querySelector('.download-button'); + + const size = 20; resultBox.classList.toggle('light-mode'); if (resultBox.className.includes('light')) { - toogleDarkModeButton.innerText = 'Light Mode' + toogleDarkModeButton.innerHTML = `GH Light` + toogleRandomizeButton.innerHTML = `Random` + toogleDownloadButton.innerHTML = `Download` } else { - toogleDarkModeButton.innerText = 'Dark Mode' + toogleDarkModeButton.innerHTML = `GH Dark` + toogleRandomizeButton.innerHTML = `Random` + toogleDownloadButton.innerHTML = `Download` } }); @@ -67,57 +118,7 @@ document.querySelector('.dark-mode-button') document.querySelector('.randomize-button') .addEventListener('click', (e) => { const theme = getRandomTheme(); - - // Background - const mainTabBgColorSelector = document.querySelector('.color-selectors-container input#main-bg-color-selector'); - const backgroundTabBgColorSelector = document.querySelector('.bg-color-selectors input#background-bg-color-selector'); - mainTabBgColorSelector.value = theme.background; - backgroundTabBgColorSelector.value = theme.background; - headerImage.style.backgroundColor = theme.background; - - // Title - const mainTabtitleColorSelector = document.querySelector('.color-selectors-container input#title-color-selector'); - mainTabtitleColorSelector.value = theme.title; - title.style.color = theme.title; - - // Subtitle - const mainTabSubtitleColorSelector = document.querySelector('.color-selectors-container input#subtitle-color-selector'); - mainTabSubtitleColorSelector.value = theme.subtitle; - subtitle.style.color = theme.subtitle; - - // Borders - const borderColorSelector = document.querySelector('.bg-color-selectors input#border-color-selector'); - const borderInput = document.querySelector('.border-inputs input#border-input'); - const borderRadiusInput = document.querySelector('.border-inputs input#border-radius-input'); - borderColorSelector.value = theme.border; - borderInput.value = theme.borderSize; - borderInput.nextElementSibling.value = theme.borderSize; - borderRadiusInput.value = theme.borderRadius; - borderRadiusInput.nextElementSibling.value = theme.borderRadius; - headerImage.style.border = `solid ${borderColorSelector.value} ${borderInput.value}px`; - headerImage.style.borderRadius = `${borderRadiusInput.value}px`; - - // Text Align - document.querySelector(`.align-buttons button[data-align-value="${theme.textAlign}"]`).click(); - - // Decoration - const decorationSizeInput = document.querySelector('.decorations-size-inputs input#decoration-size-input'); - decorationSizeInput.value = theme.decorationSize; - decorationSizeInput.nextElementSibling.value = theme.decorationSize; - document.querySelector(`.decorations-buttons button[data-decoration-value="${theme.decoration}"]`).click(); - - // Patterns - const patternOpacityInput = document.querySelector('.pattern-inputs input#pattern-opacity-input'); - const patternColorSelector = document.querySelector('.pattern-inputs input#pattern-color-selector'); - patternOpacityInput.value = theme.patternOpacity - patternOpacityInput.nextElementSibling.value = theme.patternOpacity - patternColorSelector.value = theme.patternColor; - document.querySelector(`.patterns-buttons button[data-pattern-value="${theme.pattern}"]`).click(); - - // Fonts - document.querySelector('.font-selectors-container #title-font-selector').value = theme.titleFont ?? 'Red Hat Display'; - document.querySelector('.font-selectors-container #subtitle-font-selector').value = theme.subtitleFont ?? 'Kalam'; - setFontValues(); + setTheme(theme); }); diff --git a/js/toolbox-background.js b/js/toolbox-background.js index ea8f0b2..ce8e030 100644 --- a/js/toolbox-background.js +++ b/js/toolbox-background.js @@ -1,25 +1,25 @@ -import { getBackgroundSvg } from './utils/background-patterns'; +import { getBackgroundSvg } from './data/patterns'; /* ************** Elements ************** */ -let headerImageContainer = document.querySelector('.header-image-container'); -let headerImage = document.querySelector('#github-header-image'); -let title = headerImage.querySelector('.title'); -let subtitle = headerImage.querySelector('.subtitle'); +let bannerImageContainer = document.querySelector('.header-image-container'); +let bannerImage = document.querySelector('#github-header-image'); +let title = bannerImage.querySelector('.title'); +let subtitle = bannerImage.querySelector('.subtitle'); let toolboxBackground = document.querySelector('.toolbox-background'); // init -let selectedPattern = 'jigsaw'; -let selectedPatternOpacity = 0.25; +let selectedPattern = 'bubbles'; +let selectedPatternOpacity = 0.15; let selectedPatternColor = 'FFF'; -let selectedPatternSize = '100px'; +let selectedPatternSize = '200px'; setPatternBackground(); /* ************** Set theme button ************** */ // document.querySelector('.log-theme-button').addEventListener('click', () => { -// let obj = ` {background: '${document.querySelector('.color-selectors-container input#main-bg-color-selector').value}', title: '${document.querySelector('.color-selectors-container input#title-color-selector').value}', subtitle: '${document.querySelector('.color-selectors-container input#subtitle-color-selector').value}', border: '${document.querySelector('.bg-color-selectors input#border-color-selector').value}', borderSize: ${document.querySelector('.border-inputs input#border-input').value}, borderRadius: ${document.querySelector('.border-inputs input#border-radius-input').value}, textAlign: '${headerImage.style.alignItems}', decoration: '${document.querySelector('.img-decoration-container img').src.split('/').pop().replace('.png', '')}.png', decorationSize: ${document.querySelector('.decorations-size-inputs input#decoration-size-input').value}, pattern: '${selectedPattern}', patternColor: '${document.querySelector('.pattern-inputs input#pattern-color-selector').value}', patternOpacity: ${document.querySelector('.pattern-inputs input#pattern-opacity-input').value}, titleFont: '${document.querySelector('.font-selectors-container #title-font-selector').value}', subtitleFont: '${document.querySelector('.font-selectors-container #subtitle-font-selector').value}'}, `; +// let obj = ` {background: '${document.querySelector('.color-selectors-container input#main-bg-color-selector').value}', title: '${document.querySelector('.color-selectors-container input#title-color-selector').value}', subtitle: '${document.querySelector('.color-selectors-container input#subtitle-color-selector').value}', border: '${document.querySelector('.bg-color-selectors input#border-color-selector').value}', borderSize: ${document.querySelector('.border-inputs input#border-input').value}, borderRadius: ${document.querySelector('.border-inputs input#border-radius-input').value}, textAlign: '${bannerImage.style.alignItems}', decoration: '${document.querySelector('.img-decoration-container img').src.split('/').pop().replace('.png', '')}.png', decorationSize: ${document.querySelector('.decorations-size-inputs input#decoration-size-input').value}, pattern: '${selectedPattern}', patternColor: '${document.querySelector('.pattern-inputs input#pattern-color-selector').value}', patternOpacity: ${document.querySelector('.pattern-inputs input#pattern-opacity-input').value}, titleFont: '${document.querySelector('.font-selectors-container #title-font-selector').value}', subtitleFont: '${document.querySelector('.font-selectors-container #subtitle-font-selector').value}'}, `; // console.log(JSON.stringify(obj).replaceAll('\"', '\'')) // }) @@ -29,8 +29,8 @@ function setBgColorValues() { let bgColorSelector = toolboxBackground.querySelector('.bg-color-selectors input#background-bg-color-selector'); let borderColorSelector = toolboxBackground.querySelector('.bg-color-selectors input#border-color-selector'); - headerImage.style.backgroundColor = bgColorSelector.value; - headerImage.style.borderColor = borderColorSelector.value; + bannerImage.style.backgroundColor = bgColorSelector.value; + bannerImage.style.borderColor = borderColorSelector.value; let mainTabBgColorSelector = document.querySelector('.color-selectors-container input#main-bg-color-selector'); mainTabBgColorSelector.value = bgColorSelector.value; @@ -50,8 +50,8 @@ function setBorderValues() { let borderRadiusInput = toolboxBackground.querySelector('.border-inputs input#border-radius-input'); let borderColorSelector = toolboxBackground.querySelector('.bg-color-selectors input#border-color-selector'); - headerImage.style.border = `solid ${borderColorSelector.value} ${borderInput.value}px`; - headerImage.style.borderRadius = `${borderRadiusInput.value}px`; + bannerImage.style.border = `solid ${borderColorSelector.value} ${borderInput.value}px`; + bannerImage.style.borderRadius = `${borderRadiusInput.value}px`; } toolboxBackground.querySelectorAll('.border-inputs input') @@ -91,8 +91,8 @@ function setPatternBackground() { const patternColor = toolboxBackground.querySelector('.pattern-inputs input#pattern-color-selector').value; selectedPatternColor = patternColor.replace('#', ''); - headerImage.style.backgroundImage = getBackgroundSvg(selectedPattern, selectedPatternColor, selectedPatternOpacity); - headerImage.style.backgroundSize = `${selectedPatternSize}px`; + bannerImage.style.backgroundImage = getBackgroundSvg(selectedPattern, selectedPatternColor, selectedPatternOpacity); + bannerImage.style.backgroundSize = `${selectedPatternSize}px`; } toolboxBackground.querySelectorAll('.patterns-buttons button') diff --git a/js/toolbox-decorations.js b/js/toolbox-decorations.js index 1fd0844..ba29717 100644 --- a/js/toolbox-decorations.js +++ b/js/toolbox-decorations.js @@ -1,11 +1,8 @@ -/* ************** Elements ************** */ +import { getMainElements } from "./helpers/elements"; -let headerImageContainer = document.querySelector('.header-image-container'); -let headerImage = document.querySelector('#github-header-image'); -let title = headerImage.querySelector('.title'); -let subtitle = headerImage.querySelector('.subtitle'); - -let toolboxDecorations = document.querySelector('.toolbox-decorations'); +const { + toolboxDecorations, +} = getMainElements(); /* ************** Decorations inputs ************** */ diff --git a/js/toolbox-main.js b/js/toolbox-main.js index 2b2812d..80a4a13 100644 --- a/js/toolbox-main.js +++ b/js/toolbox-main.js @@ -1,13 +1,15 @@ -import { setFontValues } from './utils/fonts'; +import { getMainElements } from './helpers/elements'; +import { setFontValues } from './helpers/fonts'; /* ************** Elements ************** */ -let headerImageContainer = document.querySelector('.header-image-container'); -let headerImage = document.querySelector('#github-header-image'); -let title = headerImage.querySelector('.title'); -let subtitle = headerImage.querySelector('.subtitle'); - -let toolbox = document.querySelector('.toolbox'); +const { + bannerImageContainer, + bannerImage, + bannerTitle, + bannerSubtitle, + toolbox, +} = getMainElements(); /* ************** Info text inputs ************** */ @@ -15,8 +17,8 @@ function setInfoValues() { let titleInput = toolbox.querySelector('.text-inputs input#title-input'); let subtitleInput = toolbox.querySelector('.text-inputs input#subtitle-input'); - title.innerText = titleInput.value || ''; - subtitle.innerText = subtitleInput.value || ''; + bannerTitle.innerText = titleInput.value || ''; + bannerSubtitle.innerText = subtitleInput.value || ''; } toolbox.querySelectorAll('.text-inputs input') @@ -35,9 +37,9 @@ function setColorValues() { let titleColorSelector = toolbox.querySelector('.color-selectors-container input#title-color-selector'); let subtitleColorSelector = toolbox.querySelector('.color-selectors-container input#subtitle-color-selector'); - headerImage.style.backgroundColor = bgColorSelector.value; - title.style.color = titleColorSelector.value; - subtitle.style.color = subtitleColorSelector.value; + bannerImage.style.backgroundColor = bgColorSelector.value; + bannerTitle.style.color = titleColorSelector.value; + bannerSubtitle.style.color = subtitleColorSelector.value; let backgroundTabBgColorSelector = document.querySelector('.bg-color-selectors input#background-bg-color-selector'); backgroundTabBgColorSelector.value = bgColorSelector.value; @@ -56,20 +58,20 @@ function setSizeValues() { let widthInput = toolbox.querySelector('.size-inputs input#width-input'); let heightInput = toolbox.querySelector('.size-inputs input#height-input'); - if (Number(widthInput.value) > headerImageContainer.clientWidth) { - headerImage.style.zoom = headerImageContainer.clientWidth / widthInput.value; + if (Number(widthInput.value) > bannerImageContainer.clientWidth) { + bannerImage.style.zoom = bannerImageContainer.clientWidth / widthInput.value; } else { - headerImage.style.zoom = 1; + bannerImage.style.zoom = 1; } - headerImage.style.width = `${widthInput.value}px`; - headerImage.style.height = `${heightInput.value}px`; + bannerImage.style.width = `${widthInput.value}px`; + bannerImage.style.height = `${heightInput.value}px`; } function setPaddingValues() { let paddingInput = toolbox.querySelector('.size-inputs input#paddings-input'); let paddingValue = `${paddingInput.value}px`; - headerImage.style.padding = paddingValue; + bannerImage.style.padding = paddingValue; document.querySelectorAll('.img-decoration-container img') .forEach(decoration => { @@ -99,9 +101,23 @@ toolbox.querySelectorAll('.size-inputs input') /* ************** Align buttons ************** */ -function setAlignValues(alignValue) { - headerImage.style.alignItems = alignValue; -} +// Github theme + +let paddingValue = document.querySelector('#paddings-input').value || 25; +let padding = `${paddingValue}px`; + +const imageDecorationContainer = document.querySelector('.img-decoration-container'); +const imgDecorationElement = document.createElement('img'); +imgDecorationElement.className = 'img-decoration'; +imgDecorationElement.src = './images/decorations/my-octocat.png'; +imgDecorationElement.style.position = 'absolute'; +imgDecorationElement.style.bottom = 'calc(50%)'; +imgDecorationElement.style.transform = 'translateY(50%)' +imgDecorationElement.style.left = 'auto'; +imgDecorationElement.style.right = padding; +imgDecorationElement.style.width = '77px'; +imgDecorationElement.alt = 'Header image decoration' +imageDecorationContainer.appendChild(imgDecorationElement) toolbox.querySelectorAll('.align-buttons button') .forEach(button => { @@ -110,7 +126,30 @@ toolbox.querySelectorAll('.align-buttons button') e.target.parentNode : e.target; const alignValue = element.getAttribute('data-align-value'); - setAlignValues(alignValue); + bannerImage.style.alignItems = alignValue; + + const paddingValue = document.querySelector('#paddings-input').value || 25; + const padding = `${paddingValue}px`; + const imageDecoration = document.querySelector('.img-decoration-container img'); + if (alignValue === 'flex-end') { + document.querySelector('.img-decoration-container .img-decoration-2')?.remove(); + imageDecoration.style.left = padding; + imageDecoration.style.right = 'auto'; + } else if (alignValue === 'flex-start') { + document.querySelector('.img-decoration-container .img-decoration-2')?.remove(); + imageDecoration.style.left = 'auto'; + imageDecoration.style.right = padding; + } else if (alignValue === 'center') { + imageDecoration.style.left = 'auto'; + imageDecoration.style.right = padding; + if (!document.querySelector('.img-decoration-container .img-decoration-2')) { + const clonedImageDecoration = imageDecoration.cloneNode(true); + clonedImageDecoration.style.left = padding; + clonedImageDecoration.style.right = 'auto'; + clonedImageDecoration.className = 'img-decoration-2'; + imageDecorationContainer.appendChild(clonedImageDecoration) + } + } }); }) @@ -129,8 +168,8 @@ function setFontSizeValues() { let titleFontSizeInput = toolbox.querySelector('.font-size-inputs input#title-font-size-input'); let subtitleFontSizeInput = toolbox.querySelector('.font-size-inputs input#sutitle-font-size-input'); - title.style.fontSize = `${titleFontSizeInput.value}px`; - subtitle.style.fontSize = `${subtitleFontSizeInput.value}px`; + bannerTitle.style.fontSize = `${titleFontSizeInput.value}px`; + bannerSubtitle.style.fontSize = `${subtitleFontSizeInput.value}px`; } toolbox.querySelectorAll('.font-size-inputs input') diff --git a/js/toolbox-presets.js b/js/toolbox-presets.js new file mode 100644 index 0000000..516acbd --- /dev/null +++ b/js/toolbox-presets.js @@ -0,0 +1,31 @@ +import { getAllThemes, setTheme } from "./helpers/helpers"; +import { getMainElements } from "./helpers/elements" + +const themes = getAllThemes(); +const { toolboxPresets } = getMainElements(); + +document.addEventListener('DOMContentLoaded', function () { + if (toolboxPresets) { + toolboxPresets.querySelectorAll('.theme-button-white')[0].addEventListener('click', (e) => { + document.querySelector('.tab .tablinks[data-name="main-section"]').click(); + }) + + themes.forEach(theme => { + const div = document.createElement('div'); + div.classList.add('theme-button'); + div.setAttribute('role', 'button') + + const img = document.createElement('img'); + img.src = './images/theme-previews/' + theme.previewImage; + img.alt = 'Theme image'; + + img.addEventListener('click', (e) => { + setTheme(theme); + }); + + div.appendChild(img); + + toolboxPresets.appendChild(div); + }) + } +}); \ No newline at end of file diff --git a/js/utils/fonts.js b/js/utils/fonts.js deleted file mode 100644 index 3890c62..0000000 --- a/js/utils/fonts.js +++ /dev/null @@ -1,91 +0,0 @@ -/* ************** Elements ************** */ - -let headerImageContainer = document.querySelector('.header-image-container'); -let headerImage = document.querySelector('#github-header-image'); -let title = headerImage.querySelector('.title'); -let subtitle = headerImage.querySelector('.subtitle'); - -let toolbox = document.querySelector('.toolbox'); - -/* ************** Fonts ************** */ - -function listFonts() { - let { fonts } = document; - const it = fonts.entries(); - - let arr = []; - let done = false; - - while (!done) { - const font = it.next(); - if (!font.done) { - arr.push(font.value[0].family); - } else { - done = font.done; - } - } - - return [...new Set(arr)]; -} - -function setFontValues() { - let titleFontSelect = toolbox.querySelector('.font-selectors-container #title-font-selector'); - let subtitleFontSelect = toolbox.querySelector('.font-selectors-container #subtitle-font-selector'); - - document.fonts.ready.then(() => { - let titleFont = getFont(titleFontSelect.value) - titleFont.load().then(function (loadedFont) { - document.fonts.add(loadedFont) - console.log('Font loaded an added'); - title.style.fontFamily = `"${titleFontSelect.value}"`; - }).catch(function (error) { - console.log('Failed to load font: ' + error) - }) - - let subTitlefont = getFont(subtitleFontSelect.value) - subTitlefont.load().then(function (loadedFont) { - document.fonts.add(loadedFont) - console.log('Font loaded an added'); - subtitle.style.fontFamily = `"${subtitleFontSelect.value}"`; - }).catch(function (error) { - console.log('Failed to load font: ' + error) - }) - }); -} - -function getFont(fontName) { - switch (fontName) { - case 'Kalam': - return new FontFace('Kalam', 'url("./fonts/Kalam-Regular.ttf")'); - case 'Poppins': - return new FontFace('Poppins', 'url("./fonts/Poppins-Regular.ttf")'); - case 'Athiti': - return new FontFace('Athiti', 'url("./fonts/Athiti-Regular.ttf")'); - case 'MavenPro': - return new FontFace('MavenPro', 'url("./fonts/MavenPro-Regular.ttf")'); - case 'Ubuntu': - return new FontFace('Ubuntu', 'url("./fonts/Ubuntu-Regular.ttf")'); - case 'IstokWeb': - return new FontFace('IstokWeb', 'url("./fonts/IstokWeb-Regular.ttf")'); - case 'Courgette': - return new FontFace('Courgette', 'url("./fonts/Courgette-Regular.ttf")'); - case 'Quattrocento': - return new FontFace('Quattrocento', 'url("./fonts/Quattrocento-Regular.ttf")'); - case 'DellaRespira': - return new FontFace('DellaRespira', 'url("./fonts/DellaRespira-Regular.ttf")'); - case 'Lato': - return new FontFace('Lato', 'url("./fonts/Lato-Regular.ttf")'); - case 'Martel': - return new FontFace('Martel', 'url("./fonts/Martel-Regular.ttf")'); - case 'Lancelot': - return new FontFace('Lancelot', 'url("./fonts/Lancelot-Regular.ttf")'); - case 'Playball': - return new FontFace('Playball', 'url("./fonts/Playball-Regular.ttf")'); - case 'LifeSavers': - return new FontFace('LifeSavers', 'url("./fonts/LifeSavers-Regular.ttf")'); - default: - return new FontFace('Kalam', 'url("./fonts/Kalam-Regular.ttf")'); - } -} - -export { setFontValues }; \ No newline at end of file diff --git a/js/utils/themes.js b/js/utils/themes.js deleted file mode 100644 index d218605..0000000 --- a/js/utils/themes.js +++ /dev/null @@ -1,131 +0,0 @@ -function getRandomTheme() { - const themes = [{ - background: '#4078C0', title: '#FFFFFF', subtitle: '#FFFFFF', - border: '#FFFFFF', borderSize: 0, borderRadius: 7, textAlign: 'flex-start', - decoration: 'my-octocat.png', decorationSize: 77, - pattern: 'jigsaw', patternColor: '#FFFFFF', patternOpacity: 0.25 - }, { - background: '#4078C0', title: '#FFFFFF', subtitle: '#05F1FA', - border: '#FFFFFF', borderSize: 0, borderRadius: 7, textAlign: 'flex-start', - decoration: 'octocat.png', decorationSize: 100, - pattern: 'floating-cogs', patternColor: '#FFFFFF', patternOpacity: 0.25 - }, { - background: '#112137', title: '#FFFFFF', subtitle: '#05F1FA', - border: '#eeff00', borderSize: 4, borderRadius: 10, textAlign: 'center', - decoration: 'github-mark.png', decorationSize: 100, - pattern: 'i-like-food', patternColor: '#FFFFFF', patternOpacity: 0.25 - }, { - background: '#000000', title: '#FFFFFF', subtitle: '#c671d9', - border: '#FFFFFF', borderSize: 0, borderRadius: 15, textAlign: 'center', - decoration: 'code.png', decorationSize: 100, - pattern: 'endless-constellation', patternColor: '#87d2ff', patternOpacity: 0.7 - }, { - background: '#ff0066', title: '#FFFFFF', subtitle: '#0f0006', - border: '#FFFFFF', borderSize: 0, borderRadius: 15, textAlign: 'flex-end', - decoration: 'dev-badge.png', decorationSize: 100, - pattern: 'temple', patternColor: '#FFFFFF', patternOpacity: 0.25 - }, { - background: '#FFFFFF', title: '#f7b3ce', subtitle: '#55c1ae', - border: '#88aedc', borderSize: 7, borderRadius: 0, textAlign: 'flex-end', - decoration: 'dev-rainbow.png', decorationSize: 100, - pattern: 'bubbles', patternColor: '#f3f095', patternOpacity: 0.7 - }, { - background: '#207e78', title: '#d0b506', subtitle: '#8fd100', - border: '#ffffff', borderSize: 0, borderRadius: 7, textAlign: 'center', - decoration: 'dev-white.png', decorationSize: 100, - pattern: 'i-like-food', patternColor: '#1b96f3', patternOpacity: 0.45 - }, { - background: '#4078c0', title: '#ffffff', subtitle: '#ffffff', - border: '#ffffff', borderSize: 0, borderRadius: 7, textAlign: 'flex-start', - decoration: 'my-octocat.png', decorationSize: 100, - pattern: 'jigsaw', patternColor: '#ffffff', patternOpacity: 0.25 - }, { - background: '#000000', title: '#4cfca7', subtitle: '#0ad6ff', - border: '#ffffff', borderSize: 0, borderRadius: 25, textAlign: 'flex-end', - decoration: 'dev-white.png', decorationSize: 145, - pattern: 'overlapping-circles', patternColor: '#ffffff', patternOpacity: 0.3 - }, { - background: '#9340bf', title: '#fbff00', subtitle: '#ffffff', - border: '#ffffff', borderSize: 0, borderRadius: 7, textAlign: 'center', - decoration: 'none', decorationSize: 100, - pattern: 'jigsaw', patternColor: '#ffffff', patternOpacity: 0.25, - titleFont: 'LifeSavers', subtitleFont: 'DellaRespira' - }, { - background: '#012d4e', title: '#5affb7', subtitle: '#00d6bd', - border: '#ffffff', borderSize: 0, borderRadius: 200, textAlign: 'flex-end', - decoration: 'binary-code.png', decorationSize: 122, - pattern: 'circuit-board', patternColor: '#94ffdb', patternOpacity: 0.3, - titleFont: 'Ubuntu', subtitleFont: 'Courier New' - }, { - background: '#002a52', title: '#ffffff', subtitle: '#ffffff', - border: '#b4b701', borderSize: 3, borderRadius: 0, textAlign: 'center', - decoration: 'coding.png', decorationSize: 91, - pattern: 'lisbon', patternColor: '#bbff00', patternOpacity: 0.5, - titleFont: 'DellaRespira', subtitleFont: 'Courgette' - }, { - background: '#96349d', title: '#ffffff', subtitle: '#bef3fe', - border: '#ffffff', borderSize: 0, borderRadius: 7, textAlign: 'center', - decoration: 'rocket.png', decorationSize: 95, - pattern: 'endless-clouds', patternColor: '#ffffff', patternOpacity: 0.25, - titleFont: 'MavenPro', subtitleFont: 'Quattrocento' - }, { - background: '#6cbf40', title: '#ffffff', subtitle: '#e7eb00', - border: '#ffffff', borderSize: 0, borderRadius: 11, textAlign: 'flex-end', - decoration: 'idea.png', decorationSize: 80, - pattern: 'leaf', patternColor: '#ffffff', patternOpacity: 0.25, - titleFont: 'DellaRespira', subtitleFont: 'DellaRespira' - }, { - background: '#252646', title: '#fdbf00', subtitle: '#64e1dc', - border: '#ffffff', borderSize: 0, borderRadius: 15, textAlign: 'flex-end', - decoration: 'coding-screen.png', decorationSize: 116, - pattern: 'github', patternColor: '#ffffff', patternOpacity: 0.1, - titleFont: 'Tahoma', subtitleFont: 'Courgette' - }, { - background: '#001061', title: '#ffffff', subtitle: '#ffffff', - border: '#ffffff', borderSize: 0, borderRadius: 0, textAlign: 'center', - decoration: 'apple.png', decorationSize: 59, - pattern: 'endless-constellation', patternColor: '#ffffff', patternOpacity: 0.5, - titleFont: 'MavenPro', subtitleFont: 'MavenPro' - }, { - background: '#b83700', title: '#ffd500', subtitle: '#41d7e1', - border: '#ffffff', borderSize: 0, borderRadius: 15, textAlign: 'flex-start', - decoration: 'idea.png', decorationSize: 100, - pattern: 'falling-triangles', patternColor: '#fff700', patternOpacity: 0.15, - titleFont: 'Ubuntu', subtitleFont: 'Trebuchet MS' - }, { - background: '#4099bf', title: '#ffffff', subtitle: '#ffc6b1', - border: '#ffffff', borderSize: 5, borderRadius: 7, textAlign: 'flex-start', - decoration: 'my-octocat.png', decorationSize: 100, - pattern: 'bubbles', patternColor: '#ffffff', patternOpacity: 0.25, titleFont: 'Ubuntu', subtitleFont: 'Courgette' - }, { - background: '#eeb25d', title: '#ffffff', subtitle: '#000000', - border: '#ffffff', borderSize: 5, borderRadius: 37, textAlign: 'center', - decoration: 'octocat.png', decorationSize: 69, - pattern: 'bubbles', patternColor: '#ffffff', patternOpacity: 0.25, - titleFont: 'DellaRespira', subtitleFont: 'LifeSavers' - }, { - background: '#000000', title: '#ffffff', subtitle: '#ffffff', - border: '#299900', borderSize: 2, borderRadius: 0, textAlign: 'flex-start', - decoration: 'github-mark.png', decorationSize: 60, - pattern: 'i-like-food', patternColor: '#27eb00', patternOpacity: 0.35, - titleFont: 'MavenPro', subtitleFont: 'MavenPro' - }, { - background: '#000000', title: '#ffffff', subtitle: '#00c732', - border: '#ffffff', borderSize: 0, borderRadius: 0, textAlign: 'flex-end', - decoration: 'coding.png', decorationSize: 100, - pattern: 'circuit-board', patternColor: '#00ff6e', patternOpacity: 0.4, - titleFont: 'Courier New', subtitleFont: 'Courier New' - }, { - background: '#37cd8c', title: '#d5fe06', subtitle: '#85ffd0', - border: '#ffffff', borderSize: 0, borderRadius: 7, textAlign: 'flex-start', - decoration: 'github-mark.png', decorationSize: 64, - pattern: 'temple', patternColor: '#ffffff', patternOpacity: 0.25, - titleFont: 'Lancelot', subtitleFont: 'Athiti' - }, - ] - - let random = Math.floor(Math.random() * themes.length); - return themes[random]; -} - -export { getRandomTheme }; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b493b91..f026cf3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,307 +1,2033 @@ { "name": "github-profile-header-generator", - "version": "1.0.0", - "lockfileVersion": 1, + "version": "2.0.0", + "lockfileVersion": 2, "requires": true, - "dependencies": { - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "packages": { + "": { + "name": "github-profile-header-generator", + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "@zumer/snapdom": "^1.9.7" + }, + "devDependencies": { + "sass": "^1.89.2", + "vite": "^7.0.3", + "vite-plugin-html-inject": "^1.1.2" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz", + "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==", + "cpu": [ + "ppc64" + ], "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz", + "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz", + "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz", + "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz", + "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz", + "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz", + "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz", + "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz", + "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz", + "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz", + "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz", + "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz", + "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz", + "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz", + "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz", + "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz", + "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz", + "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz", + "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz", + "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz", + "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz", + "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz", + "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz", + "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz", + "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz", + "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "base64-arraybuffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", - "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==" + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz", + "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz", + "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz", + "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz", + "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz", + "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz", + "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz", + "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz", + "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz", + "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz", + "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz", + "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz", + "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz", + "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz", + "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz", + "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz", + "integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz", + "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz", + "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz", + "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz", + "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/@zumer/snapdom": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@zumer/snapdom/-/snapdom-1.9.7.tgz", + "integrity": "sha512-tZvEq0e0NYn1gEyPCPZPOVQ5ihSFEGi2ppvpzi0dRL9vruPh8JrpPkcoG4IdqJHnF4y68wU0GZvlsQqEoeMCsg==", + "license": "MIT" + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "requires": { - "fill-range": "^7.0.1" + "optional": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" } }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "css-line-break": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", - "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", - "requires": { - "utrie": "^1.0.2" + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "esbuild": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.23.tgz", - "integrity": "sha512-XjnIcZ9KB6lfonCa+jRguXyRYcldmkyZ99ieDksqW/C8bnyEX299yA4QH2XcgijCgaddEZePPTgvx/2imsq7Ig==", + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, - "requires": { - "esbuild-android-arm64": "0.14.23", - "esbuild-darwin-64": "0.14.23", - "esbuild-darwin-arm64": "0.14.23", - "esbuild-freebsd-64": "0.14.23", - "esbuild-freebsd-arm64": "0.14.23", - "esbuild-linux-32": "0.14.23", - "esbuild-linux-64": "0.14.23", - "esbuild-linux-arm": "0.14.23", - "esbuild-linux-arm64": "0.14.23", - "esbuild-linux-mips64le": "0.14.23", - "esbuild-linux-ppc64le": "0.14.23", - "esbuild-linux-riscv64": "0.14.23", - "esbuild-linux-s390x": "0.14.23", - "esbuild-netbsd-64": "0.14.23", - "esbuild-openbsd-64": "0.14.23", - "esbuild-sunos-64": "0.14.23", - "esbuild-windows-32": "0.14.23", - "esbuild-windows-64": "0.14.23", - "esbuild-windows-arm64": "0.14.23" + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esbuild": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz", + "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.6", + "@esbuild/android-arm": "0.25.6", + "@esbuild/android-arm64": "0.25.6", + "@esbuild/android-x64": "0.25.6", + "@esbuild/darwin-arm64": "0.25.6", + "@esbuild/darwin-x64": "0.25.6", + "@esbuild/freebsd-arm64": "0.25.6", + "@esbuild/freebsd-x64": "0.25.6", + "@esbuild/linux-arm": "0.25.6", + "@esbuild/linux-arm64": "0.25.6", + "@esbuild/linux-ia32": "0.25.6", + "@esbuild/linux-loong64": "0.25.6", + "@esbuild/linux-mips64el": "0.25.6", + "@esbuild/linux-ppc64": "0.25.6", + "@esbuild/linux-riscv64": "0.25.6", + "@esbuild/linux-s390x": "0.25.6", + "@esbuild/linux-x64": "0.25.6", + "@esbuild/netbsd-arm64": "0.25.6", + "@esbuild/netbsd-x64": "0.25.6", + "@esbuild/openbsd-arm64": "0.25.6", + "@esbuild/openbsd-x64": "0.25.6", + "@esbuild/openharmony-arm64": "0.25.6", + "@esbuild/sunos-x64": "0.25.6", + "@esbuild/win32-arm64": "0.25.6", + "@esbuild/win32-ia32": "0.25.6", + "@esbuild/win32-x64": "0.25.6" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "optional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/immutable": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "dev": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" } }, - "esbuild-android-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.23.tgz", - "integrity": "sha512-k9sXem++mINrZty1v4FVt6nC5BQCFG4K2geCIUUqHNlTdFnuvcqsY7prcKZLFhqVC1rbcJAr9VSUGFL/vD4vsw==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "optional": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "dev": true, "optional": true }, - "esbuild-darwin-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.23.tgz", - "integrity": "sha512-lB0XRbtOYYL1tLcYw8BoBaYsFYiR48RPrA0KfA/7RFTr4MV7Bwy/J4+7nLsVnv9FGuQummM3uJ93J3ptaTqFug==", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rollup": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz", + "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.44.2", + "@rollup/rollup-android-arm64": "4.44.2", + "@rollup/rollup-darwin-arm64": "4.44.2", + "@rollup/rollup-darwin-x64": "4.44.2", + "@rollup/rollup-freebsd-arm64": "4.44.2", + "@rollup/rollup-freebsd-x64": "4.44.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.44.2", + "@rollup/rollup-linux-arm-musleabihf": "4.44.2", + "@rollup/rollup-linux-arm64-gnu": "4.44.2", + "@rollup/rollup-linux-arm64-musl": "4.44.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.44.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2", + "@rollup/rollup-linux-riscv64-gnu": "4.44.2", + "@rollup/rollup-linux-riscv64-musl": "4.44.2", + "@rollup/rollup-linux-s390x-gnu": "4.44.2", + "@rollup/rollup-linux-x64-gnu": "4.44.2", + "@rollup/rollup-linux-x64-musl": "4.44.2", + "@rollup/rollup-win32-arm64-msvc": "4.44.2", + "@rollup/rollup-win32-ia32-msvc": "4.44.2", + "@rollup/rollup-win32-x64-msvc": "4.44.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/sass": { + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", + "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/vite": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.3.tgz", + "integrity": "sha512-y2L5oJZF7bj4c0jgGYgBNSdIu+5HF+m68rn2cQXFbGoShdhV1phX9rbnxy9YXj82aS8MMsCLAAFkRxZeWdldrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "picomatch": "^4.0.2", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-html-inject": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vite-plugin-html-inject/-/vite-plugin-html-inject-1.1.2.tgz", + "integrity": "sha512-4DWANEcAw73H5JLWTAI4EvXdSyoGqGq/Is9fTRjpF+SJLor58LNdqB+YYnK3FOLwx6LMTAn4z1hkiRyc52lYLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + } + }, + "dependencies": { + "@esbuild/aix-ppc64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz", + "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==", "dev": true, "optional": true }, - "esbuild-darwin-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.23.tgz", - "integrity": "sha512-yat73Z/uJ5tRcfRiI4CCTv0FSnwErm3BJQeZAh+1tIP0TUNh6o+mXg338Zl5EKChD+YGp6PN+Dbhs7qa34RxSw==", + "@esbuild/android-arm": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz", + "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==", "dev": true, "optional": true }, - "esbuild-freebsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.23.tgz", - "integrity": "sha512-/1xiTjoLuQ+LlbfjJdKkX45qK/M7ARrbLmyf7x3JhyQGMjcxRYVR6Dw81uH3qlMHwT4cfLW4aEVBhP1aNV7VsA==", + "@esbuild/android-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz", + "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==", "dev": true, "optional": true }, - "esbuild-freebsd-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.23.tgz", - "integrity": "sha512-uyPqBU/Zcp6yEAZS4LKj5jEE0q2s4HmlMBIPzbW6cTunZ8cyvjG6YWpIZXb1KK3KTJDe62ltCrk3VzmWHp+iLg==", + "@esbuild/android-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz", + "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==", "dev": true, "optional": true }, - "esbuild-linux-32": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.23.tgz", - "integrity": "sha512-37R/WMkQyUfNhbH7aJrr1uCjDVdnPeTHGeDhZPUNhfoHV0lQuZNCKuNnDvlH/u/nwIYZNdVvz1Igv5rY/zfrzQ==", + "@esbuild/darwin-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz", + "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==", "dev": true, "optional": true }, - "esbuild-linux-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.23.tgz", - "integrity": "sha512-H0gztDP60qqr8zoFhAO64waoN5yBXkmYCElFklpd6LPoobtNGNnDe99xOQm28+fuD75YJ7GKHzp/MLCLhw2+vQ==", + "@esbuild/darwin-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz", + "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==", "dev": true, "optional": true }, - "esbuild-linux-arm": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.23.tgz", - "integrity": "sha512-x64CEUxi8+EzOAIpCUeuni0bZfzPw/65r8tC5cy5zOq9dY7ysOi5EVQHnzaxS+1NmV+/RVRpmrzGw1QgY2Xpmw==", + "@esbuild/freebsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz", + "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==", "dev": true, "optional": true }, - "esbuild-linux-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.23.tgz", - "integrity": "sha512-c4MLOIByNHR55n3KoYf9hYDfBRghMjOiHLaoYLhkQkIabb452RWi+HsNgB41sUpSlOAqfpqKPFNg7VrxL3UX9g==", + "@esbuild/freebsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz", + "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==", "dev": true, "optional": true }, - "esbuild-linux-mips64le": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.23.tgz", - "integrity": "sha512-kHKyKRIAedYhKug2EJpyJxOUj3VYuamOVA1pY7EimoFPzaF3NeY7e4cFBAISC/Av0/tiV0xlFCt9q0HJ68IBIw==", + "@esbuild/linux-arm": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz", + "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==", "dev": true, "optional": true }, - "esbuild-linux-ppc64le": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.23.tgz", - "integrity": "sha512-7ilAiJEPuJJnJp/LiDO0oJm5ygbBPzhchJJh9HsHZzeqO+3PUzItXi+8PuicY08r0AaaOe25LA7sGJ0MzbfBag==", + "@esbuild/linux-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz", + "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==", "dev": true, "optional": true }, - "esbuild-linux-riscv64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.23.tgz", - "integrity": "sha512-fbL3ggK2wY0D8I5raPIMPhpCvODFE+Bhb5QGtNP3r5aUsRR6TQV+ZBXIaw84iyvKC8vlXiA4fWLGhghAd/h/Zg==", + "@esbuild/linux-ia32": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz", + "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==", "dev": true, "optional": true }, - "esbuild-linux-s390x": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.23.tgz", - "integrity": "sha512-GHMDCyfy7+FaNSO8RJ8KCFsnax8fLUsOrj9q5Gi2JmZMY0Zhp75keb5abTFCq2/Oy6KVcT0Dcbyo/bFb4rIFJA==", + "@esbuild/linux-loong64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz", + "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==", "dev": true, "optional": true }, - "esbuild-netbsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.23.tgz", - "integrity": "sha512-ovk2EX+3rrO1M2lowJfgMb/JPN1VwVYrx0QPUyudxkxLYrWeBxDKQvc6ffO+kB4QlDyTfdtAURrVzu3JeNdA2g==", + "@esbuild/linux-mips64el": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz", + "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==", "dev": true, "optional": true }, - "esbuild-openbsd-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.23.tgz", - "integrity": "sha512-uYYNqbVR+i7k8ojP/oIROAHO9lATLN7H2QeXKt2H310Fc8FJj4y3Wce6hx0VgnJ4k1JDrgbbiXM8rbEgQyg8KA==", + "@esbuild/linux-ppc64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz", + "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==", "dev": true, "optional": true }, - "esbuild-sunos-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.23.tgz", - "integrity": "sha512-hAzeBeET0+SbScknPzS2LBY6FVDpgE+CsHSpe6CEoR51PApdn2IB0SyJX7vGelXzlyrnorM4CAsRyb9Qev4h9g==", + "@esbuild/linux-riscv64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz", + "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==", "dev": true, "optional": true }, - "esbuild-windows-32": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.23.tgz", - "integrity": "sha512-Kttmi3JnohdaREbk6o9e25kieJR379TsEWF0l39PQVHXq3FR6sFKtVPgY8wk055o6IB+rllrzLnbqOw/UV60EA==", + "@esbuild/linux-s390x": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz", + "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==", "dev": true, "optional": true }, - "esbuild-windows-64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.23.tgz", - "integrity": "sha512-JtIT0t8ymkpl6YlmOl6zoSWL5cnCgyLaBdf/SiU/Eg3C13r0NbHZWNT/RDEMKK91Y6t79kTs3vyRcNZbfu5a8g==", + "@esbuild/linux-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz", + "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==", "dev": true, "optional": true }, - "esbuild-windows-arm64": { - "version": "0.14.23", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.23.tgz", - "integrity": "sha512-cTFaQqT2+ik9e4hePvYtRZQ3pqOvKDVNarzql0VFIzhc0tru/ZgdLoXd6epLiKT+SzoSce6V9YJ+nn6RCn6SHw==", + "@esbuild/netbsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz", + "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==", "dev": true, "optional": true }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "@esbuild/netbsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz", + "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==", "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } + "optional": true }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "@esbuild/openbsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz", + "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==", "dev": true, "optional": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "@esbuild/openbsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz", + "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==", + "dev": true, + "optional": true + }, + "@esbuild/openharmony-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz", + "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==", + "dev": true, + "optional": true }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "@esbuild/sunos-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz", + "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==", "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz", + "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz", + "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz", + "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==", + "dev": true, + "optional": true + }, + "@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "optional": true, "requires": { - "is-glob": "^4.0.1" + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1", + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", "dev": true, + "optional": true + }, + "@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.2.tgz", + "integrity": "sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.2.tgz", + "integrity": "sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.2.tgz", + "integrity": "sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.2.tgz", + "integrity": "sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-arm64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.2.tgz", + "integrity": "sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-x64": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.2.tgz", + "integrity": "sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.2.tgz", + "integrity": "sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.2.tgz", + "integrity": "sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.2.tgz", + "integrity": "sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.2.tgz", + "integrity": "sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.2.tgz", + "integrity": "sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.2.tgz", + "integrity": "sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.2.tgz", + "integrity": "sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.2.tgz", + "integrity": "sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.2.tgz", + "integrity": "sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.2.tgz", + "integrity": "sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.2.tgz", + "integrity": "sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.2.tgz", + "integrity": "sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.2.tgz", + "integrity": "sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.2.tgz", + "integrity": "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==", + "dev": true, + "optional": true + }, + "@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "@zumer/snapdom": { + "version": "1.9.7", + "resolved": "https://registry.npmjs.org/@zumer/snapdom/-/snapdom-1.9.7.tgz", + "integrity": "sha512-tZvEq0e0NYn1gEyPCPZPOVQ5ihSFEGi2ppvpzi0dRL9vruPh8JrpPkcoG4IdqJHnF4y68wU0GZvlsQqEoeMCsg==" + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "optional": true, "requires": { - "function-bind": "^1.1.1" + "fill-range": "^7.1.1" } }, - "html2canvas": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", - "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, "requires": { - "css-line-break": "^2.1.0", - "text-segmentation": "^1.0.3" + "readdirp": "^4.0.1" } }, - "immutable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", - "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", - "dev": true + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "optional": true }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "esbuild": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz", + "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==", "dev": true, "requires": { - "binary-extensions": "^2.0.0" + "@esbuild/aix-ppc64": "0.25.6", + "@esbuild/android-arm": "0.25.6", + "@esbuild/android-arm64": "0.25.6", + "@esbuild/android-x64": "0.25.6", + "@esbuild/darwin-arm64": "0.25.6", + "@esbuild/darwin-x64": "0.25.6", + "@esbuild/freebsd-arm64": "0.25.6", + "@esbuild/freebsd-x64": "0.25.6", + "@esbuild/linux-arm": "0.25.6", + "@esbuild/linux-arm64": "0.25.6", + "@esbuild/linux-ia32": "0.25.6", + "@esbuild/linux-loong64": "0.25.6", + "@esbuild/linux-mips64el": "0.25.6", + "@esbuild/linux-ppc64": "0.25.6", + "@esbuild/linux-riscv64": "0.25.6", + "@esbuild/linux-s390x": "0.25.6", + "@esbuild/linux-x64": "0.25.6", + "@esbuild/netbsd-arm64": "0.25.6", + "@esbuild/netbsd-x64": "0.25.6", + "@esbuild/openbsd-arm64": "0.25.6", + "@esbuild/openbsd-x64": "0.25.6", + "@esbuild/openharmony-arm64": "0.25.6", + "@esbuild/sunos-x64": "0.25.6", + "@esbuild/win32-arm64": "0.25.6", + "@esbuild/win32-ia32": "0.25.6", + "@esbuild/win32-x64": "0.25.6" } }, - "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "optional": true, "requires": { - "has": "^1.0.3" + "to-regex-range": "^5.0.1" } }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "immutable": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", + "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "optional": true }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "optional": true, "requires": { "is-extglob": "^2.1.1" } @@ -310,107 +2036,134 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "dev": true, + "optional": true }, - "nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "optional": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "optional": true }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "dev": true, + "optional": true }, "postcss": { - "version": "8.4.7", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.7.tgz", - "integrity": "sha512-L9Ye3r6hkkCeOETQX6iOaWZgjp3LL6Lpqm6EtgbKrgqGGteRMNb9vzBfRL96YOSu8o7x3MfIH9Mo5cPJFGrW6A==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "requires": { - "nanoid": "^3.3.1", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" } }, "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true }, "rollup": { - "version": "2.68.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.68.0.tgz", - "integrity": "sha512-XrMKOYK7oQcTio4wyTz466mucnd8LzkiZLozZ4Rz0zQD+HeX4nUK4B8GrTX/2EvN2/vBF/i2WnaXboPxo0JylA==", + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.2.tgz", + "integrity": "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==", "dev": true, "requires": { + "@rollup/rollup-android-arm-eabi": "4.44.2", + "@rollup/rollup-android-arm64": "4.44.2", + "@rollup/rollup-darwin-arm64": "4.44.2", + "@rollup/rollup-darwin-x64": "4.44.2", + "@rollup/rollup-freebsd-arm64": "4.44.2", + "@rollup/rollup-freebsd-x64": "4.44.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.44.2", + "@rollup/rollup-linux-arm-musleabihf": "4.44.2", + "@rollup/rollup-linux-arm64-gnu": "4.44.2", + "@rollup/rollup-linux-arm64-musl": "4.44.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.44.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2", + "@rollup/rollup-linux-riscv64-gnu": "4.44.2", + "@rollup/rollup-linux-riscv64-musl": "4.44.2", + "@rollup/rollup-linux-s390x-gnu": "4.44.2", + "@rollup/rollup-linux-x64-gnu": "4.44.2", + "@rollup/rollup-linux-x64-musl": "4.44.2", + "@rollup/rollup-win32-arm64-msvc": "4.44.2", + "@rollup/rollup-win32-ia32-msvc": "4.44.2", + "@rollup/rollup-win32-x64-msvc": "4.44.2", + "@types/estree": "1.0.8", "fsevents": "~2.3.2" } }, "sass": { - "version": "1.49.9", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz", - "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==", + "version": "1.89.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", + "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", "dev": true, "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", + "@parcel/watcher": "^2.4.1", + "chokidar": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" } }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "text-segmentation": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", - "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, "requires": { - "utrie": "^1.0.2" + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "dependencies": { + "fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true + } } }, "to-regex-range": { @@ -418,30 +2171,46 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "optional": true, "requires": { "is-number": "^7.0.0" } }, - "utrie": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", - "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", - "requires": { - "base64-arraybuffer": "^1.0.2" - } - }, "vite": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.8.4.tgz", - "integrity": "sha512-GwtOkkaT2LDI82uWZKcrpRQxP5tymLnC7hVHHqNkhFNknYr0hJUlDLfhVRgngJvAy3RwypkDCWtTKn1BjO96Dw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.3.tgz", + "integrity": "sha512-y2L5oJZF7bj4c0jgGYgBNSdIu+5HF+m68rn2cQXFbGoShdhV1phX9rbnxy9YXj82aS8MMsCLAAFkRxZeWdldrQ==", "dev": true, "requires": { - "esbuild": "^0.14.14", - "fsevents": "~2.3.2", - "postcss": "^8.4.6", - "resolve": "^1.22.0", - "rollup": "^2.59.0" + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "fsevents": "~2.3.3", + "picomatch": "^4.0.2", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" + }, + "dependencies": { + "fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true + } } + }, + "vite-plugin-html-inject": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vite-plugin-html-inject/-/vite-plugin-html-inject-1.1.2.tgz", + "integrity": "sha512-4DWANEcAw73H5JLWTAI4EvXdSyoGqGq/Is9fTRjpF+SJLor58LNdqB+YYnK3FOLwx6LMTAn4z1hkiRyc52lYLg==", + "dev": true } } } diff --git a/package.json b/package.json index 94083ca..29b7809 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "github-profile-header-generator", - "version": "1.0.0", + "version": "2.0.0", "description": "A simple but nice header image generator for your Github profile", "scripts": { "dev": "vite", @@ -19,10 +19,11 @@ }, "homepage": "https://github.com/leviarista/github-profile-header-generator#readme", "devDependencies": { - "sass": "^1.49.9", - "vite": "^2.8.0" + "sass": "^1.89.2", + "vite": "^7.0.3", + "vite-plugin-html-inject": "^1.1.2" }, "dependencies": { - "html2canvas": "^1.4.1" + "@zumer/snapdom": "^1.9.7" } } diff --git a/partials/footer.html b/partials/footer.html new file mode 100644 index 0000000..76c11ea --- /dev/null +++ b/partials/footer.html @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/partials/head.html b/partials/head.html new file mode 100644 index 0000000..ad9f034 --- /dev/null +++ b/partials/head.html @@ -0,0 +1,64 @@ + + + + + Github Profile Header Generator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/partials/header.html b/partials/header.html new file mode 100644 index 0000000..a64ca6c --- /dev/null +++ b/partials/header.html @@ -0,0 +1,17 @@ +
+

+ Github logo
+ Github Profile
+ Header Generator +

+

+ A simple but nice header image generator
for your Github profile or project. +

+

+ + Star + +

+
\ No newline at end of file diff --git a/partials/how-to.html b/partials/how-to.html new file mode 100644 index 0000000..8281682 --- /dev/null +++ b/partials/how-to.html @@ -0,0 +1,24 @@ +
+

How to use it?

+
    +
  1. + Create a nice github header image.
    + +
  2. +
  3. + Create your GitHub profile README
    following + + this guide. + +
  4. +
  5. Upload your header to your profile/projecy repo.
  6. +
  7. + Add this line to your README: +

    ![Header](./your-header-image-name.png)

    +
  8. +
+
\ No newline at end of file diff --git a/partials/modals/feedback.html b/partials/modals/feedback.html new file mode 100644 index 0000000..edd6356 --- /dev/null +++ b/partials/modals/feedback.html @@ -0,0 +1,21 @@ + \ No newline at end of file diff --git a/partials/modals/info.html b/partials/modals/info.html new file mode 100644 index 0000000..8be0bf9 --- /dev/null +++ b/partials/modals/info.html @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/partials/modals/special-message.html b/partials/modals/special-message.html new file mode 100644 index 0000000..c7521fd --- /dev/null +++ b/partials/modals/special-message.html @@ -0,0 +1,27 @@ + \ No newline at end of file diff --git a/partials/scripts.html b/partials/scripts.html new file mode 100644 index 0000000..eedad1a --- /dev/null +++ b/partials/scripts.html @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/partials/toolbox/background.html b/partials/toolbox/background.html new file mode 100644 index 0000000..afcd5f8 --- /dev/null +++ b/partials/toolbox/background.html @@ -0,0 +1,120 @@ +
+
+
+
+ +

+
+
+ +

+
+
+
+
+ + + 0 +
+
+ + + 7 +
+
+
+
+ + +
+
+ + + 100 +
+
+ + + 0.25 +
+
+
Patterns:
+
+ + + + + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/partials/toolbox/decorations.html b/partials/toolbox/decorations.html new file mode 100644 index 0000000..188e139 --- /dev/null +++ b/partials/toolbox/decorations.html @@ -0,0 +1,95 @@ +
+
+
+
+ + + 100 +
+
+
Decorations:
+
+ + + + + + + + + + + + + + + + + + +
+
+ + +
+ + đź’ˇUse an octocat from the + Github + Octodex +
+ đź’ˇOr build your own at + MyOctocat.com + +
+
+
+
\ No newline at end of file diff --git a/partials/toolbox/main.html b/partials/toolbox/main.html new file mode 100644 index 0000000..6d16da5 --- /dev/null +++ b/partials/toolbox/main.html @@ -0,0 +1,133 @@ +
+
+
+ + +
+
+
+ + +
+
+ + +
+
+ + + 25 +
+
+
+
+ +

+
+
+ +

+
+
+ +

+
+
+
+ Text align: + + + +
+
+
+ + +
+
+ + +
+
+
+
+ + + 40 +
+
+ + + 20 +
+
+
+
\ No newline at end of file diff --git a/partials/toolbox/presets.html b/partials/toolbox/presets.html new file mode 100644 index 0000000..5180449 --- /dev/null +++ b/partials/toolbox/presets.html @@ -0,0 +1,13 @@ +
+

Choose a preset theme or customize your own with the options above.

+
+
+
+ Create my own +
+ + Upload theme + +
+
\ No newline at end of file diff --git a/partials/toolbox/result.html b/partials/toolbox/result.html new file mode 100644 index 0000000..b92058b --- /dev/null +++ b/partials/toolbox/result.html @@ -0,0 +1,36 @@ +
+
+
+
Hey! I am ...
+
Fullstack developer
+
+
+
+
+
+
+ + GH Dark +
+
+ + Random +
+
+
+ + +
+
+ + Download +
+ +
+
\ No newline at end of file diff --git a/partials/toolbox/test-fonts.html b/partials/toolbox/test-fonts.html new file mode 100644 index 0000000..b7b9ee8 --- /dev/null +++ b/partials/toolbox/test-fonts.html @@ -0,0 +1,32 @@ + +
+
Hey! I'm LevĂ­ Arista. username/project - red-hat-display
+ + + + +
Hey! I'm LevĂ­ Arista. username/project - ubuntu
+ + +
Hey! I'm LevĂ­ Arista. username/project - poppins
+
Hey! I'm LevĂ­ Arista. username/project - anonymous-pro
+
Hey! I'm LevĂ­ Arista. username/project - source-code-pro
+ + + +
Hey! I'm LevĂ­ Arista. username/project - quattrocento
+
Hey! I'm LevĂ­ Arista. username/project - della-respira
+
Hey! I'm LevĂ­ Arista. username/project - lancelot
+
Hey! I'm LevĂ­ Arista. username/project - life-savers
+
Hey! I'm LevĂ­ Arista. username/project - athiti
+
Hey! I'm LevĂ­ Arista. username/project - electrolize
+
Hey! I'm LevĂ­ Arista. username/project - passero-one
+
Hey! I'm LevĂ­ Arista. username/project - pixelify-sans
+
Hey! I'm LevĂ­ Arista. username/project - kalam
+
Hey! I'm LevĂ­ Arista. username/project - playball
+ + +
\ No newline at end of file diff --git a/public/fonts/Athiti-Regular.ttf b/public/fonts/Athiti-Regular.ttf deleted file mode 100644 index a87e926..0000000 Binary files a/public/fonts/Athiti-Regular.ttf and /dev/null differ diff --git a/public/fonts/Courgette-Regular.ttf b/public/fonts/Courgette-Regular.ttf deleted file mode 100644 index ba095b5..0000000 Binary files a/public/fonts/Courgette-Regular.ttf and /dev/null differ diff --git a/public/fonts/DellaRespira-Regular.ttf b/public/fonts/DellaRespira-Regular.ttf deleted file mode 100644 index ab54e47..0000000 Binary files a/public/fonts/DellaRespira-Regular.ttf and /dev/null differ diff --git a/public/fonts/IstokWeb-Regular.ttf b/public/fonts/IstokWeb-Regular.ttf deleted file mode 100644 index 305d169..0000000 Binary files a/public/fonts/IstokWeb-Regular.ttf and /dev/null differ diff --git a/public/fonts/Kalam-Regular.ttf b/public/fonts/Kalam-Regular.ttf deleted file mode 100644 index 2c4b795..0000000 Binary files a/public/fonts/Kalam-Regular.ttf and /dev/null differ diff --git a/public/fonts/Lancelot-Regular.ttf b/public/fonts/Lancelot-Regular.ttf deleted file mode 100644 index 03632fd..0000000 Binary files a/public/fonts/Lancelot-Regular.ttf and /dev/null differ diff --git a/public/fonts/Lato-Regular.ttf b/public/fonts/Lato-Regular.ttf deleted file mode 100644 index bb2e887..0000000 Binary files a/public/fonts/Lato-Regular.ttf and /dev/null differ diff --git a/public/fonts/LifeSavers-Regular.ttf b/public/fonts/LifeSavers-Regular.ttf deleted file mode 100644 index ebb3803..0000000 Binary files a/public/fonts/LifeSavers-Regular.ttf and /dev/null differ diff --git a/public/fonts/Martel-Regular.ttf b/public/fonts/Martel-Regular.ttf deleted file mode 100644 index ce9725e..0000000 Binary files a/public/fonts/Martel-Regular.ttf and /dev/null differ diff --git a/public/fonts/MavenPro-Regular.ttf b/public/fonts/MavenPro-Regular.ttf deleted file mode 100644 index 1308467..0000000 Binary files a/public/fonts/MavenPro-Regular.ttf and /dev/null differ diff --git a/public/fonts/Playball-Regular.ttf b/public/fonts/Playball-Regular.ttf deleted file mode 100644 index 15181a4..0000000 Binary files a/public/fonts/Playball-Regular.ttf and /dev/null differ diff --git a/public/fonts/Poppins-Regular.ttf b/public/fonts/Poppins-Regular.ttf deleted file mode 100644 index 9f0c71b..0000000 Binary files a/public/fonts/Poppins-Regular.ttf and /dev/null differ diff --git a/public/fonts/Quattrocento-Regular.ttf b/public/fonts/Quattrocento-Regular.ttf deleted file mode 100644 index 73b7278..0000000 Binary files a/public/fonts/Quattrocento-Regular.ttf and /dev/null differ diff --git a/public/fonts/Ubuntu-Regular.ttf b/public/fonts/Ubuntu-Regular.ttf deleted file mode 100644 index f98a2da..0000000 Binary files a/public/fonts/Ubuntu-Regular.ttf and /dev/null differ diff --git a/public/gphg-logo.png b/public/gphg-logo.png deleted file mode 100644 index c74c1e5..0000000 Binary files a/public/gphg-logo.png and /dev/null differ diff --git a/images/icons/close.svg b/public/images/icons/close.svg similarity index 100% rename from images/icons/close.svg rename to public/images/icons/close.svg diff --git a/public/images/icons/download-black.svg b/public/images/icons/download-black.svg new file mode 100644 index 0000000..f0ab490 --- /dev/null +++ b/public/images/icons/download-black.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/public/images/icons/download.svg b/public/images/icons/download.svg new file mode 100644 index 0000000..f28ee2b --- /dev/null +++ b/public/images/icons/download.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/public/images/icons/heart-circle.svg b/public/images/icons/heart-circle.svg new file mode 100644 index 0000000..f7be952 --- /dev/null +++ b/public/images/icons/heart-circle.svg @@ -0,0 +1 @@ +ionicons-v5-f \ No newline at end of file diff --git a/public/images/icons/heart.svg b/public/images/icons/heart.svg new file mode 100644 index 0000000..11e6e65 --- /dev/null +++ b/public/images/icons/heart.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/public/images/icons/info.svg b/public/images/icons/info.svg new file mode 100644 index 0000000..3426dd7 --- /dev/null +++ b/public/images/icons/info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/icons/light-dark-black.svg b/public/images/icons/light-dark-black.svg new file mode 100644 index 0000000..b14fceb --- /dev/null +++ b/public/images/icons/light-dark-black.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/public/images/icons/light-dark.svg b/public/images/icons/light-dark.svg new file mode 100644 index 0000000..a8df9d0 --- /dev/null +++ b/public/images/icons/light-dark.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/public/images/icons/loading.gif b/public/images/icons/loading.gif new file mode 100644 index 0000000..e846e1d Binary files /dev/null and b/public/images/icons/loading.gif differ diff --git a/images/icons/product-hunt.svg b/public/images/icons/product-hunt.svg similarity index 100% rename from images/icons/product-hunt.svg rename to public/images/icons/product-hunt.svg diff --git a/public/images/icons/random-black.svg b/public/images/icons/random-black.svg new file mode 100644 index 0000000..30b7a57 --- /dev/null +++ b/public/images/icons/random-black.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/public/images/icons/random.svg b/public/images/icons/random.svg new file mode 100644 index 0000000..ff232c1 --- /dev/null +++ b/public/images/icons/random.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/public/images/patterns/bathroom-floor-thumbnail.svg b/public/images/patterns/bathroom-floor-thumbnail.svg new file mode 100644 index 0000000..bc0bf5f --- /dev/null +++ b/public/images/patterns/bathroom-floor-thumbnail.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/public/images/patterns/squares-in-squares-thumbnail.svg b/public/images/patterns/squares-in-squares-thumbnail.svg new file mode 100644 index 0000000..67967d1 --- /dev/null +++ b/public/images/patterns/squares-in-squares-thumbnail.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/styles/how-to.scss b/styles/how-to.scss index 4aa644d..4c03634 100644 --- a/styles/how-to.scss +++ b/styles/how-to.scss @@ -1,8 +1,8 @@ .how-to-section { - grid-area: section1; - margin-top: 25px; + margin-top: 2rem; margin-bottom: 25px; text-align: center; + flex-grow: 1; .title { font-family: "Kalam", sans-serif; diff --git a/styles/index.scss b/styles/index.scss index d1cbc2e..de1f1bf 100644 --- a/styles/index.scss +++ b/styles/index.scss @@ -2,8 +2,10 @@ @use "variables"; @use "main"; @use "how-to"; +@use "toolbox-presets"; @use "toolbox-main"; @use "toolbox-background"; @use "toolbox-decorations"; +@use "toolbox-test-fonts"; @use "tabs"; @use "modals"; \ No newline at end of file diff --git a/styles/main.scss b/styles/main.scss index 6cbedd6..a58078b 100644 --- a/styles/main.scss +++ b/styles/main.scss @@ -1,27 +1,56 @@ body { - background-color: #4078c0; + background-color: #605FA1; } .main-container { margin: 0 auto; - padding: 25px 10%; - display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr; - // grid-template-rows: 300px calc(100% - 300px - 25px - 45px) 25px; - grid-template-rows: auto 1fr auto; - grid-gap: 15px 40px; - grid-auto-flow: row; - grid-template-areas: - "header header section2 section2 section2 section2" - "section1 section1 section2 section2 section2 section2" - "footer footer section2 section2 section2 section2"; - background: linear-gradient(180deg, #6e5494 0%, #605fa1 32.6%, #4e6db3 68.54%, #4078c0 100%); + display: flex; + color: var(--text-color); + font-family: var(--main-font-familiy); + background: #446BAF; + background: linear-gradient(180deg, #675494 0%, #605fa1 32.6%, #4e6db3 68.54%, #4078c0 100%); +} + +.left-container { + min-height: 100vh; + padding: 1rem; + display: flex; + flex-direction: column; + overflow: auto; + flex-grow: 2; + // background-color: #312149; + background: rgba(0, 0, 0, .05); + box-shadow: 0px 0px 10px 5px rgb(255, 255, 255, .25); + z-index: 30; +} + +.toolbox-container { + width: calc(100% - 300px - (var(--paddings) * 2)); + padding: 0; + // background: rgba(255, 255, 255, 0.15); + background: inherit; background-repeat: no-repeat; background-size: cover; background-position: center; background-attachment: fixed; - color: var(--text-color); - font-family: var(--main-font-familiy); + overflow: hidden; +} + +.scrollable { + &::-webkit-scrollbar { + width: 0.4em; + } + + &::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0.1); + // -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.1); + } + + &::-webkit-scrollbar-thumb { + border-radius: 10px; + background-color: rgba(255, 255, 255, 0.75); + // + } } a:link, @@ -54,7 +83,7 @@ select, } } -textarea{ +textarea { padding: 10px; background: rgba(255, 255, 255, 0.15); border: 1px solid rgb(255, 255, 255, 0.5); @@ -161,7 +190,6 @@ button { } .header { - grid-area: header; display: flex; align-items: center; justify-content: center; @@ -171,11 +199,10 @@ button { filter: drop-shadow(0px 0px 5px rgba(255, 255, 255, 0.5)); img { - margin-bottom: 5px; + margin-bottom: 15px; } - span { - font-family: var(--secondary-font-familiy); + h1 { line-height: 1; } @@ -191,14 +218,15 @@ button { } .footer { - grid-area: footer; display: flex; + gap: 15px; align-items: center; flex-direction: column; - justify-content: space-between; + justify-content: end; - >div { + .links { display: flex; + gap: 15px; >a { margin-top: 10px; @@ -211,16 +239,28 @@ button { text-shadow: 0px 0px 5px rgba(255, 255, 255, 0.5); } - &:not(:first-child) { - margin-left: 10px; - } - } } - .icons img { - width: 25px; - height: 25px; + .icons { + display: flex; + gap: 15px; + justify-content: center; + + a { + display: flex; + justify-content: center; + align-items: center; + + img { + width: 30px; + transition: all ease 500ms; + + &:hover { + filter: drop-shadow(0px 0px 2px rgba(255, 255, 255, 0.7)); + } + } + } } // FF5F5F @@ -256,7 +296,25 @@ button { @media (max-width: 768px) { .main-container { flex-direction: column; - display: flex; - padding: 25px 5%; + } + + .left-container { + background: inherit; + // display: none; + padding-bottom: 2rem; + + .how-to-section { + // display: none; + } + + footer { + // display: none; + } + } + + .toolbox-container { + width: 100%; + height: auto; + min-height: 100vh; } } \ No newline at end of file diff --git a/styles/tabs.scss b/styles/tabs.scss index 3186148..70c1a1a 100644 --- a/styles/tabs.scss +++ b/styles/tabs.scss @@ -1,22 +1,34 @@ /* Style the tab */ .tab { - display: flex; + position: fixed; + left: 50%; + transform: translateX(calc(-50% + 190px)); + padding: 0 2px 2px 2px; + width: fit-content; + margin: 0 auto; + display: grid; + grid-template-columns: repeat(4, auto); + gap: 2px; justify-content: center; - overflow: hidden; - border-bottom: 1px solid #ccc; color: var(--text-color); + background: #6E5494; + border-radius: 0 0 10px 10px; + box-shadow: 0px 0px 5px 2px rgba(255, 255, 255, 0.25); + // overflow: hidden; + z-index: 10; + user-select: none; } /* Style the buttons that are used to open the tab content */ .tab button { background-color: inherit; - float: left; border: none; outline: none; cursor: pointer; - padding: 14px 16px; + padding: 1rem 2rem; transition: 0.3s; color: white; + border-radius: 0 0 9px 9px; } /* Change background color of buttons on hover */ @@ -33,12 +45,18 @@ /* Style the tab content */ .tabcontent { - display: none; - padding: 15px 15px 0 15px; + width: 100%; + // max-width: calc(1280px - 296px - 24px); + margin: auto; + margin-top: calc(1rem + 2rem + 0.5rem); + max-width: calc(850px); + padding: 0.5rem 1rem 0.5rem 1rem; + overflow: auto; } .tabcontent { - animation: fadeEffect 1s; /* Fading effect takes 1 second */ + animation: fadeEffect 1s; + /* Fading effect takes 1 second */ } /* Go from zero to full opacity */ @@ -46,7 +64,60 @@ from { opacity: 0; } + to { opacity: 1; } } + +@media (max-width: 850px) { + .tab { + button { + padding: 10px 1rem; + } + } +} + +@media (max-width: 768px) { + .tab { + position: static; + width: 100%; + transform: translateX(calc(0)); + display: grid; + grid-template-columns: repeat(4, auto); + gap: 1px; + border-radius: 0; + padding: 1px; + overflow: auto; + + button { + padding: 10px; + border-radius: 0; + } + } + + .tabcontent { + height: auto; + margin-top: 1rem; + } +} + +@media (max-width: 360px) { + .tab { + width: 100%; + margin: 0; + left: 0; + transform: translateX(calc(0)); + display: grid; + grid-template-columns: repeat(4, auto); + border-radius: 0; + padding: 1px; + overflow: auto; + + button { + padding: 10px; + border-radius: 0; + } + } + +} \ No newline at end of file diff --git a/styles/toolbox-background.scss b/styles/toolbox-background.scss index 8f6bdc3..37c3175 100644 --- a/styles/toolbox-background.scss +++ b/styles/toolbox-background.scss @@ -73,18 +73,23 @@ margin: auto; button { - width: 50px; - height: 50px; + width: 70px; + height: 70px; padding: 0; margin-left: 5px; margin-bottom: 5px; display: flex; align-items: center; justify-content: center; + transition: all ease-in-out 300ms; img { - max-width: 45px; - max-height: 45px; + max-width: 55px; + max-height: 55px; + } + + &:hover { + box-shadow: 0px 0px 5px 2px rgba(255, 255, 255, 0.25); } &.selected { diff --git a/styles/toolbox-decorations.scss b/styles/toolbox-decorations.scss index 530915c..a67ad1d 100644 --- a/styles/toolbox-decorations.scss +++ b/styles/toolbox-decorations.scss @@ -16,21 +16,26 @@ .decorations-buttons { button { - width: 50px; - height: 50px; + width: 70px; + height: 70px; padding: 0; margin-left: 5px; margin-bottom: 5px; display: flex; align-items: center; justify-content: center; + transition: all ease-in-out 300ms; img { - max-width: 40px; - max-height: 40px; + max-width: 50px; + max-height: 50px; // border-radius: var(--input-border-radius); } + &:hover { + box-shadow: 0px 0px 5px 2px rgba(255, 255, 255, 0.25); + } + &.selected { border: solid white 2px; } @@ -47,7 +52,7 @@ .myoctocats-tip { margin-top: 10px; margin-bottom: 10px; - padding: 5px 10px; + padding: 20px; // border: 2px solid rgb(255, 255, 255, 0.5); border-radius: var(--input-border-radius); font-size: 0.9rem; diff --git a/styles/toolbox-main.scss b/styles/toolbox-main.scss index 918ce1f..5221f86 100644 --- a/styles/toolbox-main.scss +++ b/styles/toolbox-main.scss @@ -1,27 +1,53 @@ .toolbox-container { - grid-area: section2; - // text-align: center; - background: rgba(255, 255, 255, 0.15); - border-radius: 10px; - box-shadow: 0px 0px 5px 2px rgba(255, 255, 255, 0.25); - overflow: auto; - .result-box { // height: 300px; - padding: var(--paddings); - border-radius: 10px 10px 0px 0px; + padding: 2rem 2rem 0.5rem 2rem; background: var(--github-dark-mode-color); transition: 0.5s ease; + user-select: none; + position: relative; + z-index: 20; &.light-mode { background: var(--github-light-mode-color); + + .dark-mode-button, + .randomize-button { + color: black !important; + + &:hover { + // box-shadow: 0px 0px 5px 2px rgba(255, 255, 255, 0.25); + text-shadow: 0px 0px 10px #929292 !important; + } + } + } + + .header-image-container { + width: 100%; + flex-grow: 1; + // max-width: calc(1280px - 296px - 24px); + max-width: calc(850px); + margin: auto; + width: 100%; + filter: drop-shadow(0px 0px 5px rgba(125, 125, 125, 0.5)); } #github-header-image { + width: 100%; + height: 230px; + padding: 25px; + position: relative; + display: flex; + align-items: flex-start; + justify-content: center; + flex-direction: column; + background-color: #446BAF; + color: white; + border-radius: 7px; margin: 0 auto; border: none; overflow: hidden; - background-size: 100px; + background-size: 200px; transition: 0.25s ease; .title, @@ -35,47 +61,77 @@ } .options-container { + max-width: calc(850px); + margin: auto; + user-select: none; display: flex; - justify-content: center; - flex-wrap: wrap; - padding: var(--paddings) 0 0 0; + align-items: center; + gap: 35px; + justify-content: space-between; + // flex-wrap: wrap; + padding: 1rem 0 0.5rem 0; + overflow: auto; - button { - width: 155px; + >div:first-child { + display: flex; + gap: 2rem; + } + + .dark-mode-button, + .randomize-button, + .download-button { + background-color: transparent; + display: flex; + gap: 7px; + justify-content: center; + align-items: center; + width: fit-content; height: 35px; - border: 1px solid #ffffff; - border-radius: var(--button-border-radius); + // border: 1px solid #ffffff; + // border-radius: var(--button-border-radius); color: var(--text-color); - text-transform: uppercase; - font-size: 12px; + // text-transform: uppercase; + text-align: center; font-weight: 600; + white-space: nowrap; transition: all 0.25s ease-in-out; + cursor: pointer; - &:hover { - box-shadow: 0px 0px 5px 2px rgba(255, 255, 255, 0.25); + img { + transition: all ease 500ms; } - &:not(:last-child) { - margin-right: 15px; + &:hover { + // box-shadow: 0px 0px 5px 2px rgba(255, 255, 255, 0.25); + text-shadow: 0px 0px 10px rgb(255, 255, 255); + + img { + transform: scale(1.2); + } } } - .dark-mode-button { - background: #2e384d; - } - .download-button { - background: #2D8655; - } - .randomize-button { - background: #862D5A; + .download-button, + .display-button, + .miniature-button { + background-color: #2D8655 !important; + // border: 1px solid #ffffff; + border-radius: var(--button-border-radius); + padding: 5px 15px; } } } + .toolbox-tools { + height: calc(100vh - 230px - 3rem - 35px - 1rem); + overflow: auto; + padding: 1rem 1rem 4rem 1rem; + } + .toolbox { box-sizing: border-box; - > div { + >div { display: flex; align-items: center; justify-content: center; @@ -113,7 +169,7 @@ } .size-inputs { - > div { + >div { &:not(:last-child) { margin-right: 15px; } @@ -173,21 +229,6 @@ } } } - - &::-webkit-scrollbar { - width: 0.4em; - } - - &::-webkit-scrollbar-track { - background: rgba(0, 0, 0, 0.1); - // -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.1); - } - - &::-webkit-scrollbar-thumb { - border-radius: 10px; - background-color: rgba(255, 255, 255, 0.75); - // - } } @media (max-width: 768px) { @@ -197,17 +238,25 @@ } .result-box { + padding: 1rem 1rem 0.5rem 1rem; + + #github-header-image { + height: 250px; + } + .options-container { - button { - width: 100%; - &:not(:last-child) { - margin-bottom: 10px; - margin-right: 0; - } + gap: 10px; + + >div:first-child { + gap: 10px; } } } + .toolbox-tools { + height: auto; + } + .toolbox { .text-inputs { input { @@ -217,13 +266,15 @@ // } } } + .font-selectors-container { - > div { + >div { &:not(:last-child) { margin-bottom: 10px; } } } + .font-size-inputs { input { &:not(:last-child) { @@ -234,3 +285,21 @@ } } } + +@media (max-width: 360px) { + .toolbox-container { + .result-box { + .options-container { + flex-wrap: wrap; + gap: 10px; + justify-content: center; + + >div:first-child { + gap: 10px; + } + } + } + + } + +} \ No newline at end of file diff --git a/styles/toolbox-presets.scss b/styles/toolbox-presets.scss new file mode 100644 index 0000000..4d3b64e --- /dev/null +++ b/styles/toolbox-presets.scss @@ -0,0 +1,40 @@ +#presets-section { + text-align: center; + + .toolbox-presets { + padding: 10px; + display: flex; + justify-content: center; + flex-wrap: wrap; + gap: 1rem; + + .theme-button { + width: 185px; + display: flex; + cursor: pointer; + + img { + max-width: 100%; + object-fit: contain; + transition: all ease-in-out 300ms; + + &:hover { + filter: drop-shadow(0px 0px 5px rgba(255, 255, 255, 0.5)); + } + } + + &-white { + display: flex; + justify-content: center; + align-items: center; + background: rgba(255, 255, 255, 0.15); + border: 1px solid rgb(255, 255, 255, 0.5); + border-radius: 5px; + + &:hover { + filter: drop-shadow(0px 0px 5px rgba(255, 255, 255, 0.5)); + } + } + } + } +} \ No newline at end of file diff --git a/styles/toolbox-test-fonts.scss b/styles/toolbox-test-fonts.scss new file mode 100644 index 0000000..432d0db --- /dev/null +++ b/styles/toolbox-test-fonts.scss @@ -0,0 +1,189 @@ +.tablinks[data-name="test-fonts-section"] { + position: fixed; + right: 0; + transform: translateX(100%); + z-index: 100 +} + +#test-fonts-section { + font-size: 20px; + padding: 50px 0 100px 50px; + background-color: #222; + color: white; +} + +.red-hat-display { + font-family: "Red Hat Display", sans-serif; + font-optical-sizing: auto; + font-weight: 400; + font-style: normal; +} + +.kalam { + font-family: "Kalam", cursive; + font-weight: 400; + font-style: normal; +} + +.poppins { + font-family: "Poppins", sans-serif; + font-weight: 400; + font-style: normal; +} + + +.maven-pro { + font-family: "Maven Pro", sans-serif; + font-optical-sizing: auto; + font-weight: 400; + font-style: normal; +} + +.athiti { + font-family: "Athiti", sans-serif; + font-weight: 400; + font-style: normal; +} + +.ubuntu-sans { + font-family: "Ubuntu Sans", sans-serif; + font-optical-sizing: auto; + font-weight: 400; + font-style: normal; + font-variation-settings: + "wdth" 100; +} + +.ubuntu { + font-family: "Ubuntu", sans-serif; + font-weight: 400; + font-style: normal; +} + +.istok-web { + font-family: "Istok Web", sans-serif; + font-weight: 400; + font-style: normal; +} + + +.courgette { + font-family: "Courgette", cursive; + font-weight: 400; + font-style: normal; +} + +.quattrocento { + font-family: "Quattrocento", serif; + font-weight: 400; + font-style: normal; +} + +.della-respira { + font-family: "Della Respira", serif; + font-weight: 400; + font-style: normal; +} + +.lato { + font-family: "Lato", sans-serif; + font-weight: 400; + font-style: normal; +} + +.martel { + font-family: "Martel", serif; + font-weight: 400; + font-style: normal; +} + +.lancelot { + font-family: "Lancelot", serif; + font-weight: 400; + font-style: normal; +} + +.playball { + font-family: "Playball", cursive; + font-weight: 400; + font-style: normal; +} + + +.life-savers { + font-family: "Life Savers", serif; + font-weight: 400; + font-style: normal; +} + +.anonymous-pro { + font-family: "Anonymous Pro", monospace; + font-weight: 400; + font-style: normal; +} + +.inconsolata { + font-family: "Inconsolata", monospace; + font-optical-sizing: auto; + font-weight: 400; + font-style: normal; + font-variation-settings: + "wdth" 100; +} + +.fira-code { + font-family: "Fira Code", monospace; + font-optical-sizing: auto; + font-weight: 400; + font-style: normal; +} + +.open-sans { + font-family: "Open Sans", sans-serif; + font-optical-sizing: auto; + font-weight: 400; + font-style: normal; + font-variation-settings: + "wdth" 100; +} + +.playwrite-hu { + font-family: "Playwrite HU", cursive; + font-optical-sizing: auto; + font-weight: 400; + font-style: normal; +} + + +.dancing-script { + font-family: "Dancing Script", cursive; + font-optical-sizing: auto; + font-weight: 400; + font-style: normal; +} + +.passero-one { + font-family: "Passero One", sans-serif; + font-weight: 400; + font-style: normal; +} + +.pixelify-sans { + font-family: "Pixelify Sans", sans-serif; + font-optical-sizing: auto; + font-weight: 400; + font-style: normal; +} + +.electrolize { + font-family: "Electrolize", sans-serif; + font-weight: 400; + font-style: normal; +} + +.source-code-pro { + font-family: "Source Code Pro", monospace; + font-optical-sizing: auto; + font-weight: 400; + font-style: normal; +} \ No newline at end of file diff --git a/styles/variables.scss b/styles/variables.scss index 34fcda4..ef070df 100644 --- a/styles/variables.scss +++ b/styles/variables.scss @@ -2,15 +2,14 @@ --button-border-radius: 7px; --input-border-radius: 7px; --text-color: white; - --paddings: 25px; + --paddings: 3rem; --github-dark-mode-color: #0d1117; --github-light-mode-color: white; --main-font-familiy: "Red Hat Display", Arial, Helvetica, sans-serif; - --secondary-font-familiy: "Kalam"; } @media (max-width: 768px) { :root { - --paddings: 15px; + --paddings: 1rem; } } diff --git a/vite.config.js b/vite.config.js index 5176788..0e1719c 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,5 +1,11 @@ -module.exports = { +import { defineConfig } from 'vite'; +import injectHTML from 'vite-plugin-html-inject'; + +export default defineConfig({ build: { emptyOutDir: true - } -} \ No newline at end of file + }, + plugins: [ + injectHTML(), + ], +});