Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
ab56268
feat(appkit): start input component
heyllog Mar 25, 2026
9c9baa1
feat(appkit): add fonts from figma
heyllog Mar 25, 2026
709e920
feat(appkit): add colors from figma
heyllog Mar 25, 2026
506e0a4
feat(appkit): add new button styles
heyllog Mar 25, 2026
74cca54
feat(swap): add initial swap UI
heyllog Mar 26, 2026
2335641
feat(appkit): start modal component
heyllog Mar 26, 2026
13ce447
feat(appkit): start reworking storybook
heyllog Mar 26, 2026
451f127
feat(storybook): rework storybook theme
heyllog Mar 26, 2026
19b2764
feat(swap): update storybook
heyllog Mar 29, 2026
c7e688f
feat(swap): add swap provider
heyllog Mar 30, 2026
05af4aa
feat(swap): add debounce
heyllog Mar 30, 2026
f8791b1
feat(swap): enable send button
heyllog Mar 30, 2026
e606f6c
feat(swap): start select currency modal
heyllog Mar 30, 2026
397c9f5
feat(swap): add more currencies
heyllog Mar 30, 2026
312d0cd
feat(swap): map addresses and show balances
heyllog Mar 31, 2026
2e5e664
Merge branch 'main' into feat/TON-376-swap-design
heyllog Mar 31, 2026
8397efe
feat(swap): add amount validation
heyllog Mar 31, 2026
4900885
feat(swap): add skeletons
heyllog Mar 31, 2026
f607161
feat(swap): add providers metadata
heyllog Mar 31, 2026
ad708ea
feat(swap): fix TON token
heyllog Mar 31, 2026
111b737
feat(swap): slippage
heyllog Mar 31, 2026
50964c7
feat(swap): add autoscale input and rework amount formats
heyllog Apr 1, 2026
6b0d14a
feat(swap): rework autoscale
heyllog Apr 1, 2026
07cfede
feat(swap): create InfoBlock component and rework SwapInfo
heyllog Apr 1, 2026
0e31658
feat(swap): create separate TokenSelectModal
heyllog Apr 1, 2026
55da0d8
feat(swap): delete radix-ui
heyllog Apr 1, 2026
51133ab
feat(swap): get radix-ui back
heyllog Apr 1, 2026
ef580fe
Merge branch main into feature/TON-376-swap-design
heyllog Apr 3, 2026
9b91a21
feat(swap): start updating appkit-minter design
heyllog Apr 3, 2026
68e86e6
feat(swap): rework balances
heyllog Apr 3, 2026
e82e2af
feat(swap): fix storybook
heyllog Apr 3, 2026
1be3691
feat(swap): delete links from header
heyllog Apr 3, 2026
8b0be12
feat(swap): delete fake rates
heyllog Apr 3, 2026
62382a3
Merge branch 'main' into feat/TON-376-swap-design
heyllog Apr 6, 2026
5b75f27
feat(swap): add changeset
heyllog Apr 6, 2026
23cc4bf
Merge branch 'main' into feat/TON-376-swap-design
heyllog Apr 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .changeset/smooth-bushes-wear.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
'@ton/appkit-react': patch
'@ton/walletkit': patch
'@ton/appkit': patch
---

- `@ton/appkit`:
- added `getSwapProvider` and `watchSwapProviders` actions
- added swap-related events and types to `AppKit` core
- added `calcFiatValue` and `formatLargeValue` amount utilities
- added `debounce` utility function
- `@ton/walletkit`:
- added `SwapProviderMetadata` interface
- added `getMetadata()` method to `SwapProvider`
- added metadata support to `DeDustSwapProvider` and `OmnistonSwapProvider`
- `@ton/appkit-react`:
- added `SwapWidget` and related UI components (`SwapField`, `SwapSettings`, `TokenSelector`, etc.)
- added `SwapWidgetProvider` for swap state management
- added hooks for swap: `useSwapProvider`, `useSwapQuote`, `useBuildSwapTransaction`
- added `useDebounceCallback`, `useDebounceValue`, and `useUnmount` utility hooks
- added English localizations for swap features
3 changes: 1 addition & 2 deletions apps/appkit-minter/src/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ import { AppKitProvider } from '@ton/appkit-react';
import { appKit } from '@/core/configs/app-kit';
import { AppRouter, ThemeProvider, ToasterProvider } from '@/core/components';

import './core/styles/app.css';
import '@ton/appkit-react/styles.css';
import './core/styles/index.css';

const queryClient = new QueryClient();

Expand Down
62 changes: 0 additions & 62 deletions apps/appkit-minter/src/core/components/common/button.tsx

This file was deleted.

1 change: 0 additions & 1 deletion apps/appkit-minter/src/core/components/common/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,4 @@
*
*/

export { Button } from './button';
export { Card } from './card';
2 changes: 1 addition & 1 deletion apps/appkit-minter/src/core/components/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
*/

// Common components
export { Button, Card } from './common';
export { Card } from './common';
export { ToasterProvider } from './common/toaster-provider';

// Layout components
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
import { useWatchBalance, useWatchTransactions, useWatchJettons } from '@ton/appkit-react';
import { toast } from 'sonner';

import { MinterPage } from '@/pages';
import { MinterPage, SwapPage } from '@/pages';

export const AppRouter: React.FC = () => {
// Enable global real-time balance updates
Expand Down Expand Up @@ -50,6 +50,7 @@ export const AppRouter: React.FC = () => {
<BrowserRouter>
<Routes>
<Route path="/" element={<MinterPage />} />
<Route path="/swap" element={<SwapPage />} />
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
</BrowserRouter>
Expand Down
12 changes: 6 additions & 6 deletions apps/appkit-minter/src/core/components/layout/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,27 @@
import type React from 'react';
import { TonConnectButton } from '@ton/appkit-react';
import { Layers } from 'lucide-react';
import { Link } from 'react-router-dom';

import { ThemeSwitcher } from './theme-switcher';

import { NetworkPicker } from '@/features/network';

interface LayoutProps {
children: React.ReactNode;
title?: string;
}

export const Layout: React.FC<LayoutProps> = ({ children, title = 'NFT Minter' }) => {
export const Layout: React.FC<LayoutProps> = ({ children }) => {
return (
<div className="min-h-screen bg-background">
<header className="bg-card shadow-sm border-b border-border sticky top-0 z-10">
<div className="max-w-2xl mx-auto px-4 py-3 flex items-center">
<div className="flex items-center gap-3">
<div className="w-8 h-8 bg-gradient-to-br from-blue-500 to-purple-600 rounded-lg flex items-center justify-center">
<Link to="/" className="flex items-center gap-3">
<div className="w-8 h-8 bg-gradient-to-br from-blue-500 to-purple-600 rounded-lg flex items-center justify-center hover:opacity-90 transition-opacity">
<Layers className="w-5 h-5 text-white" />
</div>
<h1 className="text-xl font-bold text-foreground">{title}</h1>
</div>
<h1 className="text-xl font-bold text-foreground">NFT Minter</h1>
</Link>

<div className="ml-auto flex items-center gap-2">
<NetworkPicker />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,17 @@
*/

import { Moon, Sun } from 'lucide-react';
import { Button } from '@ton/appkit-react';

import { useTheme } from '@/core/hooks';

export function ThemeSwitcher() {
const { theme, setTheme } = useTheme();

return (
<button
className="inline-flex items-center justify-center rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-9 w-9"
onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}
>
<Button size="s" onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
{theme === 'light' ? <Sun className="h-[1.2rem] w-[1.2rem]" /> : <Moon className="h-[1.2rem] w-[1.2rem]" />}
<span className="sr-only">Toggle theme</span>
</button>
</Button>
);
}
7 changes: 7 additions & 0 deletions apps/appkit-minter/src/core/hooks/use-theme.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,24 @@

import { useContext, useEffect } from 'react';
import { useAppKitTheme } from '@ton/appkit-react';
import { useTonConnectUI, THEME } from '@tonconnect/ui-react';

import { ThemeProviderContext } from '@/core/components/layout/theme-provider';

export const useTheme = () => {
const context = useContext(ThemeProviderContext);
const [, setTheme] = useAppKitTheme();
const [tonconnect] = useTonConnectUI();

if (context === undefined) throw new Error('useTheme must be used within a ThemeProvider');

useEffect(() => {
setTheme(context.theme);
tonconnect.uiOptions = {
uiPreferences: {
theme: context.theme === 'dark' ? THEME.DARK : THEME.LIGHT,
},
};
}, [context.theme]);

return context;
Expand Down
189 changes: 0 additions & 189 deletions apps/appkit-minter/src/core/styles/app.css

This file was deleted.

Loading
Loading