├── .changeset
└── config.json
├── .commitlintrc.js
├── .dockerignore
├── .editorconfig
├── .eslintignore
├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ ├── feature_request.md
│ └── questions.md
├── actions
│ ├── discord-notify
│ │ └── action.yml
│ └── setup-env
│ │ └── action.yml
├── dependabot.yml
├── pull_request_template.md
└── workflows
│ ├── checks.yml
│ ├── deploy-mochi-web-beta.yml
│ ├── deploy-mochi-web-prod.yml
│ ├── gke-preview.yml
│ ├── gke-prod.yml
│ ├── release-web.yaml
│ └── release.yml
├── .gitignore
├── .husky
├── .gitignore
├── commit-msg
└── pre-commit
├── .npmrc
├── .npmrc.example
├── .prettierignore
├── .prettierrc
├── .releaserc
├── .vscode
└── settings.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── apps
├── mochi-web
│ ├── .editorconfig
│ ├── .env.example
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── README.md
│ ├── __tests__
│ │ └── components
│ │ │ └── copy-button.test.tsx
│ ├── app
│ │ └── layout
│ │ │ ├── footer.tsx
│ │ │ ├── index.tsx
│ │ │ ├── nprogress.ts
│ │ │ └── seo.tsx
│ ├── assets
│ │ ├── Inter-Black.ttf
│ │ ├── Inter-Bold.ttf
│ │ ├── Inter-ExtraBold.ttf
│ │ ├── Inter-ExtraLight.ttf
│ │ ├── Inter-Light.ttf
│ │ ├── Inter-Medium.ttf
│ │ ├── Inter-Regular.ttf
│ │ ├── Inter-SemiBold.ttf
│ │ ├── Inter-Thin.ttf
│ │ ├── RobotoMono-Light.ttf
│ │ └── RobotoMono-Regular.ttf
│ ├── components
│ │ ├── Amount.tsx
│ │ ├── ApplicationDetailSidebarHeader.tsx
│ │ ├── BottomSheet
│ │ │ └── index.tsx
│ │ ├── Changelog
│ │ │ ├── ChangelogDetailTitle
│ │ │ │ ├── ChangelogDetailTitle.tsx
│ │ │ │ └── index.ts
│ │ │ └── Markdown
│ │ │ │ ├── Markdown.tsx
│ │ │ │ └── index.ts
│ │ ├── CopyButton.tsx
│ │ ├── DashLine.tsx
│ │ ├── Dashboard
│ │ │ ├── Card
│ │ │ │ ├── index.ts
│ │ │ │ └── styles.ts
│ │ │ ├── Form
│ │ │ │ ├── Field.tsx
│ │ │ │ └── styles.ts
│ │ │ ├── Input
│ │ │ │ ├── FileInput.tsx
│ │ │ │ ├── Input.tsx
│ │ │ │ ├── index.ts
│ │ │ │ └── styles.ts
│ │ │ ├── Menu
│ │ │ │ ├── Menu.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Pagination
│ │ │ │ ├── Pagination.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Radio
│ │ │ │ ├── RadioGroup.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Select
│ │ │ │ ├── Select.tsx
│ │ │ │ ├── index.ts
│ │ │ │ └── styles.ts
│ │ │ ├── Switch
│ │ │ │ ├── Switch.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Table
│ │ │ │ ├── Table.tsx
│ │ │ │ └── index.ts
│ │ │ ├── Tabs
│ │ │ │ ├── Tabs.tsx
│ │ │ │ ├── index.ts
│ │ │ │ └── styles.ts
│ │ │ └── types
│ │ │ │ └── misc.ts
│ │ ├── DashboardBody.tsx
│ │ ├── DashboardLayout.tsx
│ │ ├── DashboardSkeleton.tsx
│ │ ├── DataList.tsx
│ │ ├── Dialog.tsx
│ │ ├── Feed
│ │ │ ├── index.tsx
│ │ │ └── store.ts
│ │ ├── Header
│ │ │ ├── DashboardMobileSidebar.tsx
│ │ │ ├── Header.tsx
│ │ │ ├── MobileNavAccordionItem.tsx
│ │ │ ├── index.ts
│ │ │ ├── type.ts
│ │ │ └── util.ts
│ │ ├── Home
│ │ │ ├── ApiIntegration.tsx
│ │ │ ├── Banner.tsx
│ │ │ ├── ChainAndPartner.tsx
│ │ │ ├── CommandMessages.tsx
│ │ │ ├── ExpressYourSelf.tsx
│ │ │ ├── Heading.tsx
│ │ │ ├── Left.tsx
│ │ │ ├── List.tsx
│ │ │ ├── PayYourFrens.tsx
│ │ │ ├── Right.tsx
│ │ │ ├── SendAGift.tsx
│ │ │ ├── SetupIsSimple.tsx
│ │ │ └── SkipTheMath.tsx
│ │ ├── IntegratedChains.tsx
│ │ ├── MainSidebarHeader.tsx
│ │ ├── MochiWidget
│ │ │ ├── AmountInput
│ │ │ │ ├── AmountInput.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── useSolPrice.ts
│ │ │ ├── ChainPicker
│ │ │ │ ├── ChainItem.tsx
│ │ │ │ ├── ChainList.tsx
│ │ │ │ ├── ChainPicker.tsx
│ │ │ │ ├── EmptyList.tsx
│ │ │ │ ├── data.ts
│ │ │ │ └── index.ts
│ │ │ ├── MessagePicker
│ │ │ │ ├── MessagePicker.tsx
│ │ │ │ ├── data.ts
│ │ │ │ └── useDefaultMessage.ts
│ │ │ ├── PlatformPicker
│ │ │ │ ├── PlatformIcon.tsx
│ │ │ │ ├── PlatformItem.tsx
│ │ │ │ ├── PlatformList.tsx
│ │ │ │ ├── PlatformPicker.tsx
│ │ │ │ ├── icons
│ │ │ │ │ ├── discord-ic.tsx
│ │ │ │ │ ├── github-ic.tsx
│ │ │ │ │ ├── google-ic.tsx
│ │ │ │ │ ├── onchain-ic.tsx
│ │ │ │ │ ├── reddit-ic.tsx
│ │ │ │ │ ├── telegram-ic.tsx
│ │ │ │ │ └── x-ic.tsx
│ │ │ │ ├── index.ts
│ │ │ │ └── type.ts
│ │ │ ├── Recipient
│ │ │ │ ├── ContactList.tsx
│ │ │ │ ├── EmptyList.tsx
│ │ │ │ ├── Recipient.tsx
│ │ │ │ ├── RecipientItem.tsx
│ │ │ │ ├── RecipientList.tsx
│ │ │ │ ├── SelectedRecipient.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── platform-detector.tsx
│ │ │ ├── ThemePicker
│ │ │ │ └── ThemePicker.tsx
│ │ │ ├── Timer
│ │ │ │ └── index.tsx
│ │ │ ├── Tip
│ │ │ │ ├── Skeleton.tsx
│ │ │ │ ├── StepOne.tsx
│ │ │ │ ├── StepTwo.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ └── store.tsx
│ │ │ ├── TokenPicker
│ │ │ │ ├── EmptyList.tsx
│ │ │ │ ├── TokenItem.tsx
│ │ │ │ ├── TokenList.tsx
│ │ │ │ ├── TokenPicker.tsx
│ │ │ │ ├── default-data.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── sort-order.json
│ │ │ │ ├── type.ts
│ │ │ │ └── utils.ts
│ │ │ ├── TransactionPreview
│ │ │ │ └── TransactionPreview.tsx
│ │ │ └── index.tsx
│ │ ├── Modal.tsx
│ │ ├── MonikerTableList.tsx
│ │ ├── NativeImage
│ │ │ ├── NativeImage.tsx
│ │ │ └── index.ts
│ │ ├── NotificationList
│ │ │ ├── AirdropRow.tsx
│ │ │ ├── NotificationModal.tsx
│ │ │ ├── PayLinkRow.tsx
│ │ │ ├── PayMeRow.tsx
│ │ │ ├── Row.tsx
│ │ │ ├── Skeleton.tsx
│ │ │ ├── SwapRow.tsx
│ │ │ ├── TransferRow.tsx
│ │ │ ├── WithdrawRow.tsx
│ │ │ ├── index.tsx
│ │ │ └── util.ts
│ │ ├── Pay
│ │ │ ├── Card.tsx
│ │ │ ├── ConnectSocialButton.tsx
│ │ │ ├── CopyLinkButton.tsx
│ │ │ ├── DropdownButton.tsx
│ │ │ ├── Footer.tsx
│ │ │ ├── PaymentButton.tsx
│ │ │ ├── QRCodeButton.tsx
│ │ │ ├── ShareButton.tsx
│ │ │ ├── WalletAddressForm.tsx
│ │ │ ├── WalletButton.tsx
│ │ │ └── components
│ │ │ │ └── SocialButtons.tsx
│ │ ├── PayRequest
│ │ │ ├── Footer.tsx
│ │ │ ├── Header.tsx
│ │ │ ├── LowerBody.tsx
│ │ │ ├── PayButton.tsx
│ │ │ ├── PayLink.tsx
│ │ │ ├── PayMe.tsx
│ │ │ ├── ShareButton.tsx
│ │ │ ├── UpperBody.tsx
│ │ │ ├── WithdrawButton.tsx
│ │ │ ├── index.tsx
│ │ │ ├── type.ts
│ │ │ └── utils.ts
│ │ ├── Popover.tsx
│ │ ├── Profile
│ │ │ ├── ProfileWidget.tsx
│ │ │ ├── RecapSection.tsx
│ │ │ └── TransactionSection.tsx
│ │ ├── ProfileDropdown.tsx
│ │ ├── Receipt
│ │ │ ├── Buttons.tsx
│ │ │ ├── Header.tsx
│ │ │ ├── ListUser.tsx
│ │ │ ├── Template.tsx
│ │ │ ├── index.tsx
│ │ │ └── utils.ts
│ │ ├── SaveBar.tsx
│ │ ├── TipNetwork
│ │ │ ├── Graph.tsx
│ │ │ ├── NetworkModal.tsx
│ │ │ ├── ProfileBar.tsx
│ │ │ └── SelectedProfile.tsx
│ │ ├── Toast
│ │ │ ├── ToastError.tsx
│ │ │ ├── ToastLoading.tsx
│ │ │ └── ToastSuccess.tsx
│ │ ├── TokenAvatar.tsx
│ │ ├── TokenTableList.tsx
│ │ ├── TransactionPeekingCard
│ │ │ ├── TransactionPeekingCard.tsx
│ │ │ └── index.ts
│ │ ├── TransactionTable
│ │ │ ├── TransactionAction.tsx
│ │ │ ├── TransactionBadge.tsx
│ │ │ ├── TransactionHeaderAction.tsx
│ │ │ ├── TransactionHeaderTotalValue.tsx
│ │ │ ├── TransactionHeaderWen.tsx
│ │ │ ├── TransactionIssuedBy.tsx
│ │ │ ├── TransactionRecipients.tsx
│ │ │ ├── TransactionStatusIcon.tsx
│ │ │ ├── TransactionTable.tsx
│ │ │ ├── TransactionTime.tsx
│ │ │ ├── TransactionTxGroup.tsx
│ │ │ ├── index.ts
│ │ │ ├── types.ts
│ │ │ └── utils.tsx
│ │ ├── VerifyWallet
│ │ │ ├── VerifyWallet.tsx
│ │ │ └── index.tsx
│ │ ├── Wallet
│ │ │ ├── ConnectDetail.tsx
│ │ │ ├── ConnectWalletIntro.tsx
│ │ │ ├── ConnectWalletModal.tsx
│ │ │ └── QRCode.tsx
│ │ ├── app
│ │ │ ├── AppListing.tsx
│ │ │ ├── DeleteAppModal.tsx
│ │ │ ├── NewAppForm.tsx
│ │ │ ├── Statistics.tsx
│ │ │ ├── StatisticsBox.tsx
│ │ │ └── detail
│ │ │ │ ├── AppDetailApiCalls.tsx
│ │ │ │ ├── AppDetailIntegration.tsx
│ │ │ │ ├── AppDetailMembers.tsx
│ │ │ │ ├── AppDetailNewUrl.tsx
│ │ │ │ ├── AppDetailPageHeader.tsx
│ │ │ │ ├── AppDetailPlatforms.tsx
│ │ │ │ ├── AppDetailSkeleton.tsx
│ │ │ │ ├── AppDetailStatistics.tsx
│ │ │ │ ├── AppDetailUrl.tsx
│ │ │ │ ├── CodeSnippet.tsx
│ │ │ │ └── ResetKeyModal.tsx
│ │ ├── base
│ │ │ ├── alert
│ │ │ │ ├── alert.tsx
│ │ │ │ └── index.ts
│ │ │ ├── avatar
│ │ │ │ ├── avatar.tsx
│ │ │ │ └── index.ts
│ │ │ ├── button
│ │ │ │ ├── button.tsx
│ │ │ │ └── index.ts
│ │ │ ├── dnd
│ │ │ │ ├── DndItem.tsx
│ │ │ │ ├── DndWrapper.tsx
│ │ │ │ ├── StrictModeDroppable.tsx
│ │ │ │ └── index.ts
│ │ │ ├── input
│ │ │ │ ├── index.ts
│ │ │ │ └── input.tsx
│ │ │ ├── radio
│ │ │ │ ├── index.ts
│ │ │ │ └── radio.tsx
│ │ │ ├── section-list
│ │ │ │ ├── index.ts
│ │ │ │ └── section-list.tsx
│ │ │ ├── switch
│ │ │ │ ├── index.ts
│ │ │ │ └── switch.tsx
│ │ │ └── text
│ │ │ │ ├── index.ts
│ │ │ │ └── text.tsx
│ │ ├── drawer.tsx
│ │ ├── explore
│ │ │ └── index
│ │ │ │ ├── components
│ │ │ │ ├── ChainPicker.tsx
│ │ │ │ ├── PlatformPicker.tsx
│ │ │ │ └── index.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── sections
│ │ │ │ ├── SummarySection.tsx
│ │ │ │ ├── TransactionSection.tsx
│ │ │ │ └── index.ts
│ │ │ │ └── stores
│ │ │ │ ├── index.ts
│ │ │ │ ├── useTransactionStore.ts
│ │ │ │ └── useTransactionSummaryStore.ts
│ │ ├── landing
│ │ │ ├── Divider.tsx
│ │ │ ├── GridFeatures.tsx
│ │ │ ├── LivePlatforms.tsx
│ │ │ ├── SoonAvailablePlatforms.tsx
│ │ │ ├── SupportedPlatforms.tsx
│ │ │ └── TabbedFeatures.tsx
│ │ ├── profile.tsx
│ │ ├── settings
│ │ │ ├── general
│ │ │ │ ├── AddNewWalletModal.tsx
│ │ │ │ ├── DefaultMessage.tsx
│ │ │ │ ├── GeneralPage.tsx
│ │ │ │ ├── MessageModal.tsx
│ │ │ │ ├── MoneySource.tsx
│ │ │ │ ├── ReceiverPlatform.tsx
│ │ │ │ ├── TokenPriority.tsx
│ │ │ │ ├── TokenPriorityModal.tsx
│ │ │ │ ├── TransactionLimit.tsx
│ │ │ │ ├── TransactionLimitModal.tsx
│ │ │ │ ├── TransactionPrivacy.tsx
│ │ │ │ └── WalletPrivacy.tsx
│ │ │ └── notification
│ │ │ │ ├── NotificationPage.tsx
│ │ │ │ └── type.ts
│ │ └── stats.tsx
│ ├── constants
│ │ ├── api.ts
│ │ ├── app.ts
│ │ ├── common.ts
│ │ ├── date.ts
│ │ ├── events.ts
│ │ ├── index.ts
│ │ ├── mochi.ts
│ │ ├── resources.ts
│ │ ├── routes.ts
│ │ ├── settings.ts
│ │ └── transactions.ts
│ ├── context
│ │ ├── app
│ │ │ └── sidebar.tsx
│ │ ├── wallet-context.tsx
│ │ └── wallets
│ │ │ ├── Wallet.ts
│ │ │ ├── ethereum
│ │ │ ├── EVMWalletProvider.tsx
│ │ │ ├── chains.ts
│ │ │ ├── getDefaultWallets.ts
│ │ │ ├── getWalletConnectConnector.ts
│ │ │ ├── ronin
│ │ │ │ └── ronin.d.ts
│ │ │ └── walletConnectors.ts
│ │ │ ├── recentWalletIds.ts
│ │ │ ├── solana
│ │ │ ├── SolanaWalletProvider.tsx
│ │ │ ├── chains.ts
│ │ │ ├── getDefaultWallets.ts
│ │ │ └── walletAdapters.ts
│ │ │ ├── sui
│ │ │ └── SuiWalletProvider.tsx
│ │ │ └── useWalletConnectors.ts
│ ├── envs.ts
│ ├── hooks
│ │ ├── app
│ │ │ ├── useFetchApplicationDetail.ts
│ │ │ ├── useFetchApplicationDetailMembers.ts
│ │ │ ├── useFetchApplicationDetailStats.ts
│ │ │ ├── useFetchApplicationDetailWebhookLogs.ts
│ │ │ ├── useFetchApplicationList.ts
│ │ │ ├── useFetchApplicationStats.ts
│ │ │ └── useFetchChangelogLatest.ts
│ │ ├── changelog
│ │ │ └── useFetchChangelogs.ts
│ │ ├── profile
│ │ │ ├── useFetchMonthlyStats.ts
│ │ │ ├── useFetchPayRequests.ts
│ │ │ ├── useFetchProfileGlobalInfo.ts
│ │ │ └── useFetchTotalBalance.ts
│ │ ├── settings
│ │ │ ├── useFetchGeneralSettings.ts
│ │ │ └── useFetchNotificationSettings.ts
│ │ ├── useIsVisible.ts
│ │ ├── useLockScreenScroll.ts
│ │ ├── useLoginAfterConnect.ts
│ │ ├── useResponsiveScreen.ts
│ │ ├── useTheme.ts
│ │ ├── useWarnIfUnsavedChanges.ts
│ │ └── wallets
│ │ │ ├── useAccount.ts
│ │ │ ├── useChain.ts
│ │ │ ├── useEns.ts
│ │ │ ├── useSendEVMToken.ts
│ │ │ ├── useSendSOLToken.ts
│ │ │ ├── useSignMessage.ts
│ │ │ ├── useSns.ts
│ │ │ └── useSolBalance.ts
│ ├── next-env.d.ts
│ ├── next.config.js
│ ├── package.json
│ ├── pages
│ │ ├── 404.tsx
│ │ ├── [username]
│ │ │ └── receive
│ │ │ │ └── [pay_code].tsx
│ │ ├── _app.tsx
│ │ ├── _components.tsx
│ │ ├── _document.tsx
│ │ ├── airdrop
│ │ │ └── [id].tsx
│ │ ├── api
│ │ │ ├── auth
│ │ │ │ ├── discord-callback.ts
│ │ │ │ ├── facebook-callback.ts
│ │ │ │ ├── mail-callback.ts
│ │ │ │ ├── telegram-callback.ts
│ │ │ │ └── twitter-callback.ts
│ │ │ ├── pay-og.tsx
│ │ │ └── transfer-og.tsx
│ │ ├── applications
│ │ │ ├── [id].tsx
│ │ │ ├── [id]
│ │ │ │ └── revenue.tsx
│ │ │ └── index.tsx
│ │ ├── changelog
│ │ │ ├── [version].tsx
│ │ │ └── index.tsx
│ │ ├── connect-telegram.tsx
│ │ ├── developer.tsx
│ │ ├── explore.tsx
│ │ ├── features.tsx
│ │ ├── index.tsx
│ │ ├── pay
│ │ │ └── [pay_code].tsx
│ │ ├── privacy.tsx
│ │ ├── profile
│ │ │ └── index.tsx
│ │ ├── server
│ │ │ ├── [id].tsx
│ │ │ └── index.tsx
│ │ ├── settings.tsx
│ │ ├── tip-network.tsx
│ │ ├── tx
│ │ │ └── [id].tsx
│ │ └── verify.tsx
│ ├── postcss.config.js
│ ├── proxy-config.json
│ ├── public
│ │ ├── android-chrome-192x192.png
│ │ ├── android-chrome-512x512.png
│ │ ├── android-chrome-96x96.png
│ │ ├── apple-touch-icon.png
│ │ ├── assets
│ │ │ ├── ads
│ │ │ │ ├── 512x512.png
│ │ │ │ ├── big-ad.png
│ │ │ │ ├── discord-1546x423.png
│ │ │ │ ├── no-img.png
│ │ │ │ ├── small-ad.png
│ │ │ │ └── tele-1546x423.png
│ │ │ ├── app-statistics.png
│ │ │ ├── coin.png
│ │ │ ├── dashboard
│ │ │ │ ├── coin.png
│ │ │ │ └── xp.png
│ │ │ ├── eth-icon.png
│ │ │ ├── explore
│ │ │ │ └── explore.thumbnail.png
│ │ │ ├── fail-stamp.png
│ │ │ ├── metamask.svg
│ │ │ ├── mochi-gray.png
│ │ │ ├── mochi.png
│ │ │ ├── mochisan-meditate.png
│ │ │ ├── mochisan-money.png
│ │ │ ├── mochisan-panic.png
│ │ │ ├── mochisan-spaceship.png
│ │ │ ├── mochisan-stars.png
│ │ │ ├── mochisan-vault.png
│ │ │ ├── mochisan.png
│ │ │ ├── money.png
│ │ │ ├── sol-icon.png
│ │ │ ├── success-stamp.png
│ │ │ ├── ticker.png
│ │ │ ├── tip.png
│ │ │ ├── tip
│ │ │ │ ├── dianne.png
│ │ │ │ ├── edwards.png
│ │ │ │ ├── jenny.png
│ │ │ │ ├── simmons.png
│ │ │ │ └── wade.png
│ │ │ ├── tx
│ │ │ │ ├── achievement.png
│ │ │ │ ├── appreciation.png
│ │ │ │ ├── hpbd.png
│ │ │ │ └── wedding.png
│ │ │ ├── verify.png
│ │ │ ├── wallet-intro.png
│ │ │ └── watch-red.png
│ │ ├── browserconfig.xml
│ │ ├── chain-and-partner.png
│ │ ├── changelog-thumbnail.png
│ │ ├── consolelabs-black.svg
│ │ ├── developer
│ │ │ ├── balance.png
│ │ │ ├── browse-api-left-border.png
│ │ │ ├── build-with-mochi-apis-1.png
│ │ │ ├── link.png
│ │ │ ├── profile-circle.png
│ │ │ ├── server.png
│ │ │ ├── tip.png
│ │ │ └── vault.png
│ │ ├── diag.png
│ │ ├── dot-bg.png
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── favicon.ico
│ │ ├── feature-1.png
│ │ ├── feature-10.png
│ │ ├── feature-11.png
│ │ ├── feature-12.png
│ │ ├── feature-13.png
│ │ ├── feature-14.png
│ │ ├── feature-15.png
│ │ ├── feature-16.png
│ │ ├── feature-2.png
│ │ ├── feature-3.png
│ │ ├── feature-4.png
│ │ ├── feature-5.png
│ │ ├── feature-6.png
│ │ ├── feature-7.png
│ │ ├── feature-8.png
│ │ ├── feature-9.png
│ │ ├── featured.png
│ │ ├── hero-bg.png
│ │ ├── home.png
│ │ ├── home
│ │ │ ├── airdrop.svg
│ │ │ ├── api.png
│ │ │ ├── apple.png
│ │ │ ├── avatar.png
│ │ │ ├── deposit.svg
│ │ │ ├── express-yourself.png
│ │ │ ├── pay-link.svg
│ │ │ ├── pay-me.svg
│ │ │ ├── send-n-receive.png
│ │ │ ├── send-n-receive.svg
│ │ │ ├── social-icons.png
│ │ │ ├── split.svg
│ │ │ ├── swap.svg
│ │ │ ├── tip-list.svg
│ │ │ └── tip.svg
│ │ ├── icon-container.png
│ │ ├── integrated-chains
│ │ │ ├── aptos.png
│ │ │ ├── arb.png
│ │ │ ├── base.webp
│ │ │ ├── bnb.png
│ │ │ ├── btc.png
│ │ │ ├── eth.png
│ │ │ ├── ftm.png
│ │ │ ├── okx.png
│ │ │ ├── onus.webp
│ │ │ ├── op.png
│ │ │ ├── polygon.png
│ │ │ ├── sol.png
│ │ │ └── sui.png
│ │ ├── logo.png
│ │ ├── mochi-logo.png
│ │ ├── mochi-qilin.jpg
│ │ ├── mochi-snowman.jpg
│ │ ├── mochi-text-circle.png
│ │ ├── mochi-welcome.jpg
│ │ ├── mstile-150x150.png
│ │ ├── nft-rarity-ranking.png
│ │ ├── partner
│ │ │ ├── blue-move.png
│ │ │ ├── okx.png
│ │ │ ├── onus.webp
│ │ │ └── solscan.webp
│ │ ├── party.gif
│ │ ├── pay-request-bg.png
│ │ ├── platforms
│ │ │ ├── app.png
│ │ │ ├── discord.png
│ │ │ ├── telegram.webp
│ │ │ ├── web.png
│ │ │ └── x.png
│ │ ├── rings.png
│ │ ├── rocket.gif
│ │ ├── rocket.png
│ │ ├── safari-pinned-tab.svg
│ │ ├── site.webmanifest
│ │ ├── svg
│ │ │ ├── chain-icons
│ │ │ │ ├── arbitrum.svg
│ │ │ │ ├── avalanche.svg
│ │ │ │ ├── ethereum.svg
│ │ │ │ ├── hardhat.svg
│ │ │ │ ├── optimism.svg
│ │ │ │ ├── polygon.svg
│ │ │ │ └── solana.svg
│ │ │ ├── wallet-icons
│ │ │ │ ├── argent.svg
│ │ │ │ ├── brave.svg
│ │ │ │ ├── coinbase.svg
│ │ │ │ ├── imToken.svg
│ │ │ │ ├── injected.png
│ │ │ │ ├── ledger.svg
│ │ │ │ ├── metaMask.svg
│ │ │ │ ├── rainbow.svg
│ │ │ │ ├── ronin.svg
│ │ │ │ ├── steak.svg
│ │ │ │ ├── trust.svg
│ │ │ │ └── walletConnect.svg
│ │ │ └── wavy-pattern.svg
│ │ ├── teams
│ │ │ └── dango.png
│ │ ├── thumbs-up.gif
│ │ ├── tip-theme-christmas.jpg
│ │ ├── tip-theme-hpbd.jpg
│ │ ├── tip-theme-more.jpg
│ │ ├── tip-theme-new-year.jpg
│ │ ├── tip.png
│ │ ├── to-the-moon.png
│ │ ├── util-1.png
│ │ ├── util-2.png
│ │ ├── util-3.png
│ │ ├── util-4.png
│ │ └── warpcast.png
│ ├── store
│ │ ├── auth.ts
│ │ ├── dashboard.ts
│ │ ├── index.ts
│ │ ├── mochi-widget.ts
│ │ ├── pay-request.ts
│ │ ├── profile.ts
│ │ ├── unsaved-changes.ts
│ │ └── wallets.ts
│ ├── styles
│ │ ├── global.css
│ │ ├── home.css
│ │ ├── nprogress.css
│ │ └── tos.css
│ ├── tailwind.config.js
│ ├── tsconfig.json
│ ├── types
│ │ ├── api.ts
│ │ ├── app.ts
│ │ ├── global.d.ts
│ │ ├── mochi-pay-schema.ts
│ │ ├── mochi-profile-schema.ts
│ │ ├── mochi-schema.ts
│ │ └── tip-graph.ts
│ └── utils
│ │ ├── changelog.ts
│ │ ├── image.ts
│ │ ├── isMobile.ts
│ │ ├── next-font.ts
│ │ ├── number.ts
│ │ ├── omitUndefinedValues.ts
│ │ ├── pagination.ts
│ │ ├── sol.ts
│ │ ├── string.ts
│ │ ├── time.ts
│ │ └── url.ts
└── vault
│ ├── .env
│ ├── .eslintrc.json
│ ├── .gitignore
│ ├── README.md
│ ├── app
│ ├── favicon.ico
│ ├── globals.css
│ ├── layout.tsx
│ └── page.tsx
│ ├── components.json
│ ├── components
│ ├── summary-stats.tsx
│ ├── ui
│ │ └── progress.tsx
│ ├── vault.tsx
│ └── vaults.tsx
│ ├── constants.ts
│ ├── envs.ts
│ ├── lib
│ └── utils.ts
│ ├── next.config.mjs
│ ├── package.json
│ ├── postcss.config.mjs
│ ├── providers
│ └── index.tsx
│ ├── public
│ ├── bg.svg
│ ├── logo.png
│ ├── next.svg
│ └── vercel.svg
│ ├── tailwind.config.ts
│ ├── tsconfig.json
│ └── utils.ts
├── clean-package.config.json
├── config
├── eslint
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── next.js
│ ├── package.json
│ └── react.js
└── tsconfig
│ ├── CHANGELOG.md
│ ├── base.json
│ ├── nextjs.json
│ ├── overrides.d.ts
│ ├── package.json
│ └── react-library.json
├── jest.config.js
├── package.json
├── packages
├── components
│ ├── accordion
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── accordion.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── accordion.tsx
│ │ │ └── index.ts
│ │ ├── stories
│ │ │ └── accordion.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── action-bar
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── action-bar-action-group.tsx
│ │ │ ├── action-bar-body.tsx
│ │ │ ├── action-bar-cancel.tsx
│ │ │ ├── action-bar-confirm.tsx
│ │ │ ├── action-bar-content.tsx
│ │ │ ├── action-bar-description.tsx
│ │ │ ├── action-bar-icon.tsx
│ │ │ ├── action-bar-title.tsx
│ │ │ ├── action-bar-trigger.tsx
│ │ │ ├── action-bar.tsx
│ │ │ └── index.ts
│ │ ├── stories
│ │ │ └── action-bar.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── alert
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── alert.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── alert-action-group.tsx
│ │ │ ├── alert-body.tsx
│ │ │ ├── alert-cancel.tsx
│ │ │ ├── alert-close.tsx
│ │ │ ├── alert-confirm.tsx
│ │ │ ├── alert-description.tsx
│ │ │ ├── alert-icon.tsx
│ │ │ ├── alert-link.tsx
│ │ │ ├── alert-title.tsx
│ │ │ ├── alert.tsx
│ │ │ ├── context.ts
│ │ │ └── index.ts
│ │ ├── stories
│ │ │ └── alert.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── avatar-group
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── avatar-group.tsx
│ │ │ └── index.ts
│ │ ├── stories
│ │ │ └── avatar-group.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── avatar
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ ├── avatar.test.tsx
│ │ │ └── util.test.ts
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── avatar.tsx
│ │ │ ├── index.ts
│ │ │ └── util.ts
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── badge
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── badge.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── badge.tsx
│ │ │ ├── context.ts
│ │ │ ├── index.ts
│ │ │ └── type.ts
│ │ ├── stories
│ │ │ └── badge.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── button
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── button.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── button.tsx
│ │ │ └── index.ts
│ │ ├── stories
│ │ │ └── button.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── card
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── card.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── card.tsx
│ │ │ └── index.ts
│ │ ├── stories
│ │ │ └── card.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── checkbox
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── checkbox.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── checkbox.tsx
│ │ │ └── index.ts
│ │ ├── stories
│ │ │ └── checkbox.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── content-editable
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── content-editable.tsx
│ │ │ └── index.ts
│ │ ├── stories
│ │ │ └── content-editable.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── drawer
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── drawer.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── context.ts
│ │ │ ├── drawer.tsx
│ │ │ ├── index.ts
│ │ │ └── type.ts
│ │ ├── stories
│ │ │ └── drawer.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── dropdown
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── dropdown.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── dropdown.tsx
│ │ │ ├── index.ts
│ │ │ └── type.ts
│ │ ├── stories
│ │ │ └── dropdown.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── footer
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── footer.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── footer.tsx
│ │ │ └── index.ts
│ │ ├── stories
│ │ │ └── footer.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── form-context
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── context.tsx
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── form
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── form-control.tsx
│ │ │ ├── form-error-message.tsx
│ │ │ ├── form-helper-text.tsx
│ │ │ ├── form-label.tsx
│ │ │ ├── index.ts
│ │ │ └── type.ts
│ │ ├── stories
│ │ │ └── form-control.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── icon-button
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── icon-button.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── icon-button.tsx
│ │ │ └── index.ts
│ │ ├── stories
│ │ │ └── icon-button.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── icons
│ │ ├── stories
│ │ │ └── icon.stories.tsx
│ │ └── tsconfig.json
│ ├── input
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── input.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── textfield.tsx
│ │ ├── stories
│ │ │ └── input.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── label
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── label.tsx
│ │ ├── stories
│ │ │ └── label.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── layout
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── layout.test.tsx
│ │ ├── hooks
│ │ │ ├── index.ts
│ │ │ └── useHasSidebar.ts
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── layout.tsx
│ │ ├── stories
│ │ │ └── layout.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── list
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── list.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── list.tsx
│ │ ├── stories
│ │ │ └── list.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── logo
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── logo.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ ├── logo.tsx
│ │ │ └── svg-element.tsx
│ │ ├── stories
│ │ │ └── logo.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── modal
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── modal.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── modal.tsx
│ │ ├── stories
│ │ │ └── modal.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── page-content
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── page-content.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── page-content.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── page-header
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── page-header.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ ├── page-header.tsx
│ │ │ └── type.ts
│ │ ├── stories
│ │ │ └── page-header.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── pagination
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── pagination.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ ├── pagination.tsx
│ │ │ └── utils.ts
│ │ ├── stories
│ │ │ └── pagination.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── polymorphic
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── polymorphic.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── popover
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── popover.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── popover.tsx
│ │ ├── stories
│ │ │ └── popover.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── profile-badge
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── profile-badge.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── profile-badge.tsx
│ │ ├── stories
│ │ │ └── profile-badge.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── scroll-area
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── scroll-area.tsx
│ │ ├── stories
│ │ │ └── scroll-area.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── section-header
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── section-header.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── context.ts
│ │ │ ├── index.ts
│ │ │ ├── section-header.tsx
│ │ │ └── type.ts
│ │ ├── stories
│ │ │ └── section-header.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── select
│ │ ├── .eslintrc.js
│ │ ├── .prettierignore
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── select.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── context.ts
│ │ │ ├── index.ts
│ │ │ ├── select.tsx
│ │ │ └── type.ts
│ │ ├── stories
│ │ │ └── select.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── separator
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── separator.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── separator.tsx
│ │ ├── stories
│ │ │ └── separator.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── sidebar
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── sidebar.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ ├── sidebar-item-list.tsx
│ │ │ ├── sidebar-item.tsx
│ │ │ └── sidebar.tsx
│ │ ├── stories
│ │ │ └── sidebar.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── skeleton
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── skeleton.tsx
│ │ ├── stories
│ │ │ └── skeleton.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── stepper
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── context.ts
│ │ │ ├── index.ts
│ │ │ ├── step-content.tsx
│ │ │ ├── step-description.tsx
│ │ │ ├── step-indicator.tsx
│ │ │ ├── step-item.tsx
│ │ │ ├── step-separator.tsx
│ │ │ ├── step-title.tsx
│ │ │ └── stepper.tsx
│ │ ├── stories
│ │ │ └── stepper.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── switch
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── switch.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── Switch.tsx
│ │ │ └── index.ts
│ │ ├── stories
│ │ │ └── switch.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── table
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── table.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── table.tsx
│ │ ├── stories
│ │ │ └── table.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── tabs
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── tabs.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── tabs.tsx
│ │ ├── stories
│ │ │ └── tabs.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── toast
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── hook
│ │ │ │ ├── index.ts
│ │ │ │ └── use-toast
│ │ │ │ │ ├── constants.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── reducer.ts
│ │ │ │ │ ├── toast.ts
│ │ │ │ │ ├── type.ts
│ │ │ │ │ ├── use-toast.ts
│ │ │ │ │ └── utils.ts
│ │ │ ├── index.ts
│ │ │ ├── toast-body.tsx
│ │ │ ├── toast-close.tsx
│ │ │ ├── toast-description.tsx
│ │ │ ├── toast-icon.tsx
│ │ │ ├── toast-link.tsx
│ │ │ ├── toast-title.tsx
│ │ │ ├── toast.tsx
│ │ │ ├── toaster.tsx
│ │ │ └── type.ts
│ │ ├── stories
│ │ │ └── toast.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── toggle-button
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── toggle-button.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── toggle-button.tsx
│ │ ├── stories
│ │ │ └── toggle-button.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── tooltip
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── tooltip.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── tooltip.tsx
│ │ ├── stories
│ │ │ └── tooltip.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── top-bar
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── top-bar.test.tsx
│ │ ├── hooks
│ │ │ ├── index.ts
│ │ │ └── useLockScreenScroll.ts
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── desktop-nav.tsx
│ │ │ ├── index.ts
│ │ │ ├── mobile-nav.tsx
│ │ │ ├── top-bar.tsx
│ │ │ └── type.ts
│ │ ├── stories
│ │ │ └── top-bar.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── typography
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ │ └── typography.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ │ ├── index.ts
│ │ │ └── typography.tsx
│ │ ├── stories
│ │ │ └── typography.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ └── value-change
│ │ ├── .eslintrc.js
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── __tests__
│ │ └── value-change.test.tsx
│ │ ├── package.json
│ │ ├── src
│ │ ├── context.ts
│ │ ├── index.ts
│ │ ├── type.ts
│ │ └── value-change.tsx
│ │ ├── stories
│ │ └── value-change.stories.tsx
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
├── core
│ ├── .eslintrc.js
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── package.json
│ ├── provider.d.ts
│ ├── src
│ │ └── index.ts
│ ├── tsconfig.json
│ └── tsup.config.ts
├── icons
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── package.json
│ ├── scripts
│ │ ├── build-clean-packages.ts
│ │ ├── clean.ts
│ │ ├── generate-icon-components.ts
│ │ └── paths.ts
│ ├── src
│ │ └── svg
│ │ │ ├── line
│ │ │ ├── alert-circle.svg
│ │ │ ├── alert-triangle.svg
│ │ │ ├── arrow-bottom-left.svg
│ │ │ ├── arrow-bottom-right.svg
│ │ │ ├── arrow-down-short.svg
│ │ │ ├── arrow-down.svg
│ │ │ ├── arrow-left.svg
│ │ │ ├── arrow-right-short.svg
│ │ │ ├── arrow-right.svg
│ │ │ ├── arrow-top-left.svg
│ │ │ ├── arrow-top-right.svg
│ │ │ ├── arrow-up-down.svg
│ │ │ ├── arrow-up-short.svg
│ │ │ ├── arrow-up.svg
│ │ │ ├── back.svg
│ │ │ ├── bank.svg
│ │ │ ├── bullets-list.svg
│ │ │ ├── calendar.svg
│ │ │ ├── chart.svg
│ │ │ ├── check-circle-half-colored.svg
│ │ │ ├── check.svg
│ │ │ ├── chevron-down.svg
│ │ │ ├── chevron-left.svg
│ │ │ ├── chevron-right.svg
│ │ │ ├── chevron-up.svg
│ │ │ ├── clock-circle-arrow-colored.svg
│ │ │ ├── close-lg.svg
│ │ │ ├── close.svg
│ │ │ ├── coin-swap.svg
│ │ │ ├── copy.svg
│ │ │ ├── corner-bottom-left.svg
│ │ │ ├── direction.svg
│ │ │ ├── edit.svg
│ │ │ ├── face-id.svg
│ │ │ ├── gear.svg
│ │ │ ├── gift.svg
│ │ │ ├── inbox.svg
│ │ │ ├── link-horizontal.svg
│ │ │ ├── link.svg
│ │ │ ├── magnifier.svg
│ │ │ ├── mail.svg
│ │ │ ├── minus.svg
│ │ │ ├── monitor.svg
│ │ │ ├── moon.svg
│ │ │ ├── parachute.svg
│ │ │ ├── payment-cash-out.svg
│ │ │ ├── plus.svg
│ │ │ ├── profile-guard-success-colored.svg
│ │ │ ├── profile-guard-success-dark-colored.svg
│ │ │ ├── scan.svg
│ │ │ ├── sidebar-arrow.svg
│ │ │ ├── spinner.svg
│ │ │ ├── sun.svg
│ │ │ ├── three-dot.svg
│ │ │ ├── trash-bin-2.svg
│ │ │ ├── trash-bin.svg
│ │ │ └── trophy.svg
│ │ │ ├── outlined
│ │ │ ├── book-mark.svg
│ │ │ ├── check-circle.svg
│ │ │ ├── cross-circle.svg
│ │ │ ├── exclamation-triangle.svg
│ │ │ ├── info-circle.svg
│ │ │ ├── minus-circle.svg
│ │ │ └── plus-circle.svg
│ │ │ ├── pictogram
│ │ │ ├── arrow-down-down-colored.svg
│ │ │ ├── arrow-up-up-colored.svg
│ │ │ ├── bag-colored.svg
│ │ │ ├── bag-dark-colored.svg
│ │ │ ├── bag-dark.svg
│ │ │ ├── bag.svg
│ │ │ ├── binary-lock-colored.svg
│ │ │ ├── binary-lock-dark-colored.svg
│ │ │ ├── blocks-colored.svg
│ │ │ ├── blocks-dark-colored.svg
│ │ │ ├── dango.svg
│ │ │ ├── dollar-colored.svg
│ │ │ ├── encrypted-colored.svg
│ │ │ ├── encrypted-dark-colored.svg
│ │ │ ├── hand-key-colored.svg
│ │ │ ├── hand-key-dark-colored.svg
│ │ │ ├── heart-colored.svg
│ │ │ ├── layers-colored.svg
│ │ │ ├── layers-dark-colores.svg
│ │ │ ├── link-colored.svg
│ │ │ ├── password-lock-colored.svg
│ │ │ ├── password-lock-dark-colored.svg
│ │ │ ├── pay-link-colored.svg
│ │ │ ├── pay-link-dark-colored.svg
│ │ │ ├── profile-shield-colored.svg
│ │ │ ├── profile-shield-dark-colored.svg
│ │ │ ├── server-colored.svg
│ │ │ ├── server-dark-colored.svg
│ │ │ ├── spinner.svg
│ │ │ ├── three-dot-loading.svg
│ │ │ ├── tip-colored.svg
│ │ │ ├── tip-dark-colored.svg
│ │ │ ├── user-shield-colored.svg
│ │ │ ├── vault-colored.svg
│ │ │ ├── vault-dark-colored.svg
│ │ │ ├── wallet-password-colored.svg
│ │ │ └── wallet-password-dark-colored.svg
│ │ │ ├── social
│ │ │ ├── apple-colored.svg
│ │ │ ├── apple.svg
│ │ │ ├── chrome-colored.svg
│ │ │ ├── discord-colored.svg
│ │ │ ├── discord.svg
│ │ │ ├── facebook-colored.svg
│ │ │ ├── facebook.svg
│ │ │ ├── farcaster-colored.svg
│ │ │ ├── farcaster.svg
│ │ │ ├── github.svg
│ │ │ ├── google-colored.svg
│ │ │ ├── google.svg
│ │ │ ├── master-card.svg
│ │ │ ├── reddit-colored.svg
│ │ │ ├── reddit.svg
│ │ │ ├── slack-colored.svg
│ │ │ ├── slack.svg
│ │ │ ├── telegram-colored.svg
│ │ │ ├── telegram.svg
│ │ │ ├── x.svg
│ │ │ └── youtube.svg
│ │ │ ├── solid
│ │ │ ├── add-user.svg
│ │ │ ├── airdrop-circle.svg
│ │ │ ├── arrow-down-square.svg
│ │ │ ├── arrow-up-square.svg
│ │ │ ├── bar-chart.svg
│ │ │ ├── bell-new.svg
│ │ │ ├── bell.svg
│ │ │ ├── binocular.svg
│ │ │ ├── book-mark.svg
│ │ │ ├── category.svg
│ │ │ ├── chart.svg
│ │ │ ├── coding.svg
│ │ │ ├── computer-pc-laptop.svg
│ │ │ ├── copy.svg
│ │ │ ├── desktop-code.svg
│ │ │ ├── document-one.svg
│ │ │ ├── document-star.svg
│ │ │ ├── dollar-bubble-circle.svg
│ │ │ ├── dollar-bubble.svg
│ │ │ ├── dollar-square.svg
│ │ │ ├── eye-hidden.svg
│ │ │ ├── eye-show.svg
│ │ │ ├── fire.svg
│ │ │ ├── game.svg
│ │ │ ├── gear.svg
│ │ │ ├── gift.svg
│ │ │ ├── home.svg
│ │ │ ├── inbox.svg
│ │ │ ├── key.svg
│ │ │ ├── life-buoy.svg
│ │ │ ├── link-circled.svg
│ │ │ ├── link-squircled.svg
│ │ │ ├── logout.svg
│ │ │ ├── mail.svg
│ │ │ ├── menu-add.svg
│ │ │ ├── menu.svg
│ │ │ ├── paperplane-circle.svg
│ │ │ ├── paperplane.svg
│ │ │ ├── payment-cash-out.svg
│ │ │ ├── plug.svg
│ │ │ ├── plus-circle.svg
│ │ │ ├── quests.svg
│ │ │ ├── refresh.svg
│ │ │ ├── safe-box.svg
│ │ │ ├── shapes.svg
│ │ │ ├── share.svg
│ │ │ ├── shield-done.svg
│ │ │ ├── solid-dot.svg
│ │ │ ├── star.svg
│ │ │ ├── stars.svg
│ │ │ ├── super-group.svg
│ │ │ ├── swap-circle.svg
│ │ │ ├── tea.svg
│ │ │ ├── tip.svg
│ │ │ ├── trash-bin.svg
│ │ │ ├── trophy.svg
│ │ │ ├── twinkle.svg
│ │ │ ├── union.svg
│ │ │ ├── user.svg
│ │ │ ├── vault.svg
│ │ │ ├── vault2.svg
│ │ │ ├── wallet-add.svg
│ │ │ ├── wallet.svg
│ │ │ └── web.svg
│ │ │ ├── two-tone
│ │ │ └── vault.svg
│ │ │ ├── wallet
│ │ │ ├── argent-wallet.svg
│ │ │ ├── backpack-wallet.svg
│ │ │ ├── coin98-wallet.svg
│ │ │ ├── coinbase-wallet.svg
│ │ │ ├── connect-wallets.svg
│ │ │ ├── glow-wallet.svg
│ │ │ ├── ledger-wallet.svg
│ │ │ ├── martian-wallet.svg
│ │ │ ├── metamask-wallet.svg
│ │ │ ├── okx-wallet.svg
│ │ │ ├── phantom-wallet.svg
│ │ │ ├── rabby-wallet.svg
│ │ │ ├── rainbow-wallet.svg
│ │ │ ├── ronin-wallet.svg
│ │ │ ├── safepal-wallet.svg
│ │ │ ├── suiet-wallet.svg
│ │ │ ├── ton-keeper-wallet.svg
│ │ │ ├── trust-wallet.svg
│ │ │ └── uniswap-wallet.svg
│ │ │ └── web3
│ │ │ ├── apt.svg
│ │ │ ├── arb.svg
│ │ │ ├── atom.svg
│ │ │ ├── avalanche.svg
│ │ │ ├── base.svg
│ │ │ ├── bnb.svg
│ │ │ ├── btc.svg
│ │ │ ├── consolelabs.svg
│ │ │ ├── eth.svg
│ │ │ ├── ftm.svg
│ │ │ ├── matic.svg
│ │ │ ├── mnt.svg
│ │ │ ├── mochi.svg
│ │ │ ├── op.svg
│ │ │ ├── ron.svg
│ │ │ ├── sol.svg
│ │ │ ├── sui.svg
│ │ │ ├── ton.svg
│ │ │ └── zkSync.svg
│ ├── tsconfig.json
│ ├── tsup.config.ts
│ └── types.d.ts
├── storybook
│ ├── .gitignore
│ ├── .storybook
│ │ ├── assets
│ │ │ ├── banner.webp
│ │ │ ├── favicon.ico
│ │ │ ├── favicon.png
│ │ │ ├── logo-black.png
│ │ │ └── logo-white.png
│ │ ├── main.ts
│ │ ├── manager-head.html
│ │ ├── preview-head.html
│ │ ├── preview.tsx
│ │ └── styles.css
│ ├── package.json
│ ├── postcss.config.js
│ ├── src
│ │ ├── colors.stories.mdx
│ │ ├── installation.stories.mdx
│ │ ├── philosophy.stories.mdx
│ │ └── welcome.stories.mdx
│ ├── tailwind.config.js
│ └── tsconfig.json
├── theme
│ ├── .eslintrc.js
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── clean-package.config.json
│ ├── package.json
│ ├── plugin.d.ts
│ ├── plugin.js
│ ├── src
│ │ ├── colors
│ │ │ ├── common.ts
│ │ │ ├── index.ts
│ │ │ ├── semantic.ts
│ │ │ └── types.ts
│ │ ├── components
│ │ │ ├── accordion.ts
│ │ │ ├── action-bar.ts
│ │ │ ├── alert.ts
│ │ │ ├── avatar.ts
│ │ │ ├── badge.ts
│ │ │ ├── button.ts
│ │ │ ├── card.ts
│ │ │ ├── checkbox.ts
│ │ │ ├── connect-wallet-widget.ts
│ │ │ ├── content-editable.ts
│ │ │ ├── drawer.ts
│ │ │ ├── dropdown.ts
│ │ │ ├── footer.ts
│ │ │ ├── form-control.ts
│ │ │ ├── icon-button.ts
│ │ │ ├── index.ts
│ │ │ ├── label.ts
│ │ │ ├── layout.ts
│ │ │ ├── list.ts
│ │ │ ├── login-widget.ts
│ │ │ ├── logo.ts
│ │ │ ├── modal.ts
│ │ │ ├── page-content.ts
│ │ │ ├── page-header.ts
│ │ │ ├── pagination.ts
│ │ │ ├── popover.ts
│ │ │ ├── profile-badge.ts
│ │ │ ├── scroll-area.ts
│ │ │ ├── section-header.ts
│ │ │ ├── select.ts
│ │ │ ├── separator.ts
│ │ │ ├── sidebar.ts
│ │ │ ├── skeleton.ts
│ │ │ ├── stepper.ts
│ │ │ ├── switch.ts
│ │ │ ├── table.ts
│ │ │ ├── tabs.ts
│ │ │ ├── textfield.ts
│ │ │ ├── toast.ts
│ │ │ ├── toggle-button.ts
│ │ │ ├── tooltip.ts
│ │ │ ├── top-bar.ts
│ │ │ ├── typography.ts
│ │ │ └── value-change.ts
│ │ ├── index.ts
│ │ ├── plugin.ts
│ │ ├── types.ts
│ │ └── util.ts
│ ├── tsconfig.json
│ └── tsup.config.ts
└── web3
│ ├── connect-wallet-widget
│ ├── .eslintrc.js
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── package.json
│ ├── src
│ │ ├── connect-wallet-widget.tsx
│ │ ├── constants.ts
│ │ ├── index.ts
│ │ ├── providers
│ │ │ ├── base.ts
│ │ │ ├── disabled-provider.ts
│ │ │ ├── evm-provider.ts
│ │ │ ├── index.ts
│ │ │ ├── provider.ts
│ │ │ ├── ron-provider.ts
│ │ │ └── sol-provider.ts
│ │ ├── wallet-list.tsx
│ │ └── wallet.tsx
│ ├── stories
│ │ └── connect-wallet-widget.stories.tsx
│ ├── tsconfig.json
│ └── tsup.config.ts
│ └── login-widget
│ ├── .eslintrc.js
│ ├── CHANGELOG.md
│ ├── PROVIDERS.md
│ ├── README.md
│ ├── package.json
│ ├── src
│ ├── connect-social.tsx
│ ├── fetchers.ts
│ ├── index.ts
│ ├── login-content.tsx
│ ├── login-widget.tsx
│ ├── reducer.ts
│ └── store.tsx
│ ├── stories
│ └── login-widget.stories.tsx
│ ├── tsconfig.json
│ └── tsup.config.ts
├── plop
└── component
│ ├── .eslintrc.js.hbs
│ ├── README.md.hbs
│ ├── __tests__
│ └── {{componentName}}.test.tsx.hbs
│ ├── package.json.hbs
│ ├── src
│ ├── index.ts.hbs
│ └── {{componentName}}.tsx.hbs
│ ├── stories
│ └── {{componentName}}.stories.tsx.hbs
│ ├── tsconfig.json.hbs
│ └── tsup.config.ts.hbs
├── plopfile.ts
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
├── scripts
├── check-build-apps.js
├── copy-files.ts
├── modify-publish-root.ts
├── release-notify.ts
├── script-utils.ts
└── setup-test.ts
├── tsconfig.json
├── turbo.json
└── vercel.json
/.changeset/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json",
3 | "changelog": [
4 | "@changesets/changelog-github",
5 | { "repo": "consolelabs/mochi-ui" }
6 | ],
7 | "commit": false,
8 | "fixed": [],
9 | "linked": [],
10 | "access": "public",
11 | "baseBranch": "main",
12 | "updateInternalDependencies": "patch",
13 | "___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
14 | "onlyUpdatePeerDependentsWhenOutOfRange": true
15 | },
16 | "ignore": ["mochi-web", "@mochi-ui/storybook"]
17 | }
18 |
--------------------------------------------------------------------------------
/.commitlintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: ['@commitlint/config-conventional'],
3 | rules: {
4 | 'header-max-length': [2, 'always', 80],
5 | 'type-enum': [
6 | 2,
7 | 'always',
8 | [
9 | 'feat',
10 | 'fix',
11 | 'release',
12 | 'docs',
13 | 'style',
14 | 'refactor',
15 | 'perf',
16 | 'test',
17 | 'chore',
18 | 'revert',
19 | 'ci',
20 | 'build',
21 | 'hotfix',
22 | ],
23 | ],
24 | },
25 | }
26 |
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 2
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
11 | [*.md]
12 | trim_trailing_whitespace = false
13 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | .next/*
2 | *.json
3 | *.md
4 | *.css
5 | *.d.ts
6 | node_modules
7 | .turbo
8 | .changeset
9 | dist
10 | public/*
11 | tests/*
12 | scripts/*
13 | *.config.js
14 | .DS_Store
15 | node_modules
16 | coverage
17 | .next
18 | build
19 | plopfile.js
20 | !.commitlintrc.cjs
21 | jest.config.js
22 | !tsup.config.ts
23 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: 'npm'
4 | directory: '/'
5 | open-pull-requests-limit: 0
6 | schedule:
7 | interval: 'weekly'
8 | allow:
9 | - dependency-type: 'production'
10 |
--------------------------------------------------------------------------------
/.github/workflows/deploy-mochi-web-beta.yml:
--------------------------------------------------------------------------------
1 | name: Vercel Preview Deployment
2 | env:
3 | VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
4 | VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
5 | on:
6 | release:
7 | types: [prereleased]
8 | jobs:
9 | Deploy-Preview:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v2
13 | - name: Merge to Preview
14 | uses: devmasx/merge-branch@master
15 | with:
16 | type: now
17 | from_branch: mochi-web-preview
18 | target_branch: mochi-web-preview-release
19 | github_token: ${{ secrets.GITHUB_TOKEN }}
--------------------------------------------------------------------------------
/.github/workflows/deploy-mochi-web-prod.yml:
--------------------------------------------------------------------------------
1 | name: Vercel Production Deployment
2 | env:
3 | VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
4 | VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
5 | on:
6 | workflow_dispatch:
7 | release:
8 | types: [released]
9 | jobs:
10 | Deploy-Production:
11 | runs-on: ubuntu-latest
12 | steps:
13 | - uses: actions/checkout@v2
14 | - name: Merge to Prod
15 | uses: devmasx/merge-branch@master
16 | with:
17 | type: now
18 | from_branch: main
19 | target_branch: mochi-web-prod
20 | github_token: ${{ secrets.GITHUB_TOKEN }}
--------------------------------------------------------------------------------
/.husky/.gitignore:
--------------------------------------------------------------------------------
1 | _
2 |
--------------------------------------------------------------------------------
/.husky/commit-msg:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | npx --no-install commitlint --edit ""
5 |
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | pnpm lint-staged
5 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | auto-install-peers=true
2 |
--------------------------------------------------------------------------------
/.npmrc.example:
--------------------------------------------------------------------------------
1 | auto-install-peers=true
2 | registry=https://registry.npmjs.org
3 | @mochi-ui:registry=https://registry.npmjs.org
4 | @mochi-web3:registry=https://registry.npmjs.org
5 | //registry.npmjs.org/:_authToken=NPM_ACCESS_TOKEN
6 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | /build/
2 | /dist/
3 | coverage/
4 | __snapshots__/
5 | node_modules/
6 | storybook-static/
7 | package-lock.json
8 | pnpm-lock.yaml
9 | yarn.lock
10 | package.json
11 |
12 | # changeset
13 | CHANGELOG.md
14 | .changeset/
15 | # next.js
16 | /.next/
17 | /out/
18 | # turborepo
19 | /.turbo/
20 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "bracketSpacing": true,
3 | "bracketSameLine": false,
4 | "jsxSingleQuote": false,
5 | "printWidth": 80,
6 | "proseWrap": "always",
7 | "semi": false,
8 | "singleQuote": true,
9 | "tabWidth": 2,
10 | "trailingComma": "all",
11 | "htmlWhitespaceSensitivity": "ignore"
12 | }
13 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "eslint.workingDirectories": [
3 | {
4 | "mode": "auto"
5 | }
6 | ],
7 | "cSpell.words": ["clsx"]
8 | }
9 |
--------------------------------------------------------------------------------
/apps/mochi-web/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | indent_style = space
5 | indent_size = 2
6 | end_of_line = lf
7 | charset = utf-8
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 |
--------------------------------------------------------------------------------
/apps/mochi-web/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['next/core-web-vitals', 'next', 'custom/next'],
4 | }
5 |
--------------------------------------------------------------------------------
/apps/mochi-web/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 |
21 | # debug
22 | npm-debug.log*
23 | yarn-debug.log*
24 | yarn-error.log*
25 |
26 | # local env files
27 | .env.local
28 | .env.development.local
29 | .env.test.local
30 | .env.production.local
31 | .env
32 |
33 | # vercel
34 | .vercel
35 |
36 | # editor
37 | .vscode
38 |
39 | components/icons/components
40 |
41 | .env
42 |
--------------------------------------------------------------------------------
/apps/mochi-web/__tests__/components/copy-button.test.tsx:
--------------------------------------------------------------------------------
1 | import { render } from '@testing-library/react'
2 | import CopyButton from '~cpn/CopyButton'
3 |
4 | describe('CopyButton', () => {
5 | it('renders the button with the correct text', () => {
6 | const buttonText = 'Copy me'
7 | const { getByText } = render({buttonText})
8 | const button = getByText('Copy...me')
9 | expect(button).toBeInTheDocument()
10 | })
11 | })
12 |
--------------------------------------------------------------------------------
/apps/mochi-web/assets/Inter-Black.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/assets/Inter-Black.ttf
--------------------------------------------------------------------------------
/apps/mochi-web/assets/Inter-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/assets/Inter-Bold.ttf
--------------------------------------------------------------------------------
/apps/mochi-web/assets/Inter-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/assets/Inter-ExtraBold.ttf
--------------------------------------------------------------------------------
/apps/mochi-web/assets/Inter-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/assets/Inter-ExtraLight.ttf
--------------------------------------------------------------------------------
/apps/mochi-web/assets/Inter-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/assets/Inter-Light.ttf
--------------------------------------------------------------------------------
/apps/mochi-web/assets/Inter-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/assets/Inter-Medium.ttf
--------------------------------------------------------------------------------
/apps/mochi-web/assets/Inter-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/assets/Inter-Regular.ttf
--------------------------------------------------------------------------------
/apps/mochi-web/assets/Inter-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/assets/Inter-SemiBold.ttf
--------------------------------------------------------------------------------
/apps/mochi-web/assets/Inter-Thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/assets/Inter-Thin.ttf
--------------------------------------------------------------------------------
/apps/mochi-web/assets/RobotoMono-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/assets/RobotoMono-Light.ttf
--------------------------------------------------------------------------------
/apps/mochi-web/assets/RobotoMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/assets/RobotoMono-Regular.ttf
--------------------------------------------------------------------------------
/apps/mochi-web/components/Changelog/ChangelogDetailTitle/index.ts:
--------------------------------------------------------------------------------
1 | export * from './ChangelogDetailTitle'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Changelog/Markdown/index.ts:
--------------------------------------------------------------------------------
1 | export * from './Markdown'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/DashLine.tsx:
--------------------------------------------------------------------------------
1 | export default function DashLine() {
2 | return (
3 |
6 | )
7 | }
8 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Dashboard/Card/index.ts:
--------------------------------------------------------------------------------
1 | export { card } from './styles'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Dashboard/Form/styles.ts:
--------------------------------------------------------------------------------
1 | import type { VariantProps } from 'class-variance-authority'
2 | import { cva } from 'class-variance-authority'
3 |
4 | const labelVariant = cva([
5 | 'tracking-wider font-medium text-dashboard-gray-2 text-xs uppercase mb-2 block',
6 | ])
7 |
8 | type LabelProps = VariantProps & { className?: string }
9 |
10 | export const label = ({ className = '', ...rest }: LabelProps = {}) =>
11 | labelVariant({ className, ...rest })
12 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Dashboard/Input/index.ts:
--------------------------------------------------------------------------------
1 | export { Input } from './Input'
2 | export { FileInput } from './FileInput'
3 | export { input } from './styles'
4 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Dashboard/Menu/index.ts:
--------------------------------------------------------------------------------
1 | export { Menu } from './Menu'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Dashboard/Pagination/index.ts:
--------------------------------------------------------------------------------
1 | export { Pagination } from './Pagination'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Dashboard/Radio/index.ts:
--------------------------------------------------------------------------------
1 | export { RadioGroup } from './RadioGroup'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Dashboard/Select/index.ts:
--------------------------------------------------------------------------------
1 | export { Select } from './Select'
2 | export { select } from './styles'
3 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Dashboard/Switch/index.ts:
--------------------------------------------------------------------------------
1 | export { Switch } from './Switch'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Dashboard/Table/index.ts:
--------------------------------------------------------------------------------
1 | export { Table } from './Table'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Dashboard/Tabs/index.ts:
--------------------------------------------------------------------------------
1 | export { Tabs } from './Tabs'
2 | export { tab } from './styles'
3 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Dashboard/Tabs/styles.ts:
--------------------------------------------------------------------------------
1 | import type { VariantProps } from 'class-variance-authority'
2 | import { cva } from 'class-variance-authority'
3 |
4 | const variant = cva(['w-full flex flex-col gap-y-2'], {
5 | variants: {
6 | appearance: {
7 | default: ['border-black/10'],
8 | invalid: ['border-mochi-900'],
9 | },
10 | },
11 | defaultVariants: {
12 | appearance: 'default',
13 | },
14 | })
15 |
16 | type Props = VariantProps & { className?: string }
17 |
18 | export const tab = ({ className = '', ...rest }: Props = {}) =>
19 | variant({ className, ...rest })
20 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Dashboard/types/misc.ts:
--------------------------------------------------------------------------------
1 | export type BoxProps = {
2 | as?: T
3 | } & JSX.IntrinsicElements[T]
4 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/DashboardBody.tsx:
--------------------------------------------------------------------------------
1 | import { PageContent } from '@mochi-ui/page-content'
2 |
3 | interface DashboardBodyProps {
4 | children: React.ReactNode
5 | className?: string
6 | containerClassName?: string
7 | }
8 |
9 | export const DashboardBody = (props: DashboardBodyProps) => {
10 | const { children, className, containerClassName } = props
11 |
12 | return (
13 | {children}
14 | )
15 | }
16 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Header/index.ts:
--------------------------------------------------------------------------------
1 | export * from './Header'
2 | export * from './MobileNavAccordionItem'
3 | export * from './type'
4 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Header/type.ts:
--------------------------------------------------------------------------------
1 | import { ReactNode } from 'react'
2 |
3 | export interface NavItem {
4 | label: ReactNode
5 | href?: string
6 | onClick?: () => void
7 | iconLeft?: ReactNode
8 | component?: ReactNode
9 | }
10 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Header/util.ts:
--------------------------------------------------------------------------------
1 | import { create } from 'zustand'
2 |
3 | export const useIsNavOpenStore = create<{
4 | isNavOpen: boolean
5 | setIsNavOpen: (b: boolean) => void
6 | }>((set) => ({
7 | isNavOpen: false,
8 | setIsNavOpen: (isNavOpen) => set({ isNavOpen }),
9 | }))
10 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/Home/ChainAndPartner.tsx:
--------------------------------------------------------------------------------
1 | import { NativeImage } from '~cpn/NativeImage'
2 |
3 | export default function ChainAndPartner() {
4 | return (
5 |
14 | )
15 | }
16 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MainSidebarHeader.tsx:
--------------------------------------------------------------------------------
1 | import { NativeImage } from './NativeImage'
2 |
3 | export const MainSidebarHeader = ({ expanded }: { expanded?: boolean }) => {
4 | return expanded ? (
5 |
10 | ) : (
11 |
12 | )
13 | }
14 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/AmountInput/index.tsx:
--------------------------------------------------------------------------------
1 | export * from './AmountInput'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/AmountInput/useSolPrice.ts:
--------------------------------------------------------------------------------
1 | import useSWR from 'swr'
2 | import { API } from '~constants/api'
3 |
4 | export function useSolPrice() {
5 | const { data } = useSWR(['sol-price'], async () => {
6 | const data = await API.MOCHI_PAY.get('/999/tokens/sol').json((r) => r.data)
7 | return data.price ?? 0
8 | })
9 |
10 | return data
11 | }
12 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/ChainPicker/EmptyList.tsx:
--------------------------------------------------------------------------------
1 | export const EmptyList: React.FC = () => (
2 |
3 | No results
4 |
5 | Try searching for something else.
6 |
7 |
8 | )
9 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/ChainPicker/data.ts:
--------------------------------------------------------------------------------
1 | import { Eth, Bnb, Ftm, Matic, Avalanche, Sol } from '@mochi-ui/icons'
2 |
3 | export const Chains = [
4 | {
5 | id: 1,
6 | name: 'Ethereum',
7 | icon: Eth,
8 | },
9 | {
10 | id: 2,
11 | name: 'Binance',
12 | icon: Bnb,
13 | },
14 | {
15 | id: 3,
16 | name: 'Fantom',
17 | icon: Ftm,
18 | },
19 | {
20 | id: 4,
21 | name: 'Polygon',
22 | icon: Matic,
23 | },
24 | {
25 | id: 5,
26 | name: 'Avalanche',
27 | icon: Avalanche,
28 | },
29 | {
30 | id: 6,
31 | name: 'Solana',
32 | icon: Sol,
33 | },
34 | ]
35 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/ChainPicker/index.ts:
--------------------------------------------------------------------------------
1 | export * from './ChainItem'
2 | export * from './ChainList'
3 | export * from './ChainPicker'
4 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/MessagePicker/useDefaultMessage.ts:
--------------------------------------------------------------------------------
1 | import useSWR from 'swr'
2 | import { API } from '~constants/api'
3 |
4 | export function useDefaultMessage(profileId?: string) {
5 | const { data } = useSWR(
6 | ['tip-default-message', profileId],
7 | async ([_, profileId]) => {
8 | if (!profileId) return ''
9 | return API.MOCHI.get(
10 | `/profiles/${profileId}/settings/tip/default-message`,
11 | )
12 | .notFound(() => '')
13 | .json((r) => r.data.message)
14 | },
15 | )
16 |
17 | return data
18 | }
19 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/PlatformPicker/icons/x-ic.tsx:
--------------------------------------------------------------------------------
1 | import { SVGProps } from 'react'
2 |
3 | export default function X(props: SVGProps) {
4 | return (
5 |
18 | )
19 | }
20 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/PlatformPicker/index.ts:
--------------------------------------------------------------------------------
1 | export * from './PlatformItem'
2 | export * from './PlatformList'
3 | export * from './PlatformPicker'
4 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/PlatformPicker/type.ts:
--------------------------------------------------------------------------------
1 | // TODO: replace it with Mochi Types
2 | export type Platform = {
3 | id: string
4 | platform: PlatformType
5 | }
6 |
7 | export type PlatformType =
8 | | 'discord'
9 | | 'github'
10 | | 'telegram'
11 | | 'facebook'
12 | | 'x'
13 | | 'email'
14 | | 'on-chain'
15 | | 'reddit'
16 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/Recipient/EmptyList.tsx:
--------------------------------------------------------------------------------
1 | export const EmptyList: React.FC = () => (
2 |
3 | No results
4 |
5 | Try searching for something else.
6 |
7 |
8 | )
9 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/Recipient/index.tsx:
--------------------------------------------------------------------------------
1 | export * from './Recipient'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/TokenPicker/EmptyList.tsx:
--------------------------------------------------------------------------------
1 | export const EmptyList: React.FC = () => (
2 |
3 | No results
4 |
5 | Try searching for something else.
6 |
7 |
8 | )
9 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/TokenPicker/default-data.ts:
--------------------------------------------------------------------------------
1 | import { Balance } from '~store'
2 |
3 | export const DEFAULT_BALANCE = {
4 | id: 'default-balance',
5 | amount: '$0',
6 | token: {
7 | id: '',
8 | name: 'sol',
9 | symbol: 'SOL',
10 | icon: 'https://cdn.discordapp.com/emojis/1150803875884978216.png?size=240&quality=lossless',
11 | },
12 | type: 'token',
13 | asset_balance: 0,
14 | usd_balance: 0,
15 | } as unknown as Balance
16 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/TokenPicker/index.ts:
--------------------------------------------------------------------------------
1 | export * from './TokenItem'
2 | export * from './TokenList'
3 | export * from './TokenPicker'
4 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/TokenPicker/sort-order.json:
--------------------------------------------------------------------------------
1 | ["SOL"]
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/MochiWidget/TokenPicker/type.ts:
--------------------------------------------------------------------------------
1 | export type SectionBase- = {
2 | title: string
3 | data: Item[]
4 | }
5 |
6 | export type Moniker = {
7 | type: 'moniker'
8 | id: string
9 | name: string
10 | group: string
11 | asset_balance: number
12 | token_amount: number
13 | source: {
14 | id: string
15 | title: string
16 | }
17 | token: {
18 | icon: string
19 | address: string
20 | price: number
21 | decimal: number
22 | symbol: string
23 | chain_id: string
24 | native: boolean
25 | chain: {
26 | type: string
27 | }
28 | }
29 | disabled: boolean
30 | }
31 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/NativeImage/index.ts:
--------------------------------------------------------------------------------
1 | export * from './NativeImage'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/NotificationList/Skeleton.tsx:
--------------------------------------------------------------------------------
1 | import Row from './Row'
2 |
3 | const Skeleton = () => {
4 | return
{}} isSkeleton action="transfer" time="" />
5 | }
6 |
7 | export default Skeleton
8 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/PayRequest/index.tsx:
--------------------------------------------------------------------------------
1 | export { default as PayLink } from './PayLink'
2 | export { default as PayMe } from './PayMe'
3 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/TransactionPeekingCard/index.ts:
--------------------------------------------------------------------------------
1 | export * from './TransactionPeekingCard'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/TransactionTable/index.ts:
--------------------------------------------------------------------------------
1 | export * from './TransactionTable'
2 | export * from './types'
3 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/VerifyWallet/index.tsx:
--------------------------------------------------------------------------------
1 | export * from './VerifyWallet'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/base/alert/index.ts:
--------------------------------------------------------------------------------
1 | export * from './alert'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/base/avatar/index.ts:
--------------------------------------------------------------------------------
1 | export * from './avatar'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/base/button/index.ts:
--------------------------------------------------------------------------------
1 | export * from './button'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/base/dnd/StrictModeDroppable.tsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useState } from 'react'
2 | import { Droppable, DroppableProps } from 'react-beautiful-dnd'
3 |
4 | export const StrictModeDroppable = ({ children, ...props }: DroppableProps) => {
5 | const [enabled, setEnabled] = useState(false)
6 |
7 | useEffect(() => {
8 | const animation = requestAnimationFrame(() => setEnabled(true))
9 | return () => {
10 | cancelAnimationFrame(animation)
11 | setEnabled(false)
12 | }
13 | }, [])
14 |
15 | if (!enabled) {
16 | return null
17 | }
18 |
19 | return {children}
20 | }
21 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/base/dnd/index.ts:
--------------------------------------------------------------------------------
1 | export * from './DndWrapper'
2 | export * from './DndItem'
3 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/base/input/index.ts:
--------------------------------------------------------------------------------
1 | export * from './input'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/base/radio/index.ts:
--------------------------------------------------------------------------------
1 | export * from './radio'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/base/section-list/index.ts:
--------------------------------------------------------------------------------
1 | export * from './section-list'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/base/switch/index.ts:
--------------------------------------------------------------------------------
1 | export * from './switch'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/base/text/index.ts:
--------------------------------------------------------------------------------
1 | export * from './text'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/explore/index/components/index.ts:
--------------------------------------------------------------------------------
1 | export * from './ChainPicker'
2 | export * from './PlatformPicker'
3 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/explore/index/index.ts:
--------------------------------------------------------------------------------
1 | export * from './sections'
2 | export * from './stores'
3 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/explore/index/sections/index.ts:
--------------------------------------------------------------------------------
1 | export * from './SummarySection'
2 | export * from './TransactionSection'
3 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/explore/index/stores/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useTransactionSummaryStore'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/components/landing/Divider.tsx:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 |
3 | export function Divider({
4 | noSpace = false,
5 | fullWidth = false,
6 | className = '',
7 | }: {
8 | className?: string
9 | noSpace?: boolean
10 | fullWidth?: boolean
11 | }) {
12 | return (
13 |
24 | )
25 | }
26 |
--------------------------------------------------------------------------------
/apps/mochi-web/constants/date.ts:
--------------------------------------------------------------------------------
1 | export const TIMESTAMP_FORMAT = 'MMMM dd yyyy, hh:mm aaa'
2 |
--------------------------------------------------------------------------------
/apps/mochi-web/constants/events.ts:
--------------------------------------------------------------------------------
1 | const TIP_WIDGET = {
2 | FOCUS_AMOUNT: 'mochi__tip_widget__focus_amount',
3 | }
4 |
5 | const EVENTS = { TIP_WIDGET }
6 |
7 | export default EVENTS
8 |
--------------------------------------------------------------------------------
/apps/mochi-web/constants/mochi.ts:
--------------------------------------------------------------------------------
1 | import UI from '@consolelabs/mochi-formatter'
2 | import MochiApi from '@consolelabs/mochi-rest'
3 | import { MOCHI_API, MOCHI_PAY_API, MOCHI_PROFILE_API } from '~envs'
4 |
5 | const api = new MochiApi({
6 | payUrl: MOCHI_PAY_API,
7 | profileUrl: MOCHI_PROFILE_API,
8 | baseUrl: MOCHI_API,
9 | log: false,
10 | })
11 | api.init()
12 |
13 | UI.api = api
14 |
15 | export { UI, api }
16 |
--------------------------------------------------------------------------------
/apps/mochi-web/constants/resources.ts:
--------------------------------------------------------------------------------
1 | export const TELEGRAM_LINK = 'https://t.me/dmmochibot'
2 | export const DISCORD_INSTALL_BOT_LINK =
3 | 'https://discord.com/oauth2/authorize?client_id=1062540132269432863&permissions=8&scope=bot%20applications.commands'
4 |
--------------------------------------------------------------------------------
/apps/mochi-web/context/wallets/ethereum/ronin/ronin.d.ts:
--------------------------------------------------------------------------------
1 | // Types declaration for Ronin global variable
2 | declare global {
3 | interface Window {
4 | ronin: {
5 | provider: ethers.providers.ExternalProvider
6 | roninEvent: EventListener
7 | }
8 | }
9 | }
10 |
11 | export {}
12 |
--------------------------------------------------------------------------------
/apps/mochi-web/context/wallets/sui/SuiWalletProvider.tsx:
--------------------------------------------------------------------------------
1 | import React, { ReactNode } from 'react'
2 | import {
3 | SuiDevnetChain,
4 | SuiTestnetChain,
5 | SuiMainnetChain,
6 | WalletProvider,
7 | } from '@suiet/wallet-kit'
8 |
9 | const chains = [SuiDevnetChain, SuiTestnetChain, SuiMainnetChain]
10 |
11 | export type SUIWalletProviderProps = {
12 | children: ReactNode
13 | }
14 |
15 | export const SuiWalletProvider = ({ children }: SUIWalletProviderProps) => {
16 | return (
17 |
18 | {children}
19 |
20 | )
21 | }
22 |
--------------------------------------------------------------------------------
/apps/mochi-web/hooks/app/useFetchChangelogLatest.ts:
--------------------------------------------------------------------------------
1 | import useSWR from 'swr'
2 | import { API, GET_PATHS } from '~constants/api'
3 | import { ResponseProductChangelogLatest } from '~types/mochi-schema'
4 |
5 | export const SWR_KEY_FETCH_CHANGELOG_LATEST = 'SWR_KEY_FETCH_CHANGELOG_LATEST'
6 |
7 | export const useFetchChangelogLatest = () => {
8 | const { data, ...rest } = useSWR(
9 | [SWR_KEY_FETCH_CHANGELOG_LATEST],
10 | async () => {
11 | return API.MOCHI.get(GET_PATHS.CHANGELOGS_LATEST).json((r) => r ?? [])
12 | },
13 | )
14 |
15 | return {
16 | data: data?.data,
17 | ...rest,
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/apps/mochi-web/hooks/useIsVisible.ts:
--------------------------------------------------------------------------------
1 | import { useState, useEffect } from 'react'
2 |
3 | export function useIsVisible(ref: React.RefObject | null) {
4 | const [isIntersecting, setIntersecting] = useState(false)
5 |
6 | useEffect(() => {
7 | const observer = new IntersectionObserver(([entry]) =>
8 | setIntersecting(entry.isIntersecting),
9 | )
10 |
11 | if (ref?.current) {
12 | observer.observe(ref.current)
13 | }
14 |
15 | return () => {
16 | observer.disconnect()
17 | }
18 | }, [ref])
19 |
20 | return isIntersecting
21 | }
22 |
--------------------------------------------------------------------------------
/apps/mochi-web/hooks/wallets/useChain.ts:
--------------------------------------------------------------------------------
1 | import { useAppWalletContext } from 'context/wallet-context'
2 | import { solanaChain } from 'context/wallets/solana/chains'
3 | import { useNetwork } from 'wagmi'
4 |
5 | export const useChain = () => {
6 | const { blockchain, getChainById } = useAppWalletContext()
7 | const { chain: activeChain } = useNetwork()
8 |
9 | const evmChain = activeChain ? getChainById(activeChain.id) : undefined
10 |
11 | return {
12 | chain: blockchain === 'EVM' ? evmChain : solanaChain,
13 | unsupported: blockchain === 'EVM' ? activeChain?.unsupported : false,
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/apps/mochi-web/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 | ///
4 |
5 | // NOTE: This file should not be edited
6 | // see https://nextjs.org/docs/basic-features/typescript for more information.
7 |
--------------------------------------------------------------------------------
/apps/mochi-web/pages/[username]/receive/[pay_code].tsx:
--------------------------------------------------------------------------------
1 | import PayRequest, { getServerSideProps, Props } from '../../pay/[pay_code]'
2 |
3 | export { getServerSideProps }
4 |
5 | export default function PayMe({ payRequest }: Props) {
6 | return
7 | }
8 |
9 | PayMe.layoutType = 'landing'
10 |
--------------------------------------------------------------------------------
/apps/mochi-web/pages/api/auth/discord-callback.ts:
--------------------------------------------------------------------------------
1 | import { NextApiRequest, NextApiResponse } from 'next'
2 | import qs from 'query-string'
3 |
4 | export default async function handler(
5 | req: NextApiRequest,
6 | res: NextApiResponse,
7 | ) {
8 | const { url_location, ...rest } = req.query
9 | return res.redirect(`${url_location}?${qs.stringify(rest)}`)
10 | }
11 |
--------------------------------------------------------------------------------
/apps/mochi-web/pages/api/auth/facebook-callback.ts:
--------------------------------------------------------------------------------
1 | import { NextApiRequest, NextApiResponse } from 'next'
2 | import qs from 'query-string'
3 |
4 | export default async function handler(
5 | req: NextApiRequest,
6 | res: NextApiResponse,
7 | ) {
8 | const { url_location, ...rest } = req.query
9 | return res.redirect(`${url_location}?${qs.stringify(rest)}`)
10 | }
11 |
--------------------------------------------------------------------------------
/apps/mochi-web/pages/api/auth/mail-callback.ts:
--------------------------------------------------------------------------------
1 | import handler from './discord-callback'
2 |
3 | export default handler
4 |
--------------------------------------------------------------------------------
/apps/mochi-web/pages/api/auth/telegram-callback.ts:
--------------------------------------------------------------------------------
1 | import { NextApiRequest, NextApiResponse } from 'next'
2 | import { HOME_URL } from '~envs'
3 |
4 | export default async function handler(
5 | req: NextApiRequest,
6 | res: NextApiResponse,
7 | ) {
8 | const { token, url_location } = req.query
9 | return res.redirect(
10 | `${HOME_URL}?token=${token}${
11 | url_location ? `&url_location=${url_location}` : ''
12 | }`,
13 | )
14 | }
15 |
--------------------------------------------------------------------------------
/apps/mochi-web/pages/api/auth/twitter-callback.ts:
--------------------------------------------------------------------------------
1 | import handler from './discord-callback'
2 |
3 | export default handler
4 |
--------------------------------------------------------------------------------
/apps/mochi-web/pages/applications/[id]/revenue.tsx:
--------------------------------------------------------------------------------
1 | import { PageHeader, PageHeaderTitle } from '@mochi-ui/core'
2 | import { DashboardBody } from '~cpn/DashboardBody'
3 |
4 | const RevenuePage = () => {
5 | return (
6 | <>
7 |
8 | Revenue
9 |
10 |
11 | TBD
12 | >
13 | )
14 | }
15 |
16 | export default RevenuePage
17 |
--------------------------------------------------------------------------------
/apps/mochi-web/pages/privacy.tsx:
--------------------------------------------------------------------------------
1 | import { Layout } from '~app/layout'
2 | import { SEO } from '~app/layout/seo'
3 | import { PAGES } from '~constants'
4 |
5 | export default function PrivacyPolicy() {
6 | return (
7 |
8 |
9 |
15 |
16 | )
17 | }
18 |
19 | PrivacyPolicy.layoutType = 'landing'
20 |
--------------------------------------------------------------------------------
/apps/mochi-web/pages/server/index.tsx:
--------------------------------------------------------------------------------
1 | import { GetServerSideProps } from 'next'
2 |
3 | export const getServerSideProps: GetServerSideProps = async () => {
4 | return {
5 | notFound: true,
6 | }
7 | }
8 |
9 | export default function Index() {
10 | return null
11 | }
12 |
--------------------------------------------------------------------------------
/apps/mochi-web/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/apps/mochi-web/proxy-config.json:
--------------------------------------------------------------------------------
1 | {
2 | "Mochi Proxy": {
3 | "hostname": "localhost",
4 | "source": 3000,
5 | "target": 3001,
6 | "key": "localhost-key.pem",
7 | "cert": "localhost.pem"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/apps/mochi-web/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/android-chrome-192x192.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/android-chrome-512x512.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/android-chrome-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/android-chrome-96x96.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/ads/512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/ads/512x512.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/ads/big-ad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/ads/big-ad.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/ads/discord-1546x423.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/ads/discord-1546x423.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/ads/no-img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/ads/no-img.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/ads/small-ad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/ads/small-ad.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/ads/tele-1546x423.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/ads/tele-1546x423.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/app-statistics.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/app-statistics.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/coin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/coin.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/dashboard/coin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/dashboard/coin.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/dashboard/xp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/dashboard/xp.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/eth-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/eth-icon.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/explore/explore.thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/explore/explore.thumbnail.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/fail-stamp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/fail-stamp.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/mochi-gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/mochi-gray.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/mochi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/mochi.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/mochisan-meditate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/mochisan-meditate.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/mochisan-money.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/mochisan-money.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/mochisan-panic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/mochisan-panic.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/mochisan-spaceship.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/mochisan-spaceship.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/mochisan-stars.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/mochisan-stars.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/mochisan-vault.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/mochisan-vault.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/mochisan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/mochisan.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/money.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/money.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/sol-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/sol-icon.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/success-stamp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/success-stamp.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/ticker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/ticker.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/tip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/tip.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/tip/dianne.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/tip/dianne.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/tip/edwards.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/tip/edwards.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/tip/jenny.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/tip/jenny.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/tip/simmons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/tip/simmons.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/tip/wade.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/tip/wade.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/tx/achievement.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/tx/achievement.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/tx/appreciation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/tx/appreciation.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/tx/hpbd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/tx/hpbd.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/tx/wedding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/tx/wedding.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/verify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/verify.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/wallet-intro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/wallet-intro.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/assets/watch-red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/assets/watch-red.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #da532c
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/apps/mochi-web/public/chain-and-partner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/chain-and-partner.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/changelog-thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/changelog-thumbnail.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/developer/balance.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/developer/balance.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/developer/browse-api-left-border.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/developer/browse-api-left-border.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/developer/build-with-mochi-apis-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/developer/build-with-mochi-apis-1.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/developer/link.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/developer/link.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/developer/profile-circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/developer/profile-circle.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/developer/server.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/developer/server.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/developer/tip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/developer/tip.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/developer/vault.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/developer/vault.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/diag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/diag.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/dot-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/dot-bg.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/favicon-16x16.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/favicon-32x32.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/favicon.ico
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-1.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-10.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-11.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-12.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-13.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-14.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-15.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-16.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-2.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-3.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-4.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-5.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-6.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-7.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-8.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/feature-9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/feature-9.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/featured.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/featured.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/hero-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/hero-bg.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/home.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/home/api.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/home/api.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/home/apple.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/home/apple.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/home/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/home/avatar.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/home/express-yourself.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/home/express-yourself.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/home/send-n-receive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/home/send-n-receive.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/home/social-icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/home/social-icons.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/icon-container.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/icon-container.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/integrated-chains/aptos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/integrated-chains/aptos.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/integrated-chains/arb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/integrated-chains/arb.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/integrated-chains/base.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/integrated-chains/base.webp
--------------------------------------------------------------------------------
/apps/mochi-web/public/integrated-chains/bnb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/integrated-chains/bnb.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/integrated-chains/btc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/integrated-chains/btc.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/integrated-chains/eth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/integrated-chains/eth.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/integrated-chains/ftm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/integrated-chains/ftm.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/integrated-chains/okx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/integrated-chains/okx.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/integrated-chains/onus.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/integrated-chains/onus.webp
--------------------------------------------------------------------------------
/apps/mochi-web/public/integrated-chains/op.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/integrated-chains/op.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/integrated-chains/polygon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/integrated-chains/polygon.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/integrated-chains/sol.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/integrated-chains/sol.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/integrated-chains/sui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/integrated-chains/sui.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/logo.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/mochi-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/mochi-logo.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/mochi-qilin.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/mochi-qilin.jpg
--------------------------------------------------------------------------------
/apps/mochi-web/public/mochi-snowman.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/mochi-snowman.jpg
--------------------------------------------------------------------------------
/apps/mochi-web/public/mochi-text-circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/mochi-text-circle.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/mochi-welcome.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/mochi-welcome.jpg
--------------------------------------------------------------------------------
/apps/mochi-web/public/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/mstile-150x150.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/nft-rarity-ranking.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/nft-rarity-ranking.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/partner/blue-move.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/partner/blue-move.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/partner/okx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/partner/okx.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/partner/onus.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/partner/onus.webp
--------------------------------------------------------------------------------
/apps/mochi-web/public/partner/solscan.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/partner/solscan.webp
--------------------------------------------------------------------------------
/apps/mochi-web/public/party.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/party.gif
--------------------------------------------------------------------------------
/apps/mochi-web/public/pay-request-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/pay-request-bg.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/platforms/app.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/platforms/app.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/platforms/discord.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/platforms/discord.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/platforms/telegram.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/platforms/telegram.webp
--------------------------------------------------------------------------------
/apps/mochi-web/public/platforms/web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/platforms/web.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/platforms/x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/platforms/x.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/rings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/rings.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/rocket.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/rocket.gif
--------------------------------------------------------------------------------
/apps/mochi-web/public/rocket.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/rocket.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/site.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "",
3 | "short_name": "",
4 | "icons": [
5 | {
6 | "src": "/android-chrome-96x96.png",
7 | "sizes": "96x96",
8 | "type": "image/png"
9 | }
10 | ],
11 | "theme_color": "#ffffff",
12 | "background_color": "#ffffff",
13 | "display": "standalone"
14 | }
15 |
--------------------------------------------------------------------------------
/apps/mochi-web/public/svg/wallet-icons/argent.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/mochi-web/public/svg/wallet-icons/coinbase.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/mochi-web/public/svg/wallet-icons/injected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/svg/wallet-icons/injected.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/svg/wallet-icons/ledger.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/mochi-web/public/teams/dango.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/teams/dango.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/thumbs-up.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/thumbs-up.gif
--------------------------------------------------------------------------------
/apps/mochi-web/public/tip-theme-christmas.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/tip-theme-christmas.jpg
--------------------------------------------------------------------------------
/apps/mochi-web/public/tip-theme-hpbd.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/tip-theme-hpbd.jpg
--------------------------------------------------------------------------------
/apps/mochi-web/public/tip-theme-more.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/tip-theme-more.jpg
--------------------------------------------------------------------------------
/apps/mochi-web/public/tip-theme-new-year.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/tip-theme-new-year.jpg
--------------------------------------------------------------------------------
/apps/mochi-web/public/tip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/tip.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/to-the-moon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/to-the-moon.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/util-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/util-1.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/util-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/util-2.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/util-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/util-3.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/util-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/util-4.png
--------------------------------------------------------------------------------
/apps/mochi-web/public/warpcast.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/mochi-web/public/warpcast.png
--------------------------------------------------------------------------------
/apps/mochi-web/store/index.ts:
--------------------------------------------------------------------------------
1 | export * from './auth'
2 | export * from './dashboard'
3 | export * from './profile'
4 | export * from './wallets'
5 | export * from './mochi-widget'
6 | export * from './unsaved-changes'
7 |
--------------------------------------------------------------------------------
/apps/mochi-web/store/mochi-widget.ts:
--------------------------------------------------------------------------------
1 | import { create } from 'zustand'
2 | import { Moniker } from '~cpn/MochiWidget/TokenPicker/type'
3 | import { Balance } from './wallets'
4 |
5 | type State = {
6 | selectedAsset: Balance | Moniker | null
7 | setSelectedAsset: (selectedAsset: Balance | Moniker | null) => void
8 | }
9 |
10 | export const useMochiWidget = create((set) => ({
11 | selectedAsset: null,
12 | setSelectedAsset: (selectedAsset) => set({ selectedAsset }),
13 | }))
14 |
--------------------------------------------------------------------------------
/apps/mochi-web/store/unsaved-changes.ts:
--------------------------------------------------------------------------------
1 | import { create } from 'zustand'
2 |
3 | type State = {
4 | unsavedChanges: boolean
5 | setUnsavedChanges: (unsavedChanges: boolean) => void
6 | warning: boolean
7 | toggleWarning: () => void
8 | }
9 |
10 | export const useUnsavedChanges = create((set) => ({
11 | unsavedChanges: false,
12 | setUnsavedChanges: (unsavedChanges) => set({ unsavedChanges }),
13 | warning: false,
14 | toggleWarning: () => set((state) => ({ warning: !state.warning })),
15 | }))
16 |
--------------------------------------------------------------------------------
/apps/mochi-web/styles/home.css:
--------------------------------------------------------------------------------
1 | .chat {
2 | background: linear-gradient(180deg, #A7ACB5 0%, #BBB4BB 100%);
3 | }
4 |
--------------------------------------------------------------------------------
/apps/mochi-web/styles/nprogress.css:
--------------------------------------------------------------------------------
1 | #nprogress .bar {
2 | @apply bg-gray-500;
3 | }
4 |
5 | #nprogress .peg {
6 | box-shadow: 0 0 10px rgb(232 139 136), 0 0 5px rgb(232 139 136);
7 | }
8 |
9 | #nprogress .spinner-icon {
10 | border-top-color: rgb(232 139 136);
11 | border-left-color: rgb(232 139 136);
12 | }
13 |
--------------------------------------------------------------------------------
/apps/mochi-web/types/api.ts:
--------------------------------------------------------------------------------
1 | export type Response = {
2 | data: T
3 | }
4 |
5 | export type Pagination = {
6 | page?: number
7 | limit?: number
8 | }
9 |
10 | export type CommonQuery = {
11 | sort?: string
12 | query?: string
13 | }
14 |
--------------------------------------------------------------------------------
/apps/mochi-web/types/app.ts:
--------------------------------------------------------------------------------
1 | export interface UrlValue {
2 | platform: string
3 | url: string
4 | }
5 |
6 | export interface PlatformValue {
7 | discord?: boolean
8 | telegram?: boolean
9 | web?: boolean
10 | }
11 |
12 | export interface AppDetailFormValues {
13 | urls: UrlValue[]
14 | platforms: PlatformValue
15 | webhook?: string
16 | app_name: string
17 | description?: string
18 | }
19 |
--------------------------------------------------------------------------------
/apps/mochi-web/types/global.d.ts:
--------------------------------------------------------------------------------
1 | interface Window {
2 | ethereum: any
3 | web3: any
4 | phantom: any
5 | glow: any
6 | ronin: any
7 | martian: any
8 | suiet: any
9 | }
10 |
11 | declare module 'browser-string-hexer' {
12 | export default function hexer(msg: string): string
13 | }
14 |
15 | declare module 'focus-visible' {}
16 |
--------------------------------------------------------------------------------
/apps/mochi-web/utils/changelog.ts:
--------------------------------------------------------------------------------
1 | export function getFirstImageUrl(content?: string) {
2 | const imgUrls: string[] = []
3 |
4 | const imgRegex = /!\[.*?\]\((.*?)\)/
5 |
6 | const match = content?.match(imgRegex) ?? false
7 |
8 | if (match && match[1]) {
9 | imgUrls.push(match[1])
10 | }
11 |
12 | return imgUrls.length > 0 ? imgUrls[0] : undefined
13 | }
14 |
--------------------------------------------------------------------------------
/apps/mochi-web/utils/omitUndefinedValues.ts:
--------------------------------------------------------------------------------
1 | export function omitUndefinedValues(obj: T): T {
2 | return Object.fromEntries(
3 | Object.entries(obj as any).filter(([_, value]) => value !== undefined),
4 | ) as T
5 | }
6 |
--------------------------------------------------------------------------------
/apps/mochi-web/utils/sol.ts:
--------------------------------------------------------------------------------
1 | import { PublicKey } from '@solana/web3.js'
2 |
3 | export const isSolAddress = (addr: string) => {
4 | try {
5 | return new PublicKey(addr) && PublicKey.isOnCurve(addr)
6 | } catch {
7 | return false
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/apps/vault/.env:
--------------------------------------------------------------------------------
1 | NEXT_PUBLIC_MOCHI_PROFILE_API_HOST="https://api-preview.mochi-profile.console.so"
2 |
--------------------------------------------------------------------------------
/apps/vault/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "next/core-web-vitals"
3 | }
4 |
--------------------------------------------------------------------------------
/apps/vault/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 | .yarn/install-state.gz
8 |
9 | # testing
10 | /coverage
11 |
12 | # next.js
13 | /.next/
14 | /out/
15 |
16 | # production
17 | /build
18 |
19 | # misc
20 | .DS_Store
21 | *.pem
22 |
23 | # debug
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 |
28 | # local env files
29 | .env*.local
30 |
31 | # vercel
32 | .vercel
33 |
34 | # typescript
35 | *.tsbuildinfo
36 | next-env.d.ts
37 |
--------------------------------------------------------------------------------
/apps/vault/app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/vault/app/favicon.ico
--------------------------------------------------------------------------------
/apps/vault/app/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | *,
6 | *::before,
7 | *::after {
8 | box-sizing: border-box;
9 | }
10 |
11 | html,
12 | body {
13 | min-height: 100%;
14 | }
15 |
16 | body {
17 | height: 100svh;
18 | }
19 |
--------------------------------------------------------------------------------
/apps/vault/components.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://ui.shadcn.com/schema.json",
3 | "style": "new-york",
4 | "rsc": true,
5 | "tsx": true,
6 | "tailwind": {
7 | "config": "tailwind.config.ts",
8 | "css": "app/globals.css",
9 | "baseColor": "zinc",
10 | "cssVariables": true,
11 | "prefix": ""
12 | },
13 | "aliases": {
14 | "components": "@/components",
15 | "utils": "@/lib/utils"
16 | }
17 | }
--------------------------------------------------------------------------------
/apps/vault/components/vaults.tsx:
--------------------------------------------------------------------------------
1 | import { Vault } from './vault'
2 | import { faker } from '@faker-js/faker'
3 |
4 | export function Vaults() {
5 | return (
6 |
7 | {new Array(4).fill(0).map((_, i) => {
8 | return (
9 |
13 | )
14 | })}
15 |
16 | )
17 | }
18 |
--------------------------------------------------------------------------------
/apps/vault/constants.ts:
--------------------------------------------------------------------------------
1 | import packageJson from './package.json'
2 |
3 | export const appVersion = packageJson.version
4 |
--------------------------------------------------------------------------------
/apps/vault/envs.ts:
--------------------------------------------------------------------------------
1 | export const MOCHI_PROFILE_API = `${
2 | process.env.NEXT_PUBLIC_MOCHI_PROFILE_API_HOST || 'mochi-profile-api'
3 | }/api/v1`
4 | export const AUTH_TELEGRAM_ID = process.env.NEXT_PUBLIC_AUTH_TELEGRAM_ID || ''
5 |
--------------------------------------------------------------------------------
/apps/vault/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import { type ClassValue, clsx } from 'clsx'
2 | import { twMerge } from 'tailwind-merge'
3 |
4 | export function cn(...inputs: ClassValue[]) {
5 | return twMerge(clsx(inputs))
6 | }
7 |
--------------------------------------------------------------------------------
/apps/vault/next.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | transpilePackages: ['@mochi-ui/icons'],
4 | }
5 |
6 | export default nextConfig
7 |
--------------------------------------------------------------------------------
/apps/vault/postcss.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('postcss-load-config').Config} */
2 | const config = {
3 | plugins: {
4 | tailwindcss: {},
5 | },
6 | };
7 |
8 | export default config;
9 |
--------------------------------------------------------------------------------
/apps/vault/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/apps/vault/public/logo.png
--------------------------------------------------------------------------------
/apps/vault/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/apps/vault/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from 'tailwindcss'
2 | import { mochiui } from '@mochi-ui/theme'
3 |
4 | const config = {
5 | darkMode: ['class'],
6 | content: [
7 | './**/*.{html,ts,tsx}',
8 | '!node_modules',
9 | './node_modules/@mochi-ui/theme/src/components/**/*.{ts,tsx}',
10 | ],
11 | prefix: '',
12 | theme: {
13 | container: {
14 | center: true,
15 | padding: '2rem',
16 | screens: {
17 | '2xl': '1400px',
18 | },
19 | },
20 | extend: {},
21 | },
22 | plugins: [mochiui(), require('tailwindcss-animate')],
23 | } satisfies Config
24 |
25 | export default config
26 |
--------------------------------------------------------------------------------
/apps/vault/utils.ts:
--------------------------------------------------------------------------------
1 | export function truncateWallet(address?: string) {
2 | if (!address || address.length < 30) {
3 | return address
4 | }
5 |
6 | const firstFour = address.slice(0, 7)
7 | const lastThree = address.slice(-4)
8 |
9 | return `${firstFour}...${lastThree}`
10 | }
11 |
--------------------------------------------------------------------------------
/clean-package.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "remove": ["devDependencies"],
3 | "replace": {
4 | "main": "dist/index.js",
5 | "module": "dist/index.mjs",
6 | "types": "dist/index.d.ts",
7 | "exports": {
8 | ".": {
9 | "types": "./dist/index.d.ts",
10 | "import": "./dist/index.mjs",
11 | "require": "./dist/index.js"
12 | },
13 | "./package.json": "./package.json"
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/config/eslint/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # eslint-config-custom
2 |
3 | ## 0.0.3
4 |
5 | ### Patch Changes
6 |
7 | - [#842](https://github.com/consolelabs/mochi-ui/pull/842) [`d8e1101`](https://github.com/consolelabs/mochi-ui/commit/d8e11018c206156fc21f5a0a9b24797a4d7f1e87) Thanks [@zlatanpham](https://github.com/zlatanpham)! - Fix cva type export
8 |
9 | ## 0.0.2
10 |
11 | ### Patch Changes
12 |
13 | - [#610](https://github.com/consolelabs/mochi-ui/pull/610)
14 | [`4c633a8`](https://github.com/consolelabs/mochi-ui/commit/4c633a8ee7af48c4153d4999157b73a6d1532e10)
15 | Thanks [@zlatanpham](https://github.com/zlatanpham)! - Bump new version
16 |
--------------------------------------------------------------------------------
/config/eslint/README.md:
--------------------------------------------------------------------------------
1 | # @mochi-ui/eslint-config
2 |
3 | Collection of internal eslint configurations.
4 |
--------------------------------------------------------------------------------
/config/tsconfig/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # tsconfig
2 |
3 | ## 0.0.2
4 |
5 | ### Patch Changes
6 |
7 | - [#842](https://github.com/consolelabs/mochi-ui/pull/842) [`d8e1101`](https://github.com/consolelabs/mochi-ui/commit/d8e11018c206156fc21f5a0a9b24797a4d7f1e87) Thanks [@zlatanpham](https://github.com/zlatanpham)! - Fix cva type export
8 |
9 | ## 0.0.1
10 |
11 | ### Patch Changes
12 |
13 | - [#610](https://github.com/consolelabs/mochi-ui/pull/610)
14 | [`4c633a8`](https://github.com/consolelabs/mochi-ui/commit/4c633a8ee7af48c4153d4999157b73a6d1532e10)
15 | Thanks [@zlatanpham](https://github.com/zlatanpham)! - Bump new version
16 |
--------------------------------------------------------------------------------
/config/tsconfig/nextjs.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/tsconfig",
3 | "display": "Next.js",
4 | "extends": "./base.json",
5 | "compilerOptions": {
6 | "plugins": [{ "name": "next" }],
7 | "allowJs": true,
8 | "declaration": false,
9 | "declarationMap": false,
10 | "incremental": true,
11 | "jsx": "preserve",
12 | "lib": ["dom", "dom.iterable", "esnext"],
13 | "module": "esnext",
14 | "resolveJsonModule": true,
15 | "strict": true,
16 | "target": "es5"
17 | },
18 | "include": ["src", "next-env.d.ts"],
19 | "exclude": ["node_modules"]
20 | }
21 |
--------------------------------------------------------------------------------
/config/tsconfig/overrides.d.ts:
--------------------------------------------------------------------------------
1 | declare module 'class-variance-authority/dist/types' {
2 | export type ClassProp = object
3 | }
4 |
--------------------------------------------------------------------------------
/config/tsconfig/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "tsconfig",
3 | "version": "0.0.2",
4 | "private": true,
5 | "license": "MIT",
6 | "publishConfig": {
7 | "access": "public"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/config/tsconfig/react-library.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/tsconfig",
3 | "display": "React Library",
4 | "extends": "./base.json",
5 | "compilerOptions": {
6 | "lib": ["esnext", "DOM"],
7 | "module": "ESNext",
8 | "target": "ES6",
9 | "jsx": "react-jsx",
10 | "noEmit": true
11 | },
12 | "include": ["./overrides.d.ts"]
13 | }
14 |
--------------------------------------------------------------------------------
/packages/components/accordion/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/accordion/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './accordion'
2 |
--------------------------------------------------------------------------------
/packages/components/accordion/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx", "index.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/accordion/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/action-bar/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/action-bar/src/action-bar-body.tsx:
--------------------------------------------------------------------------------
1 | import { AlertBody, AlertBodyProps } from '@mochi-ui/alert'
2 | import { ElementRef, forwardRef } from 'react'
3 |
4 | type ActionBarBodyProps = AlertBodyProps
5 |
6 | const ActionBarBody = forwardRef<
7 | ElementRef,
8 | ActionBarBodyProps
9 | >((props, ref) => {
10 | return
11 | })
12 |
13 | ActionBarBody.displayName = 'ActionBarBody'
14 |
15 | export { ActionBarBody }
16 | export type { ActionBarBodyProps }
17 |
--------------------------------------------------------------------------------
/packages/components/action-bar/src/action-bar-confirm.tsx:
--------------------------------------------------------------------------------
1 | import { AlertConfirmButton, AlertConfirmProps } from '@mochi-ui/alert'
2 | import { ElementRef, forwardRef } from 'react'
3 |
4 | type ActionBarConfirmButtonProps = AlertConfirmProps
5 |
6 | const ActionBarConfirmButton = forwardRef<
7 | ElementRef,
8 | ActionBarConfirmButtonProps
9 | >((props, ref) => )
10 |
11 | ActionBarConfirmButton.displayName = 'ActionBarConfirmButton'
12 |
13 | export { ActionBarConfirmButton }
14 | export type { ActionBarConfirmButtonProps }
15 |
--------------------------------------------------------------------------------
/packages/components/action-bar/src/action-bar-description.tsx:
--------------------------------------------------------------------------------
1 | import { AlertDescription, AlertDescriptionProps } from '@mochi-ui/alert'
2 | import { ElementRef, forwardRef } from 'react'
3 |
4 | type ActionBarDescriptionProps = AlertDescriptionProps
5 |
6 | const ActionBarDescription = forwardRef<
7 | ElementRef,
8 | ActionBarDescriptionProps
9 | >((props, ref) => )
10 |
11 | ActionBarDescription.displayName = 'ActionBarDescription'
12 |
13 | export type { ActionBarDescriptionProps }
14 | export { ActionBarDescription }
15 |
--------------------------------------------------------------------------------
/packages/components/action-bar/src/action-bar-icon.tsx:
--------------------------------------------------------------------------------
1 | import { AlertIcon, AlertIconProps } from '@mochi-ui/alert'
2 | import { ElementRef, forwardRef } from 'react'
3 |
4 | type ActionBarIconProps = AlertIconProps
5 |
6 | const ActionBarIcon = forwardRef<
7 | ElementRef,
8 | ActionBarIconProps
9 | >((props, ref) => )
10 |
11 | ActionBarIcon.displayName = 'ActionBarIcon'
12 |
13 | export { ActionBarIcon }
14 | export type { ActionBarIconProps }
15 |
--------------------------------------------------------------------------------
/packages/components/action-bar/src/action-bar-title.tsx:
--------------------------------------------------------------------------------
1 | import { AlertTitle, AlertTitleProps } from '@mochi-ui/alert'
2 | import { ElementRef, forwardRef } from 'react'
3 |
4 | type ActionBarTitleProps = AlertTitleProps
5 |
6 | const ActionBarTitle = forwardRef<
7 | ElementRef,
8 | ActionBarTitleProps
9 | >((props, ref) => )
10 |
11 | ActionBarTitle.displayName = 'ActionBarTitle'
12 |
13 | export { ActionBarTitle }
14 | export type { ActionBarTitleProps }
15 |
--------------------------------------------------------------------------------
/packages/components/action-bar/src/action-bar-trigger.tsx:
--------------------------------------------------------------------------------
1 | import { ComponentPropsWithoutRef, ElementRef, forwardRef } from 'react'
2 | import * as PopoverPrimitive from '@radix-ui/react-popover'
3 |
4 | type ActionBarTriggerProps = ComponentPropsWithoutRef<
5 | typeof PopoverPrimitive.Trigger
6 | >
7 | const ActionBarTrigger = forwardRef<
8 | ElementRef,
9 | ActionBarTriggerProps
10 | >((props, ref) => )
11 |
12 | ActionBarTrigger.displayName = 'ActionBarTrigger'
13 |
14 | export { ActionBarTrigger }
15 | export type { ActionBarTriggerProps }
16 |
--------------------------------------------------------------------------------
/packages/components/action-bar/src/action-bar.tsx:
--------------------------------------------------------------------------------
1 | import * as PopoverPrimitive from '@radix-ui/react-popover'
2 | import { ComponentPropsWithRef } from 'react'
3 |
4 | const ActionBar = PopoverPrimitive.Root
5 |
6 | type ActionBarProps = ComponentPropsWithRef
7 |
8 | ActionBar.displayName = 'ActionBar'
9 |
10 | export { ActionBar }
11 | export type { ActionBarProps }
12 |
--------------------------------------------------------------------------------
/packages/components/action-bar/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './action-bar'
2 | export * from './action-bar-action-group'
3 | export * from './action-bar-body'
4 | export * from './action-bar-cancel'
5 | export * from './action-bar-confirm'
6 | export * from './action-bar-content'
7 | export * from './action-bar-description'
8 | export * from './action-bar-icon'
9 | export * from './action-bar-title'
10 | export * from './action-bar-trigger'
11 |
--------------------------------------------------------------------------------
/packages/components/action-bar/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": [
4 | "src",
5 | "stories",
6 | "__tests__/*.tsx",
7 | "index.ts",
8 | ],
9 | "exclude": ["dist", "node_modules"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/components/action-bar/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/alert/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/alert/src/context.ts:
--------------------------------------------------------------------------------
1 | import { createContext, useContext } from 'react'
2 | import { AlertStylesProps } from '@mochi-ui/theme'
3 |
4 | type AlertContextValue = {
5 | size: 'md' | 'sm'
6 | layout: NonNullable
7 | scheme: NonNullable
8 | }
9 |
10 | const AlertContext = createContext({
11 | layout: 'auto',
12 | size: 'md',
13 | scheme: 'primary',
14 | })
15 |
16 | const useAlertContext = () => useContext(AlertContext)
17 |
18 | export { type AlertContextValue, AlertContext, useAlertContext }
19 |
--------------------------------------------------------------------------------
/packages/components/alert/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './alert'
2 | export * from './alert-icon'
3 | export * from './alert-title'
4 | export * from './context'
5 | export * from './alert-action-group'
6 | export * from './alert-cancel'
7 | export * from './alert-close'
8 | export * from './alert-description'
9 | export * from './alert-link'
10 | export * from './context'
11 | export * from './alert-body'
12 | export * from './alert-confirm'
13 |
--------------------------------------------------------------------------------
/packages/components/alert/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": [
4 | "src",
5 | "stories",
6 | "__tests__/*.tsx",
7 | "index.ts",
8 | ],
9 | "exclude": ["dist", "node_modules"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/components/alert/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/avatar-group/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | rules: {
5 | 'react/no-unknown-property': ['off'],
6 | },
7 | }
8 |
--------------------------------------------------------------------------------
/packages/components/avatar-group/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './avatar-group'
2 | export { default as AvatarGroup } from './avatar-group'
3 |
--------------------------------------------------------------------------------
/packages/components/avatar-group/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx", "index.ts", "__tests__/util.test.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/avatar-group/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/avatar/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | rules: {
5 | 'react/no-unknown-property': ['off'],
6 | },
7 | }
8 |
--------------------------------------------------------------------------------
/packages/components/avatar/__tests__/avatar.test.tsx:
--------------------------------------------------------------------------------
1 | import { cleanup, render } from '@testing-library/react'
2 | import Avatar from '../src/avatar'
3 |
4 | describe('Avatar', () => {
5 | afterEach(cleanup)
6 |
7 | it('should allow to custom className', () => {
8 | const customClassName = 'my-custom-class'
9 | const wrapper = render(
10 | ,
15 | )
16 | expect(wrapper.container.firstChild).toHaveClass(customClassName)
17 | })
18 | })
19 |
--------------------------------------------------------------------------------
/packages/components/avatar/__tests__/util.test.ts:
--------------------------------------------------------------------------------
1 | import { boringAvatar } from '../src/util'
2 |
3 | describe('boringAvatar', () => {
4 | it('returns a valid URL', () => {
5 | const name = 'John Doe'
6 | const url = boringAvatar(name)
7 | expect(url).toMatch(
8 | /^https:\/\/source\.boringavatars\.com\/beam\/120\/John%20Doe\?colors=[a-zA-Z0-9,%]+$/,
9 | )
10 | })
11 |
12 | it('returns a default URL when no name is provided', () => {
13 | const url = boringAvatar()
14 | expect(url).toBe(
15 | 'https://source.boringavatars.com/beam/120/?colors=665c52,74b3a7,a3ccaf,E6E1CF,CC5B14',
16 | )
17 | })
18 | })
19 |
--------------------------------------------------------------------------------
/packages/components/avatar/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './avatar'
2 | export { default as Avatar } from './avatar'
3 |
--------------------------------------------------------------------------------
/packages/components/avatar/src/util.ts:
--------------------------------------------------------------------------------
1 | // for handling 404/broken image -> fallback to this
2 | export function boringAvatar(name = '') {
3 | return `https://source.boringavatars.com/beam/120/${encodeURI(
4 | name,
5 | )}?colors=665c52,74b3a7,a3ccaf,E6E1CF,CC5B14`
6 | }
7 |
--------------------------------------------------------------------------------
/packages/components/avatar/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx", "index.ts", "__tests__/util.test.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/avatar/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/badge/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/badge/src/context.ts:
--------------------------------------------------------------------------------
1 | import { BadgeStyleProps } from '@mochi-ui/theme'
2 | import { createContext, Dispatch, SetStateAction, useContext } from 'react'
3 |
4 | type BadgeContextValue = {
5 | hasIconOnly?: boolean
6 | setHasIconOnly?: Dispatch>
7 | isAvatarIcon?: boolean | null
8 | appearance?: BadgeStyleProps['appearance']
9 | }
10 |
11 | const BadgeContext = createContext({})
12 |
13 | const useBadgeContext = () => useContext(BadgeContext)
14 |
15 | export { type BadgeContextValue, BadgeContext, useBadgeContext }
16 |
--------------------------------------------------------------------------------
/packages/components/badge/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './badge'
2 |
--------------------------------------------------------------------------------
/packages/components/badge/src/type.ts:
--------------------------------------------------------------------------------
1 | import { BadgeStyleProps } from '@mochi-ui/theme'
2 | import { ComponentPropsWithoutRef, ReactNode } from 'react'
3 |
4 | export type BadgeIconProps = {
5 | className?: string
6 | asChild?: boolean
7 | children: ReactNode
8 | } & ComponentPropsWithoutRef<'span'>
9 |
10 | export type BadgeProps = Omit & {
11 | className?: string
12 | children: ReactNode
13 | asChild?: boolean
14 | } & ComponentPropsWithoutRef<'span'>
15 |
--------------------------------------------------------------------------------
/packages/components/badge/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx", "index.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/badge/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/button/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/button/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './button'
2 | export { default as Button } from './button'
3 |
--------------------------------------------------------------------------------
/packages/components/button/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/button/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/card/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/card/src/index.ts:
--------------------------------------------------------------------------------
1 | // export types, component
2 | export * from './card'
3 |
--------------------------------------------------------------------------------
/packages/components/card/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/card/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig({
4 | clean: true,
5 | splitting: false,
6 | target: 'es2019',
7 | format: ['cjs', 'esm'],
8 | })
9 |
--------------------------------------------------------------------------------
/packages/components/checkbox/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/checkbox/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './checkbox'
2 |
--------------------------------------------------------------------------------
/packages/components/checkbox/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "index.ts", "__tests__/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/checkbox/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/content-editable/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/content-editable/src/index.ts:
--------------------------------------------------------------------------------
1 | // export types, component
2 | export * from './content-editable'
3 |
--------------------------------------------------------------------------------
/packages/components/content-editable/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/content-editable/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig({
4 | clean: true,
5 | splitting: false,
6 | target: 'es2019',
7 | format: ['cjs', 'esm'],
8 | })
9 |
--------------------------------------------------------------------------------
/packages/components/drawer/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/drawer/src/context.ts:
--------------------------------------------------------------------------------
1 | import { createContext } from '@dwarvesf/react-utils'
2 | import { DrawerAnchor } from './type'
3 |
4 | export const [DrawerContextProvider, useDrawerContext] = createContext<{
5 | anchor: DrawerAnchor
6 | }>()
7 |
--------------------------------------------------------------------------------
/packages/components/drawer/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './drawer'
2 |
--------------------------------------------------------------------------------
/packages/components/drawer/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/drawer/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/dropdown/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/dropdown/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './dropdown'
2 | export * from './type'
3 |
--------------------------------------------------------------------------------
/packages/components/dropdown/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx", "index.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/dropdown/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/footer/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/footer/__tests__/footer.test.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react'
2 | import { render } from '@testing-library/react'
3 |
4 | import { Footer } from '../src'
5 |
6 | describe('Footer', () => {
7 | it('should render correctly', () => {
8 | const wrapper = render(
9 | ,
10 | )
11 |
12 | expect(() => wrapper.unmount()).not.toThrow()
13 | })
14 | })
15 |
--------------------------------------------------------------------------------
/packages/components/footer/src/index.ts:
--------------------------------------------------------------------------------
1 | // export types, component
2 | export * from './footer'
3 |
--------------------------------------------------------------------------------
/packages/components/footer/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/footer/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig({
4 | clean: true,
5 | splitting: false,
6 | target: 'es2019',
7 | format: ['cjs', 'esm'],
8 | })
9 |
--------------------------------------------------------------------------------
/packages/components/form-context/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/form-context/README.md:
--------------------------------------------------------------------------------
1 | # @mochi-ui/form-context
2 |
--------------------------------------------------------------------------------
/packages/components/form-context/src/context.tsx:
--------------------------------------------------------------------------------
1 | import { createContext, useContext } from 'react'
2 |
3 | export type FormControlContextValue = {
4 | disabled?: boolean
5 | error?: boolean
6 | required?: boolean
7 | htmlFor?: string
8 | labelId?: string
9 | }
10 |
11 | const FormControlContext = createContext({
12 | required: false,
13 | disabled: false,
14 | error: false,
15 | })
16 |
17 | const useFromControl = () => useContext(FormControlContext)
18 |
19 | export { FormControlContext, useFromControl }
20 |
--------------------------------------------------------------------------------
/packages/components/form-context/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './context'
2 |
--------------------------------------------------------------------------------
/packages/components/form-context/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx", "index.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/form-context/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/form/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/form/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './form-control'
2 | export * from './form-label'
3 | export * from './form-helper-text'
4 | export * from './type'
5 | export * from './form-error-message'
6 |
--------------------------------------------------------------------------------
/packages/components/form/src/type.ts:
--------------------------------------------------------------------------------
1 | import { HTMLAttributes } from 'react'
2 |
3 | export interface FormControlProps extends HTMLAttributes {
4 | children?: React.ReactNode
5 | disabled?: boolean
6 | error?: boolean
7 | errorValue?: string
8 | required?: boolean
9 | id?: string
10 | hideHelperTextOnError?: boolean
11 | }
12 |
--------------------------------------------------------------------------------
/packages/components/form/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx", "index.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/form/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/icon-button/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/icon-button/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './icon-button'
2 | export { default as IconButton } from './icon-button'
3 |
--------------------------------------------------------------------------------
/packages/components/icon-button/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/icon-button/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/icons/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../icons/tsconfig.json",
3 | "include": [
4 | "stories",
5 | ],
6 | }
7 |
--------------------------------------------------------------------------------
/packages/components/input/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/input/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './textfield'
2 |
--------------------------------------------------------------------------------
/packages/components/input/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx", "index.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/input/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/label/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/label/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './label'
2 | export { default as Label } from './label'
3 |
--------------------------------------------------------------------------------
/packages/components/label/src/label.tsx:
--------------------------------------------------------------------------------
1 | import * as PrimitiveLabel from '@radix-ui/react-label'
2 | import { ComponentPropsWithoutRef, ElementRef, forwardRef } from 'react'
3 | import { label } from '@mochi-ui/theme'
4 |
5 | const Label = forwardRef<
6 | ElementRef,
7 | ComponentPropsWithoutRef
8 | >(({ className, ...props }, ref) => (
9 |
14 | ))
15 |
16 | Label.displayName = PrimitiveLabel.Root.displayName
17 |
18 | export { Label }
19 | export default Label
20 |
--------------------------------------------------------------------------------
/packages/components/label/stories/label.stories.tsx:
--------------------------------------------------------------------------------
1 | import { StoryObj, Meta } from '@storybook/react'
2 | import { Label } from '../src'
3 |
4 | const meta: Meta = {
5 | title: 'Form/Label',
6 | component: Label,
7 | tags: ['autodocs'],
8 | parameters: {
9 | layout: 'centered',
10 | },
11 | }
12 |
13 | export default meta
14 |
15 | type Story = StoryObj
16 |
17 | export const Default: Story = {
18 | args: {
19 | children: 'This is a label',
20 | },
21 | }
22 |
--------------------------------------------------------------------------------
/packages/components/label/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx", "index.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/label/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/layout/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/layout/hooks/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useHasSidebar'
2 |
--------------------------------------------------------------------------------
/packages/components/layout/hooks/useHasSidebar.ts:
--------------------------------------------------------------------------------
1 | import { Children } from 'react'
2 | import { Sidebar } from '@mochi-ui/sidebar'
3 |
4 | export function useHasSidebar(children?: React.ReactNode) {
5 | const childNodes = Children.toArray(children)
6 |
7 | return childNodes.some(
8 | (node) => (node as React.ReactElement).type === Sidebar,
9 | )
10 | }
11 |
--------------------------------------------------------------------------------
/packages/components/layout/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './layout'
2 |
--------------------------------------------------------------------------------
/packages/components/layout/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "hooks", "stories", "index.ts", "__tests__/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/layout/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/list/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/list/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './list'
2 | export { default as List } from './list'
3 |
--------------------------------------------------------------------------------
/packages/components/list/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx", "index.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/list/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/logo/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | rules: {
5 | 'react/no-unknown-property': ['off'],
6 | },
7 | }
8 |
--------------------------------------------------------------------------------
/packages/components/logo/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './logo'
2 |
--------------------------------------------------------------------------------
/packages/components/logo/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx", "index.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/logo/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/modal/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/modal/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './modal'
2 |
--------------------------------------------------------------------------------
/packages/components/modal/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/modal/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/page-content/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/page-content/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './page-content'
2 |
--------------------------------------------------------------------------------
/packages/components/page-content/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "index.ts", "__tests__/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/page-content/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/page-header/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/page-header/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './page-header'
2 |
--------------------------------------------------------------------------------
/packages/components/page-header/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "index.ts", "__tests__/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/page-header/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/pagination/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/pagination/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './pagination'
2 | export { default as Pagination } from './pagination'
3 |
--------------------------------------------------------------------------------
/packages/components/pagination/src/utils.ts:
--------------------------------------------------------------------------------
1 | export function formatNumber(number: number | string) {
2 | if (typeof number === 'string') {
3 | return Intl.NumberFormat().format(parseFloat(number))
4 | }
5 | return Intl.NumberFormat().format(number)
6 | }
7 |
--------------------------------------------------------------------------------
/packages/components/pagination/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "index.ts", "__tests__/pagination.test.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/pagination/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/polymorphic/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/polymorphic/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './polymorphic'
2 |
--------------------------------------------------------------------------------
/packages/components/polymorphic/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "index.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/polymorphic/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/popover/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/popover/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './popover'
2 |
--------------------------------------------------------------------------------
/packages/components/popover/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.tsx", "**/*.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/popover/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/profile-badge/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/profile-badge/src/index.ts:
--------------------------------------------------------------------------------
1 | export { default as ProfileBadge } from './profile-badge'
2 |
--------------------------------------------------------------------------------
/packages/components/profile-badge/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": [
4 | "src",
5 | "index.ts",
6 | "__tests__/*.tsx",
7 | "stories"
8 | ],
9 | "exclude": ["dist", "node_modules"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/components/profile-badge/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/scroll-area/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/scroll-area/src/index.ts:
--------------------------------------------------------------------------------
1 | // export types, component
2 | export * from './scroll-area'
3 |
--------------------------------------------------------------------------------
/packages/components/scroll-area/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/scroll-area/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig({
4 | clean: true,
5 | splitting: false,
6 | target: 'es2019',
7 | format: ['cjs', 'esm'],
8 | })
9 |
--------------------------------------------------------------------------------
/packages/components/section-header/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/section-header/src/context.ts:
--------------------------------------------------------------------------------
1 | import { createContext } from '@dwarvesf/react-utils'
2 |
3 | export const [SectionHeaderContextProvider, useSectionHeaderContext] =
4 | createContext<{
5 | wrapActionsOnMobile: boolean
6 | hasDescription: boolean
7 | }>()
8 |
--------------------------------------------------------------------------------
/packages/components/section-header/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './section-header'
2 |
--------------------------------------------------------------------------------
/packages/components/section-header/src/type.ts:
--------------------------------------------------------------------------------
1 | import { ReactNode } from 'react'
2 |
3 | export type SectionHeaderProps = {
4 | children: ReactNode
5 | className?: string
6 | wrapActionsOnMobile?: boolean
7 | }
8 |
9 | export type SectionHeaderTitleProps = {
10 | children: ReactNode
11 | className?: string
12 | }
13 |
14 | export type SectionHeaderDescriptionProps = {
15 | children: ReactNode
16 | className?: string
17 | }
18 |
19 | export type SectionHeaderActionsProps = {
20 | children: ReactNode
21 | className?: string
22 | }
23 |
--------------------------------------------------------------------------------
/packages/components/section-header/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "index.ts", "__tests__/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/section-header/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/select/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/select/.prettierignore:
--------------------------------------------------------------------------------
1 | build/
2 | coverage/
3 | __snapshots__/
4 | node_modules/
5 | storybook-static/
6 | package-lock.json
7 | yarn.lock
8 | pnpm-lock.yaml
9 | package.json
10 | # next.js
11 | /.next/
12 | /out/
13 |
--------------------------------------------------------------------------------
/packages/components/select/src/context.ts:
--------------------------------------------------------------------------------
1 | import { createContext } from '@dwarvesf/react-utils'
2 |
3 | export const [SelectContextProvider, useSelectContext] = createContext<{
4 | isFilled?: boolean
5 | }>()
6 |
--------------------------------------------------------------------------------
/packages/components/select/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './select'
2 | export * from './type'
3 |
--------------------------------------------------------------------------------
/packages/components/select/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": [
4 | "src",
5 | "index.ts",
6 | "__tests__/*.tsx",
7 | "stories"
8 | ],
9 | "exclude": ["dist", "node_modules"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/components/select/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/separator/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/separator/__tests__/separator.test.tsx:
--------------------------------------------------------------------------------
1 | import { render } from '@testing-library/react'
2 | import { Separator } from '../src'
3 |
4 | describe('Separator', () => {
5 | it('renders correctly', () => {
6 | const { unmount } = render()
7 | expect(() => unmount()).not.toThrow()
8 | })
9 | })
10 |
--------------------------------------------------------------------------------
/packages/components/separator/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './separator'
2 |
--------------------------------------------------------------------------------
/packages/components/separator/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx", "index.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/separator/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/sidebar/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/sidebar/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './sidebar'
2 | export { default as Sidebar } from './sidebar'
3 |
--------------------------------------------------------------------------------
/packages/components/sidebar/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "index.ts", "__tests__/*.tsx", "stories"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/sidebar/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/skeleton/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/skeleton/src/index.ts:
--------------------------------------------------------------------------------
1 | // export types, component
2 | export * from './skeleton'
3 |
--------------------------------------------------------------------------------
/packages/components/skeleton/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/skeleton/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig({
4 | clean: true,
5 | splitting: false,
6 | target: 'es2019',
7 | format: ['cjs', 'esm'],
8 | })
9 |
--------------------------------------------------------------------------------
/packages/components/stepper/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/stepper/src/index.ts:
--------------------------------------------------------------------------------
1 | // export types, component
2 | export * from './stepper'
3 | export * from './step-item'
4 | export * from './step-indicator'
5 | export * from './step-content'
6 | export * from './step-title'
7 | export * from './step-description'
8 | export * from './step-separator'
9 |
--------------------------------------------------------------------------------
/packages/components/stepper/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/stepper/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig({
4 | clean: true,
5 | splitting: false,
6 | target: 'es2019',
7 | format: ['cjs', 'esm'],
8 | })
9 |
--------------------------------------------------------------------------------
/packages/components/switch/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/switch/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './Switch'
2 | export { default as Switch } from './Switch'
3 |
--------------------------------------------------------------------------------
/packages/components/switch/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": [
4 | "src",
5 | "index.ts",
6 | "__tests__/*.tsx",
7 | "stories"
8 | ],
9 | "exclude": ["dist", "node_modules"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/components/switch/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/table/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/table/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './table'
2 | export { default as Table } from './table'
3 |
--------------------------------------------------------------------------------
/packages/components/table/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/table/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/tabs/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/tabs/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './tabs'
2 |
--------------------------------------------------------------------------------
/packages/components/tabs/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/tabs/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/toast/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/toast/src/hook/index.ts:
--------------------------------------------------------------------------------
1 | export * from './use-toast'
2 |
--------------------------------------------------------------------------------
/packages/components/toast/src/hook/use-toast/constants.ts:
--------------------------------------------------------------------------------
1 | const TOAST_REMOVE_DELAY = 1000000
2 | const TOAST_LIMIT = 10
3 |
4 | const ACTION_TYPES = {
5 | ADD_TOAST: 'ADD_TOAST',
6 | UPDATE_TOAST: 'UPDATE_TOAST',
7 | DISMISS_TOAST: 'DISMISS_TOAST',
8 | REMOVE_TOAST: 'REMOVE_TOAST',
9 | } as const
10 |
11 | export { TOAST_REMOVE_DELAY, TOAST_LIMIT, ACTION_TYPES }
12 |
--------------------------------------------------------------------------------
/packages/components/toast/src/hook/use-toast/index.ts:
--------------------------------------------------------------------------------
1 | export * from './use-toast'
2 |
--------------------------------------------------------------------------------
/packages/components/toast/src/hook/use-toast/utils.ts:
--------------------------------------------------------------------------------
1 | let count = 0
2 |
3 | function genId() {
4 | count = (count + 1) % Number.MAX_SAFE_INTEGER
5 | return count.toString()
6 | }
7 |
8 | export { genId }
9 |
--------------------------------------------------------------------------------
/packages/components/toast/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './toast'
2 | export * from './type'
3 | export * from './toast-body'
4 | export * from './toast-description'
5 | export * from './toast-icon'
6 | export * from './toast-link'
7 | export * from './toast-title'
8 | export * from './toaster'
9 | export * from './type'
10 | export * from './hook'
11 |
--------------------------------------------------------------------------------
/packages/components/toast/src/toast-body.tsx:
--------------------------------------------------------------------------------
1 | import { AlertBodyProps, AlertBody } from '@mochi-ui/alert'
2 |
3 | type ToastBodyProps = AlertBodyProps
4 |
5 | const ToastBody = AlertBody
6 | ToastBody.displayName = 'ToastBody'
7 |
8 | export type { ToastBodyProps }
9 | export { ToastBody }
10 |
--------------------------------------------------------------------------------
/packages/components/toast/src/toast-icon.tsx:
--------------------------------------------------------------------------------
1 | import { AlertIcon, AlertIconProps } from '@mochi-ui/alert'
2 |
3 | type ToastIconProps = AlertIconProps
4 |
5 | const ToastIcon = AlertIcon
6 | ToastIcon.displayName = 'ToastIcon'
7 |
8 | export { ToastIcon, type ToastIconProps }
9 |
--------------------------------------------------------------------------------
/packages/components/toast/src/toast-link.tsx:
--------------------------------------------------------------------------------
1 | import { AlertLink, AlertLinkProps } from '@mochi-ui/alert'
2 |
3 | type ToastLinkProps = AlertLinkProps
4 |
5 | const ToastLink = AlertLink
6 | ToastLink.displayName = 'ToastConfirmButton'
7 |
8 | export { ToastLink }
9 | export type { ToastLinkProps }
10 |
--------------------------------------------------------------------------------
/packages/components/toast/src/toast-title.tsx:
--------------------------------------------------------------------------------
1 | import { AlertTitle, AlertTitleProps } from '@mochi-ui/alert'
2 | import * as ToastPrimitive from '@radix-ui/react-toast'
3 | import { ElementRef, forwardRef } from 'react'
4 |
5 | type ToastTitleProps = AlertTitleProps
6 |
7 | const ToastTitle = forwardRef, ToastTitleProps>(
8 | (props, ref) => {
9 | return (
10 |
11 |
12 |
13 | )
14 | },
15 | )
16 |
17 | ToastTitle.displayName = ToastPrimitive.Title.displayName
18 |
19 | export { ToastTitle, type ToastTitleProps }
20 |
--------------------------------------------------------------------------------
/packages/components/toast/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": [
4 | "src",
5 | "stories",
6 | "__tests__/*.tsx",
7 | "index.ts",
8 | ],
9 | "exclude": ["dist", "node_modules"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/components/toast/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/toggle-button/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/toggle-button/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './toggle-button'
2 |
--------------------------------------------------------------------------------
/packages/components/toggle-button/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": [
4 | "src",
5 | "index.ts",
6 | "__tests__/*.tsx",
7 | "stories"
8 | ],
9 | "exclude": ["dist", "node_modules"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/components/toggle-button/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/tooltip/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/tooltip/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './tooltip'
2 | export { default as Tooltip } from './tooltip'
3 |
--------------------------------------------------------------------------------
/packages/components/tooltip/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": [
4 | "src",
5 | "index.ts",
6 | "__tests__/*.tsx",
7 | "stories",
8 | "__tests__/tooltip.test.tsx"
9 | ],
10 | "exclude": ["dist", "node_modules"]
11 | }
12 |
--------------------------------------------------------------------------------
/packages/components/tooltip/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/top-bar/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/top-bar/hooks/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useLockScreenScroll'
2 |
--------------------------------------------------------------------------------
/packages/components/top-bar/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './top-bar'
2 | export * from './mobile-nav'
3 | export * from './desktop-nav'
4 | export * from './type'
5 |
--------------------------------------------------------------------------------
/packages/components/top-bar/src/top-bar.tsx:
--------------------------------------------------------------------------------
1 | import { useHasMounted } from '@dwarvesf/react-hooks'
2 | import { topBar } from '@mochi-ui/theme'
3 | import { TopBarProps } from './type'
4 |
5 | const { topBarNavContainerClsx, topBarRightClsx } = topBar
6 |
7 | export const TopBar = (props: TopBarProps) => {
8 | const { className, leftSlot, rightSlot } = props
9 | const isMounted = useHasMounted()
10 |
11 | return (
12 |
13 | {leftSlot}
14 |
15 | {isMounted ? {rightSlot}
: null}
16 |
17 | )
18 | }
19 |
--------------------------------------------------------------------------------
/packages/components/top-bar/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "index.ts", "__tests__/*.tsx", "hooks/*.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/top-bar/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/typography/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/components/typography/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './typography'
2 | export { default as Typography } from './typography'
3 |
--------------------------------------------------------------------------------
/packages/components/typography/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/typography/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/components/value-change/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | rules: {
5 | 'react/no-unknown-property': ['off'],
6 | },
7 | }
8 |
--------------------------------------------------------------------------------
/packages/components/value-change/src/context.ts:
--------------------------------------------------------------------------------
1 | import { createContext, useContext } from 'react'
2 | import { ValueChangeProps } from './type'
3 |
4 | type ValueChangeContextValue = {
5 | trend: ValueChangeProps['trend']
6 | }
7 |
8 | const ValueChangeContext = createContext({
9 | trend: 'up',
10 | })
11 |
12 | const useValueChangeContext = () => useContext(ValueChangeContext)
13 |
14 | export {
15 | type ValueChangeContextValue,
16 | ValueChangeContext,
17 | useValueChangeContext,
18 | }
19 |
--------------------------------------------------------------------------------
/packages/components/value-change/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './value-change'
2 |
--------------------------------------------------------------------------------
/packages/components/value-change/src/type.ts:
--------------------------------------------------------------------------------
1 | import { ReactNode } from 'react'
2 |
3 | export type ValueChangeIndicatorProps = {
4 | children?: ReactNode
5 | className?: string
6 | }
7 |
8 | export type ValueChangeProps = {
9 | children: ReactNode
10 | className?: string
11 | trend?: 'up' | 'down'
12 | }
13 |
--------------------------------------------------------------------------------
/packages/components/value-change/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["src", "stories", "__tests__/*.tsx", "index.ts"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/components/value-change/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/packages/core/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/core/provider.d.ts:
--------------------------------------------------------------------------------
1 | interface Window {
2 | ethereum: any
3 | web3: any
4 | phantom: any
5 | glow: any
6 | ronin: any
7 | martian: any
8 | suiet: any
9 | }
10 |
11 | declare module 'browser-string-hexer' {
12 | export default function hexer(msg: string): string
13 | }
14 |
--------------------------------------------------------------------------------
/packages/core/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/core/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | entry: ['src/index.ts'],
5 | clean: true,
6 | target: 'es2019',
7 | format: ['cjs', 'esm'],
8 | }))
9 |
--------------------------------------------------------------------------------
/packages/icons/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/icons/.gitignore:
--------------------------------------------------------------------------------
1 | src/index.ts
2 | src/components/
3 | clean-package.config.json
4 |
--------------------------------------------------------------------------------
/packages/icons/scripts/clean.ts:
--------------------------------------------------------------------------------
1 | import fs from 'node:fs'
2 | import { rimraf } from 'rimraf'
3 | import * as paths from './paths'
4 |
5 | /**
6 | * Performs clean up by clearing components, index files, and recreating the icon folder.
7 | */
8 | function doCleanUp() {
9 | // Clear components
10 | rimraf.sync(paths.componentsPath)
11 |
12 | // Clear index file
13 | rimraf.sync(paths.indexPath)
14 |
15 | rimraf.sync(paths.rootIndexPath)
16 |
17 | // recreate icon folder
18 | fs.mkdirSync(paths.componentsPath)
19 | }
20 |
21 | export default doCleanUp
22 |
--------------------------------------------------------------------------------
/packages/icons/scripts/paths.ts:
--------------------------------------------------------------------------------
1 | import path from 'node:path'
2 |
3 | const componentsPath = path.resolve(__dirname, '../src/components')
4 | const indexPath = path.resolve(__dirname, '../src/components/index.ts')
5 | const rootIndexPath = path.resolve(__dirname, '../src/index.ts')
6 | const svgPath = path.resolve(__dirname, '../src/svg')
7 |
8 | const cleanPackageJsonPath = path.resolve(
9 | __dirname,
10 | '../clean-package.config.json',
11 | )
12 |
13 | export {
14 | componentsPath,
15 | indexPath,
16 | svgPath,
17 | cleanPackageJsonPath,
18 | rootIndexPath,
19 | }
20 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/alert-circle.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/arrow-bottom-left.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/arrow-bottom-right.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/arrow-down-short.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/arrow-down.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/arrow-left.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/arrow-right-short.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/arrow-right.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/arrow-top-left.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/arrow-top-right.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/arrow-up-down.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/arrow-up-short.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/arrow-up.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/back.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/bank.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/check.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/chevron-down.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/chevron-left.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/chevron-right.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/chevron-up.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/coin-swap.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/corner-bottom-left.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/inbox.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/minus.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/monitor.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/payment-cash-out.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/plus.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/sidebar-arrow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/spinner.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/line/trash-bin.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/outlined/book-mark.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/outlined/minus-circle.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/pictogram/arrow-down-down-colored.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/pictogram/arrow-up-up-colored.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/social/x.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/solid/book-mark.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/solid/menu.svg:
--------------------------------------------------------------------------------
1 | ;
16 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/solid/plug.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/solid/share.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/solid/shield-done.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/solid/solid-dot.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/solid/user.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/wallet/argent-wallet.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/wallet/ledger-wallet.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/src/svg/wallet/ton-keeper-wallet.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/icons/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "compilerOptions": {
4 | "module": "CommonJS",
5 | "moduleResolution": "node",
6 | "types": ["node"]
7 | },
8 | "include": ["**/*.ts", "**/*.tsx"],
9 | "exclude": ["dist", "node_modules", "**/*.svg"]
10 | }
11 |
--------------------------------------------------------------------------------
/packages/icons/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | splitting: false,
6 | target: 'es2019',
7 | format: ['cjs', 'esm'],
8 | entry: ['src/components/**/*.{ts,tsx}'],
9 | }))
10 |
--------------------------------------------------------------------------------
/packages/icons/types.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.svg' {
2 | import React = require('react')
3 |
4 | export const ReactComponent: React.FC>
5 | const src: string
6 | export default src
7 | }
8 |
--------------------------------------------------------------------------------
/packages/storybook/.gitignore:
--------------------------------------------------------------------------------
1 | .vercel
2 | storybook-static
--------------------------------------------------------------------------------
/packages/storybook/.storybook/assets/banner.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/packages/storybook/.storybook/assets/banner.webp
--------------------------------------------------------------------------------
/packages/storybook/.storybook/assets/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/packages/storybook/.storybook/assets/favicon.ico
--------------------------------------------------------------------------------
/packages/storybook/.storybook/assets/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/packages/storybook/.storybook/assets/favicon.png
--------------------------------------------------------------------------------
/packages/storybook/.storybook/assets/logo-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/packages/storybook/.storybook/assets/logo-black.png
--------------------------------------------------------------------------------
/packages/storybook/.storybook/assets/logo-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/consolelabs/mochi-ui/0b8cd8b0722d05bd7e56101cab5e828844909b9d/packages/storybook/.storybook/assets/logo-white.png
--------------------------------------------------------------------------------
/packages/storybook/.storybook/manager-head.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/packages/storybook/.storybook/preview-head.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/packages/storybook/.storybook/styles.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | @layer base {
6 | body {
7 | @apply bg-white dark:bg-slate-900;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/packages/storybook/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/packages/storybook/tailwind.config.js:
--------------------------------------------------------------------------------
1 | import { mochiui } from '@mochi-ui/theme'
2 | import tailwindAnimate from 'tailwindcss-animate'
3 |
4 | /** @type {import('tailwindcss').Config} */
5 | export default {
6 | darkMode: 'class',
7 | content: [
8 | '../web3/*/src/**/*.{js,jsx,ts,tsx}',
9 | '../web3/*/stories/**/*.stories.{js,jsx,ts,tsx}',
10 | '../components/*/stories/**/*.stories.{js,jsx,ts,tsx}',
11 | '../theme/src/components/**/*.{js,jsx,ts,tsx}',
12 | ],
13 | plugins: [mochiui(), tailwindAnimate],
14 | }
15 |
--------------------------------------------------------------------------------
/packages/storybook/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": [".storybook/**/*.ts"],
4 | "exclude": ["node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/theme/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/theme/clean-package.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "replace": {
3 | "main": "dist/index.js",
4 | "module": "dist/index.mjs",
5 | "types": "dist/index.d.ts",
6 | "exports": {
7 | ".": {
8 | "types": "./dist/index.d.ts",
9 | "import": "./dist/index.mjs",
10 | "require": "./dist/index.js"
11 | },
12 | "./plugin": {
13 | "types": "./dist/plugin.d.ts",
14 | "import": "./dist/plugin.mjs",
15 | "require": "./dist/plugin.js"
16 | },
17 | "./package.json": "./package.json"
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/packages/theme/plugin.d.ts:
--------------------------------------------------------------------------------
1 | export * from './dist/plugin'
2 |
--------------------------------------------------------------------------------
/packages/theme/plugin.js:
--------------------------------------------------------------------------------
1 | module.exports = require('./dist/plugin')
2 |
--------------------------------------------------------------------------------
/packages/theme/src/colors/index.ts:
--------------------------------------------------------------------------------
1 | import { commonColors } from './common'
2 | import { semanticColors } from './semantic'
3 |
4 | const colors = {
5 | ...commonColors,
6 | ...semanticColors,
7 | }
8 |
9 | export { colors, commonColors, semanticColors }
10 |
--------------------------------------------------------------------------------
/packages/theme/src/components/card.ts:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 |
3 | const cardClsx = ({ className = '' }: { className?: string } = {}) =>
4 | clsx('p-4 border rounded-2xl border-divider bg-background-surface', className)
5 |
6 | export const card = {
7 | cardClsx,
8 | }
9 |
--------------------------------------------------------------------------------
/packages/theme/src/components/content-editable.ts:
--------------------------------------------------------------------------------
1 | import clsx from 'clsx'
2 |
3 | const contentEditableClsx = ({ className = '' }: { className?: string } = {}) =>
4 | clsx(
5 | 'outline-none break-all empty:before:content-[attr(placeholder)] before:text-text-disabled before:font-normal',
6 | className,
7 | )
8 |
9 | const contentEditable = {
10 | contentEditableClsx,
11 | }
12 |
13 | export { contentEditable }
14 |
--------------------------------------------------------------------------------
/packages/theme/src/components/form-control.ts:
--------------------------------------------------------------------------------
1 | import { clsx } from 'clsx'
2 |
3 | const formControl = {
4 | wrapperClsx: ({ className = '' }: { className?: string }) =>
5 | clsx('flex flex-col gap-2', className),
6 | }
7 |
8 | const formHelperText = ({
9 | className = '',
10 | error = false,
11 | }: {
12 | className?: string
13 | error?: boolean
14 | }) =>
15 | clsx(
16 | 'text-xs tracking-tighter',
17 | {
18 | 'text-danger-outline-fg': error,
19 | 'text-text-tertiary': !error,
20 | },
21 | className,
22 | )
23 |
24 | export { formControl, formHelperText }
25 |
--------------------------------------------------------------------------------
/packages/theme/src/components/label.ts:
--------------------------------------------------------------------------------
1 | import { clsx } from 'clsx'
2 |
3 | const labelClsx = ({ className = '' }: { className?: string }) =>
4 | clsx(
5 | 'tracking-tight uppercase text-text-tertiary text-xxxs font-bold',
6 | className,
7 | )
8 |
9 | const label = {
10 | labelClsx,
11 | }
12 |
13 | export { label }
14 |
--------------------------------------------------------------------------------
/packages/theme/src/components/layout.ts:
--------------------------------------------------------------------------------
1 | import { cva } from 'class-variance-authority'
2 |
3 | const layoutDirectionCva = cva('flex flex-nowrap', {
4 | variants: {
5 | hasSidebar: {
6 | true: 'flex-row',
7 | false: 'flex-col',
8 | },
9 | },
10 | defaultVariants: {
11 | hasSidebar: false,
12 | },
13 | })
14 |
15 | const layout = { layoutDirectionCva }
16 |
17 | export { layout }
18 |
--------------------------------------------------------------------------------
/packages/theme/src/components/page-content.ts:
--------------------------------------------------------------------------------
1 | import { clsx } from 'clsx'
2 |
3 | const pageContentWrapperClsx = ({
4 | className = '',
5 | }: { className?: string } = {}) =>
6 | clsx('py-4 lg:py-8 2xl:py-14 overflow-y-auto grow', className)
7 |
8 | const pageContentClsx = ({ className = '' }: { className?: string } = {}) =>
9 | clsx('dashboard-container', className)
10 |
11 | const pageContent = { pageContentWrapperClsx, pageContentClsx }
12 |
13 | export { pageContent }
14 |
--------------------------------------------------------------------------------
/packages/theme/src/components/separator.ts:
--------------------------------------------------------------------------------
1 | const horizontal = 'h-[0.5px] w-full'
2 | const vertical = 'w-[0.5px] h-full'
3 | const base = 'shrink-0 bg-divider rounded-full'
4 |
5 | export const separator = {
6 | horizontal,
7 | vertical,
8 | base,
9 | }
10 |
--------------------------------------------------------------------------------
/packages/theme/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './components'
2 | export * from './plugin'
3 | export * from './colors'
4 | export { cva } from 'class-variance-authority'
5 |
6 | export type { VariantProps } from 'class-variance-authority'
7 |
--------------------------------------------------------------------------------
/packages/theme/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts"],
4 | "exclude": ["**/*.js", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/theme/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | splitting: false,
6 | target: 'es2019',
7 | format: ['cjs', 'esm'],
8 | // Transform ESM Modules
9 | noExternal: ['flat'],
10 | }))
11 |
--------------------------------------------------------------------------------
/packages/web3/connect-wallet-widget/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/web3/connect-wallet-widget/src/constants.ts:
--------------------------------------------------------------------------------
1 | export const wcProfjectId = '9816a937feeca6d9a3278f631f4138a2' as const
2 |
--------------------------------------------------------------------------------
/packages/web3/connect-wallet-widget/src/index.ts:
--------------------------------------------------------------------------------
1 | // export types, component
2 | export * from './connect-wallet-widget'
3 |
--------------------------------------------------------------------------------
/packages/web3/connect-wallet-widget/src/providers/disabled-provider.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable class-methods-use-this */
2 | import { ChainProvider } from './provider'
3 |
4 | export class ProviderDisabled extends ChainProvider {
5 | sync() {
6 | return Object.assign(this)
7 | }
8 |
9 | async read() {
10 | return ''
11 | }
12 |
13 | async write() {
14 | return ''
15 | }
16 |
17 | async transfer() {
18 | return ''
19 | }
20 |
21 | async connect() {
22 | return null
23 | }
24 |
25 | async connectMobile() {
26 | return null
27 | }
28 |
29 | async isInstalled() {
30 | return false
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/packages/web3/connect-wallet-widget/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/web3/connect-wallet-widget/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig({
4 | clean: true,
5 | splitting: false,
6 | target: 'es2019',
7 | format: ['cjs', 'esm'],
8 | noExternal: ['browser-string-hexer'],
9 | external: ['@solana/web3.js'],
10 | })
11 |
--------------------------------------------------------------------------------
/packages/web3/login-widget/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/packages/web3/login-widget/src/index.ts:
--------------------------------------------------------------------------------
1 | export { type ChainProvider } from '@mochi-web3/connect-wallet-widget'
2 | export {
3 | LoginWidgetProvider,
4 | LoginWidget,
5 | useLoginWidget,
6 | getLoginWidgetState,
7 | } from './login-widget'
8 |
--------------------------------------------------------------------------------
/packages/web3/login-widget/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/packages/web3/login-widget/tsup.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig(() => ({
4 | clean: true,
5 | target: 'es2019',
6 | format: ['cjs', 'esm'],
7 | }))
8 |
--------------------------------------------------------------------------------
/plop/component/.eslintrc.js.hbs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: ['custom/react'],
4 | }
5 |
--------------------------------------------------------------------------------
/plop/component/src/index.ts.hbs:
--------------------------------------------------------------------------------
1 | // export types, component
2 | export * from './{{componentName}}'
3 |
--------------------------------------------------------------------------------
/plop/component/tsconfig.json.hbs:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/react-library.json",
3 | "include": ["**/*.ts", "**/*.tsx"],
4 | "exclude": ["dist", "node_modules"]
5 | }
6 |
--------------------------------------------------------------------------------
/plop/component/tsup.config.ts.hbs:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'tsup'
2 |
3 | export default defineConfig({
4 | clean: true,
5 | splitting: false,
6 | target: 'es2019',
7 | format: ['cjs', 'esm'],
8 | })
9 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | packages:
2 | - "apps/*"
3 | - "packages/**/**"
4 | - "config/*"
5 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "tsconfig/base.json"
3 | }
4 |
--------------------------------------------------------------------------------
/vercel.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 2,
3 | "public": true,
4 | "ignoreCommand": "node ../../scripts/check-build-apps.js",
5 | "git": {
6 | "deploymentEnabled": {
7 | "main": false,
8 | "cicd": false,
9 | "mochi-web-preview": false,
10 | "develop": false
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------