-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
Info & Credits
-
- Many of the patterns are here thanks to
- Hero Patterns
-
- and
-
- SVGBackgrounds.com
-
-
-
- Code icons created by Freepik - Flaticon
-
-
- This website is not affiliated, associated, authorized, endorsed by, or in any way officially
- connected with GitHub, or any of its subsidiaries or its affiliates. The official GitHub website can
- be found at
-
- https://github.com
-
- The name “GitHub” as well as related names, marks, emblems and images are registered trademarks
- of GitHub.
-
-
-
-
-
-
-
-
-
-
Feedback
-
- Questions? Comments? Issues? I will be glad to hear you.
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
\ 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 @@
+
\ 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?
+
+
+ Create a nice github header image.
+
+ Github Profile Header Generator Demo
+
+
+
+ Create your GitHub profile README following
+
+ this guide .
+
+
+ Upload your header to your profile/projecy repo.
+
+ Add this line to your README:
+ 
+
+
+
\ 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 @@
+
+
+
+
+
+
Feedback
+
+ Questions? Comments? Issues? I will be glad to hear you.
+
+
+
+
+
+
+
+ Send
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
Info & Credits
+
+ Many of the patterns are here thanks to
+ Hero Patterns
+
+ and
+
+ SVGBackgrounds.com
+
+
+
+ Code icons created by Freepik - Flaticon
+
+
+ This website is not affiliated, associated, authorized, endorsed by, or in any way officially
+ connected with GitHub, or any of its subsidiaries or its affiliates. The official GitHub website can
+ be found at
+
+ https://github.com
+
+ The name “GitHub” as well as related names, marks, emblems and images are registered trademarks
+ of GitHub.
+
+
+
\ 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 @@
+
+
+
+
+
+
Good news!
+
+
Jesus loves you
+
+
+
+
+
+
+
+ For God so loved the world, that he gave his only Son, that whoever believes in him should not
+ perish but have eternal life.
+
+
+
+
John 3:16
+
+
\ 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 @@
+
\ 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 @@
+
\ 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 @@
+
\ 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.
+
+
+
\ 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 @@
+
+
+
+
+
+
+ Display
+
+
+ Miniature
+
+
+
+
+
+
\ 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(),
+ ],
+});