Refactor cloud, other changes
This commit is contained in:
rodič
4445e1bb76
revize
6f53689bc9
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "utxo22-web",
|
||||
"version": "0.8.1",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "utxo22-web",
|
||||
"version": "0.8.1",
|
||||
"version": "1.0.0",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@fontsource/fira-mono": "^4.5.0",
|
||||
|
@ -18,7 +18,9 @@
|
|||
"d3-scale-chromatic": "^3.0.0",
|
||||
"d3-selection": "^3.0.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": {
|
||||
"@faker-js/faker": "^6.1.2",
|
||||
|
@ -280,12 +282,25 @@
|
|||
"integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==",
|
||||
"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": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
|
||||
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
|
||||
"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": {
|
||||
"version": "7.4.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
||||
|
@ -385,6 +400,15 @@
|
|||
"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": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
|
||||
|
@ -1157,6 +1181,11 @@
|
|||
"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": {
|
||||
"version": "3.2.11",
|
||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
|
||||
|
@ -1326,6 +1355,28 @@
|
|||
"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": {
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
|
||||
|
@ -1368,6 +1419,17 @@
|
|||
"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": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
|
@ -1763,6 +1825,11 @@
|
|||
"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": {
|
||||
"version": "1.22.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
|
||||
|
@ -1864,6 +1931,20 @@
|
|||
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
|
||||
"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": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
|
@ -1984,12 +2065,79 @@
|
|||
"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": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
||||
"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": {
|
||||
"version": "2.9.1",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.1.tgz",
|
||||
|
@ -2230,12 +2378,25 @@
|
|||
"integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==",
|
||||
"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": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
|
||||
"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
|
||||
"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": {
|
||||
"version": "7.4.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
||||
|
@ -2298,6 +2459,11 @@
|
|||
"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": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
|
||||
|
@ -2758,6 +2924,11 @@
|
|||
"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": {
|
||||
"version": "3.2.11",
|
||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
|
||||
|
@ -2885,6 +3056,11 @@
|
|||
"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": {
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
|
||||
|
@ -2915,6 +3091,11 @@
|
|||
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
||||
"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": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
|
@ -3163,6 +3344,11 @@
|
|||
"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": {
|
||||
"version": "1.22.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
|
||||
|
@ -3225,6 +3411,16 @@
|
|||
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
|
||||
"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": {
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||
|
@ -3311,12 +3507,59 @@
|
|||
"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": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
||||
"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": {
|
||||
"version": "2.9.1",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-2.9.1.tgz",
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
"d3-scale-chromatic": "^3.0.0",
|
||||
"d3-selection": "^3.0.0",
|
||||
"date-fns": "^2.28.0",
|
||||
"ethereum-blockies-base64": "^1.0.2"
|
||||
"ethereum-blockies-base64": "^1.0.2",
|
||||
"remove-markdown": "^0.3.0"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
export let col = "speakers";
|
||||
export let size = "normal";
|
||||
export let customSize = null;
|
||||
export let inline = false;
|
||||
|
||||
import SvelteMarkdown from "svelte-markdown";
|
||||
import Link from "$lib/Link.svelte";
|
||||
|
@ -126,7 +127,7 @@
|
|||
{/if}
|
||||
|
||||
{#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}"
|
||||
><img
|
||||
src={currentImg}
|
||||
|
@ -138,7 +139,7 @@
|
|||
{/if}
|
||||
|
||||
{#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}"
|
||||
><img
|
||||
src={currentImg}
|
||||
|
|
|
@ -31,6 +31,9 @@ class API {
|
|||
opts.body = JSON.stringify(body)
|
||||
}
|
||||
const resp = await fetch(`https://api.utxo.cz/${path}`, opts)
|
||||
if (resp.status !== 200) {
|
||||
return null
|
||||
}
|
||||
return resp.json()
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,9 @@
|
|||
|
||||
<script>
|
||||
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 { calcDuration } from "$lib/events.js";
|
||||
import WordCloud from "$lib/WordCloud.svelte";
|
||||
|
@ -45,8 +48,28 @@
|
|||
}
|
||||
|
||||
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>
|
||||
|
||||
<svelte:head>
|
||||
|
@ -80,11 +103,14 @@
|
|||
</div>
|
||||
|
||||
<h1 class="mt-6 uppercase text-lg font-semibold">
|
||||
Seznam událostí ({$bundle.spec.events.length})
|
||||
Seznam událostí ({ids.length})
|
||||
</h1>
|
||||
<div class="mt-4">
|
||||
{#each $bundle.spec.events.filter((e) => !e.parent) as e}
|
||||
<Event event={e} />
|
||||
{#each $bundle.spec.events as e}
|
||||
{#if ids.includes(e.id)}
|
||||
<Event event={e} />
|
||||
{/if}
|
||||
{/each}
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
import { page } from "$app/stores";
|
||||
import { goto } from "$app/navigation";
|
||||
import { loadOrders, loadApiStatus } from "$lib/orders";
|
||||
import Avatar from "$lib/Avatar.svelte";
|
||||
|
||||
const renderers = { link: Link };
|
||||
const orderTicketFormLS = localStorage.getItem("orderTicketForm");
|
||||
|
@ -31,6 +32,14 @@
|
|||
orderTicketForm.set(parsed);
|
||||
}
|
||||
|
||||
const ticketTypes = {
|
||||
public: 'Běžná vstupenka',
|
||||
speaker: 'Přednášející',
|
||||
organizator: 'Organizátor',
|
||||
host: 'Doprovod',
|
||||
}
|
||||
|
||||
|
||||
let forceShow = false;
|
||||
let loading = true;
|
||||
let formProcessing = false;
|
||||
|
@ -321,12 +330,16 @@
|
|||
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="w-11 h-11 rounded-md"
|
||||
style="background-image: url({makeBlockie(
|
||||
ticket.avatarHash
|
||||
)}); background-size: 100% 100%;"
|
||||
/>
|
||||
{#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
|
||||
class="w-10 h-10 rounded-md"
|
||||
style="background-image: url({makeBlockie(
|
||||
ticket.avatarHash
|
||||
)}); background-size: 100% 100%;"
|
||||
/>
|
||||
{/if}
|
||||
<div class="w-auto">
|
||||
<div class="no-flex">
|
||||
<span
|
||||
|
@ -334,7 +347,7 @@
|
|||
>#{ticket.id}</span
|
||||
>
|
||||
</div>
|
||||
<div class="mt-1.5">Běžná vstupenka</div>
|
||||
<div class="mt-1.5">{ticketTypes[ticket.type || 'public']}</div>
|
||||
</div>
|
||||
</div>
|
||||
{#if ticket.data}
|
||||
|
|
|
@ -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>
|
Načítá se…
Odkázat v novém úkolu