Refactor cloud, other changes

This commit is contained in:
tree 2022-04-26 02:28:41 +02:00
rodič 4445e1bb76
revize 6f53689bc9
7 změnil soubory, kde provedl 564 přidání a 17 odebrání

249
package-lock.json vygenerováno
Zobrazit soubor

@ -1,12 +1,12 @@
{ {
"name": "utxo22-web", "name": "utxo22-web",
"version": "0.8.1", "version": "1.0.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "utxo22-web", "name": "utxo22-web",
"version": "0.8.1", "version": "1.0.0",
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"@fontsource/fira-mono": "^4.5.0", "@fontsource/fira-mono": "^4.5.0",
@ -18,7 +18,9 @@
"d3-scale-chromatic": "^3.0.0", "d3-scale-chromatic": "^3.0.0",
"d3-selection": "^3.0.0", "d3-selection": "^3.0.0",
"date-fns": "^2.28.0", "date-fns": "^2.28.0",
"ethereum-blockies-base64": "^1.0.2" "ethereum-blockies-base64": "^1.0.2",
"remove-markdown": "^0.3.0",
"strip-markdown": "^5.0.0"
}, },
"devDependencies": { "devDependencies": {
"@faker-js/faker": "^6.1.2", "@faker-js/faker": "^6.1.2",
@ -280,12 +282,25 @@
"integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==", "integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==",
"dev": true "dev": true
}, },
"node_modules/@types/mdast": {
"version": "3.0.10",
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz",
"integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==",
"dependencies": {
"@types/unist": "*"
}
},
"node_modules/@types/parse-json": { "node_modules/@types/parse-json": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true "dev": true
}, },
"node_modules/@types/unist": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
"integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
},
"node_modules/acorn": { "node_modules/acorn": {
"version": "7.4.1", "version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
@ -385,6 +400,15 @@
"postcss": "^8.1.0" "postcss": "^8.1.0"
} }
}, },
"node_modules/bail": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
"integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/binary-extensions": { "node_modules/binary-extensions": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@ -1157,6 +1181,11 @@
"pnglib": "0.0.1" "pnglib": "0.0.1"
} }
}, },
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"node_modules/fast-glob": { "node_modules/fast-glob": {
"version": "3.2.11", "version": "3.2.11",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
@ -1326,6 +1355,28 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/is-buffer": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
"integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"engines": {
"node": ">=4"
}
},
"node_modules/is-core-module": { "node_modules/is-core-module": {
"version": "2.8.1", "version": "2.8.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
@ -1368,6 +1419,17 @@
"node": ">=0.12.0" "node": ">=0.12.0"
} }
}, },
"node_modules/is-plain-obj": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
"integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/js-tokens": { "node_modules/js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@ -1763,6 +1825,11 @@
"node": ">=8.10.0" "node": ">=8.10.0"
} }
}, },
"node_modules/remove-markdown": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/remove-markdown/-/remove-markdown-0.3.0.tgz",
"integrity": "sha1-XktmdJOpNXlyjz1S7MHbnKUF3Jg="
},
"node_modules/resolve": { "node_modules/resolve": {
"version": "1.22.0", "version": "1.22.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
@ -1864,6 +1931,20 @@
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"dev": true "dev": true
}, },
"node_modules/strip-markdown": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/strip-markdown/-/strip-markdown-5.0.0.tgz",
"integrity": "sha512-PXSts6Ta9A/TwGxVVSRlQs1ukJTAwwtbip2OheJEjPyfykaQ4sJSTnQWjLTI2vYWNts/R/91/csagp15W8n9gA==",
"dependencies": {
"@types/mdast": "^3.0.0",
"@types/unist": "^2.0.6",
"unified": "^10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/supports-color": { "node_modules/supports-color": {
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@ -1984,12 +2065,79 @@
"node": ">=8.0" "node": ">=8.0"
} }
}, },
"node_modules/trough": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
"integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
}
},
"node_modules/unified": {
"version": "10.1.2",
"resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
"integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
"dependencies": {
"@types/unist": "^2.0.0",
"bail": "^2.0.0",
"extend": "^3.0.0",
"is-buffer": "^2.0.0",
"is-plain-obj": "^4.0.0",
"trough": "^2.0.0",
"vfile": "^5.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/unist-util-stringify-position": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz",
"integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==",
"dependencies": {
"@types/unist": "^2.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/util-deprecate": { "node_modules/util-deprecate": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true "dev": true
}, },
"node_modules/vfile": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz",
"integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==",
"dependencies": {
"@types/unist": "^2.0.0",
"is-buffer": "^2.0.0",
"unist-util-stringify-position": "^3.0.0",
"vfile-message": "^3.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/vfile-message": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz",
"integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==",
"dependencies": {
"@types/unist": "^2.0.0",
"unist-util-stringify-position": "^3.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
"node_modules/vite": { "node_modules/vite": {
"version": "2.9.1", "version": "2.9.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.1.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.1.tgz",
@ -2230,12 +2378,25 @@
"integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==", "integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==",
"dev": true "dev": true
}, },
"@types/mdast": {
"version": "3.0.10",
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz",
"integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==",
"requires": {
"@types/unist": "*"
}
},
"@types/parse-json": { "@types/parse-json": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
"dev": true "dev": true
}, },
"@types/unist": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
"integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
},
"acorn": { "acorn": {
"version": "7.4.1", "version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
@ -2298,6 +2459,11 @@
"postcss-value-parser": "^4.2.0" "postcss-value-parser": "^4.2.0"
} }
}, },
"bail": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
"integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="
},
"binary-extensions": { "binary-extensions": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
@ -2758,6 +2924,11 @@
"pnglib": "0.0.1" "pnglib": "0.0.1"
} }
}, },
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"fast-glob": { "fast-glob": {
"version": "3.2.11", "version": "3.2.11",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
@ -2885,6 +3056,11 @@
"binary-extensions": "^2.0.0" "binary-extensions": "^2.0.0"
} }
}, },
"is-buffer": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
"integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
},
"is-core-module": { "is-core-module": {
"version": "2.8.1", "version": "2.8.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
@ -2915,6 +3091,11 @@
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true "dev": true
}, },
"is-plain-obj": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz",
"integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw=="
},
"js-tokens": { "js-tokens": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@ -3163,6 +3344,11 @@
"picomatch": "^2.2.1" "picomatch": "^2.2.1"
} }
}, },
"remove-markdown": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/remove-markdown/-/remove-markdown-0.3.0.tgz",
"integrity": "sha1-XktmdJOpNXlyjz1S7MHbnKUF3Jg="
},
"resolve": { "resolve": {
"version": "1.22.0", "version": "1.22.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
@ -3225,6 +3411,16 @@
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"dev": true "dev": true
}, },
"strip-markdown": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/strip-markdown/-/strip-markdown-5.0.0.tgz",
"integrity": "sha512-PXSts6Ta9A/TwGxVVSRlQs1ukJTAwwtbip2OheJEjPyfykaQ4sJSTnQWjLTI2vYWNts/R/91/csagp15W8n9gA==",
"requires": {
"@types/mdast": "^3.0.0",
"@types/unist": "^2.0.6",
"unified": "^10.0.0"
}
},
"supports-color": { "supports-color": {
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@ -3311,12 +3507,59 @@
"is-number": "^7.0.0" "is-number": "^7.0.0"
} }
}, },
"trough": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz",
"integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g=="
},
"unified": {
"version": "10.1.2",
"resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
"integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
"requires": {
"@types/unist": "^2.0.0",
"bail": "^2.0.0",
"extend": "^3.0.0",
"is-buffer": "^2.0.0",
"is-plain-obj": "^4.0.0",
"trough": "^2.0.0",
"vfile": "^5.0.0"
}
},
"unist-util-stringify-position": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz",
"integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==",
"requires": {
"@types/unist": "^2.0.0"
}
},
"util-deprecate": { "util-deprecate": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
"dev": true "dev": true
}, },
"vfile": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz",
"integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==",
"requires": {
"@types/unist": "^2.0.0",
"is-buffer": "^2.0.0",
"unist-util-stringify-position": "^3.0.0",
"vfile-message": "^3.0.0"
}
},
"vfile-message": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz",
"integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==",
"requires": {
"@types/unist": "^2.0.0",
"unist-util-stringify-position": "^3.0.0"
}
},
"vite": { "vite": {
"version": "2.9.1", "version": "2.9.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.1.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.1.tgz",

Zobrazit soubor

@ -35,6 +35,7 @@
"d3-scale-chromatic": "^3.0.0", "d3-scale-chromatic": "^3.0.0",
"d3-selection": "^3.0.0", "d3-selection": "^3.0.0",
"date-fns": "^2.28.0", "date-fns": "^2.28.0",
"ethereum-blockies-base64": "^1.0.2" "ethereum-blockies-base64": "^1.0.2",
"remove-markdown": "^0.3.0"
} }
} }

Zobrazit soubor

@ -3,6 +3,7 @@
export let col = "speakers"; export let col = "speakers";
export let size = "normal"; export let size = "normal";
export let customSize = null; export let customSize = null;
export let inline = false;
import SvelteMarkdown from "svelte-markdown"; import SvelteMarkdown from "svelte-markdown";
import Link from "$lib/Link.svelte"; import Link from "$lib/Link.svelte";
@ -126,7 +127,7 @@
{/if} {/if}
{#if size === "extra-small"} {#if size === "extra-small"}
<div class="w-6 h-6 text-center"> <div class="w-6 h-6 text-center {inline ? 'inline-block align-middle' : ''}">
<a href="/lide?id={speaker.id}" <a href="/lide?id={speaker.id}"
><img ><img
src={currentImg} src={currentImg}
@ -138,7 +139,7 @@
{/if} {/if}
{#if size === "micro"} {#if size === "micro"}
<div class="w-4 h-4 text-center"> <div class="w-4 h-4 text-center {inline ? 'inline-block align-middle' : ''}">
<a href="/lide?id={speaker.id}" <a href="/lide?id={speaker.id}"
><img ><img
src={currentImg} src={currentImg}

Zobrazit soubor

@ -31,6 +31,9 @@ class API {
opts.body = JSON.stringify(body) opts.body = JSON.stringify(body)
} }
const resp = await fetch(`https://api.utxo.cz/${path}`, opts) const resp = await fetch(`https://api.utxo.cz/${path}`, opts)
if (resp.status !== 200) {
return null
}
return resp.json() return resp.json()
} }

Zobrazit soubor

@ -4,6 +4,9 @@
<script> <script>
import Event from "$lib/Event.svelte"; import Event from "$lib/Event.svelte";
import { onMount, onDestroy } from 'svelte';
import { page } from "$app/stores";
import { goto } from '$app/navigation';
import { bundle, userData } from "$lib/stores.js"; import { bundle, userData } from "$lib/stores.js";
import { calcDuration } from "$lib/events.js"; import { calcDuration } from "$lib/events.js";
import WordCloud from "$lib/WordCloud.svelte"; import WordCloud from "$lib/WordCloud.svelte";
@ -45,8 +48,28 @@
} }
function wordClick(e) { function wordClick(e) {
console.log(e.detail.path[0].innerHTML); const tag = e.detail.path[0].innerHTML;
if (tag) {
goto(`/program?tag=${tag}`)
} }
}
$: events = applyFilters($page, $bundle)
$: ids = []
function applyFilters (pg, bd) {
if (!pg || !bd) {
return []
}
const search = pg.url.searchParams
let arr = bd.spec.events
if (search.get('tag')) {
arr = arr.filter(e => e.tags && e.tags.includes(search.get('tag')))
}
ids = arr.map(a => a.id)
return arr
}
</script> </script>
<svelte:head> <svelte:head>
@ -80,11 +103,14 @@
</div> </div>
<h1 class="mt-6 uppercase text-lg font-semibold"> <h1 class="mt-6 uppercase text-lg font-semibold">
Seznam událostí ({$bundle.spec.events.length}) Seznam událostí ({ids.length})
</h1> </h1>
<div class="mt-4"> <div class="mt-4">
{#each $bundle.spec.events.filter((e) => !e.parent) as e} {#each $bundle.spec.events as e}
{#if ids.includes(e.id)}
<Event event={e} /> <Event event={e} />
{/if}
{/each} {/each}
</div> </div>
</section> </section>

Zobrazit soubor

@ -23,6 +23,7 @@
import { page } from "$app/stores"; import { page } from "$app/stores";
import { goto } from "$app/navigation"; import { goto } from "$app/navigation";
import { loadOrders, loadApiStatus } from "$lib/orders"; import { loadOrders, loadApiStatus } from "$lib/orders";
import Avatar from "$lib/Avatar.svelte";
const renderers = { link: Link }; const renderers = { link: Link };
const orderTicketFormLS = localStorage.getItem("orderTicketForm"); const orderTicketFormLS = localStorage.getItem("orderTicketForm");
@ -31,6 +32,14 @@
orderTicketForm.set(parsed); orderTicketForm.set(parsed);
} }
const ticketTypes = {
public: 'Běžná vstupenka',
speaker: 'Přednášející',
organizator: 'Organizátor',
host: 'Doprovod',
}
let forceShow = false; let forceShow = false;
let loading = true; let loading = true;
let formProcessing = false; let formProcessing = false;
@ -321,12 +330,16 @@
class="border-l border-b border-r p-4 rounded-b-md shadow-md border-blue-web" class="border-l border-b border-r p-4 rounded-b-md shadow-md border-blue-web"
> >
<div class="flex gap-3 text-sm"> <div class="flex gap-3 text-sm">
{#if ticket.type === 'speaker' && ticket.link && ticket.link.id}
<a href="/lide?id={ticket.link.id}"><Avatar speaker={$bundle.spec.speakers.find(s => s.id === ticket.link.id)} size="semi-small" /></a>
{:else}
<div <div
class="w-11 h-11 rounded-md" class="w-10 h-10 rounded-md"
style="background-image: url({makeBlockie( style="background-image: url({makeBlockie(
ticket.avatarHash ticket.avatarHash
)}); background-size: 100% 100%;" )}); background-size: 100% 100%;"
/> />
{/if}
<div class="w-auto"> <div class="w-auto">
<div class="no-flex"> <div class="no-flex">
<span <span
@ -334,7 +347,7 @@
>#{ticket.id}</span >#{ticket.id}</span
> >
</div> </div>
<div class="mt-1.5">Běžná vstupenka</div> <div class="mt-1.5">{ticketTypes[ticket.type || 'public']}</div>
</div> </div>
</div> </div>
{#if ticket.data} {#if ticket.data}

Zobrazit soubor

@ -0,0 +1,260 @@
<script context="module">
export const prerender = true;
</script>
<script>
import { bundle, apiStatus } from "$lib/stores.js";
import { onMount, onDestroy } from "svelte";
import { goto } from "$app/navigation";
import { page } from "$app/stores";
import { faker } from "@faker-js/faker";
import api from "$lib/api.js";
import Avatar from "$lib/Avatar.svelte";
import removeMd from 'remove-markdown';
import { userData } from "$lib/stores";
let claim = null
let form = {
email: '',
name: '',
org: '',
twitter: ''
}
let formProcessing = false
let formError = null
$: target = $bundle && claim ? findTarget(claim.link) : null
function findTarget (link) {
if (link.type === 'speaker') {
return $bundle.spec.speakers.find(s => s.id === link.id)
}
return null
}
async function loadClaim (code) {
const resp = await api.apiCall("claimInfo", { method: 'post' }, { code })
return resp
}
onMount(async () => {
const search = new URLSearchParams($page.url.search)
claim = await loadClaim(search.get('kod'))
if (!claim) {
goto('/')
}
if ($bundle && claim.link && claim.link.type === 'speaker') {
const sp = $bundle.spec.speakers.find(s => s.id === claim.link.id)
if (sp) {
form.name = sp.name || ''
form.org = sp.orgs ? removeMd(sp.orgs).substring(0, 25) : ''
form.twitter = sp.twitter ? '@'+sp.twitter : ''
}
}
})
const linkTypes = {
speaker: {
title: 'Přednášející'
}
}
function processErrors(error) {
if (typeof error === "string") {
return { title: error };
}
const out = { title: error.title };
if (error.formErrors && error.formErrors.length > 0) {
let suberrs = [];
if (error.formErrors.find((fe) => fe.instancePath === "/email")) {
suberrs.push(`Neplatný email`);
}
let ticket = null;
if (
error.formErrors.find(
(fe) => (ticket = fe.instancePath.match(/\/twitter/))
)
) {
suberrs.push(
`Neplatný Twitter účet.`
);
}
out.title =
"Nesprávně vyplněný formulář: " +
(suberrs.length > 0 ? suberrs.join(",") : "neznámá chyba");
out.debug = error.formErrors;
}
if (!out.title) {
out.title = "Neznámá chyba, zkuste to prosím později.";
}
return out;
}
async function submitClaim () {
formProcessing = true
let resp;
try {
resp = await api.apiCall('claim', { method: 'post' }, { code: claim.code, form })
} catch (e) {
console.error(e)
}
if (resp.error) {
formError = processErrors(resp.error)
formProcessing = false
return null;
}
if (!resp.ok || !resp.ticket) {
formError = { title: 'Neznámá chyba' }
formProcessing= false
return null;
}
// add order to user data
userData.update((ud) => {
if (!ud.tickets) {
ud.tickets = [];
}
ud.tickets.push([ resp.ticket.id, resp.ticket.secret ].join(':'));
return ud;
});
window.location.replace('/vstupenky');
}
</script>
<svelte:head>
<title>Přebrání vstupenky | {$bundle ? $bundle.name : "UTXO.22"}</title>
</svelte:head>
<section class="relative mx-auto py-6 sm:py-10 px-6 max-w-6xl text-blue-web">
<h1 class="uppercase text-2xl font-bold">Vyzvednutí vstupenky</h1>
<div class="mt-6 mb-10">
{#if claim && $bundle}
<div class="p-3 bg-blue-web-light rounded-md mt-6 text-blue-web shadow-md">
<div class="p-2">
<div>
<div class="uppercase text-sm font-bold">Kód vyzvednutí</div>
<div class="mt-2 font-mono">
{claim.code}
</div>
</div>
<div class="mt-6">
<div class="uppercase text-sm font-bold">Typ vstupenky</div>
<div class="mt-2">
<span class="">{linkTypes[claim.link.type].title}</span>
{#if target}
- <Avatar speaker={target} size="extra-small" inline="true" /> <a href="/lide?id={target.id}">{target.name}</a>
{/if}
</div>
</div>
{#if claim.claimed}
<div class="mt-6">
<div class="text-lg font-bold">Již vyzvednuto!</div>
</div>
{:else}
<div class="mt-6">
<div class="uppercase text-sm font-bold">Email</div>
<div class="mt-2 text-sm">
Kontaktní email, na který budou zaslány vstupenky.
</div>
<div class="mt-2">
<input
type="text"
class="border border-blue-web rounded-md p-2 w-full lg:w-1/2 text-blue-web"
bind:value={form.email}
/>
</div>
</div>
<div class="mt-6">
<div class="uppercase text-sm font-bold">
Vstupenka
</div>
<div class="mt-2 text-sm">
Informace, které budou vytištěné na Vaší konferenční
jmenovku. Tyto údaje jsou nepovinné a bude možné je změnit
později.
</div>
</div>
<div class="mt-2">
<div class="p-4 bg-utxo-gradient text-white rounded-md mb-6 shadow-md">
<div class="">
<div class="md:flex gap-2">
<div class="flex-1">
<div class="uppercase text-sm">
Jméno (Přezdívka)
</div>
<div class="mt-2">
<input
type="text"
maxlength="25"
class="border border-blue-web rounded-md p-2 w-full text-blue-web"
bind:value={form.name}
placeholder={faker.name.findName()}
/>
</div>
</div>
<div class="flex-1">
<div class="uppercase text-sm">
Organizace (Firma)
</div>
<div class="mt-2">
<input
type="text"
maxlength="25"
class="border border-blue-web rounded-md p-2 w-full text-blue-web"
bind:value={form.org}
placeholder={faker.company.companyName()}
/>
</div>
</div>
<div class="">
<div class="uppercase text-sm">Twitter účet</div>
<div class="mt-2">
<input
type="text"
maxlength="25"
class="border border-blue-web rounded-md p-2 w-full text-blue-web"
bind:value={form.twitter}
placeholder="@{faker.internet.userName()}"
/>
</div>
</div>
</div>
</div>
</div>
<div>
{#if !formProcessing}
<div>
<button
class="hover:bg-utxo-gradient bg-[#E16A61] text-white font-semibold rounded-full shadow-md" disabled={formProcessing} on:click={submitClaim} ><div class="py-2 px-4">Získat vstupenku</div></button>
</div>
{#if formError}
<div class="mt-4 text-red-500">
{formError.title}
</div>
{/if}
{:else}
<div class="flex gap-3">
<div class="">
<img src="/img/Spin-1s-200px.gif" class="w-10" />
</div>
<div class="my-auto text-red-600 font-bold">
Odesílám žádost ..
</div>
</div>
{/if}
</div>
</div>
{/if}
</div>
</div>
{:else}
<div>Načítám ...</div>
{/if}
</div>
</section>