From 468e736c38ceb2695fe6b0aec9f758bf308ab681 Mon Sep 17 00:00:00 2001 From: William Luke Date: Tue, 23 Jul 2024 10:29:35 +0300 Subject: [PATCH] feat: switch to mono --- .gitignore | 59 +- apps/server/package.json | 52 + apps/server/src/config.ts | 7 + apps/server/src/server/index.ts | 6 + apps/server/src/server/iron-session.ts | 20 + apps/server/src/server/server.ts | 61 + apps/server/tsconfig.json | 18 + .../website/.env.local.example | 0 .env.test => apps/website/.env.test | 0 .eslintrc.cjs => apps/website/.eslintrc.cjs | 0 .../website/__tests__}/__mocks__/storage.ts | 0 .../__tests__}/hooks/useDeploy.test.tsx | 0 .../__tests__}/lib/eth-url-parser.test.ts | 0 .../website/__tests__}/utils/crypto.test.ts | 0 .../__tests__}/utils/dmr-helpers.test.ts | 0 .../__tests__}/utils/paper-wallet.test.ts | 0 .../website/components.json | 0 next-env.d.ts => apps/website/next-env.d.ts | 0 .../website/next.config.mjs | 14 +- apps/website/package.json | 148 + .../website/postcss.config.js | 0 .../public}/android-chrome-192x192.png | Bin .../public}/android-chrome-512x512.png | Bin .../website/public}/apple-touch-icon.png | Bin .../website/public}/browserconfig.xml | 0 .../website/public}/favicon-16x16.png | Bin .../website/public}/favicon-32x32.png | Bin {public => apps/website/public}/favicon.ico | Bin {public => apps/website/public}/logo.svg | 0 .../website/public}/logos/valora.jpg | Bin {public => apps/website/public}/marker.svg | 0 .../website/public}/media/aljazeera.png | Bin {public => apps/website/public}/media/bbc.png | Bin .../website/public}/media/bloomberg.png | Bin .../website/public}/mstile-150x150.png | Bin .../website/public}/partners/celo.png | Bin .../public}/partners/kenya-red-cross.png | Bin .../website/public}/partners/mustardseed.png | Bin .../public}/partners/schumacher-center.png | Bin .../website/public}/pools/create-pool.png | Bin .../website/public}/qr/address.png | Bin .../website/public}/qr/private.png | Bin {public => apps/website/public}/robots.txt | 0 .../website/public}/safari-pinned-tab.svg | 0 .../website/public}/site.webmanifest | 0 .../website/public}/voucher/basket.png | Bin .../src}/assets/fonts/CalSans-SemiBold.ttf | Bin .../src}/assets/fonts/CalSans-SemiBold.woff | Bin .../src}/assets/fonts/CalSans-SemiBold.woff2 | Bin .../website/src}/assets/fonts/Inter-Bold.ttf | Bin .../src}/assets/fonts/Inter-Regular.ttf | Bin .../website/src}/components/address.tsx | 5 +- .../website/src}/components/alert.tsx | 0 .../website/src}/components/balance.tsx | 0 .../website/src}/components/breadcrumbs.tsx | 0 .../components/buttons/connect-button.tsx | 0 .../website/src}/components/cards/card.tsx | 0 .../src}/components/cards/statistics-card.tsx | 0 .../src}/components/charts/line-chart.tsx | 0 .../website/src}/components/date-picker.tsx | 0 .../src}/components/dialogs/are-you-sure.tsx | 0 .../components/dialogs/change-sink-dialog.tsx | 7 +- .../dialogs/create-paper-wallet.tsx | 0 .../components/dialogs/download-dialog.tsx | 0 .../components/dialogs/get-address-dialog.tsx | 0 .../components/dialogs/mint-to-dialog.tsx | 7 +- .../components/dialogs/receive-dialog.tsx | 0 .../dialogs/scan-address-dialog.tsx | 9 +- .../components/dialogs/scan-qr-dialog.tsx | 6 +- .../src}/components/dialogs/send-dialog.tsx | 0 .../src}/components/file-uploader/cropper.tsx | 0 .../components/file-uploader/file-input.tsx | 0 .../components/file-uploader/image-crop.tsx | 0 .../components/file-uploader/image-upload.tsx | 0 .../file-uploader/use-file-upload.tsx | 0 .../file-uploader/webcam-capture.tsx | 0 .../components/fullscreen-button.tsx | 0 .../components/graph-statistics.tsx | 0 .../force-graph/components/node-label.tsx | 0 .../force-graph/hooks/useGraphData.tsx | 0 .../src}/components/force-graph/index.tsx | 0 .../src}/components/force-graph/types.ts | 0 .../src}/components/force-graph/utils.ts | 13 +- .../components/forms/fields/address-field.tsx | 0 .../forms/fields/checkbox-field.tsx | 0 .../forms/fields/combo-box-field.tsx | 0 .../components/forms/fields/date-field.tsx | 0 .../components/forms/fields/image-field.tsx | 0 .../forms/fields/image-upload-field.tsx | 0 .../components/forms/fields/input-field.tsx | 0 .../components/forms/fields/map-field.tsx | 0 .../forms/fields/multi-select-field.tsx | 0 .../components/forms/fields/radio-field.tsx | 0 .../components/forms/fields/select-field.tsx | 0 .../forms/fields/select-voucher-field.tsx | 0 .../forms/fields/textarea-field.tsx | 0 .../components/forms/fields/type-helper.ts | 0 .../forms/generate-wallets-form.tsx | 0 .../components/forms/paper-wallet-form.tsx | 0 .../website/src}/components/icons.tsx | 2 +- .../website/src}/components/info-icon.tsx | 0 .../layout/collapse-menu-button.tsx | 0 .../components/layout/content-container.tsx | 0 .../src}/components/layout/default-layout.tsx | 0 .../src}/components/layout/landing-layout.tsx | 0 .../src}/components/layout/landing-nav.tsx | 0 .../src}/components/layout/menu-list.ts | 0 .../website/src}/components/layout/menu.tsx | 0 .../src}/components/layout/mobile-drawer.tsx | 0 .../components/layout/mobile-wallet-bar.tsx | 0 .../website/src}/components/layout/navbar.tsx | 0 .../src}/components/layout/sheet-menu.tsx | 0 .../src}/components/layout/sidebar-toggle.tsx | 0 .../src}/components/layout/sidebar.tsx | 0 .../src}/components/layout/site-header.tsx | 0 .../src}/components/layout/user-nav.tsx | 2 +- .../website/src}/components/loading.tsx | 0 .../website/src}/components/map/index.tsx | 0 .../src}/components/map/location-map.tsx | 0 .../website/src}/components/modal.tsx | 0 .../website/src}/components/network-icon.tsx | 0 .../website/src}/components/paper/index.tsx | 34 +- .../website/src}/components/paper/qr-card.tsx | 34 +- .../components/pools/contract-functions.ts | 10 +- .../components/pools/create-pool-status.tsx | 0 .../pools/forms/create-pool-form.tsx | 10 +- .../components/pools/forms/donate-form.tsx | 19 +- .../pools/forms/pool-voucher-form.tsx | 0 .../src}/components/pools/forms/swap-form.tsx | 28 +- .../pools/forms/update-pool-form.tsx | 0 .../components/pools/forms/withdraw-form.tsx | 13 +- .../website/src}/components/pools/hooks.tsx | 0 .../src}/components/pools/pool-details.tsx | 0 .../src}/components/pools/pool-list-item.tsx | 0 .../src}/components/pools/pool-list.tsx | 0 .../src}/components/pools/swap-field.tsx | 0 .../pools/tables/pool-deposits-table.tsx | 11 +- .../pools/tables/pool-transactions-table.tsx | 11 +- .../pools/tables/pool-voucher-table.tsx | 0 .../website/src}/components/pools/types.tsx | 0 .../website/src}/components/pools/utils.ts | 0 .../src}/components/products/product-form.tsx | 0 .../src}/components/products/product-list.tsx | 10 +- .../products/products-list-item.tsx | 6 +- .../src}/components/products/schema.ts | 2 +- .../components/qr-code/address-qr-code.tsx | 0 .../qr-code/private-key-qr-code.tsx | 0 .../website/src}/components/search-input.tsx | 0 .../src}/components/tables/infinite-table.tsx | 0 .../components/tables/table-column-header.tsx | 0 .../components/tables/table-view-options.tsx | 0 .../website/src}/components/tables/table.tsx | 0 .../components/tables/transactions-table.tsx | 10 +- .../src}/components/transactions/hash.tsx | 3 +- .../transactions/transaction-list.tsx | 0 .../transactions/transaction-status.tsx | 20 +- .../website/src}/components/ui/accordion.tsx | 0 .../website/src}/components/ui/alert.tsx | 0 .../src}/components/ui/aspect-ratio.tsx | 0 .../src}/components/ui/autosize-textarea.tsx | 0 .../website/src}/components/ui/avatar.tsx | 0 .../website/src}/components/ui/badge.tsx | 0 .../website/src}/components/ui/breadcrumb.tsx | 0 .../website/src}/components/ui/button.tsx | 0 .../website/src}/components/ui/calendar.tsx | 0 .../website/src}/components/ui/card.tsx | 0 .../website/src}/components/ui/chart.tsx | 0 .../website/src}/components/ui/checkbox.tsx | 0 .../src}/components/ui/collapsible.tsx | 0 .../website/src}/components/ui/command.tsx | 0 .../website/src}/components/ui/dialog.tsx | 0 .../website/src}/components/ui/drawer.tsx | 0 .../src}/components/ui/dropdown-menu.tsx | 0 .../src}/components/ui/file-uploader.tsx | 0 .../website/src}/components/ui/form.tsx | 0 .../website/src}/components/ui/hover-card.tsx | 0 .../website/src}/components/ui/input.tsx | 0 .../website/src}/components/ui/label.tsx | 0 .../src}/components/ui/multi-select.tsx | 0 .../src}/components/ui/navigation-menu.tsx | 0 .../website/src}/components/ui/popover.tsx | 0 .../website/src}/components/ui/progress.tsx | 0 .../src}/components/ui/radio-group.tsx | 0 .../src}/components/ui/scroll-area.tsx | 0 .../website/src}/components/ui/select.tsx | 0 .../website/src}/components/ui/separator.tsx | 0 .../website/src}/components/ui/sheet.tsx | 0 .../website/src}/components/ui/skeleton.tsx | 0 .../website/src}/components/ui/sonner.tsx | 0 .../website/src}/components/ui/stepper.tsx | 0 .../website/src}/components/ui/table.tsx | 0 .../website/src}/components/ui/tabs.tsx | 0 .../website/src}/components/ui/textarea.tsx | 0 .../website/src}/components/ui/toast.tsx | 0 .../website/src}/components/ui/toggle.tsx | 0 .../website/src}/components/ui/tooltip.tsx | 0 .../src}/components/ui/use-stepper.tsx | 0 .../users/dialogs/gas-request-dialog.tsx | 6 +- .../users/dialogs/staff-profile-dialog.tsx | 5 +- .../components/users/forms/profile-form.tsx | 39 +- .../users/forms/staff-user-search.tsx | 0 .../users/forms/users-filter-form.tsx | 2 +- .../components/users/staff-gas-status.tsx | 2 +- .../users/tables/staff-users-table.tsx | 10 +- .../src}/components/users/user-gas-status.tsx | 0 .../voucher/dialog/update-voucher-dialog.tsx | 16 +- .../forms/create-voucher-form/controls.tsx | 0 .../forms/create-voucher-form/index.tsx | 8 +- .../forms/create-voucher-form/provider.tsx | 20 +- .../forms/create-voucher-form/stepper.tsx | 0 .../create-voucher-form/steps/about-you.tsx | 2 +- .../create-voucher-form/steps/expiration.tsx | 2 +- .../steps/introduction.tsx | 0 .../steps/name-and-products.tsx | 2 +- .../create-voucher-form/steps/options.tsx | 2 +- .../steps/sigining-and-publishing.tsx | 6 +- .../steps/value-and-supply.tsx | 8 +- .../forms/create-voucher-form/utils.tsx | 0 .../voucher/forms/update-voucher-form.tsx | 6 +- .../website/src}/components/voucher/hooks.ts | 0 .../voucher/voucher-contract-functions.tsx | 0 .../voucher/voucher-declaration.tsx | 2 +- .../voucher/voucher-holders-table.tsx | 0 .../src}/components/voucher/voucher-info.tsx | 23 +- .../components/voucher/voucher-list-item.tsx | 0 .../src}/components/voucher/voucher-list.tsx | 4 +- .../src}/components/voucher/voucher-name.tsx | 0 {src => apps/website/src}/config/site.tsx | 0 {src => apps/website/src}/env.ts | 0 .../website/src}/hooks/use-sidebar-toggle.tsx | 0 {src => apps/website/src}/hooks/use-store.tsx | 0 {src => apps/website/src}/hooks/useAuth.tsx | 15 +- .../website/src}/hooks/useDebounce.tsx | 0 .../website/src}/hooks/useIsMounted.tsx | 0 {src => apps/website/src}/hooks/useIsOwner.ts | 3 +- .../website/src}/hooks/useIsWriter.ts | 3 +- .../website/src}/hooks/useLocalStorage.ts | 0 .../website/src}/hooks/useMediaQuery.ts | 0 .../website/src}/hooks/useSession.tsx | 5 +- .../website/src}/hooks/useVoucherDeploy.ts | 36 +- .../website/src}/hooks/useWebShare.tsx | 0 {src => apps/website/src}/lib/fonts.ts | 0 {src => apps/website/src}/lib/geocoder.ts | 0 {src => apps/website/src}/lib/providers.tsx | 2 +- {src => apps/website/src}/lib/utils.ts | 0 {src => apps/website/src}/pages/404.tsx | 0 {src => apps/website/src}/pages/_app.tsx | 0 {src => apps/website/src}/pages/_document.tsx | 0 .../website/src}/pages/dashboard/index.tsx | 25 +- {src => apps/website/src}/pages/index.tsx | 43 +- .../website/src}/pages/paper/generate.tsx | 0 .../website/src}/pages/pools/[address].tsx | 29 +- .../website/src}/pages/pools/create.tsx | 0 .../website/src}/pages/pools/index.tsx | 0 .../website/src}/pages/staff/index.tsx | 24 +- .../src}/pages/terms-and-conditions.tsx | 0 .../src}/pages/vouchers/[address]/index.tsx | 120 +- .../website/src}/pages/vouchers/create.tsx | 0 .../website/src}/pages/vouchers/index.tsx | 18 +- .../website/src}/pages/wallet/explore.tsx | 23 +- .../website/src}/pages/wallet/index.tsx | 22 +- .../website/src}/pages/wallet/profile.tsx | 28 +- {src => apps/website/src}/types/crypto.d.ts | 0 {src => apps/website/src}/types/next-env.d.ts | 0 {src => apps/website/src}/utils/api.ts | 40 +- {src => apps/website/src}/utils/debounce.ts | 0 .../website/src}/utils/dmr-helpers.ts | 0 {src => apps/website/src}/utils/download.ts | 0 {src => apps/website/src}/utils/logrocket.ts | 0 {src => apps/website/src}/utils/number.ts | 0 {src => apps/website/src}/utils/string.ts | 0 .../src}/utils/svg-to-png-converter.tsx | 0 .../website/src}/utils/trpc-transformer.ts | 0 .../website/src}/utils/type-helpers.ts | 0 {src => apps/website/src}/utils/units.ts | 0 {styles => apps/website/styles}/global.css | 0 .../website/tailwind.config.js | 0 tsconfig.json => apps/website/tsconfig.json | 5 +- package.json | 156 +- packages/api/package.json | 52 + packages/api/src/context.ts | 26 + packages/api/src/index.ts | 34 + {src/server/api => packages/api/src}/root.ts | 17 +- .../api => packages/api/src}/routers/auth.ts | 21 +- .../api => packages/api/src}/routers/gas.ts | 6 +- .../api => packages/api/src}/routers/me.ts | 12 +- .../api => packages/api/src}/routers/pool.ts | 29 +- .../api/src}/routers/products.ts | 13 +- .../api => packages/api/src}/routers/stats.ts | 2 +- .../api => packages/api/src}/routers/tags.ts | 2 +- .../api/src}/routers/transaction.ts | 2 +- .../api => packages/api/src}/routers/user.ts | 30 +- .../api/src}/routers/voucher.ts | 66 +- {src/server/api => packages/api/src}/trpc.ts | 104 +- .../api/src/utils}/discord.ts | 14 +- packages/api/src/utils/transformer.ts | 14 + packages/api/tsconfig.json | 9 + packages/auth/package.json | 35 + .../styles.ts => packages/auth/src/auth.ts | 0 .../session.ts => packages/auth/src/index.ts | 21 +- packages/auth/tsconfig.json | 9 + packages/contracts/env.ts | 54 + packages/contracts/eslint.config.js | 9 + packages/contracts/package.json | 36 + .../src}/erc20-demurrage-token/contract.ts | 0 .../src}/erc20-giftable-token/contract.ts | 0 .../src}/erc20-token-index/contract.ts | 0 .../contracts/src}/erc20-token-index/index.ts | 20 +- .../src}/eth-accounts-index/contract.ts | 0 .../src}/eth-accounts-index/index.ts | 9 +- .../contracts/src}/eth-faucet/contract.ts | 0 .../contracts/src}/eth-faucet/index.ts | 13 +- packages/contracts/src/index.ts | 14 + .../contracts/src}/limiter-index/contract.ts | 0 .../contracts/src}/limiter/contract.ts | 0 .../contracts/src}/limiter/index.ts | 9 +- .../contracts/src}/period-simple/contract.ts | 0 .../contracts/src}/period-simple/index.ts | 16 +- .../src}/price-index-quote/contract.ts | 0 .../contracts/src}/price-index-quote/index.ts | 11 +- .../contracts/src}/swap-pool/contract.ts | 0 .../contracts/src}/swap-pool/index.ts | 8 +- .../contracts/src}/types.ts | 0 .../contracts/src}/writer.ts | 4 +- packages/contracts/tsconfig.json | 9 + packages/db/env.ts | 31 + packages/db/package.json | 58 + {src/server => packages/db/src}/enums.ts | 0 .../db/db.d.ts => packages/db/src/graph-db.ts | 6 +- {src/server/db => packages/db/src}/index.ts | 16 +- .../db/src/indexer-db.ts | 7 +- {src/server => packages/db/src}/plugins.ts | 0 packages/db/tsconfig.json | 9 + packages/paper-wallet/package.json | 45 + .../paper-wallet/src/connector.ts | 104 +- .../paper-wallet/src}/crypto.ts | 0 .../paper-wallet/src}/eth-url-parser.ts | 6 +- packages/paper-wallet/src/index.ts | 2 + .../paper-wallet/src}/paper-wallet.ts | 40 +- .../paper-wallet/src}/pin-modal/styles.ts | 0 .../paper-wallet/src}/pin-modal/view.ts | 0 .../paper-wallet/src/scan-modal/styles.ts | 0 .../paper-wallet/src}/scan-modal/view.ts | 32 +- .../paper-wallet/src}/utils.ts | 3 +- packages/paper-wallet/tsconfig.json | 11 + packages/reader/package.json | 38 + .../reader => packages/reader/src}/hooks.ts | 0 .../reader => packages/reader/src}/index.tsx | 0 .../reader => packages/reader/src}/styles.ts | 0 .../reader => packages/reader/src}/types.ts | 7 +- .../reader => packages/reader/src}/utils.ts | 2 - packages/reader/tsconfig.json | 9 + packages/shared/dist/celo.d.ts | 10 + packages/shared/dist/celo.d.ts.map | 1 + packages/shared/dist/index.d.ts | 10 + packages/shared/dist/index.d.ts.map | 1 + packages/shared/package.json | 35 + {src => packages/shared/src}/utils/celo.ts | 0 .../shared/src/utils}/custom-wallets.ts | 23 +- .../lib => packages/shared/src/utils}/web3.ts | 4 +- packages/shared/tsconfig.json | 10 + packages/validators/eslint.config.js | 9 + packages/validators/package.json | 42 + packages/validators/src/index.ts | 8 + packages/validators/src/pool/index.ts | 0 packages/validators/src/products/index.ts | 23 + packages/validators/src/user/index.ts | 28 + .../src/vouchers/create}/about-you.ts | 0 .../src/vouchers/create}/expiration.ts | 0 .../validators/src/vouchers/create/index.ts | 27 + .../src/vouchers/create}/name-and-products.ts | 2 +- .../src/vouchers/create}/options.ts | 0 .../create}/sigining-and-publishing.ts | 0 .../src/vouchers/create}/value-and-supply.ts | 0 packages/validators/src/vouchers/index.ts | 33 + packages/validators/tsconfig.json | 9 + pnpm-lock.yaml | 12903 ++++++++++------ pnpm-workspace.yaml | 20 + .../create-voucher-form/schemas/index.ts | 20 - src/contracts/index.tsx | 14 - src/lib/paper-connector/wallet.ts | 19 - src/pages/api/trpc/[trpc].ts | 23 - src/server/api/auth.ts | 9 - tooling/eslint/base.js | 80 + tooling/eslint/nextjs.js | 17 + tooling/eslint/package.json | 33 + tooling/eslint/react.js | 22 + tooling/eslint/tsconfig.json | 9 + tooling/eslint/types.d.ts | 67 + tooling/github/package.json | 3 + tooling/github/setup/action.yml | 17 + tooling/prettier/index.js | 6 + tooling/prettier/package.json | 24 + tooling/prettier/tsconfig.json | 9 + tooling/tailwind/base.ts | 48 + tooling/tailwind/eslint.config.js | 6 + tooling/tailwind/native.ts | 9 + tooling/tailwind/package.json | 31 + tooling/tailwind/tsconfig.json | 9 + tooling/tailwind/web.ts | 40 + tooling/typescript/base.json | 29 + tooling/typescript/internal-package.json | 13 + tooling/typescript/package.json | 8 + turbo.json | 70 + 404 files changed, 10607 insertions(+), 5801 deletions(-) create mode 100644 apps/server/package.json create mode 100644 apps/server/src/config.ts create mode 100644 apps/server/src/server/index.ts create mode 100644 apps/server/src/server/iron-session.ts create mode 100644 apps/server/src/server/server.ts create mode 100644 apps/server/tsconfig.json rename .env.local.example => apps/website/.env.local.example (100%) rename .env.test => apps/website/.env.test (100%) rename .eslintrc.cjs => apps/website/.eslintrc.cjs (100%) rename {__tests__ => apps/website/__tests__}/__mocks__/storage.ts (100%) rename {__tests__ => apps/website/__tests__}/hooks/useDeploy.test.tsx (100%) rename {__tests__ => apps/website/__tests__}/lib/eth-url-parser.test.ts (100%) rename {__tests__ => apps/website/__tests__}/utils/crypto.test.ts (100%) rename {__tests__ => apps/website/__tests__}/utils/dmr-helpers.test.ts (100%) rename {__tests__ => apps/website/__tests__}/utils/paper-wallet.test.ts (100%) rename components.json => apps/website/components.json (100%) rename next-env.d.ts => apps/website/next-env.d.ts (100%) rename next.config.mjs => apps/website/next.config.mjs (84%) create mode 100644 apps/website/package.json rename postcss.config.js => apps/website/postcss.config.js (100%) rename {public => apps/website/public}/android-chrome-192x192.png (100%) rename {public => apps/website/public}/android-chrome-512x512.png (100%) rename {public => apps/website/public}/apple-touch-icon.png (100%) rename {public => apps/website/public}/browserconfig.xml (100%) rename {public => apps/website/public}/favicon-16x16.png (100%) rename {public => apps/website/public}/favicon-32x32.png (100%) rename {public => apps/website/public}/favicon.ico (100%) rename {public => apps/website/public}/logo.svg (100%) rename {public => apps/website/public}/logos/valora.jpg (100%) rename {public => apps/website/public}/marker.svg (100%) rename {public => apps/website/public}/media/aljazeera.png (100%) rename {public => apps/website/public}/media/bbc.png (100%) rename {public => apps/website/public}/media/bloomberg.png (100%) rename {public => apps/website/public}/mstile-150x150.png (100%) rename {public => apps/website/public}/partners/celo.png (100%) rename {public => apps/website/public}/partners/kenya-red-cross.png (100%) rename {public => apps/website/public}/partners/mustardseed.png (100%) rename {public => apps/website/public}/partners/schumacher-center.png (100%) rename {public => apps/website/public}/pools/create-pool.png (100%) rename {public => apps/website/public}/qr/address.png (100%) rename {public => apps/website/public}/qr/private.png (100%) rename {public => apps/website/public}/robots.txt (100%) rename {public => apps/website/public}/safari-pinned-tab.svg (100%) rename {public => apps/website/public}/site.webmanifest (100%) rename {public => apps/website/public}/voucher/basket.png (100%) rename {src => apps/website/src}/assets/fonts/CalSans-SemiBold.ttf (100%) rename {src => apps/website/src}/assets/fonts/CalSans-SemiBold.woff (100%) rename {src => apps/website/src}/assets/fonts/CalSans-SemiBold.woff2 (100%) rename {src => apps/website/src}/assets/fonts/Inter-Bold.ttf (100%) rename {src => apps/website/src}/assets/fonts/Inter-Regular.ttf (100%) rename {src => apps/website/src}/components/address.tsx (83%) rename {src => apps/website/src}/components/alert.tsx (100%) rename {src => apps/website/src}/components/balance.tsx (100%) rename {src => apps/website/src}/components/breadcrumbs.tsx (100%) rename {src => apps/website/src}/components/buttons/connect-button.tsx (100%) rename {src => apps/website/src}/components/cards/card.tsx (100%) rename {src => apps/website/src}/components/cards/statistics-card.tsx (100%) rename {src => apps/website/src}/components/charts/line-chart.tsx (100%) rename {src => apps/website/src}/components/date-picker.tsx (100%) rename {src => apps/website/src}/components/dialogs/are-you-sure.tsx (100%) rename {src => apps/website/src}/components/dialogs/change-sink-dialog.tsx (96%) rename {src => apps/website/src}/components/dialogs/create-paper-wallet.tsx (100%) rename {src => apps/website/src}/components/dialogs/download-dialog.tsx (100%) rename {src => apps/website/src}/components/dialogs/get-address-dialog.tsx (100%) rename {src => apps/website/src}/components/dialogs/mint-to-dialog.tsx (95%) rename {src => apps/website/src}/components/dialogs/receive-dialog.tsx (100%) rename {src => apps/website/src}/components/dialogs/scan-address-dialog.tsx (86%) rename {src => apps/website/src}/components/dialogs/scan-qr-dialog.tsx (87%) rename {src => apps/website/src}/components/dialogs/send-dialog.tsx (100%) rename {src => apps/website/src}/components/file-uploader/cropper.tsx (100%) rename {src => apps/website/src}/components/file-uploader/file-input.tsx (100%) rename {src => apps/website/src}/components/file-uploader/image-crop.tsx (100%) rename {src => apps/website/src}/components/file-uploader/image-upload.tsx (100%) rename {src => apps/website/src}/components/file-uploader/use-file-upload.tsx (100%) rename {src => apps/website/src}/components/file-uploader/webcam-capture.tsx (100%) rename {src => apps/website/src}/components/force-graph/components/fullscreen-button.tsx (100%) rename {src => apps/website/src}/components/force-graph/components/graph-statistics.tsx (100%) rename {src => apps/website/src}/components/force-graph/components/node-label.tsx (100%) rename {src => apps/website/src}/components/force-graph/hooks/useGraphData.tsx (100%) rename {src => apps/website/src}/components/force-graph/index.tsx (100%) rename {src => apps/website/src}/components/force-graph/types.ts (100%) rename {src => apps/website/src}/components/force-graph/utils.ts (91%) rename {src => apps/website/src}/components/forms/fields/address-field.tsx (100%) rename {src => apps/website/src}/components/forms/fields/checkbox-field.tsx (100%) rename {src => apps/website/src}/components/forms/fields/combo-box-field.tsx (100%) rename {src => apps/website/src}/components/forms/fields/date-field.tsx (100%) rename {src => apps/website/src}/components/forms/fields/image-field.tsx (100%) rename {src => apps/website/src}/components/forms/fields/image-upload-field.tsx (100%) rename {src => apps/website/src}/components/forms/fields/input-field.tsx (100%) rename {src => apps/website/src}/components/forms/fields/map-field.tsx (100%) rename {src => apps/website/src}/components/forms/fields/multi-select-field.tsx (100%) rename {src => apps/website/src}/components/forms/fields/radio-field.tsx (100%) rename {src => apps/website/src}/components/forms/fields/select-field.tsx (100%) rename {src => apps/website/src}/components/forms/fields/select-voucher-field.tsx (100%) rename {src => apps/website/src}/components/forms/fields/textarea-field.tsx (100%) rename {src => apps/website/src}/components/forms/fields/type-helper.ts (100%) rename {src => apps/website/src}/components/forms/generate-wallets-form.tsx (100%) rename {src => apps/website/src}/components/forms/paper-wallet-form.tsx (100%) rename {src => apps/website/src}/components/icons.tsx (99%) rename {src => apps/website/src}/components/info-icon.tsx (100%) rename {src => apps/website/src}/components/layout/collapse-menu-button.tsx (100%) rename {src => apps/website/src}/components/layout/content-container.tsx (100%) rename {src => apps/website/src}/components/layout/default-layout.tsx (100%) rename {src => apps/website/src}/components/layout/landing-layout.tsx (100%) rename {src => apps/website/src}/components/layout/landing-nav.tsx (100%) rename {src => apps/website/src}/components/layout/menu-list.ts (100%) rename {src => apps/website/src}/components/layout/menu.tsx (100%) rename {src => apps/website/src}/components/layout/mobile-drawer.tsx (100%) rename {src => apps/website/src}/components/layout/mobile-wallet-bar.tsx (100%) rename {src => apps/website/src}/components/layout/navbar.tsx (100%) rename {src => apps/website/src}/components/layout/sheet-menu.tsx (100%) rename {src => apps/website/src}/components/layout/sidebar-toggle.tsx (100%) rename {src => apps/website/src}/components/layout/sidebar.tsx (100%) rename {src => apps/website/src}/components/layout/site-header.tsx (100%) rename {src => apps/website/src}/components/layout/user-nav.tsx (99%) rename {src => apps/website/src}/components/loading.tsx (100%) rename {src => apps/website/src}/components/map/index.tsx (100%) rename {src => apps/website/src}/components/map/location-map.tsx (100%) rename {src => apps/website/src}/components/modal.tsx (100%) rename {src => apps/website/src}/components/network-icon.tsx (100%) rename {src => apps/website/src}/components/paper/index.tsx (78%) rename {src => apps/website/src}/components/paper/qr-card.tsx (71%) rename {src => apps/website/src}/components/pools/contract-functions.ts (96%) rename {src => apps/website/src}/components/pools/create-pool-status.tsx (100%) rename {src => apps/website/src}/components/pools/forms/create-pool-form.tsx (93%) rename {src => apps/website/src}/components/pools/forms/donate-form.tsx (93%) rename {src => apps/website/src}/components/pools/forms/pool-voucher-form.tsx (100%) rename {src => apps/website/src}/components/pools/forms/swap-form.tsx (93%) rename {src => apps/website/src}/components/pools/forms/update-pool-form.tsx (100%) rename {src => apps/website/src}/components/pools/forms/withdraw-form.tsx (94%) rename {src => apps/website/src}/components/pools/hooks.tsx (100%) rename {src => apps/website/src}/components/pools/pool-details.tsx (100%) rename {src => apps/website/src}/components/pools/pool-list-item.tsx (100%) rename {src => apps/website/src}/components/pools/pool-list.tsx (100%) rename {src => apps/website/src}/components/pools/swap-field.tsx (100%) rename {src => apps/website/src}/components/pools/tables/pool-deposits-table.tsx (94%) rename {src => apps/website/src}/components/pools/tables/pool-transactions-table.tsx (95%) rename {src => apps/website/src}/components/pools/tables/pool-voucher-table.tsx (100%) rename {src => apps/website/src}/components/pools/types.tsx (100%) rename {src => apps/website/src}/components/pools/utils.ts (100%) rename {src => apps/website/src}/components/products/product-form.tsx (100%) rename {src => apps/website/src}/components/products/product-list.tsx (92%) rename {src => apps/website/src}/components/products/products-list-item.tsx (76%) rename {src => apps/website/src}/components/products/schema.ts (91%) rename {src => apps/website/src}/components/qr-code/address-qr-code.tsx (100%) rename {src => apps/website/src}/components/qr-code/private-key-qr-code.tsx (100%) rename {src => apps/website/src}/components/search-input.tsx (100%) rename {src => apps/website/src}/components/tables/infinite-table.tsx (100%) rename {src => apps/website/src}/components/tables/table-column-header.tsx (100%) rename {src => apps/website/src}/components/tables/table-view-options.tsx (100%) rename {src => apps/website/src}/components/tables/table.tsx (100%) rename {src => apps/website/src}/components/tables/transactions-table.tsx (97%) rename {src => apps/website/src}/components/transactions/hash.tsx (84%) rename {src => apps/website/src}/components/transactions/transaction-list.tsx (100%) rename {src => apps/website/src}/components/transactions/transaction-status.tsx (75%) rename {src => apps/website/src}/components/ui/accordion.tsx (100%) rename {src => apps/website/src}/components/ui/alert.tsx (100%) rename {src => apps/website/src}/components/ui/aspect-ratio.tsx (100%) rename {src => apps/website/src}/components/ui/autosize-textarea.tsx (100%) rename {src => apps/website/src}/components/ui/avatar.tsx (100%) rename {src => apps/website/src}/components/ui/badge.tsx (100%) rename {src => apps/website/src}/components/ui/breadcrumb.tsx (100%) rename {src => apps/website/src}/components/ui/button.tsx (100%) rename {src => apps/website/src}/components/ui/calendar.tsx (100%) rename {src => apps/website/src}/components/ui/card.tsx (100%) rename {src => apps/website/src}/components/ui/chart.tsx (100%) rename {src => apps/website/src}/components/ui/checkbox.tsx (100%) rename {src => apps/website/src}/components/ui/collapsible.tsx (100%) rename {src => apps/website/src}/components/ui/command.tsx (100%) rename {src => apps/website/src}/components/ui/dialog.tsx (100%) rename {src => apps/website/src}/components/ui/drawer.tsx (100%) rename {src => apps/website/src}/components/ui/dropdown-menu.tsx (100%) rename {src => apps/website/src}/components/ui/file-uploader.tsx (100%) rename {src => apps/website/src}/components/ui/form.tsx (100%) rename {src => apps/website/src}/components/ui/hover-card.tsx (100%) rename {src => apps/website/src}/components/ui/input.tsx (100%) rename {src => apps/website/src}/components/ui/label.tsx (100%) rename {src => apps/website/src}/components/ui/multi-select.tsx (100%) rename {src => apps/website/src}/components/ui/navigation-menu.tsx (100%) rename {src => apps/website/src}/components/ui/popover.tsx (100%) rename {src => apps/website/src}/components/ui/progress.tsx (100%) rename {src => apps/website/src}/components/ui/radio-group.tsx (100%) rename {src => apps/website/src}/components/ui/scroll-area.tsx (100%) rename {src => apps/website/src}/components/ui/select.tsx (100%) rename {src => apps/website/src}/components/ui/separator.tsx (100%) rename {src => apps/website/src}/components/ui/sheet.tsx (100%) rename {src => apps/website/src}/components/ui/skeleton.tsx (100%) rename {src => apps/website/src}/components/ui/sonner.tsx (100%) rename {src => apps/website/src}/components/ui/stepper.tsx (100%) rename {src => apps/website/src}/components/ui/table.tsx (100%) rename {src => apps/website/src}/components/ui/tabs.tsx (100%) rename {src => apps/website/src}/components/ui/textarea.tsx (100%) rename {src => apps/website/src}/components/ui/toast.tsx (100%) rename {src => apps/website/src}/components/ui/toggle.tsx (100%) rename {src => apps/website/src}/components/ui/tooltip.tsx (100%) rename {src => apps/website/src}/components/ui/use-stepper.tsx (100%) rename {src => apps/website/src}/components/users/dialogs/gas-request-dialog.tsx (89%) rename {src => apps/website/src}/components/users/dialogs/staff-profile-dialog.tsx (91%) rename {src => apps/website/src}/components/users/forms/profile-form.tsx (80%) rename {src => apps/website/src}/components/users/forms/staff-user-search.tsx (100%) rename {src => apps/website/src}/components/users/forms/users-filter-form.tsx (97%) rename {src => apps/website/src}/components/users/staff-gas-status.tsx (97%) rename {src => apps/website/src}/components/users/tables/staff-users-table.tsx (95%) rename {src => apps/website/src}/components/users/user-gas-status.tsx (100%) rename {src => apps/website/src}/components/voucher/dialog/update-voucher-dialog.tsx (81%) rename {src => apps/website/src}/components/voucher/forms/create-voucher-form/controls.tsx (100%) rename {src => apps/website/src}/components/voucher/forms/create-voucher-form/index.tsx (82%) rename {src => apps/website/src}/components/voucher/forms/create-voucher-form/provider.tsx (83%) rename {src => apps/website/src}/components/voucher/forms/create-voucher-form/stepper.tsx (100%) rename {src => apps/website/src}/components/voucher/forms/create-voucher-form/steps/about-you.tsx (96%) rename {src => apps/website/src}/components/voucher/forms/create-voucher-form/steps/expiration.tsx (98%) rename {src => apps/website/src}/components/voucher/forms/create-voucher-form/steps/introduction.tsx (100%) rename {src => apps/website/src}/components/voucher/forms/create-voucher-form/steps/name-and-products.tsx (99%) rename {src => apps/website/src}/components/voucher/forms/create-voucher-form/steps/options.tsx (94%) rename {src => apps/website/src}/components/voucher/forms/create-voucher-form/steps/sigining-and-publishing.tsx (96%) rename {src => apps/website/src}/components/voucher/forms/create-voucher-form/steps/value-and-supply.tsx (98%) rename {src => apps/website/src}/components/voucher/forms/create-voucher-form/utils.tsx (100%) rename {src => apps/website/src}/components/voucher/forms/update-voucher-form.tsx (96%) rename {src => apps/website/src}/components/voucher/hooks.ts (100%) rename {src => apps/website/src}/components/voucher/voucher-contract-functions.tsx (100%) rename {src => apps/website/src}/components/voucher/voucher-declaration.tsx (98%) rename {src => apps/website/src}/components/voucher/voucher-holders-table.tsx (100%) rename {src => apps/website/src}/components/voucher/voucher-info.tsx (91%) rename {src => apps/website/src}/components/voucher/voucher-list-item.tsx (100%) rename {src => apps/website/src}/components/voucher/voucher-list.tsx (85%) rename {src => apps/website/src}/components/voucher/voucher-name.tsx (100%) rename {src => apps/website/src}/config/site.tsx (100%) rename {src => apps/website/src}/env.ts (100%) rename {src => apps/website/src}/hooks/use-sidebar-toggle.tsx (100%) rename {src => apps/website/src}/hooks/use-store.tsx (100%) rename {src => apps/website/src}/hooks/useAuth.tsx (95%) rename {src => apps/website/src}/hooks/useDebounce.tsx (100%) rename {src => apps/website/src}/hooks/useIsMounted.tsx (100%) rename {src => apps/website/src}/hooks/useIsOwner.ts (84%) rename {src => apps/website/src}/hooks/useIsWriter.ts (86%) rename {src => apps/website/src}/hooks/useLocalStorage.ts (100%) rename {src => apps/website/src}/hooks/useMediaQuery.ts (100%) rename {src => apps/website/src}/hooks/useSession.tsx (80%) rename {src => apps/website/src}/hooks/useVoucherDeploy.ts (86%) rename {src => apps/website/src}/hooks/useWebShare.tsx (100%) rename {src => apps/website/src}/lib/fonts.ts (100%) rename {src => apps/website/src}/lib/geocoder.ts (100%) rename {src => apps/website/src}/lib/providers.tsx (95%) rename {src => apps/website/src}/lib/utils.ts (100%) rename {src => apps/website/src}/pages/404.tsx (100%) rename {src => apps/website/src}/pages/_app.tsx (100%) rename {src => apps/website/src}/pages/_document.tsx (100%) rename {src => apps/website/src}/pages/dashboard/index.tsx (92%) rename {src => apps/website/src}/pages/index.tsx (72%) rename {src => apps/website/src}/pages/paper/generate.tsx (100%) rename {src => apps/website/src}/pages/pools/[address].tsx (88%) rename {src => apps/website/src}/pages/pools/create.tsx (100%) rename {src => apps/website/src}/pages/pools/index.tsx (100%) rename {src => apps/website/src}/pages/staff/index.tsx (80%) rename {src => apps/website/src}/pages/terms-and-conditions.tsx (100%) rename {src => apps/website/src}/pages/vouchers/[address]/index.tsx (83%) rename {src => apps/website/src}/pages/vouchers/create.tsx (100%) rename {src => apps/website/src}/pages/vouchers/index.tsx (89%) rename {src => apps/website/src}/pages/wallet/explore.tsx (85%) rename {src => apps/website/src}/pages/wallet/index.tsx (83%) rename {src => apps/website/src}/pages/wallet/profile.tsx (77%) rename {src => apps/website/src}/types/crypto.d.ts (100%) rename {src => apps/website/src}/types/next-env.d.ts (100%) rename {src => apps/website/src}/utils/api.ts (73%) rename {src => apps/website/src}/utils/debounce.ts (100%) rename {src => apps/website/src}/utils/dmr-helpers.ts (100%) rename {src => apps/website/src}/utils/download.ts (100%) rename {src => apps/website/src}/utils/logrocket.ts (100%) rename {src => apps/website/src}/utils/number.ts (100%) rename {src => apps/website/src}/utils/string.ts (100%) rename {src => apps/website/src}/utils/svg-to-png-converter.tsx (100%) rename {src => apps/website/src}/utils/trpc-transformer.ts (100%) rename {src => apps/website/src}/utils/type-helpers.ts (100%) rename {src => apps/website/src}/utils/units.ts (100%) rename {styles => apps/website/styles}/global.css (100%) rename tailwind.config.js => apps/website/tailwind.config.js (100%) rename tsconfig.json => apps/website/tsconfig.json (83%) create mode 100644 packages/api/package.json create mode 100644 packages/api/src/context.ts create mode 100644 packages/api/src/index.ts rename {src/server/api => packages/api/src}/root.ts (67%) rename {src/server/api => packages/api/src}/routers/auth.ts (94%) rename {src/server/api => packages/api/src}/routers/gas.ts (95%) rename {src/server/api => packages/api/src}/routers/me.ts (94%) rename {src/server/api => packages/api/src}/routers/pool.ts (92%) rename {src/server/api => packages/api/src}/routers/products.ts (97%) rename {src/server/api => packages/api/src}/routers/stats.ts (99%) rename {src/server/api => packages/api/src}/routers/tags.ts (95%) rename {src/server/api => packages/api/src}/routers/transaction.ts (94%) rename {src/server/api => packages/api/src}/routers/user.ts (91%) rename {src/server/api => packages/api/src}/routers/voucher.ts (87%) rename {src/server/api => packages/api/src}/trpc.ts (50%) rename {src/server => packages/api/src/utils}/discord.ts (94%) create mode 100644 packages/api/src/utils/transformer.ts create mode 100644 packages/api/tsconfig.json create mode 100644 packages/auth/package.json rename src/lib/paper-connector/scan-modal/styles.ts => packages/auth/src/auth.ts (100%) rename src/lib/session.ts => packages/auth/src/index.ts (60%) create mode 100644 packages/auth/tsconfig.json create mode 100644 packages/contracts/env.ts create mode 100644 packages/contracts/eslint.config.js create mode 100644 packages/contracts/package.json rename {src/contracts => packages/contracts/src}/erc20-demurrage-token/contract.ts (100%) rename {src/contracts => packages/contracts/src}/erc20-giftable-token/contract.ts (100%) rename {src/contracts => packages/contracts/src}/erc20-token-index/contract.ts (100%) rename {src/contracts => packages/contracts/src}/erc20-token-index/index.ts (93%) rename {src/contracts => packages/contracts/src}/eth-accounts-index/contract.ts (100%) rename {src/contracts => packages/contracts/src}/eth-accounts-index/index.ts (85%) rename {src/contracts => packages/contracts/src}/eth-faucet/contract.ts (100%) rename {src/contracts => packages/contracts/src}/eth-faucet/index.ts (90%) create mode 100644 packages/contracts/src/index.ts rename {src/contracts => packages/contracts/src}/limiter-index/contract.ts (100%) rename {src/contracts => packages/contracts/src}/limiter/contract.ts (100%) rename {src/contracts => packages/contracts/src}/limiter/index.ts (94%) rename {src/contracts => packages/contracts/src}/period-simple/contract.ts (100%) rename {src/contracts => packages/contracts/src}/period-simple/index.ts (63%) rename {src/contracts => packages/contracts/src}/price-index-quote/contract.ts (100%) rename {src/contracts => packages/contracts/src}/price-index-quote/index.ts (94%) rename {src/contracts => packages/contracts/src}/swap-pool/contract.ts (100%) rename {src/contracts => packages/contracts/src}/swap-pool/index.ts (94%) rename {src/contracts => packages/contracts/src}/types.ts (100%) rename {src/contracts => packages/contracts/src}/writer.ts (83%) create mode 100644 packages/contracts/tsconfig.json create mode 100644 packages/db/env.ts create mode 100644 packages/db/package.json rename {src/server => packages/db/src}/enums.ts (100%) rename src/server/db/db.d.ts => packages/db/src/graph-db.ts (98%) rename {src/server/db => packages/db/src}/index.ts (71%) rename src/server/db/indexer-db.d.ts => packages/db/src/indexer-db.ts (93%) rename {src/server => packages/db/src}/plugins.ts (100%) create mode 100644 packages/db/tsconfig.json create mode 100644 packages/paper-wallet/package.json rename src/lib/paper-connector/paper_connector.ts => packages/paper-wallet/src/connector.ts (72%) rename {src/utils => packages/paper-wallet/src}/crypto.ts (100%) rename {src/lib => packages/paper-wallet/src}/eth-url-parser.ts (97%) create mode 100644 packages/paper-wallet/src/index.ts rename {src/utils => packages/paper-wallet/src}/paper-wallet.ts (92%) rename {src/lib/paper-connector => packages/paper-wallet/src}/pin-modal/styles.ts (100%) rename {src/lib/paper-connector => packages/paper-wallet/src}/pin-modal/view.ts (100%) create mode 100644 packages/paper-wallet/src/scan-modal/styles.ts rename {src/lib/paper-connector => packages/paper-wallet/src}/scan-modal/view.ts (89%) rename {src/lib/paper-connector => packages/paper-wallet/src}/utils.ts (80%) create mode 100644 packages/paper-wallet/tsconfig.json create mode 100644 packages/reader/package.json rename {src/components/qr-code/reader => packages/reader/src}/hooks.ts (100%) rename {src/components/qr-code/reader => packages/reader/src}/index.tsx (100%) rename {src/components/qr-code/reader => packages/reader/src}/styles.ts (100%) rename {src/components/qr-code/reader => packages/reader/src}/types.ts (91%) rename {src/components/qr-code/reader => packages/reader/src}/utils.ts (99%) create mode 100644 packages/reader/tsconfig.json create mode 100644 packages/shared/dist/celo.d.ts create mode 100644 packages/shared/dist/celo.d.ts.map create mode 100644 packages/shared/dist/index.d.ts create mode 100644 packages/shared/dist/index.d.ts.map create mode 100644 packages/shared/package.json rename {src => packages/shared/src}/utils/celo.ts (100%) rename {src/lib => packages/shared/src/utils}/custom-wallets.ts (63%) rename {src/lib => packages/shared/src/utils}/web3.ts (95%) create mode 100644 packages/shared/tsconfig.json create mode 100644 packages/validators/eslint.config.js create mode 100644 packages/validators/package.json create mode 100644 packages/validators/src/index.ts create mode 100644 packages/validators/src/pool/index.ts create mode 100644 packages/validators/src/products/index.ts create mode 100644 packages/validators/src/user/index.ts rename {src/components/voucher/forms/create-voucher-form/schemas => packages/validators/src/vouchers/create}/about-you.ts (100%) rename {src/components/voucher/forms/create-voucher-form/schemas => packages/validators/src/vouchers/create}/expiration.ts (100%) create mode 100644 packages/validators/src/vouchers/create/index.ts rename {src/components/voucher/forms/create-voucher-form/schemas => packages/validators/src/vouchers/create}/name-and-products.ts (96%) rename {src/components/voucher/forms/create-voucher-form/schemas => packages/validators/src/vouchers/create}/options.ts (100%) rename {src/components/voucher/forms/create-voucher-form/schemas => packages/validators/src/vouchers/create}/sigining-and-publishing.ts (100%) rename {src/components/voucher/forms/create-voucher-form/schemas => packages/validators/src/vouchers/create}/value-and-supply.ts (100%) create mode 100644 packages/validators/src/vouchers/index.ts create mode 100644 packages/validators/tsconfig.json create mode 100644 pnpm-workspace.yaml delete mode 100644 src/components/voucher/forms/create-voucher-form/schemas/index.ts delete mode 100644 src/contracts/index.tsx delete mode 100644 src/lib/paper-connector/wallet.ts delete mode 100644 src/pages/api/trpc/[trpc].ts delete mode 100644 src/server/api/auth.ts create mode 100644 tooling/eslint/base.js create mode 100644 tooling/eslint/nextjs.js create mode 100644 tooling/eslint/package.json create mode 100644 tooling/eslint/react.js create mode 100644 tooling/eslint/tsconfig.json create mode 100644 tooling/eslint/types.d.ts create mode 100644 tooling/github/package.json create mode 100644 tooling/github/setup/action.yml create mode 100644 tooling/prettier/index.js create mode 100644 tooling/prettier/package.json create mode 100644 tooling/prettier/tsconfig.json create mode 100644 tooling/tailwind/base.ts create mode 100644 tooling/tailwind/eslint.config.js create mode 100644 tooling/tailwind/native.ts create mode 100644 tooling/tailwind/package.json create mode 100644 tooling/tailwind/tsconfig.json create mode 100644 tooling/tailwind/web.ts create mode 100644 tooling/typescript/base.json create mode 100644 tooling/typescript/internal-package.json create mode 100644 tooling/typescript/package.json create mode 100644 turbo.json diff --git a/.gitignore b/.gitignore index 6a26e97..b3bdfcd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies -/node_modules +node_modules /.pnp .pnp.js @@ -9,7 +9,7 @@ /coverage # next.js -/.next/ +.next /out/ # production @@ -43,4 +43,57 @@ export.sh # Dev snapshots -dev/*.bz2 \ No newline at end of file +dev/*.bz2 + +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +node_modules +.pnp +.pnp.js + +# testing +coverage + +# next.js +.next/ +out/ +next-env.d.ts + +# nitro +.nitro/ +.output/ + +# expo +.expo/ +expo-env.d.ts +apps/expo/.gitignore +apps/expo/ios +apps/expo/android + +# production +build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +dist/ + +# turbo +.turbo diff --git a/apps/server/package.json b/apps/server/package.json new file mode 100644 index 0000000..a3a8f25 --- /dev/null +++ b/apps/server/package.json @@ -0,0 +1,52 @@ +{ + "name": "examples-fastify-server", + "private": true, + "type": "module", + "scripts": { + "build": "esbuild src/server/index.ts src/client/index.ts --bundle --packages=external --platform=node --format=esm --outdir=dist --sourcemap", + "dev": "dotenv -e ../../.env -- tsx watch src/server", + "lint": "eslint --cache --ext \".js,.ts,.tsx\" src", + "type-check": "tsc", + "start:server": "node dist/server/index.js", + "start": "run-p start:* --print-label", + "test-dev": "start-server-and-test 'tsx src/server' http-get://localhost:2022 'tsx src/client'", + "test-start": "start-server-and-test 'node dist/server' http-get://localhost:2022 'node dist/client'" + }, + "dependencies": { + "@grassroots/api": "workspace:*", + "@grassroots/auth": "workspace:*", + "@grassroots/contracts": "workspace:*", + "@grassroots/db": "workspace:*", + "@grassroots/shared": "workspace:*", + "@grassroots/validators": "workspace:*", + "@trpc/client": "11.0.0-rc.441", + "@trpc/server": "11.0.0-rc.441", + "cors": "^2.8.5", + "express": "^4.17.1", + "iron-session": "^8.0.1", + "kysely": "^0.27.3", + "superjson": "2.2.1", + "tslib": "^2.5.0", + "viem": "catalog:", + "ws": "^8.0.0", + "zod": "catalog:" + }, + "devDependencies": { + "@grassroots/tsconfig": "workspace:*", + "@types/cors": "^2.8.17", + "@types/express": "^4.17.17", + "@types/node": "catalog:", + "@types/ws": "^8.2.0", + "dotenv-cli": "^7.4.2", + "esbuild": "^0.17.10", + "eslint": "^8.57.0", + "npm-run-all": "^4.1.5", + "start-server-and-test": "^1.12.0", + "tsx": "^4.0.0", + "typescript": "^5.4.5", + "wait-port": "^1.0.1" + }, + "publishConfig": { + "access": "restricted" + } +} diff --git a/apps/server/src/config.ts b/apps/server/src/config.ts new file mode 100644 index 0000000..58052a0 --- /dev/null +++ b/apps/server/src/config.ts @@ -0,0 +1,7 @@ +import type { ServerOptions } from './server/server'; + +export const serverConfig: ServerOptions = { + dev: false, + port: 2022, + prefix: '/trpc', +}; \ No newline at end of file diff --git a/apps/server/src/server/index.ts b/apps/server/src/server/index.ts new file mode 100644 index 0000000..e22ecd2 --- /dev/null +++ b/apps/server/src/server/index.ts @@ -0,0 +1,6 @@ +import { serverConfig } from '../config'; +import { createServer } from './server'; + +const server = createServer(serverConfig); + +void server.start(); \ No newline at end of file diff --git a/apps/server/src/server/iron-session.ts b/apps/server/src/server/iron-session.ts new file mode 100644 index 0000000..49dab9d --- /dev/null +++ b/apps/server/src/server/iron-session.ts @@ -0,0 +1,20 @@ +import type { NextFunction, Request, Response } from "express"; +import type { IronSession, SessionOptions } from "iron-session"; +import { Session } from "@grassroots/auth"; +import { getIronSession } from "iron-session"; + +declare module "http" { + interface IncomingMessage { + session: IronSession | null; + } +} + +// middleware +export function ironSession( + sessionOptions: SessionOptions, +): (req: Request, res: Response, next: NextFunction) => Promise { + return async function ironSessionMiddleware(req, res, next) { + req.session = await getIronSession(req, res, sessionOptions); + next(); + }; +} diff --git a/apps/server/src/server/server.ts b/apps/server/src/server/server.ts new file mode 100644 index 0000000..32fa8b6 --- /dev/null +++ b/apps/server/src/server/server.ts @@ -0,0 +1,61 @@ +import type { Server } from "http"; +import { appRouter, createContext } from "@grassroots/api"; +import { sessionOptions } from "@grassroots/auth"; +import * as trpcExpress from "@trpc/server/adapters/express"; +import cors from "cors"; +import express from "express"; + +import { ironSession } from "./iron-session"; + +export interface ServerOptions { + dev?: boolean; + port?: number; + prefix?: string; +} +// express implementation + +let server: Server; + +export function createServer(opts: ServerOptions) { + const dev = opts.dev ?? true; + const port = opts.port ?? 3000; + const prefix = opts.prefix ?? "/trpc"; + const app = express(); + + app.use( + cors({ + origin: "http://localhost:3000", + credentials: true, + }), + ); + app.use(ironSession(sessionOptions)); + app.use( + "/trpc", + trpcExpress.createExpressMiddleware({ + router: appRouter, + createContext, + }), + ); + + app.get("/", async () => { + return { hello: "wait-on 💨" }; + }); + + const start = async () => { + try { + server = app.listen({ port }); + console.log("listening on port", port); + } catch (err) { + console.error(err); + process.exit(1); + } + }; + const stop = async () => { + if (!server) { + console.error("Server not running"); + process.exit(1); + } + server.close(); + }; + return { server, start, stop }; +} diff --git a/apps/server/tsconfig.json b/apps/server/tsconfig.json new file mode 100644 index 0000000..544b7fd --- /dev/null +++ b/apps/server/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "@grassroots/tsconfig/base.json", + "compilerOptions": { + "lib": ["es2022"], + "baseUrl": ".", + "paths": { + "~/*": ["./src/*"] + }, + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json", + "module": "esnext" + }, + "include": [ + ".", + "../../packages/api/src/context.ts", + "../../packages/auth/src/auth.ts" + ], + "exclude": ["node_modules"] +} diff --git a/.env.local.example b/apps/website/.env.local.example similarity index 100% rename from .env.local.example rename to apps/website/.env.local.example diff --git a/.env.test b/apps/website/.env.test similarity index 100% rename from .env.test rename to apps/website/.env.test diff --git a/.eslintrc.cjs b/apps/website/.eslintrc.cjs similarity index 100% rename from .eslintrc.cjs rename to apps/website/.eslintrc.cjs diff --git a/__tests__/__mocks__/storage.ts b/apps/website/__tests__/__mocks__/storage.ts similarity index 100% rename from __tests__/__mocks__/storage.ts rename to apps/website/__tests__/__mocks__/storage.ts diff --git a/__tests__/hooks/useDeploy.test.tsx b/apps/website/__tests__/hooks/useDeploy.test.tsx similarity index 100% rename from __tests__/hooks/useDeploy.test.tsx rename to apps/website/__tests__/hooks/useDeploy.test.tsx diff --git a/__tests__/lib/eth-url-parser.test.ts b/apps/website/__tests__/lib/eth-url-parser.test.ts similarity index 100% rename from __tests__/lib/eth-url-parser.test.ts rename to apps/website/__tests__/lib/eth-url-parser.test.ts diff --git a/__tests__/utils/crypto.test.ts b/apps/website/__tests__/utils/crypto.test.ts similarity index 100% rename from __tests__/utils/crypto.test.ts rename to apps/website/__tests__/utils/crypto.test.ts diff --git a/__tests__/utils/dmr-helpers.test.ts b/apps/website/__tests__/utils/dmr-helpers.test.ts similarity index 100% rename from __tests__/utils/dmr-helpers.test.ts rename to apps/website/__tests__/utils/dmr-helpers.test.ts diff --git a/__tests__/utils/paper-wallet.test.ts b/apps/website/__tests__/utils/paper-wallet.test.ts similarity index 100% rename from __tests__/utils/paper-wallet.test.ts rename to apps/website/__tests__/utils/paper-wallet.test.ts diff --git a/components.json b/apps/website/components.json similarity index 100% rename from components.json rename to apps/website/components.json diff --git a/next-env.d.ts b/apps/website/next-env.d.ts similarity index 100% rename from next-env.d.ts rename to apps/website/next-env.d.ts diff --git a/next.config.mjs b/apps/website/next.config.mjs similarity index 84% rename from next.config.mjs rename to apps/website/next.config.mjs index c954772..60fbcb9 100644 --- a/next.config.mjs +++ b/apps/website/next.config.mjs @@ -2,13 +2,13 @@ * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful * for Docker builds. */ +import withBundleAnalyzer from "@next/bundle-analyzer"; import createJiti from "jiti"; + const jiti = createJiti(new URL(import.meta.url).pathname); jiti("./src/env"); -import withBundleAnalyzer from "@next/bundle-analyzer"; - const bundleAnalyzer = withBundleAnalyzer({ enabled: process.env.ANALYZE === "true", }); @@ -17,8 +17,18 @@ const config = { reactStrictMode: true, webpack: (config) => { config.resolve.fallback = { fs: false, net: false, tls: false }; + config.module.rules.push({ + test: /\.node/, + use: 'node-loader' + }) return config; }, + transpilePackages: [ + "@grassroots/paper-wallet", + "@grassroots/shared", + "@grassroots/contracts", + "@grassroots/auth", + ], async redirects() { return [ // Basic redirect diff --git a/apps/website/package.json b/apps/website/package.json new file mode 100644 index 0000000..7b390b0 --- /dev/null +++ b/apps/website/package.json @@ -0,0 +1,148 @@ +{ + "name": "sarafu-network", + "description": "Sarafu Network is the premier dApp for interacting with CAV's (Community Asset Vouchers)", + "homepage": "https://github.com/owner/project#readme", + "version": "0.0.35", + "sideEffects": false, + "license": "AGPL-3.0", + "engines": { + "node": ">=18" + }, + "scripts": { + "dev": "dotenv -e ../../.env -- next dev", + "build": "dotenv -e ../../.env -- next build", + "start": "next start", + "lint": "next lint", + "analyze": "ANALYZE=true next build", + "test": "NODE_ENV=test vitest" + }, + "dependencies": { + "@grassroots/api": "workspace:*", + "@grassroots/auth": "workspace:*", + "@grassroots/contracts": "workspace:*", + "@grassroots/db": "workspace:*", + "@grassroots/paper-wallet": "workspace:*", + "@grassroots/reader": "workspace:*", + "@grassroots/shared": "workspace:*", + "@grassroots/validators": "workspace:*", + "@hookform/resolvers": "^3.3.4", + "@noble/curves": "^1.4.0", + "@radix-ui/react-accordion": "^1.1.2", + "@radix-ui/react-aspect-ratio": "^1.1.0", + "@radix-ui/react-avatar": "^1.0.4", + "@radix-ui/react-checkbox": "^1.0.4", + "@radix-ui/react-collapsible": "^1.0.3", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-hover-card": "^1.0.7", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-label": "^2.0.2", + "@radix-ui/react-navigation-menu": "^1.1.4", + "@radix-ui/react-popover": "^1.0.7", + "@radix-ui/react-progress": "^1.1.0", + "@radix-ui/react-radio-group": "^1.1.3", + "@radix-ui/react-scroll-area": "^1.0.5", + "@radix-ui/react-select": "^2.0.0", + "@radix-ui/react-separator": "^1.0.3", + "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-tabs": "^1.0.4", + "@radix-ui/react-toast": "^1.1.5", + "@radix-ui/react-toggle": "^1.0.3", + "@radix-ui/react-tooltip": "^1.0.7", + "@rainbow-me/rainbowkit": "2.1.1", + "@repeaterjs/react-hooks": "^0.1.1", + "@t3-oss/env-nextjs": "catalog:", + "@tanstack/query-core": "^5.40.0", + "@tanstack/react-query": "^5.40.0", + "@tanstack/react-query-devtools": "^5.40.0", + "@tanstack/react-table": "^8.17.3", + "@tanstack/react-virtual": "^3.5.0", + "@trpc/client": "11.0.0-rc.441", + "@trpc/next": "11.0.0-rc.441", + "@trpc/react-query": "11.0.0-rc.441", + "@trpc/server": "11.0.0-rc.441", + "@wagmi/chains": "^1.8.0", + "@wagmi/core": "^2.10.4", + "@zxing/browser": "^0.1.5", + "@zxing/library": "^0.21.0", + "abitype": "^1.0.2", + "autoprefixer": "10.4.19", + "bignumber.js": "^9.1.2", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "cmdk": "^0.2.1", + "d3-array": "^3.2.4", + "d3-scale": "^3.3.0", + "date-fns": "^3.6.0", + "decimal.js": "^10.4.3", + "html-to-image": "^1.11.11", + "iron-session": "^8.0.1", + "kysely": "^0.27.3", + "leaflet": "^1.9.4", + "leaflet-geosearch": "^3.11.1", + "lightweight-charts": "^4.1.4", + "logrocket": "^8.1.0", + "lucide-react": "^0.379.0", + "next": "^14.2.3", + "next-themes": "^0.3.0", + "pg": "^8.11.5", + "postcss": "8.4.38", + "postcss-import": "^16.1.0", + "react": "catalog:react18", + "react-day-picker": "^8.10.1", + "react-dom": "catalog:react18", + "react-dropzone": "^14.2.3", + "react-force-graph-2d": "^1.25.5", + "react-hook-form": "^7.51.5", + "react-image-crop": "^11.0.5", + "react-leaflet": "^4.2.1", + "react-qr-code": "^2.0.13", + "react-to-print": "^2.15.1", + "react-webcam": "^7.2.0", + "recharts": "^2.12.7", + "sonner": "^1.4.41", + "superjson": "2.2.1", + "tailwind-merge": "^2.3.0", + "tailwindcss": "3.4.3", + "tailwindcss-animate": "^1.0.7", + "vaul": "^0.9.1", + "viem": "catalog:", + "wagmi": "^2.9.7", + "zod": "^3.23.8", + "zustand": "^4.5.2" + }, + "devDependencies": { + "@biomejs/biome": "1.7.3", + "@next/bundle-analyzer": "^14.2.3", + "@testing-library/jest-dom": "6.4.5", + "@testing-library/react": "14.2.1", + "@testing-library/user-event": "14.5.2", + "@types/d3-array": "^3.2.1", + "@types/d3-force": "^3.0.9", + "@types/d3-scale": "^3", + "@types/eslint": "^8.56.10", + "@types/leaflet": "^1.9.12", + "@types/logrocket-react": "^3.0.3", + "@types/node": "catalog:", + "@types/pg": "^8.11.6", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@typescript-eslint/eslint-plugin": "^7.11.0", + "@typescript-eslint/parser": "^7.11.0", + "@vitejs/plugin-react": "^4.3.0", + "@wagmi/cli": "^2.1.8", + "dotenv-cli": "^7.4.2", + "eslint": "^8.57.0", + "eslint-config-next": "^14.2.3", + "happy-dom": "^14.11.2", + "jiti": "^1.21.0", + "kysely-codegen": "^0.15.0", + "node-loader": "^2.0.0", + "pino-pretty": "^11.2.2", + "typescript": "^5.4.5", + "vite-tsconfig-paths": "^4.3.2", + "vitest": "^1.6.0", + "yargs": "^17.7.2", + "zlib-sync": "^0.1.9" + } +} diff --git a/postcss.config.js b/apps/website/postcss.config.js similarity index 100% rename from postcss.config.js rename to apps/website/postcss.config.js diff --git a/public/android-chrome-192x192.png b/apps/website/public/android-chrome-192x192.png similarity index 100% rename from public/android-chrome-192x192.png rename to apps/website/public/android-chrome-192x192.png diff --git a/public/android-chrome-512x512.png b/apps/website/public/android-chrome-512x512.png similarity index 100% rename from public/android-chrome-512x512.png rename to apps/website/public/android-chrome-512x512.png diff --git a/public/apple-touch-icon.png b/apps/website/public/apple-touch-icon.png similarity index 100% rename from public/apple-touch-icon.png rename to apps/website/public/apple-touch-icon.png diff --git a/public/browserconfig.xml b/apps/website/public/browserconfig.xml similarity index 100% rename from public/browserconfig.xml rename to apps/website/public/browserconfig.xml diff --git a/public/favicon-16x16.png b/apps/website/public/favicon-16x16.png similarity index 100% rename from public/favicon-16x16.png rename to apps/website/public/favicon-16x16.png diff --git a/public/favicon-32x32.png b/apps/website/public/favicon-32x32.png similarity index 100% rename from public/favicon-32x32.png rename to apps/website/public/favicon-32x32.png diff --git a/public/favicon.ico b/apps/website/public/favicon.ico similarity index 100% rename from public/favicon.ico rename to apps/website/public/favicon.ico diff --git a/public/logo.svg b/apps/website/public/logo.svg similarity index 100% rename from public/logo.svg rename to apps/website/public/logo.svg diff --git a/public/logos/valora.jpg b/apps/website/public/logos/valora.jpg similarity index 100% rename from public/logos/valora.jpg rename to apps/website/public/logos/valora.jpg diff --git a/public/marker.svg b/apps/website/public/marker.svg similarity index 100% rename from public/marker.svg rename to apps/website/public/marker.svg diff --git a/public/media/aljazeera.png b/apps/website/public/media/aljazeera.png similarity index 100% rename from public/media/aljazeera.png rename to apps/website/public/media/aljazeera.png diff --git a/public/media/bbc.png b/apps/website/public/media/bbc.png similarity index 100% rename from public/media/bbc.png rename to apps/website/public/media/bbc.png diff --git a/public/media/bloomberg.png b/apps/website/public/media/bloomberg.png similarity index 100% rename from public/media/bloomberg.png rename to apps/website/public/media/bloomberg.png diff --git a/public/mstile-150x150.png b/apps/website/public/mstile-150x150.png similarity index 100% rename from public/mstile-150x150.png rename to apps/website/public/mstile-150x150.png diff --git a/public/partners/celo.png b/apps/website/public/partners/celo.png similarity index 100% rename from public/partners/celo.png rename to apps/website/public/partners/celo.png diff --git a/public/partners/kenya-red-cross.png b/apps/website/public/partners/kenya-red-cross.png similarity index 100% rename from public/partners/kenya-red-cross.png rename to apps/website/public/partners/kenya-red-cross.png diff --git a/public/partners/mustardseed.png b/apps/website/public/partners/mustardseed.png similarity index 100% rename from public/partners/mustardseed.png rename to apps/website/public/partners/mustardseed.png diff --git a/public/partners/schumacher-center.png b/apps/website/public/partners/schumacher-center.png similarity index 100% rename from public/partners/schumacher-center.png rename to apps/website/public/partners/schumacher-center.png diff --git a/public/pools/create-pool.png b/apps/website/public/pools/create-pool.png similarity index 100% rename from public/pools/create-pool.png rename to apps/website/public/pools/create-pool.png diff --git a/public/qr/address.png b/apps/website/public/qr/address.png similarity index 100% rename from public/qr/address.png rename to apps/website/public/qr/address.png diff --git a/public/qr/private.png b/apps/website/public/qr/private.png similarity index 100% rename from public/qr/private.png rename to apps/website/public/qr/private.png diff --git a/public/robots.txt b/apps/website/public/robots.txt similarity index 100% rename from public/robots.txt rename to apps/website/public/robots.txt diff --git a/public/safari-pinned-tab.svg b/apps/website/public/safari-pinned-tab.svg similarity index 100% rename from public/safari-pinned-tab.svg rename to apps/website/public/safari-pinned-tab.svg diff --git a/public/site.webmanifest b/apps/website/public/site.webmanifest similarity index 100% rename from public/site.webmanifest rename to apps/website/public/site.webmanifest diff --git a/public/voucher/basket.png b/apps/website/public/voucher/basket.png similarity index 100% rename from public/voucher/basket.png rename to apps/website/public/voucher/basket.png diff --git a/src/assets/fonts/CalSans-SemiBold.ttf b/apps/website/src/assets/fonts/CalSans-SemiBold.ttf similarity index 100% rename from src/assets/fonts/CalSans-SemiBold.ttf rename to apps/website/src/assets/fonts/CalSans-SemiBold.ttf diff --git a/src/assets/fonts/CalSans-SemiBold.woff b/apps/website/src/assets/fonts/CalSans-SemiBold.woff similarity index 100% rename from src/assets/fonts/CalSans-SemiBold.woff rename to apps/website/src/assets/fonts/CalSans-SemiBold.woff diff --git a/src/assets/fonts/CalSans-SemiBold.woff2 b/apps/website/src/assets/fonts/CalSans-SemiBold.woff2 similarity index 100% rename from src/assets/fonts/CalSans-SemiBold.woff2 rename to apps/website/src/assets/fonts/CalSans-SemiBold.woff2 diff --git a/src/assets/fonts/Inter-Bold.ttf b/apps/website/src/assets/fonts/Inter-Bold.ttf similarity index 100% rename from src/assets/fonts/Inter-Bold.ttf rename to apps/website/src/assets/fonts/Inter-Bold.ttf diff --git a/src/assets/fonts/Inter-Regular.ttf b/apps/website/src/assets/fonts/Inter-Regular.ttf similarity index 100% rename from src/assets/fonts/Inter-Regular.ttf rename to apps/website/src/assets/fonts/Inter-Regular.ttf diff --git a/src/components/address.tsx b/apps/website/src/components/address.tsx similarity index 83% rename from src/components/address.tsx rename to apps/website/src/components/address.tsx index d4d0fcd..99aba53 100644 --- a/src/components/address.tsx +++ b/apps/website/src/components/address.tsx @@ -1,6 +1,7 @@ import Link from "next/link"; +import { celoscanUrl } from "@grassroots/shared/utils/celo"; + import { useBreakpoint } from "~/hooks/useMediaQuery"; -import { celoscanUrl } from "~/utils/celo"; import { truncateEthAddress } from "~/utils/dmr-helpers"; interface IAddressProps { @@ -13,7 +14,7 @@ interface IAddressProps { function Address(props: IAddressProps) { const md = useBreakpoint("lg"); const address = - ( md.isBelowLg && props.truncate || props.forceTruncate) + (md.isBelowLg && props.truncate) || props.forceTruncate ? truncateEthAddress(props.address) : props.address; return ( diff --git a/src/components/alert.tsx b/apps/website/src/components/alert.tsx similarity index 100% rename from src/components/alert.tsx rename to apps/website/src/components/alert.tsx diff --git a/src/components/balance.tsx b/apps/website/src/components/balance.tsx similarity index 100% rename from src/components/balance.tsx rename to apps/website/src/components/balance.tsx diff --git a/src/components/breadcrumbs.tsx b/apps/website/src/components/breadcrumbs.tsx similarity index 100% rename from src/components/breadcrumbs.tsx rename to apps/website/src/components/breadcrumbs.tsx diff --git a/src/components/buttons/connect-button.tsx b/apps/website/src/components/buttons/connect-button.tsx similarity index 100% rename from src/components/buttons/connect-button.tsx rename to apps/website/src/components/buttons/connect-button.tsx diff --git a/src/components/cards/card.tsx b/apps/website/src/components/cards/card.tsx similarity index 100% rename from src/components/cards/card.tsx rename to apps/website/src/components/cards/card.tsx diff --git a/src/components/cards/statistics-card.tsx b/apps/website/src/components/cards/statistics-card.tsx similarity index 100% rename from src/components/cards/statistics-card.tsx rename to apps/website/src/components/cards/statistics-card.tsx diff --git a/src/components/charts/line-chart.tsx b/apps/website/src/components/charts/line-chart.tsx similarity index 100% rename from src/components/charts/line-chart.tsx rename to apps/website/src/components/charts/line-chart.tsx diff --git a/src/components/date-picker.tsx b/apps/website/src/components/date-picker.tsx similarity index 100% rename from src/components/date-picker.tsx rename to apps/website/src/components/date-picker.tsx diff --git a/src/components/dialogs/are-you-sure.tsx b/apps/website/src/components/dialogs/are-you-sure.tsx similarity index 100% rename from src/components/dialogs/are-you-sure.tsx rename to apps/website/src/components/dialogs/are-you-sure.tsx diff --git a/src/components/dialogs/change-sink-dialog.tsx b/apps/website/src/components/dialogs/change-sink-dialog.tsx similarity index 96% rename from src/components/dialogs/change-sink-dialog.tsx rename to apps/website/src/components/dialogs/change-sink-dialog.tsx index c6a5eb1..b164b25 100644 --- a/src/components/dialogs/change-sink-dialog.tsx +++ b/apps/website/src/components/dialogs/change-sink-dialog.tsx @@ -1,13 +1,14 @@ -import { zodResolver } from "@hookform/resolvers/zod"; import React from "react"; +import { abi } from "@grassroots/contracts/erc20-demurrage-token/contract"; +import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { isAddress } from "viem"; import { useWriteContract } from "wagmi"; import * as z from "zod"; -import { abi } from "~/contracts/erc20-demurrage-token/contract"; + import { queryClient } from "~/lib/providers"; -import { config } from "~/lib/web3"; +import { config } from "@grassroots/shared/utils/web3"; import { AddressField } from "../forms/fields/address-field"; import { Loading } from "../loading"; import Hash from "../transactions/hash"; diff --git a/src/components/dialogs/create-paper-wallet.tsx b/apps/website/src/components/dialogs/create-paper-wallet.tsx similarity index 100% rename from src/components/dialogs/create-paper-wallet.tsx rename to apps/website/src/components/dialogs/create-paper-wallet.tsx diff --git a/src/components/dialogs/download-dialog.tsx b/apps/website/src/components/dialogs/download-dialog.tsx similarity index 100% rename from src/components/dialogs/download-dialog.tsx rename to apps/website/src/components/dialogs/download-dialog.tsx diff --git a/src/components/dialogs/get-address-dialog.tsx b/apps/website/src/components/dialogs/get-address-dialog.tsx similarity index 100% rename from src/components/dialogs/get-address-dialog.tsx rename to apps/website/src/components/dialogs/get-address-dialog.tsx diff --git a/src/components/dialogs/mint-to-dialog.tsx b/apps/website/src/components/dialogs/mint-to-dialog.tsx similarity index 95% rename from src/components/dialogs/mint-to-dialog.tsx rename to apps/website/src/components/dialogs/mint-to-dialog.tsx index ccef136..8edcf51 100644 --- a/src/components/dialogs/mint-to-dialog.tsx +++ b/apps/website/src/components/dialogs/mint-to-dialog.tsx @@ -1,12 +1,13 @@ -import { zodResolver } from "@hookform/resolvers/zod"; import React, { useState } from "react"; +import { abi } from "@grassroots/contracts/erc20-demurrage-token/contract"; +import { config } from "@grassroots/shared/utils/web3"; +import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { isAddress, parseGwei, parseUnits } from "viem"; import { useAccount, useBalance, useWriteContract } from "wagmi"; import * as z from "zod"; -import { abi } from "~/contracts/erc20-demurrage-token/contract"; -import { config } from "~/lib/web3"; + import { AddressField } from "../forms/fields/address-field"; import { InputField } from "../forms/fields/input-field"; import { Loading } from "../loading"; diff --git a/src/components/dialogs/receive-dialog.tsx b/apps/website/src/components/dialogs/receive-dialog.tsx similarity index 100% rename from src/components/dialogs/receive-dialog.tsx rename to apps/website/src/components/dialogs/receive-dialog.tsx diff --git a/src/components/dialogs/scan-address-dialog.tsx b/apps/website/src/components/dialogs/scan-address-dialog.tsx similarity index 86% rename from src/components/dialogs/scan-address-dialog.tsx rename to apps/website/src/components/dialogs/scan-address-dialog.tsx index 15ac82e..e1a4f16 100644 --- a/src/components/dialogs/scan-address-dialog.tsx +++ b/apps/website/src/components/dialogs/scan-address-dialog.tsx @@ -1,10 +1,10 @@ import { QrCodeIcon } from "lucide-react"; import React, { useState } from "react"; import { useIsMounted } from "~/hooks/useIsMounted"; -import { addressFromQRContent } from "~/utils/paper-wallet"; -import QrReader from "../qr-code/reader"; -import { type OnResultFunction } from "../qr-code/reader/types"; -import { isMediaDevicesSupported } from "../qr-code/reader/utils"; +import { addressFromQRContent } from "@grassroots/paper-wallet/wallet"; +import QrReader from "@grassroots/reader"; +import { type OnResultFunction } from "@grassroots/reader/types"; +import { isMediaDevicesSupported } from "@grassroots/reader/utils"; import { Button } from "../ui/button"; import { Dialog, DialogContent, DialogTrigger } from "../ui/dialog"; import { toast } from "sonner"; @@ -25,7 +25,6 @@ const ScanAddressDialog: React.FC = ({ const handleOnResult: OnResultFunction = (data) => { const result = data?.getText(); if (!result) return; - try { const address = addressFromQRContent(result); onAddress(address); diff --git a/src/components/dialogs/scan-qr-dialog.tsx b/apps/website/src/components/dialogs/scan-qr-dialog.tsx similarity index 87% rename from src/components/dialogs/scan-qr-dialog.tsx rename to apps/website/src/components/dialogs/scan-qr-dialog.tsx index 26cc005..38115fa 100644 --- a/src/components/dialogs/scan-qr-dialog.tsx +++ b/apps/website/src/components/dialogs/scan-qr-dialog.tsx @@ -1,8 +1,8 @@ import { QrCodeIcon } from "lucide-react"; import { useState } from "react"; -import QrReader from "../qr-code/reader"; -import { type OnResultFunction } from "../qr-code/reader/types"; -import { isMediaDevicesSupported } from "../qr-code/reader/utils"; +import QrReader from "@grassroots/reader"; +import { type OnResultFunction } from "@grassroots/reader/types"; +import { isMediaDevicesSupported } from "@grassroots/reader/utils"; import { Button } from "../ui/button"; import { Dialog, DialogContent, DialogTrigger } from "../ui/dialog"; import { toast } from "sonner"; diff --git a/src/components/dialogs/send-dialog.tsx b/apps/website/src/components/dialogs/send-dialog.tsx similarity index 100% rename from src/components/dialogs/send-dialog.tsx rename to apps/website/src/components/dialogs/send-dialog.tsx diff --git a/src/components/file-uploader/cropper.tsx b/apps/website/src/components/file-uploader/cropper.tsx similarity index 100% rename from src/components/file-uploader/cropper.tsx rename to apps/website/src/components/file-uploader/cropper.tsx diff --git a/src/components/file-uploader/file-input.tsx b/apps/website/src/components/file-uploader/file-input.tsx similarity index 100% rename from src/components/file-uploader/file-input.tsx rename to apps/website/src/components/file-uploader/file-input.tsx diff --git a/src/components/file-uploader/image-crop.tsx b/apps/website/src/components/file-uploader/image-crop.tsx similarity index 100% rename from src/components/file-uploader/image-crop.tsx rename to apps/website/src/components/file-uploader/image-crop.tsx diff --git a/src/components/file-uploader/image-upload.tsx b/apps/website/src/components/file-uploader/image-upload.tsx similarity index 100% rename from src/components/file-uploader/image-upload.tsx rename to apps/website/src/components/file-uploader/image-upload.tsx diff --git a/src/components/file-uploader/use-file-upload.tsx b/apps/website/src/components/file-uploader/use-file-upload.tsx similarity index 100% rename from src/components/file-uploader/use-file-upload.tsx rename to apps/website/src/components/file-uploader/use-file-upload.tsx diff --git a/src/components/file-uploader/webcam-capture.tsx b/apps/website/src/components/file-uploader/webcam-capture.tsx similarity index 100% rename from src/components/file-uploader/webcam-capture.tsx rename to apps/website/src/components/file-uploader/webcam-capture.tsx diff --git a/src/components/force-graph/components/fullscreen-button.tsx b/apps/website/src/components/force-graph/components/fullscreen-button.tsx similarity index 100% rename from src/components/force-graph/components/fullscreen-button.tsx rename to apps/website/src/components/force-graph/components/fullscreen-button.tsx diff --git a/src/components/force-graph/components/graph-statistics.tsx b/apps/website/src/components/force-graph/components/graph-statistics.tsx similarity index 100% rename from src/components/force-graph/components/graph-statistics.tsx rename to apps/website/src/components/force-graph/components/graph-statistics.tsx diff --git a/src/components/force-graph/components/node-label.tsx b/apps/website/src/components/force-graph/components/node-label.tsx similarity index 100% rename from src/components/force-graph/components/node-label.tsx rename to apps/website/src/components/force-graph/components/node-label.tsx diff --git a/src/components/force-graph/hooks/useGraphData.tsx b/apps/website/src/components/force-graph/hooks/useGraphData.tsx similarity index 100% rename from src/components/force-graph/hooks/useGraphData.tsx rename to apps/website/src/components/force-graph/hooks/useGraphData.tsx diff --git a/src/components/force-graph/index.tsx b/apps/website/src/components/force-graph/index.tsx similarity index 100% rename from src/components/force-graph/index.tsx rename to apps/website/src/components/force-graph/index.tsx diff --git a/src/components/force-graph/types.ts b/apps/website/src/components/force-graph/types.ts similarity index 100% rename from src/components/force-graph/types.ts rename to apps/website/src/components/force-graph/types.ts diff --git a/src/components/force-graph/utils.ts b/apps/website/src/components/force-graph/utils.ts similarity index 91% rename from src/components/force-graph/utils.ts rename to apps/website/src/components/force-graph/utils.ts index 6d413a1..229fcac 100644 --- a/src/components/force-graph/utils.ts +++ b/apps/website/src/components/force-graph/utils.ts @@ -1,8 +1,9 @@ +import { publicClient } from "@grassroots/shared/utils/web3"; import { extent } from "d3-array"; import { scaleSqrt } from "d3-scale"; import { erc20Abi } from "viem"; -import { publicClient } from "~/lib/web3"; -import { type RouterOutput } from "~/server/api/root"; + +import type { RouterOutputs } from "@grassroots/api"; import { toUserUnits } from "~/utils/units"; import { type GraphData, type Link, type Node } from "./types"; @@ -15,7 +16,7 @@ import { type GraphData, type Link, type Node } from "./types"; */ export async function fetchBalance( address: `0x${string}`, - voucherAddress: `0x${string}` + voucherAddress: `0x${string}`, ) { try { const data = await publicClient?.readContract({ @@ -39,8 +40,8 @@ export async function fetchBalance( * @returns A promise that resolves to the processed graph data. */ export async function processGraphData( - transactionData: RouterOutput["transaction"]["list"]["transactions"], - voucherAddress: `0x${string}` + transactionData: RouterOutputs["transaction"]["list"]["transactions"], + voucherAddress: `0x${string}`, ): Promise { const nodesMap = new Map<`0x${string}`, Node>(); @@ -87,7 +88,7 @@ export async function processGraphData( const links: Link[] = transactionData.map((tx) => ({ source: scaledNodes.find((node) => node.id === tx.sender_address) as Node, target: scaledNodes.find( - (node) => node.id === tx.recipient_address + (node) => node.id === tx.recipient_address, ) as Node, voucher_address: tx.voucher_address as `0x${string}`, })); diff --git a/src/components/forms/fields/address-field.tsx b/apps/website/src/components/forms/fields/address-field.tsx similarity index 100% rename from src/components/forms/fields/address-field.tsx rename to apps/website/src/components/forms/fields/address-field.tsx diff --git a/src/components/forms/fields/checkbox-field.tsx b/apps/website/src/components/forms/fields/checkbox-field.tsx similarity index 100% rename from src/components/forms/fields/checkbox-field.tsx rename to apps/website/src/components/forms/fields/checkbox-field.tsx diff --git a/src/components/forms/fields/combo-box-field.tsx b/apps/website/src/components/forms/fields/combo-box-field.tsx similarity index 100% rename from src/components/forms/fields/combo-box-field.tsx rename to apps/website/src/components/forms/fields/combo-box-field.tsx diff --git a/src/components/forms/fields/date-field.tsx b/apps/website/src/components/forms/fields/date-field.tsx similarity index 100% rename from src/components/forms/fields/date-field.tsx rename to apps/website/src/components/forms/fields/date-field.tsx diff --git a/src/components/forms/fields/image-field.tsx b/apps/website/src/components/forms/fields/image-field.tsx similarity index 100% rename from src/components/forms/fields/image-field.tsx rename to apps/website/src/components/forms/fields/image-field.tsx diff --git a/src/components/forms/fields/image-upload-field.tsx b/apps/website/src/components/forms/fields/image-upload-field.tsx similarity index 100% rename from src/components/forms/fields/image-upload-field.tsx rename to apps/website/src/components/forms/fields/image-upload-field.tsx diff --git a/src/components/forms/fields/input-field.tsx b/apps/website/src/components/forms/fields/input-field.tsx similarity index 100% rename from src/components/forms/fields/input-field.tsx rename to apps/website/src/components/forms/fields/input-field.tsx diff --git a/src/components/forms/fields/map-field.tsx b/apps/website/src/components/forms/fields/map-field.tsx similarity index 100% rename from src/components/forms/fields/map-field.tsx rename to apps/website/src/components/forms/fields/map-field.tsx diff --git a/src/components/forms/fields/multi-select-field.tsx b/apps/website/src/components/forms/fields/multi-select-field.tsx similarity index 100% rename from src/components/forms/fields/multi-select-field.tsx rename to apps/website/src/components/forms/fields/multi-select-field.tsx diff --git a/src/components/forms/fields/radio-field.tsx b/apps/website/src/components/forms/fields/radio-field.tsx similarity index 100% rename from src/components/forms/fields/radio-field.tsx rename to apps/website/src/components/forms/fields/radio-field.tsx diff --git a/src/components/forms/fields/select-field.tsx b/apps/website/src/components/forms/fields/select-field.tsx similarity index 100% rename from src/components/forms/fields/select-field.tsx rename to apps/website/src/components/forms/fields/select-field.tsx diff --git a/src/components/forms/fields/select-voucher-field.tsx b/apps/website/src/components/forms/fields/select-voucher-field.tsx similarity index 100% rename from src/components/forms/fields/select-voucher-field.tsx rename to apps/website/src/components/forms/fields/select-voucher-field.tsx diff --git a/src/components/forms/fields/textarea-field.tsx b/apps/website/src/components/forms/fields/textarea-field.tsx similarity index 100% rename from src/components/forms/fields/textarea-field.tsx rename to apps/website/src/components/forms/fields/textarea-field.tsx diff --git a/src/components/forms/fields/type-helper.ts b/apps/website/src/components/forms/fields/type-helper.ts similarity index 100% rename from src/components/forms/fields/type-helper.ts rename to apps/website/src/components/forms/fields/type-helper.ts diff --git a/src/components/forms/generate-wallets-form.tsx b/apps/website/src/components/forms/generate-wallets-form.tsx similarity index 100% rename from src/components/forms/generate-wallets-form.tsx rename to apps/website/src/components/forms/generate-wallets-form.tsx diff --git a/src/components/forms/paper-wallet-form.tsx b/apps/website/src/components/forms/paper-wallet-form.tsx similarity index 100% rename from src/components/forms/paper-wallet-form.tsx rename to apps/website/src/components/forms/paper-wallet-form.tsx diff --git a/src/components/icons.tsx b/apps/website/src/components/icons.tsx similarity index 99% rename from src/components/icons.tsx rename to apps/website/src/components/icons.tsx index b88f100..680c4a7 100644 --- a/src/components/icons.tsx +++ b/apps/website/src/components/icons.tsx @@ -12,7 +12,7 @@ export const Icons = { xmlns="http://www.w3.org/2000/svg" {...props} > - + { @@ -42,7 +40,7 @@ export const CreatePaperWallet = () => { }; const downloadQRCard = () => { const privateKeyQRCode = document.getElementById( - "qrCard" + "qrCard", ) as unknown as HTMLElement; if (privateKeyQRCode) { htmlToImage @@ -55,15 +53,15 @@ export const CreatePaperWallet = () => { }; if (!type) return ( -
+
{ buttonVariants({ variant: "secondary", }), - "flex w-full flex-1 flex-col h-[unset] justify-center items-center" + "flex h-[unset] w-full flex-1 flex-col items-center justify-center", )} > - + Batch
@@ -99,8 +97,8 @@ export const CreatePaperWallet = () => { /> )} {data && ( -
-

+

+

Do not share your private key with anyone. If you lose your private key, you will lose access to your funds.

@@ -108,10 +106,10 @@ export const CreatePaperWallet = () => {
-

+

Print or download your paper wallet.

-
+
} open={open} @@ -94,9 +95,9 @@ const DonateToPoolForm = ({ ? truncateByDecimalPlace( Math.min( voucher.swapLimit?.formattedNumber, - voucher.userBalance?.formattedNumber + voucher.userBalance?.formattedNumber, ), - 2 + 2, ) : 0; const donate = useWriteContract({ @@ -201,9 +202,9 @@ const DonateToPoolForm = ({ searchableValue: (x) => `${x.name} ${x.symbol}`, form: form, renderItem: (x) => ( -
+
{x.name} -
+
{x.userBalance?.formatted}  {x.symbol}
diff --git a/src/components/pools/forms/pool-voucher-form.tsx b/apps/website/src/components/pools/forms/pool-voucher-form.tsx similarity index 100% rename from src/components/pools/forms/pool-voucher-form.tsx rename to apps/website/src/components/pools/forms/pool-voucher-form.tsx diff --git a/src/components/pools/forms/swap-form.tsx b/apps/website/src/components/pools/forms/swap-form.tsx similarity index 93% rename from src/components/pools/forms/swap-form.tsx rename to apps/website/src/components/pools/forms/swap-form.tsx index 74f3e18..0e9560f 100644 --- a/src/components/pools/forms/swap-form.tsx +++ b/apps/website/src/components/pools/forms/swap-form.tsx @@ -1,15 +1,15 @@ +import { useEffect, useMemo } from "react"; +import { swapPoolAbi } from "@grassroots/contracts/swap-pool/contract"; +import { celoscanUrl } from "@grassroots/shared/utils/celo"; +import { config } from "@grassroots/shared/utils/web3"; import { zodResolver } from "@hookform/resolvers/zod"; import { waitForTransactionReceipt } from "@wagmi/core"; -import { useEffect, useMemo } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { erc20Abi, isAddress, parseUnits } from "viem"; import { useWriteContract } from "wagmi"; import { z } from "zod"; -import { swapPoolAbi } from "~/contracts/swap-pool/contract"; -import { config } from "~/lib/web3"; -import { celoscanUrl } from "~/utils/celo"; import { truncateByDecimalPlace } from "~/utils/number"; import { Loading } from "../../loading"; import { Button } from "../../ui/button"; @@ -111,7 +111,7 @@ export function SwapForm({ swapPool }: { swapPool: SwapPool | undefined }) { }, [amount, fromToken, toToken, setValue]); const toAmountMax = useMemo( () => convert(toToken?.poolBalance?.formatted, toToken, fromToken), - [toToken, fromToken] + [toToken, fromToken], ); const max = useMemo( () => @@ -119,11 +119,11 @@ export function SwapForm({ swapPool }: { swapPool: SwapPool | undefined }) { Math.min( fromToken?.swapLimit?.formattedNumber ?? 0, fromToken?.userBalance?.formattedNumber ?? 0, - toAmountMax?.formattedNumber ?? 0 + toAmountMax?.formattedNumber ?? 0, ), - 2 + 2, ) ?? 0, - [fromToken, toAmountMax] + [fromToken, toAmountMax], ); const onSubmit = async (data: z.infer) => { @@ -227,9 +227,9 @@ export function SwapForm({ swapPool }: { swapPool: SwapPool | undefined }) { searchableValue: (x) => `${x.name} ${x.symbol}`, placeholder: "Select token", renderItem: (x) => ( -
+
{x.name} -
+
{x.userBalance?.formatted}  {x.symbol}
@@ -238,7 +238,7 @@ export function SwapForm({ swapPool }: { swapPool: SwapPool | undefined }) { renderSelectedItem: (x) => `${x.name} (${x.symbol})`, items: swapPool?.voucherDetails?.filter( - (x) => x.address != toToken?.address + (x) => x.address != toToken?.address, ) ?? [], }} inputProps={{ @@ -273,9 +273,9 @@ export function SwapForm({ swapPool }: { swapPool: SwapPool | undefined }) { placeholder: "Select token", renderItem: (x) => ( -
+
{x.name} -
+
{x.poolBalance?.formatted}  {x.symbol}
@@ -283,7 +283,7 @@ export function SwapForm({ swapPool }: { swapPool: SwapPool | undefined }) { ), items: swapPool?.voucherDetails?.filter( - (x) => x.address != fromToken?.address + (x) => x.address != fromToken?.address, ) ?? [], }} inputProps={{ diff --git a/src/components/pools/forms/update-pool-form.tsx b/apps/website/src/components/pools/forms/update-pool-form.tsx similarity index 100% rename from src/components/pools/forms/update-pool-form.tsx rename to apps/website/src/components/pools/forms/update-pool-form.tsx diff --git a/src/components/pools/forms/withdraw-form.tsx b/apps/website/src/components/pools/forms/withdraw-form.tsx similarity index 94% rename from src/components/pools/forms/withdraw-form.tsx rename to apps/website/src/components/pools/forms/withdraw-form.tsx index 43c9cea..4f604f2 100644 --- a/src/components/pools/forms/withdraw-form.tsx +++ b/apps/website/src/components/pools/forms/withdraw-form.tsx @@ -1,14 +1,15 @@ +import { useState } from "react"; +import { swapPoolAbi } from "@grassroots/contracts/swap-pool/contract"; +import { celoscanUrl } from "@grassroots/shared/utils/celo"; +import { config } from "@grassroots/shared/utils/web3"; import { zodResolver } from "@hookform/resolvers/zod"; import { waitForTransactionReceipt } from "@wagmi/core"; -import { useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; import { isAddress, parseUnits } from "viem"; import { useWriteContract } from "wagmi"; import { z } from "zod"; -import { swapPoolAbi } from "~/contracts/swap-pool/contract"; -import { config } from "~/lib/web3"; -import { celoscanUrl } from "~/utils/celo"; + import { Loading } from "../../loading"; import { Button, buttonVariants } from "../../ui/button"; import { @@ -152,9 +153,9 @@ export const WithdrawFromPoolForm = ({ items: pool?.voucherDetails || [], searchableValue: (x) => `${x.name} ${x.symbol}`, renderItem: (x) => ( -
+
{x.name} -
+
{x.poolBalance?.formatted}  {x.symbol}
diff --git a/src/components/pools/hooks.tsx b/apps/website/src/components/pools/hooks.tsx similarity index 100% rename from src/components/pools/hooks.tsx rename to apps/website/src/components/pools/hooks.tsx diff --git a/src/components/pools/pool-details.tsx b/apps/website/src/components/pools/pool-details.tsx similarity index 100% rename from src/components/pools/pool-details.tsx rename to apps/website/src/components/pools/pool-details.tsx diff --git a/src/components/pools/pool-list-item.tsx b/apps/website/src/components/pools/pool-list-item.tsx similarity index 100% rename from src/components/pools/pool-list-item.tsx rename to apps/website/src/components/pools/pool-list-item.tsx diff --git a/src/components/pools/pool-list.tsx b/apps/website/src/components/pools/pool-list.tsx similarity index 100% rename from src/components/pools/pool-list.tsx rename to apps/website/src/components/pools/pool-list.tsx diff --git a/src/components/pools/swap-field.tsx b/apps/website/src/components/pools/swap-field.tsx similarity index 100% rename from src/components/pools/swap-field.tsx rename to apps/website/src/components/pools/swap-field.tsx diff --git a/src/components/pools/tables/pool-deposits-table.tsx b/apps/website/src/components/pools/tables/pool-deposits-table.tsx similarity index 94% rename from src/components/pools/tables/pool-deposits-table.tsx rename to apps/website/src/components/pools/tables/pool-deposits-table.tsx index b2ca310..80fb2ee 100644 --- a/src/components/pools/tables/pool-deposits-table.tsx +++ b/apps/website/src/components/pools/tables/pool-deposits-table.tsx @@ -1,8 +1,9 @@ -import { keepPreviousData } from "@tanstack/query-core"; import React from "react"; +import { celoscanUrl } from "@grassroots/shared/utils/celo"; +import { keepPreviousData } from "@tanstack/query-core"; import { getAddress } from "viem"; + import { api } from "~/utils/api"; -import { celoscanUrl } from "~/utils/celo"; import Address from "../../address"; import { InfiniteTable } from "../../tables/infinite-table"; import { VoucherName, VoucherValue } from "../../voucher/voucher-name"; @@ -18,14 +19,14 @@ export const PoolDepositsTable = ({ pool }: { pool: SwapPool | undefined }) => { getNextPageParam: (lastPage) => lastPage.nextCursor, placeholderData: keepPreviousData, refetchOnWindowFocus: false, - } + }, ); const flatData = React.useMemo( () => deposits.data?.pages?.flatMap((page) => page.deposits) ?? [], - [deposits.data] + [deposits.data], ); return ( -
+
lastPage.nextCursor, placeholderData: keepPreviousData, refetchOnWindowFocus: false, - } + }, ); const flatData = React.useMemo( () => swaps.data?.pages?.flatMap((page) => page.swaps) ?? [], - [swaps.data] + [swaps.data], ); return ( -
+
{ const [selectedProduct, setSelectedProduct] = useState< - RouterOutput["voucher"]["commodities"][0] | null + RouterOutputs["voucher"]["commodities"][0] | null >(null); const { data: products } = api.voucher.commodities.useQuery( @@ -75,7 +75,7 @@ export const ProductList = ({ open={selectedProduct !== null} onOpenChange={(open) => setSelectedProduct( - open ? ({} as RouterOutput["voucher"]["commodities"][0]) : null + open ? ({} as RouterOutputs["voucher"]["commodities"][0]) : null ) } > diff --git a/src/components/products/products-list-item.tsx b/apps/website/src/components/products/products-list-item.tsx similarity index 76% rename from src/components/products/products-list-item.tsx rename to apps/website/src/components/products/products-list-item.tsx index c69957b..b289daa 100644 --- a/src/components/products/products-list-item.tsx +++ b/apps/website/src/components/products/products-list-item.tsx @@ -1,11 +1,11 @@ -import { type RouterOutput } from "~/server/api/root"; +import { type RouterOutputs } from "@grassroots/api"; export const ProductListItem = ({ product, onClick, }: { - product: RouterOutput["voucher"]["commodities"][number]; - onClick?: (product: RouterOutput["voucher"]["commodities"][number]) => void; + product: RouterOutputs["voucher"]["commodities"][number]; + onClick?: (product: RouterOutputs["voucher"]["commodities"][number]) => void; }) => { return (
lastPage.nextCursor, placeholderData: keepPreviousData, refetchOnWindowFocus: false, - } + }, ); //we must flatten the array of arrays from the useInfiniteQuery hook const flatData = React.useMemo( () => data?.pages?.flatMap((page) => page.transactions) ?? [], - [data] + [data], ); return ( diff --git a/src/components/transactions/hash.tsx b/apps/website/src/components/transactions/hash.tsx similarity index 84% rename from src/components/transactions/hash.tsx rename to apps/website/src/components/transactions/hash.tsx index dd66403..e75a4f2 100644 --- a/src/components/transactions/hash.tsx +++ b/apps/website/src/components/transactions/hash.tsx @@ -1,5 +1,6 @@ import Link from "next/link"; -import { celoscanUrl } from "~/utils/celo"; +import { celoscanUrl } from "@grassroots/shared/utils/celo"; + import { truncateEthAddress } from "~/utils/dmr-helpers"; interface IAddressProps { diff --git a/src/components/transactions/transaction-list.tsx b/apps/website/src/components/transactions/transaction-list.tsx similarity index 100% rename from src/components/transactions/transaction-list.tsx rename to apps/website/src/components/transactions/transaction-list.tsx diff --git a/src/components/transactions/transaction-status.tsx b/apps/website/src/components/transactions/transaction-status.tsx similarity index 75% rename from src/components/transactions/transaction-status.tsx rename to apps/website/src/components/transactions/transaction-status.tsx index 272e48e..5621a4f 100644 --- a/src/components/transactions/transaction-status.tsx +++ b/apps/website/src/components/transactions/transaction-status.tsx @@ -1,14 +1,14 @@ +import { useEffect } from "react"; +import { celoscanUrl } from "@grassroots/shared/utils/celo"; import { CheckCircledIcon, CrossCircledIcon, Share1Icon, } from "@radix-ui/react-icons"; - -import { useEffect } from "react"; import { useWaitForTransactionReceipt } from "wagmi"; + import useWebShare from "~/hooks/useWebShare"; import { api } from "~/utils/api"; -import { celoscanUrl } from "~/utils/celo"; import { Loading } from "../loading"; import Hash from "../transactions/hash"; import { Button } from "../ui/button"; @@ -25,7 +25,7 @@ export function TransactionStatus({ hash }: { hash: `0x${string}` }) { }, [data]); if (isLoading) return ( -
+
@@ -34,21 +34,21 @@ export function TransactionStatus({ hash }: { hash: `0x${string}` }) { ); if (isError) return ( -
+
-
Error
+
Error
{error?.name}
{error?.message}
); if (!data) - return
Transaction not found 🤔
; + return
Transaction not found 🤔
; return ( -
+
-
Success
-
+
Success
+
{share.isSupported && (