web: bodge to fix broken css bundling UGH
This commit is contained in:
parent
b5a9bac50c
commit
1d30add2ed
11 changed files with 15645 additions and 13494 deletions
72
Web/bun.lock
72
Web/bun.lock
|
@ -4,11 +4,11 @@
|
||||||
"": {
|
"": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"firebase": "^11.2.0",
|
"firebase": "^11.2.0",
|
||||||
|
"franken-ui": "^2.0.0-internal.39",
|
||||||
"lightningcss-cli": "^1.29.1",
|
"lightningcss-cli": "^1.29.1",
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tailwindcss/cli": "^4.0.1",
|
"@tailwindcss/cli": "^4.0.1",
|
||||||
"franken-ui": "^2.0.0-internal.39",
|
|
||||||
"tailwindcss": "^4.0.1",
|
"tailwindcss": "^4.0.1",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
"@firebase/analytics-types": ["@firebase/analytics-types@0.8.3", "", {}, "sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg=="],
|
"@firebase/analytics-types": ["@firebase/analytics-types@0.8.3", "", {}, "sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg=="],
|
||||||
|
|
||||||
"@firebase/app": ["@firebase/app@0.10.18", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "idb": "7.1.1", "tslib": "^2.1.0" } }, "sha512-VuqEwD/QRisKd/zsFsqgvSAx34mZ3WEF47i97FD6Vw4GWAhdjepYf0Hmi6K0b4QMSgWcv/x0C30Slm5NjjERXg=="],
|
"@firebase/app": ["@firebase/app@0.11.0", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "idb": "7.1.1", "tslib": "^2.1.0" } }, "sha512-FaPl2RB2iClQK4IIAN4ruhzyGNRcvAwXk0Ltqdt55RiTmQ4aM2EAJicgI8QNQd2JIkeCT1K8JKsEba3T1/J7FA=="],
|
||||||
|
|
||||||
"@firebase/app-check": ["@firebase/app-check@0.8.11", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-42zIfRI08/7bQqczAy7sY2JqZYEv3a1eNa4fLFdtJ54vNevbBIRSEA3fZgRqWFNHalh5ohsBXdrYgFqaRIuCcQ=="],
|
"@firebase/app-check": ["@firebase/app-check@0.8.11", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-42zIfRI08/7bQqczAy7sY2JqZYEv3a1eNa4fLFdtJ54vNevbBIRSEA3fZgRqWFNHalh5ohsBXdrYgFqaRIuCcQ=="],
|
||||||
|
|
||||||
|
@ -35,37 +35,37 @@
|
||||||
|
|
||||||
"@firebase/app-check-types": ["@firebase/app-check-types@0.5.3", "", {}, "sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng=="],
|
"@firebase/app-check-types": ["@firebase/app-check-types@0.5.3", "", {}, "sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng=="],
|
||||||
|
|
||||||
"@firebase/app-compat": ["@firebase/app-compat@0.2.48", "", { "dependencies": { "@firebase/app": "0.10.18", "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0" } }, "sha512-wVNU1foBIaJncUmiALyRxhHHHC3ZPMLIETTAk+2PG87eP9B/IDBsYUiTpHyboDPEI8CgBPat/zN2v+Snkz6lBw=="],
|
"@firebase/app-compat": ["@firebase/app-compat@0.2.49", "", { "dependencies": { "@firebase/app": "0.11.0", "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0" } }, "sha512-vf838b9WrHs2GH6NfsvA27a3ngDzCnR7oxmc5LJHaJ7mWSCuce1iDRJ2B6raJ6SH9592XXvtW+kzRcPYhC/LoA=="],
|
||||||
|
|
||||||
"@firebase/app-types": ["@firebase/app-types@0.9.3", "", {}, "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw=="],
|
"@firebase/app-types": ["@firebase/app-types@0.9.3", "", {}, "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw=="],
|
||||||
|
|
||||||
"@firebase/auth": ["@firebase/auth@1.8.2", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x", "@react-native-async-storage/async-storage": "^1.18.1" }, "optionalPeers": ["@react-native-async-storage/async-storage"] }, "sha512-q+071y2LWe0bVnjqaX3BscqZwzdP0GKN2YBKapLq4bV88MPfCtWwGKmDhNDEDUmioOjudGXkUY5cvvKqk3mlUg=="],
|
"@firebase/auth": ["@firebase/auth@1.9.0", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x", "@react-native-async-storage/async-storage": "^1.18.1" }, "optionalPeers": ["@react-native-async-storage/async-storage"] }, "sha512-Xz2mbEYauF689qXG/4HppS2+/yGo9R7B6eNUBh3H2+XpAZTGdx8d8TFsW/BMTAK9Q95NB0pb1Bbvfx0lwofq8Q=="],
|
||||||
|
|
||||||
"@firebase/auth-compat": ["@firebase/auth-compat@0.5.17", "", { "dependencies": { "@firebase/auth": "1.8.2", "@firebase/auth-types": "0.12.3", "@firebase/component": "0.6.12", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-Shi6rqLqzU9KLXnUCmlLvVByq1kiG3oe7Wpbf5m1CgS7NiRx2pSSn0HLaRRozdkaizNzMGGj+3oHmNYQ7kU6xA=="],
|
"@firebase/auth-compat": ["@firebase/auth-compat@0.5.18", "", { "dependencies": { "@firebase/auth": "1.9.0", "@firebase/auth-types": "0.13.0", "@firebase/component": "0.6.12", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-dFBev8AMNb2AgIt9afwf/Ku4/0Wq9R9OFSeBB/xjyJt+RfQ9PnNWqU2oFphews23byLg6jle8twRA7iOYfRGRw=="],
|
||||||
|
|
||||||
"@firebase/auth-interop-types": ["@firebase/auth-interop-types@0.2.4", "", {}, "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA=="],
|
"@firebase/auth-interop-types": ["@firebase/auth-interop-types@0.2.4", "", {}, "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA=="],
|
||||||
|
|
||||||
"@firebase/auth-types": ["@firebase/auth-types@0.12.3", "", { "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, "sha512-Zq9zI0o5hqXDtKg6yDkSnvMCMuLU6qAVS51PANQx+ZZX5xnzyNLEBO3GZgBUPsV5qIMFhjhqmLDxUqCbnAYy2A=="],
|
"@firebase/auth-types": ["@firebase/auth-types@0.13.0", "", { "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, "sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg=="],
|
||||||
|
|
||||||
"@firebase/component": ["@firebase/component@0.6.12", "", { "dependencies": { "@firebase/util": "1.10.3", "tslib": "^2.1.0" } }, "sha512-YnxqjtohLbnb7raXt2YuA44cC1wA9GiehM/cmxrsoxKlFxBLy2V0OkRSj9gpngAE0UoJ421Wlav9ycO7lTPAUw=="],
|
"@firebase/component": ["@firebase/component@0.6.12", "", { "dependencies": { "@firebase/util": "1.10.3", "tslib": "^2.1.0" } }, "sha512-YnxqjtohLbnb7raXt2YuA44cC1wA9GiehM/cmxrsoxKlFxBLy2V0OkRSj9gpngAE0UoJ421Wlav9ycO7lTPAUw=="],
|
||||||
|
|
||||||
"@firebase/data-connect": ["@firebase/data-connect@0.2.0", "", { "dependencies": { "@firebase/auth-interop-types": "0.2.4", "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-7OrZtQoLSk2fiGijhIdUnTSqEFti3h1EMhw9nNiSZ6jJGduw4Pz6jrVvxjpZJtGH/JiljbMkBnPBS2h8CTRKEw=="],
|
"@firebase/data-connect": ["@firebase/data-connect@0.3.0", "", { "dependencies": { "@firebase/auth-interop-types": "0.2.4", "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-inbLq0JyQD/d02Al3Lso0Hc8z1BVpB3dYSMFcQkeKhYyjn5bspLczLdasPbCOEUp8MOkLblLZhJuRs7Q/spFnw=="],
|
||||||
|
|
||||||
"@firebase/database": ["@firebase/database@1.0.11", "", { "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/auth-interop-types": "0.2.4", "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "faye-websocket": "0.11.4", "tslib": "^2.1.0" } }, "sha512-gLrw/XeioswWUXgpVKCPAzzoOuvYNqK5fRUeiJTzO7Mlp9P6ylFEyPJlRBl1djqYye641r3MX6AmIeMXwjgwuQ=="],
|
"@firebase/database": ["@firebase/database@1.0.12", "", { "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/auth-interop-types": "0.2.4", "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "faye-websocket": "0.11.4", "tslib": "^2.1.0" } }, "sha512-psFl5t6rSFHq3i3fnU1QQlc4BB9Hnhh8TgEqvQlPPm8kDLw8gYxvjqYw3c5CZW0+zKR837nwT6im/wtJUivMKw=="],
|
||||||
|
|
||||||
"@firebase/database-compat": ["@firebase/database-compat@2.0.2", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/database": "1.0.11", "@firebase/database-types": "1.0.8", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0" } }, "sha512-5zvdnMsfDHvrQAVM6jBS7CkBpu+z3YbpFdhxRsrK1FP45IEfxlzpeuEUb17D/tpM10vfq4Ok0x5akIBaCv7gfA=="],
|
"@firebase/database-compat": ["@firebase/database-compat@2.0.3", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/database": "1.0.12", "@firebase/database-types": "1.0.8", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0" } }, "sha512-uHGQrSUeJvsDfA+IyHW5O4vdRPsCksEzv4T4Jins+bmQgYy20ZESU4x01xrQCn/nzqKHuQMEW99CoCO7D+5NiQ=="],
|
||||||
|
|
||||||
"@firebase/database-types": ["@firebase/database-types@1.0.8", "", { "dependencies": { "@firebase/app-types": "0.9.3", "@firebase/util": "1.10.3" } }, "sha512-6lPWIGeufhUq1heofZULyVvWFhD01TUrkkB9vyhmksjZ4XF7NaivQp9rICMk7QNhqwa+uDCaj4j+Q8qqcSVZ9g=="],
|
"@firebase/database-types": ["@firebase/database-types@1.0.8", "", { "dependencies": { "@firebase/app-types": "0.9.3", "@firebase/util": "1.10.3" } }, "sha512-6lPWIGeufhUq1heofZULyVvWFhD01TUrkkB9vyhmksjZ4XF7NaivQp9rICMk7QNhqwa+uDCaj4j+Q8qqcSVZ9g=="],
|
||||||
|
|
||||||
"@firebase/firestore": ["@firebase/firestore@4.7.6", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "@firebase/webchannel-wrapper": "1.0.3", "@grpc/grpc-js": "~1.9.0", "@grpc/proto-loader": "^0.7.8", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-aVDboR+upR/44qZDLR4tnZ9pepSOFBbDJnwk7eWzmTyQq2nZAVG+HIhrqpQawmUVcDRkuJv2K2UT2+oqR8F8TA=="],
|
"@firebase/firestore": ["@firebase/firestore@4.7.7", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "@firebase/webchannel-wrapper": "1.0.3", "@grpc/grpc-js": "~1.9.0", "@grpc/proto-loader": "^0.7.8", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-DDYBjqSyd2vD3SjfRqI2Q9Ua1N0URP+1P0/SnNdVSp0/S5mkbaklIX/eU+199ze0XXnC61RYLqi6KYTYtGoz2A=="],
|
||||||
|
|
||||||
"@firebase/firestore-compat": ["@firebase/firestore-compat@0.3.41", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/firestore": "4.7.6", "@firebase/firestore-types": "3.0.3", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-J/PgWKEt0yugETOE7lOabT16hsV21cLzSxERD7ZhaiwBQkBTSf0Mx9RhjZRT0Ttqe4weM90HGZFyUBqYA73fVA=="],
|
"@firebase/firestore-compat": ["@firebase/firestore-compat@0.3.42", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/firestore": "4.7.7", "@firebase/firestore-types": "3.0.3", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-L/JqnVw7Bf+2jcCmW1nCiknkIVVM5RIR4rHE1UrtInAvP9vo8pUhFEZVzbwX71SuCoHOwjiaPDvVSeOFachokg=="],
|
||||||
|
|
||||||
"@firebase/firestore-types": ["@firebase/firestore-types@3.0.3", "", { "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, "sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q=="],
|
"@firebase/firestore-types": ["@firebase/firestore-types@3.0.3", "", { "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, "sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q=="],
|
||||||
|
|
||||||
"@firebase/functions": ["@firebase/functions@0.12.1", "", { "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/auth-interop-types": "0.2.4", "@firebase/component": "0.6.12", "@firebase/messaging-interop-types": "0.2.3", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-QucRiFrvMMmIGTRhL7ZK2IeBnAWP7lAmfFREMpEtX47GjVqDqGxdFs+Mg7XBzxSc9UjDO4Rxf+aE9xJHU6bGwg=="],
|
"@firebase/functions": ["@firebase/functions@0.12.2", "", { "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/auth-interop-types": "0.2.4", "@firebase/component": "0.6.12", "@firebase/messaging-interop-types": "0.2.3", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-iKpFDoCYk/Qm+Qwv5ynRb9/yq64QOt0A0+t9NuekyAZnSoV56kSNq/PmsVmBauar5SlmEjhHk6QKdMBP9S0gXA=="],
|
||||||
|
|
||||||
"@firebase/functions-compat": ["@firebase/functions-compat@0.3.18", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/functions": "0.12.1", "@firebase/functions-types": "0.6.3", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-N7+RN5GVus2ORB8cqfSNhfSn4iaYws6F8uCCfn4mtjC7zYS/KH6muzNAhZUdUqlv5YazbVmvxlAoYYF39i8Qzg=="],
|
"@firebase/functions-compat": ["@firebase/functions-compat@0.3.19", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/functions": "0.12.2", "@firebase/functions-types": "0.6.3", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-uw4tR8NcJCDu86UD63Za8A8SgFgmAVFb1XsGlkuBY7gpLyZWEFavWnwRkZ/8cUwpqUhp/SptXFZ1WFJSnOokLw=="],
|
||||||
|
|
||||||
"@firebase/functions-types": ["@firebase/functions-types@0.6.3", "", {}, "sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg=="],
|
"@firebase/functions-types": ["@firebase/functions-types@0.6.3", "", {}, "sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg=="],
|
||||||
|
|
||||||
|
@ -83,9 +83,9 @@
|
||||||
|
|
||||||
"@firebase/messaging-interop-types": ["@firebase/messaging-interop-types@0.2.3", "", {}, "sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q=="],
|
"@firebase/messaging-interop-types": ["@firebase/messaging-interop-types@0.2.3", "", {}, "sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q=="],
|
||||||
|
|
||||||
"@firebase/performance": ["@firebase/performance@0.6.12", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/installations": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-8mYL4z2jRlKXAi2hjk4G7o2sQLnJCCuTbyvti/xmHf5ZvOIGB01BZec0aDuBIXO+H1MLF62dbye/k91Fr+yc8g=="],
|
"@firebase/performance": ["@firebase/performance@0.7.0", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/installations": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0", "web-vitals": "^4.2.4" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-L91PwYuiJdKXKSRqsWNicvTppAJVzKjye03UlegeD6TkpKjb93T8AmJ9B0Mt0bcWHCNtnnRBCdSCvD2U9GZDjw=="],
|
||||||
|
|
||||||
"@firebase/performance-compat": ["@firebase/performance-compat@0.2.12", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/performance": "0.6.12", "@firebase/performance-types": "0.2.3", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-DyCbDTIwtBTGsEiQxTz/TD23a0na2nrDozceQ5kVkszyFYvliB0YK/9el0wAGIG91SqgTG9pxHtYErzfZc0VWw=="],
|
"@firebase/performance-compat": ["@firebase/performance-compat@0.2.13", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/performance": "0.7.0", "@firebase/performance-types": "0.2.3", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-pB0SMQj2TLQ6roDcX0YQDWvUnVgsVOl0VnUvyT/VBdCUuQYDHobZsPEuQsoEqmPA44KS/Gl0oyKqf+I8UPtRgw=="],
|
||||||
|
|
||||||
"@firebase/performance-types": ["@firebase/performance-types@0.2.3", "", {}, "sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ=="],
|
"@firebase/performance-types": ["@firebase/performance-types@0.2.3", "", {}, "sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ=="],
|
||||||
|
|
||||||
|
@ -95,15 +95,15 @@
|
||||||
|
|
||||||
"@firebase/remote-config-types": ["@firebase/remote-config-types@0.4.0", "", {}, "sha512-7p3mRE/ldCNYt8fmWMQ/MSGRmXYlJ15Rvs9Rk17t8p0WwZDbeK7eRmoI1tvCPaDzn9Oqh+yD6Lw+sGLsLg4kKg=="],
|
"@firebase/remote-config-types": ["@firebase/remote-config-types@0.4.0", "", {}, "sha512-7p3mRE/ldCNYt8fmWMQ/MSGRmXYlJ15Rvs9Rk17t8p0WwZDbeK7eRmoI1tvCPaDzn9Oqh+yD6Lw+sGLsLg4kKg=="],
|
||||||
|
|
||||||
"@firebase/storage": ["@firebase/storage@0.13.5", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-sB/7HNuW0N9tITyD0RxVLNCROuCXkml5i/iPqjwOGKC0xiUfpCOjBE+bb0ABMoN1qYZfqk0y9IuI2TdomjmkNw=="],
|
"@firebase/storage": ["@firebase/storage@0.13.6", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-BEJLYQzVgAoglRl5VRIRZ91RRBZgS/O37/PSGQJBYNuoLmFZUrtwrlLTOAwG776NlO9VQR+K2j15/36Lr2EqHA=="],
|
||||||
|
|
||||||
"@firebase/storage-compat": ["@firebase/storage-compat@0.3.15", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/storage": "0.13.5", "@firebase/storage-types": "0.8.3", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-Z9afjrK2O9o1ZHWCpprCGZ1BTc3BbvpZvi6tkSteC8H3W/fMM6x+RoSunlzD3hEVV5bkbwdJIqNClLMchvyoPA=="],
|
"@firebase/storage-compat": ["@firebase/storage-compat@0.3.16", "", { "dependencies": { "@firebase/component": "0.6.12", "@firebase/storage": "0.13.6", "@firebase/storage-types": "0.8.3", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-EeMuok/s0r938lEomia8XILEqSYULm7HcYZ/GTZLDWur0kMf2ktuPVZiTdRiwEV3Iki7FtQO5txrQ/0pLRVLAw=="],
|
||||||
|
|
||||||
"@firebase/storage-types": ["@firebase/storage-types@0.8.3", "", { "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, "sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg=="],
|
"@firebase/storage-types": ["@firebase/storage-types@0.8.3", "", { "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, "sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg=="],
|
||||||
|
|
||||||
"@firebase/util": ["@firebase/util@1.10.3", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-wfoF5LTy0m2ufUapV0ZnpcGQvuavTbJ5Qr1Ze9OJGL70cSMvhDyjS4w2121XdA3lGZSTOsDOyGhpoDtYwck85A=="],
|
"@firebase/util": ["@firebase/util@1.10.3", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-wfoF5LTy0m2ufUapV0ZnpcGQvuavTbJ5Qr1Ze9OJGL70cSMvhDyjS4w2121XdA3lGZSTOsDOyGhpoDtYwck85A=="],
|
||||||
|
|
||||||
"@firebase/vertexai": ["@firebase/vertexai@1.0.3", "", { "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x", "@firebase/app-types": "0.x" } }, "sha512-SQHg/RPb3LwQs/xiLcvAZYz9NXyDSZUIIwvgsKh6e4wdULAfyPCZIu6Y2ZYIhZLfk9Q44cKZ+++7RPTaqQJdYA=="],
|
"@firebase/vertexai": ["@firebase/vertexai@1.0.4", "", { "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/component": "0.6.12", "@firebase/logger": "0.4.4", "@firebase/util": "1.10.3", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x", "@firebase/app-types": "0.x" } }, "sha512-Nkf/r4u166b4Id6zrrW0Qtg1KyZpQvvYchtkebamnHtIfY+Qnt51I/sx4Saos/WrmO8SnrSU850LfmJ7pehYXg=="],
|
||||||
|
|
||||||
"@firebase/webchannel-wrapper": ["@firebase/webchannel-wrapper@1.0.3", "", {}, "sha512-2xCRM9q9FlzGZCdgDMJwc0gyUkWFtkosy7Xxr6sFgQwn+wMNIWd7xIvYNauU1r64B5L5rsGKy/n9TKJ0aAFeqQ=="],
|
"@firebase/webchannel-wrapper": ["@firebase/webchannel-wrapper@1.0.3", "", {}, "sha512-2xCRM9q9FlzGZCdgDMJwc0gyUkWFtkosy7Xxr6sFgQwn+wMNIWd7xIvYNauU1r64B5L5rsGKy/n9TKJ0aAFeqQ=="],
|
||||||
|
|
||||||
|
@ -159,33 +159,33 @@
|
||||||
|
|
||||||
"@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="],
|
"@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="],
|
||||||
|
|
||||||
"@tailwindcss/cli": ["@tailwindcss/cli@4.0.1", "", { "dependencies": { "@parcel/watcher": "^2.5.0", "@tailwindcss/node": "^4.0.1", "@tailwindcss/oxide": "^4.0.1", "enhanced-resolve": "^5.18.0", "lightningcss": "^1.29.1", "mri": "^1.2.0", "picocolors": "^1.1.1", "tailwindcss": "4.0.1" }, "bin": { "tailwindcss": "dist/index.mjs" } }, "sha512-UuF9NNMdPAO3rSrTey33m6Qw0tX86t5Z+boxEqot8OBwqC8214ByV0/9ib0Y/ojzuZFWaeFldmvSEJsudNYvSg=="],
|
"@tailwindcss/cli": ["@tailwindcss/cli@4.0.6", "", { "dependencies": { "@parcel/watcher": "^2.5.1", "@tailwindcss/node": "^4.0.6", "@tailwindcss/oxide": "^4.0.6", "enhanced-resolve": "^5.18.0", "lightningcss": "^1.29.1", "mri": "^1.2.0", "picocolors": "^1.1.1", "tailwindcss": "4.0.6" }, "bin": { "tailwindcss": "dist/index.mjs" } }, "sha512-5EybaKjLL6ruuKq4PFMpf60npR6x6MmVlqvXWca7ZcujQd7rj5vckNHi2M7Bn0U7dkWmmOm3s/9USLL7BZuudw=="],
|
||||||
|
|
||||||
"@tailwindcss/node": ["@tailwindcss/node@4.0.1", "", { "dependencies": { "enhanced-resolve": "^5.18.0", "jiti": "^2.4.2", "tailwindcss": "4.0.1" } }, "sha512-lc+ly6PKHqgCVl7eO8D2JlV96Lks5bmL6pdtM6UasyUHLU2zmrOqU6jfgln120IVnCh3VC8GG/ca24xVTtSokw=="],
|
"@tailwindcss/node": ["@tailwindcss/node@4.0.6", "", { "dependencies": { "enhanced-resolve": "^5.18.0", "jiti": "^2.4.2", "tailwindcss": "4.0.6" } }, "sha512-jb6E0WeSq7OQbVYcIJ6LxnZTeC4HjMvbzFBMCrQff4R50HBlo/obmYNk6V2GCUXDeqiXtvtrQgcIbT+/boB03Q=="],
|
||||||
|
|
||||||
"@tailwindcss/oxide": ["@tailwindcss/oxide@4.0.1", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.0.1", "@tailwindcss/oxide-darwin-arm64": "4.0.1", "@tailwindcss/oxide-darwin-x64": "4.0.1", "@tailwindcss/oxide-freebsd-x64": "4.0.1", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.1", "@tailwindcss/oxide-linux-arm64-gnu": "4.0.1", "@tailwindcss/oxide-linux-arm64-musl": "4.0.1", "@tailwindcss/oxide-linux-x64-gnu": "4.0.1", "@tailwindcss/oxide-linux-x64-musl": "4.0.1", "@tailwindcss/oxide-win32-arm64-msvc": "4.0.1", "@tailwindcss/oxide-win32-x64-msvc": "4.0.1" } }, "sha512-3z1SpWoDeaA6K6jd92CRrGyDghOcRILEgyWVHRhaUm/tcpiazwJpU9BSG0xB7GGGnl9capojaC+zme/nKsZd/w=="],
|
"@tailwindcss/oxide": ["@tailwindcss/oxide@4.0.6", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.0.6", "@tailwindcss/oxide-darwin-arm64": "4.0.6", "@tailwindcss/oxide-darwin-x64": "4.0.6", "@tailwindcss/oxide-freebsd-x64": "4.0.6", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.6", "@tailwindcss/oxide-linux-arm64-gnu": "4.0.6", "@tailwindcss/oxide-linux-arm64-musl": "4.0.6", "@tailwindcss/oxide-linux-x64-gnu": "4.0.6", "@tailwindcss/oxide-linux-x64-musl": "4.0.6", "@tailwindcss/oxide-win32-arm64-msvc": "4.0.6", "@tailwindcss/oxide-win32-x64-msvc": "4.0.6" } }, "sha512-lVyKV2y58UE9CeKVcYykULe9QaE1dtKdxDEdrTPIdbzRgBk6bdxHNAoDqvcqXbIGXubn3VOl1O/CFF77v/EqSA=="],
|
||||||
|
|
||||||
"@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.0.1", "", { "os": "android", "cpu": "arm64" }, "sha512-eP/rI9WaAElpeiiHDqGtDqga9iDsOClXxIqdHayHsw93F24F03b60CwgGhrGF9Io/EuWIpz3TMRhPVOLhoXivw=="],
|
"@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.0.6", "", { "os": "android", "cpu": "arm64" }, "sha512-xDbym6bDPW3D2XqQqX3PjqW3CKGe1KXH7Fdkc60sX5ZLVUbzPkFeunQaoP+BuYlLc2cC1FoClrIRYnRzof9Sow=="],
|
||||||
|
|
||||||
"@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.0.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-jZVUo0kNd1IjxdCYwg4dwegDNsq7PoUx4LM814RmgY3gfJ63Y6GlpJXHOpd5FLv1igpeZox5LzRk2oz8MQoJwQ=="],
|
"@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.0.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-1f71/ju/tvyGl5c2bDkchZHy8p8EK/tDHCxlpYJ1hGNvsYihZNurxVpZ0DefpN7cNc9RTT8DjrRoV8xXZKKRjg=="],
|
||||||
|
|
||||||
"@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.0.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-E31wHiIf4LB0aKRohrS4U6XfFSACCL9ifUFfPQ16FhcBIL4wU5rcBidvWvT9TQFGPkpE69n5dyXUcqiMrnF/Ig=="],
|
"@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.0.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-s/hg/ZPgxFIrGMb0kqyeaqZt505P891buUkSezmrDY6lxv2ixIELAlOcUVTkVh245SeaeEiUVUPiUN37cwoL2g=="],
|
||||||
|
|
||||||
"@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.0.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-8/3ZKLMYqgAsBzTeczOKWtT4geF02g9S7cntY5gvqQZ4E0ImX724cHcZJi9k6fkE6aLbvwxxHxaShFvRxblwKQ=="],
|
"@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.0.6", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Z3Wo8FWZnmio8+xlcbb7JUo/hqRMSmhQw8IGIRoRJ7GmLR0C+25Wq+bEX/135xe/yEle2lFkhu9JBHd4wZYiig=="],
|
||||||
|
|
||||||
"@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.0.1", "", { "os": "linux", "cpu": "arm" }, "sha512-EYjbh225klQfWzy6LeIAfdjHCK+p71yLV/GjdPNW47Bfkkq05fTzIhHhCgshUvNp78EIA33iQU+ktWpW06NgHw=="],
|
"@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.0.6", "", { "os": "linux", "cpu": "arm" }, "sha512-SNSwkkim1myAgmnbHs4EjXsPL7rQbVGtjcok5EaIzkHkCAVK9QBQsWeP2Jm2/JJhq4wdx8tZB9Y7psMzHYWCkA=="],
|
||||||
|
|
||||||
"@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-PrX2SwIqWNP5cYeSyQfrhbk4ffOM338T6CrEwIAGvLPoUZiklt19yknlsBme6bReSw7TSAMy+8KFdLLi5fcWNQ=="],
|
"@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.0.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-tJ+mevtSDMQhKlwCCuhsFEFg058kBiSy4TkoeBG921EfrHKmexOaCyFKYhVXy4JtkaeeOcjJnCLasEeqml4i+Q=="],
|
||||||
|
|
||||||
"@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.0.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-iuoFGhKDojtfloi5uj6MIk4kxEOGcsAk/kPbZItF9Dp7TnzVhxo2U/718tXhxGrg6jSL3ST3cQHIjA6yw3OeXw=="],
|
"@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.0.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-IoArz1vfuTR4rALXMUXI/GWWfx2EaO4gFNtBNkDNOYhlTD4NVEwE45nbBoojYiTulajI4c2XH8UmVEVJTOJKxA=="],
|
||||||
|
|
||||||
"@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-pNUrGQYyE8RK+N9yvkPmHnlKDfFbni9A3lsi37u4RoA/6Yn+zWVoegvAQMZu3w+jqnpb2A/bYJ+LumcclUZ3yg=="],
|
"@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.0.6", "", { "os": "linux", "cpu": "x64" }, "sha512-QtsUfLkEAeWAC3Owx9Kg+7JdzE+k9drPhwTAXbXugYB9RZUnEWWx5x3q/au6TvUYcL+n0RBqDEO2gucZRvRFgQ=="],
|
||||||
|
|
||||||
"@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.0.1", "", { "os": "linux", "cpu": "x64" }, "sha512-xSGWaDcT6SJ75su9zWXj8GYb2jM/przXwZGH96RTS7HGDIoI1tvgpls88YajG5Sx7hXaqAWCufjw5L/dlu+lzg=="],
|
"@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.0.6", "", { "os": "linux", "cpu": "x64" }, "sha512-QthvJqIji2KlGNwLcK/PPYo7w1Wsi/8NK0wAtRGbv4eOPdZHkQ9KUk+oCoP20oPO7i2a6X1aBAFQEL7i08nNMA=="],
|
||||||
|
|
||||||
"@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.0.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-BUNL2isUZ2yWnbplPddggJpZxsqGHPZ1RJAYpu63W4znUnKCzI4m/jiy0WpyYqqOKL9jDM5q0QdsQ9mc3aw5YQ=="],
|
"@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.0.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-+oka+dYX8jy9iP00DJ9Y100XsqvbqR5s0yfMZJuPR1H/lDVtDfsZiSix1UFBQ3X1HWxoEEl6iXNJHWd56TocVw=="],
|
||||||
|
|
||||||
"@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.0.1", "", { "os": "win32", "cpu": "x64" }, "sha512-ZtcVu+XXOddGsPlvO5nh2fnbKmwly2C07ZB1lcYCf/b8qIWF04QY9o6vy6/+6ioLRfbp3E7H/ipFio38DZX4oQ=="],
|
"@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.0.6", "", { "os": "win32", "cpu": "x64" }, "sha512-+o+juAkik4p8Ue/0LiflQXPmVatl6Av3LEZXpBTfg4qkMIbZdhCGWFzHdt2NjoMiLOJCFDddoV6GYaimvK1Olw=="],
|
||||||
|
|
||||||
"@types/node": ["@types/node@22.13.0", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA=="],
|
"@types/node": ["@types/node@22.13.0", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA=="],
|
||||||
|
|
||||||
|
@ -215,9 +215,9 @@
|
||||||
|
|
||||||
"fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
|
"fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
|
||||||
|
|
||||||
"firebase": ["firebase@11.2.0", "", { "dependencies": { "@firebase/analytics": "0.10.11", "@firebase/analytics-compat": "0.2.17", "@firebase/app": "0.10.18", "@firebase/app-check": "0.8.11", "@firebase/app-check-compat": "0.3.18", "@firebase/app-compat": "0.2.48", "@firebase/app-types": "0.9.3", "@firebase/auth": "1.8.2", "@firebase/auth-compat": "0.5.17", "@firebase/data-connect": "0.2.0", "@firebase/database": "1.0.11", "@firebase/database-compat": "2.0.2", "@firebase/firestore": "4.7.6", "@firebase/firestore-compat": "0.3.41", "@firebase/functions": "0.12.1", "@firebase/functions-compat": "0.3.18", "@firebase/installations": "0.6.12", "@firebase/installations-compat": "0.2.12", "@firebase/messaging": "0.12.16", "@firebase/messaging-compat": "0.2.16", "@firebase/performance": "0.6.12", "@firebase/performance-compat": "0.2.12", "@firebase/remote-config": "0.5.0", "@firebase/remote-config-compat": "0.2.12", "@firebase/storage": "0.13.5", "@firebase/storage-compat": "0.3.15", "@firebase/util": "1.10.3", "@firebase/vertexai": "1.0.3" } }, "sha512-ztwPhBLAZMVNZjBeQzzTM4rk2rsRXmdFYcnvjAXh+StbiFVshHKaPO9VRGMUzF48du4Mkz6jN1wkmYCuUJPxLA=="],
|
"firebase": ["firebase@11.3.0", "", { "dependencies": { "@firebase/analytics": "0.10.11", "@firebase/analytics-compat": "0.2.17", "@firebase/app": "0.11.0", "@firebase/app-check": "0.8.11", "@firebase/app-check-compat": "0.3.18", "@firebase/app-compat": "0.2.49", "@firebase/app-types": "0.9.3", "@firebase/auth": "1.9.0", "@firebase/auth-compat": "0.5.18", "@firebase/data-connect": "0.3.0", "@firebase/database": "1.0.12", "@firebase/database-compat": "2.0.3", "@firebase/firestore": "4.7.7", "@firebase/firestore-compat": "0.3.42", "@firebase/functions": "0.12.2", "@firebase/functions-compat": "0.3.19", "@firebase/installations": "0.6.12", "@firebase/installations-compat": "0.2.12", "@firebase/messaging": "0.12.16", "@firebase/messaging-compat": "0.2.16", "@firebase/performance": "0.7.0", "@firebase/performance-compat": "0.2.13", "@firebase/remote-config": "0.5.0", "@firebase/remote-config-compat": "0.2.12", "@firebase/storage": "0.13.6", "@firebase/storage-compat": "0.3.16", "@firebase/util": "1.10.3", "@firebase/vertexai": "1.0.4" } }, "sha512-wLuBsWqg/M3pay2qOOLLKjTQxPUO2yrJgZLt4TKUwA3c3lrFNM2zc40uzD9LQdUk6H9HEK6bXjGPFrpwmu7HzA=="],
|
||||||
|
|
||||||
"franken-ui": ["franken-ui@2.0.0-internal.39", "", { "peerDependencies": { "lodash": "^4.17.21", "postcss-combine-duplicated-selectors": "^10.0.3", "postcss-sort-media-queries": "^5.2.0", "tailwindcss": "^3.4.9" }, "bin": { "franken-ui": "dist/bin.js" } }, "sha512-nJCKP/XuuDFqQGsR/vhtkCuusj8WHVmvJ7dQeA7SzhEUctBKK2hlaNbzEWEwbzG6KGC2WowCkdisTLk6lckH3w=="],
|
"franken-ui": ["franken-ui@2.0.0-internal.42", "", { "peerDependencies": { "lodash": "^4.17.21", "postcss-combine-duplicated-selectors": "^10.0.3", "postcss-sort-media-queries": "^5.2.0", "tailwindcss": "^3.4.9" }, "bin": { "franken-ui": "dist/bin.js" } }, "sha512-2me+tG8jba4b0k53UE7fxvjFRQj07XzczcIYYHRMjA/Ef6j9gnPNS6WsdFvGpYavWpnS4U52UsqT2+nse5LMLA=="],
|
||||||
|
|
||||||
"get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="],
|
"get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="],
|
||||||
|
|
||||||
|
@ -321,7 +321,7 @@
|
||||||
|
|
||||||
"strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
|
"strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
|
||||||
|
|
||||||
"tailwindcss": ["tailwindcss@4.0.1", "", {}, "sha512-UK5Biiit/e+r3i0O223bisoS5+y7ZT1PM8Ojn0MxRHzXN1VPZ2KY6Lo6fhu1dOfCfyUAlK7Lt6wSxowRabATBw=="],
|
"tailwindcss": ["tailwindcss@4.0.6", "", {}, "sha512-mysewHYJKaXgNOW6pp5xon/emCsfAMnO8WMaGKZZ35fomnR/T5gYnRg2/yRTTrtXiEl1tiVkeRt0eMO6HxEZqw=="],
|
||||||
|
|
||||||
"tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="],
|
"tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="],
|
||||||
|
|
||||||
|
@ -333,6 +333,8 @@
|
||||||
|
|
||||||
"util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
|
"util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
|
||||||
|
|
||||||
|
"web-vitals": ["web-vitals@4.2.4", "", {}, "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw=="],
|
||||||
|
|
||||||
"websocket-driver": ["websocket-driver@0.7.4", "", { "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg=="],
|
"websocket-driver": ["websocket-driver@0.7.4", "", { "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg=="],
|
||||||
|
|
||||||
"websocket-extensions": ["websocket-extensions@0.1.4", "", {}, "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="],
|
"websocket-extensions": ["websocket-extensions@0.1.4", "", {}, "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg=="],
|
||||||
|
|
6739
Web/css/styles.css
6739
Web/css/styles.css
File diff suppressed because one or more lines are too long
6712
Web/css/styles.min.css
vendored
6712
Web/css/styles.min.css
vendored
File diff suppressed because one or more lines are too long
|
@ -1,5 +1,5 @@
|
||||||
|
/* @import url("https://unpkg.com/franken-ui@2.0.0-internal.42/dist/css/core.min.css"); */
|
||||||
@import "./franken-core.css";
|
@import "./franken-core.css";
|
||||||
/* @import "./franken-utilities.css"; */
|
|
||||||
@import "tailwindcss";
|
@import "tailwindcss";
|
||||||
|
|
||||||
/* latin-ext */
|
/* latin-ext */
|
||||||
|
|
|
@ -28,12 +28,85 @@
|
||||||
|
|
||||||
<!-- TODO: social share -->
|
<!-- TODO: social share -->
|
||||||
|
|
||||||
|
<!-- TODO: temporary ui bundling fix (https://github.com/oven-sh/bun/issues/17243) -->
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://unpkg.com/franken-ui@2.0.0-internal.42/dist/css/core.min.css"
|
||||||
|
/>
|
||||||
|
<script src="https://unpkg.com/@tailwindcss/browser@4"></script>
|
||||||
|
<style>
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: "Geist";
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100 900;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/geist/v1/gyByhwUxId8gMEwSGFWNPoTcZY7pVQ.woff2)
|
||||||
|
format("woff2");
|
||||||
|
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
|
||||||
|
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
|
||||||
|
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
|
||||||
|
U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: "Geist";
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100 900;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/geist/v1/gyByhwUxId8gMEwcGFWNPoTcZY4.woff2)
|
||||||
|
format("woff2");
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
|
||||||
|
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,
|
||||||
|
U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: "Geist Mono";
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100 900;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/geistmono/v1/or3nQ6H-1_WfwkMZI_qYFrkdmhHijks9bNn0.woff2)
|
||||||
|
format("woff2");
|
||||||
|
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
|
||||||
|
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
|
||||||
|
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
|
||||||
|
U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: "Geist Mono";
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100 900;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/geistmono/v1/or3nQ6H-1_WfwkMZI_qYFrcdmhHijks9bA.woff2)
|
||||||
|
format("woff2");
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
|
||||||
|
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,
|
||||||
|
U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
|
||||||
|
@theme {
|
||||||
|
--font-sans: "Geist", sans-serif;
|
||||||
|
--font-mono: "'Geist Mono'", monospace;
|
||||||
|
}
|
||||||
|
:root {
|
||||||
|
font-family: Geist, sans-serif;
|
||||||
|
font-feature-settings: "liga" 1, "calt" 1; /* fix for Chrome */
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.uk-subnav > * > :first-child {
|
||||||
|
padding-left: 0.5rem !important;
|
||||||
|
padding-right: 0.5rem !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
<!-- franken-ui -->
|
<!-- franken-ui -->
|
||||||
<link rel="stylesheet" href="/css/styles.min.css" />
|
<!-- TODO: temporary ui bundling fix (see above) -->
|
||||||
<script
|
<!-- <link rel="stylesheet" href="/css/styles.css" /> -->
|
||||||
type="module"
|
<script type="module" src="/js/franken-ui.js"></script>
|
||||||
src="/js/franken-ui.js"
|
|
||||||
></script>
|
|
||||||
</head>
|
</head>
|
||||||
<body class="bg-background text-foreground">
|
<body class="bg-background text-foreground">
|
||||||
<main>
|
<main>
|
||||||
|
|
|
@ -11,13 +11,13 @@
|
||||||
"deploy": "bun run build && bun run deploy-live"
|
"deploy": "bun run build && bun run deploy-live"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"firebase": "^11.2.0",
|
"firebase": "^11.3.0",
|
||||||
"franken-ui": "^2.0.0-internal.39",
|
"franken-ui": "^2.0.0-internal.42",
|
||||||
"lightningcss-cli": "^1.29.1"
|
"lightningcss-cli": "^1.29.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tailwindcss/cli": "^4.0.1",
|
"@tailwindcss/cli": "^4.0.6",
|
||||||
"tailwindcss": "^4.0.1"
|
"tailwindcss": "^4.0.6"
|
||||||
},
|
},
|
||||||
"trustedDependencies": [
|
"trustedDependencies": [
|
||||||
"@parcel/watcher",
|
"@parcel/watcher",
|
||||||
|
|
606
Web/public/index-06g6h1j3.js
Normal file
606
Web/public/index-06g6h1j3.js
Normal file
|
@ -0,0 +1,606 @@
|
||||||
|
// js/nayuki-qrcodegen-v1.8.0.js
|
||||||
|
var qrcodegen;
|
||||||
|
(function(qrcodegen2) {
|
||||||
|
|
||||||
|
class QrCode {
|
||||||
|
constructor(version, errorCorrectionLevel, dataCodewords, msk) {
|
||||||
|
this.version = version;
|
||||||
|
this.errorCorrectionLevel = errorCorrectionLevel;
|
||||||
|
this.modules = [];
|
||||||
|
this.isFunction = [];
|
||||||
|
if (version < QrCode.MIN_VERSION || version > QrCode.MAX_VERSION)
|
||||||
|
throw new RangeError("Version value out of range");
|
||||||
|
if (msk < -1 || msk > 7)
|
||||||
|
throw new RangeError("Mask value out of range");
|
||||||
|
this.size = version * 4 + 17;
|
||||||
|
let row = [];
|
||||||
|
for (let i = 0;i < this.size; i++)
|
||||||
|
row.push(false);
|
||||||
|
for (let i = 0;i < this.size; i++) {
|
||||||
|
this.modules.push(row.slice());
|
||||||
|
this.isFunction.push(row.slice());
|
||||||
|
}
|
||||||
|
this.drawFunctionPatterns();
|
||||||
|
const allCodewords = this.addEccAndInterleave(dataCodewords);
|
||||||
|
this.drawCodewords(allCodewords);
|
||||||
|
if (msk == -1) {
|
||||||
|
let minPenalty = 1e9;
|
||||||
|
for (let i = 0;i < 8; i++) {
|
||||||
|
this.applyMask(i);
|
||||||
|
this.drawFormatBits(i);
|
||||||
|
const penalty = this.getPenaltyScore();
|
||||||
|
if (penalty < minPenalty) {
|
||||||
|
msk = i;
|
||||||
|
minPenalty = penalty;
|
||||||
|
}
|
||||||
|
this.applyMask(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert(0 <= msk && msk <= 7);
|
||||||
|
this.mask = msk;
|
||||||
|
this.applyMask(msk);
|
||||||
|
this.drawFormatBits(msk);
|
||||||
|
this.isFunction = [];
|
||||||
|
}
|
||||||
|
static encodeText(text, ecl) {
|
||||||
|
const segs = qrcodegen2.QrSegment.makeSegments(text);
|
||||||
|
return QrCode.encodeSegments(segs, ecl);
|
||||||
|
}
|
||||||
|
static encodeBinary(data, ecl) {
|
||||||
|
const seg = qrcodegen2.QrSegment.makeBytes(data);
|
||||||
|
return QrCode.encodeSegments([seg], ecl);
|
||||||
|
}
|
||||||
|
static encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {
|
||||||
|
if (!(QrCode.MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= QrCode.MAX_VERSION) || mask < -1 || mask > 7)
|
||||||
|
throw new RangeError("Invalid value");
|
||||||
|
let version;
|
||||||
|
let dataUsedBits;
|
||||||
|
for (version = minVersion;; version++) {
|
||||||
|
const dataCapacityBits2 = QrCode.getNumDataCodewords(version, ecl) * 8;
|
||||||
|
const usedBits = QrSegment.getTotalBits(segs, version);
|
||||||
|
if (usedBits <= dataCapacityBits2) {
|
||||||
|
dataUsedBits = usedBits;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (version >= maxVersion)
|
||||||
|
throw new RangeError("Data too long");
|
||||||
|
}
|
||||||
|
for (const newEcl of [QrCode.Ecc.MEDIUM, QrCode.Ecc.QUARTILE, QrCode.Ecc.HIGH]) {
|
||||||
|
if (boostEcl && dataUsedBits <= QrCode.getNumDataCodewords(version, newEcl) * 8)
|
||||||
|
ecl = newEcl;
|
||||||
|
}
|
||||||
|
let bb = [];
|
||||||
|
for (const seg of segs) {
|
||||||
|
appendBits(seg.mode.modeBits, 4, bb);
|
||||||
|
appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);
|
||||||
|
for (const b of seg.getData())
|
||||||
|
bb.push(b);
|
||||||
|
}
|
||||||
|
assert(bb.length == dataUsedBits);
|
||||||
|
const dataCapacityBits = QrCode.getNumDataCodewords(version, ecl) * 8;
|
||||||
|
assert(bb.length <= dataCapacityBits);
|
||||||
|
appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);
|
||||||
|
appendBits(0, (8 - bb.length % 8) % 8, bb);
|
||||||
|
assert(bb.length % 8 == 0);
|
||||||
|
for (let padByte = 236;bb.length < dataCapacityBits; padByte ^= 236 ^ 17)
|
||||||
|
appendBits(padByte, 8, bb);
|
||||||
|
let dataCodewords = [];
|
||||||
|
while (dataCodewords.length * 8 < bb.length)
|
||||||
|
dataCodewords.push(0);
|
||||||
|
bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));
|
||||||
|
return new QrCode(version, ecl, dataCodewords, mask);
|
||||||
|
}
|
||||||
|
getModule(x, y) {
|
||||||
|
return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x];
|
||||||
|
}
|
||||||
|
drawFunctionPatterns() {
|
||||||
|
for (let i = 0;i < this.size; i++) {
|
||||||
|
this.setFunctionModule(6, i, i % 2 == 0);
|
||||||
|
this.setFunctionModule(i, 6, i % 2 == 0);
|
||||||
|
}
|
||||||
|
this.drawFinderPattern(3, 3);
|
||||||
|
this.drawFinderPattern(this.size - 4, 3);
|
||||||
|
this.drawFinderPattern(3, this.size - 4);
|
||||||
|
const alignPatPos = this.getAlignmentPatternPositions();
|
||||||
|
const numAlign = alignPatPos.length;
|
||||||
|
for (let i = 0;i < numAlign; i++) {
|
||||||
|
for (let j = 0;j < numAlign; j++) {
|
||||||
|
if (!(i == 0 && j == 0 || i == 0 && j == numAlign - 1 || i == numAlign - 1 && j == 0))
|
||||||
|
this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.drawFormatBits(0);
|
||||||
|
this.drawVersion();
|
||||||
|
}
|
||||||
|
drawFormatBits(mask) {
|
||||||
|
const data = this.errorCorrectionLevel.formatBits << 3 | mask;
|
||||||
|
let rem = data;
|
||||||
|
for (let i = 0;i < 10; i++)
|
||||||
|
rem = rem << 1 ^ (rem >>> 9) * 1335;
|
||||||
|
const bits = (data << 10 | rem) ^ 21522;
|
||||||
|
assert(bits >>> 15 == 0);
|
||||||
|
for (let i = 0;i <= 5; i++)
|
||||||
|
this.setFunctionModule(8, i, getBit(bits, i));
|
||||||
|
this.setFunctionModule(8, 7, getBit(bits, 6));
|
||||||
|
this.setFunctionModule(8, 8, getBit(bits, 7));
|
||||||
|
this.setFunctionModule(7, 8, getBit(bits, 8));
|
||||||
|
for (let i = 9;i < 15; i++)
|
||||||
|
this.setFunctionModule(14 - i, 8, getBit(bits, i));
|
||||||
|
for (let i = 0;i < 8; i++)
|
||||||
|
this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));
|
||||||
|
for (let i = 8;i < 15; i++)
|
||||||
|
this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));
|
||||||
|
this.setFunctionModule(8, this.size - 8, true);
|
||||||
|
}
|
||||||
|
drawVersion() {
|
||||||
|
if (this.version < 7)
|
||||||
|
return;
|
||||||
|
let rem = this.version;
|
||||||
|
for (let i = 0;i < 12; i++)
|
||||||
|
rem = rem << 1 ^ (rem >>> 11) * 7973;
|
||||||
|
const bits = this.version << 12 | rem;
|
||||||
|
assert(bits >>> 18 == 0);
|
||||||
|
for (let i = 0;i < 18; i++) {
|
||||||
|
const color = getBit(bits, i);
|
||||||
|
const a = this.size - 11 + i % 3;
|
||||||
|
const b = Math.floor(i / 3);
|
||||||
|
this.setFunctionModule(a, b, color);
|
||||||
|
this.setFunctionModule(b, a, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
drawFinderPattern(x, y) {
|
||||||
|
for (let dy = -4;dy <= 4; dy++) {
|
||||||
|
for (let dx = -4;dx <= 4; dx++) {
|
||||||
|
const dist = Math.max(Math.abs(dx), Math.abs(dy));
|
||||||
|
const xx = x + dx;
|
||||||
|
const yy = y + dy;
|
||||||
|
if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size)
|
||||||
|
this.setFunctionModule(xx, yy, dist != 2 && dist != 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
drawAlignmentPattern(x, y) {
|
||||||
|
for (let dy = -2;dy <= 2; dy++) {
|
||||||
|
for (let dx = -2;dx <= 2; dx++)
|
||||||
|
this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) != 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setFunctionModule(x, y, isDark) {
|
||||||
|
this.modules[y][x] = isDark;
|
||||||
|
this.isFunction[y][x] = true;
|
||||||
|
}
|
||||||
|
addEccAndInterleave(data) {
|
||||||
|
const ver = this.version;
|
||||||
|
const ecl = this.errorCorrectionLevel;
|
||||||
|
if (data.length != QrCode.getNumDataCodewords(ver, ecl))
|
||||||
|
throw new RangeError("Invalid argument");
|
||||||
|
const numBlocks = QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];
|
||||||
|
const blockEccLen = QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver];
|
||||||
|
const rawCodewords = Math.floor(QrCode.getNumRawDataModules(ver) / 8);
|
||||||
|
const numShortBlocks = numBlocks - rawCodewords % numBlocks;
|
||||||
|
const shortBlockLen = Math.floor(rawCodewords / numBlocks);
|
||||||
|
let blocks = [];
|
||||||
|
const rsDiv = QrCode.reedSolomonComputeDivisor(blockEccLen);
|
||||||
|
for (let i = 0, k = 0;i < numBlocks; i++) {
|
||||||
|
let dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));
|
||||||
|
k += dat.length;
|
||||||
|
const ecc = QrCode.reedSolomonComputeRemainder(dat, rsDiv);
|
||||||
|
if (i < numShortBlocks)
|
||||||
|
dat.push(0);
|
||||||
|
blocks.push(dat.concat(ecc));
|
||||||
|
}
|
||||||
|
let result = [];
|
||||||
|
for (let i = 0;i < blocks[0].length; i++) {
|
||||||
|
blocks.forEach((block, j) => {
|
||||||
|
if (i != shortBlockLen - blockEccLen || j >= numShortBlocks)
|
||||||
|
result.push(block[i]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
assert(result.length == rawCodewords);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
drawCodewords(data) {
|
||||||
|
if (data.length != Math.floor(QrCode.getNumRawDataModules(this.version) / 8))
|
||||||
|
throw new RangeError("Invalid argument");
|
||||||
|
let i = 0;
|
||||||
|
for (let right = this.size - 1;right >= 1; right -= 2) {
|
||||||
|
if (right == 6)
|
||||||
|
right = 5;
|
||||||
|
for (let vert = 0;vert < this.size; vert++) {
|
||||||
|
for (let j = 0;j < 2; j++) {
|
||||||
|
const x = right - j;
|
||||||
|
const upward = (right + 1 & 2) == 0;
|
||||||
|
const y = upward ? this.size - 1 - vert : vert;
|
||||||
|
if (!this.isFunction[y][x] && i < data.length * 8) {
|
||||||
|
this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert(i == data.length * 8);
|
||||||
|
}
|
||||||
|
applyMask(mask) {
|
||||||
|
if (mask < 0 || mask > 7)
|
||||||
|
throw new RangeError("Mask value out of range");
|
||||||
|
for (let y = 0;y < this.size; y++) {
|
||||||
|
for (let x = 0;x < this.size; x++) {
|
||||||
|
let invert;
|
||||||
|
switch (mask) {
|
||||||
|
case 0:
|
||||||
|
invert = (x + y) % 2 == 0;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
invert = y % 2 == 0;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
invert = x % 3 == 0;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
invert = (x + y) % 3 == 0;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 == 0;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
invert = x * y % 2 + x * y % 3 == 0;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
invert = (x * y % 2 + x * y % 3) % 2 == 0;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
invert = ((x + y) % 2 + x * y % 3) % 2 == 0;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Error("Unreachable");
|
||||||
|
}
|
||||||
|
if (!this.isFunction[y][x] && invert)
|
||||||
|
this.modules[y][x] = !this.modules[y][x];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getPenaltyScore() {
|
||||||
|
let result = 0;
|
||||||
|
for (let y = 0;y < this.size; y++) {
|
||||||
|
let runColor = false;
|
||||||
|
let runX = 0;
|
||||||
|
let runHistory = [0, 0, 0, 0, 0, 0, 0];
|
||||||
|
for (let x = 0;x < this.size; x++) {
|
||||||
|
if (this.modules[y][x] == runColor) {
|
||||||
|
runX++;
|
||||||
|
if (runX == 5)
|
||||||
|
result += QrCode.PENALTY_N1;
|
||||||
|
else if (runX > 5)
|
||||||
|
result++;
|
||||||
|
} else {
|
||||||
|
this.finderPenaltyAddHistory(runX, runHistory);
|
||||||
|
if (!runColor)
|
||||||
|
result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY_N3;
|
||||||
|
runColor = this.modules[y][x];
|
||||||
|
runX = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * QrCode.PENALTY_N3;
|
||||||
|
}
|
||||||
|
for (let x = 0;x < this.size; x++) {
|
||||||
|
let runColor = false;
|
||||||
|
let runY = 0;
|
||||||
|
let runHistory = [0, 0, 0, 0, 0, 0, 0];
|
||||||
|
for (let y = 0;y < this.size; y++) {
|
||||||
|
if (this.modules[y][x] == runColor) {
|
||||||
|
runY++;
|
||||||
|
if (runY == 5)
|
||||||
|
result += QrCode.PENALTY_N1;
|
||||||
|
else if (runY > 5)
|
||||||
|
result++;
|
||||||
|
} else {
|
||||||
|
this.finderPenaltyAddHistory(runY, runHistory);
|
||||||
|
if (!runColor)
|
||||||
|
result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY_N3;
|
||||||
|
runColor = this.modules[y][x];
|
||||||
|
runY = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * QrCode.PENALTY_N3;
|
||||||
|
}
|
||||||
|
for (let y = 0;y < this.size - 1; y++) {
|
||||||
|
for (let x = 0;x < this.size - 1; x++) {
|
||||||
|
const color = this.modules[y][x];
|
||||||
|
if (color == this.modules[y][x + 1] && color == this.modules[y + 1][x] && color == this.modules[y + 1][x + 1])
|
||||||
|
result += QrCode.PENALTY_N2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let dark = 0;
|
||||||
|
for (const row of this.modules)
|
||||||
|
dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);
|
||||||
|
const total = this.size * this.size;
|
||||||
|
const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;
|
||||||
|
assert(0 <= k && k <= 9);
|
||||||
|
result += k * QrCode.PENALTY_N4;
|
||||||
|
assert(0 <= result && result <= 2568888);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
getAlignmentPatternPositions() {
|
||||||
|
if (this.version == 1)
|
||||||
|
return [];
|
||||||
|
else {
|
||||||
|
const numAlign = Math.floor(this.version / 7) + 2;
|
||||||
|
const step = this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;
|
||||||
|
let result = [6];
|
||||||
|
for (let pos = this.size - 7;result.length < numAlign; pos -= step)
|
||||||
|
result.splice(1, 0, pos);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static getNumRawDataModules(ver) {
|
||||||
|
if (ver < QrCode.MIN_VERSION || ver > QrCode.MAX_VERSION)
|
||||||
|
throw new RangeError("Version number out of range");
|
||||||
|
let result = (16 * ver + 128) * ver + 64;
|
||||||
|
if (ver >= 2) {
|
||||||
|
const numAlign = Math.floor(ver / 7) + 2;
|
||||||
|
result -= (25 * numAlign - 10) * numAlign - 55;
|
||||||
|
if (ver >= 7)
|
||||||
|
result -= 36;
|
||||||
|
}
|
||||||
|
assert(208 <= result && result <= 29648);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
static getNumDataCodewords(ver, ecl) {
|
||||||
|
return Math.floor(QrCode.getNumRawDataModules(ver) / 8) - QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];
|
||||||
|
}
|
||||||
|
static reedSolomonComputeDivisor(degree) {
|
||||||
|
if (degree < 1 || degree > 255)
|
||||||
|
throw new RangeError("Degree out of range");
|
||||||
|
let result = [];
|
||||||
|
for (let i = 0;i < degree - 1; i++)
|
||||||
|
result.push(0);
|
||||||
|
result.push(1);
|
||||||
|
let root = 1;
|
||||||
|
for (let i = 0;i < degree; i++) {
|
||||||
|
for (let j = 0;j < result.length; j++) {
|
||||||
|
result[j] = QrCode.reedSolomonMultiply(result[j], root);
|
||||||
|
if (j + 1 < result.length)
|
||||||
|
result[j] ^= result[j + 1];
|
||||||
|
}
|
||||||
|
root = QrCode.reedSolomonMultiply(root, 2);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
static reedSolomonComputeRemainder(data, divisor) {
|
||||||
|
let result = divisor.map((_) => 0);
|
||||||
|
for (const b of data) {
|
||||||
|
const factor = b ^ result.shift();
|
||||||
|
result.push(0);
|
||||||
|
divisor.forEach((coef, i) => result[i] ^= QrCode.reedSolomonMultiply(coef, factor));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
static reedSolomonMultiply(x, y) {
|
||||||
|
if (x >>> 8 != 0 || y >>> 8 != 0)
|
||||||
|
throw new RangeError("Byte out of range");
|
||||||
|
let z = 0;
|
||||||
|
for (let i = 7;i >= 0; i--) {
|
||||||
|
z = z << 1 ^ (z >>> 7) * 285;
|
||||||
|
z ^= (y >>> i & 1) * x;
|
||||||
|
}
|
||||||
|
assert(z >>> 8 == 0);
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
finderPenaltyCountPatterns(runHistory) {
|
||||||
|
const n = runHistory[1];
|
||||||
|
assert(n <= this.size * 3);
|
||||||
|
const core = n > 0 && runHistory[2] == n && runHistory[3] == n * 3 && runHistory[4] == n && runHistory[5] == n;
|
||||||
|
return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);
|
||||||
|
}
|
||||||
|
finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {
|
||||||
|
if (currentRunColor) {
|
||||||
|
this.finderPenaltyAddHistory(currentRunLength, runHistory);
|
||||||
|
currentRunLength = 0;
|
||||||
|
}
|
||||||
|
currentRunLength += this.size;
|
||||||
|
this.finderPenaltyAddHistory(currentRunLength, runHistory);
|
||||||
|
return this.finderPenaltyCountPatterns(runHistory);
|
||||||
|
}
|
||||||
|
finderPenaltyAddHistory(currentRunLength, runHistory) {
|
||||||
|
if (runHistory[0] == 0)
|
||||||
|
currentRunLength += this.size;
|
||||||
|
runHistory.pop();
|
||||||
|
runHistory.unshift(currentRunLength);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QrCode.MIN_VERSION = 1;
|
||||||
|
QrCode.MAX_VERSION = 40;
|
||||||
|
QrCode.PENALTY_N1 = 3;
|
||||||
|
QrCode.PENALTY_N2 = 3;
|
||||||
|
QrCode.PENALTY_N3 = 40;
|
||||||
|
QrCode.PENALTY_N4 = 10;
|
||||||
|
QrCode.ECC_CODEWORDS_PER_BLOCK = [
|
||||||
|
[-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],
|
||||||
|
[-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],
|
||||||
|
[-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],
|
||||||
|
[-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]
|
||||||
|
];
|
||||||
|
QrCode.NUM_ERROR_CORRECTION_BLOCKS = [
|
||||||
|
[-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],
|
||||||
|
[-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],
|
||||||
|
[-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],
|
||||||
|
[-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]
|
||||||
|
];
|
||||||
|
qrcodegen2.QrCode = QrCode;
|
||||||
|
function appendBits(val, len, bb) {
|
||||||
|
if (len < 0 || len > 31 || val >>> len != 0)
|
||||||
|
throw new RangeError("Value out of range");
|
||||||
|
for (let i = len - 1;i >= 0; i--)
|
||||||
|
bb.push(val >>> i & 1);
|
||||||
|
}
|
||||||
|
function getBit(x, i) {
|
||||||
|
return (x >>> i & 1) != 0;
|
||||||
|
}
|
||||||
|
function assert(cond) {
|
||||||
|
if (!cond)
|
||||||
|
throw new Error("Assertion error");
|
||||||
|
}
|
||||||
|
|
||||||
|
class QrSegment {
|
||||||
|
constructor(mode, numChars, bitData) {
|
||||||
|
this.mode = mode;
|
||||||
|
this.numChars = numChars;
|
||||||
|
this.bitData = bitData;
|
||||||
|
if (numChars < 0)
|
||||||
|
throw new RangeError("Invalid argument");
|
||||||
|
this.bitData = bitData.slice();
|
||||||
|
}
|
||||||
|
static makeBytes(data) {
|
||||||
|
let bb = [];
|
||||||
|
for (const b of data)
|
||||||
|
appendBits(b, 8, bb);
|
||||||
|
return new QrSegment(QrSegment.Mode.BYTE, data.length, bb);
|
||||||
|
}
|
||||||
|
static makeNumeric(digits) {
|
||||||
|
if (!QrSegment.isNumeric(digits))
|
||||||
|
throw new RangeError("String contains non-numeric characters");
|
||||||
|
let bb = [];
|
||||||
|
for (let i = 0;i < digits.length; ) {
|
||||||
|
const n = Math.min(digits.length - i, 3);
|
||||||
|
appendBits(parseInt(digits.substr(i, n), 10), n * 3 + 1, bb);
|
||||||
|
i += n;
|
||||||
|
}
|
||||||
|
return new QrSegment(QrSegment.Mode.NUMERIC, digits.length, bb);
|
||||||
|
}
|
||||||
|
static makeAlphanumeric(text) {
|
||||||
|
if (!QrSegment.isAlphanumeric(text))
|
||||||
|
throw new RangeError("String contains unencodable characters in alphanumeric mode");
|
||||||
|
let bb = [];
|
||||||
|
let i;
|
||||||
|
for (i = 0;i + 2 <= text.length; i += 2) {
|
||||||
|
let temp = QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;
|
||||||
|
temp += QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));
|
||||||
|
appendBits(temp, 11, bb);
|
||||||
|
}
|
||||||
|
if (i < text.length)
|
||||||
|
appendBits(QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);
|
||||||
|
return new QrSegment(QrSegment.Mode.ALPHANUMERIC, text.length, bb);
|
||||||
|
}
|
||||||
|
static makeSegments(text) {
|
||||||
|
if (text == "")
|
||||||
|
return [];
|
||||||
|
else if (QrSegment.isNumeric(text))
|
||||||
|
return [QrSegment.makeNumeric(text)];
|
||||||
|
else if (QrSegment.isAlphanumeric(text))
|
||||||
|
return [QrSegment.makeAlphanumeric(text)];
|
||||||
|
else
|
||||||
|
return [QrSegment.makeBytes(QrSegment.toUtf8ByteArray(text))];
|
||||||
|
}
|
||||||
|
static makeEci(assignVal) {
|
||||||
|
let bb = [];
|
||||||
|
if (assignVal < 0)
|
||||||
|
throw new RangeError("ECI assignment value out of range");
|
||||||
|
else if (assignVal < 1 << 7)
|
||||||
|
appendBits(assignVal, 8, bb);
|
||||||
|
else if (assignVal < 1 << 14) {
|
||||||
|
appendBits(2, 2, bb);
|
||||||
|
appendBits(assignVal, 14, bb);
|
||||||
|
} else if (assignVal < 1e6) {
|
||||||
|
appendBits(6, 3, bb);
|
||||||
|
appendBits(assignVal, 21, bb);
|
||||||
|
} else
|
||||||
|
throw new RangeError("ECI assignment value out of range");
|
||||||
|
return new QrSegment(QrSegment.Mode.ECI, 0, bb);
|
||||||
|
}
|
||||||
|
static isNumeric(text) {
|
||||||
|
return QrSegment.NUMERIC_REGEX.test(text);
|
||||||
|
}
|
||||||
|
static isAlphanumeric(text) {
|
||||||
|
return QrSegment.ALPHANUMERIC_REGEX.test(text);
|
||||||
|
}
|
||||||
|
getData() {
|
||||||
|
return this.bitData.slice();
|
||||||
|
}
|
||||||
|
static getTotalBits(segs, version) {
|
||||||
|
let result = 0;
|
||||||
|
for (const seg of segs) {
|
||||||
|
const ccbits = seg.mode.numCharCountBits(version);
|
||||||
|
if (seg.numChars >= 1 << ccbits)
|
||||||
|
return Infinity;
|
||||||
|
result += 4 + ccbits + seg.bitData.length;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
static toUtf8ByteArray(str) {
|
||||||
|
str = encodeURI(str);
|
||||||
|
let result = [];
|
||||||
|
for (let i = 0;i < str.length; i++) {
|
||||||
|
if (str.charAt(i) != "%")
|
||||||
|
result.push(str.charCodeAt(i));
|
||||||
|
else {
|
||||||
|
result.push(parseInt(str.substr(i + 1, 2), 16));
|
||||||
|
i += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
QrSegment.NUMERIC_REGEX = /^[0-9]*$/;
|
||||||
|
QrSegment.ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+.\/:-]*$/;
|
||||||
|
QrSegment.ALPHANUMERIC_CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";
|
||||||
|
qrcodegen2.QrSegment = QrSegment;
|
||||||
|
})(qrcodegen || (qrcodegen = {}));
|
||||||
|
(function(qrcodegen2) {
|
||||||
|
var QrCode;
|
||||||
|
(function(QrCode2) {
|
||||||
|
|
||||||
|
class Ecc {
|
||||||
|
constructor(ordinal, formatBits) {
|
||||||
|
this.ordinal = ordinal;
|
||||||
|
this.formatBits = formatBits;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ecc.LOW = new Ecc(0, 1);
|
||||||
|
Ecc.MEDIUM = new Ecc(1, 0);
|
||||||
|
Ecc.QUARTILE = new Ecc(2, 3);
|
||||||
|
Ecc.HIGH = new Ecc(3, 2);
|
||||||
|
QrCode2.Ecc = Ecc;
|
||||||
|
})(QrCode = qrcodegen2.QrCode || (qrcodegen2.QrCode = {}));
|
||||||
|
})(qrcodegen || (qrcodegen = {}));
|
||||||
|
(function(qrcodegen2) {
|
||||||
|
var QrSegment;
|
||||||
|
(function(QrSegment2) {
|
||||||
|
|
||||||
|
class Mode {
|
||||||
|
constructor(modeBits, numBitsCharCount) {
|
||||||
|
this.modeBits = modeBits;
|
||||||
|
this.numBitsCharCount = numBitsCharCount;
|
||||||
|
}
|
||||||
|
numCharCountBits(ver) {
|
||||||
|
return this.numBitsCharCount[Math.floor((ver + 7) / 17)];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Mode.NUMERIC = new Mode(1, [10, 12, 14]);
|
||||||
|
Mode.ALPHANUMERIC = new Mode(2, [9, 11, 13]);
|
||||||
|
Mode.BYTE = new Mode(4, [8, 16, 16]);
|
||||||
|
Mode.KANJI = new Mode(8, [8, 10, 12]);
|
||||||
|
Mode.ECI = new Mode(7, [0, 0, 0]);
|
||||||
|
QrSegment2.Mode = Mode;
|
||||||
|
})(QrSegment = qrcodegen2.QrSegment || (qrcodegen2.QrSegment = {}));
|
||||||
|
})(qrcodegen || (qrcodegen = {}));
|
||||||
|
|
||||||
|
// js/landing-qrcode.js
|
||||||
|
function toSvgString(qr, border, lightColor, darkColor) {
|
||||||
|
if (border < 0)
|
||||||
|
throw new RangeError("Border must be non-negative");
|
||||||
|
let parts = [];
|
||||||
|
for (let y = 0;y < qr.size; y++) {
|
||||||
|
for (let x = 0;x < qr.size; x++) {
|
||||||
|
if (qr.getModule(x, y))
|
||||||
|
parts.push(`M${x + border},${y + border}h1v1h-1z`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return `<svg xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 ${qr.size + border * 2} ${qr.size + border * 2}" stroke="none" style="width: 100%;" class="object-fit"><rect width="100%" height="100%" fill="${lightColor}"/><path d="${parts.join(" ")}" fill="${darkColor}"/></svg>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
function generateQrCode(text) {
|
||||||
|
return toSvgString(qrcodegen.QrCode.encodeText(text, qrcodegen.QrCode.Ecc.MEDIUM), 3, "#ffffff", "#000000");
|
||||||
|
}
|
||||||
|
var svg = generateQrCode(window.location.origin + "/signup.html");
|
||||||
|
document.getElementById("hero-svg").innerHTML = svg;
|
||||||
|
document.getElementById("hero-svg").classList.remove("uk-placeholder");
|
247
Web/public/index-71nng112.css
Normal file
247
Web/public/index-71nng112.css
Normal file
File diff suppressed because one or more lines are too long
6378
Web/public/index-f8aywf7t.css
Normal file
6378
Web/public/index-f8aywf7t.css
Normal file
File diff suppressed because one or more lines are too long
8212
Web/public/index-ra0608an.js
Normal file
8212
Web/public/index-ra0608an.js
Normal file
File diff suppressed because one or more lines are too long
|
@ -14,10 +14,86 @@
|
||||||
|
|
||||||
<!-- TODO: social share -->
|
<!-- TODO: social share -->
|
||||||
|
|
||||||
|
<!-- TODO: temporary ui bundling fix (https://github.com/oven-sh/bun/issues/17243) -->
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://unpkg.com/franken-ui@2.0.0-internal.42/dist/css/core.min.css"
|
||||||
|
/>
|
||||||
|
<script src="https://unpkg.com/@tailwindcss/browser@4"></script>
|
||||||
|
<style>
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: "Geist";
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100 900;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/geist/v1/gyByhwUxId8gMEwSGFWNPoTcZY7pVQ.woff2)
|
||||||
|
format("woff2");
|
||||||
|
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
|
||||||
|
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
|
||||||
|
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
|
||||||
|
U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: "Geist";
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100 900;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/geist/v1/gyByhwUxId8gMEwcGFWNPoTcZY4.woff2)
|
||||||
|
format("woff2");
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
|
||||||
|
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,
|
||||||
|
U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: "Geist Mono";
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100 900;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/geistmono/v1/or3nQ6H-1_WfwkMZI_qYFrkdmhHijks9bNn0.woff2)
|
||||||
|
format("woff2");
|
||||||
|
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
|
||||||
|
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
|
||||||
|
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
|
||||||
|
U+A720-A7FF;
|
||||||
|
}
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: "Geist Mono";
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100 900;
|
||||||
|
font-display: swap;
|
||||||
|
src: url(https://fonts.gstatic.com/s/geistmono/v1/or3nQ6H-1_WfwkMZI_qYFrcdmhHijks9bA.woff2)
|
||||||
|
format("woff2");
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
|
||||||
|
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,
|
||||||
|
U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
|
||||||
|
@theme {
|
||||||
|
--font-sans: "Geist", sans-serif;
|
||||||
|
--font-mono: "'Geist Mono'", monospace;
|
||||||
|
}
|
||||||
|
:root {
|
||||||
|
font-family: Geist, sans-serif;
|
||||||
|
font-feature-settings: "liga" 1, "calt" 1; /* fix for Chrome */
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.uk-subnav > * > :first-child {
|
||||||
|
padding-left: 0.5rem !important;
|
||||||
|
padding-right: 0.5rem !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
<!-- franken-ui -->
|
<!-- franken-ui -->
|
||||||
|
<!-- TODO: temporary ui bundling fix (see above) -->
|
||||||
|
<!-- <link rel="stylesheet" href="/css/styles.css" /> -->
|
||||||
|
|
||||||
|
<script type="module" crossorigin src="./index-ra0608an.js"></script></head>
|
||||||
<link rel="stylesheet" crossorigin href="./index-hkj11hrb.css"><script type="module" crossorigin src="./index-2fc1d355.js"></script></head>
|
|
||||||
<body class="bg-background text-foreground">
|
<body class="bg-background text-foreground">
|
||||||
<main>
|
<main>
|
||||||
<section
|
<section
|
||||||
|
|
Loading…
Add table
Reference in a new issue