-
-
+
+ {collapsed ? (
+
+ } color="sand1" />
+
+ ) : (
+
+
+
- {accountId}
-
-
-
-
-
- router.push(`/${components.profilePage}?accountId=${accountId}`)}
- >
-
+
+
+ )}
+
+
+ router.push(`/${components.profilePage}?accountId=${accountId}`)}>
+ } />
Profile
-
- router.push(`/settings`)}>
-
+
+ router.push(`/settings`)}>
+ } />
Settings
-
- withdrawStorage()}>
-
+
+ router.push(`/wallet-utilities`)}>
+ } />
+ Wallet Utilities
+
+ withdrawStorage()}>
+ } />
{availableStorage && `Withdraw ${availableStorage.div(1000).toFixed(2)}kb`}
-
- logOut()}>
-
+
+ logOut()}>
+ } />
Sign out
-
-
-
-
-
+
+
+
);
};
diff --git a/src/components/marketing-navigation/desktop/DesktopNavigation.tsx b/src/components/marketing-navigation/desktop/DesktopNavigation.tsx
index a2e13fa7b..57c361cde 100644
--- a/src/components/marketing-navigation/desktop/DesktopNavigation.tsx
+++ b/src/components/marketing-navigation/desktop/DesktopNavigation.tsx
@@ -1,3 +1,4 @@
+import { Button } from '@near-pagoda/ui';
import Image from 'next/image';
import Link from 'next/link';
import { useRouter } from 'next/router';
@@ -6,7 +7,6 @@ import { useEffect, useRef, useState } from 'react';
import styled from 'styled-components';
import { MigrationBanner } from '@/components/banner/MigrationBanner';
-import { Button } from '@/components/lib/Button';
import { useBosComponents } from '@/hooks/useBosComponents';
import { useSignInRedirect } from '@/hooks/useSignInRedirect';
import { useAuthStore } from '@/stores/auth';
diff --git a/src/components/marketing-navigation/mobile/Menu.tsx b/src/components/marketing-navigation/mobile/Menu.tsx
index f63c24b07..e01b3bc2d 100644
--- a/src/components/marketing-navigation/mobile/Menu.tsx
+++ b/src/components/marketing-navigation/mobile/Menu.tsx
@@ -1,8 +1,8 @@
+import { Button } from '@near-pagoda/ui';
import { useRouter } from 'next/router';
import React from 'react';
import styled from 'styled-components';
-import { Button } from '@/components/lib/Button';
import { useBosComponents } from '@/hooks/useBosComponents';
import { useSignInRedirect } from '@/hooks/useSignInRedirect';
import { useAuthStore } from '@/stores/auth';
diff --git a/src/components/marketing-navigation/mobile/MobileNavigation.tsx b/src/components/marketing-navigation/mobile/MobileNavigation.tsx
index 102593683..661226a58 100644
--- a/src/components/marketing-navigation/mobile/MobileNavigation.tsx
+++ b/src/components/marketing-navigation/mobile/MobileNavigation.tsx
@@ -1,10 +1,10 @@
+import { Button } from '@near-pagoda/ui';
import Image from 'next/image';
import Link from 'next/link';
import { useState } from 'react';
import styled from 'styled-components';
import { MigrationBanner } from '@/components/banner/MigrationBanner';
-import { Button } from '@/components/lib/Button';
import { useSignInRedirect } from '@/hooks/useSignInRedirect';
import { useAuthStore } from '@/stores/auth';
diff --git a/src/components/sandbox/Sandbox.js b/src/components/sandbox/Sandbox.js
index 09c6384e0..c5ea84ad0 100644
--- a/src/components/sandbox/Sandbox.js
+++ b/src/components/sandbox/Sandbox.js
@@ -1,3 +1,4 @@
+import { PlaceholderCard } from '@near-pagoda/ui';
import ls from 'local-storage';
import { useRouter } from 'next/router';
import prettier from 'prettier';
@@ -10,7 +11,6 @@ import { useCurrentComponentStore } from '@/stores/current-component';
import { useVmStore } from '@/stores/vm';
import { recordHandledError } from '@/utils/analytics';
-import { Spinner } from '../lib/Spinner';
import BannerOboarding from './Banners/BannerOboarding';
import VsCodeBanner from './Banners/VsCodeBanner';
import MainWrapper from './css/MainWrapper';
@@ -505,7 +505,7 @@ export const Sandbox = ({ onboarding = false }) => {
firstLoad();
}, [cache, firstLoad, near]);
- if (!shouldRender) return
;
+ if (!shouldRender) return
;
return (
diff --git a/src/components/sidebar-navigation/LargeScreenHeader.tsx b/src/components/sidebar-navigation/LargeScreenHeader.tsx
index bb70c070c..7d46fb28d 100644
--- a/src/components/sidebar-navigation/LargeScreenHeader.tsx
+++ b/src/components/sidebar-navigation/LargeScreenHeader.tsx
@@ -1,12 +1,12 @@
+import { Button } from '@near-pagoda/ui';
import { useEffect, useState } from 'react';
import { useBosComponents } from '@/hooks/useBosComponents';
import { useSignInRedirect } from '@/hooks/useSignInRedirect';
import { useAuthStore } from '@/stores/auth';
-import { Button } from '../lib/Button';
+import { UserDropdownMenu } from '../marketing-navigation/UserDropdownMenu';
import { VmComponent } from '../vm/VmComponent';
-import { LargeScreenProfileDropdown } from './LargeScreenProfileDropdown';
import { useNavigationStore } from './store';
import * as S from './styles';
@@ -40,13 +40,12 @@ export const LargeScreenHeader = () => {
return (
-
+
>
) : (
<>
diff --git a/src/components/sidebar-navigation/LargeScreenProfileDropdown.tsx b/src/components/sidebar-navigation/LargeScreenProfileDropdown.tsx
deleted file mode 100644
index 1f3718ad1..000000000
--- a/src/components/sidebar-navigation/LargeScreenProfileDropdown.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import { useCallback } from 'react';
-
-import { useBosComponents } from '@/hooks/useBosComponents';
-import { useAuthStore } from '@/stores/auth';
-import { useVmStore } from '@/stores/vm';
-
-import { VmComponent } from '../vm/VmComponent';
-import * as S from './styles';
-
-export const LargeScreenProfileDropdown = () => {
- const components = useBosComponents();
- const near = useVmStore((store) => store.near);
- const availableStorage = useAuthStore((store) => store.availableStorage);
- const availableStorageDisplay = availableStorage?.gte(10) ? availableStorage.div(1000).toFixed(2) : '0';
- const logOut = useAuthStore((store) => store.logOut);
-
- const withdrawTokens = useCallback(async () => {
- if (!near) return;
- await near.contract.storage_withdraw({}, undefined, '1');
- }, [near]);
-
- return (
-
-
-
- );
-};
diff --git a/src/components/sidebar-navigation/PinnedApps.tsx b/src/components/sidebar-navigation/PinnedApps.tsx
index d7ce3d721..36012747b 100644
--- a/src/components/sidebar-navigation/PinnedApps.tsx
+++ b/src/components/sidebar-navigation/PinnedApps.tsx
@@ -1,14 +1,14 @@
/* eslint-disable @next/next/no-img-element */
+import { Tooltip } from '@near-pagoda/ui';
+import { Button } from '@near-pagoda/ui';
+import { Text } from '@near-pagoda/ui';
import { useRouter } from 'next/router';
import { useEffect } from 'react';
import { useBosComponents } from '@/hooks/useBosComponents';
import { useAuthStore } from '@/stores/auth';
-import { Button } from '../lib/Button';
-import { Text } from '../lib/Text';
-import { Tooltip } from '../lib/Tooltip';
import { useNavigationStore } from './store';
import * as S from './styles';
import { currentPathMatchesRoute } from './utils';
@@ -75,7 +75,7 @@ export const PinnedApps = () => {
<>
{isSidebarExpanded ? (
-
+
Discover apps from the NEAR developer community to pin.
diff --git a/src/components/sidebar-navigation/Search.tsx b/src/components/sidebar-navigation/Search.tsx
index 40fbc3268..b5f3a8ed2 100644
--- a/src/components/sidebar-navigation/Search.tsx
+++ b/src/components/sidebar-navigation/Search.tsx
@@ -1,8 +1,8 @@
+import { Input } from '@near-pagoda/ui';
import * as HoverCard from '@radix-ui/react-hover-card';
import Link from 'next/link';
import React, { useCallback, useEffect, useRef, useState } from 'react';
-import { Input } from '@/components/lib/Input';
import useDebounce from '@/hooks/useDebounce';
import { fetchSearchHits } from '@/utils/algoliaSearchApi';
import { fetchCatalog } from '@/utils/catalogSearchApi';
diff --git a/src/components/sidebar-navigation/Sidebar.tsx b/src/components/sidebar-navigation/Sidebar.tsx
index ad42c4f5e..f01bd3f52 100644
--- a/src/components/sidebar-navigation/Sidebar.tsx
+++ b/src/components/sidebar-navigation/Sidebar.tsx
@@ -1,3 +1,4 @@
+import { Tooltip } from '@near-pagoda/ui';
import Image from 'next/image';
import { useRouter } from 'next/router';
import { useRef } from 'react';
@@ -5,9 +6,8 @@ import { useRef } from 'react';
import { useSignInRedirect } from '@/hooks/useSignInRedirect';
import { useAuthStore } from '@/stores/auth';
-import { Tooltip } from '../lib/Tooltip';
+import { UserDropdownMenu } from '../marketing-navigation/UserDropdownMenu';
import NearIconSvg from './icons/near-icon.svg';
-import { LargeScreenProfileDropdown } from './LargeScreenProfileDropdown';
import { Search } from './Search';
import { useNavigationStore } from './store';
import * as S from './styles';
@@ -168,12 +168,14 @@ export const Sidebar = () => {
Get Funding
+
@@ -181,9 +183,9 @@ export const Sidebar = () => {
{signedIn ? (
-
+
) : (
-
+
Sign-up or Login
diff --git a/src/components/sidebar-navigation/SmallScreenHeader.tsx b/src/components/sidebar-navigation/SmallScreenHeader.tsx
index 88dedd025..c4f6a55ab 100644
--- a/src/components/sidebar-navigation/SmallScreenHeader.tsx
+++ b/src/components/sidebar-navigation/SmallScreenHeader.tsx
@@ -1,12 +1,13 @@
+import { Button } from '@near-pagoda/ui';
+import { MagnifyingGlass } from '@phosphor-icons/react/dist/ssr';
import Image from 'next/image';
import { useRouter } from 'next/router';
import { useSignInRedirect } from '@/hooks/useSignInRedirect';
import { useAuthStore } from '@/stores/auth';
-import { Button } from '../lib/Button';
+import { UserDropdownMenu } from '../marketing-navigation/UserDropdownMenu';
import NearIconSvg from './icons/near-icon.svg';
-import { LargeScreenProfileDropdown } from './LargeScreenProfileDropdown';
import { useNavigationStore } from './store';
import * as S from './styles';
@@ -51,8 +52,8 @@ export const SmallScreenHeader = () => {
{signedIn ? (
-
-
+ } variant="secondary" onClick={redirect('/search')} />
+
) : (
<>
diff --git a/src/components/vm/VmCommitButton.tsx b/src/components/vm/VmCommitButton.tsx
index 68b3a4d2c..cd537ff6f 100644
--- a/src/components/vm/VmCommitButton.tsx
+++ b/src/components/vm/VmCommitButton.tsx
@@ -1,6 +1,6 @@
-import { useVmStore } from '@/stores/vm';
+import { Placeholder } from '@near-pagoda/ui';
-import { Spinner } from '../lib/Spinner';
+import { useVmStore } from '@/stores/vm';
type Props = {
className?: string;
@@ -13,7 +13,7 @@ export function VmCommitButton(props: Props) {
const { near, CommitButton } = useVmStore();
if (!near || !CommitButton) {
- return ;
+ return ;
}
return ;
diff --git a/src/components/vm/VmComponent.tsx b/src/components/vm/VmComponent.tsx
index 98c5157e0..70e5ef244 100644
--- a/src/components/vm/VmComponent.tsx
+++ b/src/components/vm/VmComponent.tsx
@@ -1,21 +1,17 @@
import { useBosLoaderStore } from '@/stores/bos-loader';
import { useVmStore } from '@/stores/vm';
-import { Spinner } from '../lib/Spinner';
-
type Props = {
- showLoadingSpinner?: boolean;
src: string;
props?: Record;
};
-export function VmComponent({ showLoadingSpinner = true, ...props }: Props) {
+export function VmComponent(props: Props) {
const { EthersProvider, ethersContext, Widget } = useVmStore();
const redirectMapStore = useBosLoaderStore();
if (!EthersProvider || !redirectMapStore.hasResolved) {
- if (!showLoadingSpinner) return null;
- return ;
+ return null;
}
return (
diff --git a/src/components/wallet-utilities/ExportFastAuthAccount.tsx b/src/components/wallet-utilities/ExportFastAuthAccount.tsx
new file mode 100644
index 000000000..6a042e9df
--- /dev/null
+++ b/src/components/wallet-utilities/ExportFastAuthAccount.tsx
@@ -0,0 +1,264 @@
+import {
+ Accordion,
+ Button,
+ Card,
+ copyTextToClipboard,
+ Flex,
+ handleClientError,
+ HR,
+ openToast,
+ Text,
+ Tooltip,
+} from '@near-pagoda/ui';
+import { Copy, Eye, EyeSlash } from '@phosphor-icons/react';
+import { KeyPair } from 'near-api-js';
+import { useEffect, useState } from 'react';
+
+import { useAuthStore } from '@/stores/auth';
+import { useVmStore } from '@/stores/vm';
+
+export const ExportFastAuthAccount = () => {
+ const [generatingKey, setGeneratingKey] = useState(false);
+ const [secretKey, setSecretKey] = useState('');
+ const [fastAuthAccountSignedIn, setFastAuthAccountSignedIn] = useState(false);
+ const [privateKeyVisible, setPrivateKeyVisible] = useState(false);
+ const accountId = useAuthStore((store) => store.accountId);
+ const wallet = useAuthStore((store) => store.wallet);
+ const near = useVmStore((store) => store.near);
+
+ useEffect(() => {
+ if (!near || !accountId || !wallet) return;
+ if ((wallet as any).signAndSendDelegateAction) {
+ setFastAuthAccountSignedIn(true);
+ }
+ }, [near, wallet, accountId]);
+
+ const generateKey = async () => {
+ try {
+ if (!accountId || !wallet) {
+ throw new Error('Wallet has not initialized');
+ }
+
+ setGeneratingKey(true);
+
+ const keyPair = KeyPair.fromRandom('ed25519');
+ const publicKey = keyPair.getPublicKey().toString();
+
+ await wallet.signAndSendTransaction({
+ receiverId: accountId,
+ actions: [
+ {
+ type: 'AddKey',
+ params: {
+ publicKey: publicKey,
+ accessKey: {
+ permission: 'FullAccess',
+ },
+ },
+ },
+ ],
+ });
+
+ setSecretKey(keyPair.toString());
+
+ openToast({
+ type: 'success',
+ title: 'Key Generated',
+ description: 'Copy the key and continue to the next step',
+ });
+ } catch (error) {
+ handleClientError({ error, title: 'Failed to create full access key' });
+ } finally {
+ setGeneratingKey(false);
+ }
+ };
+
+ if (!fastAuthAccountSignedIn) {
+ return The export feature is only for FastAuth accounts. You are currently signed in with a wallet.;
+ }
+
+ return (
+
+
+ Want to export your FastAuth account to a wallet? Follow the steps below:
+
+
+
+
+ 1. Generate Key
+
+
+ Click the button below to create a full access key. Once {`you've`} reviewed and confirmed the transaction,{' '}
+ {`you'll`} be able to copy the generated key to your clipboard.
+
+
+ {secretKey ? (
+
+
+
+
+ Your Generated Key
+
+
+
+ : }
+ fill="outline"
+ size="small"
+ onClick={() => setPrivateKeyVisible((prev) => !prev)}
+ />
+
+
+
+ }
+ fill="outline"
+ size="small"
+ onClick={() => copyTextToClipboard(secretKey, 'Access key copied to clipboard')}
+ />
+
+
+
+
+ {secretKey}
+
+
+
+
+
+ This private key is highly sensitive like a password. Keep it secure and do not share it with anyone.
+
+
+
+ ) : (
+
+ )}
+
+
+
+ 2. Import Key
+
+
+ Copy the key that you generated above and paste it into the import flow of your preferred wallet:
+
+
+
+
+ Bitte Wallet
+
+
+ -
+
+ Open their{' '}
+
+ Connect Account
+ {' '}
+ page
+
+
+ -
+
+ Scroll down to the Import section and select Private Key
+
+
+ -
+ Paste the key copied from above
+
+
+
+
+
+
+ HERE Wallet
+
+
+ -
+
+ Install the{' '}
+
+ HERE Wallet
+ {' '}
+ app on your device
+
+
+ -
+
+ Open up the app and navigate to the Import Account page
+
+
+ -
+
+ Scroll down to click the Use Private Key button
+
+
+ -
+ Paste the key copied from above
+
+
+
+
+
+
+ Meteor Wallet
+
+
+ -
+
+ Open their{' '}
+
+ Import Wallet
+ {' '}
+ page
+
+
+ -
+
+ Select the Private Key method and click Continue
+
+
+ -
+ Paste the key copied from above
+
+
+
+
+
+
+ My Near Wallet
+
+
+ -
+
+ Open their{' '}
+
+ Recover Private Key
+ {' '}
+ page
+
+
+ -
+ Paste the key copied from above
+
+
+
+
+
+
+ );
+};
diff --git a/src/components/wallet-utilities/ReceiveNear.tsx b/src/components/wallet-utilities/ReceiveNear.tsx
new file mode 100644
index 000000000..4ac7f6f23
--- /dev/null
+++ b/src/components/wallet-utilities/ReceiveNear.tsx
@@ -0,0 +1,30 @@
+import { Button, copyTextToClipboard, Flex, Text, Tooltip } from '@near-pagoda/ui';
+import { Copy } from '@phosphor-icons/react';
+
+import { useAuthStore } from '@/stores/auth';
+
+export const ReceiveNear = () => {
+ const accountId = useAuthStore((store) => store.accountId);
+
+ return (
+
+ Copy and share your account ID to receive NEAR:
+
+
+
+ {accountId}
+
+
+
+ }
+ size="small"
+ fill="outline"
+ onClick={() => copyTextToClipboard(accountId, accountId)}
+ />
+
+
+
+ );
+};
diff --git a/src/components/wallet-utilities/SendNear.tsx b/src/components/wallet-utilities/SendNear.tsx
new file mode 100644
index 000000000..882b50907
--- /dev/null
+++ b/src/components/wallet-utilities/SendNear.tsx
@@ -0,0 +1,136 @@
+import { Button, Flex, Form, handleClientError, Input, openToast } from '@near-pagoda/ui';
+import { utils } from 'near-api-js';
+import { useEffect, useState } from 'react';
+import type { SubmitHandler } from 'react-hook-form';
+import { useForm } from 'react-hook-form';
+
+import { useAuthStore } from '@/stores/auth';
+
+type FormData = {
+ sendNearAmount: number;
+ sendToAccountId: string;
+};
+
+function displayBalance(balance: number) {
+ let display = Math.floor(balance * 100) / 100;
+
+ if (balance < 1) {
+ display = Math.floor(balance * 100000) / 100000;
+ if (balance && !display) return '< 0.00001';
+ return display;
+ }
+
+ return display;
+}
+
+export const SendNear = () => {
+ const form = useForm();
+ const accountId = useAuthStore((store) => store.accountId);
+ const wallet = useAuthStore((store) => store.wallet);
+ const near = useAuthStore((store) => store.vmNear);
+ const [currentNearAmount, setCurrentNearAmount] = useState(0);
+
+ useEffect(() => {
+ if (!near || !accountId) return;
+
+ const loadBalance = async () => {
+ try {
+ const state = await near.accountState(accountId);
+ const requiredGas = 0.00005;
+ const balance = Number(utils.format.formatNearAmount(state.amount || '0', 5)) - requiredGas;
+ setCurrentNearAmount(balance);
+ } catch (error) {
+ console.error(error);
+ }
+ };
+
+ loadBalance();
+ }, [accountId, near]);
+
+ const validSubmitHandler: SubmitHandler = async (data) => {
+ try {
+ if (!wallet) throw new Error('Wallet has not initialized yet');
+ const amount = utils.format.parseNearAmount(data.sendNearAmount.toString());
+ if (!amount) throw new Error('Failed to parse amount');
+
+ const result = await wallet.signAndSendTransaction({
+ actions: [
+ {
+ params: {
+ deposit: amount,
+ },
+ type: 'Transfer',
+ },
+ ],
+ signerId: accountId,
+ receiverId: data.sendToAccountId,
+ });
+
+ setCurrentNearAmount((value) => value - (data.sendNearAmount || 0));
+ form.reset();
+
+ openToast({
+ type: 'success',
+ title: 'Transaction Success',
+ description: `${data.sendNearAmount} Ⓝ sent to ${data.sendToAccountId}`,
+ duration: Infinity,
+ actionText: 'View Transaction',
+ action: () => {
+ /*
+ NOTE: When sending a transaction while signed in with a FastAuth account,
+ the request will succeed, however the result object is undefined.
+ */
+
+ if (result) {
+ const transactionId = result.transaction_outcome.id;
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ window.open(`https://nearblocks.io/txns/${transactionId}`, '_blank')!.focus();
+ } else {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ window.open(`https://nearblocks.io/address/${data.sendToAccountId}`, '_blank')!.focus();
+ }
+ },
+ });
+ } catch (error) {
+ handleClientError({ error, title: 'Transaction Failed' });
+ }
+ };
+
+ return (
+
+ );
+};
diff --git a/src/pages/[componentAccountId]/widget/[componentName].tsx b/src/pages/[componentAccountId]/widget/[componentName].tsx
index b1ef59ef6..9f1869568 100644
--- a/src/pages/[componentAccountId]/widget/[componentName].tsx
+++ b/src/pages/[componentAccountId]/widget/[componentName].tsx
@@ -4,8 +4,8 @@ import { useEffect, useState } from 'react';
import { remark } from 'remark';
import strip from 'strip-markdown';
-import { RootContentContainer } from '@/components/lib/Container';
import { MetaTags } from '@/components/MetaTags';
+import { RootContentContainer } from '@/components/RootContentContainer';
import { VmComponent } from '@/components/vm/VmComponent';
import { useBosComponents } from '@/hooks/useBosComponents';
import { useGatewayEvents } from '@/hooks/useGatewayEvents';
diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx
index f03899aa2..00a7e7ead 100644
--- a/src/pages/_app.tsx
+++ b/src/pages/_app.tsx
@@ -1,10 +1,13 @@
-import '@/styles/theme.css';
import '@/styles/globals.css';
+import '@near-pagoda/ui/globals.css';
+import '@near-pagoda/ui/theme.css';
+import '@near-pagoda/ui/lib.css';
import 'bootstrap-icons/font/bootstrap-icons.css';
import '@near-wallet-selector/modal-ui/styles.css';
import 'react-bootstrap-typeahead/css/Typeahead.css';
import 'react-bootstrap-typeahead/css/Typeahead.bs5.css';
+import { openToast, Toaster } from '@near-pagoda/ui';
import Gleap from 'gleap';
import type { AppProps } from 'next/app';
import dynamic from 'next/dynamic';
@@ -14,7 +17,6 @@ import Script from 'next/script';
import { useEffect } from 'react';
import { CookiePrompt } from '@/components/CookiePrompt';
-import { openToast, Toaster } from '@/components/lib/Toast';
import { ResearchFormWizard } from '@/components/research-form-wizard/ResearchFormWizard';
import { useBosLoaderInitializer } from '@/hooks/useBosLoaderInitializer';
import { useClickTracking } from '@/hooks/useClickTracking';
@@ -56,7 +58,7 @@ export default function App({ Component, pageProps }: AppPropsWithLayout) {
recordHandledError({ description: msg || 'unknown error during Fast Authentication' });
openToast({
title: 'An Error Occurred During Fast Authentication',
- type: 'WARNING',
+ type: 'error',
description: msg || '',
duration: 5000,
});
diff --git a/src/pages/ecosystem/get-funding.tsx b/src/pages/ecosystem/get-funding.tsx
deleted file mode 100644
index 989f9a1a3..000000000
--- a/src/pages/ecosystem/get-funding.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ComponentWrapperPage } from '@/components/near-org/ComponentWrapperPage';
-import { useBosComponents } from '@/hooks/useBosComponents';
-import { useDefaultLayout } from '@/hooks/useLayout';
-import type { NextPageWithLayout } from '@/utils/types';
-
-const EcosystemGetFundingPage: NextPageWithLayout = () => {
- const components = useBosComponents();
-
- return (
-
- );
-};
-
-EcosystemGetFundingPage.getLayout = useDefaultLayout;
-
-export default EcosystemGetFundingPage;
diff --git a/src/pages/embed/[accountId]/widget/[componentName].tsx b/src/pages/embed/[accountId]/widget/[componentName].tsx
index b93ae36ec..68cbbd638 100644
--- a/src/pages/embed/[accountId]/widget/[componentName].tsx
+++ b/src/pages/embed/[accountId]/widget/[componentName].tsx
@@ -1,7 +1,7 @@
import { useRouter } from 'next/router';
import React, { useEffect, useState } from 'react';
-import { RootContentContainer } from '@/components/lib/Container';
+import { RootContentContainer } from '@/components/RootContentContainer';
import { VmComponent } from '@/components/vm/VmComponent';
import { useBosComponents } from '@/hooks/useBosComponents';
import { useGatewayEvents } from '@/hooks/useGatewayEvents';
diff --git a/src/pages/flags.tsx b/src/pages/flags.tsx
index e6115aff5..a1a4423d1 100644
--- a/src/pages/flags.tsx
+++ b/src/pages/flags.tsx
@@ -1,10 +1,10 @@
+import { Button } from '@near-pagoda/ui';
+import { Text } from '@near-pagoda/ui';
import { useEffect } from 'react';
import type { SubmitHandler } from 'react-hook-form';
import { useForm } from 'react-hook-form';
import styled from 'styled-components';
-import { Button } from '@/components/lib/Button';
-import { Text } from '@/components/lib/Text';
import { useClearCurrentComponent } from '@/hooks/useClearCurrentComponent';
import { useFlags } from '@/hooks/useFlags';
import { useDefaultLayout } from '@/hooks/useLayout';
@@ -23,7 +23,7 @@ const Form = styled.form`
gap: 1rem;
`;
-const InputGrid = styled.div`
+const InputGrid = styled.label`
display: grid;
grid-template-columns: max-content 1fr;
align-items: center;
@@ -54,13 +54,13 @@ const FlagsPage: NextPageWithLayout = () => {
return (
-
+
Flags