10 |
--------------------------------------------------------------------------------
/apps/connector/src/style.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | *,
6 | ::before,
7 | ::after {
8 | font-family: theme(fontFamily.sans);
9 | color: theme(colors.neutral.100);
10 | }
11 |
12 | * {
13 | font-family: theme(fontFamily.sans) !important;
14 | font-size: initial !important;
15 | }
16 |
--------------------------------------------------------------------------------
/apps/connector/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "plasmo/templates/tsconfig.base",
3 | "exclude": ["node_modules"],
4 | "include": [".plasmo/index.d.ts", "./**/*.ts", "./**/*.tsx", "global.d.ts"],
5 | "compilerOptions": {
6 | "paths": {
7 | "~*": ["./src/*"],
8 | },
9 | "baseUrl": ".",
10 | "lib": ["WebWorker", "dom", "WebWorker.ImportScripts"],
11 | "strictNullChecks": true,
12 | "strict": true,
13 | "target": "ESNext",
14 | },
15 | }
16 |
--------------------------------------------------------------------------------
/apps/portfolio/.editorconfig:
--------------------------------------------------------------------------------
1 | # https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | end_of_line = lf
7 | indent_size = 2
8 | indent_style = space
9 | insert_final_newline = true
10 | trim_trailing_whitespace = false
11 |
--------------------------------------------------------------------------------
/apps/portfolio/.node-version:
--------------------------------------------------------------------------------
1 | 20.18.0
2 |
--------------------------------------------------------------------------------
/apps/portfolio/.npmignore:
--------------------------------------------------------------------------------
1 | !.npmrc
2 | #!pnpm-lock.yaml
3 |
--------------------------------------------------------------------------------
/apps/portfolio/.prettierignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
3 | .contentlayer/
4 | .husky
5 | .next/
6 | .vercel/
7 |
8 | coverage/
9 | public/
10 |
11 | *.md
12 | *.mdx
13 |
14 | .data/
15 |
16 | pnpm-lock.yaml
17 |
--------------------------------------------------------------------------------
/apps/portfolio/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "singleQuote": true,
4 | "arrowParens": "avoid",
5 | "endOfLine": "auto",
6 | "trailingComma": "es5",
7 | "plugins": ["prettier-plugin-tailwindcss"],
8 | "tailwindFunctions": ["cx", "cva"],
9 | "tailwindConfig": "./tailwind.config.ts"
10 | }
11 |
--------------------------------------------------------------------------------
/apps/portfolio/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # portfolio
2 |
3 | ## 0.1.1
4 |
5 | ### Patch Changes
6 |
7 | - Updated dependencies [48e47cf]
8 | - @status-im/js@1.1.0
9 |
--------------------------------------------------------------------------------
/apps/portfolio/README.md:
--------------------------------------------------------------------------------
1 | # A portfolio dApp by Status
2 |
3 | ## Development
4 |
5 | Follow [Getting Started](../../README.md#getting-started)
6 |
7 | ### Develop
8 |
9 | ```bash
10 | pnpm dev
11 | ```
12 |
--------------------------------------------------------------------------------
/apps/portfolio/env.d.ts:
--------------------------------------------------------------------------------
1 | import type { clientEnv } from './src/config/env.client.mjs'
2 | import type { serverEnv } from './src/config/env.server.mjs'
3 |
4 | type Env = typeof clientEnv & typeof serverEnv
5 |
6 | declare global {
7 | namespace NodeJS {
8 | /* eslint-disable @typescript-eslint/no-empty-object-type */
9 | interface ProcessEnv extends Env {}
10 | /* eslint-enable @typescript-eslint/no-empty-object-type */
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/apps/portfolio/middleware.ts:
--------------------------------------------------------------------------------
1 | import { NextResponse } from 'next/server'
2 |
3 | import type { NextRequest } from 'next/server'
4 |
5 | export function middleware(request: NextRequest) {
6 | const response = NextResponse.next()
7 | response.headers.set('x-current-path', request.nextUrl.pathname)
8 | return response
9 | }
10 |
11 | export const config = {
12 | matcher: ['/:address/assets/:slug*', '/:address/collectibles/:rest*'],
13 | }
14 |
--------------------------------------------------------------------------------
/apps/portfolio/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
6 |
--------------------------------------------------------------------------------
/apps/portfolio/postcss.config.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable-next-line no-undef */
2 | module.exports = {
3 | plugins: {
4 | 'tailwindcss/nesting': {},
5 | tailwindcss: {},
6 | autoprefixer: {},
7 | },
8 | }
9 |
--------------------------------------------------------------------------------
/apps/portfolio/public/images/providers/mercuryo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/status-im/status-web/aca00b0758ea8bd3b33a1e53bac432dc626afbfe/apps/portfolio/public/images/providers/mercuryo.png
--------------------------------------------------------------------------------
/apps/portfolio/public/images/providers/moonpay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/status-im/status-web/aca00b0758ea8bd3b33a1e53bac432dc626afbfe/apps/portfolio/public/images/providers/moonpay.png
--------------------------------------------------------------------------------
/apps/portfolio/public/images/providers/ramp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/status-im/status-web/aca00b0758ea8bd3b33a1e53bac432dc626afbfe/apps/portfolio/public/images/providers/ramp.png
--------------------------------------------------------------------------------
/apps/portfolio/public/images/tokens/eth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/status-im/status-web/aca00b0758ea8bd3b33a1e53bac432dc626afbfe/apps/portfolio/public/images/tokens/eth.png
--------------------------------------------------------------------------------
/apps/portfolio/public/noise.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/status-im/status-web/aca00b0758ea8bd3b33a1e53bac432dc626afbfe/apps/portfolio/public/noise.png
--------------------------------------------------------------------------------
/apps/portfolio/src/app/[address]/@detail/assets/[ticker]/not-found.tsx:
--------------------------------------------------------------------------------
1 | export default function NotFound() {
2 | return @asset ticker not found
3 | }
4 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/[address]/@detail/assets/_components/chart/constants.ts:
--------------------------------------------------------------------------------
1 | import { customisation, white } from '@status-im/colors'
2 |
3 | export const colors = {
4 | line: customisation.blue[50],
5 | background: white[100],
6 | marker: customisation.blue['50/30'],
7 | fill: customisation.blue['50/5'],
8 | white: white[100],
9 | } as const
10 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/[address]/@detail/assets/error.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | export default function Error() {
4 | return @asset error
5 | }
6 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/[address]/@detail/assets/not-found.tsx:
--------------------------------------------------------------------------------
1 | export default function NotFound() {
2 | return @asset not found
3 | }
4 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/[address]/@detail/assets/page.tsx:
--------------------------------------------------------------------------------
1 | export default async function CollectiblesDefaultPage() {
2 | return (
3 | <>
4 |
5 | >
6 | )
7 | }
8 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/[address]/@detail/collectibles/[network]/[contract]/[id]/not-found.tsx:
--------------------------------------------------------------------------------
1 | export default function NotFound() {
2 | return @collectible id not found
3 | }
4 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/[address]/@detail/collectibles/error.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | export default function Error() {
4 | return @collectible error
5 | }
6 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/[address]/@detail/collectibles/page.tsx:
--------------------------------------------------------------------------------
1 | export default async function CollectiblesDefaultPage() {
2 | return (
3 | <>
4 |
5 | >
6 | )
7 | }
8 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/[address]/@list/assets/default.tsx:
--------------------------------------------------------------------------------
1 | export { default } from './page'
2 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/[address]/@list/collectibles/default.tsx:
--------------------------------------------------------------------------------
1 | export { default } from './page'
2 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/[address]/@list/collectibles/error.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | export default function Error() {
4 | return @list/collectibles error
5 | }
6 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/[address]/@nav/default.tsx:
--------------------------------------------------------------------------------
1 | import { AccountSideNav } from '../../_components/account-sidenav'
2 |
3 | export default async function Nav() {
4 | return
5 | }
6 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/[address]/error.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | export default function Error() {
4 | return [address] error
5 | }
6 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/_components/anchor-link.tsx:
--------------------------------------------------------------------------------
1 | import { Link } from '../_components/link'
2 |
3 | export const AnchorLink = ({
4 | id,
5 | children,
6 | }: {
7 | id: string
8 | children: React.ReactNode
9 | }) => (
10 | <>
11 |
12 | #
13 |
14 |
15 | {children}
16 |
17 | >
18 | )
19 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/_components/assets/index.tsx:
--------------------------------------------------------------------------------
1 | export type { IconProps } from './icon'
2 | export { Icon } from './icon'
3 | export type { ImageProps } from './image'
4 | export { Image } from './image'
5 | export { ScreenImage, ScreenVideo } from './screen'
6 | export type * from './types'
7 | export type { VideoProps } from './video'
8 | export { Video } from './video'
9 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/_components/feature-enabled.tsx:
--------------------------------------------------------------------------------
1 | import { FEATURE_FLAGS, type FeatureFlag } from '../_lib/feature-flags'
2 |
3 | export const FeatureEnabled = ({
4 | featureFlag,
5 | children,
6 | }: {
7 | featureFlag: FeatureFlag
8 | children: React.ReactNode
9 | }) => {
10 | if (!isFeatureEnabled(featureFlag)) {
11 | return null
12 | }
13 |
14 | return children
15 | }
16 |
17 | export function isFeatureEnabled(featureFlag: FeatureFlag) {
18 | return FEATURE_FLAGS[featureFlag]
19 | }
20 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/_components/navbar.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { Navbar as NavbarBase } from '@status-im/wallet/components'
4 | import { usePathname } from 'next/navigation'
5 |
6 | const Navbar = () => {
7 | const pathname = usePathname()
8 |
9 | return
10 | }
11 |
12 | export { Navbar }
13 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/_components/table/index.tsx:
--------------------------------------------------------------------------------
1 | export * as Table from './table'
2 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/_config.ts:
--------------------------------------------------------------------------------
1 | import { createConfig, http } from 'wagmi'
2 | import { arbitrum, mainnet, optimism } from 'wagmi/chains'
3 |
4 | export const config = createConfig({
5 | chains: [mainnet, optimism, arbitrum],
6 | ssr: false,
7 | transports: {
8 | // todo: replace public clients
9 | [mainnet.id]: http(),
10 | [optimism.id]: http(),
11 | [arbitrum.id]: http(),
12 | },
13 | })
14 |
15 | declare module 'wagmi' {
16 | interface Register {
17 | config: typeof config
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/_hooks/use-debounce.ts:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from 'react'
2 |
3 | export function useDebounce(value: T, delay?: number): T {
4 | const [debouncedValue, setDebouncedValue] = useState(value)
5 |
6 | useEffect(() => {
7 | const timer = setTimeout(() => setDebouncedValue(value), delay || 300)
8 |
9 | return () => {
10 | clearTimeout(timer)
11 | }
12 | }, [value, delay])
13 |
14 | return debouncedValue
15 | }
16 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/_lib/feature-flags.ts:
--------------------------------------------------------------------------------
1 | import { clientEnv } from '../../config/env.client.mjs'
2 |
3 | export type FeatureFlag = keyof typeof FEATURE_FLAGS
4 |
5 | export const FEATURE_FLAGS = {
6 | WATCHED_ADDRESSES:
7 | clientEnv.NEXT_PUBLIC_FEATURE_FLAG_WATCHED_ADDRESSES === 'true',
8 | } as const
9 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/_providers/query-client-provider.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
4 |
5 | const queryClient = new QueryClient()
6 |
7 | type Props = {
8 | children: React.ReactNode
9 | }
10 |
11 | function _QueryClientProvider(props: Props) {
12 | const { children } = props
13 |
14 | return (
15 | {children}
16 | )
17 | }
18 |
19 | export { _QueryClientProvider as QueryClientProvider }
20 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/_providers/wagmi-provider.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | import { WagmiProvider } from 'wagmi'
4 |
5 | import { config } from '../_config'
6 |
7 | type Props = {
8 | children: React.ReactNode
9 | }
10 |
11 | function _WagmiProvider(props: Props) {
12 | const { children } = props
13 |
14 | return {children}
15 | }
16 |
17 | export { _WagmiProvider as WagmiProvider }
18 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/_utils/group-by.ts:
--------------------------------------------------------------------------------
1 | export function groupBy(
2 | list: T[],
3 | getter: (input: T) => K,
4 | initialValue: Record
5 | ): Record {
6 | const grouped: Record = initialValue
7 |
8 | for (const item of list) {
9 | const key = getter(item)
10 | grouped[key] ??= []
11 | grouped[key].push(item)
12 | }
13 |
14 | return grouped
15 | }
16 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/_utils/match-search-filter.ts:
--------------------------------------------------------------------------------
1 | export const matchesSearchFilter = (word: string, searchFilter: string) => {
2 | return word.toLowerCase().includes(searchFilter.toLowerCase())
3 | }
4 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/error.tsx:
--------------------------------------------------------------------------------
1 | 'use client'
2 |
3 | export default function Error() {
4 | return app error
5 | }
6 |
--------------------------------------------------------------------------------
/apps/portfolio/src/app/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/status-im/status-web/aca00b0758ea8bd3b33a1e53bac432dc626afbfe/apps/portfolio/src/app/icon.png
--------------------------------------------------------------------------------
/apps/portfolio/src/app/not-found.tsx:
--------------------------------------------------------------------------------
1 | export default function NotFound() {
2 | return app not-found
3 | }
4 |
--------------------------------------------------------------------------------
/apps/portfolio/src/data/api.ts:
--------------------------------------------------------------------------------
1 | import 'server-only'
2 |
3 | import { createAPI } from '@status-im/wallet/data'
4 |
5 | let apiClient: Awaited> | undefined
6 |
7 | export async function getAPIClient() {
8 | if (!apiClient) {
9 | apiClient = await createAPI()
10 | }
11 |
12 | return apiClient
13 | }
14 |
--------------------------------------------------------------------------------
/apps/portfolio/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import config from '@status-im/wallet/tailwind.config'
2 |
3 | export default config
4 | // import type { Config } from 'tailwindcss'
5 |
6 | // export default {
7 | // presets: [config],
8 |
9 | // content: ['./src/**/*.{js,ts,jsx,tsx,mdx}'],
10 | // } satisfies Config
11 |
--------------------------------------------------------------------------------
/apps/portfolio/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://openapi.vercel.sh/vercel.json",
3 | "ignoreCommand": "git diff --quiet HEAD^ HEAD ../../{patches,package.json,turbo.json} ../../packages/{colors,icons,components,wallet} ./",
4 | "installCommand": "pnpm install --dir ../../ --frozen-lockfile",
5 | "buildCommand": "turbo run build --cwd ../../ --filter=portfolio..."
6 | }
7 |
--------------------------------------------------------------------------------
/apps/wallet/.env:
--------------------------------------------------------------------------------
1 | WXT_STATUS_API_URL="http://localhost:3030"
2 |
--------------------------------------------------------------------------------
/apps/wallet/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | .output
12 | stats.html
13 | stats-*.json
14 | .wxt
15 | web-ext.config.ts
16 |
17 | # Editor directories and files
18 | .vscode/*
19 | !.vscode/extensions.json
20 | .idea
21 | .DS_Store
22 | *.suo
23 | *.ntvs*
24 | *.njsproj
25 | *.sln
26 | *.sw?
27 |
28 | # local env files
29 | !.env.*
30 | .env*.local
31 |
--------------------------------------------------------------------------------
/apps/wallet/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "singleQuote": true,
4 | "arrowParens": "avoid",
5 | "plugins": ["prettier-plugin-tailwindcss"],
6 | "tailwindFunctions": ["cx", "cva"],
7 | "tailwindConfig": "./tailwind.config.ts"
8 | }
9 |
--------------------------------------------------------------------------------
/apps/wallet/env.d.ts:
--------------------------------------------------------------------------------
1 | // ///
2 |
3 | // // import 'vite/client'
4 |
5 | interface ImportMeta {
6 | readonly env: {
7 | readonly WXT_STATUS_API_URL: string
8 | readonly WXT_GETBLOCK_API_KEY: string
9 | readonly WXT_ETHERSCAN_API_KEY: string
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/apps/wallet/global.d.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable no-var */
2 |
3 | import type { createAPI } from './src/data/api'
4 | import type { encoder } from './src/data/encoder'
5 | import type { getKeystore } from './src/data/keystore'
6 | import type { getWalletCore } from './src/data/wallet'
7 |
8 | declare global {
9 | // todo?: limit to background script
10 | var api: Awaited>
11 | var storage: Awaited>
12 | var wallet: Awaited>
13 | var encoder: encoder
14 | }
15 |
16 | export {}
17 |
--------------------------------------------------------------------------------
/apps/wallet/postcss.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('postcss-load-config').Config} */
2 | export default {
3 | plugins: {
4 | 'tailwindcss/nesting': {},
5 | tailwindcss: {},
6 | autoprefixer: {},
7 | },
8 | }
9 |
--------------------------------------------------------------------------------
/apps/wallet/shell.nix:
--------------------------------------------------------------------------------
1 | {
2 | source ? builtins.fetchTarball {
3 | url = "https://github.com/NixOS/nixpkgs/archive/df27247e6f3e636c119e2610bf12d38b5e98cc79.tar.gz";
4 | sha256 = "sha256:0bbvimk7xb7akrx106mmsiwf9nzxnssisqmqffla03zz51d0kz2n";
5 | },
6 | pkgs ? import (source) {}
7 | }:
8 |
9 | pkgs.mkShell {
10 | name = "wallet-shell";
11 |
12 | buildInputs = with pkgs; [
13 | nodejs_20
14 | pnpm
15 | ];
16 | }
17 |
--------------------------------------------------------------------------------
/apps/wallet/src/data/encoder.ts:
--------------------------------------------------------------------------------
1 | export { TW as encoder } from '@trustwallet/wallet-core'
2 |
--------------------------------------------------------------------------------
/apps/wallet/src/modules/wallet-core-wasm.ts:
--------------------------------------------------------------------------------
1 | import { resolve } from 'node:path'
2 | import { defineWxtModule } from 'wxt/modules'
3 |
4 | export default defineWxtModule({
5 | setup(wxt) {
6 | wxt.hook('build:publicAssets', (_, assets) => {
7 | assets.push({
8 | absoluteSrc: resolve(
9 | 'node_modules/@trustwallet/wallet-core/dist/lib/wallet-core.wasm',
10 | ),
11 | relativeDest: 'wallet-core.wasm',
12 | })
13 | })
14 | },
15 | })
16 |
--------------------------------------------------------------------------------
/apps/wallet/src/providers/status.tsx:
--------------------------------------------------------------------------------
1 | import { StatusProvider } from '@status-im/components'
2 | import { Link } from '@tanstack/react-router'
3 |
4 | type Props = {
5 | children: React.ReactNode
6 | }
7 |
8 | function _StatusProvider(props: Props) {
9 | const { children } = props
10 |
11 | return {children}
12 | }
13 |
14 | export { _StatusProvider as StatusProvider }
15 |
--------------------------------------------------------------------------------
/apps/wallet/src/routes/index.tsx:
--------------------------------------------------------------------------------
1 | import { createFileRoute } from '@tanstack/react-router'
2 |
3 | export const Route = createFileRoute('/')({
4 | component: RouteComponent,
5 | head: () => ({
6 | meta: [
7 | {
8 | title: 'Extension | Wallet | Index',
9 | },
10 | ],
11 | }),
12 | })
13 |
14 | function RouteComponent() {
15 | return <>Index>
16 | }
17 |
--------------------------------------------------------------------------------
/apps/wallet/src/routes/onboarding/_layout.tsx:
--------------------------------------------------------------------------------
1 | import { createFileRoute, Outlet } from '@tanstack/react-router'
2 |
3 | export const Route = createFileRoute('/onboarding')({
4 | component: RouteComponent,
5 | beforeLoad: () => {
6 | // TODO: check if user is already onboarded
7 | // throw redirect({ to: '/' })
8 | },
9 | })
10 |
11 | function RouteComponent() {
12 | return
13 | }
14 |
--------------------------------------------------------------------------------
/apps/wallet/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["./.wxt/tsconfig.json"],
3 | "compilerOptions": {
4 | "allowImportingTsExtensions": true,
5 | "jsx": "react-jsx",
6 | "target": "ESNext",
7 | "module": "ESNext",
8 | "moduleResolution": "Bundler",
9 | // "paths": {
10 | // "@portfolio/*": ["../portfolio/src/*"],
11 | // // "@/*": ["../portfolio/src/*"],
12 | // },
13 | // "types": ["vite/client"],
14 | },
15 | "include": ["./**/*", "./.wxt/wxt.d.ts", "global.d.ts", "env.d.ts"],
16 | "exclude": ["node_modules", ".output"],
17 | }
18 |
--------------------------------------------------------------------------------
/apps/wallet/tsr.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "routesDirectory": "./src/routes",
3 | "generatedRouteTree": "./src/router.gen.ts",
4 | "routeFileIgnorePrefix": "-",
5 | "quoteStyle": "single"
6 | }
7 |
--------------------------------------------------------------------------------
/apps/wallet/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import { WxtVitest } from 'wxt/testing'
3 |
4 | export default defineConfig(() => {
5 | return {
6 | plugins: [WxtVitest()],
7 | test: {
8 | // environment: 'happy-dom',
9 | },
10 | }
11 | })
12 |
--------------------------------------------------------------------------------
/eslint.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('eslint').Linter.Config[]} */
2 | export default [
3 | {
4 | ignores: [
5 | '**/dist',
6 | '**/node_modules',
7 | '**/protos',
8 | '**/proto',
9 | '**/coverage',
10 | '**/storybook-static',
11 | ],
12 | },
13 | ]
14 |
--------------------------------------------------------------------------------
/packages/colors/eslint.config.mjs:
--------------------------------------------------------------------------------
1 | import configs from '@status-im/eslint-config'
2 |
3 | /** @type {import('eslint').Linter.Config[]} */
4 | export default [...configs]
5 |
--------------------------------------------------------------------------------
/packages/colors/src/blur.ts:
--------------------------------------------------------------------------------
1 | export const blur = {
2 | 'neutral-100/70': 'rgba(9 16 28 / 70%)',
3 | 'neutral-5/70': 'rgba(245 246 248 / 70%)',
4 | 'neutral-80/1': 'rgba(25 36 56 / 1%)',
5 | 'neutral-80/80': 'rgba(25 36 56 / 80%)',
6 | 'neutral-90/70': 'rgba(19 29 47 / 70%)',
7 | 'neutral-95/70': 'rgba(13 22 37 / 70%)',
8 | 'white/70': 'rgba(255 255 255 / 70%)',
9 | }
10 |
--------------------------------------------------------------------------------
/packages/colors/src/danger.ts:
--------------------------------------------------------------------------------
1 | export const danger = {
2 | '50': 'rgba(233 84 96 / 100%)',
3 | '50/5': 'rgba(233 84 96 / 5%)',
4 | '50/10': 'rgba(233 84 96 / 10%)',
5 | '50/20': 'rgba(233 84 96 / 20%)',
6 | '50/30': 'rgba(233 84 96 / 30%)',
7 | '50/40': 'rgba(233 84 96 / 40%)',
8 | '60': 'rgba(186 67 77 / 100%)',
9 | }
10 |
--------------------------------------------------------------------------------
/packages/colors/src/index.ts:
--------------------------------------------------------------------------------
1 | export { blur } from './blur'
2 | export { customisation } from './customisation'
3 | export { danger } from './danger'
4 | export { networks } from './networks'
5 | export { neutral } from './neutral'
6 | export { security } from './security'
7 | export { social } from './social'
8 | export { success } from './success'
9 | export { white } from './white'
10 |
--------------------------------------------------------------------------------
/packages/colors/src/networks.ts:
--------------------------------------------------------------------------------
1 | export const networks = {
2 | arbitrum: 'rgba(107 213 240 / 100%)',
3 | ethereum: 'rgba(117 142 235 / 100%)',
4 | hermez: 'rgba(235 132 98 / 100%)',
5 | optimism: 'rgba(231 110 110 / 100%)',
6 | polygon: 'rgba(173 113 243 / 100%)',
7 | unknown: 'rgba(238 242 245 / 100%)',
8 | 'x-dai': 'rgba(63 192 189 / 100%)',
9 | 'zk-sync': 'rgba(159 160 254 / 100%)',
10 | }
11 |
--------------------------------------------------------------------------------
/packages/colors/src/success.ts:
--------------------------------------------------------------------------------
1 | export const success = {
2 | '50': 'rgba(35 173 160 / 100%)',
3 | '50/5': 'rgba(35 173 160 / 5%)',
4 | '50/10': 'rgba(35 173 160 / 10%)',
5 | '50/20': 'rgba(35 173 160 / 20%)',
6 | '50/30': 'rgba(35 173 160 / 30%)',
7 | '50/40': 'rgba(35 173 160 / 40%)',
8 | '60': 'rgba(28 138 128 / 100%)',
9 | }
10 |
--------------------------------------------------------------------------------
/packages/colors/src/white.ts:
--------------------------------------------------------------------------------
1 | export const white = {
2 | '5': 'rgba(255 255 255 / 5%)',
3 | '10': 'rgba(255 255 255 / 10%)',
4 | '20': 'rgba(255 255 255 / 20%)',
5 | '30': 'rgba(255 255 255 / 30%)',
6 | '40': 'rgba(255 255 255 / 40%)',
7 | '50': 'rgba(255 255 255 / 50%)',
8 | '60': 'rgba(255 255 255 / 60%)',
9 | '80': 'rgba(255 255 255 / 80%)',
10 | '90': 'rgba(255 255 255 / 90%)',
11 | '100': 'rgba(255 255 255 / 100%)',
12 | }
13 |
--------------------------------------------------------------------------------
/packages/colors/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.base.json",
3 | "include": ["./src"],
4 |
5 | "compilerOptions": {
6 | "outDir": "./dist"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/packages/colors/vite.config.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | import { defineConfig } from 'vite'
4 |
5 | export default defineConfig(({ mode }) => {
6 | return {
7 | build: {
8 | target: 'es2020',
9 | lib: {
10 | entry: 'src/index.ts',
11 | formats: ['es', 'cjs'],
12 | fileName: format => `index.${format}.js`,
13 | },
14 | sourcemap: true,
15 | emptyOutDir: mode === 'production',
16 | },
17 | }
18 | })
19 |
--------------------------------------------------------------------------------
/packages/components/.env:
--------------------------------------------------------------------------------
1 | TAMAGUI_TARGET=web
2 | STORYBOOK_DISABLE_TELEMETRY=1
3 | STORYBOOK_ENABLE_CRASH_REPORTS=0
4 |
--------------------------------------------------------------------------------
/packages/components/.env.development:
--------------------------------------------------------------------------------
1 | STORYBOOK_DISABLE_TELEMETRY=1
2 | STORYBOOK_ENABLE_CRASH_REPORTS=0
3 |
--------------------------------------------------------------------------------
/packages/components/.env.production:
--------------------------------------------------------------------------------
1 | STORYBOOK_DISABLE_TELEMETRY=1
2 | STORYBOOK_ENABLE_CRASH_REPORTS=0
3 |
--------------------------------------------------------------------------------
/packages/components/.gitignore:
--------------------------------------------------------------------------------
1 | dist/
2 | .DS_Store
3 | THUMBS_DB
4 | node_modules/
5 | types/
6 |
7 | # local env files
8 | !.env.*
9 | .env*.local
10 |
--------------------------------------------------------------------------------
/packages/components/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "singleQuote": true,
4 | "arrowParens": "avoid",
5 | "plugins": ["prettier-plugin-tailwindcss"],
6 | "tailwindFunctions": ["cx", "cva"],
7 | "tailwindConfig": "./tailwind.config.ts"
8 | }
9 |
--------------------------------------------------------------------------------
/packages/components/.storybook/preview-head.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
11 |
--------------------------------------------------------------------------------
/packages/components/eslint.config.mjs:
--------------------------------------------------------------------------------
1 | import configs, { tailwindcssConfigs } from '@status-im/eslint-config'
2 |
3 | /** @type {import('eslint').Linter.Config[]} */
4 | export default [...configs, ...tailwindcssConfigs]
5 |
--------------------------------------------------------------------------------
/packages/components/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/packages/components/public/assets/background-blur.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/status-im/status-web/aca00b0758ea8bd3b33a1e53bac432dc626afbfe/packages/components/public/assets/background-blur.png
--------------------------------------------------------------------------------
/packages/components/src/avatar/index.tsx:
--------------------------------------------------------------------------------
1 | export * from './avatar'
2 |
--------------------------------------------------------------------------------
/packages/components/src/button/index.tsx:
--------------------------------------------------------------------------------
1 | export { Button } from './button'
2 |
--------------------------------------------------------------------------------
/packages/components/src/checkbox/index.tsx:
--------------------------------------------------------------------------------
1 | export type { CheckboxProps } from './checkbox'
2 | export { Checkbox } from './checkbox'
3 |
--------------------------------------------------------------------------------
/packages/components/src/context-tag/index.tsx:
--------------------------------------------------------------------------------
1 | export { ContextTag, type ContextTagProps } from './context-tag'
2 |
--------------------------------------------------------------------------------
/packages/components/src/counter/index.tsx:
--------------------------------------------------------------------------------
1 | export type { CounterProps } from './counter'
2 | export { Counter } from './counter'
3 |
--------------------------------------------------------------------------------
/packages/components/src/dropdown-button/index.tsx:
--------------------------------------------------------------------------------
1 | export type { DropdownButtonProps } from './dropdown-button'
2 | export { DropdownButton } from './dropdown-button'
3 |
--------------------------------------------------------------------------------
/packages/components/src/dropdown-menu/index.tsx:
--------------------------------------------------------------------------------
1 | export * as DropdownMenu from './dropdown-menu'
2 |
--------------------------------------------------------------------------------
/packages/components/src/icon-button/index.tsx:
--------------------------------------------------------------------------------
1 | export { IconButton, type IconButtonProps } from './icon-button'
2 |
--------------------------------------------------------------------------------
/packages/components/src/input/index.tsx:
--------------------------------------------------------------------------------
1 | export { Input, type InputProps } from './input'
2 |
--------------------------------------------------------------------------------
/packages/components/src/popover/index.tsx:
--------------------------------------------------------------------------------
1 | export * as Popover from './popover'
2 |
--------------------------------------------------------------------------------
/packages/components/src/provider/index.tsx:
--------------------------------------------------------------------------------
1 | export { StatusProvider, useConfig } from './provider'
2 |
--------------------------------------------------------------------------------
/packages/components/src/segmented-control/index.tsx:
--------------------------------------------------------------------------------
1 | export * as SegmentedControl from './segmented-control'
2 |
--------------------------------------------------------------------------------
/packages/components/src/shortcut/index.tsx:
--------------------------------------------------------------------------------
1 | export * from './shortcut'
2 |
--------------------------------------------------------------------------------
/packages/components/src/skeleton/index.tsx:
--------------------------------------------------------------------------------
1 | export { Skeleton } from './skeleton'
2 |
--------------------------------------------------------------------------------
/packages/components/src/step/index.tsx:
--------------------------------------------------------------------------------
1 | export { Step } from './step'
2 |
--------------------------------------------------------------------------------
/packages/components/src/switch/index.tsx:
--------------------------------------------------------------------------------
1 | export type { SwitchProps } from './switch'
2 | export { Switch } from './switch'
3 |
--------------------------------------------------------------------------------
/packages/components/src/tabs/index.tsx:
--------------------------------------------------------------------------------
1 | export * as Tabs from './tabs'
2 |
--------------------------------------------------------------------------------
/packages/components/src/tag/index.tsx:
--------------------------------------------------------------------------------
1 | export { Tag } from './tag'
2 |
--------------------------------------------------------------------------------
/packages/components/src/text/index.tsx:
--------------------------------------------------------------------------------
1 | export { Text, type TextProps } from './text'
2 |
--------------------------------------------------------------------------------
/packages/components/src/toast/index.tsx:
--------------------------------------------------------------------------------
1 | export type { ToastProps } from './toast'
2 | export { Toast } from './toast'
3 | export { ToastContainer, useToast } from './toast-container'
4 |
--------------------------------------------------------------------------------
/packages/components/src/tooltip/index.tsx:
--------------------------------------------------------------------------------
1 | export type { TooltipProps } from './tooltip'
2 | export { Tooltip } from './tooltip'
3 |
--------------------------------------------------------------------------------
/packages/components/src/types.ts:
--------------------------------------------------------------------------------
1 | import type { customisation } from '@status-im/colors'
2 |
3 | export type IconElement = React.ReactElement<
4 | React.ComponentPropsWithoutRef<'svg'>
5 | >
6 |
7 | export type CustomisationColorType = keyof typeof customisation
8 |
9 | export type Prettify = {
10 | [K in keyof T]: T[K]
11 | } & {}
12 |
--------------------------------------------------------------------------------
/packages/components/src/utils/variants.ts:
--------------------------------------------------------------------------------
1 | export { cva as cva, type VariantProps } from 'cva'
2 |
--------------------------------------------------------------------------------
/packages/components/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.base",
3 | "include": ["src", "tailwind.config.ts", ".storybook"],
4 | "compilerOptions": {
5 | "jsx": "preserve",
6 | "outDir": "./dist"
7 | },
8 | "references": []
9 | }
10 |
--------------------------------------------------------------------------------
/packages/components/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://openapi.vercel.sh/vercel.json",
3 | "ignoreCommand": "git diff --quiet HEAD^ HEAD ../../{patches,package.json,turbo.json} ../../packages/{colors,icons} ./",
4 | "installCommand": "pnpm install --dir ../../ --frozen-lockfile",
5 | "buildCommand": "turbo run build --cwd ../../ --filter=components... && pnpm storybook:build"
6 | }
7 |
--------------------------------------------------------------------------------
/packages/eslint-config/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # @status-im/eslint-config
2 |
3 | ## 1.0.2
4 |
5 | ### Patch Changes
6 |
7 | - 3c71b8c: update ESLint
8 |
9 | ## 1.0.1
10 |
11 | ### Patch Changes
12 |
13 | - 2fad122: use pnpm and update node
14 |
15 | ## 1.0.0
16 |
17 | ### Major Changes
18 |
19 | - edfdfd6: switch to tailwind
20 |
21 | ## 0.3.0
22 |
23 | ### Minor Changes
24 |
25 | - 08791fc: include build step
26 |
27 | ## 0.2.0
28 |
29 | ### Minor Changes
30 |
31 | - 181faba: prepare packages for release
32 |
--------------------------------------------------------------------------------
/packages/eslint-config/eslint.config.mjs:
--------------------------------------------------------------------------------
1 | import js from '@eslint/js'
2 |
3 | /** @type {import('eslint').Linter.Config[]} */
4 | export default [
5 | {
6 | ...js.configs.recommended,
7 | files: ['**/*.js', '**/*.mjs', '**/*.cjs'],
8 | },
9 | ]
10 |
--------------------------------------------------------------------------------
/packages/icons/eslint.config.mjs:
--------------------------------------------------------------------------------
1 | import configs from '@status-im/eslint-config'
2 |
3 | /** @type {import('eslint').Linter.Config[]} */
4 | export default [
5 | ...configs,
6 | {
7 | ignores: ['dist', 'index.js', 'index.es.js'],
8 | },
9 | ]
10 |
--------------------------------------------------------------------------------
/packages/icons/src/12/check-large-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgCheckLargeIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgCheckLargeIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/12/chevron-down-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgChevronDownIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgChevronDownIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/12/chevron-left-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgChevronLeftIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgChevronLeftIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/12/chevron-right-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgChevronRightIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgChevronRightIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/12/chevron-top-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgChevronTopIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgChevronTopIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/12/colour-preview-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgColourPreviewIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgColourPreviewIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/12/less-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgLessIcon = (props: SVGProps) => (
4 |
21 | )
22 | export default SvgLessIcon
23 |
--------------------------------------------------------------------------------
/packages/icons/src/12/notification-badge-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgNotificationBadgeIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgNotificationBadgeIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/12/on-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgOnIcon = (props: SVGProps) => (
4 |
20 | )
21 | export default SvgOnIcon
22 |
--------------------------------------------------------------------------------
/packages/icons/src/12/play-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgPlayIcon = (props: SVGProps) => (
4 |
19 | )
20 | export default SvgPlayIcon
21 |
--------------------------------------------------------------------------------
/packages/icons/src/12/sent-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgSentIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgSentIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/12/stop-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgStopIcon = (props: SVGProps) => (
4 |
19 | )
20 | export default SvgStopIcon
21 |
--------------------------------------------------------------------------------
/packages/icons/src/12/volume-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgVolumeIcon = (props: SVGProps) => (
4 |
20 | )
21 | export default SvgVolumeIcon
22 |
--------------------------------------------------------------------------------
/packages/icons/src/16/chart-line-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgChartLineIcon = (props: SVGProps) => (
4 |
20 | )
21 | export default SvgChartLineIcon
22 |
--------------------------------------------------------------------------------
/packages/icons/src/16/check-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgCheckIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgCheckIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/16/chevron-down-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgChevronDownIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgChevronDownIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/16/chevron-left-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgChevronLeftIcon = (props: SVGProps) => (
4 |
20 | )
21 | export default SvgChevronLeftIcon
22 |
--------------------------------------------------------------------------------
/packages/icons/src/16/chevron-right-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgChevronRightIcon = (props: SVGProps) => (
4 |
20 | )
21 | export default SvgChevronRightIcon
22 |
--------------------------------------------------------------------------------
/packages/icons/src/16/chevron-top-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgChevronTopIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgChevronTopIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/16/cover-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgCoverIcon = (props: SVGProps) => (
4 |
20 | )
21 | export default SvgCoverIcon
22 |
--------------------------------------------------------------------------------
/packages/icons/src/16/notification-badge-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgNotificationBadgeIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgNotificationBadgeIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/16/offline-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgOfflineIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgOfflineIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/16/offline-left-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgOfflineLeftIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgOfflineLeftIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/16/online-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgOnlineIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgOnlineIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/16/online-left-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgOnlineLeftIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgOnlineLeftIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/16/remove-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgRemoveIcon = (props: SVGProps) => (
4 |
21 | )
22 | export default SvgRemoveIcon
23 |
--------------------------------------------------------------------------------
/packages/icons/src/16/volume-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgVolumeIcon = (props: SVGProps) => (
4 |
20 | )
21 | export default SvgVolumeIcon
22 |
--------------------------------------------------------------------------------
/packages/icons/src/20/bullet-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgBulletIcon = (props: SVGProps) => (
4 |
19 | )
20 | export default SvgBulletIcon
21 |
--------------------------------------------------------------------------------
/packages/icons/src/20/check-circle-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgCheckCircleIcon = (props: SVGProps) => (
4 |
17 | )
18 | export default SvgCheckCircleIcon
19 |
--------------------------------------------------------------------------------
/packages/icons/src/20/check-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgCheckIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgCheckIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/20/chevron-down-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgChevronDownIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgChevronDownIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/20/chevron-left-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgChevronLeftIcon = (props: SVGProps) => (
4 |
20 | )
21 | export default SvgChevronLeftIcon
22 |
--------------------------------------------------------------------------------
/packages/icons/src/20/chevron-right-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgChevronRightIcon = (props: SVGProps) => (
4 |
20 | )
21 | export default SvgChevronRightIcon
22 |
--------------------------------------------------------------------------------
/packages/icons/src/20/chevron-top-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgChevronTopIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgChevronTopIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/20/flash-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgFlashIcon = (props: SVGProps) => (
4 |
20 | )
21 | export default SvgFlashIcon
22 |
--------------------------------------------------------------------------------
/packages/icons/src/20/hold-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgHoldIcon = (props: SVGProps) => (
4 |
17 | )
18 | export default SvgHoldIcon
19 |
--------------------------------------------------------------------------------
/packages/icons/src/20/hypen-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgHypenIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgHypenIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/20/minimize-windows-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgMinimizeWindowsIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgMinimizeWindowsIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/20/neutral-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgNeutralIcon = (props: SVGProps) => (
4 |
17 | )
18 | export default SvgNeutralIcon
19 |
--------------------------------------------------------------------------------
/packages/icons/src/20/notification-badge-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgNotificationBadgeIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgNotificationBadgeIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/20/offline-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgOfflineIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgOfflineIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/20/offline-left-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgOfflineLeftIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgOfflineLeftIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/20/online-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgOnlineIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgOnlineIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/20/online-left-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgOnlineLeftIcon = (props: SVGProps) => (
4 |
16 | )
17 | export default SvgOnlineLeftIcon
18 |
--------------------------------------------------------------------------------
/packages/icons/src/20/play-media-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgPlayMediaIcon = (props: SVGProps) => (
4 |
19 | )
20 | export default SvgPlayMediaIcon
21 |
--------------------------------------------------------------------------------
/packages/icons/src/20/remove-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgRemoveIcon = (props: SVGProps) => (
4 |
21 | )
22 | export default SvgRemoveIcon
23 |
--------------------------------------------------------------------------------
/packages/icons/src/20/stop-media-icon.tsx:
--------------------------------------------------------------------------------
1 | import type { SVGProps } from 'react'
2 |
3 | const SvgStopMediaIcon = (props: SVGProps) => (
4 |
19 | )
20 | export default SvgStopMediaIcon
21 |
--------------------------------------------------------------------------------
/packages/icons/src/reactions/index.ts:
--------------------------------------------------------------------------------
1 | export { default as AngryIcon } from './angry-icon'
2 | export { default as LaughIcon } from './laugh-icon'
3 | export { default as LoveIcon } from './love-icon'
4 | export { default as SadIcon } from './sad-icon'
5 | export { default as ThumbsDownIcon } from './thumbs-down-icon'
6 | export { default as ThumbsUpIcon } from './thumbs-up-icon'
7 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/active-members-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/add-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/arrow-down-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/arrow-left&right-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/arrow-left-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/arrow-right-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/arrow-top-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/check-circle-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/check-large-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/chevron-down-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/chevron-left-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/chevron-right-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/chevron-top-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/close-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/colour-preview-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/delivered-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/download-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/dropdown-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/external-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/flashlight-icon.svg:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/hold-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/italic-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/key-control-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/key-option-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/key-space-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/key-tab-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/less-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/mutual-contact-icon.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/neutral-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/notification-badge-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/off-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/on-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/options-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/pending-icon.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/pending-state-icon.svg:
--------------------------------------------------------------------------------
1 |
22 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/play-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/positive-state-icon.svg:
--------------------------------------------------------------------------------
1 |
22 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/progress-100-icon.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/progress-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/pullup-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/seed-phrase-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/sent-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/share-icon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/stop-icon.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/timeout-icon.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/packages/icons/svg/12/volume-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/active-members-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/add-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/arrow-down-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/arrow-left-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/arrow-right-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/arrow-top-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/chart-line-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/check-green-icon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/check-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/chevron-down-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/chevron-left-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/chevron-right-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/chevron-top-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/chevrons-left-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/chevrons-right-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/close-circle-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/close-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/cover-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/decline-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/done-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/dropdown-icon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/external-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/focal-point-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/forward-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/git-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/hashtag-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/history-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/line-chart-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/messages-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/more-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/negative-state-icon.svg:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/node-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/notification-badge-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/offline-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/offline-left-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/online-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/online-left-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/options-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/pending-state-icon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/positive-state-icon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/progress-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/pullup-icon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/refresh-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/remove-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/reply-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/save-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/search-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/sort-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/threads-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/unread-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/volume-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/16/warning-red-icon.svg:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/active-members-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/add-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/add-sm-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/add-small-icon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/add-token-icon.svg:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/alert-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/arrow-down-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/arrow-left-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/arrow-right-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/arrow-top-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/automatic-icon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/block-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/bullet-icon.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/check-circle-icon.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/check-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/chevron-down-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/chevron-left-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/chevron-right-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/chevron-top-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/chevrons-left-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/chevrons-right-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/clear-icon.svg:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/close-circle-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/close-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/close-mac-os-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/close-windows-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/code-data-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/code-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/colombia-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/correct-icon.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/cross-circle-icon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/decline-icon.svg:
--------------------------------------------------------------------------------
1 |
20 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/destroy-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/done-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/download-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/drag-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/dropdown-icon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/duration-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/england-icon.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/external-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/favourite-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/feed-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/flag-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/flags-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/flash-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/flash-off-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/flashlight-off-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/focus-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/forward-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/france-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/fullscreen-mac-os-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/hashtag-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/history-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/hold-icon.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/hypen-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/incorrect-icon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/info-badge-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/info-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/intermediate-circle-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/italic-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/italy-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/keycard-logo-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/maximize-windows-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/mention-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/menu-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/messages-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/messenger-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/minimize-mac-os-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/minimize-windows-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/mutual-contact-icon.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/negative-state-icon.svg:
--------------------------------------------------------------------------------
1 |
23 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/netherlands-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/neutral-icon.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/new-message-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/node-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/notification-badge-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/objects-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/offline-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/offline-left-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/online-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/online-left-icon.svg:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/options-circle-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/options-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/pause-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/pause-media-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/pending-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/pending-state-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/play-media-icon.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/positive-state-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/pullup-icon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/recent-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/refresh-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/remove-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/reorder-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/reply-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/russia-icon.svg:
--------------------------------------------------------------------------------
1 |
18 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/search-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/seed-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/sort-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/stop-media-icon.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/switch-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/tablet-icon.svg:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/unblock-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/unread-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/untrustworthy-icon.svg:
--------------------------------------------------------------------------------
1 |
19 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/windows-icon.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/zoom-in-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/20/zoom-out-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/social/flickr-icon.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/packages/icons/svg/social/twitch-icon.svg:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/packages/icons/svg/social/twitter-icon.svg:
--------------------------------------------------------------------------------
1 |
19 |
--------------------------------------------------------------------------------
/packages/icons/svgr.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('@svgr/core').Config} */
2 | module.exports = {
3 | typescript: true,
4 | jsxRuntime: 'automatic',
5 | expandProps: 'end',
6 | filenameCase: 'kebab',
7 | svgProps: {
8 | 'aria-hidden': true,
9 | focusable: false,
10 | },
11 | // note: SVGO transformation is handled in the sync script
12 | svgo: false,
13 | }
14 |
--------------------------------------------------------------------------------
/packages/icons/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.base.json",
3 | "include": ["./src"]
4 | }
5 |
--------------------------------------------------------------------------------
/packages/status-js/buf.gen.yaml:
--------------------------------------------------------------------------------
1 | version: v1
2 | plugins:
3 | - name: es
4 | path: ./node_modules/.bin/protoc-gen-es
5 | opt: target=ts
6 | out: ./src/protos
7 |
--------------------------------------------------------------------------------
/packages/status-js/eslint.config.mjs:
--------------------------------------------------------------------------------
1 | import configs from '@status-im/eslint-config'
2 |
3 | /** @type {import('eslint').Linter.Config[]} */
4 | export default [
5 | ...configs,
6 | {
7 | files: ['./src/protos/**/*_pb.ts'],
8 | rules: {
9 | 'eslint-comments/disable-enable-pair': 'off',
10 | 'eslint-comments/no-unlimited-disable': 'off',
11 | },
12 | },
13 | ]
14 |
--------------------------------------------------------------------------------
/packages/status-js/src/client/community/get-chat-uuid.ts:
--------------------------------------------------------------------------------
1 | export function getChatUuid(chatId: string) {
2 | return chatId.slice(68)
3 | }
4 |
--------------------------------------------------------------------------------
/packages/status-js/src/client/community/is-encrypted.ts:
--------------------------------------------------------------------------------
1 | import {
2 | type CommunityDescription,
3 | CommunityTokenPermission_Type,
4 | } from '../../protos/communities_pb'
5 |
6 | export function isEncrypted(
7 | tokenPermissions: CommunityDescription['tokenPermissions'],
8 | ): boolean {
9 | return Object.values(tokenPermissions).some(
10 | permission =>
11 | permission.type === CommunityTokenPermission_Type.BECOME_MEMBER,
12 | )
13 | }
14 |
--------------------------------------------------------------------------------
/packages/status-js/src/helpers/contains-only-emoji.ts:
--------------------------------------------------------------------------------
1 | // todo?: should ignore whitespaces with replace(/\s+/g, '').trim()
2 | /**
3 | * https://www.unicode.org/reports/tr51/#def_emoji_presentation
4 | */
5 | export function containsOnlyEmoji(text: string): boolean {
6 | return /^\p{Emoji_Presentation}+$/gu.test(text)
7 | }
8 |
--------------------------------------------------------------------------------
/packages/status-js/src/helpers/get-difference-by-keys.ts:
--------------------------------------------------------------------------------
1 | export function getDifferenceByKeys>(
2 | a: T,
3 | b: T,
4 | ): T {
5 | const initialValue: Record = {}
6 |
7 | const result = Object.entries(a).reduce((result, [key, value]) => {
8 | if (!b[key]) {
9 | result[key] = value
10 | }
11 |
12 | return result
13 | }, initialValue)
14 |
15 | return result as T
16 | }
17 |
--------------------------------------------------------------------------------
/packages/status-js/src/protos/buf.yaml:
--------------------------------------------------------------------------------
1 | version: v1
2 | breaking:
3 | use:
4 | - FILE
5 | lint:
6 | use:
7 | - DEFAULT
8 | except:
9 | - ENUM_ZERO_VALUE_SUFFIX
10 | - ENUM_VALUE_PREFIX
11 |
--------------------------------------------------------------------------------
/packages/status-js/src/protos/pin-message.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | import "enums.proto";
4 |
5 | message PinMessage {
6 | uint64 clock = 1;
7 | string message_id = 2;
8 | string chat_id = 3;
9 | bool pinned = 4;
10 | // The type of message (public/one-to-one/private-group-chat)
11 | MessageType message_type = 5;
12 | }
13 |
--------------------------------------------------------------------------------
/packages/status-js/src/protos/segment-message.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | message SegmentMessage {
4 | // hash of the entire original message
5 | bytes entire_message_hash = 1;
6 | // Index of this segment within the entire original message
7 | uint32 index = 2;
8 | // Total number of segments the entire original message is divided into
9 | uint32 segments_count = 3;
10 | // The payload data for this particular segment
11 | bytes payload = 4;
12 | }
13 |
--------------------------------------------------------------------------------
/packages/status-js/src/request-client/indices-to-tags.ts:
--------------------------------------------------------------------------------
1 | import { tags as tagsMap } from './tags'
2 |
3 | import type { Tag } from './map-community'
4 |
5 | export const indicesToTags = (indices: number[]) => {
6 | const tagsMapByIndex = Object.entries(tagsMap)
7 |
8 | return indices.reduce((tags, index) => {
9 | const tag = tagsMapByIndex[index]
10 |
11 | if (!tag) {
12 | return tags
13 | }
14 |
15 | tags.push({ text: tag[0], emoji: tag[1] })
16 |
17 | return tags
18 | }, [])
19 | }
20 |
--------------------------------------------------------------------------------
/packages/status-js/src/request-client/tags-to-indices.test.ts:
--------------------------------------------------------------------------------
1 | import { expect, test } from 'vitest'
2 |
3 | import { tagsToIndices } from './tags-to-indices'
4 |
5 | test('should return tags for indices', () => {
6 | expect(tagsToIndices(['Art', 'Blockchain', 'Books & blogs'])).toEqual([
7 | 1, 2, 3,
8 | ])
9 | })
10 |
11 | test('should not return tags for no indices', () => {
12 | expect(tagsToIndices([])).toEqual([])
13 | })
14 |
15 | test('should not return tags for unknown indices', () => {
16 | expect(tagsToIndices(['foo', 'bar'])).toEqual([])
17 | })
18 |
--------------------------------------------------------------------------------
/packages/status-js/src/request-client/tags-to-indices.ts:
--------------------------------------------------------------------------------
1 | import { tags as tagsMap } from './tags'
2 |
3 | export const tagsToIndices = (tags: string[]): number[] => {
4 | const tagsMapByIndex = Object.entries(tagsMap)
5 |
6 | return tags.reduce((indices, tag) => {
7 | const index = tagsMapByIndex.findIndex(([text]) => text === tag)
8 |
9 | if (index !== -1) {
10 | indices.push(index)
11 | }
12 |
13 | return indices
14 | }, [])
15 | }
16 |
--------------------------------------------------------------------------------
/packages/status-js/src/utils/compress-public-key.ts:
--------------------------------------------------------------------------------
1 | import * as secp from 'ethereum-cryptography/secp256k1'
2 |
3 | export function compressPublicKey(publicKey: string): string {
4 | try {
5 | const pk = publicKey.replace(/^0[xX]/, '') // ensures hexadecimal digits without "base prefix"
6 | return secp.Point.fromHex(pk).toHex(true)
7 | } catch {
8 | throw new Error('Invalid public key')
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/packages/status-js/src/utils/decompress-public-key.ts:
--------------------------------------------------------------------------------
1 | import * as secp from 'ethereum-cryptography/secp256k1'
2 |
3 | export function decompressPublicKey(publicKey: string): string {
4 | try {
5 | const pk = publicKey.replace(/^0[xX]/, '') // ensures hexadecimal digits without "base prefix"
6 | return secp.Point.fromHex(pk).toHex()
7 | } catch {
8 | throw new Error('Invalid public key')
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/packages/status-js/src/utils/get-next-clock.ts:
--------------------------------------------------------------------------------
1 | export const getNextClock = (currentClock = 0n): bigint => {
2 | const now = BigInt(Date.now()) // timestamp
3 | const nextClock = currentClock < now ? now : currentClock + 1n
4 |
5 | return nextClock
6 | }
7 |
--------------------------------------------------------------------------------
/packages/status-js/src/utils/id-to-content-topic.test.ts:
--------------------------------------------------------------------------------
1 | import { expect, test } from 'vitest'
2 |
3 | import { idToContentTopic } from './id-to-content-topic'
4 |
5 | test('should return content topic', () => {
6 | expect(idToContentTopic).toBeDefined()
7 | })
8 |
--------------------------------------------------------------------------------
/packages/status-js/src/utils/is-clock-valid.ts:
--------------------------------------------------------------------------------
1 | const MAX_OFFSET = BigInt(120 * 1000)
2 |
3 | export function isClockValid(
4 | messageClock: bigint,
5 | messageTimestamp: Date,
6 | ): boolean {
7 | if (messageClock <= 0) {
8 | return false
9 | }
10 |
11 | if (messageClock > BigInt(messageTimestamp.getTime()) + MAX_OFFSET) {
12 | return false
13 | }
14 |
15 | return true
16 | }
17 |
--------------------------------------------------------------------------------
/packages/status-js/src/utils/payload-to-id.ts:
--------------------------------------------------------------------------------
1 | import { keccak256 } from 'ethereum-cryptography/keccak'
2 | import { bytesToHex, concatBytes } from 'ethereum-cryptography/utils'
3 |
4 | export function payloadToId(
5 | payload: Uint8Array,
6 | publicKey: Uint8Array,
7 | ): string {
8 | const hash = keccak256(concatBytes(publicKey, payload)) // order matters
9 | const hex = bytesToHex(hash)
10 |
11 | return `0x${hex}`
12 | }
13 |
--------------------------------------------------------------------------------
/packages/status-js/src/utils/public-key-to-eth-address.test.ts:
--------------------------------------------------------------------------------
1 | import { expect, test } from 'vitest'
2 |
3 | import { publicKeyToETHAddress } from './public-key-to-eth-address'
4 |
5 | test('should return ETH address from public key', () => {
6 | expect(
7 | publicKeyToETHAddress(
8 | '0x02bcbe39785b55a22383f82ac631ea7500e204627369c4ea01d9296af0ea573f57',
9 | ),
10 | ).toEqual('0x0A1ec0002dDB927B03049F1aD8D589aBEA4Ba4b3')
11 | })
12 |
--------------------------------------------------------------------------------
/packages/status-js/src/utils/public-key-to-eth-address.ts:
--------------------------------------------------------------------------------
1 | import { ethers } from 'ethers'
2 |
3 | import { deserializePublicKey } from './deserialize-public-key'
4 |
5 | export function publicKeyToETHAddress(publicKey: string): string {
6 | const key = deserializePublicKey(publicKey, {
7 | compress: false,
8 | })
9 | const address = ethers.computeAddress(key)
10 |
11 | return address
12 | }
13 |
--------------------------------------------------------------------------------
/packages/status-js/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.base.json",
3 | "include": ["src"],
4 | "compilerOptions": {
5 | "outDir": "./dist",
6 | "declarationDir": "./dist/types",
7 |
8 | // todo: turn on?
9 | "noImplicitReturns": false,
10 | "noPropertyAccessFromIndexSignature": false
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/packages/wallet/.env:
--------------------------------------------------------------------------------
1 | INFURA_API_KEY=""
2 | ALCHEMY_API_KEY=""
3 | COINGECKO_API_KEY=""
4 | CRYPTOCOMPARE_API_KEY=""
5 | MERCURYO_SECRET_KEY=""
6 |
--------------------------------------------------------------------------------
/packages/wallet/.gitignore:
--------------------------------------------------------------------------------
1 | dist/
2 | .DS_Store
3 | THUMBS_DB
4 | node_modules/
5 | types/
6 |
7 | # local env files
8 | !.env.*
9 | .env*.local
10 |
--------------------------------------------------------------------------------
/packages/wallet/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "semi": false,
3 | "singleQuote": true,
4 | "arrowParens": "avoid",
5 | "plugins": ["prettier-plugin-tailwindcss"],
6 | "tailwindFunctions": ["cx", "cva"],
7 | "tailwindConfig": "./tailwind.config.ts"
8 | }
9 |
--------------------------------------------------------------------------------
/packages/wallet/eslint.config.mjs:
--------------------------------------------------------------------------------
1 | import configs, { tailwindcssConfigs } from '@status-im/eslint-config'
2 | import globals from 'globals'
3 |
4 | /** @type {import('eslint').Linter.Config[]} */
5 | export default [
6 | ...configs,
7 | ...tailwindcssConfigs,
8 | {
9 | files: ['**/*.ts', '**/*.mts', '**/*.mjs', '**/*.tsx'],
10 | languageOptions: {
11 | globals: {
12 | ...globals.browser,
13 | ...globals.node,
14 | },
15 | },
16 | },
17 | ]
18 |
--------------------------------------------------------------------------------
/packages/wallet/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
6 |
--------------------------------------------------------------------------------
/packages/wallet/postcss.config.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable-next-line no-undef */
2 | module.exports = {
3 | plugins: {
4 | tailwindcss: {},
5 | autoprefixer: {},
6 | },
7 | }
8 |
--------------------------------------------------------------------------------
/packages/wallet/src/components/image/index.ts:
--------------------------------------------------------------------------------
1 | export type { ImageProps } from './image'
2 | export { Image } from './image'
3 | export type * from './types'
4 |
--------------------------------------------------------------------------------
/packages/wallet/src/components/shorten-address/index.tsx:
--------------------------------------------------------------------------------
1 | type Props = {
2 | address: string
3 | }
4 |
5 | export const shortenAddress = (address: string) => {
6 | const prefix = address.slice(0, 5)
7 | const suffix = address.slice(-4)
8 |
9 | return `${prefix}...${suffix}`
10 | }
11 |
12 | const ShortenAddress = ({ address }: Props) => {
13 | const shortenedAddress = shortenAddress(address)
14 |
15 | return shortenedAddress
16 | }
17 |
18 | export { ShortenAddress }
19 | export type { Props as ShortenAddressProps }
20 |
--------------------------------------------------------------------------------
/packages/wallet/src/data/api/index.ts:
--------------------------------------------------------------------------------
1 | import { createCallerFactory, router } from './lib/trpc'
2 | import { assetsRouter as assets } from './routers/assets'
3 | import { collectiblesRouter as collectibles } from './routers/collectibles'
4 |
5 | export const apiRouter = router({
6 | assets,
7 | collectibles,
8 | })
9 |
10 | export type ApiRouter = typeof apiRouter
11 |
12 | export const createCaller: ReturnType> =
13 | createCallerFactory(apiRouter)
14 |
--------------------------------------------------------------------------------
/packages/wallet/src/data/api/types.ts:
--------------------------------------------------------------------------------
1 | import type { ApiRouter } from '.'
2 | import type { Collectible } from './routers/collectibles'
3 | import type { inferRouterInputs, inferRouterOutputs } from '@trpc/server'
4 |
5 | type ApiInput = inferRouterInputs
6 | type ApiOutput = inferRouterOutputs
7 |
8 | export type { ApiInput, ApiOutput, ApiRouter }
9 |
10 | export type NetworkType =
11 | | 'ethereum'
12 | | 'optimism'
13 | | 'arbitrum'
14 | | 'base'
15 | | 'polygon'
16 | | 'bsc'
17 |
18 | export type { Collectible }
19 |
--------------------------------------------------------------------------------
/packages/wallet/src/data/index.ts:
--------------------------------------------------------------------------------
1 | export { type ApiRouter, apiRouter } from './api'
2 | export type { ApiInput, ApiOutput, Collectible, NetworkType } from './api/types'
3 | export { createAPI } from './trpc/api'
4 |
--------------------------------------------------------------------------------
/packages/wallet/src/data/trpc/api.ts:
--------------------------------------------------------------------------------
1 | // import 'server-only'
2 |
3 | import { cache } from 'react'
4 |
5 | import { headers as nextHeaders } from 'next/headers'
6 |
7 | import { createCaller } from '../api'
8 |
9 | const createContext = cache(async () => {
10 | const headers = new Headers(await nextHeaders())
11 |
12 | return {
13 | headers,
14 | }
15 | })
16 |
17 | export async function createAPI() {
18 | const ctx = await createContext()
19 | const api = createCaller(ctx)
20 |
21 | return api
22 | }
23 |
--------------------------------------------------------------------------------
/packages/wallet/src/types.ts:
--------------------------------------------------------------------------------
1 | import type { customisation } from '@status-im/colors'
2 |
3 | export type IconElement = React.ReactElement<
4 | React.ComponentPropsWithoutRef<'svg'>
5 | >
6 |
7 | export type CustomisationColorType = keyof typeof customisation
8 |
9 | export type Prettify = {
10 | [K in keyof T]: T[K]
11 | } & {}
12 |
--------------------------------------------------------------------------------
/packages/wallet/src/utils/variants.ts:
--------------------------------------------------------------------------------
1 | export { cva as cva, type VariantProps } from 'cva'
2 |
--------------------------------------------------------------------------------
/packages/wallet/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tsconfig.base",
3 | "include": [
4 | "src",
5 | "tailwind.config.ts",
6 | ".storybook",
7 | "next-env.d.ts",
8 | "**/*.json"
9 | ],
10 | "compilerOptions": {
11 | "jsx": "preserve",
12 | "outDir": "./dist",
13 | "allowJs": true,
14 | "plugins": [{ "name": "next" }]
15 | },
16 | "references": []
17 | }
18 |
--------------------------------------------------------------------------------
/packages/wallet/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://openapi.vercel.sh/vercel.json",
3 | "ignoreCommand": "git diff --quiet HEAD^ HEAD ../../{patches,package.json,turbo.json} ../../packages/{colors,icons} ./",
4 | "installCommand": "pnpm install --dir ../../ --frozen-lockfile",
5 | "buildCommand": "turbo run build --cwd ../../ --filter=components... && pnpm storybook:build"
6 | }
7 |
--------------------------------------------------------------------------------
/patches/@libp2p__bootstrap@9.0.10.patch:
--------------------------------------------------------------------------------
1 | diff --git a/package.json b/package.json
2 | index 11a2f4140081ebc25b840e544b2d005124d27e0e..d8ae3f86d2bee2e8838979e04c76e1f37256da3f 100644
3 | --- a/package.json
4 | +++ b/package.json
5 | @@ -24,7 +24,7 @@
6 | ],
7 | "exports": {
8 | ".": {
9 | - "types": "./src/index.d.ts",
10 | + "types": "./dist/src/index.d.ts",
11 | "import": "./dist/src/index.js"
12 | }
13 | },
14 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | packages:
2 | - 'packages/eslint-config'
3 | - 'packages/status-js'
4 | - 'packages/colors'
5 | - 'packages/icons'
6 | - 'packages/components'
7 | - 'packages/wallet'
8 | - 'apps/connector'
9 | - 'apps/portfolio'
10 | - 'apps/wallet'
11 | - 'apps/api'
12 |
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://openapi.vercel.sh/vercel.json",
3 | "git": {
4 | "deploymentEnabled": {
5 | "main": false
6 | }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------