From 37716fdfa68012264f3a0c18658b5235cd74576a Mon Sep 17 00:00:00 2001 From: SilentRhetoric Date: Mon, 25 Sep 2023 18:55:14 -0400 Subject: [PATCH] Separate dev and build sites for testing --- README.md | 10 +- package.json | 5 +- pnpm-lock.yaml | 811 +++++--- pnpm-workspace.yaml | 4 + {site => site-build}/.env.template | 0 {site => site-build}/.gitignore | 0 {site => site-build}/LICENSE | 0 {site => site-build}/README.md | 0 {site => site-build}/index.html | 0 site-build/package.json | 31 + {site => site-build}/postcss.config.js | 0 .../public/android-chrome-192x192.png | Bin .../public/android-chrome-512x512.png | Bin .../public/apple-touch-icon.png | Bin {site => site-build}/public/favicon-16x16.png | Bin {site => site-build}/public/favicon-32x32.png | Bin {site => site-build}/public/favicon.ico | Bin {site => site-build}/public/site.webmanifest | 0 site-build/src/App.tsx | 262 +++ .../src/assets/github-mark.svg | 2 +- {site => site-build}/src/assets/logo.svg | 0 {site => site-build}/src/index.css | 0 {site => site-build}/src/index.tsx | 0 {site => site-build}/src/mm.tsx | 0 {site => site-build}/tailwind.config.js | 2 +- {site => site-build}/vite.config.ts | 0 site-dev/.env.template | 21 + site-dev/.gitignore | 3 + site-dev/LICENSE | 21 + site-dev/README.md | 48 + site-dev/index.html | 26 + {site => site-dev}/package.json | 3 +- site-dev/postcss.config.js | 7 + site-dev/public/android-chrome-192x192.png | Bin 0 -> 13478 bytes site-dev/public/android-chrome-512x512.png | Bin 0 -> 45196 bytes site-dev/public/apple-touch-icon.png | Bin 0 -> 12205 bytes site-dev/public/favicon-16x16.png | Bin 0 -> 743 bytes site-dev/public/favicon-32x32.png | Bin 0 -> 1438 bytes site-dev/public/favicon.ico | Bin 0 -> 15406 bytes site-dev/public/site.webmanifest | 1 + {site => site-dev}/src/App.tsx | 6 +- site-dev/src/assets/github-mark.svg | 1 + site-dev/src/assets/logo.svg | 1 + site-dev/src/index.css | 18 + site-dev/src/index.tsx | 6 + site-dev/src/mm.tsx | 398 ++++ site-dev/tailwind.config.js | 6 + site-dev/vite.config.ts | 12 + site/pnpm-lock.yaml | 1702 ----------------- src/index.tsx | 2 +- src/useNetwork.ts | 25 +- ...{useWallet.tsx => useSolidAlgoWallets.tsx} | 36 +- src/utilities.ts | 32 - src/wallets/daffi.tsx | 4 +- src/wallets/defly.tsx | 4 +- src/wallets/exodus.tsx | 4 +- src/wallets/ledger.tsx | 4 +- src/wallets/localnet.tsx | 8 +- src/wallets/metamask.tsx | 4 +- src/wallets/myalgo.tsx | 4 +- src/wallets/pera.tsx | 4 +- src/wallets/walletConnectV2.tsx | 34 +- src/wallets/walletConnectV2_old.tsx | 26 +- tsconfig.json | 2 +- 64 files changed, 1513 insertions(+), 2087 deletions(-) create mode 100644 pnpm-workspace.yaml rename {site => site-build}/.env.template (100%) rename {site => site-build}/.gitignore (100%) rename {site => site-build}/LICENSE (100%) rename {site => site-build}/README.md (100%) rename {site => site-build}/index.html (100%) create mode 100644 site-build/package.json rename {site => site-build}/postcss.config.js (100%) rename {site => site-build}/public/android-chrome-192x192.png (100%) rename {site => site-build}/public/android-chrome-512x512.png (100%) rename {site => site-build}/public/apple-touch-icon.png (100%) rename {site => site-build}/public/favicon-16x16.png (100%) rename {site => site-build}/public/favicon-32x32.png (100%) rename {site => site-build}/public/favicon.ico (100%) rename {site => site-build}/public/site.webmanifest (100%) create mode 100644 site-build/src/App.tsx rename {site => site-build}/src/assets/github-mark.svg (93%) rename {site => site-build}/src/assets/logo.svg (100%) rename {site => site-build}/src/index.css (100%) rename {site => site-build}/src/index.tsx (100%) rename {site => site-build}/src/mm.tsx (100%) rename {site => site-build}/tailwind.config.js (83%) rename {site => site-build}/vite.config.ts (100%) create mode 100644 site-dev/.env.template create mode 100644 site-dev/.gitignore create mode 100644 site-dev/LICENSE create mode 100644 site-dev/README.md create mode 100644 site-dev/index.html rename {site => site-dev}/package.json (91%) create mode 100644 site-dev/postcss.config.js create mode 100644 site-dev/public/android-chrome-192x192.png create mode 100644 site-dev/public/android-chrome-512x512.png create mode 100644 site-dev/public/apple-touch-icon.png create mode 100644 site-dev/public/favicon-16x16.png create mode 100644 site-dev/public/favicon-32x32.png create mode 100644 site-dev/public/favicon.ico create mode 100644 site-dev/public/site.webmanifest rename {site => site-dev}/src/App.tsx (97%) create mode 100644 site-dev/src/assets/github-mark.svg create mode 100644 site-dev/src/assets/logo.svg create mode 100644 site-dev/src/index.css create mode 100644 site-dev/src/index.tsx create mode 100644 site-dev/src/mm.tsx create mode 100644 site-dev/tailwind.config.js create mode 100644 site-dev/vite.config.ts delete mode 100644 site/pnpm-lock.yaml rename src/{useWallet.tsx => useSolidAlgoWallets.tsx} (86%) diff --git a/README.md b/README.md index 74e6e4a..4e33685 100644 --- a/README.md +++ b/README.md @@ -83,13 +83,13 @@ The library is configured using environment variables from a .env file in the pr - Block explorer base URL to construct explorer links for each network. Supports AlgoExplorer and Dappflow linking. - Project ID, Project Name, Project Description, Project URL, and Project ICON for the Dapp's project on WalletConnect -### useWallet +### UseSolidAlgoWallets -The `useWallet` function returns a reactive root that provides the active wallet/metadata/address, methods to connect/reconnect/disconnect wallets, and a `transactionSigher` function that enables signing transactions with the connected wallet. +The `UseSolidAlgoWallets` function returns a reactive root that provides the active wallet/metadata/address, methods to connect/reconnect/disconnect wallets, and a `transactionSigher` function that enables signing transactions with the connected wallet. -### useNetwork +### UseNetwork -The `useNetwork` function returns a reactive root that provides an alogd client for the selected network, as well as helpful functions to create URLs for block explorer linking. +The `UseNetwork` function returns a reactive root that provides an alogd client for the selected network, as well as helpful functions to create URLs for block explorer linking. ## Design Decisions @@ -113,7 +113,7 @@ The library is designed to manage state globally using SolidJS reactive roots on This design was chosen both for simplicity and also because truly decentralized web apps should allow users to use the client without dependency on a back-end server. These wallet interfaces should be managed on the client so that an end user can download and install a web app locally and continue using it even if the host server becomes unavailable. -> Note that this approach is not suitable for apps which utilize server-side rendering (SSR) and _will_ cause problems. It may be possible to provide the reactive roots to a context provider, but this is untested. +> Note that this approach is not suitable for Solid Start apps which utilize server-side rendering (SSR) and _will_ cause problems. It may be possible to provide the reactive roots to a context provider, but this is untested as yet. ### Additional Resources diff --git a/package.json b/package.json index da08e3e..3ac62a2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "solid-algo-wallets", - "version": "0.0.7", + "version": "0.0.8", "description": "Integrate multiple Algorand wallets with a SolidJS web application client", "license": "MIT", "author": "Brian Whippo ", @@ -23,7 +23,8 @@ "exodus", "ledger", "walletconnect", - "algokit" + "algokit", + "metamask" ], "files": [ "dist" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9f13820..1f05b1e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,102 +4,193 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@algorandfoundation/algokit-utils': - specifier: ^2.3.2 - version: 2.3.2 - '@blockshake/defly-connect': - specifier: ^1.1.6 - version: 1.1.6(algosdk@2.4.0) - '@daffiwallet/connect': - specifier: ^1.0.3 - version: 1.0.3(algosdk@2.4.0) - '@ledgerhq/hw-app-algorand': - specifier: ^6.27.19 - version: 6.27.19 - '@ledgerhq/hw-transport-webusb': - specifier: ^6.27.19 - version: 6.27.19 - '@perawallet/connect': - specifier: ^1.3.1 - version: 1.3.2(algosdk@2.4.0) - '@randlabs/myalgo-connect': - specifier: ^1.4.2 - version: 1.4.2 - '@solid-primitives/storage': - specifier: ^2.1.1 - version: 2.1.1(solid-js@1.7.12) - '@walletconnect/modal': - specifier: ^2.6.2 - version: 2.6.2(react@18.2.0) - '@walletconnect/modal-sign-html': - specifier: ^2.6.2 - version: 2.6.2(react@18.2.0) - '@walletconnect/sign-client': - specifier: ^2.10.1 - version: 2.10.1 - algosdk: - specifier: 2.4.0 - version: 2.4.0 - buffer: - specifier: ^6.0.3 - version: 6.0.3 - solid-js: - specifier: ^1.7.11 - version: 1.7.12 - -devDependencies: - '@types/node': - specifier: ^20.6.2 - version: 20.6.5 - '@typescript-eslint/eslint-plugin': - specifier: ^6.7.0 - version: 6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2) - '@typescript-eslint/parser': - specifier: ^6.7.0 - version: 6.7.2(eslint@8.50.0)(typescript@5.2.2) - concurrently: - specifier: ^8.2.1 - version: 8.2.1 - esbuild: - specifier: ^0.19.3 - version: 0.19.3 - esbuild-plugin-solid: - specifier: ^0.5.0 - version: 0.5.0(esbuild@0.19.3)(solid-js@1.7.12) - eslint: - specifier: ^8.49.0 - version: 8.50.0 - eslint-plugin-eslint-comments: - specifier: ^3.2.0 - version: 3.2.0(eslint@8.50.0) - eslint-plugin-no-only-tests: - specifier: ^3.1.0 - version: 3.1.0 - jsdom: - specifier: ^22.1.0 - version: 22.1.0 - prettier: - specifier: 3.0.3 - version: 3.0.3 - prettier-plugin-tailwindcss: - specifier: ^0.5.4 - version: 0.5.4(prettier@3.0.3) - tsup: - specifier: ^7.2.0 - version: 7.2.0(typescript@5.2.2) - tsup-preset-solid: - specifier: ^2.1.0 - version: 2.1.0(esbuild@0.19.3)(solid-js@1.7.12)(tsup@7.2.0) - typescript: - specifier: ^5.2.2 - version: 5.2.2 - vite: - specifier: ^4.4.9 - version: 4.4.9(@types/node@20.6.5) - vite-plugin-solid: - specifier: ^2.7.0 - version: 2.7.0(solid-js@1.7.12)(vite@4.4.9) +importers: + + .: + dependencies: + '@algorandfoundation/algokit-utils': + specifier: ^2.3.2 + version: 2.3.2 + '@blockshake/defly-connect': + specifier: ^1.1.6 + version: 1.1.6(algosdk@2.4.0) + '@daffiwallet/connect': + specifier: ^1.0.3 + version: 1.0.3(algosdk@2.4.0) + '@ledgerhq/hw-app-algorand': + specifier: ^6.27.19 + version: 6.27.19 + '@ledgerhq/hw-transport-webusb': + specifier: ^6.27.19 + version: 6.27.19 + '@perawallet/connect': + specifier: ^1.3.1 + version: 1.3.2(algosdk@2.4.0) + '@randlabs/myalgo-connect': + specifier: ^1.4.2 + version: 1.4.2 + '@solid-primitives/storage': + specifier: ^2.1.1 + version: 2.1.1(solid-js@1.7.12) + '@walletconnect/modal': + specifier: ^2.6.2 + version: 2.6.2(react@18.2.0) + '@walletconnect/modal-sign-html': + specifier: ^2.6.2 + version: 2.6.2(react@18.2.0) + '@walletconnect/sign-client': + specifier: ^2.10.1 + version: 2.10.1 + algosdk: + specifier: 2.4.0 + version: 2.4.0 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + solid-js: + specifier: ^1.7.11 + version: 1.7.12 + devDependencies: + '@types/node': + specifier: ^20.6.2 + version: 20.7.0 + '@typescript-eslint/eslint-plugin': + specifier: ^6.7.0 + version: 6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/parser': + specifier: ^6.7.0 + version: 6.7.3(eslint@8.50.0)(typescript@5.2.2) + concurrently: + specifier: ^8.2.1 + version: 8.2.1 + esbuild: + specifier: ^0.19.3 + version: 0.19.3 + esbuild-plugin-solid: + specifier: ^0.5.0 + version: 0.5.0(esbuild@0.19.3)(solid-js@1.7.12) + eslint: + specifier: ^8.49.0 + version: 8.50.0 + eslint-plugin-eslint-comments: + specifier: ^3.2.0 + version: 3.2.0(eslint@8.50.0) + eslint-plugin-no-only-tests: + specifier: ^3.1.0 + version: 3.1.0 + jsdom: + specifier: ^22.1.0 + version: 22.1.0 + prettier: + specifier: 3.0.3 + version: 3.0.3 + prettier-plugin-tailwindcss: + specifier: ^0.5.4 + version: 0.5.4(prettier@3.0.3) + tsup: + specifier: ^7.2.0 + version: 7.2.0(typescript@5.2.2) + tsup-preset-solid: + specifier: ^2.1.0 + version: 2.1.0(esbuild@0.19.3)(solid-js@1.7.12)(tsup@7.2.0) + typescript: + specifier: ^5.2.2 + version: 5.2.2 + vite: + specifier: ^4.4.9 + version: 4.4.9(@types/node@20.7.0) + vite-plugin-solid: + specifier: ^2.7.0 + version: 2.7.0(solid-js@1.7.12)(vite@4.4.9) + + site-build: + dependencies: + '@algorandfoundation/algokit-utils': + specifier: ^2.3.2 + version: 2.3.2 + algosdk: + specifier: 2.4.0 + version: 2.4.0 + solid-algo-wallets: + specifier: ^0.0.8 + version: link:.. + solid-js: + specifier: ^1.7.12 + version: 1.7.12 + devDependencies: + '@types/node': + specifier: ^20.6.2 + version: 20.7.0 + autoprefixer: + specifier: ^10.4.16 + version: 10.4.16(postcss@8.4.30) + daisyui: + specifier: ^3.7.7 + version: 3.7.7 + postcss: + specifier: ^8.4.30 + version: 8.4.30 + prettier: + specifier: 3.0.3 + version: 3.0.3 + prettier-plugin-tailwindcss: + specifier: ^0.5.4 + version: 0.5.4(prettier@3.0.3) + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + typescript: + specifier: ^5.2.2 + version: 5.2.2 + vite: + specifier: ^4.4.9 + version: 4.4.9(@types/node@20.7.0) + vite-plugin-solid: + specifier: ^2.7.0 + version: 2.7.0(solid-js@1.7.12)(vite@4.4.9) + + site-dev: + dependencies: + '@algorandfoundation/algokit-utils': + specifier: ^2.3.2 + version: 2.3.2 + algosdk: + specifier: 2.4.0 + version: 2.4.0 + solid-js: + specifier: ^1.7.12 + version: 1.7.12 + devDependencies: + '@types/node': + specifier: ^20.6.2 + version: 20.7.0 + autoprefixer: + specifier: ^10.4.16 + version: 10.4.16(postcss@8.4.30) + daisyui: + specifier: ^3.7.7 + version: 3.7.7 + postcss: + specifier: ^8.4.30 + version: 8.4.30 + prettier: + specifier: 3.0.3 + version: 3.0.3 + prettier-plugin-tailwindcss: + specifier: ^0.5.4 + version: 0.5.4(prettier@3.0.3) + tailwindcss: + specifier: ^3.3.3 + version: 3.3.3 + typescript: + specifier: ^5.2.2 + version: 5.2.2 + vite: + specifier: ^4.4.9 + version: 4.4.9(@types/node@20.7.0) + vite-plugin-solid: + specifier: ^2.7.0 + version: 2.7.0(solid-js@1.7.12)(vite@4.4.9) packages: @@ -118,6 +209,11 @@ packages: - encoding dev: false + /@alloc/quick-lru@5.2.0: + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + dev: true + /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -139,21 +235,21 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.22.20: - resolution: {integrity: sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==} + /@babel/core@7.23.0: + resolution: {integrity: sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.22.13 - '@babel/generator': 7.22.15 + '@babel/generator': 7.23.0 '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.22.20(@babel/core@7.22.20) - '@babel/helpers': 7.22.15 - '@babel/parser': 7.22.16 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) + '@babel/helpers': 7.23.1 + '@babel/parser': 7.23.0 '@babel/template': 7.22.15 - '@babel/traverse': 7.22.20 - '@babel/types': 7.22.19 - convert-source-map: 1.9.0 + '@babel/traverse': 7.23.0 + '@babel/types': 7.23.0 + convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 @@ -162,11 +258,11 @@ packages: - supports-color dev: true - /@babel/generator@7.22.15: - resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==} + /@babel/generator@7.23.0: + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 @@ -176,7 +272,7 @@ packages: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 dev: true /@babel/helper-compilation-targets@7.22.15: @@ -190,19 +286,19 @@ packages: semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.20): + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.0): resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.20 + '@babel/core': 7.23.0 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.15 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.20) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.0) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 @@ -213,49 +309,49 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-function-name@7.22.5: - resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 dev: true - /@babel/helper-member-expression-to-functions@7.22.15: - resolution: {integrity: sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==} + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 dev: true /@babel/helper-module-imports@7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 dev: true /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 dev: true - /@babel/helper-module-transforms@7.22.20(@babel/core@7.22.20): - resolution: {integrity: sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==} + /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.0): + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.20 + '@babel/core': 7.23.0 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -267,7 +363,7 @@ packages: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 dev: true /@babel/helper-plugin-utils@7.22.5: @@ -275,15 +371,15 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helper-replace-supers@7.22.20(@babel/core@7.22.20): + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.0): resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.20 + '@babel/core': 7.23.0 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.22.15 + '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 dev: true @@ -291,21 +387,21 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 dev: true /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 dev: true /@babel/helper-string-parser@7.22.5: @@ -323,13 +419,13 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helpers@7.22.15: - resolution: {integrity: sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==} + /@babel/helpers@7.23.1: + resolution: {integrity: sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.22.15 - '@babel/traverse': 7.22.20 - '@babel/types': 7.22.19 + '@babel/traverse': 7.23.0 + '@babel/types': 7.23.0 transitivePeerDependencies: - supports-color dev: true @@ -343,75 +439,75 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.22.16: - resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==} + /@babel/parser@7.23.0: + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 dev: true - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.20): + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.0): resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.20 + '@babel/core': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.20): + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.0): resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.20 + '@babel/core': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.22.20): - resolution: {integrity: sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==} + /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.0): + resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.20 - '@babel/helper-module-transforms': 7.22.20(@babel/core@7.22.20) + '@babel/core': 7.23.0 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 dev: true - /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.22.20): + /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.23.0): resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.20 + '@babel/core': 7.23.0 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.20) + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.20) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.0) dev: true - /@babel/preset-typescript@7.22.15(@babel/core@7.22.20): - resolution: {integrity: sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==} + /@babel/preset-typescript@7.23.0(@babel/core@7.23.0): + resolution: {integrity: sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.20 + '@babel/core': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.20) - '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.22.20) - '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.22.20) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.0) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.0) + '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.0) dev: true - /@babel/runtime@7.22.15: - resolution: {integrity: sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==} + /@babel/runtime@7.23.1: + resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.0 @@ -422,30 +518,30 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.13 - '@babel/parser': 7.22.16 - '@babel/types': 7.22.19 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 dev: true - /@babel/traverse@7.22.20: - resolution: {integrity: sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==} + /@babel/traverse@7.23.0: + resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.13 - '@babel/generator': 7.22.15 + '@babel/generator': 7.23.0 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.22.5 + '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.16 - '@babel/types': 7.22.19 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.22.19: - resolution: {integrity: sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==} + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.22.5 @@ -893,8 +989,8 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.8.1: - resolution: {integrity: sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==} + /@eslint-community/regexpp@4.8.2: + resolution: {integrity: sha512-0MGxAVt1m/ZK+LTJp/j0qF7Hz97D9O/FH9Ms3ltnyIdDD57cbb1ACIQTkbHvNXtWDv5TPq7w5Kq56+cNukbo7g==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true @@ -1283,8 +1379,8 @@ packages: /@types/babel__core@7.20.2: resolution: {integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==} dependencies: - '@babel/parser': 7.22.16 - '@babel/types': 7.22.19 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 '@types/babel__generator': 7.6.5 '@types/babel__template': 7.4.2 '@types/babel__traverse': 7.20.2 @@ -1293,40 +1389,40 @@ packages: /@types/babel__generator@7.6.5: resolution: {integrity: sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==} dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 dev: true /@types/babel__template@7.4.2: resolution: {integrity: sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==} dependencies: - '@babel/parser': 7.22.16 - '@babel/types': 7.22.19 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 dev: true /@types/babel__traverse@7.20.2: resolution: {integrity: sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==} dependencies: - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 dev: true /@types/json-schema@7.0.13: resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} dev: true - /@types/node@20.6.5: - resolution: {integrity: sha512-2qGq5LAOTh9izcc0+F+dToFigBWiK1phKPt7rNhOqJSr35y8rlIBjDwGtFSgAI6MGIhjwOVNSQZVdJsZJ2uR1w==} + /@types/node@20.7.0: + resolution: {integrity: sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==} dev: true - /@types/semver@7.5.2: - resolution: {integrity: sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==} + /@types/semver@7.5.3: + resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} dev: true /@types/trusted-types@2.0.4: resolution: {integrity: sha512-IDaobHimLQhjwsQ/NMwRVfa/yL7L/wriQPMhw1ZJall0KX6E1oxk29XMDeilW5qTIg5aoiqf5Udy8U/51aNoQQ==} dev: false - /@typescript-eslint/eslint-plugin@6.7.2(@typescript-eslint/parser@6.7.2)(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==} + /@typescript-eslint/eslint-plugin@6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -1336,12 +1432,12 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.8.1 - '@typescript-eslint/parser': 6.7.2(eslint@8.50.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.7.2 - '@typescript-eslint/type-utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.7.2 + '@eslint-community/regexpp': 4.8.2 + '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.7.3 + '@typescript-eslint/type-utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.3 debug: 4.3.4 eslint: 8.50.0 graphemer: 1.4.0 @@ -1354,8 +1450,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.7.2(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==} + /@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1364,10 +1460,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.7.2 - '@typescript-eslint/types': 6.7.2 - '@typescript-eslint/typescript-estree': 6.7.2(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.7.2 + '@typescript-eslint/scope-manager': 6.7.3 + '@typescript-eslint/types': 6.7.3 + '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.7.3 debug: 4.3.4 eslint: 8.50.0 typescript: 5.2.2 @@ -1375,16 +1471,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.7.2: - resolution: {integrity: sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==} + /@typescript-eslint/scope-manager@6.7.3: + resolution: {integrity: sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.2 - '@typescript-eslint/visitor-keys': 6.7.2 + '@typescript-eslint/types': 6.7.3 + '@typescript-eslint/visitor-keys': 6.7.3 dev: true - /@typescript-eslint/type-utils@6.7.2(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==} + /@typescript-eslint/type-utils@6.7.3(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1393,8 +1489,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.7.2(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.2(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) + '@typescript-eslint/utils': 6.7.3(eslint@8.50.0)(typescript@5.2.2) debug: 4.3.4 eslint: 8.50.0 ts-api-utils: 1.0.3(typescript@5.2.2) @@ -1403,13 +1499,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.7.2: - resolution: {integrity: sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==} + /@typescript-eslint/types@6.7.3: + resolution: {integrity: sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.7.2(typescript@5.2.2): - resolution: {integrity: sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==} + /@typescript-eslint/typescript-estree@6.7.3(typescript@5.2.2): + resolution: {integrity: sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -1417,8 +1513,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.7.2 - '@typescript-eslint/visitor-keys': 6.7.2 + '@typescript-eslint/types': 6.7.3 + '@typescript-eslint/visitor-keys': 6.7.3 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -1429,18 +1525,18 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.7.2(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==} + /@typescript-eslint/utils@6.7.3(eslint@8.50.0)(typescript@5.2.2): + resolution: {integrity: sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) '@types/json-schema': 7.0.13 - '@types/semver': 7.5.2 - '@typescript-eslint/scope-manager': 6.7.2 - '@typescript-eslint/types': 6.7.2 - '@typescript-eslint/typescript-estree': 6.7.2(typescript@5.2.2) + '@types/semver': 7.5.3 + '@typescript-eslint/scope-manager': 6.7.3 + '@typescript-eslint/types': 6.7.3 + '@typescript-eslint/typescript-estree': 6.7.3(typescript@5.2.2) eslint: 8.50.0 semver: 7.5.4 transitivePeerDependencies: @@ -1448,11 +1544,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys@6.7.2: - resolution: {integrity: sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==} + /@typescript-eslint/visitor-keys@6.7.3: + resolution: {integrity: sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.2 + '@typescript-eslint/types': 6.7.3 eslint-visitor-keys: 3.4.3 dev: true @@ -1989,6 +2085,10 @@ packages: picomatch: 2.3.1 dev: true + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: true + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true @@ -2007,26 +2107,42 @@ packages: engines: {node: '>=8.0.0'} dev: false - /babel-plugin-jsx-dom-expressions@0.36.18(@babel/core@7.22.20): + /autoprefixer@10.4.16(postcss@8.4.30): + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.11 + caniuse-lite: 1.0.30001539 + fraction.js: 4.3.6 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.30 + postcss-value-parser: 4.2.0 + dev: true + + /babel-plugin-jsx-dom-expressions@0.36.18(@babel/core@7.23.0): resolution: {integrity: sha512-8K0CHgzNMB0+1OC+GQf1O49Nc6DfHAoWDjY4YTW3W/3il5KrDKAj65723oPmya68kKKOkqDKuz+Zh1u7VFHthw==} peerDependencies: '@babel/core': ^7.20.12 dependencies: - '@babel/core': 7.22.20 + '@babel/core': 7.23.0 '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.20) - '@babel/types': 7.22.19 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.0) + '@babel/types': 7.23.0 html-entities: 2.3.3 validate-html-nesting: 1.2.2 dev: true - /babel-preset-solid@1.7.12(@babel/core@7.22.20): + /babel-preset-solid@1.7.12(@babel/core@7.23.0): resolution: {integrity: sha512-vNZn34Dv6IsWK/F59HhZlN8gP0ihZfkhPp8Lx/nxlY+rKtSZEAmmYlXWtds6EDKSiXoj2TEHuCcuqp6cO7oLSg==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.20 - babel-plugin-jsx-dom-expressions: 0.36.18(@babel/core@7.22.20) + '@babel/core': 7.23.0 + babel-plugin-jsx-dom-expressions: 0.36.18(@babel/core@7.23.0) dev: true /balanced-match@1.0.2: @@ -2077,8 +2193,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001538 - electron-to-chromium: 1.4.528 + caniuse-lite: 1.0.30001539 + electron-to-chromium: 1.4.529 node-releases: 2.0.13 update-browserslist-db: 1.0.13(browserslist@4.21.11) dev: true @@ -2090,8 +2206,8 @@ packages: ieee754: 1.2.1 dev: false - /bundle-require@4.0.1(esbuild@0.18.20): - resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} + /bundle-require@4.0.2(esbuild@0.18.20): + resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.17' @@ -2110,13 +2226,18 @@ packages: engines: {node: '>=6'} dev: true + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} dev: false - /caniuse-lite@1.0.30001538: - resolution: {integrity: sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==} + /caniuse-lite@1.0.30001539: + resolution: {integrity: sha512-hfS5tE8bnNiNvEOEkm8HElUHroYwlqMMENEzELymy77+tJ6m+gA2krtHl5hxJaj71OlpC2cHZbdSMX1/YEqEkA==} dev: true /chalk@2.4.2: @@ -2187,6 +2308,10 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: true + /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -2219,8 +2344,8 @@ packages: yargs: 17.7.2 dev: true - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true /cross-fetch@3.1.8: @@ -2240,6 +2365,19 @@ packages: which: 2.0.2 dev: true + /css-selector-tokenizer@0.8.0: + resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==} + dependencies: + cssesc: 3.0.0 + fastparse: 1.1.2 + dev: true + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + /cssstyle@3.0.0: resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} engines: {node: '>=14'} @@ -2250,6 +2388,19 @@ packages: /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + /daisyui@3.7.7: + resolution: {integrity: sha512-2/nFdW/6R9MMnR8tTm07jPVyPaZwpUSkVsFAADb7Oq8N2Ynbls57laDdNqxTCUmn0QvcZi01TKl8zQbAwRfw1w==} + engines: {node: '>=16.9.0'} + dependencies: + colord: 2.9.3 + css-selector-tokenizer: 0.8.0 + postcss: 8.4.30 + postcss-js: 4.0.1(postcss@8.4.30) + tailwindcss: 3.3.3 + transitivePeerDependencies: + - ts-node + dev: true + /data-urls@4.0.0: resolution: {integrity: sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==} engines: {node: '>=14'} @@ -2263,7 +2414,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.22.15 + '@babel/runtime': 7.23.1 dev: true /debug@4.3.4: @@ -2309,6 +2460,10 @@ packages: resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} dev: false + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + /dijkstrajs@1.0.3: resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} dev: false @@ -2320,6 +2475,10 @@ packages: path-type: 4.0.0 dev: true + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -2343,8 +2502,8 @@ packages: stream-shift: 1.0.1 dev: false - /electron-to-chromium@1.4.528: - resolution: {integrity: sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==} + /electron-to-chromium@1.4.529: + resolution: {integrity: sha512-6uyPyXTo8lkv8SWAmjKFbG42U073TXlzD4R8rW3EzuznhFS2olCIAfjjQtV2dV2ar/vRF55KUd3zQYnCB0dd3A==} dev: true /emoji-regex@8.0.0: @@ -2371,9 +2530,9 @@ packages: esbuild: '>=0.12' solid-js: '>= 1.0' dependencies: - '@babel/core': 7.22.20 - '@babel/preset-typescript': 7.22.15(@babel/core@7.22.20) - babel-preset-solid: 1.7.12(@babel/core@7.22.20) + '@babel/core': 7.23.0 + '@babel/preset-typescript': 7.23.0(@babel/core@7.23.0) + babel-preset-solid: 1.7.12(@babel/core@7.23.0) esbuild: 0.19.3 solid-js: 1.7.12 transitivePeerDependencies: @@ -2490,7 +2649,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) - '@eslint-community/regexpp': 4.8.1 + '@eslint-community/regexpp': 4.8.2 '@eslint/eslintrc': 2.1.2 '@eslint/js': 8.50.0 '@humanwhocodes/config-array': 0.11.11 @@ -2611,6 +2770,10 @@ packages: engines: {node: '>=6'} dev: false + /fastparse@1.1.2: + resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} + dev: true + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -2674,6 +2837,10 @@ packages: mime-types: 2.1.35 dev: true + /fraction.js@4.3.6: + resolution: {integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==} + dev: true + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -2686,6 +2853,10 @@ packages: dev: true optional: true + /function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -2774,6 +2945,13 @@ packages: engines: {node: '>=8'} dev: true + /has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + /hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: @@ -2872,6 +3050,12 @@ packages: binary-extensions: 2.2.0 dev: true + /is-core-module@2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + dependencies: + has: 1.0.3 + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2920,6 +3104,11 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true + /jiti@1.20.0: + resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} + hasBin: true + dev: true + /joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -3231,6 +3420,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -3247,6 +3441,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: true + /on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} dev: false @@ -3335,6 +3534,10 @@ packages: engines: {node: '>=8'} dev: true + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -3349,6 +3552,11 @@ packages: engines: {node: '>=8.6'} dev: true + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + /pino-abstract-transport@0.5.0: resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} dependencies: @@ -3387,7 +3595,29 @@ packages: engines: {node: '>=10.13.0'} dev: false - /postcss-load-config@4.0.1: + /postcss-import@15.1.0(postcss@8.4.30): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.30 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.6 + dev: true + + /postcss-js@4.0.1(postcss@8.4.30): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.30 + dev: true + + /postcss-load-config@4.0.1(postcss@8.4.30): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: @@ -3400,9 +3630,32 @@ packages: optional: true dependencies: lilconfig: 2.1.0 + postcss: 8.4.30 yaml: 2.3.2 dev: true + /postcss-nested@6.0.1(postcss@8.4.30): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.30 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-selector-parser@6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + /postcss@8.4.30: resolution: {integrity: sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==} engines: {node: ^10 || ^12 || >=14} @@ -3566,6 +3819,12 @@ packages: loose-envify: 1.4.0 dev: false + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: true + /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -3613,6 +3872,15 @@ packages: engines: {node: '>=8'} dev: true + /resolve@1.22.6: + resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -3736,9 +4004,9 @@ packages: peerDependencies: solid-js: ^1.3 dependencies: - '@babel/generator': 7.22.15 + '@babel/generator': 7.23.0 '@babel/helper-module-imports': 7.22.15 - '@babel/types': 7.22.19 + '@babel/types': 7.23.0 solid-js: 1.7.12 dev: true @@ -3848,10 +4116,46 @@ packages: has-flag: 4.0.0 dev: true + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true + /tailwindcss@3.3.3: + resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.5.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.1 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.20.0 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.30 + postcss-import: 15.1.0(postcss@8.4.30) + postcss-js: 4.0.1(postcss@8.4.30) + postcss-load-config: 4.0.1(postcss@8.4.30) + postcss-nested: 6.0.1(postcss@8.4.30) + postcss-selector-parser: 6.0.13 + resolve: 1.22.6 + sucrase: 3.34.0 + transitivePeerDependencies: + - ts-node + dev: true + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -3968,7 +4272,7 @@ packages: typescript: optional: true dependencies: - bundle-require: 4.0.1(esbuild@0.18.20) + bundle-require: 4.0.2(esbuild@0.18.20) cac: 6.7.14 chokidar: 3.5.3 debug: 4.3.4 @@ -3976,7 +4280,7 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.1 + postcss-load-config: 4.0.1(postcss@8.4.30) resolve-from: 5.0.0 rollup: 3.29.3 source-map: 0.8.0-beta.0 @@ -4061,7 +4365,6 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false /validate-html-nesting@1.2.2: resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} @@ -4090,20 +4393,20 @@ packages: solid-js: ^1.7.2 vite: ^3.0.0 || ^4.0.0 dependencies: - '@babel/core': 7.22.20 - '@babel/preset-typescript': 7.22.15(@babel/core@7.22.20) + '@babel/core': 7.23.0 + '@babel/preset-typescript': 7.23.0(@babel/core@7.23.0) '@types/babel__core': 7.20.2 - babel-preset-solid: 1.7.12(@babel/core@7.22.20) + babel-preset-solid: 1.7.12(@babel/core@7.23.0) merge-anything: 5.1.7 solid-js: 1.7.12 solid-refresh: 0.5.3(solid-js@1.7.12) - vite: 4.4.9(@types/node@20.6.5) + vite: 4.4.9(@types/node@20.7.0) vitefu: 0.2.4(vite@4.4.9) transitivePeerDependencies: - supports-color dev: true - /vite@4.4.9(@types/node@20.6.5): + /vite@4.4.9(@types/node@20.7.0): resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -4131,7 +4434,7 @@ packages: terser: optional: true dependencies: - '@types/node': 20.6.5 + '@types/node': 20.7.0 esbuild: 0.18.20 postcss: 8.4.30 rollup: 3.29.3 @@ -4147,7 +4450,7 @@ packages: vite: optional: true dependencies: - vite: 4.4.9(@types/node@20.6.5) + vite: 4.4.9(@types/node@20.7.0) dev: true /vlq@2.0.4: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..f6ca960 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - . + - site-dev + - site-build diff --git a/site/.env.template b/site-build/.env.template similarity index 100% rename from site/.env.template rename to site-build/.env.template diff --git a/site/.gitignore b/site-build/.gitignore similarity index 100% rename from site/.gitignore rename to site-build/.gitignore diff --git a/site/LICENSE b/site-build/LICENSE similarity index 100% rename from site/LICENSE rename to site-build/LICENSE diff --git a/site/README.md b/site-build/README.md similarity index 100% rename from site/README.md rename to site-build/README.md diff --git a/site/index.html b/site-build/index.html similarity index 100% rename from site/index.html rename to site-build/index.html diff --git a/site-build/package.json b/site-build/package.json new file mode 100644 index 0000000..d4b6f5a --- /dev/null +++ b/site-build/package.json @@ -0,0 +1,31 @@ +{ + "name": "solid-algo-wallets-site-build", + "version": "0.0.1", + "description": "Example SolidJS web application with Algorand wallets integration via the solid-algo-wallets library", + "scripts": { + "start": "vite", + "dev": "vite", + "build": "vite build", + "serve": "vite preview", + "clean": "rm -rf node_modules && rm -rf dist && rm pnpm-lock.yaml" + }, + "license": "MIT", + "devDependencies": { + "@types/node": "^20.6.2", + "autoprefixer": "^10.4.16", + "daisyui": "^3.7.7", + "postcss": "^8.4.30", + "prettier": "3.0.3", + "prettier-plugin-tailwindcss": "^0.5.4", + "tailwindcss": "^3.3.3", + "typescript": "^5.2.2", + "vite": "^4.4.9", + "vite-plugin-solid": "^2.7.0" + }, + "dependencies": { + "@algorandfoundation/algokit-utils": "^2.3.2", + "algosdk": "2.4.0", + "solid-js": "^1.7.12", + "solid-algo-wallets": "^0.0.8" + } +} diff --git a/site/postcss.config.js b/site-build/postcss.config.js similarity index 100% rename from site/postcss.config.js rename to site-build/postcss.config.js diff --git a/site/public/android-chrome-192x192.png b/site-build/public/android-chrome-192x192.png similarity index 100% rename from site/public/android-chrome-192x192.png rename to site-build/public/android-chrome-192x192.png diff --git a/site/public/android-chrome-512x512.png b/site-build/public/android-chrome-512x512.png similarity index 100% rename from site/public/android-chrome-512x512.png rename to site-build/public/android-chrome-512x512.png diff --git a/site/public/apple-touch-icon.png b/site-build/public/apple-touch-icon.png similarity index 100% rename from site/public/apple-touch-icon.png rename to site-build/public/apple-touch-icon.png diff --git a/site/public/favicon-16x16.png b/site-build/public/favicon-16x16.png similarity index 100% rename from site/public/favicon-16x16.png rename to site-build/public/favicon-16x16.png diff --git a/site/public/favicon-32x32.png b/site-build/public/favicon-32x32.png similarity index 100% rename from site/public/favicon-32x32.png rename to site-build/public/favicon-32x32.png diff --git a/site/public/favicon.ico b/site-build/public/favicon.ico similarity index 100% rename from site/public/favicon.ico rename to site-build/public/favicon.ico diff --git a/site/public/site.webmanifest b/site-build/public/site.webmanifest similarity index 100% rename from site/public/site.webmanifest rename to site-build/public/site.webmanifest diff --git a/site-build/src/App.tsx b/site-build/src/App.tsx new file mode 100644 index 0000000..914e593 --- /dev/null +++ b/site-build/src/App.tsx @@ -0,0 +1,262 @@ +import { For, type Component, Show, createMemo, onMount, createSignal } from 'solid-js' +import solidLogo from './assets/logo.svg' +import githubLogo from './assets/github-mark.svg' +import { TransactionSignerAccount } from '@algorandfoundation/algokit-utils/types/account' +import * as algokit from '@algorandfoundation/algokit-utils' +import { AtomicTransactionComposer, makePaymentTxnWithSuggestedParamsFromObject } from 'algosdk' +// Changed the exports to PascalCase to address Vite dev HMR issue +import { UseSolidAlgoWallets, UseNetwork, NetworkName } from 'solid-algo-wallets' + +// import { +// assetOptIn, +// assetOptOut, +// connect, +// displayBalance, +// displayMnemonic, +// getAccounts, +// getAddress, +// getAssets, +// getBalance, +// getCurrentAccount, +// getTransactions, +// setCurrentAccount, +// signTxns, +// transfer, +// transferAsset, +// } from './mm' + +export function ellipseString(string = '', width = 4): string { + return `${string.slice(0, width)}...${string.slice(-width)}` +} + +const App: Component = () => { + const { + activeWallet, + walletName, + address, + connectWallet, + reconnectWallet, + disconnectWallet, + walletInterfaces, + transactionSigner, + } = UseSolidAlgoWallets + const { algodClient, activeNetwork, setActiveNetwork, networkNames, getTxUrl } = UseNetwork + const [confirmedTxn, setConfirmedTxn] = createSignal('') + + onMount(() => reconnectWallet()) + + const transactionSignerAccount = createMemo(() => ({ + addr: address(), + signer: transactionSigner, + })) + + async function sendTestTxn() { + setConfirmedTxn('') + const suggestedParams = await algodClient().getTransactionParams().do() + + const payTxn = makePaymentTxnWithSuggestedParamsFromObject({ + from: address(), + to: address(), + amount: 1, + suggestedParams, + }) + const txn = await algokit.getTransactionWithSigner(payTxn, transactionSignerAccount()) + + const atc = new AtomicTransactionComposer() + atc.addTransaction(txn) + const result = await atc.execute(algodClient(), 4) + console.log('Txn confirmed: ', result) + if (result.txIDs[0] !== undefined) { + setConfirmedTxn(result.txIDs[0]) + } + } + + return ( +
+ {/* + + + + + + + + + + + + + + */} + +

Solid Algo Wallets

+
+

Example App

+ + GitHub logo + +
+ + +

Wallet Name: {walletName()}

+

Address: {ellipseString(address())}

+ + + + + + } + > +
+ + {wallet => ( +
+ + +
+ )} +
+
+
+
+ ) +} + +export default App diff --git a/site/src/assets/github-mark.svg b/site-build/src/assets/github-mark.svg similarity index 93% rename from site/src/assets/github-mark.svg rename to site-build/src/assets/github-mark.svg index 37fa923..a6da2ab 100644 --- a/site/src/assets/github-mark.svg +++ b/site-build/src/assets/github-mark.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/site/src/assets/logo.svg b/site-build/src/assets/logo.svg similarity index 100% rename from site/src/assets/logo.svg rename to site-build/src/assets/logo.svg diff --git a/site/src/index.css b/site-build/src/index.css similarity index 100% rename from site/src/index.css rename to site-build/src/index.css diff --git a/site/src/index.tsx b/site-build/src/index.tsx similarity index 100% rename from site/src/index.tsx rename to site-build/src/index.tsx diff --git a/site/src/mm.tsx b/site-build/src/mm.tsx similarity index 100% rename from site/src/mm.tsx rename to site-build/src/mm.tsx diff --git a/site/tailwind.config.js b/site-build/tailwind.config.js similarity index 83% rename from site/tailwind.config.js rename to site-build/tailwind.config.js index 86152ab..da8f909 100644 --- a/site/tailwind.config.js +++ b/site-build/tailwind.config.js @@ -2,5 +2,5 @@ module.exports = { content: ['./index.html', './src/**/*.{js,ts,jsx,tsx,css,md,mdx,html,json,scss}'], plugins: [require('daisyui')], - daisyui: { themes: ['pastel'] }, + daisyui: { themes: ['forest'] }, } diff --git a/site/vite.config.ts b/site-build/vite.config.ts similarity index 100% rename from site/vite.config.ts rename to site-build/vite.config.ts diff --git a/site-dev/.env.template b/site-dev/.env.template new file mode 100644 index 0000000..6732836 --- /dev/null +++ b/site-dev/.env.template @@ -0,0 +1,21 @@ +VITE_MAINNET_ALGOD_TOKEN= +VITE_MAINNET_ALGOD_SERVER=https://mainnet-api.algonode.cloud +VITE_MAINNET_ALGOD_PORT= +VITE_MAINNET_BLOCK_EXPLORER=https://algoexplorer.io +VITE_TESTNET_ALGOD_TOKEN= +VITE_TESTNET_ALGOD_SERVER=https://testnet-api.algonode.cloud +VITE_TESTNET_ALGOD_PORT= +VITE_TESTNET_BLOCK_EXPLORER=https://testnet.algoexplorer.io +VITE_BETANET_ALGOD_TOKEN= +VITE_BETANET_ALGOD_SERVER=https://betanet-api.algonode.cloud +VITE_BETANET_ALGOD_PORT= +VITE_BETANET_BLOCK_EXPLORER=https://betanet.algoexplorer.io +VITE_LOCALNET_ALGOD_TOKEN=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +VITE_LOCALNET_ALGOD_SERVER=http://localhost +VITE_LOCALNET_ALGOD_PORT=4001 +VITE_LOCALNET_BLOCK_EXPLORER=https://app.dappflow.org +VITE_WALLETCONNECT_PROJECT_ID= +VITE_WALLETCONNECT_PROJECT_NAME= +VITE_WALLETCONNECT_PROJECT_DESCRIPTION= +VITE_WALLETCONNECT_PROJECT_URL= +VITE_WALLETCONNECT_PROJECT_ICON= diff --git a/site-dev/.gitignore b/site-dev/.gitignore new file mode 100644 index 0000000..a0d218e --- /dev/null +++ b/site-dev/.gitignore @@ -0,0 +1,3 @@ +node_modules +dist +.env \ No newline at end of file diff --git a/site-dev/LICENSE b/site-dev/LICENSE new file mode 100644 index 0000000..e44c5c4 --- /dev/null +++ b/site-dev/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Brian Whippo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/site-dev/README.md b/site-dev/README.md new file mode 100644 index 0000000..d40547c --- /dev/null +++ b/site-dev/README.md @@ -0,0 +1,48 @@ +# Solid Algo Wallets Example + +The Solid Algo Wallets Example provides a working demonstration of a SolidJS web application that integrates Algorand wallets via the [solid-algo-wallets](https://github.com/SilentRhetoric/solid-algo-wallets) library. + +The example app utilizes [Vite](https://vitejs.dev) dev tooling, [Tailwind CSS](https://tailwindcss.com) styles, and [daisyUI](https://daisyui.com) components. + +This work has been performed with support from the Algorand Foundation xGov Grants Program + +## Quick Start + +### Install Dependencies + +```bash +npm install +# or +yarn install +# or +pnpm install +``` + +### Environment Variables + +Rename `.env.template` to `.env` and provide the variables you want to use. + +**Important:** For WalletConnect v2, you need to obtain a Project ID from [WalletConnect Cloud](https://cloud.walletconnect.com/). This is a simple process with no waiting period. Every app needs its own unique Project ID to communicate via WalletConnect. + +### Run Development Server + +In the `example` directory, run: + +`npm run dev` or `npm start` + +Open [http://localhost:3000](http://localhost:3000) to view it in the browser. The page will reload if you make edits. + +## Deployment + +In the project directory, you can run: + +`npm run build` + +This builds the app for production to the `dist` folder. + +It correctly bundles Solid in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes. +Your app is ready to be deployed! + +You can deploy the `dist` folder to any static host provider (e.g. Netlify). diff --git a/site-dev/index.html b/site-dev/index.html new file mode 100644 index 0000000..fdebd8b --- /dev/null +++ b/site-dev/index.html @@ -0,0 +1,26 @@ + + + + + + + + + + + Solid Algo Wallets Example + + + + + +
+ + + + diff --git a/site/package.json b/site-dev/package.json similarity index 91% rename from site/package.json rename to site-dev/package.json index 32bec83..3670fb0 100644 --- a/site/package.json +++ b/site-dev/package.json @@ -1,5 +1,5 @@ { - "name": "solid-algo-wallets-example", + "name": "solid-algo-wallets-site-dev", "version": "0.0.1", "description": "Example SolidJS web application with Algorand wallets integration via the solid-algo-wallets library", "scripts": { @@ -11,6 +11,7 @@ }, "license": "MIT", "devDependencies": { + "@types/node": "^20.6.2", "autoprefixer": "^10.4.16", "daisyui": "^3.7.7", "postcss": "^8.4.30", diff --git a/site-dev/postcss.config.js b/site-dev/postcss.config.js new file mode 100644 index 0000000..8c6261e --- /dev/null +++ b/site-dev/postcss.config.js @@ -0,0 +1,7 @@ +module.exports = { + purge: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'], + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/site-dev/public/android-chrome-192x192.png b/site-dev/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..f315213415efc0eacb09a008bc44c5f093405199 GIT binary patch literal 13478 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 Uqx4e+ga7~l07*qoM6N<$f}$~FHUIzs literal 0 HcmV?d00001 diff --git a/site-dev/public/android-chrome-512x512.png b/site-dev/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..3b5236430ea8be6f43cbc1fcbf53b202da3fc599 GIT binary patch literal 45196 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 z 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�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 literal 0 HcmV?d00001 diff --git a/site-dev/public/favicon-16x16.png b/site-dev/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..eef5bb64659033dc3c22f9325f149a9417383881 GIT binary patch literal 743 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&Rm5z!d1|;uvBf z*c*J;J0wtGzUB8j)!{264p#Li%r{x6u}NP^%g7-3#ie%JZ*%Q(nmk#4i*(t=cHKBN zeUj-nO(U(lEb>#1EKiVMwf!Hna%}nCz0ZA$*R5S+zJ~4DIm`6A{WC3%pDX=oU$QAu z{hRZBM&IX*Csh}i=N**uQroNaulxP)gR~;34IA?d#+$~xBi(gN8)5XtH zARr)?!+l%Z%SLF$cf~`E2LcZ+6O|}BxbdFSB|)~@Rnb?MS6A<@pQUp6e7vdV($5@U zB3(9zeP^BhZ9&6yhhJQcIjbl2+OL?9tFut!Z{R@>tIH9LQtk(Y*+jSw@?^e}+EH40 zF=U&Nu%*HcewBB593L*6&lAr}m13A}X*azixaNNu-=u`OE8?%-J-T(?7NtiqhIz8_ z`d$4D&Z~P_Ch`Bsl}-I%xM|J$ z1*ZCu9BOmfZqD4Z&GO~}r#BZ~ya)^U`rY)UnPZYC_o+8sr?)(>Jk{_|Z9fB-&iB;t Sl*@BKiOkd0&t;ucLK6VM|22XD literal 0 HcmV?d00001 diff --git a/site-dev/public/favicon-32x32.png b/site-dev/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..54d6ad03a0c66e5fb5688b24eb06002fbe9ef35f GIT binary patch literal 1438 zcmV;P1!4M$P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$^2uVaiR9FeMS8GgMMHD_~<}M&A z@exfMHKvIY^#?|6n)>Juz@~@^J_r<+tQfUjNdGk{1=NP5mPfTUCbqEj2O+IMX@6K- zO^pdLtwu~*6OCy!wc!V$7$OwGT3qg(@tiGlz1+RKJe_2jIddN0oX4EGAp8%bxwAVL zl`KURd4P}!3Wl_HPB+v>zV^eRe`6)|hq0q;;~)=efO4`U0&JZVAl|5pR$MW>RXaf2 z;bR*?ico8bKB>+)-XlCB0o3-)fNVktXtLrD3pKP0aI%lqT$;?TX%xi)fqx;Ne9lrw#H2F0qDRp zmUm+jYuwjytUyUoI;nH=D6g5QXRn~dQ@^S|FD|679aZM7I*sttqKk0f;qE*stQa6} zOaXLBfD@^UMt%t5?{7c;tP;)u@iON4N@)GaqEgV(+53u=p}{oZZ1XV(#QC<4p3QRr z?!*P_2*J(w3u~ntR8-j%){`xVjy`1MQuK*22b`TO zllA~D?F$M@;i=Npwj3uS4=}k$@#{ zM%5oq%7F^R{3wNY({HG-{Tt9IWoqrcosE=9nd30pQQu1 z?K#mWd{;Fv0_=GZxU%hnxMLSKH8suCtFNi}k*?;u3@#8VMG$z3K9O_{Z|2+|b{wYs z=3_{{L>=cq_L_%>35<)%9Uw+8sC%~kunoU`YDkNz^0wKn%> zl7Ezy=Ef)$)E;SDXCNEEi93~udM`!jRwKX#XVKe`3Y_H<2e?^8&LDxgFBPrHbGx8n zMke~WEV423h2|>Gqh!$ z@Q{Jaah!afZp805V7jV)dw6~3b?XI**2hZ)XX6$batn`2Qj1xL2cphxx_ts6lm)k` z*3O>maXouY$5mlEy;M9w(I0Y|^!2E4w#21<3m4pN&nT$vPHGt{G`Gd4vLGphz|Xu= zQsW2wpN)5q*ZX6AWx-8~uBz{C@av|dv8k&oD=VIHiCV%skKj0^W-p)~&_do#z|}-o z6W?uI{yyQ+UD7gPkiS;wgJFOO?*~IlLkVzt6<6Z9F`jq}_%oVnVJmIU7)F};G94g) zHNY9eeT*8T;ZM=RO>_|M`N;$6c4&Pl`yaL5`_E;v;L>*7oEo*V{(kw?gk4Pe-$EI` spE~t40bj7See#{!>U15@m{`*MFUExfe@;U_yZ`_I07*qoM6N<$g3h3u-T(jq literal 0 HcmV?d00001 diff --git a/site-dev/public/favicon.ico b/site-dev/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bb4e5e4791f853614e2edfa3febb19ed1034600d GIT binary patch literal 15406 zcmeHO3#=Sf8J=22L6mB>1*;TEl&;#lGqd;6 z=F)q2X7)bP-rbqoL8;o(5G1K$Q$&eSP!pwMsi2^3Ck38uRa|p>;MiMz&s-da;Y{rW=|$*TFY{gNeq57@%du_` z!@ieFLzPY6v--t6$J#PBXrDV?vft~w=7XZov+fA{8n1z|J2`f3apkLH0AYXr^onae zfNL`Ftj&$qz}!D_eo!=L#q)VzSL}Xe*|8R4{+Ef9{7!BI{z@_5weF1Jgad^$v9EjB zKXus~%KiN(%X8Td2XZH3OhiBK7c|53FRSw&2)sf!Um~gD;Jbz8S=Na0i0*a|)~n)f z{gk-JYe3$%hGFhF!jONy*o*nI2-hn8ARCoI6OwKiVvQOPPC71zE`o|A6N`=vYtL%rvZ7rV|QZ=(5T zEl>>f?@kzH5-%AQP9`3o&g?fNcUFP%`)D1 z^YgLS18IILp8pi#ada=<6unAC|`iz+r5leH?<4eYLzU?9dZyy*#{S@&}qXHB0b46DV)e+W-i@w%JjO19tZcyk z?*$Kkj(acd$JD57t+H!=ECJuOc83k*x>B?*0=!34b7Vc;w9d88&Ia8uCSjg|dm<*G zT&r;Ko%~gR`=17|BRm{ycca)SjT`*++u?f>wlA$)K`H+Mz=2Ix;Tyy~1UrIdE0r zkev>GQElgFV*q~<`H_ZSaq~;@?qGz2f)2!~1$of&VyLgq?@@lGJs(7_^cg{ic6p(o z1N{?Xg)hMNod#QdHsD^5eJAPdnYWQXlsyTrs*Nxw0=N4;Y5M7&Rq{X?XmCx)zCcL_ z*Lq^i?K(>bGu>a+&3`w5S=9@3zwg)|P0v@#q-zD~agCnW4tBi_K8JC#ZtuSza|`d# ztr5jomK81ELyXU!z|Cj2zq&oE`p4W=X90%* zI2_X8@rzFHTZISnr?O+-2pj^)!L77Ath=bj{;&73PJ$AxaV4%+>LeIm`)x!XR2k}d zZN=^S5NN#w^{4M5uep}KurgwvQ|`~5%s9U`;W^SEPL(0+gOC#k*A85X93Rhz5YO&{ zuk(GUuwdA>PkN4^Zm=GU-1P^r;naDZz6qTN{@m9D{N$bCuzl{a-a|Ol_wtHk79lIy z^Qo#`gAaKeHfH{oTn?uTNB zVGn-ETDWD)k(VXLso?o7ILoNRg*d`yE)Bzh6J>hxtc$)H@x^+byfHUE8nRS9TX<4I z`+cDOR~yCutf`^KKMLNdYd1oc3P)6yDn*f>*XyQZZQ9)5FV3T6+Naw*|AD>bd4P5g zM^cs$$E;P*evJwJdbq4 z1n|7N8ZOWEo(3LEvicxV?{Lkp15e^wZ_ko_hhejB8AE*#{Aep);yD@cWc@~E|Ne@1 zP3=Z7u#z;V9ZTloNt_dVV(ePw$KrddH6Imyv-DL;<~srVF(uvTgNpiiM&RyQTQIj_ ztgT#|`xCW!yGPRXEGXBFL2dU2z|h2=h-biubZjiX@{ z*XCb=Txzs&JQK+h^zJyo{c{96sjtXoCP2?+v_;IJS<_tC-F-rI)?p7|j$E&m^#Xjb zd)tvE`k-+S=Z9*22CS+qAvUg_Z6s>^zl?8SGcL2@6ejrCBQfcT<^i% z5kAYcDroNjZFN3tXW*=?ecM4@jdU6^Bki%)7BXgEr=oAxK1m-`@m`ItHJBp4$7=CkE!r2vKui|7weVsdg(UzFb;WF`Zx!1I_!13xm-VD0l(CZoYwl4 zlFljFfv!HxGk5BD8ei2jVnm03>H0_qej5UwZ^l0Uf{Qf= z=3#qqJqG>7w^-Jvnbo%*C{Q6>kE_2~{K64z_AMicGZ6Y?FMm*yW+4Ix* zN6+T|St zCB{)Zpz~|^ZQpv&x(Ir?0)F>FHQo6?4)YQCl(%Go--$8J;u+wXmTm1b__4oIG_ULg zUahPV=>y^!tzBxq2k_`g#0@vJ8~3z=w>(z-*Q#V+2YNHt(b8D;j&w)=@^ { disconnectWallet, walletInterfaces, transactionSigner, - } = UseWallet + } = UseSolidAlgoWallets const { algodClient, activeNetwork, setActiveNetwork, networkNames, getTxUrl } = UseNetwork const [confirmedTxn, setConfirmedTxn] = createSignal('') diff --git a/site-dev/src/assets/github-mark.svg b/site-dev/src/assets/github-mark.svg new file mode 100644 index 0000000..a6da2ab --- /dev/null +++ b/site-dev/src/assets/github-mark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site-dev/src/assets/logo.svg b/site-dev/src/assets/logo.svg new file mode 100644 index 0000000..8849877 --- /dev/null +++ b/site-dev/src/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/site-dev/src/index.css b/site-dev/src/index.css new file mode 100644 index 0000000..97f4b8b --- /dev/null +++ b/site-dev/src/index.css @@ -0,0 +1,18 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +.logo { + animation: logo-spin infinite 20s linear; + height: 48px; + pointer-events: none; +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} diff --git a/site-dev/src/index.tsx b/site-dev/src/index.tsx new file mode 100644 index 0000000..64f5054 --- /dev/null +++ b/site-dev/src/index.tsx @@ -0,0 +1,6 @@ +import { render } from 'solid-js/web' +import './index.css' + +import App from './App' + +render(() => , document.getElementById('root')!) diff --git a/site-dev/src/mm.tsx b/site-dev/src/mm.tsx new file mode 100644 index 0000000..fa27645 --- /dev/null +++ b/site-dev/src/mm.tsx @@ -0,0 +1,398 @@ +// import { makePaymentTxnWithSuggestedParamsFromObject } from 'algosdk' + +// // https://arc.algorand.foundation/ARCs/arc-0001 +// export type AlgorandAddress = string +// export type SignedTxnStr = string +// export interface MultisigMetadata { +// /** +// * Multisig version. +// */ +// version: number + +// /** +// * Multisig threshold value. Authorization requires a subset of signatures, +// * equal to or greater than the threshold value. +// */ +// threshold: number + +// /** +// * List of Algorand addresses of possible signers for this +// * multisig. Order is important. +// */ +// addrs: AlgorandAddress[] +// } + +// export interface WalletTransaction { +// /** +// * Base64 encoding of the canonical msgpack encoding of a Transaction. +// */ +// txn: string + +// /** +// * Optional authorized address used to sign the transaction when the account +// * is rekeyed. Also called the signor/sgnr. +// */ +// authAddr?: AlgorandAddress + +// /** +// * Multisig metadata used to sign the transaction +// */ +// msig?: MultisigMetadata + +// /** +// * Optional list of addresses that must sign the transactions +// */ +// signers?: AlgorandAddress[] + +// /** +// * Optional base64 encoding of the canonical msgpack encoding of a +// * SignedTxn corresponding to txn, when signers=[] +// */ +// stxn?: SignedTxnStr + +// /** +// * Optional message explaining the reason of the transaction +// */ +// message?: string + +// /** +// * Optional message explaining the reason of this group of transaction +// * Field only allowed in the first transaction of a group +// */ +// groupMessage?: string +// } + +// interface Request { +// method: string +// params: { +// 'npm:@algorandfoundation/algorand-metamask-snap'?: {} +// snapId?: string +// request?: { +// method?: string +// params?: { testnet?: boolean; [key: string]: any } +// } +// } +// } + +// type MetaMask = { +// request: (req: Request) => Promise +// } + +// type WindowExtended = { ethereum: MetaMask } & Window & typeof globalThis + +// export async function connect() { +// // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition +// if (typeof window == 'undefined' || (window as WindowExtended).ethereum === undefined) { +// throw new Error('MetaMask is not available') +// } +// const client = await (window as WindowExtended).ethereum.request({ +// method: 'wallet_requestSnaps', +// params: { +// 'npm:@algorandfoundation/algorand-metamask-snap': {}, +// }, +// }) +// console.debug('Client: ', client) +// } + +// export async function displayBalance() { +// await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'displayBalance', +// params: { testnet: true }, +// }, +// }, +// }) +// } + +// export async function getBalance() { +// const balance = await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'getBalance', +// params: { testnet: true }, +// }, +// }, +// }) +// console.debug('Balance: ', balance) +// return balance +// } + +// export async function getAddress() { +// const address = await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'getAddress', +// params: { testnet: true }, +// }, +// }, +// }) +// console.debug('Address: ', address) +// return address +// } + +// export async function transfer() { +// const address = prompt("Please enter recipient's Algorand address") +// if (address) { +// const response = await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'transfer', +// params: { +// to: address, +// amount: 0, +// testnet: true, +// }, +// }, +// }, +// }) +// console.debug('Transfer response: ', response) +// // Response is a Transaction ID +// return response +// } +// } + +// export async function displayMnemonic() { +// await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'displayMnemonic', +// }, +// }, +// }) +// } + +// export async function getTransactions() { +// const response = await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'getTransactions', +// params: { +// testnet: true, +// }, +// }, +// }, +// }) +// console.debug('Transactions response: ', response) +// // Response is an object with a transactions array in newest->oldest order +// return response +// } + +// export async function getAssets() { +// const response = await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'getAssets', +// params: { +// testnet: true, +// }, +// }, +// }, +// }) +// console.debug('Assets response: ', JSON.stringify(response)) +// // Response is an array of assets with amount, asset, asset-id, deleted, is-frozen, opted-in-at-round, etc. +// /* +// [{"amount":0,"asset-id":10458941,"deleted":false,"is-frozen":false,"opted-in-at-round":33055176,"asset":[{"created-at-round":7879744,"deleted":false,"index":10458941,"params":{"clawback":"XM2W7VZODABS6RAL3FENBRKCOF6XLOQZZWIVVZTBYCVH2ADRYKN53CQLXM","creator":"VETIGP3I6RCUVLVYNDW5UA2OJMXB5WP6L6HJ3RWO2R37GP4AVETICXC55I","decimals":6,"default-frozen":false,"freeze":"JTDZXA72SNBU5JCFO6MI5LITSR7YDBLQI2K5LERAIIYSG4P7GZRS6ZLTJE","manager":"6FLEYABEB3G7ZKHL4NBCXHMMXVTEITBXI4AU3CMVXKJVEBKRRKOEY5UQEI","name":"USDC","name-b64":"VVNEQw==","reserve":"UJBZPEMXLD6KZOLUBUDSZ3DXECXYDADZZLBH6O7CMYXHE2PLTCW44VK5T4","total":18446744073709552000,"unit-name":"USDC","unit-name-b64":"VVNEQw==","url":"https://centre.io","url-b64":"aHR0cHM6Ly9jZW50cmUuaW8="}}]}] +// */ +// return response +// } + +// export async function getAccounts() { +// const response = await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'getAccounts', +// params: { +// testnet: true, +// }, +// }, +// }, +// }) +// console.debug('Accounts response: ', response) +// // Response is an object keyed by addr with child objects with addr, name, path, swaps, type +// return response +// } + +// export async function getCurrentAccount() { +// const response = await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'getCurrentAccount', +// params: { +// testnet: true, +// }, +// }, +// }, +// }) +// console.debug('Current Account response: ', response) +// // Response is an object with addr, name, path, swaps, type +// return response +// } + +// export async function setCurrentAccount() { +// const address = prompt("Please enter recipient's Algorand address") +// if (address) { +// try { +// const response = await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'setAccount', +// params: { +// address: address, +// testnet: true, +// }, +// }, +// }, +// }) +// console.debug('Set Current Account response: ', response) +// // Response is true if successful +// return response +// } catch (e) { +// console.error(e) +// } +// } +// } + +// export async function assetOptIn() { +// const assetId = prompt('Please enter asset ID') +// if (assetId) { +// try { +// const response = await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'assetOptIn', +// params: { +// assetIndex: Number(assetId), +// testnet: true, +// }, +// }, +// }, +// }) +// console.debug('Opt In response: ', response) +// // Response is Transaction ID +// return response +// } catch (e) { +// console.error(e) +// } +// } +// } +// export async function assetOptOut() { +// const assetId = prompt('Please enter asset ID') +// if (assetId) { +// try { +// const response = await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'assetOptOut', +// params: { +// assetIndex: Number(assetId), +// testnet: true, +// }, +// }, +// }, +// }) +// console.debug('Opt Out response: ', response) +// // Response is Transaction ID +// return response +// } catch (e) { +// console.error(e) +// } +// } +// } + +// // Currently throwing RPC Error: result is not defined +// // Docs say the amount should be a string but that throws Amount must be a positive number and smaller than 2^64-1. If the number is larger than 2^53-1, use bigint. +// export async function transferAsset() { +// const assetId = prompt('Please enter asset ID') +// const amount = prompt('Please enter asset amount to send') +// const address = prompt("Please enter recipient's Algorand address") +// if (assetId && address) { +// try { +// const response = await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'transferAsset', +// params: { +// assetIndex: Number(assetId), +// to: address, +// amount: Number(amount), +// testnet: true, +// }, +// }, +// }, +// }) +// console.debug('Transfer Asset response: ', response) +// // Response is Transaction ID +// return response +// } catch (e) { +// console.error(e) +// } +// } +// } + +// // Just a POC +// // Errors on sending amount = 0 +// export async function signTxns() { +// const { algodClient } = useNetwork +// const suggestedParams = await algodClient().getTransactionParams().do() + +// const payTxn = makePaymentTxnWithSuggestedParamsFromObject({ +// from: '2IRWABDUYCUOYJZBCRSYQXTS4UM3WNIHTOFT73MHGSXCXWYZORUPT5SSWA', +// to: '2IRWABDUYCUOYJZBCRSYQXTS4UM3WNIHTOFT73MHGSXCXWYZORUPT5SSWA', +// amount: Number(1), +// suggestedParams, +// }) + +// try { +// const txnToSign = Buffer.from(payTxn.toByte()).toString('base64') +// const txnsToSign = [{ txn: txnToSign }] +// console.debug('txnsToSign: ', txnsToSign) +// const response = await (window as WindowExtended).ethereum.request({ +// method: 'wallet_invokeSnap', +// params: { +// snapId: 'npm:@algorandfoundation/algorand-metamask-snap', +// request: { +// method: 'signTxns', +// params: { +// txns: txnsToSign, +// testnet: true, +// }, +// }, +// }, +// }) +// console.debug('Sign Transactions response: ', response) +// // Response is ['gqNzaWfEQP2fFZnmkMQq6z93F4HQDYKL2Qec9QSVHMlcBlxzM4…0wKjsJyEUZYhecuUZuzUHm4s/7Yc0rivbGXRopHR5cGWjcGF5'] +// return response +// } catch (e) { +// console.error(e) +// } +// } + +// // TODO: Swaps +// // https://github.com/algorandfoundation/algo-metamask#swapping-functions diff --git a/site-dev/tailwind.config.js b/site-dev/tailwind.config.js new file mode 100644 index 0000000..da8f909 --- /dev/null +++ b/site-dev/tailwind.config.js @@ -0,0 +1,6 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./index.html', './src/**/*.{js,ts,jsx,tsx,css,md,mdx,html,json,scss}'], + plugins: [require('daisyui')], + daisyui: { themes: ['forest'] }, +} diff --git a/site-dev/vite.config.ts b/site-dev/vite.config.ts new file mode 100644 index 0000000..22b9712 --- /dev/null +++ b/site-dev/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite' +import solidPlugin from 'vite-plugin-solid' + +export default defineConfig({ + plugins: [solidPlugin()], + server: { + port: 3000, + }, + build: { + target: 'esnext', + }, +}) diff --git a/site/pnpm-lock.yaml b/site/pnpm-lock.yaml deleted file mode 100644 index b025544..0000000 --- a/site/pnpm-lock.yaml +++ /dev/null @@ -1,1702 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@algorandfoundation/algokit-utils': - specifier: ^2.3.2 - version: 2.3.2 - algosdk: - specifier: 2.4.0 - version: 2.4.0 - solid-js: - specifier: ^1.7.12 - version: 1.7.12 - -devDependencies: - autoprefixer: - specifier: ^10.4.16 - version: 10.4.16(postcss@8.4.30) - daisyui: - specifier: ^3.7.7 - version: 3.7.7 - postcss: - specifier: ^8.4.30 - version: 8.4.30 - prettier: - specifier: 3.0.3 - version: 3.0.3 - prettier-plugin-tailwindcss: - specifier: ^0.5.4 - version: 0.5.4(prettier@3.0.3) - tailwindcss: - specifier: ^3.3.3 - version: 3.3.3 - typescript: - specifier: ^5.2.2 - version: 5.2.2 - vite: - specifier: ^4.4.9 - version: 4.4.9 - vite-plugin-solid: - specifier: ^2.7.0 - version: 2.7.0(solid-js@1.7.12)(vite@4.4.9) - -packages: - - /@algorandfoundation/algokit-utils@2.3.2: - resolution: {integrity: sha512-+Q4b8OVXogjkthapH04k+AqY19hxklfXFTmvoaQdQbbo2rUk1AgSXBRq0ThVg7n7RhfSMMUh0ZIL5bpse7MSKA==} - engines: {node: '>=16.0'} - dependencies: - algosdk: 2.4.0 - buffer: 6.0.3 - transitivePeerDependencies: - - encoding - dev: false - - /@alloc/quick-lru@5.2.0: - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - dev: true - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 - dev: true - - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.20 - chalk: 2.4.2 - dev: true - - /@babel/compat-data@7.22.20: - resolution: {integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/core@7.22.20: - resolution: {integrity: sha512-Y6jd1ahLubuYweD/zJH+vvOY141v4f9igNQAQ+MBgq9JlHS2iTsZKn1aMsb3vGccZsXI16VzTBw52Xx0DWmtnA==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.22.15 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.22.20(@babel/core@7.22.20) - '@babel/helpers': 7.22.15 - '@babel/parser': 7.22.16 - '@babel/template': 7.22.15 - '@babel/traverse': 7.22.20 - '@babel/types': 7.22.19 - convert-source-map: 1.9.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/generator@7.22.15: - resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.19 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 - jsesc: 2.5.2 - dev: true - - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.19 - dev: true - - /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.22.20 - '@babel/helper-validator-option': 7.22.15 - browserslist: 4.21.11 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - - /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.20): - resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.20 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.15 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.20) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - dev: true - - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-function-name@7.22.5: - resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.22.19 - dev: true - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.19 - dev: true - - /@babel/helper-member-expression-to-functions@7.22.15: - resolution: {integrity: sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.19 - dev: true - - /@babel/helper-module-imports@7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.19 - dev: true - - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.19 - dev: true - - /@babel/helper-module-transforms@7.22.20(@babel/core@7.22.20): - resolution: {integrity: sha512-dLT7JVWIUUxKOs1UnJUBR3S70YK+pKX6AbJgB2vMIvEkZkrfJDbYDJesnPshtKV4LhDOR3Oc5YULeDizRek+5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.20 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.19 - dev: true - - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-replace-supers@7.22.20(@babel/core@7.22.20): - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.20 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.22.15 - '@babel/helper-optimise-call-expression': 7.22.5 - dev: true - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.19 - dev: true - - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.19 - dev: true - - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.19 - dev: true - - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helpers@7.22.15: - resolution: {integrity: sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.22.20 - '@babel/types': 7.22.19 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - - /@babel/parser@7.22.16: - resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.22.19 - dev: true - - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.20): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.20): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.22.20): - resolution: {integrity: sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.20 - '@babel/helper-module-transforms': 7.22.20(@babel/core@7.22.20) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - dev: true - - /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.22.20): - resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.20 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.20) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.20) - dev: true - - /@babel/preset-typescript@7.22.15(@babel/core@7.22.20): - resolution: {integrity: sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.20) - '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.22.20) - '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.22.20) - dev: true - - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.22.16 - '@babel/types': 7.22.19 - dev: true - - /@babel/traverse@7.22.20: - resolution: {integrity: sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.22.15 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.22.16 - '@babel/types': 7.22.19 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/types@7.22.19: - resolution: {integrity: sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.19 - dev: true - - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true - - /@jridgewell/trace-mapping@0.3.19: - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - dev: true - - /@types/babel__core@7.20.2: - resolution: {integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==} - dependencies: - '@babel/parser': 7.22.16 - '@babel/types': 7.22.19 - '@types/babel__generator': 7.6.5 - '@types/babel__template': 7.4.2 - '@types/babel__traverse': 7.20.2 - dev: true - - /@types/babel__generator@7.6.5: - resolution: {integrity: sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==} - dependencies: - '@babel/types': 7.22.19 - dev: true - - /@types/babel__template@7.4.2: - resolution: {integrity: sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==} - dependencies: - '@babel/parser': 7.22.16 - '@babel/types': 7.22.19 - dev: true - - /@types/babel__traverse@7.20.2: - resolution: {integrity: sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==} - dependencies: - '@babel/types': 7.22.19 - dev: true - - /algo-msgpack-with-bigint@2.1.1: - resolution: {integrity: sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==} - engines: {node: '>= 10'} - dev: false - - /algosdk@2.4.0: - resolution: {integrity: sha512-sENe6IyUqvhQprfS/7gJAkPC5sX2LI5uc+gXaKNgzKp72UEyXYSoN3h4MZkOlCrOcTSWTJW7605tYgg8nFkflw==} - engines: {node: '>=16.0.0'} - dependencies: - algo-msgpack-with-bigint: 2.1.1 - buffer: 6.0.3 - cross-fetch: 3.1.8 - hi-base32: 0.5.1 - js-sha256: 0.9.0 - js-sha3: 0.8.0 - js-sha512: 0.8.0 - json-bigint: 1.0.0 - tweetnacl: 1.0.3 - vlq: 2.0.4 - transitivePeerDependencies: - - encoding - dev: false - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true - - /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: true - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true - - /autoprefixer@10.4.16(postcss@8.4.30): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.21.11 - caniuse-lite: 1.0.30001538 - fraction.js: 4.3.6 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.30 - postcss-value-parser: 4.2.0 - dev: true - - /babel-plugin-jsx-dom-expressions@0.36.18(@babel/core@7.22.20): - resolution: {integrity: sha512-8K0CHgzNMB0+1OC+GQf1O49Nc6DfHAoWDjY4YTW3W/3il5KrDKAj65723oPmya68kKKOkqDKuz+Zh1u7VFHthw==} - peerDependencies: - '@babel/core': ^7.20.12 - dependencies: - '@babel/core': 7.22.20 - '@babel/helper-module-imports': 7.18.6 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.20) - '@babel/types': 7.22.19 - html-entities: 2.3.3 - validate-html-nesting: 1.2.2 - dev: true - - /babel-preset-solid@1.7.12(@babel/core@7.22.20): - resolution: {integrity: sha512-vNZn34Dv6IsWK/F59HhZlN8gP0ihZfkhPp8Lx/nxlY+rKtSZEAmmYlXWtds6EDKSiXoj2TEHuCcuqp6cO7oLSg==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.20 - babel-plugin-jsx-dom-expressions: 0.36.18(@babel/core@7.22.20) - dev: true - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false - - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: false - - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - - /browserslist@4.21.11: - resolution: {integrity: sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001538 - electron-to-chromium: 1.4.528 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.21.11) - dev: true - - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: false - - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: true - - /caniuse-lite@1.0.30001538: - resolution: {integrity: sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==} - dev: true - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: true - - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: true - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true - - /colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - dev: true - - /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true - - /cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: false - - /css-selector-tokenizer@0.8.0: - resolution: {integrity: sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==} - dependencies: - cssesc: 3.0.0 - fastparse: 1.1.2 - dev: true - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - - /daisyui@3.7.7: - resolution: {integrity: sha512-2/nFdW/6R9MMnR8tTm07jPVyPaZwpUSkVsFAADb7Oq8N2Ynbls57laDdNqxTCUmn0QvcZi01TKl8zQbAwRfw1w==} - engines: {node: '>=16.9.0'} - dependencies: - colord: 2.9.3 - css-selector-tokenizer: 0.8.0 - postcss: 8.4.30 - postcss-js: 4.0.1(postcss@8.4.30) - tailwindcss: 3.3.3 - transitivePeerDependencies: - - ts-node - dev: true - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true - - /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true - - /electron-to-chromium@1.4.528: - resolution: {integrity: sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==} - dev: true - - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - - /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: true - - /fastparse@1.1.2: - resolution: {integrity: sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==} - dev: true - - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - dependencies: - reusify: 1.0.4 - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /fraction.js@4.3.6: - resolution: {integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==} - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true - - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true - - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: true - - /hi-base32@0.5.1: - resolution: {integrity: sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==} - dev: false - - /html-entities@2.3.3: - resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} - dev: true - - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: false - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - dependencies: - has: 1.0.3 - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-what@4.1.15: - resolution: {integrity: sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==} - engines: {node: '>=12.13'} - dev: true - - /jiti@1.20.0: - resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} - hasBin: true - dev: true - - /js-sha256@0.9.0: - resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} - dev: false - - /js-sha3@0.8.0: - resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} - dev: false - - /js-sha512@0.8.0: - resolution: {integrity: sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==} - dev: false - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true - - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /json-bigint@1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - dependencies: - bignumber.js: 9.1.2 - dev: false - - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true - - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: true - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true - - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - dependencies: - yallist: 3.1.1 - dev: true - - /merge-anything@5.1.7: - resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} - engines: {node: '>=12.13'} - dependencies: - is-what: 4.1.15 - dev: true - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true - - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: true - - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: false - - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - dev: true - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true - - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true - - /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true - - /postcss-import@15.1.0(postcss@8.4.30): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.30 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.6 - dev: true - - /postcss-js@4.0.1(postcss@8.4.30): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.30 - dev: true - - /postcss-load-config@4.0.1(postcss@8.4.30): - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 2.1.0 - postcss: 8.4.30 - yaml: 2.3.2 - dev: true - - /postcss-nested@6.0.1(postcss@8.4.30): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.30 - postcss-selector-parser: 6.0.13 - dev: true - - /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: true - - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true - - /postcss@8.4.30: - resolution: {integrity: sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.6 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - - /prettier-plugin-tailwindcss@0.5.4(prettier@3.0.3): - resolution: {integrity: sha512-QZzzB1bID6qPsKHTeA9qPo1APmmxfFrA5DD3LQ+vbTmAnY40eJI7t9Q1ocqel2EKMWNPLJqdTDWZj1hKYgqSgg==} - engines: {node: '>=14.21.3'} - peerDependencies: - '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-pug': '*' - '@shopify/prettier-plugin-liquid': '*' - '@shufo/prettier-plugin-blade': '*' - '@trivago/prettier-plugin-sort-imports': '*' - prettier: ^3.0 - prettier-plugin-astro: '*' - prettier-plugin-css-order: '*' - prettier-plugin-import-sort: '*' - prettier-plugin-jsdoc: '*' - prettier-plugin-marko: '*' - prettier-plugin-organize-attributes: '*' - prettier-plugin-organize-imports: '*' - prettier-plugin-style-order: '*' - prettier-plugin-svelte: '*' - prettier-plugin-twig-melody: '*' - peerDependenciesMeta: - '@ianvs/prettier-plugin-sort-imports': - optional: true - '@prettier/plugin-pug': - optional: true - '@shopify/prettier-plugin-liquid': - optional: true - '@shufo/prettier-plugin-blade': - optional: true - '@trivago/prettier-plugin-sort-imports': - optional: true - prettier-plugin-astro: - optional: true - prettier-plugin-css-order: - optional: true - prettier-plugin-import-sort: - optional: true - prettier-plugin-jsdoc: - optional: true - prettier-plugin-marko: - optional: true - prettier-plugin-organize-attributes: - optional: true - prettier-plugin-organize-imports: - optional: true - prettier-plugin-style-order: - optional: true - prettier-plugin-svelte: - optional: true - prettier-plugin-twig-melody: - optional: true - dependencies: - prettier: 3.0.3 - dev: true - - /prettier@3.0.3: - resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} - engines: {node: '>=14'} - hasBin: true - dev: true - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - dev: true - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - - /resolve@1.22.6: - resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} - hasBin: true - dependencies: - is-core-module: 2.13.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - /rollup@3.29.3: - resolution: {integrity: sha512-T7du6Hum8jOkSWetjRgbwpM6Sy0nECYrYRSmZjayFcOddtKJWU4d17AC3HNUk7HRuqy4p+G7aEZclSHytqUmEg==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: true - - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true - - /seroval@0.5.1: - resolution: {integrity: sha512-ZfhQVB59hmIauJG5Ydynupy8KHyr5imGNtdDhbZG68Ufh1Ynkv9KOYOAABf71oVbQxJ8VkWnMHAjEHE7fWkH5g==} - engines: {node: '>=10'} - - /solid-js@1.7.12: - resolution: {integrity: sha512-QoyoOUKu14iLoGxjxWFIU8+/1kLT4edQ7mZESFPonsEXZ//VJtPKD8Ud1aTKzotj+MNWmSs9YzK6TdY+fO9Eww==} - dependencies: - csstype: 3.1.2 - seroval: 0.5.1 - - /solid-refresh@0.5.3(solid-js@1.7.12): - resolution: {integrity: sha512-Otg5it5sjOdZbQZJnvo99TEBAr6J7PQ5AubZLNU6szZzg3RQQ5MX04oteBIIGDs0y2Qv8aXKm9e44V8z+UnFdw==} - peerDependencies: - solid-js: ^1.3 - dependencies: - '@babel/generator': 7.22.15 - '@babel/helper-module-imports': 7.22.15 - '@babel/types': 7.22.19 - solid-js: 1.7.12 - dev: true - - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true - - /sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.6 - ts-interface-checker: 0.1.13 - dev: true - - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - - /tailwindcss@3.3.3: - resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} - engines: {node: '>=14.0.0'} - hasBin: true - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.5.3 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.1 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.20.0 - lilconfig: 2.1.0 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.30 - postcss-import: 15.1.0(postcss@8.4.30) - postcss-js: 4.0.1(postcss@8.4.30) - postcss-load-config: 4.0.1(postcss@8.4.30) - postcss-nested: 6.0.1(postcss@8.4.30) - postcss-selector-parser: 6.0.13 - resolve: 1.22.6 - sucrase: 3.34.0 - transitivePeerDependencies: - - ts-node - dev: true - - /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - dev: true - - /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - dev: true - - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false - - /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - dev: true - - /tweetnacl@1.0.3: - resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} - dev: false - - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - - /update-browserslist-db@1.0.13(browserslist@4.21.11): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.21.11 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - - /validate-html-nesting@1.2.2: - resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} - dev: true - - /vite-plugin-solid@2.7.0(solid-js@1.7.12)(vite@4.4.9): - resolution: {integrity: sha512-avp/Jl5zOp/Itfo67xtDB2O61U7idviaIp4mLsjhCa13PjKNasz+IID0jYTyqUp9SFx6/PmBr6v4KgDppqompg==} - peerDependencies: - solid-js: ^1.7.2 - vite: ^3.0.0 || ^4.0.0 - dependencies: - '@babel/core': 7.22.20 - '@babel/preset-typescript': 7.22.15(@babel/core@7.22.20) - '@types/babel__core': 7.20.2 - babel-preset-solid: 1.7.12(@babel/core@7.22.20) - merge-anything: 5.1.7 - solid-js: 1.7.12 - solid-refresh: 0.5.3(solid-js@1.7.12) - vite: 4.4.9 - vitefu: 0.2.4(vite@4.4.9) - transitivePeerDependencies: - - supports-color - dev: true - - /vite@4.4.9: - resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - esbuild: 0.18.20 - postcss: 8.4.30 - rollup: 3.29.3 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /vitefu@0.2.4(vite@4.4.9): - resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 - peerDependenciesMeta: - vite: - optional: true - dependencies: - vite: 4.4.9 - dev: true - - /vlq@2.0.4: - resolution: {integrity: sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==} - dev: false - - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false - - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: false - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true - - /yaml@2.3.2: - resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} - engines: {node: '>= 14'} - dev: true diff --git a/src/index.tsx b/src/index.tsx index c517bde..87e5046 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,3 +1,3 @@ -export { default as UseWallet } from './useWallet' +export { default as UseSolidAlgoWallets } from './useSolidAlgoWallets' export { default as UseNetwork } from './useNetwork' export * from './types' diff --git a/src/useNetwork.ts b/src/useNetwork.ts index b89e1c0..c1c932c 100644 --- a/src/useNetwork.ts +++ b/src/useNetwork.ts @@ -8,9 +8,8 @@ import { NetworkConfigs, NetworkName, } from './types' -import { makeAlgoAssetDataObj, makeAssetDataObj } from './utilities' -function useNetwork() { +function UseNetwork() { const MAINNET_ALGOD_TOKEN = import.meta.env.VITE_MAINNET_ALGOD_TOKEN const MAINNET_ALGOD_SERVER = import.meta.env.VITE_MAINNET_ALGOD_SERVER const MAINNET_ALGOD_PORT = import.meta.env.VITE_MAINNET_ALGOD_PORT @@ -115,16 +114,16 @@ function useNetwork() { } } - async function getAccountInfo(address: string) { - const accountInfo = await algodClient().accountInformation(address).do() - return accountInfo as AccountInfo - } - async function confirmTransaction(txId: string, timeout = 4) { const confirmation = (await waitForConfirmation(algodClient(), txId, timeout)) as ConfirmedTxn return { txId, ...confirmation } } + async function getAccountInfo(address: string): Promise { + const accountInfo = await algodClient().accountInformation(address).do() + return accountInfo as AccountInfo + } + async function getAssetData(assetData: AssetData): Promise { if (assetData.id > 0) { try { @@ -144,15 +143,6 @@ function useNetwork() { } } - async function getAssetDataFromBigInts(assetIndex: BigInt, amount: BigInt): Promise { - if (Number(assetIndex) == 0) { - const newAlgoAsset = makeAlgoAssetDataObj(Number(amount)) - return newAlgoAsset - } else { - return await getAssetData(makeAssetDataObj(Number(assetIndex), Number(amount))) - } - } - return { algodClient, activeNetwork, @@ -162,11 +152,10 @@ function useNetwork() { getTxUrl, getAccountInfo, getAssetData, - getAssetDataFromBigInts, confirmTransaction, networkConfigs, networkNames, } } -export default createRoot(useNetwork) +export default createRoot(UseNetwork) diff --git a/src/useWallet.tsx b/src/useSolidAlgoWallets.tsx similarity index 86% rename from src/useWallet.tsx rename to src/useSolidAlgoWallets.tsx index b147732..9ecb74c 100644 --- a/src/useWallet.tsx +++ b/src/useSolidAlgoWallets.tsx @@ -1,16 +1,16 @@ import { makePersisted } from '@solid-primitives/storage' import { WalletAccount, WalletInterface } from './types' import { createRoot, createSignal } from 'solid-js' -import useMyAlgo from './wallets/myalgo' -import useExodus from './wallets/exodus' -import useLedger from './wallets/ledger' -import usePera from './wallets/pera' -import useDefly from './wallets/defly' +import UseMyAlgo from './wallets/myalgo' +import UseExodus from './wallets/exodus' +import UseLedger from './wallets/ledger' +import UsePera from './wallets/pera' +import UseDefly from './wallets/defly' +import UseWalletConnect from './wallets/walletConnectV2' // import useWalletConnectOld from './wallets/walletConnectV2_old' -import useWalletConnect from './wallets/walletConnectV2' // import useDaffi from './wallets/daffi' -import useMetaMask from './wallets/metamask' -import useLocalnet from './wallets/localnet' +import UseMetaMask from './wallets/metamask' +import UseLocalnet from './wallets/localnet' import { audio } from './audio' import { Transaction } from 'algosdk' @@ -25,18 +25,18 @@ const getIsIOS = () => { const isIOS = getIsIOS() const keepWCAlive: HTMLAudioElement = new Audio() -function useWallet() { +function UseSolidAlgoWallets() { const walletInterfaces: WalletInterface[] = [ - useDefly, - usePera, - useLedger, - useExodus, - useMyAlgo, - useWalletConnect, + UseDefly, + UsePera, + UseLedger, + UseExodus, + UseMyAlgo, + UseWalletConnect, // useWalletConnectOld, // useDaffi, - useMetaMask, - useLocalnet, + UseMetaMask, + UseLocalnet, ] const [activeWallet, setActiveWallet] = createSignal() const [walletName, setWalletName] = makePersisted(createSignal(''), { name: 'walletName' }) @@ -153,4 +153,4 @@ function useWallet() { } } -export default createRoot(useWallet) +export default createRoot(UseSolidAlgoWallets) diff --git a/src/utilities.ts b/src/utilities.ts index 152bec7..0076f35 100644 --- a/src/utilities.ts +++ b/src/utilities.ts @@ -1,35 +1,3 @@ -import { AssetData } from './types' - import { Buffer } from 'buffer' // Add global = globalThis in index.html to make this work globalThis.Buffer = Buffer - -export function makeAlgoAssetDataObj(amt: number): AssetData { - return { - id: 0, - // idString: "0", - amount: amt, - // amountString: formatBigNumWithDecimals(amt, 6), - frozen: false, - decimals: 6, - name: 'ALGO', - unitName: 'ALGO', - total: 10000000000000000, - } as AssetData -} - -export function makeAssetDataObj(assetIndex: number, amount: number): AssetData { - const assetData: AssetData = { - id: assetIndex, - // idString: assetIndex.toString(), - amount, - // amountString: formatBigNumWithDecimals(amount, 0), - frozen: false, - decimals: 0, - name: '', - unitName: '', - url: '', - total: 0, - } - return assetData -} diff --git a/src/wallets/daffi.tsx b/src/wallets/daffi.tsx index 794db28..fedcb75 100644 --- a/src/wallets/daffi.tsx +++ b/src/wallets/daffi.tsx @@ -8,7 +8,7 @@ import type { Transaction } from 'algosdk' import { createRoot, createSignal } from 'solid-js' // import useNetwork from '../useNetwork' -function useDaffi(): WalletInterface { +function UseDaffi(): WalletInterface { const [walletClient, setWalletClient] = createSignal() const [accounts, setAccounts] = createSignal([]) // const { getChainId } = useNetwork @@ -333,4 +333,4 @@ function useDaffi(): WalletInterface { } } -export default createRoot(useDaffi) +export default createRoot(UseDaffi) diff --git a/src/wallets/defly.tsx b/src/wallets/defly.tsx index 9f71900..02ea9be 100644 --- a/src/wallets/defly.tsx +++ b/src/wallets/defly.tsx @@ -8,7 +8,7 @@ import type { Transaction } from 'algosdk' import { createRoot, createSignal } from 'solid-js' // import useNetwork from '../useNetwork' -function useDefly(): WalletInterface { +function UseDefly(): WalletInterface { const [walletClient, setWalletClient] = createSignal() const [accounts, setAccounts] = createSignal([]) // const { getChainId } = useNetwork @@ -178,4 +178,4 @@ function useDefly(): WalletInterface { } } -export default createRoot(useDefly) +export default createRoot(UseDefly) diff --git a/src/wallets/exodus.tsx b/src/wallets/exodus.tsx index 7047b68..a589aae 100644 --- a/src/wallets/exodus.tsx +++ b/src/wallets/exodus.tsx @@ -54,7 +54,7 @@ type Exodus = { signTxns(transactions: WalletTransaction[]): Promise } -function useExodus(): WalletInterface { +function UseExodus(): WalletInterface { const [walletClient, setWalletClient] = createSignal() const [accounts, setAccounts] = createSignal([]) @@ -427,4 +427,4 @@ function useExodus(): WalletInterface { } } -export default createRoot(useExodus) +export default createRoot(UseExodus) diff --git a/src/wallets/ledger.tsx b/src/wallets/ledger.tsx index 1d8b486..7ee952a 100644 --- a/src/wallets/ledger.tsx +++ b/src/wallets/ledger.tsx @@ -7,7 +7,7 @@ import { WalletInterface, WalletAccount } from '../types' import Algorand from '@ledgerhq/hw-app-algorand' import { createRoot, createSignal } from 'solid-js' -function useLedger(): WalletInterface { +function UseLedger(): WalletInterface { const [walletClient, setWalletClient] = createSignal() const [accounts, setAccounts] = createSignal([]) @@ -157,4 +157,4 @@ function useLedger(): WalletInterface { } } -export default createRoot(useLedger) +export default createRoot(UseLedger) diff --git a/src/wallets/localnet.tsx b/src/wallets/localnet.tsx index 386f9dc..734aa17 100644 --- a/src/wallets/localnet.tsx +++ b/src/wallets/localnet.tsx @@ -1,7 +1,7 @@ import { createRoot, createSignal } from 'solid-js' import { WalletAccount, WalletInterface } from '../types' import algosdk, { Transaction, encodeAddress } from 'algosdk' -import useNetwork from '../useNetwork' +import UseNetwork from '../useNetwork' // Borrowed from https://github.com/algorand-devrel/beaker-ts/blob/master/src/sandbox/accounts.ts const kmd_token = 'a'.repeat(64) @@ -71,11 +71,11 @@ export async function getSandboxAccounts( }) } -function useLocalnet(): WalletInterface { +function UseLocalnet(): WalletInterface { const [walletClient, setWalletClient] = createSignal() const [accounts, setAccounts] = createSignal([]) const [sandboxAccounts, setSandboxAccounts] = createSignal([]) - const { setActiveNetwork } = useNetwork + const { setActiveNetwork } = UseNetwork const name = 'LocalNet KMD' @@ -211,4 +211,4 @@ function useLocalnet(): WalletInterface { } } -export default createRoot(useLocalnet) +export default createRoot(UseLocalnet) diff --git a/src/wallets/metamask.tsx b/src/wallets/metamask.tsx index c3e3f18..fe07a6d 100644 --- a/src/wallets/metamask.tsx +++ b/src/wallets/metamask.tsx @@ -93,7 +93,7 @@ interface WalletTransaction { groupMessage?: string } -function useMetaMask(): WalletInterface { +function UseMetaMask(): WalletInterface { const [walletClient, setWalletClient] = createSignal() const [accounts, setAccounts] = createSignal([]) @@ -603,4 +603,4 @@ function useMetaMask(): WalletInterface { } } -export default createRoot(useMetaMask) +export default createRoot(UseMetaMask) diff --git a/src/wallets/myalgo.tsx b/src/wallets/myalgo.tsx index 332ff61..2059ee9 100644 --- a/src/wallets/myalgo.tsx +++ b/src/wallets/myalgo.tsx @@ -7,7 +7,7 @@ import MyAlgoConnect, { Accounts } from '@randlabs/myalgo-connect' import { WalletAccount, WalletInterface } from '../types' import { Transaction } from 'algosdk' -function useMyAlgo(): WalletInterface { +function UseMyAlgo(): WalletInterface { const [walletClient, setWalletClient] = createSignal() const [accounts, setAccounts] = createSignal([]) @@ -139,4 +139,4 @@ function useMyAlgo(): WalletInterface { } } -export default createRoot(useMyAlgo) +export default createRoot(UseMyAlgo) diff --git a/src/wallets/pera.tsx b/src/wallets/pera.tsx index cea1c21..858e4ba 100644 --- a/src/wallets/pera.tsx +++ b/src/wallets/pera.tsx @@ -8,7 +8,7 @@ import type { Transaction } from 'algosdk' import { createRoot, createSignal } from 'solid-js' // import useNetwork from '../useNetwork' -function usePera(): WalletInterface { +function UsePera(): WalletInterface { const [walletClient, setWalletClient] = createSignal() const [accounts, setAccounts] = createSignal([]) // const { getChainId } = useNetwork @@ -248,4 +248,4 @@ function usePera(): WalletInterface { } } -export default createRoot(usePera) +export default createRoot(UsePera) diff --git a/src/wallets/walletConnectV2.tsx b/src/wallets/walletConnectV2.tsx index d9496a4..187a6cb 100644 --- a/src/wallets/walletConnectV2.tsx +++ b/src/wallets/walletConnectV2.tsx @@ -9,7 +9,7 @@ import { createRoot, createSignal } from 'solid-js' import { WalletAccount, WalletInterface } from '../types' import { Transaction } from 'algosdk' -import useNetwork from '../useNetwork' +import UseNetwork from '../useNetwork' import { SignClient } from '@walletconnect/sign-client/dist/types/client' export type WalletConnectTransaction = { @@ -47,12 +47,12 @@ const formatJsonRpcRequest = (method: string, params: T): JsonRpcReque } } -function useWalletConnect(): WalletInterface { +function UseWalletConnect(): WalletInterface { const [walletClient, setWalletClient] = createSignal() const [accounts, setAccounts] = createSignal([]) - const { activeNetwork } = useNetwork + const { activeNetwork } = UseNetwork - const name = 'WalletConnectNew' + const name = 'WalletConnect' const projectId = import.meta.env.VITE_WALLETCONNECT_PROJECT_ID const metadata = { name: import.meta.env.VITE_WALLETCONNECT_PROJECT_NAME, @@ -132,7 +132,7 @@ function useWalletConnect(): WalletInterface { } else { const SignClient = (await import('@walletconnect/sign-client')).SignClient const client = await SignClient.init(clientOptions) - console.debug('WalletConnectNew client', client) + console.debug('WalletConnect client', client) client.on('session_event', e => console.debug('Session event:', e)) client.on('session_update', ({ topic, params }) => console.debug('Session update:', topic, params), @@ -147,16 +147,16 @@ function useWalletConnect(): WalletInterface { } async function connect(onDisconnect: () => void): Promise { - console.debug('WalletConnectNew: connect') + console.debug('WalletConnect: connect') const client = await getClient(onDisconnect) - console.debug('WalletConnectNew Client before connecting: ', client) + console.debug('WalletConnect Client before connecting: ', client) const WalletConnectModal = (await import('@walletconnect/modal')).WalletConnectModal const walletConnectModal = new WalletConnectModal({ projectId, chains }) const { uri, approval } = await client.connect({ requiredNamespaces, }) if (!uri) { - throw new Error('Error connecting to WalletConnectNew: no URI returned.') + throw new Error('Error connecting to WalletConnect: no URI returned.') } console.debug('URI: ', uri) console.debug('approval: ', approval) @@ -176,7 +176,7 @@ function useWalletConnect(): WalletInterface { (list: WalletAccount[], account: string, idx: number) => { const walletAccount = { address: account.split(':').pop() as string, - name: `WalletConnectNew ${idx}`, + name: `WalletConnect ${idx}`, } if (list.find((wa: WalletAccount) => wa.address === walletAccount.address) === undefined) { list.push(walletAccount) @@ -185,7 +185,7 @@ function useWalletConnect(): WalletInterface { }, [], ) - console.debug('WalletConnectNew Client after connecting: ', client) + console.debug('WalletConnect Client after connecting: ', client) setWalletClient(client) setAccounts(walletAccounts) console.debug('Wallet accounts: ', walletAccounts) @@ -195,7 +195,7 @@ function useWalletConnect(): WalletInterface { } async function reconnect(onDisconnect: () => void) { - console.debug('WalletConnectNew: reconnect') + console.debug('WalletConnect: reconnect') const client = await getClient(onDisconnect) const lastKeyIndex = client.session.getAll().length - 1 const session = client.session.getAll()[lastKeyIndex] @@ -207,7 +207,7 @@ function useWalletConnect(): WalletInterface { } const walletAccounts: WalletAccount[] = accounts.map((account: string, index: number) => ({ address: account.split(':').pop() as string, - name: `WalletConnectNew ${index}`, + name: `WalletConnect ${index}`, })) setWalletClient(client) setAccounts(walletAccounts) @@ -220,7 +220,7 @@ function useWalletConnect(): WalletInterface { } async function disconnect(onDisconnect: () => void) { - console.debug('Disconnecting WalletConnectNew') + console.debug('Disconnecting WalletConnect') const client = walletClient() if (client) { const lastKeyIndex = client.session.getAll().length - 1 @@ -235,13 +235,13 @@ function useWalletConnect(): WalletInterface { code: 6000, }, }) - console.debug('Disconnected WalletConnectNew session') + console.debug('Disconnected WalletConnect session') } catch (e) { console.error('Error disconnecting session:', e) } } } - console.debug('WalletConnectNew disconnected') + console.debug('WalletConnect disconnected') setWalletClient(undefined) setAccounts([]) onDisconnect() @@ -251,7 +251,7 @@ function useWalletConnect(): WalletInterface { txnGroup: Transaction[], indexesToSign: number[], ): Promise { - console.debug('WalletConnectNew transactionSigner') + console.debug('WalletConnect transactionSigner') const client = walletClient() if (client) { const lastKeyIndex = client.session.getAll().length - 1 @@ -313,4 +313,4 @@ function useWalletConnect(): WalletInterface { } } -export default createRoot(useWalletConnect) +export default createRoot(UseWalletConnect) diff --git a/src/wallets/walletConnectV2_old.tsx b/src/wallets/walletConnectV2_old.tsx index 617c60c..77ed360 100644 --- a/src/wallets/walletConnectV2_old.tsx +++ b/src/wallets/walletConnectV2_old.tsx @@ -14,7 +14,7 @@ import { WalletConnectModalSignSession, } from '@walletconnect/modal-sign-html' import type { WalletConnectModalConfig } from '@walletconnect/modal' -import useNetwork from '../useNetwork' +import UseNetwork from '../useNetwork' export type WalletConnectTransaction = { txn: string @@ -51,12 +51,12 @@ const formatJsonRpcRequest = (method: string, params: T): JsonRpcReque } } -function useWalletConnectOld(): WalletInterface { +function UseWalletConnectOld(): WalletInterface { const [walletClient, setWalletClient] = createSignal() const [accounts, setAccounts] = createSignal([]) - const { activeNetwork } = useNetwork + const { activeNetwork } = UseNetwork - const name = 'WalletConnect' + const name = 'WalletConnectOld' const projectId = import.meta.env.VITE_WALLETCONNECT_PROJECT_ID const metadata = { name: import.meta.env.VITE_WALLETCONNECT_PROJECT_NAME, @@ -148,7 +148,7 @@ function useWalletConnectOld(): WalletInterface { } async function connect(onDisconnect: () => void): Promise { - console.debug('WalletConnect: connect') + console.debug('WalletConnectOld: connect') const client = await getClient(onDisconnect) const session: WalletConnectModalSignSession = await client.connect({ requiredNamespaces, @@ -164,7 +164,7 @@ function useWalletConnectOld(): WalletInterface { (acc: WalletAccount[], account: string, idx: number) => { const walletAccount = { address: account.split(':').pop() as string, - name: `WalletConnect ${idx}`, + name: `WalletConnectOld ${idx}`, } if (acc.find((wa: WalletAccount) => wa.address === walletAccount.address) === undefined) { acc.push(walletAccount) @@ -180,7 +180,7 @@ function useWalletConnectOld(): WalletInterface { } async function reconnect(onDisconnect: () => void) { - console.debug('WalletConnectV2: reconnect') + console.debug('WalletConnectOld: reconnect') const client = await getClient(onDisconnect) const session = await client.getSession() console.debug('Session: ', session) @@ -191,7 +191,7 @@ function useWalletConnectOld(): WalletInterface { } const walletAccounts: WalletAccount[] = accounts.map((account: string, index: number) => ({ address: account.split(':').pop() as string, - name: `WalletConnect ${index}`, + name: `WalletConnectOld ${index}`, })) setWalletClient(client) setAccounts(walletAccounts) @@ -204,7 +204,7 @@ function useWalletConnectOld(): WalletInterface { } async function disconnect(onDisconnect: () => void) { - console.debug('Disconnecting WalletConnectV2') + console.debug('Disconnecting WalletConnectOld') const client = walletClient() if (client) { const session = await client.getSession() @@ -218,13 +218,13 @@ function useWalletConnectOld(): WalletInterface { code: 6000, }, }) - console.debug('Disconnected WalletConnect session') + console.debug('Disconnected WalletConnectOld session') } catch (e) { console.error('Error disconnecting session:', e) } } } - console.debug('WalletConnect disconnected') + console.debug('WalletConnectOld disconnected') setWalletClient(undefined) setAccounts([]) onDisconnect() @@ -234,7 +234,7 @@ function useWalletConnectOld(): WalletInterface { txnGroup: Transaction[], indexesToSign: number[], ): Promise { - console.debug('WalletConnectV2 transactionSigner') + console.debug('WalletConnectOld transactionSigner') const client = walletClient() if (client) { const session = await client.getSession() @@ -295,4 +295,4 @@ function useWalletConnectOld(): WalletInterface { } } -export default createRoot(useWalletConnectOld) +export default createRoot(UseWalletConnectOld) diff --git a/tsconfig.json b/tsconfig.json index 04e8fe9..1aed2c8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,7 @@ "target": "ESNext", "module": "ESNext", "lib": ["DOM", "DOM.Iterable", "ESNext"], - "moduleResolution": "node", + "moduleResolution": "Node", "resolveJsonModule": true, "esModuleInterop": true, "noEmit": true,