+
+
{title}
+
+
+
+
+ {/* Mobile sidebar */}
+
+
setSidebarOpen(false)} />
+
+
+

+
+
+
+
+
+
+ {/* Desktop layout */}
+
+ {/* Desktop sidebar */}
+
+
+
+
+

+
Wastpol
+
+
+
+
+
+
+
+
+ {/* Main content */}
+
+ {/* Top navbar */}
+
+
+
+
+
+ {/* You can add search or breadcrumbs here */}
+
+
+ {session && (
+
+
+
+
+ {session.user.email}
+
+
+
+
+ )}
+
+
+
+ {/* Page content */}
+
+ {children}
+
+
+
+
+ );
+}
diff --git a/components/ui/components.js b/components/ui/components.js
new file mode 100644
index 0000000..117b917
--- /dev/null
+++ b/components/ui/components.js
@@ -0,0 +1,179 @@
+import React from 'react';
+
+export const Card = ({ children, className = '', ...props }) => (
+
+ {children}
+
+);
+
+export const CardHeader = ({ children, className = '', ...props }) => (
+
+ {children}
+
+);
+
+export const CardContent = ({ children, className = '', ...props }) => (
+
+ {children}
+
+);
+
+export const CardTitle = ({ children, className = '', ...props }) => (
+
+ {children}
+
+);
+
+export const CardDescription = ({ children, className = '', ...props }) => (
+
+ {children}
+
+);
+
+export const Button = ({
+ children,
+ variant = 'primary',
+ size = 'md',
+ className = '',
+ disabled = false,
+ loading = false,
+ ...props
+}) => {
+ const baseStyles = 'inline-flex items-center justify-center rounded-lg font-medium transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed';
+
+ const variants = {
+ primary: 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500 shadow-sm hover:shadow-md',
+ secondary: 'bg-gray-100 text-gray-900 hover:bg-gray-200 focus:ring-gray-500 border border-gray-300',
+ outline: 'border border-gray-300 text-gray-700 bg-white hover:bg-gray-50 focus:ring-blue-500',
+ ghost: 'text-gray-700 hover:bg-gray-100 focus:ring-gray-500',
+ danger: 'bg-red-600 text-white hover:bg-red-700 focus:ring-red-500',
+ };
+
+ const sizes = {
+ sm: 'px-3 py-2 text-sm',
+ md: 'px-4 py-2 text-sm',
+ lg: 'px-6 py-3 text-base',
+ };
+
+ return (
+
+ );
+};
+
+export const Input = ({ label, error, className = '', ...props }) => (
+
+ {label && (
+
+ )}
+
+ {error && (
+
{error}
+ )}
+
+);
+
+export const Textarea = ({ label, error, className = '', ...props }) => (
+
+ {label && (
+
+ )}
+
+ {error && (
+
{error}
+ )}
+
+);
+
+export const Badge = ({ children, variant = 'default', className = '' }) => {
+ const variants = {
+ default: 'bg-gray-100 text-gray-800',
+ success: 'bg-green-100 text-green-800',
+ warning: 'bg-yellow-100 text-yellow-800',
+ error: 'bg-red-100 text-red-800',
+ info: 'bg-blue-100 text-blue-800',
+ };
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const Alert = ({ children, variant = 'info', className = '' }) => {
+ const variants = {
+ info: 'bg-blue-50 border-blue-200 text-blue-800',
+ success: 'bg-green-50 border-green-200 text-green-800',
+ warning: 'bg-yellow-50 border-yellow-200 text-yellow-800',
+ error: 'bg-red-50 border-red-200 text-red-800',
+ };
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const Tabs = ({ children, value, onValueChange }) => (
+
+
+
+
+
+);
+
+export const TabsTrigger = ({ children, isActive, onClick }) => (
+
+);
+
+export const TabsContent = ({ children, isActive }) => (
+
+ {children}
+
+);
diff --git a/package-lock.json b/package-lock.json
index 602ae79..3422b8f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,8 +6,10 @@
"": {
"name": "wastpol",
"dependencies": {
+ "@heroicons/react": "^2.2.0",
"@socialgouv/matomo-next": "^1.3.0",
"@supercharge/request-ip": "^1.1.2",
+ "@tailwindcss/forms": "^0.5.10",
"axios": "^0.26.0",
"child_process": "^1.0.2",
"cors": "^2.8.5",
@@ -79,6 +81,15 @@
"node": ">= 4"
}
},
+ "node_modules/@heroicons/react": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.2.0.tgz",
+ "integrity": "sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">= 16 || ^19.0.0-rc"
+ }
+ },
"node_modules/@humanwhocodes/config-array": {
"version": "0.9.5",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
@@ -312,7 +323,6 @@
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -325,7 +335,6 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
"engines": {
"node": ">= 8"
}
@@ -334,7 +343,6 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -398,6 +406,18 @@
"tslib": "^2.4.0"
}
},
+ "node_modules/@tailwindcss/forms": {
+ "version": "0.5.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz",
+ "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==",
+ "license": "MIT",
+ "dependencies": {
+ "mini-svg-data-uri": "^1.2.3"
+ },
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1"
+ }
+ },
"node_modules/@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -614,14 +634,12 @@
"node_modules/any-promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
- "dev": true
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
},
"node_modules/anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -633,8 +651,7 @@
"node_modules/arg": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
- "dev": true
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
},
"node_modules/argparse": {
"version": "2.0.1",
@@ -834,14 +851,12 @@
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -855,7 +870,6 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -865,7 +879,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -926,7 +939,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "dev": true,
"engines": {
"node": ">= 6"
}
@@ -975,7 +987,6 @@
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
"funding": [
{
"type": "individual",
@@ -1002,7 +1013,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -1030,14 +1040,12 @@
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"node_modules/commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true,
"engines": {
"node": ">= 6"
}
@@ -1050,8 +1058,7 @@
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"node_modules/cookie": {
"version": "0.5.0",
@@ -1106,7 +1113,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true,
"bin": {
"cssesc": "bin/cssesc"
},
@@ -1219,8 +1225,7 @@
"node_modules/didyoumean": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
- "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
- "dev": true
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
},
"node_modules/dir-glob": {
"version": "3.0.1",
@@ -1237,8 +1242,7 @@
"node_modules/dlv": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
- "dev": true
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
},
"node_modules/doctrine": {
"version": "3.0.0",
@@ -1954,7 +1958,6 @@
"version": "3.2.12",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
"integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
- "dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -1970,7 +1973,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -1994,7 +1996,6 @@
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
"integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
- "dev": true,
"dependencies": {
"reusify": "^1.0.4"
}
@@ -2029,7 +2030,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -2114,14 +2114,12 @@
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
@@ -2239,7 +2237,6 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
"dependencies": {
"is-glob": "^4.0.3"
},
@@ -2467,7 +2464,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -2476,8 +2472,7 @@
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"node_modules/inline-style-prefixer": {
"version": "3.0.8",
@@ -2548,7 +2543,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
"dependencies": {
"binary-extensions": "^2.0.0"
},
@@ -2588,7 +2582,6 @@
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
"integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
- "dev": true,
"dependencies": {
"has": "^1.0.3"
},
@@ -2615,7 +2608,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -2624,7 +2616,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -2657,7 +2648,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
"engines": {
"node": ">=0.12.0"
}
@@ -2838,7 +2828,6 @@
"version": "1.18.2",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz",
"integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==",
- "dev": true,
"bin": {
"jiti": "bin/jiti.js"
}
@@ -2937,7 +2926,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
- "dev": true,
"engines": {
"node": ">=10"
}
@@ -2945,8 +2933,7 @@
"node_modules/lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
},
"node_modules/lodash.debounce": {
"version": "4.0.8",
@@ -3004,7 +2991,6 @@
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
"engines": {
"node": ">= 8"
}
@@ -3013,7 +2999,6 @@
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
"dependencies": {
"braces": "^3.0.2",
"picomatch": "^2.3.1"
@@ -3022,11 +3007,19 @@
"node": ">=8.6"
}
},
+ "node_modules/mini-svg-data-uri": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
+ "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
+ "license": "MIT",
+ "bin": {
+ "mini-svg-data-uri": "cli.js"
+ }
+ },
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -3053,7 +3046,6 @@
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "dev": true,
"dependencies": {
"any-promise": "^1.0.0",
"object-assign": "^4.0.1",
@@ -3212,7 +3204,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -3427,7 +3418,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -3444,8 +3434,7 @@
"node_modules/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
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"node_modules/path-type": {
"version": "4.0.0",
@@ -3465,7 +3454,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
"engines": {
"node": ">=8.6"
},
@@ -3477,7 +3465,6 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -3486,7 +3473,6 @@
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
"integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
- "dev": true,
"engines": {
"node": ">= 6"
}
@@ -3503,7 +3489,6 @@
"version": "8.4.21",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
"integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -3527,7 +3512,6 @@
"version": "14.1.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
"integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
- "dev": true,
"dependencies": {
"postcss-value-parser": "^4.0.0",
"read-cache": "^1.0.0",
@@ -3544,7 +3528,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
"integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
- "dev": true,
"dependencies": {
"camelcase-css": "^2.0.1"
},
@@ -3563,7 +3546,6 @@
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
"integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
- "dev": true,
"dependencies": {
"lilconfig": "^2.0.5",
"yaml": "^1.10.2"
@@ -3592,7 +3574,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz",
"integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==",
- "dev": true,
"dependencies": {
"postcss-selector-parser": "^6.0.10"
},
@@ -3611,7 +3592,6 @@
"version": "6.0.11",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
"integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
- "dev": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -3623,8 +3603,7 @@
"node_modules/postcss-value-parser": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
- "dev": true
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
},
"node_modules/preact": {
"version": "10.13.2",
@@ -3719,7 +3698,6 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -3739,7 +3717,6 @@
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
"integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
- "dev": true,
"engines": {
"node": ">=10"
},
@@ -3846,7 +3823,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
- "dev": true,
"dependencies": {
"pify": "^2.3.0"
}
@@ -3855,7 +3831,6 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -3901,7 +3876,6 @@
"version": "1.22.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
"integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
- "dev": true,
"dependencies": {
"is-core-module": "^2.9.0",
"path-parse": "^1.0.7",
@@ -3927,7 +3901,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
@@ -3952,7 +3925,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -4202,7 +4174,6 @@
"version": "3.31.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.31.0.tgz",
"integrity": "sha512-6QsHnkqyVEzYcaiHsOKkzOtOgdJcb8i54x6AV2hDwyZcY9ZyykGZVw6L/YN98xC0evwTP6utsWWrKRaa8QlfEQ==",
- "dev": true,
"dependencies": {
"commander": "^4.0.0",
"glob": "7.1.6",
@@ -4223,7 +4194,6 @@
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -4255,7 +4225,6 @@
"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,
"engines": {
"node": ">= 0.4"
},
@@ -4267,7 +4236,6 @@
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.0.tgz",
"integrity": "sha512-hOXlFx+YcklJ8kXiCAfk/FMyr4Pm9ck477G0m/us2344Vuj355IpoEDB5UmGAsSpTBmr+4ZhjzW04JuFXkb/fw==",
- "dev": true,
"dependencies": {
"arg": "^5.0.2",
"chokidar": "^3.5.3",
@@ -4309,7 +4277,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
- "dev": true,
"engines": {
"node": ">= 6"
}
@@ -4324,7 +4291,6 @@
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
- "dev": true,
"dependencies": {
"any-promise": "^1.0.0"
}
@@ -4333,7 +4299,6 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
- "dev": true,
"dependencies": {
"thenify": ">= 3.1.0 < 4"
},
@@ -4355,7 +4320,6 @@
"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,
"dependencies": {
"is-number": "^7.0.0"
},
@@ -4366,8 +4330,7 @@
"node_modules/ts-interface-checker": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
- "dev": true
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
},
"node_modules/tsconfig-paths": {
"version": "3.14.2",
@@ -4562,8 +4525,7 @@
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
"node_modules/uuid": {
"version": "8.3.2",
@@ -4689,7 +4651,6 @@
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "dev": true,
"engines": {
"node": ">= 6"
}
@@ -4734,6 +4695,12 @@
}
}
},
+ "@heroicons/react": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.2.0.tgz",
+ "integrity": "sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ==",
+ "requires": {}
+ },
"@humanwhocodes/config-array": {
"version": "0.9.5",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
@@ -4847,7 +4814,6 @@
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
"requires": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -4856,14 +4822,12 @@
"@nodelib/fs.stat": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
},
"@nodelib/fs.walk": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
"requires": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -4912,6 +4876,14 @@
"tslib": "^2.4.0"
}
},
+ "@tailwindcss/forms": {
+ "version": "0.5.10",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz",
+ "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==",
+ "requires": {
+ "mini-svg-data-uri": "^1.2.3"
+ }
+ },
"@types/json5": {
"version": "0.0.29",
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -5053,14 +5025,12 @@
"any-promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
- "dev": true
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
},
"anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -5069,8 +5039,7 @@
"arg": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
- "dev": true
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
},
"argparse": {
"version": "2.0.1",
@@ -5215,14 +5184,12 @@
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"binary-extensions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
},
"bowser": {
"version": "1.9.4",
@@ -5233,7 +5200,6 @@
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -5243,7 +5209,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
"requires": {
"fill-range": "^7.0.1"
}
@@ -5278,8 +5243,7 @@
"camelcase-css": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "dev": true
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="
},
"caniuse-lite": {
"version": "1.0.30001472",
@@ -5305,7 +5269,6 @@
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
"requires": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -5321,7 +5284,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
"requires": {
"is-glob": "^4.0.1"
}
@@ -5345,14 +5307,12 @@
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"commander": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="
},
"compute-scroll-into-view": {
"version": "1.0.20",
@@ -5362,8 +5322,7 @@
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
},
"cookie": {
"version": "0.5.0",
@@ -5407,8 +5366,7 @@
"cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
},
"csstype": {
"version": "3.1.1",
@@ -5491,8 +5449,7 @@
"didyoumean": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
- "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
- "dev": true
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
},
"dir-glob": {
"version": "3.0.1",
@@ -5506,8 +5463,7 @@
"dlv": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
- "dev": true
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
},
"doctrine": {
"version": "3.0.0",
@@ -6069,7 +6025,6 @@
"version": "3.2.12",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
"integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
- "dev": true,
"requires": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -6082,7 +6037,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
"requires": {
"is-glob": "^4.0.1"
}
@@ -6105,7 +6059,6 @@
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
"integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
- "dev": true,
"requires": {
"reusify": "^1.0.4"
}
@@ -6137,7 +6090,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
"requires": {
"to-regex-range": "^5.0.1"
}
@@ -6192,14 +6144,12 @@
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
},
"fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
"optional": true
},
"function-bind": {
@@ -6286,7 +6236,6 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
"requires": {
"is-glob": "^4.0.3"
}
@@ -6438,7 +6387,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -6447,8 +6395,7 @@
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"inline-style-prefixer": {
"version": "3.0.8",
@@ -6504,7 +6451,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
"requires": {
"binary-extensions": "^2.0.0"
}
@@ -6529,7 +6475,6 @@
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
"integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
- "dev": true,
"requires": {
"has": "^1.0.3"
}
@@ -6546,14 +6491,12 @@
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
},
"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,
"requires": {
"is-extglob": "^2.1.1"
}
@@ -6573,8 +6516,7 @@
"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
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
},
"is-number-object": {
"version": "1.0.7",
@@ -6700,8 +6642,7 @@
"jiti": {
"version": "1.18.2",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz",
- "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==",
- "dev": true
+ "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg=="
},
"jose": {
"version": "4.13.1",
@@ -6781,14 +6722,12 @@
"lilconfig": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
- "dev": true
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="
},
"lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
},
"lodash.debounce": {
"version": "4.0.8",
@@ -6839,24 +6778,26 @@
"merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
},
"micromatch": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
"requires": {
"braces": "^3.0.2",
"picomatch": "^2.3.1"
}
},
+ "mini-svg-data-uri": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
+ "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="
+ },
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
@@ -6877,7 +6818,6 @@
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "dev": true,
"requires": {
"any-promise": "^1.0.0",
"object-assign": "^4.0.1",
@@ -6972,8 +6912,7 @@
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
},
"normalize-range": {
"version": "0.1.2",
@@ -7127,8 +7066,7 @@
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
},
"path-key": {
"version": "3.1.1",
@@ -7139,8 +7077,7 @@
"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
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"path-type": {
"version": "4.0.0",
@@ -7156,20 +7093,17 @@
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="
},
"pirates": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
- "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
- "dev": true
+ "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ=="
},
"pizzip": {
"version": "3.1.4",
@@ -7183,7 +7117,6 @@
"version": "8.4.21",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
"integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
- "dev": true,
"requires": {
"nanoid": "^3.3.4",
"picocolors": "^1.0.0",
@@ -7194,7 +7127,6 @@
"version": "14.1.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
"integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==",
- "dev": true,
"requires": {
"postcss-value-parser": "^4.0.0",
"read-cache": "^1.0.0",
@@ -7205,7 +7137,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
"integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
- "dev": true,
"requires": {
"camelcase-css": "^2.0.1"
}
@@ -7214,7 +7145,6 @@
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz",
"integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==",
- "dev": true,
"requires": {
"lilconfig": "^2.0.5",
"yaml": "^1.10.2"
@@ -7224,7 +7154,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz",
"integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==",
- "dev": true,
"requires": {
"postcss-selector-parser": "^6.0.10"
}
@@ -7233,7 +7162,6 @@
"version": "6.0.11",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
"integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
- "dev": true,
"requires": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -7242,8 +7170,7 @@
"postcss-value-parser": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
- "dev": true
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
},
"preact": {
"version": "10.13.2",
@@ -7317,14 +7244,12 @@
"queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
},
"quick-lru": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
- "dev": true
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
},
"react": {
"version": "17.0.2",
@@ -7399,7 +7324,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
- "dev": true,
"requires": {
"pify": "^2.3.0"
}
@@ -7408,7 +7332,6 @@
"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"
}
@@ -7439,7 +7362,6 @@
"version": "1.22.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
"integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
- "dev": true,
"requires": {
"is-core-module": "^2.9.0",
"path-parse": "^1.0.7",
@@ -7455,8 +7377,7 @@
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
},
"rimraf": {
"version": "3.0.2",
@@ -7471,7 +7392,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
"requires": {
"queue-microtask": "^1.2.2"
}
@@ -7640,7 +7560,6 @@
"version": "3.31.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.31.0.tgz",
"integrity": "sha512-6QsHnkqyVEzYcaiHsOKkzOtOgdJcb8i54x6AV2hDwyZcY9ZyykGZVw6L/YN98xC0evwTP6utsWWrKRaa8QlfEQ==",
- "dev": true,
"requires": {
"commander": "^4.0.0",
"glob": "7.1.6",
@@ -7654,7 +7573,6 @@
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -7678,14 +7596,12 @@
"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
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
},
"tailwindcss": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.0.tgz",
"integrity": "sha512-hOXlFx+YcklJ8kXiCAfk/FMyr4Pm9ck477G0m/us2344Vuj355IpoEDB5UmGAsSpTBmr+4ZhjzW04JuFXkb/fw==",
- "dev": true,
"requires": {
"arg": "^5.0.2",
"chokidar": "^3.5.3",
@@ -7716,8 +7632,7 @@
"object-hash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
- "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
- "dev": true
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="
}
}
},
@@ -7731,7 +7646,6 @@
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
- "dev": true,
"requires": {
"any-promise": "^1.0.0"
}
@@ -7740,7 +7654,6 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
- "dev": true,
"requires": {
"thenify": ">= 3.1.0 < 4"
}
@@ -7759,7 +7672,6 @@
"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,
"requires": {
"is-number": "^7.0.0"
}
@@ -7767,8 +7679,7 @@
"ts-interface-checker": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
- "dev": true
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
},
"tsconfig-paths": {
"version": "3.14.2",
@@ -7902,8 +7813,7 @@
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
"uuid": {
"version": "8.3.2",
@@ -8001,8 +7911,7 @@
"yaml": {
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "dev": true
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
}
}
}
diff --git a/package.json b/package.json
index 2159d4a..af7ef5b 100644
--- a/package.json
+++ b/package.json
@@ -11,8 +11,10 @@
"buildRun": "next build && pm2 restart kroj"
},
"dependencies": {
+ "@heroicons/react": "^2.2.0",
"@socialgouv/matomo-next": "^1.3.0",
"@supercharge/request-ip": "^1.1.2",
+ "@tailwindcss/forms": "^0.5.10",
"axios": "^0.26.0",
"child_process": "^1.0.2",
"cors": "^2.8.5",
diff --git a/pages/cross.js b/pages/cross.js
index b070104..bccb53e 100644
--- a/pages/cross.js
+++ b/pages/cross.js
@@ -1,50 +1,21 @@
-import Head from "next/head";
import { useState, useCallback } from "react";
-import styles from "../styles/Home.module.css";
-import Header from "../components/templates/header";
-import Nav from "../components/templates/nav";
-import UserTop from "../components/templates/userTop";
-import Content from "../components/templates/content";
-import Footer from "../components/templates/footer";
-import { useSession, signIn, signOut } from "next-auth/react";
-import {
- Pane,
- TextInputField,
- TextareaField,
- Button,
- BuildIcon,
- toaster,
- Alert,
+import { useSession, signIn } from "next-auth/react";
+import Layout from "../components/ui/Layout";
+import { Card, CardHeader, CardContent, CardTitle, CardDescription, Button, Alert } from "../components/ui/components";
+import {
FileUploader,
- FilePicker,
FileCard,
} from "evergreen-ui";
+import { CloudArrowUpIcon as CloudUploadIcon, ArrowDownTrayIcon as DownloadIcon, Squares2X2Icon as GridIcon } from '@heroicons/react/24/outline';
import axios from "axios";
export default function Cross() {
const { data: session } = useSession();
-
- const [fileData, setFileData] = useState(null);
- const handleDownload = () => {
- console.log("down");
- if (fileData) {
- console.log("load");
- // const link = document.createElement("a");
- // link.href = `data:application/octet-stream;base64,${fileData}`;
- // link.download = "plik.dxf";
- // link.click();
- document.getElementById("down").download = fileData.filename;
- console.log(fileData.filename)
-
- document.getElementById("down").href = "cross.dxf";
- console.log("cross.dxf")
-
- document.getElementById("down").click();
- }
- };
-
const [files, setFiles] = useState([]);
const [fileRejections, setFileRejections] = useState([]);
+ const [fileData, setFileData] = useState(null);
+ const [isLoading, setIsLoading] = useState(false);
+
const handleChange = useCallback((files) => setFiles([files[0]]), []);
const handleRejected = useCallback(
(fileRejections) => setFileRejections([fileRejections[0]]),
@@ -55,136 +26,222 @@ export default function Cross() {
setFileRejections([]);
}, []);
- const handleSubmit = async (event) => {
- event.preventDefault();
-
- let file = files[0];
-
- if (!file) {
- // Handle error if no file is selected
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ setIsLoading(true);
+
+ console.log("Files:", files);
+ if (files.length === 0) {
+ console.log("No files selected");
+ setIsLoading(false);
return;
}
const formData = new FormData();
- formData.append("file", file);
+ formData.append("files", files[0]);
axios
- .post("/api/upload", formData, {
+ .post("/api/cross", formData, {
headers: {
"Content-Type": "multipart/form-data",
},
})
.then((response) => {
console.log(response.data);
- if (response.data.toString().startsWith("Py Error")) {
- toaster.danger(response.data);
- return;
- }
- toaster.warning(response.statusText);
- console.log(response.data)
setFileData(response.data);
- document.getElementById("download").disabled = false;
-
- // document.getElementById("down").download =
- // response.data.filename.toString().split(".")[0].split("-")[1]+"_s.dxf";
- // document.getElementById("down").href =
- // "uploads/"+response.data.filename.toString().split(".")[0]+"_s.dxf";
- // document.getElementById("down").click();
+ setIsLoading(false);
})
.catch((error) => {
console.error(error);
+ setIsLoading(false);
});
};
+ const handleDownload = () => {
+ if (fileData) {
+ document.getElementById("down").download = fileData.filename;
+ document.getElementById("down").href = "cross.dxf";
+ document.getElementById("down").click();
+ }
+ };
+
if (session) {
return (
-
-
-
Wastpol
-
+
+
+ {/* Page Header */}
+
+
+
+
+
+
+
Generator siatki
+
Przekształć pliki DXF na siatki instalacyjne
+
+
+
-
-
-
+
+ {/* Upload Section */}
+
+
+
+
+ Prześlij plik
+
+
+ Wybierz plik DXF do przetworzenia (maksymalnie 50 MB)
+
+
+
+
+ {
+ const { name, size, type } = file;
+ const fileRejection = fileRejections.find(
+ (fileRejection) => fileRejection.file === file
+ );
+ const { message } = fileRejection || {};
+ return (
+
+ );
+ }}
+ values={files}
+ />
+
+
+
+
+
+
+ {/* Results Section */}
+
+
+
+
+ Wynik
+
+
+ Pobierz wygenerowany plik siatki
+
+
+
+ {fileData ? (
+
+
+
+
+
Plik został pomyślnie przetworzony!
+
+
+
+
+
+ ) : (
+
+
+
+
+
Prześlij plik aby rozpocząć przetwarzanie
+
+ )}
+
+
+
+
+ {/* Instructions */}
+
+
+ Instrukcje
+
+
+
+
+
+ 1
+
+
+
Prześlij plik
+
Wybierz plik DXF z projektem
+
+
+
+
+
+ 2
+
+
+
Przetwarzaj
+
Kliknij "Dodaj siatkę"
+
+
+
+
+
+ 3
+
+
+
Pobierz
+
Zapisz gotową siatkę DXF
+
+
+
+
+
+
+
-
-
- {
- const { name, size, type } = file;
- const fileRejection = fileRejections.find(
- (fileRejection) => fileRejection.file === file
- );
- const { message } = fileRejection || {};
- return (
-
- );
- }}
- values={files}
- />
-
-
-
-
- {" "}
-
-
-
+
);
}
+
return (
-
-
-
Wastpol
-
-
-
Nie zalogowano
-
-
-
+
+
+
+
+

+
+ Zaloguj się
+ Uzyskaj dostęp do generatora siatki
+
+
+
+
+
);
}
diff --git a/pages/cross_new.js b/pages/cross_new.js
new file mode 100644
index 0000000..bccb53e
--- /dev/null
+++ b/pages/cross_new.js
@@ -0,0 +1,247 @@
+import { useState, useCallback } from "react";
+import { useSession, signIn } from "next-auth/react";
+import Layout from "../components/ui/Layout";
+import { Card, CardHeader, CardContent, CardTitle, CardDescription, Button, Alert } from "../components/ui/components";
+import {
+ FileUploader,
+ FileCard,
+} from "evergreen-ui";
+import { CloudArrowUpIcon as CloudUploadIcon, ArrowDownTrayIcon as DownloadIcon, Squares2X2Icon as GridIcon } from '@heroicons/react/24/outline';
+import axios from "axios";
+
+export default function Cross() {
+ const { data: session } = useSession();
+ const [files, setFiles] = useState([]);
+ const [fileRejections, setFileRejections] = useState([]);
+ const [fileData, setFileData] = useState(null);
+ const [isLoading, setIsLoading] = useState(false);
+
+ const handleChange = useCallback((files) => setFiles([files[0]]), []);
+ const handleRejected = useCallback(
+ (fileRejections) => setFileRejections([fileRejections[0]]),
+ []
+ );
+ const handleRemove = useCallback(() => {
+ setFiles([]);
+ setFileRejections([]);
+ }, []);
+
+ const handleSubmit = (e) => {
+ e.preventDefault();
+ setIsLoading(true);
+
+ console.log("Files:", files);
+ if (files.length === 0) {
+ console.log("No files selected");
+ setIsLoading(false);
+ return;
+ }
+
+ const formData = new FormData();
+ formData.append("files", files[0]);
+
+ axios
+ .post("/api/cross", formData, {
+ headers: {
+ "Content-Type": "multipart/form-data",
+ },
+ })
+ .then((response) => {
+ console.log(response.data);
+ setFileData(response.data);
+ setIsLoading(false);
+ })
+ .catch((error) => {
+ console.error(error);
+ setIsLoading(false);
+ });
+ };
+
+ const handleDownload = () => {
+ if (fileData) {
+ document.getElementById("down").download = fileData.filename;
+ document.getElementById("down").href = "cross.dxf";
+ document.getElementById("down").click();
+ }
+ };
+
+ if (session) {
+ return (
+
+
+ {/* Page Header */}
+
+
+
+
+
+
+
Generator siatki
+
Przekształć pliki DXF na siatki instalacyjne
+
+
+
+
+
+ {/* Upload Section */}
+
+
+
+
+ Prześlij plik
+
+
+ Wybierz plik DXF do przetworzenia (maksymalnie 50 MB)
+
+
+
+
+ {
+ const { name, size, type } = file;
+ const fileRejection = fileRejections.find(
+ (fileRejection) => fileRejection.file === file
+ );
+ const { message } = fileRejection || {};
+ return (
+
+ );
+ }}
+ values={files}
+ />
+
+
+
+
+
+
+ {/* Results Section */}
+
+
+
+
+ Wynik
+
+
+ Pobierz wygenerowany plik siatki
+
+
+
+ {fileData ? (
+
+
+
+
+
Plik został pomyślnie przetworzony!
+
+
+
+
+
+ ) : (
+
+
+
+
+
Prześlij plik aby rozpocząć przetwarzanie
+
+ )}
+
+
+
+
+ {/* Instructions */}
+
+
+ Instrukcje
+
+
+
+
+
+ 1
+
+
+
Prześlij plik
+
Wybierz plik DXF z projektem
+
+
+
+
+
+ 2
+
+
+
Przetwarzaj
+
Kliknij "Dodaj siatkę"
+
+
+
+
+
+ 3
+
+
+
Pobierz
+
Zapisz gotową siatkę DXF
+
+
+
+
+
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+

+
+ Zaloguj się
+ Uzyskaj dostęp do generatora siatki
+
+
+
+
+
+
+ );
+}
diff --git a/pages/index.js b/pages/index.js
index 14d3f25..02ccdc7 100644
--- a/pages/index.js
+++ b/pages/index.js
@@ -1,93 +1,130 @@
-import Head from "next/head";
-import styles from "../styles/Home.module.css";
-import Header from "../components/templates/header";
+import { useState } from "react";
+import { useSession, signIn } from "next-auth/react";
+import Layout from "../components/ui/Layout";
+import { Card, CardHeader, CardContent, CardTitle, Button, Tabs, TabsTrigger, TabsContent } from "../components/ui/components";
import Generator from "../components/templates/generator";
import Manual from "../components/templates/manual";
-import Nav from "../components/templates/nav";
-import UserTop from "../components/templates/userTop";
-import Footer from "../components/templates/footer";
-import { useState } from "react";
-import { useSession, signIn, signOut } from "next-auth/react";
-import { Pane, Button, Tab, Tablist } from "evergreen-ui";
+import { ChartBarIcon, PencilIcon, ArrowRightOnRectangleIcon as LoginIcon } from '@heroicons/react/24/outline';
export default function Home() {
const { data: session } = useSession();
- const [selectedIndex, setSelectedIndex] = useState(0);
- const [tabs] = useState(["auto", "manual"]);
- const [realTabs] = useState([Generator, Manual]);
+ const [selectedTab, setSelectedTab] = useState(0);
if (session) {
return (
-
-
-
Wastpol
-
-
-
-
-
-
-
-
-
-
-
- {tabs.map((tab, index) => (
- setSelectedIndex(index)}
- isSelected={index === selectedIndex}
- >
- {tab}
-
- ))}
-
-
- {realTabs.map((tab, index) =>
- index == 1 ? (
-
-
-
- ) : (
-
-
-
- )
- )}
-
+
+
+ {/* Page Header */}
+
+
+ Generator profilu przekroju terenu
+
+
+ Twórz profesjonalne profile terenowe na podstawie danych z Geoportalu lub wprowadzonych ręcznie
+
-
-
+
+ {/* Main Content Card */}
+
+
+
+
+
+ Automatyczny
+
+
+
+ Ręczny
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* Info Cards */}
+
+
+
+
+
+
+
+
+
Automatyczny
+
Import danych z Geoportalu
+
+
+
+
+
+
+
+
+
+
+
Ręczny
+
Wprowadź punkty manualnie
+
+
+
+
+
+
+
+
+
+
+
Export DXF
+
Pobierz gotowy rysunek
+
+
+
+
+
+
+
);
}
return (
-
-
-
Wastpol
-
-
-
Nie zalogowano
-
-
-
+
+
+
+
+

+
+ Zaloguj się
+ Uzyskaj dostęp do narzędzi inżynierskich
+
+
+
+
+
);
}
diff --git a/pages/uziomy.js b/pages/uziomy.js
index 8fbebe1..061b81b 100644
--- a/pages/uziomy.js
+++ b/pages/uziomy.js
@@ -1,35 +1,23 @@
-import Head from "next/head";
-import styles from "../styles/Home.module.css";
-import Nav from "../components/templates/nav";
-import UserTop from "../components/templates/userTop";
-import { useSession, signIn, signOut } from "next-auth/react";
-import { useState, useCallback } from "react";
-import {
- Pane,
- TextInputField,
- TextareaField,
- Button,
- BuildIcon,
- toaster,
- Alert,
- FileUploader,
- FilePicker,
- FileCard,
- RadioGroup,
- Autocomplete,
-} from "evergreen-ui";
-
-import PizZip from "pizzip";
-import Docxtemplater from "docxtemplater";
+import { useState } from "react";
+import { useSession, signIn } from "next-auth/react";
+import Layout from "../components/ui/Layout";
+import { Card, CardHeader, CardContent, CardTitle, CardDescription, Button, Input, Badge, Alert } from "../components/ui/components";
+import { BoltIcon as LightningBoltIcon, CalculatorIcon, DocumentArrowDownIcon as DocumentDownloadIcon, ClipboardDocumentListIcon as ClipboardListIcon } from '@heroicons/react/24/outline';
import DatePicker from "react-datepicker";
-import { registerLocale, setDefaultLocale } from "react-datepicker";
+import { registerLocale } from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import pl from "date-fns/locale/pl";
+import PizZip from "pizzip";
+import Docxtemplater from "docxtemplater";
registerLocale("pl", pl);
-export default function Rezy() {
+export default function Uziomy() {
const { data: session } = useSession();
const [currentStep, setCurrentStep] = useState(1);
+ const [isCalculating, setIsCalculating] = useState(false);
+ const [isGeneratingDoc, setIsGeneratingDoc] = useState(false);
+ const [isGeneratingDxf, setIsGeneratingDxf] = useState(false);
+ const [calDate, setCalDate] = useState(null);
const [ground, setGround] = useState({
wet_coef: 0,
@@ -59,23 +47,6 @@ export default function Rezy() {
objName: undefined,
});
- // Function to go to the next step
- const goToNextStep = () => {
- if (currentStep < 3) {
- setCurrentStep(currentStep + 1);
- }
- };
-
- // Function to go to the previous step
- const goToPreviousStep = () => {
- if (currentStep > 1) {
- setCurrentStep(currentStep - 1);
- }
- };
-
- const [date, setDate] = useState(null);
- const [calDate, setCalDate] = useState(null);
-
const [options] = useState([
{ label: "5 Ω", value: "5" },
{ label: "10 Ω", value: "10" },
@@ -83,7 +54,6 @@ export default function Rezy() {
{ label: "30 Ω", value: "30" },
]);
const [neededValue, setNeededValue] = useState("5");
-
const [resHValue, setResHValue] = useState("88");
const [resVValue, setResVValue] = useState("89");
@@ -100,17 +70,16 @@ export default function Rezy() {
}
function parseDate(dateString) {
- console.log(dateString);
const parts = dateString.split(".");
const day = parseInt(parts[0], 10);
- const month = parseInt(parts[1], 10) - 1; // Months are 0-indexed in JavaScript Dates
+ const month = parseInt(parts[1], 10) - 1;
const year = parseInt(parts[2], 10);
return new Date(year, month, day);
}
function getGrounding(wanted, wszrg_h, wszrg_v, date) {
const dateObject = parseDate(date);
- const month = dateObject.getMonth() + 1; // JavaScript months are 0-indexed
+ const month = dateObject.getMonth() + 1;
const wet_coef = month >= 6 && month <= 9 ? 1.2 : 1.6;
const rod_len = wanted === 30 ? 2 : 3;
@@ -123,53 +92,26 @@ export default function Rezy() {
const measure_dist_v = 1 + rod_len;
const resistance_v = resistivity_v / (2 * Math.PI * measure_dist_v);
- const result_v =
- (wszrg_v / (2 * Math.PI * rod_len)) *
- (Math.log((8 * rod_len) / 0.016) - 1);
-
- let rod_num = 2; //minimum 2 rods
+ const result_v = (wszrg_v / (2 * Math.PI * rod_len)) * (Math.log((8 * rod_len) / 0.016) - 1);
+ let rod_num = 2;
let hor_len = 1 + (rod_num - 1) * rod_len * 2;
+ let result_h = (wszrg_h / (2 * Math.PI * hor_len)) * Math.log((hor_len * hor_len) / (1 * 0.0191));
- let result_h =
- (wszrg_h / (2 * Math.PI * hor_len)) *
- Math.log((hor_len * hor_len) / (1 * 0.0191));
+ let rod_coef = Math.pow(rod_num, 4) * 0.00002 - Math.pow(rod_num, 3) * 0.0009 +
+ Math.pow(rod_num, 2) * 0.0137 - rod_num * 0.0981 + 1.0468;
- let rod_coef =
- Math.pow(rod_num, 4) * 0.00002 -
- Math.pow(rod_num, 3) * 0.0009 +
- Math.pow(rod_num, 2) * 0.0137 -
- rod_num * 0.0981 +
- 1.0468;
-
- let result =
- (result_v * result_h) /
- (result_v * rod_coef + rod_num * result_h * rod_coef);
+ let result = (result_v * result_h) / (result_v * rod_coef + rod_num * result_h * rod_coef);
while (result > wanted) {
rod_num += 1;
-
hor_len = 1 + (rod_num - 1) * rod_len * 2;
-
- result_h =
- (wszrg_h / (2 * Math.PI * hor_len)) *
- Math.log((hor_len * hor_len) / (1 * 0.0191));
-
- rod_coef =
- Math.pow(rod_num, 4) * 0.00002 -
- Math.pow(rod_num, 3) * 0.0009 +
- Math.pow(rod_num, 2) * 0.0137 -
- rod_num * 0.0981 +
- 1.0468;
-
- result =
- (result_v * result_h) /
- (result_v * rod_coef + rod_num * result_h * rod_coef);
-
- console.log(result, rod_num);
+ result_h = (wszrg_h / (2 * Math.PI * hor_len)) * Math.log((hor_len * hor_len) / (1 * 0.0191));
+ rod_coef = Math.pow(rod_num, 4) * 0.00002 - Math.pow(rod_num, 3) * 0.0009 +
+ Math.pow(rod_num, 2) * 0.0137 - rod_num * 0.0981 + 1.0468;
+ result = (result_v * result_h) / (result_v * rod_coef + rod_num * result_h * rod_coef);
}
- console.log(result, rod_num);
return {
wet_coef: wet_coef,
resistivity_h: resistivity_h.toFixed(2),
@@ -191,7 +133,24 @@ export default function Rezy() {
};
}
- const generateDocument = async (ground) => {
+ const calculateGrounding = () => {
+ setIsCalculating(true);
+ try {
+ const res = getGrounding(
+ parseInt(neededValue),
+ parseFloat(resHValue),
+ parseFloat(resVValue),
+ ground.date
+ );
+ setGround((current) => ({ ...current, ...res }));
+ } catch (error) {
+ alert("Błąd podczas obliczeń: " + error.message);
+ }
+ setIsCalculating(false);
+ };
+
+ const generateDocument = async () => {
+ setIsGeneratingDoc(true);
const data = {
...ground,
resisted_object: ground.objValue1 + " " + ground.objName,
@@ -200,78 +159,55 @@ export default function Rezy() {
try {
const response = await fetch("/api/generateDocx", {
method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
+ headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
});
- if (!response.ok) {
- throw new Error(`Error: ${response.status}`);
- }
+ if (!response.ok) throw new Error("Response was not ok.");
- // Convert the response to a blob and download it
const blob = await response.blob();
- const downloadUrl = window.URL.createObjectURL(blob);
- const link = document.createElement("a");
- link.href = downloadUrl;
- link.download = "opis.docx";
- document.body.appendChild(link);
- link.click();
- link.remove();
+ const downloadUrl = URL.createObjectURL(blob);
+ const a = document.createElement("a");
+ a.href = downloadUrl;
+ a.download = "opis_uziemienia.docx";
+ document.body.appendChild(a);
+ a.click();
+ a.remove();
} catch (error) {
- console.error("Failed to generate document:", error);
+ console.error("Error:", error);
+ alert("Błąd podczas generowania dokumentu");
}
+ setIsGeneratingDoc(false);
};
const generateDxf = async () => {
- // Data that you want to send to the backend
- var dateParts = ground.date.split(".");
+ setIsGeneratingDxf(true);
+ const dateParts = ground.date.split(".");
+ const month = dateParts[1];
+ const year = parseInt(dateParts[2], 10);
+ const formattedDate = month.padStart(2, "0") + "." + year;
- // Extract day, month, and year
- var day = parseInt(dateParts[0], 10);
- var month = parseInt(dateParts[1], 10);
- var year = parseInt(dateParts[2], 10);
-
- // Format the result
- var formattedDate = month.toString().padStart(2, "0") + "." + year;
const inputData = {
args: [
ground.objValue1 + ground.objName,
ground.pr_title,
ground.object,
- ground.in_city +
- ", " +
- ground.commune +
- ", dz. nr " +
- ground.all_parcels,
+ ground.in_city + ", " + ground.commune + ", dz. nr " + ground.all_parcels,
formattedDate,
ground.hor_len,
ground.rod_len,
],
};
- // object1 = args[0] #ZK2a-1P
- // object2 = args[1] #Budowa przyłącza
- // object3 = args[2] #Przyłącze kablowe
- // adres = args[3]
- // date = args[4]
- // len_h = int(args[5])
- // len_v = int(args[6])
try {
const response = await fetch("/api/generateDxf", {
method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
+ headers: { "Content-Type": "application/json" },
body: JSON.stringify(inputData),
});
- if (!response.ok) {
- throw new Error("Response was not ok.");
- }
+ if (!response.ok) throw new Error("Response was not ok.");
- // Download the response (the output file)
const blob = await response.blob();
const downloadUrl = URL.createObjectURL(blob);
const a = document.createElement("a");
@@ -281,271 +217,329 @@ export default function Rezy() {
a.click();
a.remove();
} catch (error) {
- console.error("There was an error:", error);
+ console.error("Error:", error);
+ alert("Błąd podczas generowania rysunku");
}
+ setIsGeneratingDxf(false);
};
if (session) {
return (
-
-
-
Wastpol
-
-
-
-
-
-
-
-
-
-
- 1. Data wykonania pomiaru
-
-
-
- {
- console.log(date);
- console.log(typeof date);
- const day = date.getDate().toString().padStart(2, "0"); // Add leading zero if necessary
- const month = (date.getMonth() + 1)
- .toString()
- .padStart(2, "0"); // Month is 0-indexed, add 1 to get the correct month
- const year = date.getFullYear();
- const formattedDate = `${day}.${month}.${year}`;
- console.log(formattedDate);
- setGround((current) => ({
- ...current,
- date: formattedDate,
- }));
- setCalDate(date);
- }}
- placeholderText="Wybierz datę"
- dateFormat="dd.MM.yyyy"
- />
-
-
-
- {
- setNeededValue(event.target.value);
- }}
- />
- {
- setResHValue(e.target.value);
- setResVValue((ground.wanted==30)?
- getRandomInt(
- parseInt(e.target.value) - 10,
- parseInt(e.target.value) - 4
- ):getRandomInt(
- parseInt(e.target.value) - 20,
- parseInt(e.target.value) - 10
- )
-
- );
- }}
- value={resHValue}
- />
-
- setGround((current) => ({ ...current, no: e.target.value }))
- }
- value={ground.no}
- />{" "}
-
-
-
- setGround((current) => ({
- ...current,
- pr_title: e.target.value,
- }))
- }
- value={ground.pr_title}
- />
-
- setGround((current) => ({
- ...current,
- object: e.target.value,
- }))
- }
- value={ground.object}
- />
-
- setGround((current) => ({
- ...current,
- in_city: e.target.value,
- }))
- }
- value={ground.in_city}
- />
-
- setGround((current) => ({
- ...current,
- commune: e.target.value,
- }))
- }
- value={ground.commune}
- />
-
- setGround((current) => ({
- ...current,
- all_parcels: e.target.value,
- }))
- }
- value={ground.all_parcels}
- />
-
- setGround((current) => ({
- ...current,
- target_parcel: e.target.value,
- }))
- }
- value={ground.target_parcel}
- />
-
- setGround((current) => ({
- ...current,
- geo_data: e.target.value,
- }))
- }
- value={ground.geo_data}
- />{" "}
-
-
-
{
- setObjValue1(event.target.value);
- setGround((current) => ({
- ...current,
- objValue1: event.target.value,
- }));
- }}
- />
-
- setGround((current) => ({
- ...current,
- objName: e.target.value,
- }))
- }
- value={ground.objName}
- />
-
-
-
-
-
-
- Uziemienie poziome: {ground.result_h} Ω ({ground.wszrg_h})
-
-
- Uziemienie pionowe: {ground.result_v} Ω ({ground.wszrg_v})
-
- Uziemienie: {ground.result} Ω
- Szpile: {ground.rod_num} szt
- Bednarka: {ground.hor_len} m
+
+
+ {/* Page Header */}
+
+
+
+
+
+
+
Kalkulator uziemień
+
Oblicz parametry układu uziomowego i wygeneruj dokumentację
+
-
-
+
+
+ {/* Input Data Section */}
+
+
+
+
+
+ Dane pomiarowe
+
+
+ Wprowadź podstawowe dane pomiarowe i parametry projektu
+
+
+
+
+
+
+
+ {
+ setCalDate(date);
+ const day = date.getDate().toString().padStart(2, "0");
+ const month = (date.getMonth() + 1).toString().padStart(2, "0");
+ const year = date.getFullYear();
+ const formattedDate = `${day}.${month}.${year}`;
+ setGround((current) => ({ ...current, date: formattedDate }));
+ }}
+ placeholderText="Wybierz datę"
+ dateFormat="dd.MM.yyyy"
+ className="block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500"
+ />
+
+
+
+
+
+ {options.map((option) => (
+
+ ))}
+
+
+
+
{
+ setResHValue(e.target.value);
+ const val = parseInt(e.target.value);
+ const randomV = ground.wanted == 30 ?
+ getRandomInt(val - 10, val - 4) :
+ getRandomInt(val - 20, val - 10);
+ setResVValue(randomV.toString());
+ }}
+ />
+
+
setGround(curr => ({ ...curr, no: e.target.value }))}
+ />
+
+
+
+ setGround(curr => ({ ...curr, pr_title: e.target.value }))}
+ />
+
+ setGround(curr => ({ ...curr, object: e.target.value }))}
+ />
+
+ setGround(curr => ({ ...curr, in_city: e.target.value }))}
+ />
+
+ setGround(curr => ({ ...curr, commune: e.target.value }))}
+ />
+
+
+
+
+ setGround(curr => ({ ...curr, all_parcels: e.target.value }))}
+ />
+
+ setGround(curr => ({ ...curr, target_parcel: e.target.value }))}
+ />
+
+
+ setGround(curr => ({ ...curr, geo_data: e.target.value }))}
+ />
+
+
+
+
+
+ {objOptions1.map((option) => (
+
+ ))}
+
+
+
+
setGround(curr => ({ ...curr, objName: e.target.value }))}
+ />
+
+
+
+
+
+ {/* Results and Actions Section */}
+
+
+
+
+
+ Obliczenia
+
+
+
+
+
+ {ground.result > 0 && (
+
+
+
+
+ Uziemienie poziome:
+ {ground.result_h} Ω
+
+
+ Uziemienie pionowe:
+ {ground.result_v} Ω
+
+
+ Uziemienie całkowite:
+ {ground.result} Ω
+
+
+ Liczba szpil:
+ {ground.rod_num} szt
+
+
+ Długość bednarki:
+ {ground.hor_len} m
+
+
+
+
+ )}
+
+
+
+
+
+
+
+ Generuj dokumentację
+
+
+
+
+
+
+
+
+
+ {/* Instructions */}
+
+
+ Instrukcje
+
+
+
+
+
+ 1
+
+
Wprowadź dane pomiarowe i parametry projektu
+
+
+
+ 2
+
+
Kliknij "Oblicz uziemienie" aby wykonać kalkulacje
+
+
+
+ 3
+
+
Wygeneruj dokumentację - opis i rysunek techniczny
+
+
+
+
+
+
+
+
);
}
return (
-
-
-
Wastpol
-
-
-
Nie zalogowano
-
-
-
+
+
+
+
+

+
+ Zaloguj się
+ Uzyskaj dostęp do kalkulatora uziemień
+
+
+
+
+
);
}
diff --git a/pages/uziomy_new.js b/pages/uziomy_new.js
new file mode 100644
index 0000000..061b81b
--- /dev/null
+++ b/pages/uziomy_new.js
@@ -0,0 +1,545 @@
+import { useState } from "react";
+import { useSession, signIn } from "next-auth/react";
+import Layout from "../components/ui/Layout";
+import { Card, CardHeader, CardContent, CardTitle, CardDescription, Button, Input, Badge, Alert } from "../components/ui/components";
+import { BoltIcon as LightningBoltIcon, CalculatorIcon, DocumentArrowDownIcon as DocumentDownloadIcon, ClipboardDocumentListIcon as ClipboardListIcon } from '@heroicons/react/24/outline';
+import DatePicker from "react-datepicker";
+import { registerLocale } from "react-datepicker";
+import "react-datepicker/dist/react-datepicker.css";
+import pl from "date-fns/locale/pl";
+import PizZip from "pizzip";
+import Docxtemplater from "docxtemplater";
+registerLocale("pl", pl);
+
+export default function Uziomy() {
+ const { data: session } = useSession();
+ const [currentStep, setCurrentStep] = useState(1);
+ const [isCalculating, setIsCalculating] = useState(false);
+ const [isGeneratingDoc, setIsGeneratingDoc] = useState(false);
+ const [isGeneratingDxf, setIsGeneratingDxf] = useState(false);
+ const [calDate, setCalDate] = useState(null);
+
+ const [ground, setGround] = useState({
+ wet_coef: 0,
+ resistivity: 0,
+ resistance: 0,
+ measure_dist: 0,
+ rod_len: 0,
+ rod_num: 0,
+ rod_coef: 0,
+ hor_len: 0,
+ result_v: 0,
+ result_h: 0,
+ result: 0,
+ wszrg_h: 0,
+ wszrg_v: 0,
+ wanted: 0,
+ date: undefined,
+ no: 0,
+ pr_title: "Budowa przyłącza kablowego nN",
+ in_city: undefined,
+ commune: undefined,
+ all_parcels: undefined,
+ target_parcel: undefined,
+ geo_data: undefined,
+ object: "Przyłącz kablowy nN",
+ objValue1: "proj.",
+ objName: undefined,
+ });
+
+ const [options] = useState([
+ { label: "5 Ω", value: "5" },
+ { label: "10 Ω", value: "10" },
+ { label: "15 Ω", value: "15" },
+ { label: "30 Ω", value: "30" },
+ ]);
+ const [neededValue, setNeededValue] = useState("5");
+ const [resHValue, setResHValue] = useState("88");
+ const [resVValue, setResVValue] = useState("89");
+
+ const [objOptions1] = useState([
+ { label: "proj.", value: "proj." },
+ { label: "istn.", value: "istn." },
+ ]);
+ const [objValue1, setObjValue1] = useState("proj.");
+
+ function getRandomInt(min, max) {
+ min = Math.ceil(min);
+ max = Math.floor(max);
+ return Math.floor(Math.random() * (max - min + 1)) + min;
+ }
+
+ function parseDate(dateString) {
+ const parts = dateString.split(".");
+ const day = parseInt(parts[0], 10);
+ const month = parseInt(parts[1], 10) - 1;
+ const year = parseInt(parts[2], 10);
+ return new Date(year, month, day);
+ }
+
+ function getGrounding(wanted, wszrg_h, wszrg_v, date) {
+ const dateObject = parseDate(date);
+ const month = dateObject.getMonth() + 1;
+
+ const wet_coef = month >= 6 && month <= 9 ? 1.2 : 1.6;
+ const rod_len = wanted === 30 ? 2 : 3;
+
+ const resistivity_h = wszrg_h / wet_coef;
+ const measure_dist_h = 1;
+ const resistance_h = resistivity_h / (2 * Math.PI * measure_dist_h);
+
+ const resistivity_v = wszrg_v / wet_coef;
+ const measure_dist_v = 1 + rod_len;
+ const resistance_v = resistivity_v / (2 * Math.PI * measure_dist_v);
+
+ const result_v = (wszrg_v / (2 * Math.PI * rod_len)) * (Math.log((8 * rod_len) / 0.016) - 1);
+
+ let rod_num = 2;
+ let hor_len = 1 + (rod_num - 1) * rod_len * 2;
+ let result_h = (wszrg_h / (2 * Math.PI * hor_len)) * Math.log((hor_len * hor_len) / (1 * 0.0191));
+
+ let rod_coef = Math.pow(rod_num, 4) * 0.00002 - Math.pow(rod_num, 3) * 0.0009 +
+ Math.pow(rod_num, 2) * 0.0137 - rod_num * 0.0981 + 1.0468;
+
+ let result = (result_v * result_h) / (result_v * rod_coef + rod_num * result_h * rod_coef);
+
+ while (result > wanted) {
+ rod_num += 1;
+ hor_len = 1 + (rod_num - 1) * rod_len * 2;
+ result_h = (wszrg_h / (2 * Math.PI * hor_len)) * Math.log((hor_len * hor_len) / (1 * 0.0191));
+ rod_coef = Math.pow(rod_num, 4) * 0.00002 - Math.pow(rod_num, 3) * 0.0009 +
+ Math.pow(rod_num, 2) * 0.0137 - rod_num * 0.0981 + 1.0468;
+ result = (result_v * result_h) / (result_v * rod_coef + rod_num * result_h * rod_coef);
+ }
+
+ return {
+ wet_coef: wet_coef,
+ resistivity_h: resistivity_h.toFixed(2),
+ resistance_h: resistance_h.toFixed(2),
+ measure_dist_h: measure_dist_h,
+ resistivity_v: resistivity_v.toFixed(2),
+ resistance_v: resistance_v.toFixed(2),
+ measure_dist_v: measure_dist_v,
+ rod_len: rod_len,
+ rod_num: rod_num,
+ rod_coef: rod_coef.toFixed(2),
+ hor_len: hor_len,
+ result_v: result_v.toFixed(2),
+ result_h: result_h.toFixed(2),
+ result: result.toFixed(2),
+ wszrg_h: wszrg_h,
+ wszrg_v: wszrg_v,
+ wanted: neededValue,
+ };
+ }
+
+ const calculateGrounding = () => {
+ setIsCalculating(true);
+ try {
+ const res = getGrounding(
+ parseInt(neededValue),
+ parseFloat(resHValue),
+ parseFloat(resVValue),
+ ground.date
+ );
+ setGround((current) => ({ ...current, ...res }));
+ } catch (error) {
+ alert("Błąd podczas obliczeń: " + error.message);
+ }
+ setIsCalculating(false);
+ };
+
+ const generateDocument = async () => {
+ setIsGeneratingDoc(true);
+ const data = {
+ ...ground,
+ resisted_object: ground.objValue1 + " " + ground.objName,
+ };
+
+ try {
+ const response = await fetch("/api/generateDocx", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(data),
+ });
+
+ if (!response.ok) throw new Error("Response was not ok.");
+
+ const blob = await response.blob();
+ const downloadUrl = URL.createObjectURL(blob);
+ const a = document.createElement("a");
+ a.href = downloadUrl;
+ a.download = "opis_uziemienia.docx";
+ document.body.appendChild(a);
+ a.click();
+ a.remove();
+ } catch (error) {
+ console.error("Error:", error);
+ alert("Błąd podczas generowania dokumentu");
+ }
+ setIsGeneratingDoc(false);
+ };
+
+ const generateDxf = async () => {
+ setIsGeneratingDxf(true);
+ const dateParts = ground.date.split(".");
+ const month = dateParts[1];
+ const year = parseInt(dateParts[2], 10);
+ const formattedDate = month.padStart(2, "0") + "." + year;
+
+ const inputData = {
+ args: [
+ ground.objValue1 + ground.objName,
+ ground.pr_title,
+ ground.object,
+ ground.in_city + ", " + ground.commune + ", dz. nr " + ground.all_parcels,
+ formattedDate,
+ ground.hor_len,
+ ground.rod_len,
+ ],
+ };
+
+ try {
+ const response = await fetch("/api/generateDxf", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(inputData),
+ });
+
+ if (!response.ok) throw new Error("Response was not ok.");
+
+ const blob = await response.blob();
+ const downloadUrl = URL.createObjectURL(blob);
+ const a = document.createElement("a");
+ a.href = downloadUrl;
+ a.download = "uziom.dxf";
+ document.body.appendChild(a);
+ a.click();
+ a.remove();
+ } catch (error) {
+ console.error("Error:", error);
+ alert("Błąd podczas generowania rysunku");
+ }
+ setIsGeneratingDxf(false);
+ };
+
+ if (session) {
+ return (
+
+
+ {/* Page Header */}
+
+
+
+
+
+
+
Kalkulator uziemień
+
Oblicz parametry układu uziomowego i wygeneruj dokumentację
+
+
+
+
+
+ {/* Input Data Section */}
+
+
+
+
+
+ Dane pomiarowe
+
+
+ Wprowadź podstawowe dane pomiarowe i parametry projektu
+
+
+
+
+
+
+
+ {
+ setCalDate(date);
+ const day = date.getDate().toString().padStart(2, "0");
+ const month = (date.getMonth() + 1).toString().padStart(2, "0");
+ const year = date.getFullYear();
+ const formattedDate = `${day}.${month}.${year}`;
+ setGround((current) => ({ ...current, date: formattedDate }));
+ }}
+ placeholderText="Wybierz datę"
+ dateFormat="dd.MM.yyyy"
+ className="block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500"
+ />
+
+
+
+
+
+ {options.map((option) => (
+
+ ))}
+
+
+
+
{
+ setResHValue(e.target.value);
+ const val = parseInt(e.target.value);
+ const randomV = ground.wanted == 30 ?
+ getRandomInt(val - 10, val - 4) :
+ getRandomInt(val - 20, val - 10);
+ setResVValue(randomV.toString());
+ }}
+ />
+
+
setGround(curr => ({ ...curr, no: e.target.value }))}
+ />
+
+
+
+ setGround(curr => ({ ...curr, pr_title: e.target.value }))}
+ />
+
+ setGround(curr => ({ ...curr, object: e.target.value }))}
+ />
+
+ setGround(curr => ({ ...curr, in_city: e.target.value }))}
+ />
+
+ setGround(curr => ({ ...curr, commune: e.target.value }))}
+ />
+
+
+
+
+ setGround(curr => ({ ...curr, all_parcels: e.target.value }))}
+ />
+
+ setGround(curr => ({ ...curr, target_parcel: e.target.value }))}
+ />
+
+
+ setGround(curr => ({ ...curr, geo_data: e.target.value }))}
+ />
+
+
+
+
+
+ {objOptions1.map((option) => (
+
+ ))}
+
+
+
+
setGround(curr => ({ ...curr, objName: e.target.value }))}
+ />
+
+
+
+
+
+ {/* Results and Actions Section */}
+
+
+
+
+
+ Obliczenia
+
+
+
+
+
+ {ground.result > 0 && (
+
+
+
+
+ Uziemienie poziome:
+ {ground.result_h} Ω
+
+
+ Uziemienie pionowe:
+ {ground.result_v} Ω
+
+
+ Uziemienie całkowite:
+ {ground.result} Ω
+
+
+ Liczba szpil:
+ {ground.rod_num} szt
+
+
+ Długość bednarki:
+ {ground.hor_len} m
+
+
+
+
+ )}
+
+
+
+
+
+
+
+ Generuj dokumentację
+
+
+
+
+
+
+
+
+
+ {/* Instructions */}
+
+
+ Instrukcje
+
+
+
+
+
+ 1
+
+
Wprowadź dane pomiarowe i parametry projektu
+
+
+
+ 2
+
+
Kliknij "Oblicz uziemienie" aby wykonać kalkulacje
+
+
+
+ 3
+
+
Wygeneruj dokumentację - opis i rysunek techniczny
+
+
+
+
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+

+
+ Zaloguj się
+ Uzyskaj dostęp do kalkulatora uziemień
+
+
+
+
+
+
+ );
+}
diff --git a/styles/globals.css b/styles/globals.css
index d7019fa..6ed2c7b 100644
--- a/styles/globals.css
+++ b/styles/globals.css
@@ -1,12 +1,16 @@
+@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
@tailwind base;
@tailwind components;
@tailwind utilities;
+
html,
body {
padding: 0;
margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
}
a {
@@ -17,3 +21,80 @@ a {
* {
box-sizing: border-box;
}
+
+@layer base {
+ h1, h2, h3, h4, h5, h6 {
+ @apply font-semibold text-gray-900;
+ }
+
+ h1 {
+ @apply text-3xl lg:text-4xl;
+ }
+
+ h2 {
+ @apply text-2xl lg:text-3xl;
+ }
+
+ h3 {
+ @apply text-xl lg:text-2xl;
+ }
+}
+
+@layer components {
+ .btn-primary {
+ @apply bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-4 rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2;
+ }
+
+ .btn-secondary {
+ @apply bg-gray-100 hover:bg-gray-200 text-gray-900 font-medium py-2 px-4 rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-gray-500 focus:ring-offset-2;
+ }
+
+ .card {
+ @apply bg-white rounded-xl shadow-sm border border-gray-200 hover:shadow-md transition-shadow;
+ }
+
+ .input-field {
+ @apply block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 transition-colors;
+ }
+}
+
+/* Custom scrollbar */
+.scrollbar-thin {
+ scrollbar-width: thin;
+ scrollbar-color: #cbd5e1 #f1f5f9;
+}
+
+.scrollbar-thin::-webkit-scrollbar {
+ width: 6px;
+}
+
+.scrollbar-thin::-webkit-scrollbar-track {
+ background: #f1f5f9;
+ border-radius: 3px;
+}
+
+.scrollbar-thin::-webkit-scrollbar-thumb {
+ background: #cbd5e1;
+ border-radius: 3px;
+}
+
+.scrollbar-thin::-webkit-scrollbar-thumb:hover {
+ background: #94a3b8;
+}
+
+/* Loading animation */
+@keyframes spin {
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+.animate-spin {
+ animation: spin 1s linear infinite;
+}
+
+/* Canvas styling */
+canvas {
+ border-radius: 8px;
+ box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);
+}
diff --git a/tailwind.config.js b/tailwind.config.js
index 7bc83f9..fd01706 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -1,11 +1,38 @@
module.exports = {
content: [
"./pages/**/*.{js,ts,jsx,tsx}",
- "./templates/**/*.{js,ts,jsx,tsx}",
"./components/**/*.{js,ts,jsx,tsx}",
],
theme: {
- extend: {},
+ extend: {
+ colors: {
+ primary: {
+ 50: '#eff6ff',
+ 500: '#3b82f6',
+ 600: '#2563eb',
+ 700: '#1d4ed8',
+ },
+ },
+ fontFamily: {
+ sans: ['Inter', 'system-ui', 'sans-serif'],
+ },
+ animation: {
+ 'fade-in': 'fadeIn 0.5s ease-in-out',
+ 'slide-up': 'slideUp 0.3s ease-out',
+ },
+ keyframes: {
+ fadeIn: {
+ '0%': { opacity: '0' },
+ '100%': { opacity: '1' },
+ },
+ slideUp: {
+ '0%': { transform: 'translateY(10px)', opacity: '0' },
+ '100%': { transform: 'translateY(0)', opacity: '1' },
+ },
+ },
+ },
},
- plugins: [],
+ plugins: [
+ require('@tailwindcss/forms'),
+ ],
};