) => {
diff --git a/apps/portal/src/components/legacy/Toggle.tsx b/apps/portal/src/components/legacy/Toggle.tsx
index 31ae62a86..0e62fafd4 100644
--- a/apps/portal/src/components/legacy/Toggle.tsx
+++ b/apps/portal/src/components/legacy/Toggle.tsx
@@ -1,5 +1,5 @@
import styled from '@emotion/styled'
-import { useBoolean } from '@util/hooks'
+import { useBoolean } from '../../util/hooks'
import { useEffect } from 'react'
export type ToggleProps = {
diff --git a/apps/portal/src/components/legacy/archetypes/Crowdloan/Bonus.tsx b/apps/portal/src/components/legacy/archetypes/Crowdloan/Bonus.tsx
index 72b08fd53..ecfdc25eb 100644
--- a/apps/portal/src/components/legacy/archetypes/Crowdloan/Bonus.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Crowdloan/Bonus.tsx
@@ -1,5 +1,5 @@
-import { useCrowdloanById } from '@libs/talisman'
-import { Maybe } from '@util/monads'
+import { useCrowdloanById } from '../../../../libs/talisman'
+import { Maybe } from '../../../../util/monads'
import { type ReactNode, useMemo } from 'react'
export type BonusProps = {
diff --git a/apps/portal/src/components/legacy/archetypes/Crowdloan/Contribute.tsx b/apps/portal/src/components/legacy/archetypes/Crowdloan/Contribute.tsx
index 818252654..9cfd7171d 100644
--- a/apps/portal/src/components/legacy/archetypes/Crowdloan/Contribute.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Crowdloan/Contribute.tsx
@@ -1,18 +1,18 @@
-import { Parachain } from '@components/legacy/archetypes'
-import XCircle from '@assets/icons/x-circle.svg?react'
-import { Button, DesktopRequired, Field, MaterialLoader, useModal } from '@components/legacy'
-import { TalismanHandLike } from '@components/legacy/TalismanHandLike'
-import { TalismanHandLoader } from '@components/legacy/TalismanHandLoader'
-import { useAccountSelector } from '@components/widgets/AccountSelector'
-import { writeableSubstrateAccountsState } from '@domains/accounts'
+import { Parachain } from '..'
+import XCircle from '../../../../assets/icons/x-circle.svg?react'
+import { Button, DesktopRequired, Field, MaterialLoader, useModal } from '../..'
+import { TalismanHandLike } from '../../TalismanHandLike'
+import { TalismanHandLoader } from '../../TalismanHandLoader'
+import { useAccountSelector } from '../../../widgets/AccountSelector'
+import { writeableSubstrateAccountsState } from '../../../../domains/accounts'
import { useTheme } from '@emotion/react'
import styled from '@emotion/styled'
-import { ContributeEvent, useCrowdloanContribute } from '@libs/crowdloans'
-import { Acala, Moonbeam, Polkadex, overrideByIds } from '@libs/crowdloans/crowdloanOverrides'
-import { useCrowdloanById } from '@libs/talisman'
+import { ContributeEvent, useCrowdloanContribute } from '../../../../libs/crowdloans'
+import { Acala, Moonbeam, Polkadex, overrideByIds } from '../../../../libs/crowdloans/crowdloanOverrides'
+import { useCrowdloanById } from '../../../../libs/talisman'
import { CircularProgressIndicator, Text } from '@talismn/ui'
-import { isMobileBrowser } from '@util/helpers'
-import { Maybe } from '@util/monads'
+import { isMobileBrowser } from '../../../../util/helpers'
+import { Maybe } from '../../../../util/monads'
import { useCallback, useEffect, useMemo, useState, type MouseEventHandler } from 'react'
import { useTranslation } from 'react-i18next'
import { useRecoilValue } from 'recoil'
diff --git a/apps/portal/src/components/legacy/archetypes/Crowdloan/Countdown.tsx b/apps/portal/src/components/legacy/archetypes/Crowdloan/Countdown.tsx
index 133729dbf..4731243e8 100644
--- a/apps/portal/src/components/legacy/archetypes/Crowdloan/Countdown.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Crowdloan/Countdown.tsx
@@ -1,6 +1,6 @@
-import { Countdown as Cd, Pendor } from '@components/legacy'
+import { Countdown as Cd, Pendor } from '../..'
import styled from '@emotion/styled'
-import { useChainmetaValue, useCrowdloanById } from '@libs/talisman'
+import { useChainmetaValue, useCrowdloanById } from '../../../../libs/talisman'
import { type ReactNode, useEffect, useState } from 'react'
type OngoingProps = {
diff --git a/apps/portal/src/components/legacy/archetypes/Crowdloan/Indexx.tsx b/apps/portal/src/components/legacy/archetypes/Crowdloan/Indexx.tsx
index c07823672..ddfa5e7c3 100644
--- a/apps/portal/src/components/legacy/archetypes/Crowdloan/Indexx.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Crowdloan/Indexx.tsx
@@ -1,11 +1,11 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
-import { Crowdloan } from '@components/legacy/archetypes'
-import { Await, Field, Grid, NoResults } from '@components/legacy'
+import { Crowdloan } from '..'
+import { Await, Field, Grid, NoResults } from '../..'
import styled from '@emotion/styled'
-import { useCrowdloanContributions } from '@libs/crowdloans'
-import { TitlePortal } from '@routes/layout'
+import { useCrowdloanContributions } from '../../../../libs/crowdloans'
+import { TitlePortal } from '../../../../routes/layout'
import { SearchBar } from '@talismn/ui'
-import { device } from '@util/breakpoints'
+import { device } from '../../../../util/breakpoints'
import { useTranslation } from 'react-i18next'
import { RootNav } from './RootNav'
diff --git a/apps/portal/src/components/legacy/archetypes/Crowdloan/Raised.tsx b/apps/portal/src/components/legacy/archetypes/Crowdloan/Raised.tsx
index 020d68a25..5b77efd29 100644
--- a/apps/portal/src/components/legacy/archetypes/Crowdloan/Raised.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Crowdloan/Raised.tsx
@@ -1,8 +1,8 @@
-import { Pendor, ProgressBar, Stat } from '@components/legacy'
+import { Pendor, ProgressBar, Stat } from '../..'
import styled from '@emotion/styled'
-import { useCrowdloanById } from '@libs/talisman'
+import { useCrowdloanById } from '../../../../libs/talisman'
import { CheckCircle } from '@talismn/web-icons'
-import { shortNumber } from '@util/helpers'
+import { shortNumber } from '../../../../util/helpers'
import { useTranslation } from 'react-i18next'
const Raised = styled(
diff --git a/apps/portal/src/components/legacy/archetypes/Crowdloan/Rewards.tsx b/apps/portal/src/components/legacy/archetypes/Crowdloan/Rewards.tsx
index 64c569970..dac178f6e 100644
--- a/apps/portal/src/components/legacy/archetypes/Crowdloan/Rewards.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Crowdloan/Rewards.tsx
@@ -1,6 +1,6 @@
-import { Stat } from '@components/legacy'
+import { Stat } from '../..'
import styled from '@emotion/styled'
-import { useCrowdloanById } from '@libs/talisman'
+import { useCrowdloanById } from '../../../../libs/talisman'
const Rewards = styled(({ id, className }: { id?: string; className?: string }) => {
const { crowdloan } = useCrowdloanById(id)
diff --git a/apps/portal/src/components/legacy/archetypes/Crowdloan/Teaser.tsx b/apps/portal/src/components/legacy/archetypes/Crowdloan/Teaser.tsx
index 9152a1a96..34f4f7560 100644
--- a/apps/portal/src/components/legacy/archetypes/Crowdloan/Teaser.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Crowdloan/Teaser.tsx
@@ -1,7 +1,7 @@
-import { Parachain } from '@components/legacy/archetypes'
-import { Pill } from '@components/legacy'
+import { Parachain } from '..'
+import { Pill } from '../..'
import styled from '@emotion/styled'
-import { useCrowdloanById, useParachainDetailsById } from '@libs/talisman'
+import { useCrowdloanById, useParachainDetailsById } from '../../../../libs/talisman'
import { useTranslation } from 'react-i18next'
import { Link } from 'react-router-dom'
diff --git a/apps/portal/src/components/legacy/archetypes/Crowdloan/_hooks.tsx b/apps/portal/src/components/legacy/archetypes/Crowdloan/_hooks.tsx
index 8933f2cd9..6945884f8 100644
--- a/apps/portal/src/components/legacy/archetypes/Crowdloan/_hooks.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Crowdloan/_hooks.tsx
@@ -1,4 +1,4 @@
-import { useLatestCrowdloans, useParachainsDetailsIndexedById } from '@libs/talisman'
+import { useLatestCrowdloans, useParachainsDetailsIndexedById } from '../../../../libs/talisman'
import { filter, find, orderBy } from 'lodash'
import { useEffect, useMemo, useState } from 'react'
import { useTranslation } from 'react-i18next'
diff --git a/apps/portal/src/components/legacy/archetypes/Explore/Card.tsx b/apps/portal/src/components/legacy/archetypes/Explore/Card.tsx
index 3c886a8ab..fb1f0c958 100644
--- a/apps/portal/src/components/legacy/archetypes/Explore/Card.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Explore/Card.tsx
@@ -1,5 +1,5 @@
import styled from '@emotion/styled'
-import { device } from '@util/breakpoints'
+import { device } from '../../../../util/breakpoints'
import { usePostHog } from 'posthog-js/react'
import { useCallback } from 'react'
diff --git a/apps/portal/src/components/legacy/archetypes/Explore/Loading.tsx b/apps/portal/src/components/legacy/archetypes/Explore/Loading.tsx
index c7e473cf1..2a18dca48 100644
--- a/apps/portal/src/components/legacy/archetypes/Explore/Loading.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Explore/Loading.tsx
@@ -1,5 +1,5 @@
import styled from '@emotion/styled'
-import { device } from '@util/breakpoints'
+import { device } from '../../../../util/breakpoints'
export const TagLoading = styled(({ className }: { className?: string }) => {
return (
diff --git a/apps/portal/src/components/legacy/archetypes/FairyBreadBanner.tsx b/apps/portal/src/components/legacy/archetypes/FairyBreadBanner.tsx
index 0293550ab..25e3d48d5 100644
--- a/apps/portal/src/components/legacy/archetypes/FairyBreadBanner.tsx
+++ b/apps/portal/src/components/legacy/archetypes/FairyBreadBanner.tsx
@@ -1,4 +1,4 @@
-import BaseFairyBreadBanner from '@components/recipes/FairyBreadBanner'
+import BaseFairyBreadBanner from '../../recipes/FairyBreadBanner'
import { usePostHog } from 'posthog-js/react'
import { useCallback, useEffect, useState } from 'react'
diff --git a/apps/portal/src/components/legacy/archetypes/JoinButton/JoinButton.tsx b/apps/portal/src/components/legacy/archetypes/JoinButton/JoinButton.tsx
index 7fb3bfbee..ebef64880 100644
--- a/apps/portal/src/components/legacy/archetypes/JoinButton/JoinButton.tsx
+++ b/apps/portal/src/components/legacy/archetypes/JoinButton/JoinButton.tsx
@@ -1,5 +1,5 @@
-import { Button } from '@components/legacy'
-import { DISCORD_JOIN_URL } from '@util/links'
+import { Button } from '../..'
+import { DISCORD_JOIN_URL } from '../../../../util/links'
export const JoinButton = ({ className = '' }: { className?: string }) => {
return (
diff --git a/apps/portal/src/components/legacy/archetypes/LanguageSelector/index.tsx b/apps/portal/src/components/legacy/archetypes/LanguageSelector/index.tsx
index 0a395e689..474f24b9e 100644
--- a/apps/portal/src/components/legacy/archetypes/LanguageSelector/index.tsx
+++ b/apps/portal/src/components/legacy/archetypes/LanguageSelector/index.tsx
@@ -1,4 +1,4 @@
-import { Field } from '@components/legacy'
+import { Field } from '../..'
import styled from '@emotion/styled'
import { useTranslation } from 'react-i18next'
diff --git a/apps/portal/src/components/legacy/archetypes/Parachain/Asset.tsx b/apps/portal/src/components/legacy/archetypes/Parachain/Asset.tsx
index 1ec2824eb..e72f795b3 100644
--- a/apps/portal/src/components/legacy/archetypes/Parachain/Asset.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Parachain/Asset.tsx
@@ -1,6 +1,6 @@
import styled from '@emotion/styled'
-import { useParachainAssets } from '@libs/talisman'
-import useImageWithFallback from '@util/useImageWithFallback'
+import { useParachainAssets } from '../../../../libs/talisman'
+import useImageWithFallback from '../../../../util/useImageWithFallback'
type ImageProps = {
id: string
diff --git a/apps/portal/src/components/legacy/archetypes/Parachain/Links.tsx b/apps/portal/src/components/legacy/archetypes/Parachain/Links.tsx
index c90030dbc..e538a6909 100644
--- a/apps/portal/src/components/legacy/archetypes/Parachain/Links.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Parachain/Links.tsx
@@ -1,6 +1,6 @@
-import { Pill } from '@components/legacy'
+import { Pill } from '../..'
import styled from '@emotion/styled'
-import { useParachainDetailsById } from '@libs/talisman'
+import { useParachainDetailsById } from '../../../../libs/talisman'
export type LinksProps = {
id: number | string
diff --git a/apps/portal/src/components/legacy/archetypes/Portfolio/Assets.tsx b/apps/portal/src/components/legacy/archetypes/Portfolio/Assets.tsx
index f535dd2f6..5cf607dbb 100644
--- a/apps/portal/src/components/legacy/archetypes/Portfolio/Assets.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Portfolio/Assets.tsx
@@ -1,4 +1,4 @@
-import { balancesState, selectedBalancesState, selectedCurrencyState } from '@domains/balances'
+import { balancesState, selectedBalancesState, selectedCurrencyState } from '../../../../domains/balances'
import { BalanceFormatter } from '@talismn/balances'
import { useChains, useEvmNetworks, useTokenRates, useTokens } from '@talismn/balances-react'
import { formatDecimals } from '@talismn/util'
diff --git a/apps/portal/src/components/legacy/archetypes/Wallet/Crowdloans.tsx b/apps/portal/src/components/legacy/archetypes/Wallet/Crowdloans.tsx
index 0f18c7270..d65c6973c 100644
--- a/apps/portal/src/components/legacy/archetypes/Wallet/Crowdloans.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Wallet/Crowdloans.tsx
@@ -1,24 +1,24 @@
-import { Parachain } from '@components/legacy/archetypes'
-import { Countdown, PanelSection, Pendor } from '@components/legacy'
-import AccountIcon from '@components/molecules/AccountIcon'
-import SectionHeader from '@components/molecules/SectionHeader'
-import AnimatedFiatNumber from '@components/widgets/AnimatedFiatNumber'
-import RedactableBalance from '@components/widgets/RedactableBalance'
-import { WithdrawCrowdloanWidget } from '@components/widgets/WithdrawCrowdloanWidget'
-import { selectedSubstrateAccountsState, substrateAccountsState } from '@domains/accounts/recoils'
-import { chainsState, tokenPriceState } from '@domains/chains/recoils'
-import { useTotalCrowdloanTotalFiatAmount } from '@domains/crowdloans/hooks'
+import { Parachain } from '..'
+import { Countdown, PanelSection, Pendor } from '../..'
+import AccountIcon from '../../../molecules/AccountIcon'
+import SectionHeader from '../../../molecules/SectionHeader'
+import AnimatedFiatNumber from '../../../widgets/AnimatedFiatNumber'
+import RedactableBalance from '../../../widgets/RedactableBalance'
+import { WithdrawCrowdloanWidget } from '../../../widgets/WithdrawCrowdloanWidget'
+import { selectedSubstrateAccountsState, substrateAccountsState } from '../../../../domains/accounts/recoils'
+import { chainsState, tokenPriceState } from '../../../../domains/chains/recoils'
+import { useTotalCrowdloanTotalFiatAmount } from '../../../../domains/crowdloans/hooks'
import { css } from '@emotion/react'
import styled from '@emotion/styled'
-import crowdloanDataState from '@libs/@talisman-crowdloans/provider'
-import { useCrowdloanContributions, type GqlContribution } from '@libs/crowdloans'
-import { calculateGqlCrowdloanPortfolioAmounts, useTaggedAmountsInPortfolio } from '@libs/portfolio'
-import { useParachainDetailsById } from '@libs/talisman'
-import { supportedRelayChainsState } from '@libs/talisman/util/_config'
+import crowdloanDataState from '../../../../libs/@talisman-crowdloans/provider'
+import { useCrowdloanContributions, type GqlContribution } from '../../../../libs/crowdloans'
+import { calculateGqlCrowdloanPortfolioAmounts, useTaggedAmountsInPortfolio } from '../../../../libs/portfolio'
+import { useParachainDetailsById } from '../../../../libs/talisman'
+import { supportedRelayChainsState } from '../../../../libs/talisman/util/_config'
import { Chip, ListItem, Skeleton, Text, TonalChip, useSurfaceColor, type SkeletonProps } from '@talismn/ui'
import { encodeAnyAddress, planckToTokens } from '@talismn/util'
import { Clock, Eye, Lock } from '@talismn/web-icons'
-import { formatCommas, truncateAddress } from '@util/helpers'
+import { formatCommas, truncateAddress } from '../../../../util/helpers'
import BigNumber from 'bignumber.js'
import { Suspense, useCallback, useMemo } from 'react'
import { useTranslation } from 'react-i18next'
diff --git a/apps/portal/src/components/legacy/archetypes/Wallet/Staking.tsx b/apps/portal/src/components/legacy/archetypes/Wallet/Staking.tsx
index 1aca122f9..572f84624 100644
--- a/apps/portal/src/components/legacy/archetypes/Wallet/Staking.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Wallet/Staking.tsx
@@ -1,4 +1,4 @@
-import { Panel, PanelSection } from '@components/legacy'
+import { Panel, PanelSection } from '../..'
import { useTranslation } from 'react-i18next'
const Staking = ({ className }: { className?: string }) => {
diff --git a/apps/portal/src/components/legacy/archetypes/Wallet/Total.tsx b/apps/portal/src/components/legacy/archetypes/Wallet/Total.tsx
index 67d71f529..79a15a85a 100644
--- a/apps/portal/src/components/legacy/archetypes/Wallet/Total.tsx
+++ b/apps/portal/src/components/legacy/archetypes/Wallet/Total.tsx
@@ -1,5 +1,5 @@
-import AnimatedFiatNumber from '@components/widgets/AnimatedFiatNumber'
-import { selectedBalancesFiatSumState } from '@domains/balances'
+import AnimatedFiatNumber from '../../../widgets/AnimatedFiatNumber'
+import { selectedBalancesFiatSumState } from '../../../../domains/balances'
import { CircularProgressIndicator } from '@talismn/ui'
import { Suspense } from 'react'
import { useRecoilValue } from 'recoil'
diff --git a/apps/portal/src/components/molecules/AccountIcon/AccountIcon.tsx b/apps/portal/src/components/molecules/AccountIcon/AccountIcon.tsx
index ab83b68bd..454ecd632 100644
--- a/apps/portal/src/components/molecules/AccountIcon/AccountIcon.tsx
+++ b/apps/portal/src/components/molecules/AccountIcon/AccountIcon.tsx
@@ -1,4 +1,4 @@
-import type { Account } from '@domains/accounts'
+import type { Account } from '../../../domains/accounts'
import { useTheme } from '@emotion/react'
import { Eye } from '@talismn/web-icons'
import { Badge, BadgedBox, Identicon, useSurfaceColorAtElevation, type IdenticonProps, Tooltip } from '@talismn/ui'
diff --git a/apps/portal/src/components/recipes/AccountValueInfo/AccountValueInfo.tsx b/apps/portal/src/components/recipes/AccountValueInfo/AccountValueInfo.tsx
index c83174b04..f542d2e1b 100644
--- a/apps/portal/src/components/recipes/AccountValueInfo/AccountValueInfo.tsx
+++ b/apps/portal/src/components/recipes/AccountValueInfo/AccountValueInfo.tsx
@@ -1,9 +1,9 @@
-import AccountIcon from '@components/molecules/AccountIcon'
-import type { Account } from '@domains/accounts'
+import AccountIcon from '../../molecules/AccountIcon'
+import type { Account } from '../../../domains/accounts'
import { useTheme } from '@emotion/react'
import { ChevronDown, Users } from '@talismn/web-icons'
import { IconButton, Surface, Text, useSurfaceColor } from '@talismn/ui'
-import { shortenAddress } from '@util/format'
+import { shortenAddress } from '../../../util/format'
import { type ReactNode } from 'react'
export type AccountValueInfoProps = {
diff --git a/apps/portal/src/components/recipes/AddReadOnlyAccountDialog/AddReadOnlyAccountDialog.stories.tsx b/apps/portal/src/components/recipes/AddReadOnlyAccountDialog/AddReadOnlyAccountDialog.stories.tsx
index f49021e4f..4b98385e8 100644
--- a/apps/portal/src/components/recipes/AddReadOnlyAccountDialog/AddReadOnlyAccountDialog.stories.tsx
+++ b/apps/portal/src/components/recipes/AddReadOnlyAccountDialog/AddReadOnlyAccountDialog.stories.tsx
@@ -1,7 +1,7 @@
import { type ComponentMeta, type Story } from '@storybook/react'
import AddReadOnlyAccountDialog, { type AddReadOnlyAccountDialogProps } from './AddReadOnlyAccountDialog'
-import { popularAccounts } from '@domains/accounts/consts'
+import { popularAccounts } from '../../../domains/accounts/consts'
export default {
title: 'Recipes/AddReadOnlyAccountDialog',
diff --git a/apps/portal/src/components/recipes/AddReadOnlyAccountDialog/AddReadOnlyAccountDialog.tsx b/apps/portal/src/components/recipes/AddReadOnlyAccountDialog/AddReadOnlyAccountDialog.tsx
index 48e1ec0bb..bb96c979f 100644
--- a/apps/portal/src/components/recipes/AddReadOnlyAccountDialog/AddReadOnlyAccountDialog.tsx
+++ b/apps/portal/src/components/recipes/AddReadOnlyAccountDialog/AddReadOnlyAccountDialog.tsx
@@ -1,9 +1,9 @@
-import Loader from '@icons/loader.svg?react'
import { useTheme } from '@emotion/react'
import { AlertDialog, Button, Clickable, Hr, Identicon, ListItem, TextInput, useSurfaceColor } from '@talismn/ui'
-import { shortenAddress } from '@util/format'
-import { isNilOrWhitespace } from '@util/nil'
import type { ReactNode } from 'react'
+import Loader from '../../../assets/icons/loader.svg?react'
+import { shortenAddress } from '../../../util/format'
+import { isNilOrWhitespace } from '../../../util/nil'
export type AddReadOnlyAccountDialogProps = {
open?: boolean
diff --git a/apps/portal/src/components/recipes/Asset/Asset.tsx b/apps/portal/src/components/recipes/Asset/Asset.tsx
index 47da583a6..eee2556e2 100644
--- a/apps/portal/src/components/recipes/Asset/Asset.tsx
+++ b/apps/portal/src/components/recipes/Asset/Asset.tsx
@@ -1,6 +1,6 @@
-import type { PortfolioToken } from '@components/legacy/archetypes/Portfolio/Assets'
-import AnimatedFiatNumber from '@components/widgets/AnimatedFiatNumber'
-import RedactableBalance from '@components/widgets/RedactableBalance'
+import type { PortfolioToken } from '../../legacy/archetypes/Portfolio/Assets'
+import AnimatedFiatNumber from '../../widgets/AnimatedFiatNumber'
+import RedactableBalance from '../../widgets/RedactableBalance'
import { keyframes, useTheme } from '@emotion/react'
import styled from '@emotion/styled'
import { type Balances } from '@talismn/balances'
diff --git a/apps/portal/src/components/recipes/AssetBreakdown/AssetBreakdownList.tsx b/apps/portal/src/components/recipes/AssetBreakdown/AssetBreakdownList.tsx
index bfb0386eb..900ce9ffe 100644
--- a/apps/portal/src/components/recipes/AssetBreakdown/AssetBreakdownList.tsx
+++ b/apps/portal/src/components/recipes/AssetBreakdown/AssetBreakdownList.tsx
@@ -1,11 +1,11 @@
-import { selectedAccountsState } from '@domains/accounts/recoils'
+import { selectedAccountsState } from '../../../domains/accounts/recoils'
import styled from '@emotion/styled'
import { BalanceFormatter, type Balances } from '@talismn/balances'
import { formatDecimals } from '@talismn/util'
import { useRecoilValue, waitForAll } from 'recoil'
-import type { PortfolioToken } from '@components/legacy/archetypes/Portfolio/Assets'
-import { selectedCurrencyState } from '@domains/balances'
+import type { PortfolioToken } from '../../legacy/archetypes/Portfolio/Assets'
+import { selectedCurrencyState } from '../../../domains/balances'
import { AssetBreakdownRow, AssetBreakdownRowHeader } from './AssetBreakdownRow'
const Table = styled.table`
diff --git a/apps/portal/src/components/recipes/AssetBreakdown/AssetBreakdownRow.tsx b/apps/portal/src/components/recipes/AssetBreakdown/AssetBreakdownRow.tsx
index 7e51ce240..3d6a11450 100644
--- a/apps/portal/src/components/recipes/AssetBreakdown/AssetBreakdownRow.tsx
+++ b/apps/portal/src/components/recipes/AssetBreakdown/AssetBreakdownRow.tsx
@@ -1,12 +1,12 @@
-import { type Account } from '@domains/accounts/recoils'
+import { type Account } from '../../../domains/accounts/recoils'
import { keyframes } from '@emotion/react'
import styled from '@emotion/styled'
import { Text, Tooltip } from '@talismn/ui'
import { startCase } from 'lodash'
-import AccountIcon from '@components/molecules/AccountIcon/AccountIcon'
+import AccountIcon from '../../molecules/AccountIcon/AccountIcon'
import { AssetBalance } from '../Asset'
-import type { PortfolioToken } from '@components/legacy/archetypes/Portfolio/Assets'
+import type { PortfolioToken } from '../../legacy/archetypes/Portfolio/Assets'
const slideDown = keyframes`
from {
diff --git a/apps/portal/src/components/recipes/DappStakingForm/DappStakingForm.tsx b/apps/portal/src/components/recipes/DappStakingForm/DappStakingForm.tsx
index 9b1eab025..7264793fd 100644
--- a/apps/portal/src/components/recipes/DappStakingForm/DappStakingForm.tsx
+++ b/apps/portal/src/components/recipes/DappStakingForm/DappStakingForm.tsx
@@ -15,7 +15,7 @@ import {
type ButtonProps,
type SideSheetProps,
} from '@talismn/ui'
-import { Maybe } from '@util/monads'
+import { Maybe } from '../../../util/monads'
import { Suspense, type ReactNode } from 'react'
type AmountInputProps =
diff --git a/apps/portal/src/components/recipes/DexForm/TransportForm/TransportForm.tsx b/apps/portal/src/components/recipes/DexForm/TransportForm/TransportForm.tsx
index dc37d834e..669118f7b 100644
--- a/apps/portal/src/components/recipes/DexForm/TransportForm/TransportForm.tsx
+++ b/apps/portal/src/components/recipes/DexForm/TransportForm/TransportForm.tsx
@@ -1,4 +1,4 @@
-import Cryptoticon from '@components/recipes/Cryptoticon'
+import Cryptoticon from '../../Cryptoticon'
import { useTheme } from '@emotion/react'
import { ArrowDown, Repeat } from '@talismn/web-icons'
import {
diff --git a/apps/portal/src/components/recipes/ExportTxHistoryDialog/ExportTxHistoryDialog.tsx b/apps/portal/src/components/recipes/ExportTxHistoryDialog/ExportTxHistoryDialog.tsx
index 365b22d21..bf9dc1593 100644
--- a/apps/portal/src/components/recipes/ExportTxHistoryDialog/ExportTxHistoryDialog.tsx
+++ b/apps/portal/src/components/recipes/ExportTxHistoryDialog/ExportTxHistoryDialog.tsx
@@ -1,7 +1,7 @@
-import AccountIcon from '@components/molecules/AccountIcon'
+import AccountIcon from '../../molecules/AccountIcon'
import { useTheme } from '@emotion/react'
import { AlertDialog, Button, DateInput, Select, Text, type AlertDialogProps } from '@talismn/ui'
-import { Maybe } from '@util/monads'
+import { Maybe } from '../../../util/monads'
import { endOfDay, startOfDay } from 'date-fns'
import { useMemo } from 'react'
diff --git a/apps/portal/src/components/recipes/ExtrinsicDetailsSideSheet/ExtrinsicDetailsSideSheet.tsx b/apps/portal/src/components/recipes/ExtrinsicDetailsSideSheet/ExtrinsicDetailsSideSheet.tsx
index ef7d3827b..a89740f3e 100644
--- a/apps/portal/src/components/recipes/ExtrinsicDetailsSideSheet/ExtrinsicDetailsSideSheet.tsx
+++ b/apps/portal/src/components/recipes/ExtrinsicDetailsSideSheet/ExtrinsicDetailsSideSheet.tsx
@@ -1,6 +1,6 @@
-import AccountIcon from '@components/molecules/AccountIcon/AccountIcon'
-import type { Account } from '@domains/accounts'
-import { copyAddressToClipboard, copyExtrinsicHashToClipboard } from '@domains/common'
+import AccountIcon from '../../molecules/AccountIcon/AccountIcon'
+import type { Account } from '../../../domains/accounts'
+import { copyAddressToClipboard, copyExtrinsicHashToClipboard } from '../../../domains/common'
import { useTheme } from '@emotion/react'
import { CheckCircle, Copy, ExternalLink, XCircle } from '@talismn/web-icons'
import {
@@ -12,7 +12,7 @@ import {
Text,
useSurfaceColorAtElevation,
} from '@talismn/ui'
-import { shortenAddress } from '@util/format'
+import { shortenAddress } from '../../../util/format'
import { formatDistanceToNow } from 'date-fns'
import { useMemo, type PropsWithChildren, type ReactNode } from 'react'
// @ts-expect-error
diff --git a/apps/portal/src/components/recipes/PoolClaimPermissionForm/PoolClaimPermissionForm.tsx b/apps/portal/src/components/recipes/PoolClaimPermissionForm/PoolClaimPermissionForm.tsx
index 652fe7d54..81514463a 100644
--- a/apps/portal/src/components/recipes/PoolClaimPermissionForm/PoolClaimPermissionForm.tsx
+++ b/apps/portal/src/components/recipes/PoolClaimPermissionForm/PoolClaimPermissionForm.tsx
@@ -1,4 +1,4 @@
-import { TalismanHandLoader } from '@components/legacy/TalismanHandLoader'
+import { TalismanHandLoader } from '../../legacy/TalismanHandLoader'
import { useTheme } from '@emotion/react'
import { Calculate, Info } from '@talismn/web-icons'
import { AlertDialog, Button, HiddenDetails, RadioButton, Surface, Switch, Text, Tooltip } from '@talismn/ui'
diff --git a/apps/portal/src/components/recipes/StakeDialog/StakeDialog.stories.tsx b/apps/portal/src/components/recipes/StakeDialog/StakeDialog.stories.tsx
index 8406e0236..4f7792ab9 100644
--- a/apps/portal/src/components/recipes/StakeDialog/StakeDialog.stories.tsx
+++ b/apps/portal/src/components/recipes/StakeDialog/StakeDialog.stories.tsx
@@ -1,5 +1,5 @@
import { type ComponentMeta, type Story } from '@storybook/react'
-import { Default as StakeFormStory } from '@components/recipes/StakeForm/StakeForm.stories'
+import { Default as StakeFormStory } from '../StakeForm/StakeForm.stories'
import StakeDialog, { type StakeDialogProps } from './StakeDialog'
export default {
diff --git a/apps/portal/src/components/recipes/StakeForm/StakeForm.tsx b/apps/portal/src/components/recipes/StakeForm/StakeForm.tsx
index 8f17b31ff..d4eab2409 100644
--- a/apps/portal/src/components/recipes/StakeForm/StakeForm.tsx
+++ b/apps/portal/src/components/recipes/StakeForm/StakeForm.tsx
@@ -13,7 +13,7 @@ import {
type ChipProps,
} from '@talismn/ui'
import { ChevronRight, Clock, Info, Settings } from '@talismn/web-icons'
-import { isNilOrWhitespace } from '@util/nil'
+import { isNilOrWhitespace } from '../../../util/nil'
import { LayoutGroup, motion } from 'framer-motion'
import { createContext, useContext, useId, useState, type ReactNode } from 'react'
import type { PoolClaimPermission } from '../PoolClaimPermissionForm'
diff --git a/apps/portal/src/components/recipes/StakePosition/StakePosition.tsx b/apps/portal/src/components/recipes/StakePosition/StakePosition.tsx
index adcb3c300..fa1bcf025 100644
--- a/apps/portal/src/components/recipes/StakePosition/StakePosition.tsx
+++ b/apps/portal/src/components/recipes/StakePosition/StakePosition.tsx
@@ -1,5 +1,5 @@
-import AccountIcon from '@components/molecules/AccountIcon'
-import type { Account } from '@domains/accounts'
+import AccountIcon from '../../molecules/AccountIcon'
+import type { Account } from '../../../domains/accounts'
import { Clock, MoreHorizontal, ZapOff, ZapPlus } from '@talismn/web-icons'
import {
Chip,
@@ -15,7 +15,7 @@ import {
type ButtonProps,
type ChipProps,
} from '@talismn/ui'
-import { shortenAddress } from '@util/format'
+import { shortenAddress } from '../../../util/format'
import { createContext, type PropsWithChildren, type ReactNode } from 'react'
import { StakeStatusIndicator, type StakeStatus } from '../StakeStatusIndicator'
import StakePositionSkeleton from './StakePosition.skeleton'
diff --git a/apps/portal/src/components/recipes/TransactionLineItem/TransactionLineItem.tsx b/apps/portal/src/components/recipes/TransactionLineItem/TransactionLineItem.tsx
index 80849161f..ca1165cb1 100644
--- a/apps/portal/src/components/recipes/TransactionLineItem/TransactionLineItem.tsx
+++ b/apps/portal/src/components/recipes/TransactionLineItem/TransactionLineItem.tsx
@@ -1,9 +1,9 @@
-import AccountIcon from '@components/molecules/AccountIcon/AccountIcon'
-import type { Account } from '@domains/accounts'
+import AccountIcon from '../../molecules/AccountIcon/AccountIcon'
+import type { Account } from '../../../domains/accounts'
import { keyframes, useTheme } from '@emotion/react'
import { ArrowDown, ArrowUp, ChevronRight } from '@talismn/web-icons'
import { Identicon, Surface, Text, TonalIcon, Tooltip, useSurfaceColorAtElevation } from '@talismn/ui'
-import { shortenAddress } from '@util/format'
+import { shortenAddress } from '../../../util/format'
import type React from 'react'
import { Fragment, useMemo, type PropsWithChildren, type ReactElement } from 'react'
import { getSubstrateModuleColor } from '../extrinsicColor'
diff --git a/apps/portal/src/components/recipes/Welcome/Welcome.tsx b/apps/portal/src/components/recipes/Welcome/Welcome.tsx
index 3b1a35616..c08ebae6c 100644
--- a/apps/portal/src/components/recipes/Welcome/Welcome.tsx
+++ b/apps/portal/src/components/recipes/Welcome/Welcome.tsx
@@ -10,7 +10,7 @@ import {
type ButtonProps,
type TextInputProps,
} from '@talismn/ui'
-import { shortenAddress } from '@util/format'
+import { shortenAddress } from '../../../util/format'
import { type ReactNode } from 'react'
export type WelcomeProps = {
diff --git a/apps/portal/src/components/recipes/WithdrawCrowdloanDialog/WithdrawCrowdloanDialog.tsx b/apps/portal/src/components/recipes/WithdrawCrowdloanDialog/WithdrawCrowdloanDialog.tsx
index 250cc55d8..38121af96 100644
--- a/apps/portal/src/components/recipes/WithdrawCrowdloanDialog/WithdrawCrowdloanDialog.tsx
+++ b/apps/portal/src/components/recipes/WithdrawCrowdloanDialog/WithdrawCrowdloanDialog.tsx
@@ -1,4 +1,4 @@
-import { TalismanHandLoader } from '@components/legacy/TalismanHandLoader'
+import { TalismanHandLoader } from '../../legacy/TalismanHandLoader'
import { useTheme } from '@emotion/react'
import { AlertDialog, Button, Text, type AlertDialogProps } from '@talismn/ui'
import { useTranslation } from 'react-i18next'
diff --git a/apps/portal/src/components/widgets/AccountConnectionGuard.tsx b/apps/portal/src/components/widgets/AccountConnectionGuard.tsx
index a7f497616..87d1c05e7 100644
--- a/apps/portal/src/components/widgets/AccountConnectionGuard.tsx
+++ b/apps/portal/src/components/widgets/AccountConnectionGuard.tsx
@@ -1,8 +1,8 @@
-import Welcome from '@components/recipes/Welcome'
-import { lookupAccountAddressState, popularAccounts } from '@domains/accounts'
-import { readOnlyAccountsState } from '@domains/accounts/recoils'
-import { useHasActiveWalletConnection } from '@domains/extension'
-import { shortenAddress } from '@util/format'
+import Welcome from '../recipes/Welcome'
+import { lookupAccountAddressState, popularAccounts } from '../../domains/accounts'
+import { readOnlyAccountsState } from '../../domains/accounts/recoils'
+import { useHasActiveWalletConnection } from '../../domains/extension'
+import { shortenAddress } from '../../util/format'
import { useState, type PropsWithChildren } from 'react'
import { useRecoilValue, useSetRecoilState } from 'recoil'
import { walletConnectionSideSheetOpenState } from './WalletConnectionSideSheet'
diff --git a/apps/portal/src/components/widgets/AccountSelector.tsx b/apps/portal/src/components/widgets/AccountSelector.tsx
index b5609a8a5..eb62642fb 100644
--- a/apps/portal/src/components/widgets/AccountSelector.tsx
+++ b/apps/portal/src/components/widgets/AccountSelector.tsx
@@ -1,8 +1,8 @@
-import AccountIcon from '@components/molecules/AccountIcon/AccountIcon'
-import { type Account } from '@domains/accounts/recoils'
-import { useHasActiveWalletConnection } from '@domains/extension'
+import AccountIcon from '../molecules/AccountIcon/AccountIcon'
+import { type Account } from '../../domains/accounts/recoils'
+import { useHasActiveWalletConnection } from '../../domains/extension'
import { Button, CircularProgressIndicator, Identicon, Select } from '@talismn/ui'
-import { shortenAddress } from '@util/format'
+import { shortenAddress } from '../../util/format'
import { useCallback, useEffect, useMemo, useState, useTransition } from 'react'
import { usePrevious } from 'react-use'
import { useSetRecoilState } from 'recoil'
diff --git a/apps/portal/src/components/widgets/AccountsManagementMenu.tsx b/apps/portal/src/components/widgets/AccountsManagementMenu.tsx
index 0cd99ee7f..45ed2f778 100644
--- a/apps/portal/src/components/widgets/AccountsManagementMenu.tsx
+++ b/apps/portal/src/components/widgets/AccountsManagementMenu.tsx
@@ -1,19 +1,19 @@
-import AccountIcon from '@components/molecules/AccountIcon/AccountIcon'
+import AccountIcon from '../molecules/AccountIcon/AccountIcon'
import {
lookupAccountAddressState,
portfolioAccountsState,
readOnlyAccountsState,
selectedAccountAddressesState,
selectedAccountsState,
-} from '@domains/accounts/recoils'
-import { fiatBalanceGetterState, portfolioBalancesFiatSumState } from '@domains/balances'
-import { copyAddressToClipboard } from '@domains/common/utils'
+} from '../../domains/accounts/recoils'
+import { fiatBalanceGetterState, portfolioBalancesFiatSumState } from '../../domains/balances'
+import { copyAddressToClipboard } from '../../domains/common/utils'
import { useTheme } from '@emotion/react'
-import { useOnChainId } from '@libs/onChainId/hooks/useOnChainId'
+import { useOnChainId } from '../../libs/onChainId/hooks/useOnChainId'
import { Chip, CircularProgressIndicator, Hr, IconButton, Menu, SurfaceIcon, Text, Tooltip } from '@talismn/ui'
import { Copy, Ethereum, Eye, EyePlus, TalismanHand, Trash2, Users, Wallet, X } from '@talismn/web-icons'
-import { shortenAddress } from '@util/format'
-import { Maybe } from '@util/monads'
+import { shortenAddress } from '../../util/format'
+import { Maybe } from '../../util/monads'
import { useMemo, type ReactNode } from 'react'
import { useRecoilValue, useRecoilValueLoadable, useResetRecoilState, useSetRecoilState } from 'recoil'
import AddReadOnlyAccountDialog from './AddReadOnlyAccountDialog'
diff --git a/apps/portal/src/components/widgets/AddReadOnlyAccountDialog.tsx b/apps/portal/src/components/widgets/AddReadOnlyAccountDialog.tsx
index 86b9a7fab..a991a53e1 100644
--- a/apps/portal/src/components/widgets/AddReadOnlyAccountDialog.tsx
+++ b/apps/portal/src/components/widgets/AddReadOnlyAccountDialog.tsx
@@ -1,6 +1,6 @@
-import AddReadOnlyAccountDialogComponent from '@components/recipes/AddReadOnlyAccountDialog'
-import { popularAccounts, useAddReadonlyAccountForm, useSetReadonlyAccounts } from '@domains/accounts'
-import { isNilOrWhitespace } from '@util/nil'
+import AddReadOnlyAccountDialogComponent from '../recipes/AddReadOnlyAccountDialog'
+import { popularAccounts, useAddReadonlyAccountForm, useSetReadonlyAccounts } from '../../domains/accounts'
+import { isNilOrWhitespace } from '../../util/nil'
import { useCallback, useState, type ReactNode } from 'react'
type AddReadOnlyAccountDialogProps = {
diff --git a/apps/portal/src/components/widgets/AnimatedFiatNumber.tsx b/apps/portal/src/components/widgets/AnimatedFiatNumber.tsx
index 333e36e0a..d695b57e3 100644
--- a/apps/portal/src/components/widgets/AnimatedFiatNumber.tsx
+++ b/apps/portal/src/components/widgets/AnimatedFiatNumber.tsx
@@ -2,7 +2,7 @@ import { AnimatedNumber } from '@talismn/ui'
import { useMemo } from 'react'
import RedactableBalance from './RedactableBalance'
import { useRecoilValue } from 'recoil'
-import { selectedCurrencyState } from '@domains/balances'
+import { selectedCurrencyState } from '../../domains/balances'
export type AnimatedFiatNumberProps = {
animate?: boolean
diff --git a/apps/portal/src/components/widgets/ErrorBoundary.tsx b/apps/portal/src/components/widgets/ErrorBoundary.tsx
index 0958626fe..6174169c0 100644
--- a/apps/portal/src/components/widgets/ErrorBoundary.tsx
+++ b/apps/portal/src/components/widgets/ErrorBoundary.tsx
@@ -1,4 +1,4 @@
-import ErrorMessage, { type ErrorMessageProps } from '@components/recipes/ErrorMessage'
+import ErrorMessage, { type ErrorMessageProps } from '../recipes/ErrorMessage'
import * as Sentry from '@sentry/react'
import { Button, OutlinedButton } from '@talismn/ui'
import { type PropsWithChildren, type ReactElement, type ReactNode, createContext, useContext, useState } from 'react'
diff --git a/apps/portal/src/components/widgets/PortfolioAllocationGraph.tsx b/apps/portal/src/components/widgets/PortfolioAllocationGraph.tsx
index 4892cfed1..fb8d3d5bb 100644
--- a/apps/portal/src/components/widgets/PortfolioAllocationGraph.tsx
+++ b/apps/portal/src/components/widgets/PortfolioAllocationGraph.tsx
@@ -1,5 +1,5 @@
-import PortfolioAllocationGraphComponent from '@components/recipes/PortfolioAllocationGraph'
-import { selectedBalancesFiatSumState, selectedBalancesState, selectedCurrencyState } from '@domains/balances'
+import PortfolioAllocationGraphComponent from '../recipes/PortfolioAllocationGraph'
+import { selectedBalancesFiatSumState, selectedBalancesState, selectedCurrencyState } from '../../domains/balances'
import { HiddenDetails, Text } from '@talismn/ui'
import { groupBy } from 'lodash'
import { Suspense, useCallback, useMemo, useState } from 'react'
diff --git a/apps/portal/src/components/widgets/RemoveWatchedAccountConfirmationDialog.tsx b/apps/portal/src/components/widgets/RemoveWatchedAccountConfirmationDialog.tsx
index 02c5bfe2c..3f82cde2a 100644
--- a/apps/portal/src/components/widgets/RemoveWatchedAccountConfirmationDialog.tsx
+++ b/apps/portal/src/components/widgets/RemoveWatchedAccountConfirmationDialog.tsx
@@ -1,8 +1,8 @@
-import RemoveWatchedAccountConfirmationDialogComponent from '@components/recipes/RemoveWatchedAccountConfirmationDialog'
-import { useSetReadonlyAccounts } from '@domains/accounts/hooks'
-import { type ReadonlyAccount } from '@domains/accounts/recoils'
-import { shortenAddress } from '@util/format'
-import { isNilOrWhitespace } from '@util/nil'
+import RemoveWatchedAccountConfirmationDialogComponent from '../recipes/RemoveWatchedAccountConfirmationDialog'
+import { useSetReadonlyAccounts } from '../../domains/accounts/hooks'
+import { type ReadonlyAccount } from '../../domains/accounts/recoils'
+import { shortenAddress } from '../../util/format'
+import { isNilOrWhitespace } from '../../util/nil'
import { type ReactNode, useCallback, useState } from 'react'
export type RemoveWatchedAccountConfirmationDialogProps = {
diff --git a/apps/portal/src/components/widgets/TokenSelectorButton.tsx b/apps/portal/src/components/widgets/TokenSelectorButton.tsx
index 54dff8304..a1da024c6 100644
--- a/apps/portal/src/components/widgets/TokenSelectorButton.tsx
+++ b/apps/portal/src/components/widgets/TokenSelectorButton.tsx
@@ -1,7 +1,7 @@
-import Cryptoticon from '@components/recipes/Cryptoticon/Cryptoticon'
-import TokenSelectorDialog from '@components/recipes/TokenSelectorDialog'
-import type { Account } from '@domains/accounts'
-import { selectedBalancesState, selectedCurrencyState } from '@domains/balances'
+import Cryptoticon from '../recipes/Cryptoticon/Cryptoticon'
+import TokenSelectorDialog from '../recipes/TokenSelectorDialog'
+import type { Account } from '../../domains/accounts'
+import { selectedBalancesState, selectedCurrencyState } from '../../domains/balances'
import { useTokens } from '@talismn/balances-react'
import type { IToken } from '@talismn/chaindata-provider'
import { Decimal } from '@talismn/math'
diff --git a/apps/portal/src/components/widgets/WalletConnectionSideSheet.tsx b/apps/portal/src/components/widgets/WalletConnectionSideSheet.tsx
index d621366ae..b7a395e3c 100644
--- a/apps/portal/src/components/widgets/WalletConnectionSideSheet.tsx
+++ b/apps/portal/src/components/widgets/WalletConnectionSideSheet.tsx
@@ -1,11 +1,11 @@
-import talismanWalletLogo from '@assets/talisman-wallet.svg'
+import talismanWalletLogo from '../../assets/talisman-wallet.svg'
import {
useConnectEvm,
useConnectedSubstrateWallet,
useEvmConnectors,
useInstalledSubstrateWallets,
useSubstrateWalletConnect,
-} from '@domains/extension'
+} from '../../domains/extension'
import { ClassNames, useTheme } from '@emotion/react'
import { useSignetSdk } from '@talismn/signet-apps-sdk'
import { Chip, Hr, ListItem, SIDE_SHEET_WIDE_BREAK_POINT_SELECTOR, SideSheet, Surface, Text } from '@talismn/ui'
diff --git a/apps/portal/src/components/widgets/WithdrawCrowdloanWidget.tsx b/apps/portal/src/components/widgets/WithdrawCrowdloanWidget.tsx
index f14ffac85..1506f6349 100644
--- a/apps/portal/src/components/widgets/WithdrawCrowdloanWidget.tsx
+++ b/apps/portal/src/components/widgets/WithdrawCrowdloanWidget.tsx
@@ -1,7 +1,7 @@
-import { WithdrawCrowdloanDialog } from '@components/recipes/WithdrawCrowdloanDialog'
-import { type Account } from '@domains/accounts/recoils'
-import { substrateApiState, useExtrinsic } from '@domains/common'
-import type { Relaychain } from '@libs/talisman/util/_config'
+import { WithdrawCrowdloanDialog } from '../recipes/WithdrawCrowdloanDialog'
+import { type Account } from '../../domains/accounts/recoils'
+import { substrateApiState, useExtrinsic } from '../../domains/common'
+import type { Relaychain } from '../../libs/talisman/util/_config'
import { useCallback, useEffect, useMemo, useState, type ReactNode } from 'react'
import { useRecoilValueLoadable } from 'recoil'
diff --git a/apps/portal/src/components/widgets/development/DevMenu.tsx b/apps/portal/src/components/widgets/development/DevMenu.tsx
index e98688911..33723aa68 100644
--- a/apps/portal/src/components/widgets/development/DevMenu.tsx
+++ b/apps/portal/src/components/widgets/development/DevMenu.tsx
@@ -1,8 +1,8 @@
import 'winbox/dist/css/themes/modern.min.css'
import 'winbox/dist/css/winbox.min.css'
-import { enableTestnetsState } from '@domains/chains'
-import { toastExtrinsic, useWagmiWriteContract } from '@domains/common'
+import { enableTestnetsState } from '../../../domains/chains'
+import { toastExtrinsic, useWagmiWriteContract } from '../../../domains/common'
import RpcError from '@polkadot/rpc-provider/coder/error'
import { useSurfaceColor } from '@talismn/ui'
import { usePostHog } from 'posthog-js/react'
diff --git a/apps/portal/src/components/widgets/development/Development.tsx b/apps/portal/src/components/widgets/development/Development.tsx
index fa4b738ef..fdd41da8f 100644
--- a/apps/portal/src/components/widgets/development/Development.tsx
+++ b/apps/portal/src/components/widgets/development/Development.tsx
@@ -1,4 +1,4 @@
-import { developmentState } from '@domains/common'
+import { developmentState } from '../../../domains/common'
import React, { Suspense, useEffect } from 'react'
import { useRecoilState } from 'recoil'
diff --git a/apps/portal/src/components/widgets/dex/SwapForm.tsx b/apps/portal/src/components/widgets/dex/SwapForm.tsx
index c627efee2..50ec4fb59 100644
--- a/apps/portal/src/components/widgets/dex/SwapForm.tsx
+++ b/apps/portal/src/components/widgets/dex/SwapForm.tsx
@@ -1,5 +1,5 @@
-import DexForm from '@components/recipes/DexForm/DexForm'
-import { writeableAccountsState } from '@domains/accounts'
+import DexForm from '../../recipes/DexForm/DexForm'
+import { writeableAccountsState } from '../../../domains/accounts'
import { useState } from 'react'
import { Link } from 'react-router-dom'
import { useRecoilValue } from 'recoil'
diff --git a/apps/portal/src/components/widgets/dex/TransportForm.tsx b/apps/portal/src/components/widgets/dex/TransportForm.tsx
index 2c81d039c..ba59969a2 100644
--- a/apps/portal/src/components/widgets/dex/TransportForm.tsx
+++ b/apps/portal/src/components/widgets/dex/TransportForm.tsx
@@ -1,14 +1,14 @@
import { FixedPointNumber } from '@acala-network/sdk-core'
-import DexForm from '@components/recipes/DexForm/DexForm'
+import DexForm from '../../recipes/DexForm/DexForm'
import {
writeableAccountsState,
writeableEvmAccountsState,
writeableSubstrateAccountsState,
type Account,
-} from '@domains/accounts'
-import { bridgeAdapterState, bridgeState } from '@domains/bridge'
-import { tokenPriceState } from '@domains/chains'
-import { useExtrinsic } from '@domains/common'
+} from '../../../domains/accounts'
+import { bridgeAdapterState, bridgeState } from '../../../domains/bridge'
+import { tokenPriceState } from '../../../domains/chains'
+import { useExtrinsic } from '../../../domains/common'
import { type SubmittableExtrinsic } from '@polkadot/api/types'
import { type ISubmittableResult } from '@polkadot/types/types'
import { type Chain, type InputConfig } from '@polkawallet/bridge'
@@ -16,7 +16,7 @@ import * as Sentry from '@sentry/react'
import { useTokens as useBalancesLibTokens } from '@talismn/balances-react'
import { Decimal } from '@talismn/math'
import { CircularProgressIndicator, toast } from '@talismn/ui'
-import { Maybe } from '@util/monads'
+import { Maybe } from '../../../util/monads'
import { uniqBy } from 'lodash'
import { useCallback, useEffect, useMemo, useState } from 'react'
import { RecoilLoadable, constSelector, useRecoilValue, useRecoilValueLoadable, type Loadable } from 'recoil'
diff --git a/apps/portal/src/components/widgets/history/ExportTxHistoryWidget.tsx b/apps/portal/src/components/widgets/history/ExportTxHistoryWidget.tsx
index adb4ab76c..1a2bc8dfa 100644
--- a/apps/portal/src/components/widgets/history/ExportTxHistoryWidget.tsx
+++ b/apps/portal/src/components/widgets/history/ExportTxHistoryWidget.tsx
@@ -1,5 +1,5 @@
-import DialogComponent from '@components/recipes/ExportTxHistoryDialog'
-import { accountsState } from '@domains/accounts/recoils'
+import DialogComponent from '../../recipes/ExportTxHistoryDialog'
+import { accountsState } from '../../../domains/accounts/recoils'
import * as Sentry from '@sentry/react'
import { toast } from '@talismn/ui'
import { stringify } from 'csv-stringify/browser/esm'
diff --git a/apps/portal/src/components/widgets/history/History.tsx b/apps/portal/src/components/widgets/history/History.tsx
index 145a4a2d5..df22369d3 100644
--- a/apps/portal/src/components/widgets/history/History.tsx
+++ b/apps/portal/src/components/widgets/history/History.tsx
@@ -1,12 +1,9 @@
-import {
- ExtrinsicDetailsSideSheet,
- type ExtrinsicDetailsSideSheetProps,
-} from '@components/recipes/ExtrinsicDetailsSideSheet'
-import TransactionLineItem, { TransactionList } from '@components/recipes/TransactionLineItem'
-import { accountsState, selectedAccountsState, type Account } from '@domains/accounts'
+import { ExtrinsicDetailsSideSheet, type ExtrinsicDetailsSideSheetProps } from '../../recipes/ExtrinsicDetailsSideSheet'
+import TransactionLineItem, { TransactionList } from '../../recipes/TransactionLineItem'
+import { accountsState, selectedAccountsState, type Account } from '../../../domains/accounts'
import { CircularProgressIndicator, Text } from '@talismn/ui'
import { encodeAnyAddress } from '@talismn/util'
-import { Maybe } from '@util/monads'
+import { Maybe } from '../../../util/monads'
import request from 'graphql-request'
import { isNil } from 'lodash'
import { useCallback, useMemo, useState } from 'react'
diff --git a/apps/portal/src/components/widgets/history/HistoryExportFloatingActionButton.tsx b/apps/portal/src/components/widgets/history/HistoryExportFloatingActionButton.tsx
index b306f1e7c..2ee5a2bd4 100644
--- a/apps/portal/src/components/widgets/history/HistoryExportFloatingActionButton.tsx
+++ b/apps/portal/src/components/widgets/history/HistoryExportFloatingActionButton.tsx
@@ -1,5 +1,5 @@
-import ExportHistoryAlertDialog from '@components/recipes/ExportHistoryAlertDialog'
-import type { Account } from '@domains/accounts'
+import ExportHistoryAlertDialog from '../../recipes/ExportHistoryAlertDialog'
+import type { Account } from '../../../domains/accounts'
import * as Sentry from '@sentry/react'
import { Button, FloatingActionButtonPortal, toast } from '@talismn/ui'
import { encodeAnyAddress } from '@talismn/util'
diff --git a/apps/portal/src/components/widgets/history/utils.ts b/apps/portal/src/components/widgets/history/utils.ts
index e22b1ec7b..ca4591465 100644
--- a/apps/portal/src/components/widgets/history/utils.ts
+++ b/apps/portal/src/components/widgets/history/utils.ts
@@ -1,4 +1,4 @@
-import { type Account } from '@domains/accounts'
+import { type Account } from '../../../domains/accounts'
import { encodeAnyAddress } from '@talismn/util'
import BigNumber from 'bignumber.js'
import type { ExtrinsicsQuery } from '../../../../generated/gql/extrinsicHistory/gql/graphql'
diff --git a/apps/portal/src/components/widgets/staking/StakeProviders.tsx b/apps/portal/src/components/widgets/staking/StakeProviders.tsx
index d66fe7012..49beaa8ec 100644
--- a/apps/portal/src/components/widgets/staking/StakeProviders.tsx
+++ b/apps/portal/src/components/widgets/staking/StakeProviders.tsx
@@ -1,7 +1,7 @@
import NominationPoolsStakeProviders from './substrate/StakeProviders'
import LidoStakeProviders from './lido/StakeProviders'
import SlpxStakeProviders from './slpx/StakeProviders'
-import { StakeProviderList } from '@components/recipes/StakeProvider'
+import { StakeProviderList } from '../../recipes/StakeProvider'
import DappStakingProviders from './dappStaking/StakeProviders'
import ErrorBoundary from '../ErrorBoundary'
diff --git a/apps/portal/src/components/widgets/staking/Stakes.tsx b/apps/portal/src/components/widgets/staking/Stakes.tsx
index ca0fe0f0d..1cf0d9288 100644
--- a/apps/portal/src/components/widgets/staking/Stakes.tsx
+++ b/apps/portal/src/components/widgets/staking/Stakes.tsx
@@ -1,7 +1,7 @@
-import SectionHeader from '@components/molecules/SectionHeader'
-import StakePosition, { StakePositionList } from '@components/recipes/StakePosition'
-import { ChainProvider, nominationPoolsEnabledChainsState } from '@domains/chains'
-import { useTotalStaked } from '@domains/staking'
+import SectionHeader from '../../molecules/SectionHeader'
+import StakePosition, { StakePositionList } from '../../recipes/StakePosition'
+import { ChainProvider, nominationPoolsEnabledChainsState } from '../../../domains/chains'
+import { useTotalStaked } from '../../../domains/staking'
import { Button, HiddenDetails, Text } from '@talismn/ui'
import { Fragment, Suspense, type PropsWithChildren } from 'react'
import { Link } from 'react-router-dom'
diff --git a/apps/portal/src/components/widgets/staking/dappStaking/AddStakeDialog.tsx b/apps/portal/src/components/widgets/staking/dappStaking/AddStakeDialog.tsx
index e4c8c5d70..c3bc17448 100644
--- a/apps/portal/src/components/widgets/staking/dappStaking/AddStakeDialog.tsx
+++ b/apps/portal/src/components/widgets/staking/dappStaking/AddStakeDialog.tsx
@@ -1,7 +1,7 @@
-import { DappStakingAddStakeDialog } from '@components/recipes/AddStakeDialog'
-import type { Account } from '@domains/accounts'
-import { useExtrinsicInBlockOrErrorEffect } from '@domains/common'
-import { useAddStakeForm, type Stake } from '@domains/staking/dappStaking'
+import { DappStakingAddStakeDialog } from '../../../recipes/AddStakeDialog'
+import type { Account } from '../../../../domains/accounts'
+import { useExtrinsicInBlockOrErrorEffect } from '../../../../domains/common'
+import { useAddStakeForm, type Stake } from '../../../../domains/staking/dappStaking'
import type { AstarPrimitivesDappStakingSmartContract } from '@polkadot/types/lookup'
import { CircularProgressIndicator } from '@talismn/ui'
import { useState } from 'react'
diff --git a/apps/portal/src/components/widgets/staking/dappStaking/DappPickerDialog.tsx b/apps/portal/src/components/widgets/staking/dappStaking/DappPickerDialog.tsx
index df855dbee..c2a87dfce 100644
--- a/apps/portal/src/components/widgets/staking/dappStaking/DappPickerDialog.tsx
+++ b/apps/portal/src/components/widgets/staking/dappStaking/DappPickerDialog.tsx
@@ -1,9 +1,9 @@
-import { useNativeTokenAmountState } from '@domains/chains'
-import type { Stake } from '@domains/staking/dappStaking'
-import { useRegisteredDappsState } from '@domains/staking/dappStaking/recoils'
+import { useNativeTokenAmountState } from '../../../../domains/chains'
+import type { Stake } from '../../../../domains/staking/dappStaking'
+import { useRegisteredDappsState } from '../../../../domains/staking/dappStaking/recoils'
import type { AstarPrimitivesDappStakingSmartContract } from '@polkadot/types/lookup'
import { AlertDialog, CircularProgressIndicator, Clickable, Surface, Text } from '@talismn/ui'
-import { shortenAddress } from '@util/format'
+import { shortenAddress } from '../../../../util/format'
import { useState, useTransition, type ReactNode } from 'react'
import { useRecoilValue, waitForAll } from 'recoil'
diff --git a/apps/portal/src/components/widgets/staking/dappStaking/StakeProviders.tsx b/apps/portal/src/components/widgets/staking/dappStaking/StakeProviders.tsx
index c90555a6e..344655361 100644
--- a/apps/portal/src/components/widgets/staking/dappStaking/StakeProviders.tsx
+++ b/apps/portal/src/components/widgets/staking/dappStaking/StakeProviders.tsx
@@ -1,13 +1,13 @@
-import StakeProvider from '@components/recipes/StakeProvider'
-import AnimatedFiatNumber from '@components/widgets/AnimatedFiatNumber'
-import RedactableBalance from '@components/widgets/RedactableBalance'
-import { selectedSubstrateAccountsState } from '@domains/accounts'
-import { ChainProvider, dappStakingEnabledChainsState, useChainState } from '@domains/chains'
-import { chainDeriveState, substrateApiState, useTokenAmountFromPlanck } from '@domains/common'
-import { useApr } from '@domains/staking/dappStaking'
+import StakeProvider from '../../../recipes/StakeProvider'
+import AnimatedFiatNumber from '../../AnimatedFiatNumber'
+import RedactableBalance from '../../RedactableBalance'
+import { selectedSubstrateAccountsState } from '../../../../domains/accounts'
+import { ChainProvider, dappStakingEnabledChainsState, useChainState } from '../../../../domains/chains'
+import { chainDeriveState, substrateApiState, useTokenAmountFromPlanck } from '../../../../domains/common'
+import { useApr } from '../../../../domains/staking/dappStaking'
import { Decimal } from '@talismn/math'
import { usePolkadotApiId, useQueryState } from '@talismn/react-polkadot-api'
-import { Maybe } from '@util/monads'
+import { Maybe } from '../../../../util/monads'
import BigNumber from 'bignumber.js'
import { useMemo } from 'react'
import { Link } from 'react-router-dom'
diff --git a/apps/portal/src/components/widgets/staking/dappStaking/StakeSideSheet.tsx b/apps/portal/src/components/widgets/staking/dappStaking/StakeSideSheet.tsx
index 50197819d..2d6990460 100644
--- a/apps/portal/src/components/widgets/staking/dappStaking/StakeSideSheet.tsx
+++ b/apps/portal/src/components/widgets/staking/dappStaking/StakeSideSheet.tsx
@@ -1,9 +1,9 @@
-import { TalismanHandLoader } from '@components/legacy/TalismanHandLoader'
-import DappStakingForm, { DappStakingSideSheet } from '@components/recipes/DappStakingForm'
-import { DappSelectorDialog as DappSelectorDialogComponent } from '@components/recipes/StakeTargetSelectorDialog'
-import { useAccountSelector } from '@components/widgets/AccountSelector'
-import ErrorBoundary from '@components/widgets/ErrorBoundary'
-import { writeableSubstrateAccountsState, type Account } from '@domains/accounts'
+import { TalismanHandLoader } from '../../../legacy/TalismanHandLoader'
+import DappStakingForm, { DappStakingSideSheet } from '../../../recipes/DappStakingForm'
+import { DappSelectorDialog as DappSelectorDialogComponent } from '../../../recipes/StakeTargetSelectorDialog'
+import { useAccountSelector } from '../../AccountSelector'
+import ErrorBoundary from '../../ErrorBoundary'
+import { writeableSubstrateAccountsState, type Account } from '../../../../domains/accounts'
import {
ChainProvider,
dappStakingEnabledChainsState,
@@ -11,13 +11,19 @@ import {
useNativeTokenAmountState,
useNativeTokenDecimalState,
type ChainInfo,
-} from '@domains/chains'
-import { useEraEta, useSubstrateApiState, useTokenAmountFromPlanck } from '@domains/common'
-import { useAddStakeForm, useApr, useRegisteredDappsState, useStake, type DappInfo } from '@domains/staking/dappStaking'
+} from '../../../../domains/chains'
+import { useEraEta, useSubstrateApiState, useTokenAmountFromPlanck } from '../../../../domains/common'
+import {
+ useAddStakeForm,
+ useApr,
+ useRegisteredDappsState,
+ useStake,
+ type DappInfo,
+} from '../../../../domains/staking/dappStaking'
import type { AstarPrimitivesDappStakingSmartContract } from '@polkadot/types/lookup'
import { useQueryState } from '@talismn/react-polkadot-api'
import { CircularProgressIndicator, Select } from '@talismn/ui'
-import { Maybe } from '@util/monads'
+import { Maybe } from '../../../../util/monads'
import BN from 'bn.js'
import { Suspense, useMemo, useState, useTransition, type ReactNode } from 'react'
import { useSearchParams } from 'react-router-dom'
diff --git a/apps/portal/src/components/widgets/staking/dappStaking/Stakes.tsx b/apps/portal/src/components/widgets/staking/dappStaking/Stakes.tsx
index f42f0990b..3671ea9e7 100644
--- a/apps/portal/src/components/widgets/staking/dappStaking/Stakes.tsx
+++ b/apps/portal/src/components/widgets/staking/dappStaking/Stakes.tsx
@@ -1,10 +1,10 @@
-import DappStakingLockedAmountDialog from '@components/recipes/DappStakingLockedAmountDialog'
-import StakePosition from '@components/recipes/StakePosition'
-import ErrorBoundary from '@components/widgets/ErrorBoundary'
-import { selectedSubstrateAccountsState, type Account } from '@domains/accounts'
-import { ChainProvider, dappStakingEnabledChainsState, useChainState } from '@domains/chains'
-import { useExtrinsic } from '@domains/common'
-import { useClaimAllRewardsExtrinsic, useRegisteredDappsState, useStake } from '@domains/staking/dappStaking'
+import DappStakingLockedAmountDialog from '../../../recipes/DappStakingLockedAmountDialog'
+import StakePosition from '../../../recipes/StakePosition'
+import ErrorBoundary from '../../ErrorBoundary'
+import { selectedSubstrateAccountsState, type Account } from '../../../../domains/accounts'
+import { ChainProvider, dappStakingEnabledChainsState, useChainState } from '../../../../domains/chains'
+import { useExtrinsic } from '../../../../domains/common'
+import { useClaimAllRewardsExtrinsic, useRegisteredDappsState, useStake } from '../../../../domains/staking/dappStaking'
import { useState, useTransition } from 'react'
import { useNavigate } from 'react-router-dom'
import { useRecoilValue, useRecoilValueLoadable } from 'recoil'
diff --git a/apps/portal/src/components/widgets/staking/dappStaking/UnlockDuration.tsx b/apps/portal/src/components/widgets/staking/dappStaking/UnlockDuration.tsx
index 63746934a..ec695234e 100644
--- a/apps/portal/src/components/widgets/staking/dappStaking/UnlockDuration.tsx
+++ b/apps/portal/src/components/widgets/staking/dappStaking/UnlockDuration.tsx
@@ -1,4 +1,4 @@
-import { useLocalizedUnlockDuration } from '@domains/staking/dappStaking'
+import { useLocalizedUnlockDuration } from '../../../../domains/staking/dappStaking'
const UnlockDuration = () => <>{useLocalizedUnlockDuration()}>
diff --git a/apps/portal/src/components/widgets/staking/dappStaking/UnstakeDialog.tsx b/apps/portal/src/components/widgets/staking/dappStaking/UnstakeDialog.tsx
index 4ad33e6e8..e11fdb67b 100644
--- a/apps/portal/src/components/widgets/staking/dappStaking/UnstakeDialog.tsx
+++ b/apps/portal/src/components/widgets/staking/dappStaking/UnstakeDialog.tsx
@@ -1,7 +1,7 @@
-import UnstakeDialogComponent from '@components/recipes/UnstakeDialog'
-import type { Account } from '@domains/accounts'
-import { useExtrinsicInBlockOrErrorEffect } from '@domains/common'
-import { useUnstakeForm, type Stake } from '@domains/staking/dappStaking'
+import UnstakeDialogComponent from '../../../recipes/UnstakeDialog'
+import type { Account } from '../../../../domains/accounts'
+import { useExtrinsicInBlockOrErrorEffect } from '../../../../domains/common'
+import { useUnstakeForm, type Stake } from '../../../../domains/staking/dappStaking'
import type { AstarPrimitivesDappStakingSmartContract } from '@polkadot/types/lookup'
import { CircularProgressIndicator } from '@talismn/ui'
import { useState } from 'react'
diff --git a/apps/portal/src/components/widgets/staking/lido/LidoWidgetSideSheet.tsx b/apps/portal/src/components/widgets/staking/lido/LidoWidgetSideSheet.tsx
index 3fc272b55..ff2333d7b 100644
--- a/apps/portal/src/components/widgets/staking/lido/LidoWidgetSideSheet.tsx
+++ b/apps/portal/src/components/widgets/staking/lido/LidoWidgetSideSheet.tsx
@@ -1,4 +1,4 @@
-import type { LidoSuite } from '@domains/staking/lido'
+import type { LidoSuite } from '../../../../domains/staking/lido'
import { ClassNames } from '@emotion/react'
import { Zap } from '@talismn/web-icons'
import { SideSheet, SIDE_SHEET_WIDE_BREAK_POINT_SELECTOR } from '@talismn/ui'
diff --git a/apps/portal/src/components/widgets/staking/lido/StakeProviders.tsx b/apps/portal/src/components/widgets/staking/lido/StakeProviders.tsx
index 3dddb3f6e..d903f299f 100644
--- a/apps/portal/src/components/widgets/staking/lido/StakeProviders.tsx
+++ b/apps/portal/src/components/widgets/staking/lido/StakeProviders.tsx
@@ -1,10 +1,10 @@
-import StakeProvider from '@components/recipes/StakeProvider'
-import AnimatedFiatNumber from '@components/widgets/AnimatedFiatNumber'
-import ErrorBoundary from '@components/widgets/ErrorBoundary'
-import RedactableBalance from '@components/widgets/RedactableBalance'
-import { selectedBalancesState, selectedCurrencyState } from '@domains/balances'
-import { type LidoSuite } from '@domains/staking/lido'
-import { lidoAprState, lidoSuitesState } from '@domains/staking/lido/recoils'
+import StakeProvider from '../../../recipes/StakeProvider'
+import AnimatedFiatNumber from '../../AnimatedFiatNumber'
+import ErrorBoundary from '../../ErrorBoundary'
+import RedactableBalance from '../../RedactableBalance'
+import { selectedBalancesState, selectedCurrencyState } from '../../../../domains/balances'
+import { type LidoSuite } from '../../../../domains/staking/lido'
+import { lidoAprState, lidoSuitesState } from '../../../../domains/staking/lido/recoils'
import { githubChainLogoUrl } from '@talismn/chaindata-provider'
import { Decimal } from '@talismn/math'
import { useSuspenseQuery } from '@tanstack/react-query'
diff --git a/apps/portal/src/components/widgets/staking/lido/StakeSideSheet.tsx b/apps/portal/src/components/widgets/staking/lido/StakeSideSheet.tsx
index 6e72609e4..37bb29d63 100644
--- a/apps/portal/src/components/widgets/staking/lido/StakeSideSheet.tsx
+++ b/apps/portal/src/components/widgets/staking/lido/StakeSideSheet.tsx
@@ -1,4 +1,4 @@
-import { lidoSuitesState } from '@domains/staking/lido/recoils'
+import { lidoSuitesState } from '../../../../domains/staking/lido/recoils'
import { useMemo } from 'react'
import { useSearchParams } from 'react-router-dom'
import { useRecoilValue } from 'recoil'
diff --git a/apps/portal/src/components/widgets/staking/lido/Stakes.tsx b/apps/portal/src/components/widgets/staking/lido/Stakes.tsx
index 807e5164f..0e740f732 100644
--- a/apps/portal/src/components/widgets/staking/lido/Stakes.tsx
+++ b/apps/portal/src/components/widgets/staking/lido/Stakes.tsx
@@ -1,9 +1,9 @@
-import StakePosition from '@components/recipes/StakePosition'
-import AnimatedFiatNumber from '@components/widgets/AnimatedFiatNumber'
-import RedactableBalance from '@components/widgets/RedactableBalance'
-import { selectedEvmAccountsState } from '@domains/accounts'
-import { useStakes, type LidoSuite } from '@domains/staking/lido'
-import { lidoSuitesState } from '@domains/staking/lido/recoils'
+import StakePosition from '../../../recipes/StakePosition'
+import AnimatedFiatNumber from '../../AnimatedFiatNumber'
+import RedactableBalance from '../../RedactableBalance'
+import { selectedEvmAccountsState } from '../../../../domains/accounts'
+import { useStakes, type LidoSuite } from '../../../../domains/staking/lido'
+import { lidoSuitesState } from '../../../../domains/staking/lido/recoils'
import { useState } from 'react'
import { useRecoilValue } from 'recoil'
import LidoWidgetSideSheet from './LidoWidgetSideSheet'
diff --git a/apps/portal/src/components/widgets/staking/slpx/AddStakeDialog.tsx b/apps/portal/src/components/widgets/staking/slpx/AddStakeDialog.tsx
index 06b5800da..b05a28fae 100644
--- a/apps/portal/src/components/widgets/staking/slpx/AddStakeDialog.tsx
+++ b/apps/portal/src/components/widgets/staking/slpx/AddStakeDialog.tsx
@@ -1,8 +1,8 @@
-import { SlpxAddStakeDialog } from '@components/recipes/AddStakeDialog'
-import { type Account } from '@domains/accounts'
-import { useMintForm } from '@domains/staking/slpx/core'
-import type { SlpxPair } from '@domains/staking/slpx/types'
-import { Maybe } from '@util/monads'
+import { SlpxAddStakeDialog } from '../../../recipes/AddStakeDialog'
+import { type Account } from '../../../../domains/accounts'
+import { useMintForm } from '../../../../domains/staking/slpx/core'
+import type { SlpxPair } from '../../../../domains/staking/slpx/types'
+import { Maybe } from '../../../../util/monads'
import { useEffect } from 'react'
type AddStakeDialogProps = {
diff --git a/apps/portal/src/components/widgets/staking/slpx/Apr.tsx b/apps/portal/src/components/widgets/staking/slpx/Apr.tsx
index a688d1712..dcb2ef927 100644
--- a/apps/portal/src/components/widgets/staking/slpx/Apr.tsx
+++ b/apps/portal/src/components/widgets/staking/slpx/Apr.tsx
@@ -1,4 +1,4 @@
-import { type SlpxPair, slpxAprState } from '@domains/staking/slpx'
+import { type SlpxPair, slpxAprState } from '../../../../domains/staking/slpx'
import { useRecoilValue } from 'recoil'
const Apr = (props: { slpxPair: SlpxPair }) => (
diff --git a/apps/portal/src/components/widgets/staking/slpx/StakeProviders.tsx b/apps/portal/src/components/widgets/staking/slpx/StakeProviders.tsx
index 4b1161e77..aaa1266a6 100644
--- a/apps/portal/src/components/widgets/staking/slpx/StakeProviders.tsx
+++ b/apps/portal/src/components/widgets/staking/slpx/StakeProviders.tsx
@@ -1,10 +1,10 @@
-import StakeProvider from '@components/recipes/StakeProvider'
-import AnimatedFiatNumber from '@components/widgets/AnimatedFiatNumber'
-import ErrorBoundary from '@components/widgets/ErrorBoundary'
-import RedactableBalance from '@components/widgets/RedactableBalance'
-import { selectedBalancesState, selectedCurrencyState } from '@domains/balances'
-import { ChainProvider } from '@domains/chains'
-import { slpxPairsState, type SlpxPair } from '@domains/staking/slpx'
+import StakeProvider from '../../../recipes/StakeProvider'
+import AnimatedFiatNumber from '../../AnimatedFiatNumber'
+import ErrorBoundary from '../../ErrorBoundary'
+import RedactableBalance from '../../RedactableBalance'
+import { selectedBalancesState, selectedCurrencyState } from '../../../../domains/balances'
+import { ChainProvider } from '../../../../domains/chains'
+import { slpxPairsState, type SlpxPair } from '../../../../domains/staking/slpx'
import { githubChainLogoUrl } from '@talismn/chaindata-provider'
import { Decimal } from '@talismn/math'
import { useSuspenseQuery } from '@tanstack/react-query'
diff --git a/apps/portal/src/components/widgets/staking/slpx/StakeSideSheet.tsx b/apps/portal/src/components/widgets/staking/slpx/StakeSideSheet.tsx
index 19ae10450..e38bfd885 100644
--- a/apps/portal/src/components/widgets/staking/slpx/StakeSideSheet.tsx
+++ b/apps/portal/src/components/widgets/staking/slpx/StakeSideSheet.tsx
@@ -1,8 +1,8 @@
-import { SlpxAddStakeForm } from '@components/recipes/AddStakeDialog'
-import { useAccountSelector } from '@components/widgets/AccountSelector'
-import { evmSignableAccountsState } from '@domains/accounts'
-import { ChainProvider } from '@domains/chains'
-import { slpxPairsState, useMintForm, type SlpxPair } from '@domains/staking/slpx'
+import { SlpxAddStakeForm } from '../../../recipes/AddStakeDialog'
+import { useAccountSelector } from '../../AccountSelector'
+import { evmSignableAccountsState } from '../../../../domains/accounts'
+import { ChainProvider } from '../../../../domains/chains'
+import { slpxPairsState, useMintForm, type SlpxPair } from '../../../../domains/staking/slpx'
import { Zap } from '@talismn/web-icons'
import {
CircularProgressIndicator,
@@ -12,7 +12,7 @@ import {
Surface,
Text,
} from '@talismn/ui'
-import { Maybe } from '@util/monads'
+import { Maybe } from '../../../../util/monads'
import { Suspense, useMemo } from 'react'
import { useSearchParams } from 'react-router-dom'
import { useRecoilValue } from 'recoil'
diff --git a/apps/portal/src/components/widgets/staking/slpx/Stakes.tsx b/apps/portal/src/components/widgets/staking/slpx/Stakes.tsx
index 95e2aa417..a068cd74f 100644
--- a/apps/portal/src/components/widgets/staking/slpx/Stakes.tsx
+++ b/apps/portal/src/components/widgets/staking/slpx/Stakes.tsx
@@ -1,14 +1,14 @@
-import StakePosition from '@components/recipes/StakePosition'
-import ErrorBoundary from '@components/widgets/ErrorBoundary'
-import { selectedEvmAccountsState } from '@domains/accounts'
-import { useStakes } from '@domains/staking/slpx/core'
+import StakePosition from '../../../recipes/StakePosition'
+import ErrorBoundary from '../../ErrorBoundary'
+import { selectedEvmAccountsState } from '../../../../domains/accounts'
+import { useStakes } from '../../../../domains/staking/slpx/core'
import { useState } from 'react'
-import AnimatedFiatNumber from '@components/widgets/AnimatedFiatNumber'
-import RedactableBalance from '@components/widgets/RedactableBalance'
-import { ChainProvider } from '@domains/chains'
-import { slpxPairsState } from '@domains/staking/slpx'
-import type { SlpxPair } from '@domains/staking/slpx/types'
+import AnimatedFiatNumber from '../../AnimatedFiatNumber'
+import RedactableBalance from '../../RedactableBalance'
+import { ChainProvider } from '../../../../domains/chains'
+import { slpxPairsState } from '../../../../domains/staking/slpx'
+import type { SlpxPair } from '../../../../domains/staking/slpx/types'
import { useRecoilValue } from 'recoil'
import AddStakeDialog from './AddStakeDialog'
import UnstakeDialog from './UnstakeDialog'
diff --git a/apps/portal/src/components/widgets/staking/slpx/UnlockDuration.tsx b/apps/portal/src/components/widgets/staking/slpx/UnlockDuration.tsx
index 2b0a72787..c54163cf1 100644
--- a/apps/portal/src/components/widgets/staking/slpx/UnlockDuration.tsx
+++ b/apps/portal/src/components/widgets/staking/slpx/UnlockDuration.tsx
@@ -1,4 +1,4 @@
-import { useVTokenUnlockDuration, type SlpxPair } from '@domains/staking/slpx'
+import { useVTokenUnlockDuration, type SlpxPair } from '../../../../domains/staking/slpx'
import { formatDistance } from 'date-fns'
import { useMemo } from 'react'
diff --git a/apps/portal/src/components/widgets/staking/slpx/UnstakeDialog.tsx b/apps/portal/src/components/widgets/staking/slpx/UnstakeDialog.tsx
index c2f525d7d..fd01c1ce5 100644
--- a/apps/portal/src/components/widgets/staking/slpx/UnstakeDialog.tsx
+++ b/apps/portal/src/components/widgets/staking/slpx/UnstakeDialog.tsx
@@ -1,7 +1,7 @@
-import { SlpxUnstakeDialog } from '@components/recipes/UnstakeDialog'
-import { type Account } from '@domains/accounts'
-import { useRedeemForm, type SlpxPair } from '@domains/staking/slpx'
-import { Maybe } from '@util/monads'
+import { SlpxUnstakeDialog } from '../../../recipes/UnstakeDialog'
+import { type Account } from '../../../../domains/accounts'
+import { useRedeemForm, type SlpxPair } from '../../../../domains/staking/slpx'
+import { Maybe } from '../../../../util/monads'
import { Suspense, useEffect } from 'react'
import UnlockDuration from './UnlockDuration'
diff --git a/apps/portal/src/components/widgets/staking/substrate/AddStakeDialog.tsx b/apps/portal/src/components/widgets/staking/substrate/AddStakeDialog.tsx
index 72aa815b0..0b3615f80 100644
--- a/apps/portal/src/components/widgets/staking/substrate/AddStakeDialog.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/AddStakeDialog.tsx
@@ -1,6 +1,6 @@
-import { NominationPoolsAddStakeDialog } from '@components/recipes/AddStakeDialog'
-import { useExtrinsic, useExtrinsicInBlockOrErrorEffect } from '@domains/common'
-import { usePoolAddForm } from '@domains/staking/substrate/nominationPools/hooks'
+import { NominationPoolsAddStakeDialog } from '../../../recipes/AddStakeDialog'
+import { useExtrinsic, useExtrinsicInBlockOrErrorEffect } from '../../../../domains/common'
+import { usePoolAddForm } from '../../../../domains/staking/substrate/nominationPools/hooks'
const AddStakeDialog = (props: { account?: string; onDismiss: () => unknown }) => {
const {
diff --git a/apps/portal/src/components/widgets/staking/substrate/ClaimStakeDialog.tsx b/apps/portal/src/components/widgets/staking/substrate/ClaimStakeDialog.tsx
index 184a1c5a8..9597e6c28 100644
--- a/apps/portal/src/components/widgets/staking/substrate/ClaimStakeDialog.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/ClaimStakeDialog.tsx
@@ -1,7 +1,7 @@
-import ClaimStakeDialogComponent from '@components/recipes/ClaimStakeDialog'
-import type { Account } from '@domains/accounts'
-import { useExtrinsic, useTokenAmountFromPlanck, type SubmittableResultLoadable } from '@domains/common'
-import { usePoolStakes } from '@domains/staking/substrate/nominationPools'
+import ClaimStakeDialogComponent from '../../../recipes/ClaimStakeDialog'
+import type { Account } from '../../../../domains/accounts'
+import { useExtrinsic, useTokenAmountFromPlanck, type SubmittableResultLoadable } from '../../../../domains/common'
+import { usePoolStakes } from '../../../../domains/staking/substrate/nominationPools'
import { useEffect } from 'react'
type ClaimStakeDialogProps = {
diff --git a/apps/portal/src/components/widgets/staking/substrate/NominationPoolsStakeSideSheet.tsx b/apps/portal/src/components/widgets/staking/substrate/NominationPoolsStakeSideSheet.tsx
index 427cfbef9..966535006 100644
--- a/apps/portal/src/components/widgets/staking/substrate/NominationPoolsStakeSideSheet.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/NominationPoolsStakeSideSheet.tsx
@@ -1,15 +1,15 @@
-import StakeDialogComponent from '@components/recipes/StakeDialog'
-import { nominationPoolsEnabledChainsState, type ChainInfo } from '@domains/chains/recoils'
-import { useEraEtaFormatter } from '@domains/common/hooks'
+import StakeDialogComponent from '../../../recipes/StakeDialog'
+import { nominationPoolsEnabledChainsState, type ChainInfo } from '../../../../domains/chains/recoils'
+import { useEraEtaFormatter } from '../../../../domains/common/hooks'
import { CircularProgressIndicator } from '@talismn/ui'
import BN from 'bn.js'
import { Suspense, useState, useTransition } from 'react'
import { useSearchParams } from 'react-router-dom'
import { useRecoilValue } from 'recoil'
-import StakeForm from '@components/recipes/StakeForm/StakeForm'
-import { ChainProvider } from '@domains/chains'
-import { useApr } from '@domains/staking/substrate/nominationPools'
+import StakeForm from '../../../recipes/StakeForm/StakeForm'
+import { ChainProvider } from '../../../../domains/chains'
+import { useApr } from '../../../../domains/staking/substrate/nominationPools'
import ErrorBoundary from '../../ErrorBoundary'
import { AssetSelect, ControlledStakeForm } from './StakeForm'
diff --git a/apps/portal/src/components/widgets/staking/substrate/NominationPoolsStatisticsSideSheet.tsx b/apps/portal/src/components/widgets/staking/substrate/NominationPoolsStatisticsSideSheet.tsx
index 8780fba24..f550494ad 100644
--- a/apps/portal/src/components/widgets/staking/substrate/NominationPoolsStatisticsSideSheet.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/NominationPoolsStatisticsSideSheet.tsx
@@ -1,9 +1,9 @@
-import AccountIcon from '@components/molecules/AccountIcon'
-import type { StakeStatus } from '@components/recipes/StakeStatusIndicator'
-import RedactableBalance from '@components/widgets/RedactableBalance'
-import type { Account } from '@domains/accounts'
-import { useChainState, useNativeTokenDecimalState } from '@domains/chains'
-import { useEraEtaFormatter, useSubstrateApiState, useTokenAmountFromPlanck } from '@domains/common'
+import AccountIcon from '../../../molecules/AccountIcon'
+import type { StakeStatus } from '../../../recipes/StakeStatusIndicator'
+import RedactableBalance from '../../RedactableBalance'
+import type { Account } from '../../../../domains/accounts'
+import { useChainState, useNativeTokenDecimalState } from '../../../../domains/chains'
+import { useEraEtaFormatter, useSubstrateApiState, useTokenAmountFromPlanck } from '../../../../domains/common'
import {
mostRecentPoolPayoutsState,
poolPayoutsState,
@@ -11,7 +11,7 @@ import {
useApr,
usePoolStakes,
type DerivedPool,
-} from '@domains/staking/substrate/nominationPools'
+} from '../../../../domains/staking/substrate/nominationPools'
import { useTheme } from '@emotion/react'
import { encodeAddress } from '@polkadot/util-crypto'
import { BarChart, Clock, Earn, ExternalLink, Percent, Zap } from '@talismn/web-icons'
@@ -24,7 +24,7 @@ import {
TonalIcon,
useSurfaceColorAtElevation,
} from '@talismn/ui'
-import { shortenAddress } from '@util/format'
+import { shortenAddress } from '../../../../util/format'
import { eachDayOfInterval, isSameDay, subDays } from 'date-fns'
import { useMemo, type ReactNode } from 'react'
import { useRecoilValue, waitForAll } from 'recoil'
diff --git a/apps/portal/src/components/widgets/staking/substrate/PoolClaimPermissionDialog.tsx b/apps/portal/src/components/widgets/staking/substrate/PoolClaimPermissionDialog.tsx
index 86c7d7a56..59649978a 100644
--- a/apps/portal/src/components/widgets/staking/substrate/PoolClaimPermissionDialog.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/PoolClaimPermissionDialog.tsx
@@ -1,9 +1,9 @@
import PoolClaimPermissionFormComponent, {
PoolClaimPermissionDialog as PoolClaimPermissionDialogComponent,
-} from '@components/recipes/PoolClaimPermissionForm'
-import type { Account } from '@domains/accounts'
-import { assertChain, useChainState } from '@domains/chains'
-import { useExtrinsic, useExtrinsicInBlockOrErrorEffect } from '@domains/common'
+} from '../../../recipes/PoolClaimPermissionForm'
+import type { Account } from '../../../../domains/accounts'
+import { assertChain, useChainState } from '../../../../domains/chains'
+import { useExtrinsic, useExtrinsicInBlockOrErrorEffect } from '../../../../domains/common'
import { useQueryMultiState } from '@talismn/react-polkadot-api'
import { useState } from 'react'
import { useRecoilValue } from 'recoil'
diff --git a/apps/portal/src/components/widgets/staking/substrate/PoolStakeItem.tsx b/apps/portal/src/components/widgets/staking/substrate/PoolStakeItem.tsx
index d424ae479..d056317c5 100644
--- a/apps/portal/src/components/widgets/staking/substrate/PoolStakeItem.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/PoolStakeItem.tsx
@@ -1,8 +1,8 @@
-import StakePosition from '@components/recipes/StakePosition'
-import { type Account } from '@domains/accounts'
-import { useChainState, useNativeTokenDecimalState, useNativeTokenPriceState } from '@domains/chains'
-import { useEraEtaFormatter, useExtrinsic, useSubmittableResultLoadableState } from '@domains/common'
-import { type usePoolStakes } from '@domains/staking/substrate/nominationPools'
+import StakePosition from '../../../recipes/StakePosition'
+import { type Account } from '../../../../domains/accounts'
+import { useChainState, useNativeTokenDecimalState, useNativeTokenPriceState } from '../../../../domains/chains'
+import { useEraEtaFormatter, useExtrinsic, useSubmittableResultLoadableState } from '../../../../domains/common'
+import { type usePoolStakes } from '../../../../domains/staking/substrate/nominationPools'
import { CircularProgressIndicator } from '@talismn/ui'
import { useCallback, useState, useTransition } from 'react'
import { useRecoilValue, waitForAll } from 'recoil'
diff --git a/apps/portal/src/components/widgets/staking/substrate/PoolStakes.tsx b/apps/portal/src/components/widgets/staking/substrate/PoolStakes.tsx
index 7225c9c62..4f7bddade 100644
--- a/apps/portal/src/components/widgets/staking/substrate/PoolStakes.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/PoolStakes.tsx
@@ -1,5 +1,5 @@
-import { selectedSubstrateAccountsState } from '@domains/accounts'
-import { usePoolStakes } from '@domains/staking/substrate/nominationPools/hooks'
+import { selectedSubstrateAccountsState } from '../../../../domains/accounts'
+import { usePoolStakes } from '../../../../domains/staking/substrate/nominationPools/hooks'
import { useRecoilValue } from 'recoil'
import PoolStakeItem from './PoolStakeItem'
import ErrorBoundary from '../../ErrorBoundary'
diff --git a/apps/portal/src/components/widgets/staking/substrate/StakeCalculatorDialog.tsx b/apps/portal/src/components/widgets/staking/substrate/StakeCalculatorDialog.tsx
index 1d9d1f5d5..79373b572 100644
--- a/apps/portal/src/components/widgets/staking/substrate/StakeCalculatorDialog.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/StakeCalculatorDialog.tsx
@@ -1,7 +1,7 @@
-import StakeCalculatorDialogComponent from '@components/recipes/StakeCalculatorDialog'
-import { ChainProvider, nominationPoolsEnabledChainsState, useChainState } from '@domains/chains'
-import { useTokenAmount, useTokenAmountFromPlanck } from '@domains/common'
-import { useApr } from '@domains/staking/substrate/nominationPools'
+import StakeCalculatorDialogComponent from '../../../recipes/StakeCalculatorDialog'
+import { ChainProvider, nominationPoolsEnabledChainsState, useChainState } from '../../../../domains/chains'
+import { useTokenAmount, useTokenAmountFromPlanck } from '../../../../domains/common'
+import { useApr } from '../../../../domains/staking/substrate/nominationPools'
import BN from 'bn.js'
import { Suspense, useDeferredValue, useMemo, useState, useTransition } from 'react'
import { useRecoilValue } from 'recoil'
diff --git a/apps/portal/src/components/widgets/staking/substrate/StakeForm.tsx b/apps/portal/src/components/widgets/staking/substrate/StakeForm.tsx
index 255584d90..13a418781 100644
--- a/apps/portal/src/components/widgets/staking/substrate/StakeForm.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/StakeForm.tsx
@@ -1,7 +1,7 @@
-import StakeFormComponent from '@components/recipes/StakeForm'
-import { type StakeStatus } from '@components/recipes/StakeStatusIndicator'
-import { PoolSelectorDialog } from '@components/recipes/StakeTargetSelectorDialog'
-import { writeableSubstrateAccountsState, type Account } from '@domains/accounts/recoils'
+import StakeFormComponent from '../../../recipes/StakeForm'
+import { type StakeStatus } from '../../../recipes/StakeStatusIndicator'
+import { PoolSelectorDialog } from '../../../recipes/StakeTargetSelectorDialog'
+import { writeableSubstrateAccountsState, type Account } from '../../../../domains/accounts/recoils'
import {
ChainProvider,
assertChain,
@@ -9,7 +9,7 @@ import {
useChainState as useChainRecoilState,
useNativeTokenDecimalState,
type ChainInfo,
-} from '@domains/chains'
+} from '../../../../domains/chains'
import {
useChainState,
useEraEtaFormatter,
@@ -18,14 +18,17 @@ import {
useSubstrateApiEndpoint,
useSubstrateApiState,
useTokenAmountFromPlanck,
-} from '@domains/common'
-import { useApr, usePoolAddForm, usePoolStakes } from '@domains/staking/substrate/nominationPools/hooks'
-import { eraStakersState, useRecommendedPoolsState } from '@domains/staking/substrate/nominationPools/recoils'
-import { createAccounts } from '@domains/staking/substrate/nominationPools/utils'
+} from '../../../../domains/common'
+import { useApr, usePoolAddForm, usePoolStakes } from '../../../../domains/staking/substrate/nominationPools/hooks'
+import {
+ eraStakersState,
+ useRecommendedPoolsState,
+} from '../../../../domains/staking/substrate/nominationPools/recoils'
+import { createAccounts } from '../../../../domains/staking/substrate/nominationPools/utils'
import type { ApiPromise } from '@polkadot/api'
import { type Decimal } from '@talismn/math'
import { CircularProgressIndicator, Select } from '@talismn/ui'
-import { Maybe } from '@util/monads'
+import { Maybe } from '../../../../util/monads'
import BN from 'bn.js'
import {
Suspense,
diff --git a/apps/portal/src/components/widgets/staking/substrate/StakeProviders.tsx b/apps/portal/src/components/widgets/staking/substrate/StakeProviders.tsx
index 298065213..5e0114c23 100644
--- a/apps/portal/src/components/widgets/staking/substrate/StakeProviders.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/StakeProviders.tsx
@@ -1,11 +1,11 @@
-import StakeProvider from '@components/recipes/StakeProvider'
-import AnimatedFiatNumber from '@components/widgets/AnimatedFiatNumber'
-import ErrorBoundary from '@components/widgets/ErrorBoundary'
-import RedactableBalance from '@components/widgets/RedactableBalance'
-import { selectedSubstrateAccountsState } from '@domains/accounts'
-import { ChainProvider, nominationPoolsEnabledChainsState, useChainState } from '@domains/chains'
-import { chainDeriveState, substrateApiState, useTokenAmountFromPlanck } from '@domains/common'
-import { useApr, useLocalizedUnlockDuration } from '@domains/staking/substrate/nominationPools'
+import StakeProvider from '../../../recipes/StakeProvider'
+import AnimatedFiatNumber from '../../AnimatedFiatNumber'
+import ErrorBoundary from '../../ErrorBoundary'
+import RedactableBalance from '../../RedactableBalance'
+import { selectedSubstrateAccountsState } from '../../../../domains/accounts'
+import { ChainProvider, nominationPoolsEnabledChainsState, useChainState } from '../../../../domains/chains'
+import { chainDeriveState, substrateApiState, useTokenAmountFromPlanck } from '../../../../domains/common'
+import { useApr, useLocalizedUnlockDuration } from '../../../../domains/staking/substrate/nominationPools'
import { Decimal } from '@talismn/math'
import { usePolkadotApiId, useQueryState } from '@talismn/react-polkadot-api'
import BigNumber from 'bignumber.js'
diff --git a/apps/portal/src/components/widgets/staking/substrate/UnstakeDialog.tsx b/apps/portal/src/components/widgets/staking/substrate/UnstakeDialog.tsx
index a0a374812..a600793d2 100644
--- a/apps/portal/src/components/widgets/staking/substrate/UnstakeDialog.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/UnstakeDialog.tsx
@@ -1,7 +1,7 @@
-import { NominationPoolsUnstakeDialog } from '@components/recipes/UnstakeDialog'
-import { useExtrinsicInBlockOrErrorEffect } from '@domains/common'
-import { usePoolUnstakeForm } from '@domains/staking/substrate/nominationPools/hooks'
-import { useLocalizedUnlockDuration } from '@domains/staking/substrate/nominationPools/hooks/useUnlockDuration'
+import { NominationPoolsUnstakeDialog } from '../../../recipes/UnstakeDialog'
+import { useExtrinsicInBlockOrErrorEffect } from '../../../../domains/common'
+import { usePoolUnstakeForm } from '../../../../domains/staking/substrate/nominationPools/hooks'
+import { useLocalizedUnlockDuration } from '../../../../domains/staking/substrate/nominationPools/hooks/useUnlockDuration'
import { useCallback } from 'react'
const UnstakeDialog = (props: { account?: string; onDismiss: () => unknown }) => {
diff --git a/apps/portal/src/components/widgets/staking/substrate/ValidatorStakeItem.tsx b/apps/portal/src/components/widgets/staking/substrate/ValidatorStakeItem.tsx
index 28f06f293..770c242aa 100644
--- a/apps/portal/src/components/widgets/staking/substrate/ValidatorStakeItem.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/ValidatorStakeItem.tsx
@@ -1,11 +1,11 @@
-import FastUnstakeDialog from '@components/recipes/FastUnstakeDialog'
-import StakePosition from '@components/recipes/StakePosition'
-import { type Account } from '@domains/accounts/recoils'
-import { useChainState, useNativeTokenDecimalState, useNativeTokenPriceState } from '@domains/chains'
-import { useSubstrateApiState } from '@domains/common'
-import { useExtrinsic, useTokenAmountFromPlanck } from '@domains/common/hooks'
-import { useEraEtaFormatter } from '@domains/common/hooks/useEraEta'
-import { useLocalizedUnlockDuration } from '@domains/staking/substrate/nominationPools'
+import FastUnstakeDialog from '../../../recipes/FastUnstakeDialog'
+import StakePosition from '../../../recipes/StakePosition'
+import { type Account } from '../../../../domains/accounts/recoils'
+import { useChainState, useNativeTokenDecimalState, useNativeTokenPriceState } from '../../../../domains/chains'
+import { useSubstrateApiState } from '../../../../domains/common'
+import { useExtrinsic, useTokenAmountFromPlanck } from '../../../../domains/common/hooks'
+import { useEraEtaFormatter } from '../../../../domains/common/hooks/useEraEta'
+import { useLocalizedUnlockDuration } from '../../../../domains/staking/substrate/nominationPools'
import { type DeriveStakingAccount } from '@polkadot/api-derive/types'
import { useDeriveState } from '@talismn/react-polkadot-api'
import { CircularProgressIndicator } from '@talismn/ui'
diff --git a/apps/portal/src/components/widgets/staking/substrate/ValidatorStakes.tsx b/apps/portal/src/components/widgets/staking/substrate/ValidatorStakes.tsx
index 708003e91..c4aca12cd 100644
--- a/apps/portal/src/components/widgets/staking/substrate/ValidatorStakes.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/ValidatorStakes.tsx
@@ -1,7 +1,7 @@
-import { selectedSubstrateAccountsState } from '@domains/accounts/recoils'
-import { useSubstrateApiState } from '@domains/common'
-import { useInjectedAccountFastUnstakeEligibility } from '@domains/fastUnstake'
-import { useStakersRewardState } from '@domains/staking/substrate/validator/recoils'
+import { selectedSubstrateAccountsState } from '../../../../domains/accounts/recoils'
+import { useSubstrateApiState } from '../../../../domains/common'
+import { useInjectedAccountFastUnstakeEligibility } from '../../../../domains/fastUnstake'
+import { useStakersRewardState } from '../../../../domains/staking/substrate/validator/recoils'
import { useDeriveState, useQueryMultiState, useQueryState } from '@talismn/react-polkadot-api'
import { useMemo } from 'react'
import { useRecoilValue, useRecoilValueLoadable, waitForAll } from 'recoil'
diff --git a/apps/portal/src/components/widgets/staking/substrate/ValidatorUnstakeDialog.tsx b/apps/portal/src/components/widgets/staking/substrate/ValidatorUnstakeDialog.tsx
index b862e516d..bf8aa93ee 100644
--- a/apps/portal/src/components/widgets/staking/substrate/ValidatorUnstakeDialog.tsx
+++ b/apps/portal/src/components/widgets/staking/substrate/ValidatorUnstakeDialog.tsx
@@ -1,7 +1,7 @@
-import BaseUnstakeDialog from '@components/recipes/UnstakeDialog'
-import { useExtrinsicInBlockOrErrorEffect } from '@domains/common'
-import { useLocalizedUnlockDuration } from '@domains/staking/substrate/nominationPools/hooks/useUnlockDuration'
-import { useValidatorUnstakeForm } from '@domains/staking/substrate/validator/hooks'
+import BaseUnstakeDialog from '../../../recipes/UnstakeDialog'
+import { useExtrinsicInBlockOrErrorEffect } from '../../../../domains/common'
+import { useLocalizedUnlockDuration } from '../../../../domains/staking/substrate/nominationPools/hooks/useUnlockDuration'
+import { useValidatorUnstakeForm } from '../../../../domains/staking/substrate/validator/hooks'
import { useCallback } from 'react'
const ValidatorUnstakeDialog = (props: { accountAddress: string; open: boolean; onRequestDismiss: () => unknown }) => {
diff --git a/apps/portal/src/domains/accounts/hooks.ts b/apps/portal/src/domains/accounts/hooks.ts
index 07d5bebbc..e6308aa2b 100644
--- a/apps/portal/src/domains/accounts/hooks.ts
+++ b/apps/portal/src/domains/accounts/hooks.ts
@@ -1,10 +1,10 @@
import { toast } from '@talismn/ui'
-import { tryParseSubstrateOrEthereumAddress } from '@util/addressValidation'
-import { isNilOrWhitespace } from '@util/nil'
+import { tryParseSubstrateOrEthereumAddress } from '../../util/addressValidation'
+import { isNilOrWhitespace } from '../../util/nil'
import { useCallback, useMemo, useState } from 'react'
import { useRecoilValue, useSetRecoilState } from 'recoil'
import { readOnlyAccountsState, type ReadonlyAccount } from './recoils'
-import { useResolveNsName } from '@libs/onChainId'
+import { useResolveNsName } from '../../libs/onChainId'
export const useSetReadonlyAccounts = () => {
const setReadonlyAccounts = useSetRecoilState(readOnlyAccountsState)
diff --git a/apps/portal/src/domains/accounts/recoils.ts b/apps/portal/src/domains/accounts/recoils.ts
index e06270fc4..8c38a9f0c 100644
--- a/apps/portal/src/domains/accounts/recoils.ts
+++ b/apps/portal/src/domains/accounts/recoils.ts
@@ -1,10 +1,10 @@
-import { storageEffect } from '@domains/common/effects'
+import { storageEffect } from '../common/effects'
import type { InjectedAccount } from '@polkadot/extension-inject/types'
import { useSignetSdk } from '@talismn/signet-apps-sdk'
import { array, jsonParser, object, optional, string } from '@recoiljs/refine'
-import { tryParseSubstrateOrEthereumAddress } from '@util/addressValidation'
-import { Maybe } from '@util/monads'
-import { isNilOrWhitespace } from '@util/nil'
+import { tryParseSubstrateOrEthereumAddress } from '../../util/addressValidation'
+import { Maybe } from '../../util/monads'
+import { isNilOrWhitespace } from '../../util/nil'
import { uniqBy } from 'lodash'
import { useUpdateEffect } from 'react-use'
import { atom, selector, useRecoilValue, useSetRecoilState, waitForAll } from 'recoil'
diff --git a/apps/portal/src/domains/balances/core.ts b/apps/portal/src/domains/balances/core.ts
index 960680fa4..3f3412c5a 100644
--- a/apps/portal/src/domains/balances/core.ts
+++ b/apps/portal/src/domains/balances/core.ts
@@ -5,7 +5,7 @@ import {
portfolioAccountsState,
selectedAccountsState,
writeableAccountsState,
-} from '@domains/accounts/recoils'
+} from '../accounts/recoils'
import { Balances } from '@talismn/balances'
import { useBalances as _useBalances, useSetBalancesAddresses } from '@talismn/balances-react'
import { useEffect, useMemo } from 'react'
diff --git a/apps/portal/src/domains/balances/currency.ts b/apps/portal/src/domains/balances/currency.ts
index 3975461cb..d099ea433 100644
--- a/apps/portal/src/domains/balances/currency.ts
+++ b/apps/portal/src/domains/balances/currency.ts
@@ -1,4 +1,4 @@
-import { storageEffect } from '@domains/common/effects'
+import { storageEffect } from '../common/effects'
import { jsonParser, stringLiterals } from '@recoiljs/refine'
import { type TokenRateCurrency } from '@talismn/token-rates'
import { atom } from 'recoil'
diff --git a/apps/portal/src/domains/bridge/index.ts b/apps/portal/src/domains/bridge/index.ts
index 9f6095c42..cf75c1113 100644
--- a/apps/portal/src/domains/bridge/index.ts
+++ b/apps/portal/src/domains/bridge/index.ts
@@ -1,5 +1,5 @@
-import { chainState } from '@domains/chains'
-import { substrateApiState } from '@domains/common'
+import { chainState } from '../chains'
+import { substrateApiState } from '../common'
import { Bridge, type ChainId } from '@polkawallet/bridge'
import { selector, selectorFamily } from 'recoil'
import { bridgeConfig } from './config'
diff --git a/apps/portal/src/domains/chains/recoils.ts b/apps/portal/src/domains/chains/recoils.ts
index ef0f8e094..8347b27a3 100644
--- a/apps/portal/src/domains/chains/recoils.ts
+++ b/apps/portal/src/domains/chains/recoils.ts
@@ -1,10 +1,10 @@
-import { selectedCurrencyState } from '@domains/balances'
-import { substrateApiState, useSubstrateApiEndpoint } from '@domains/common'
-import { storageEffect } from '@domains/common/effects'
+import { selectedCurrencyState } from '../balances'
+import { substrateApiState, useSubstrateApiEndpoint } from '../common'
+import { storageEffect } from '../common/effects'
import { type Chain as ChainData, type IToken } from '@talismn/chaindata-provider'
import { Decimal } from '@talismn/math'
-import { Maybe } from '@util/monads'
-import { nullToUndefined } from '@util/nullToUndefine'
+import { Maybe } from '../../util/monads'
+import { nullToUndefined } from '../../util/nullToUndefine'
import { useContext } from 'react'
import { atom, selector, selectorFamily, waitForAll, type RecoilValueReadOnly } from 'recoil'
import { ChainContext } from '.'
diff --git a/apps/portal/src/domains/common/hooks/useEraEta.ts b/apps/portal/src/domains/common/hooks/useEraEta.ts
index ac73d0017..1946bf809 100644
--- a/apps/portal/src/domains/common/hooks/useEraEta.ts
+++ b/apps/portal/src/domains/common/hooks/useEraEta.ts
@@ -1,5 +1,5 @@
import { useDeriveState } from '@talismn/react-polkadot-api'
-import { Maybe } from '@util/monads'
+import { Maybe } from '../../../util/monads'
import BN from 'bn.js'
import { addMilliseconds, formatDistanceToNow } from 'date-fns'
import { useCallback } from 'react'
diff --git a/apps/portal/src/domains/common/hooks/useExtrinsic.ts b/apps/portal/src/domains/common/hooks/useExtrinsic.ts
index b64e56037..de9df5d5f 100644
--- a/apps/portal/src/domains/common/hooks/useExtrinsic.ts
+++ b/apps/portal/src/domains/common/hooks/useExtrinsic.ts
@@ -1,6 +1,6 @@
-import { signetAccountState } from '@domains/accounts'
-import { chainState, useChainState } from '@domains/chains'
-import { useConnectedSubstrateWallet } from '@domains/extension'
+import { signetAccountState } from '../../accounts'
+import { chainState, useChainState } from '../../chains'
+import { useConnectedSubstrateWallet } from '../../extension'
import { type ApiPromise } from '@polkadot/api'
import { type AddressOrPair, type SubmittableExtrinsic } from '@polkadot/api/types'
import RpcError from '@polkadot/rpc-provider/coder/error'
diff --git a/apps/portal/src/domains/common/hooks/useQueryMulti.ts b/apps/portal/src/domains/common/hooks/useQueryMulti.ts
index 27f2221b2..ee9892a5d 100644
--- a/apps/portal/src/domains/common/hooks/useQueryMulti.ts
+++ b/apps/portal/src/domains/common/hooks/useQueryMulti.ts
@@ -5,7 +5,7 @@ import type {
QueryableStorageEntry,
StorageEntryPromiseOverloads,
} from '@polkadot/api/types'
-import useDeferred from '@util/useDeferred'
+import useDeferred from '../../../util/useDeferred'
import { useEffect, useRef, useState } from 'react'
import { type Loadable, RecoilLoadable, useRecoilValue } from 'recoil'
import { type Observable } from 'rxjs'
diff --git a/apps/portal/src/domains/common/hooks/useTokenAmount.ts b/apps/portal/src/domains/common/hooks/useTokenAmount.ts
index a345ba22e..f28cbd162 100644
--- a/apps/portal/src/domains/common/hooks/useTokenAmount.ts
+++ b/apps/portal/src/domains/common/hooks/useTokenAmount.ts
@@ -1,5 +1,5 @@
-import { selectedCurrencyState } from '@domains/balances'
-import { useNativeTokenDecimalState, useNativeTokenPriceState } from '@domains/chains/recoils'
+import { selectedCurrencyState } from '../../balances'
+import { useNativeTokenDecimalState, useNativeTokenPriceState } from '../../chains/recoils'
import { type BN } from '@polkadot/util'
import { type Decimal } from '@talismn/math'
import { useMemo, useState } from 'react'
diff --git a/apps/portal/src/domains/common/recoils/index.ts b/apps/portal/src/domains/common/recoils/index.ts
index 9bd40f249..72bb7b7b6 100644
--- a/apps/portal/src/domains/common/recoils/index.ts
+++ b/apps/portal/src/domains/common/recoils/index.ts
@@ -1,7 +1,7 @@
import { type ApiPromise } from '@polkadot/api'
import { atom, selectorFamily } from 'recoil'
-import { connectedSubstrateWalletState } from '@domains/extension'
+import { connectedSubstrateWalletState } from '../../extension'
import { substrateApiState } from '..'
export * from './api'
diff --git a/apps/portal/src/domains/crowdloans/hooks.ts b/apps/portal/src/domains/crowdloans/hooks.ts
index aacdc49ff..5c2ee6c81 100644
--- a/apps/portal/src/domains/crowdloans/hooks.ts
+++ b/apps/portal/src/domains/crowdloans/hooks.ts
@@ -1,5 +1,5 @@
-import { selectedSubstrateAccountsState } from '@domains/accounts/recoils'
-import { usePortfolio } from '@libs/portfolio'
+import { selectedSubstrateAccountsState } from '../accounts/recoils'
+import { usePortfolio } from '../../libs/portfolio'
import { encodeAnyAddress } from '@talismn/util'
import BigNumber from 'bignumber.js'
import { useMemo } from 'react'
diff --git a/apps/portal/src/domains/extension/evm.ts b/apps/portal/src/domains/extension/evm.ts
index 69cc82f70..a00e4a0a4 100644
--- a/apps/portal/src/domains/extension/evm.ts
+++ b/apps/portal/src/domains/extension/evm.ts
@@ -1,4 +1,4 @@
-import { wagmiAccountsState } from '@domains/accounts/recoils'
+import { wagmiAccountsState } from '../accounts/recoils'
import { toast } from '@talismn/ui'
import { usePostHog } from 'posthog-js/react'
import { useEffect } from 'react'
diff --git a/apps/portal/src/domains/extension/substrate.ts b/apps/portal/src/domains/extension/substrate.ts
index 7b11c2094..ecd3c7824 100644
--- a/apps/portal/src/domains/extension/substrate.ts
+++ b/apps/portal/src/domains/extension/substrate.ts
@@ -1,7 +1,7 @@
-import polkadotJsWalletLogo from '@assets/polkadot-js-wallet.svg'
-import talismanWalletLogo from '@assets/talisman-wallet.svg'
-import { substrateInjectedAccountsState } from '@domains/accounts/recoils'
-import { storageEffect } from '@domains/common/effects'
+import polkadotJsWalletLogo from '../../assets/polkadot-js-wallet.svg'
+import talismanWalletLogo from '../../assets/talisman-wallet.svg'
+import { substrateInjectedAccountsState } from '../accounts/recoils'
+import { storageEffect } from '../common/effects'
import { WalletAggregator, type BaseWallet } from '@polkadot-onboard/core'
import { InjectedWalletProvider } from '@polkadot-onboard/injected-wallets'
import type { InjectedWindow } from '@polkadot/extension-inject/types'
diff --git a/apps/portal/src/domains/fastUnstake/hooks.ts b/apps/portal/src/domains/fastUnstake/hooks.ts
index d625aee98..df24f0722 100644
--- a/apps/portal/src/domains/fastUnstake/hooks.ts
+++ b/apps/portal/src/domains/fastUnstake/hooks.ts
@@ -1,5 +1,5 @@
-import { writeableSubstrateAccountsState } from '@domains/accounts/recoils'
-import { useSubstrateApiEndpoint, useSubstrateApiState } from '@domains/common'
+import { writeableSubstrateAccountsState } from '../accounts/recoils'
+import { useSubstrateApiEndpoint, useSubstrateApiState } from '../common'
import { encodeAddress } from '@polkadot/util-crypto'
import { bool, coercion, jsonParser, literal, object, writableDict } from '@recoiljs/refine'
import { useQueryState } from '@talismn/react-polkadot-api'
diff --git a/apps/portal/src/domains/nfts/core.ts b/apps/portal/src/domains/nfts/core.ts
index bd0b7904c..2d090f47a 100644
--- a/apps/portal/src/domains/nfts/core.ts
+++ b/apps/portal/src/domains/nfts/core.ts
@@ -1,4 +1,4 @@
-import { chainState } from '@domains/chains'
+import { chainState } from '../chains'
import * as Sentry from '@sentry/react'
import { type Nft as BaseNft } from '@talismn/nft'
import { toast } from '@talismn/ui'
diff --git a/apps/portal/src/domains/nfts/tags.ts b/apps/portal/src/domains/nfts/tags.ts
index d3a746237..466389f0e 100644
--- a/apps/portal/src/domains/nfts/tags.ts
+++ b/apps/portal/src/domains/nfts/tags.ts
@@ -1,5 +1,5 @@
-import { selectedAccountsState } from '@domains/accounts'
-import { storageEffect } from '@domains/common/effects'
+import { selectedAccountsState } from '../accounts'
+import { storageEffect } from '../common/effects'
import { array, jsonParser, string } from '@recoiljs/refine'
import { partial } from 'lodash'
import { useCallback, useMemo } from 'react'
diff --git a/apps/portal/src/domains/staking/dappStaking/hooks/forms.ts b/apps/portal/src/domains/staking/dappStaking/hooks/forms.ts
index 9c4c1110d..ded555d61 100644
--- a/apps/portal/src/domains/staking/dappStaking/hooks/forms.ts
+++ b/apps/portal/src/domains/staking/dappStaking/hooks/forms.ts
@@ -1,4 +1,4 @@
-import type { Account } from '@domains/accounts'
+import type { Account } from '../../../accounts'
import {
paymentInfoState,
useExtrinsic,
@@ -6,12 +6,12 @@ import {
useSubstrateApiState,
useTokenAmount,
useTokenAmountFromPlanck,
-} from '@domains/common'
+} from '../../../common'
import type { ApiPromise } from '@polkadot/api'
import type { AstarPrimitivesDappStakingSmartContract } from '@polkadot/types/lookup'
import { BigIntMath } from '@talismn/math'
import { useQueryMultiState, useQueryState } from '@talismn/react-polkadot-api'
-import { Maybe } from '@util/monads'
+import { Maybe } from '../../../../util/monads'
import BN from 'bn.js'
import { useCallback, useDeferredValue, useMemo, useState } from 'react'
import { useRecoilValue, useRecoilValueLoadable, waitForAll } from 'recoil'
diff --git a/apps/portal/src/domains/staking/dappStaking/hooks/useClaimAllRewardsExtrinsic.ts b/apps/portal/src/domains/staking/dappStaking/hooks/useClaimAllRewardsExtrinsic.ts
index 16f6254b0..66f5f1e39 100644
--- a/apps/portal/src/domains/staking/dappStaking/hooks/useClaimAllRewardsExtrinsic.ts
+++ b/apps/portal/src/domains/staking/dappStaking/hooks/useClaimAllRewardsExtrinsic.ts
@@ -1,4 +1,4 @@
-import { useExtrinsic } from '@domains/common'
+import { useExtrinsic } from '../../../common'
import type { ApiPromise } from '@polkadot/api'
import { useCallback } from 'react'
import type { Stake } from './useStake'
diff --git a/apps/portal/src/domains/staking/dappStaking/hooks/useStake.ts b/apps/portal/src/domains/staking/dappStaking/hooks/useStake.ts
index 0383cc975..790defa58 100644
--- a/apps/portal/src/domains/staking/dappStaking/hooks/useStake.ts
+++ b/apps/portal/src/domains/staking/dappStaking/hooks/useStake.ts
@@ -1,8 +1,8 @@
-import type { Account } from '@domains/accounts'
-import { useNativeTokenAmountState } from '@domains/chains'
-import { expectedBlockTime, useSubstrateApiEndpoint, useSubstrateApiState } from '@domains/common'
+import type { Account } from '../../../accounts'
+import { useNativeTokenAmountState } from '../../../chains'
+import { expectedBlockTime, useSubstrateApiEndpoint, useSubstrateApiState } from '../../../common'
import { useDeriveState, useQueryMultiState, useQueryState } from '@talismn/react-polkadot-api'
-import { Maybe } from '@util/monads'
+import { Maybe } from '../../../../util/monads'
import BigNumber from 'bignumber.js'
import BN from 'bn.js'
import { addMilliseconds, formatDistanceToNow } from 'date-fns'
diff --git a/apps/portal/src/domains/staking/dappStaking/hooks/useTotalStaked.ts b/apps/portal/src/domains/staking/dappStaking/hooks/useTotalStaked.ts
index 84672df9e..0d0abb000 100644
--- a/apps/portal/src/domains/staking/dappStaking/hooks/useTotalStaked.ts
+++ b/apps/portal/src/domains/staking/dappStaking/hooks/useTotalStaked.ts
@@ -1,7 +1,7 @@
-import { selectedSubstrateAccountsState } from '@domains/accounts'
-import { dappStakingEnabledChainsState, nativeTokenAmountState } from '@domains/chains'
-import { chainQueryState } from '@domains/common'
-import { Maybe } from '@util/monads'
+import { selectedSubstrateAccountsState } from '../../../accounts'
+import { dappStakingEnabledChainsState, nativeTokenAmountState } from '../../../chains'
+import { chainQueryState } from '../../../common'
+import { Maybe } from '../../../../util/monads'
import { useMemo } from 'react'
import { constSelector, useRecoilValue, waitForAll, waitForAny } from 'recoil'
diff --git a/apps/portal/src/domains/staking/dappStaking/hooks/useUnlockDuration.ts b/apps/portal/src/domains/staking/dappStaking/hooks/useUnlockDuration.ts
index e61a47848..c5ef9d081 100644
--- a/apps/portal/src/domains/staking/dappStaking/hooks/useUnlockDuration.ts
+++ b/apps/portal/src/domains/staking/dappStaking/hooks/useUnlockDuration.ts
@@ -1,4 +1,4 @@
-import { expectedBlockTime, useSubstrateApiState } from '@domains/common'
+import { expectedBlockTime, useSubstrateApiState } from '../../../common'
import { formatDistance } from 'date-fns'
import { useMemo } from 'react'
import { useRecoilValue, waitForAll } from 'recoil'
diff --git a/apps/portal/src/domains/staking/dappStaking/recoils.ts b/apps/portal/src/domains/staking/dappStaking/recoils.ts
index cfebbefe5..49d1a9845 100644
--- a/apps/portal/src/domains/staking/dappStaking/recoils.ts
+++ b/apps/portal/src/domains/staking/dappStaking/recoils.ts
@@ -1,5 +1,5 @@
-import { ChainContext, assertChain, dappStakingEnabledChainsState } from '@domains/chains'
-import { chainReadIdState, substrateApiState, useSubstrateApiEndpoint } from '@domains/common'
+import { ChainContext, assertChain, dappStakingEnabledChainsState } from '../../chains'
+import { chainReadIdState, substrateApiState, useSubstrateApiEndpoint } from '../../common'
import type { Bytes } from '@polkadot/types'
import { u8aToNumber } from '@polkadot/util'
import { useContext } from 'react'
diff --git a/apps/portal/src/domains/staking/hooks.ts b/apps/portal/src/domains/staking/hooks.ts
index 90d38d163..c9b2b24fd 100644
--- a/apps/portal/src/domains/staking/hooks.ts
+++ b/apps/portal/src/domains/staking/hooks.ts
@@ -1,4 +1,4 @@
-import { selectedBalancesState, selectedCurrencyState } from '@domains/balances'
+import { selectedBalancesState, selectedCurrencyState } from '../balances'
import { useMemo } from 'react'
import { useRecoilValue, waitForAll } from 'recoil'
import { useTotalStaked as useDappStakingTotalStaked } from './dappStaking'
diff --git a/apps/portal/src/domains/staking/lido/core.ts b/apps/portal/src/domains/staking/lido/core.ts
index db3ac59d9..b8de9d407 100644
--- a/apps/portal/src/domains/staking/lido/core.ts
+++ b/apps/portal/src/domains/staking/lido/core.ts
@@ -1,5 +1,5 @@
-import type { Account } from '@domains/accounts'
-import { tokenPriceState } from '@domains/chains'
+import type { Account } from '../../accounts'
+import { tokenPriceState } from '../../chains'
import { Decimal } from '@talismn/math'
import { useSuspenseQueries, useSuspenseQuery } from '@tanstack/react-query'
import { useEffect } from 'react'
diff --git a/apps/portal/src/domains/staking/slpx/core.ts b/apps/portal/src/domains/staking/slpx/core.ts
index a127e76f0..604df715b 100644
--- a/apps/portal/src/domains/staking/slpx/core.ts
+++ b/apps/portal/src/domains/staking/slpx/core.ts
@@ -1,13 +1,13 @@
import '@bifrost-finance/types/augment/api'
-import type { Account } from '@domains/accounts'
-import { selectedCurrencyState } from '@domains/balances'
-import { tokenPriceState } from '@domains/chains'
-import { useSubstrateApiState, useWagmiWriteContract } from '@domains/common'
+import type { Account } from '../../accounts'
+import { selectedCurrencyState } from '../../balances'
+import { tokenPriceState } from '../../chains'
+import { useSubstrateApiState, useWagmiWriteContract } from '../../common'
import { evmToAddress } from '@polkadot/util-crypto'
import { Decimal } from '@talismn/math'
import { useQueryMultiState, useQueryState } from '@talismn/react-polkadot-api'
import { useSuspenseQueries } from '@tanstack/react-query'
-import { Maybe } from '@util/monads'
+import { Maybe } from '../../../util/monads'
import BigNumber from 'bignumber.js'
import BN from 'bn.js'
import { useEffect, useMemo, useState } from 'react'
diff --git a/apps/portal/src/domains/staking/substrate/nominationPools/hooks/usePoolAddForm.ts b/apps/portal/src/domains/staking/substrate/nominationPools/hooks/usePoolAddForm.ts
index c598ad2cb..66469177f 100644
--- a/apps/portal/src/domains/staking/substrate/nominationPools/hooks/usePoolAddForm.ts
+++ b/apps/portal/src/domains/staking/substrate/nominationPools/hooks/usePoolAddForm.ts
@@ -1,9 +1,9 @@
-import { useSubstrateApiEndpoint, useTokenAmountFromPlanck, useTokenAmountState } from '@domains/common/hooks'
-import { paymentInfoState, useSubstrateApiState } from '@domains/common/recoils'
+import { useSubstrateApiEndpoint, useTokenAmountFromPlanck, useTokenAmountState } from '../../../../common/hooks'
+import { paymentInfoState, useSubstrateApiState } from '../../../../common/recoils'
import { BN } from '@polkadot/util'
import { useDeriveState, useQueryMultiState } from '@talismn/react-polkadot-api'
-import { Maybe } from '@util/monads'
-import usePrevious from '@util/usePrevious'
+import { Maybe } from '../../../../../util/monads'
+import usePrevious from '../../../../../util/usePrevious'
import { useEffect, useMemo } from 'react'
import { useSearchParams } from 'react-router-dom'
import { constSelector, useRecoilValue, useRecoilValueLoadable } from 'recoil'
diff --git a/apps/portal/src/domains/staking/substrate/nominationPools/hooks/usePoolStake.ts b/apps/portal/src/domains/staking/substrate/nominationPools/hooks/usePoolStake.ts
index 338bfbc3c..5770d173f 100644
--- a/apps/portal/src/domains/staking/substrate/nominationPools/hooks/usePoolStake.ts
+++ b/apps/portal/src/domains/staking/substrate/nominationPools/hooks/usePoolStake.ts
@@ -1,6 +1,6 @@
-import { type StakeStatus } from '@components/recipes/StakeStatusIndicator'
-import { type Account } from '@domains/accounts/recoils'
-import { useSubstrateApiState } from '@domains/common'
+import { type StakeStatus } from '../../../../../components/recipes/StakeStatusIndicator'
+import { type Account } from '../../../../accounts/recoils'
+import { useSubstrateApiState } from '../../../../common'
import { useDeriveState, useQueryState } from '@talismn/react-polkadot-api'
import { useMemo } from 'react'
import { useRecoilValue, useRecoilValueLoadable, waitForAll } from 'recoil'
diff --git a/apps/portal/src/domains/staking/substrate/nominationPools/hooks/usePoolUnstakeForm.ts b/apps/portal/src/domains/staking/substrate/nominationPools/hooks/usePoolUnstakeForm.ts
index 0d3bde73a..7bad00ab8 100644
--- a/apps/portal/src/domains/staking/substrate/nominationPools/hooks/usePoolUnstakeForm.ts
+++ b/apps/portal/src/domains/staking/substrate/nominationPools/hooks/usePoolUnstakeForm.ts
@@ -1,4 +1,4 @@
-import { useExtrinsic, useQueryMulti, useTokenAmountFromPlanck, useTokenAmountState } from '@domains/common/hooks'
+import { useExtrinsic, useQueryMulti, useTokenAmountFromPlanck, useTokenAmountState } from '../../../../common/hooks'
import { useMemo } from 'react'
export const usePoolUnstakeForm = (account?: string) => {
diff --git a/apps/portal/src/domains/staking/substrate/nominationPools/hooks/useReturn.ts b/apps/portal/src/domains/staking/substrate/nominationPools/hooks/useReturn.ts
index 70993adb0..696aae42d 100644
--- a/apps/portal/src/domains/staking/substrate/nominationPools/hooks/useReturn.ts
+++ b/apps/portal/src/domains/staking/substrate/nominationPools/hooks/useReturn.ts
@@ -1,4 +1,4 @@
-import { expectedEraTime, useSubstrateApiState } from '@domains/common'
+import { expectedEraTime, useSubstrateApiState } from '../../../../common'
import { useQueryMultiState, useQueryState } from '@talismn/react-polkadot-api'
import BigNumber from 'bignumber.js'
import { hoursToMilliseconds } from 'date-fns'
diff --git a/apps/portal/src/domains/staking/substrate/nominationPools/hooks/useUnlockDuration.ts b/apps/portal/src/domains/staking/substrate/nominationPools/hooks/useUnlockDuration.ts
index af403c396..75d9fc8aa 100644
--- a/apps/portal/src/domains/staking/substrate/nominationPools/hooks/useUnlockDuration.ts
+++ b/apps/portal/src/domains/staking/substrate/nominationPools/hooks/useUnlockDuration.ts
@@ -1,6 +1,6 @@
-import { expectedBlockTime, expectedSessionTime, useSubstrateApiState } from '@domains/common'
+import { expectedBlockTime, expectedSessionTime, useSubstrateApiState } from '../../../../common'
import { useDeriveState } from '@talismn/react-polkadot-api'
-import { Maybe } from '@util/monads'
+import { Maybe } from '../../../../../util/monads'
import { formatDistance } from 'date-fns'
import { useRecoilValue, waitForAll } from 'recoil'
diff --git a/apps/portal/src/domains/staking/substrate/nominationPools/recoils.ts b/apps/portal/src/domains/staking/substrate/nominationPools/recoils.ts
index 103715854..4268db415 100644
--- a/apps/portal/src/domains/staking/substrate/nominationPools/recoils.ts
+++ b/apps/portal/src/domains/staking/substrate/nominationPools/recoils.ts
@@ -1,7 +1,7 @@
-import { substrateAccountsState } from '@domains/accounts/recoils'
-import { nominationPoolsEnabledChainsState, type ChainInfo } from '@domains/chains'
-import { useSubstrateApiEndpoint } from '@domains/common'
-import { chainReadIdState, substrateApiState } from '@domains/common/recoils'
+import { substrateAccountsState } from '../../../accounts/recoils'
+import { nominationPoolsEnabledChainsState, type ChainInfo } from '../../../chains'
+import { useSubstrateApiEndpoint } from '../../../common'
+import { chainReadIdState, substrateApiState } from '../../../common/recoils'
import type { AnyNumber } from '@polkadot/types-codec/types'
import { encodeAddress } from '@polkadot/util-crypto'
import DotPoolSelector, { ValidatorSelector, defaultOptions } from '@talismn/dot-pool-selector'
diff --git a/apps/portal/src/domains/staking/substrate/useTotalStaked.ts b/apps/portal/src/domains/staking/substrate/useTotalStaked.ts
index 137cf4c94..8b1458713 100644
--- a/apps/portal/src/domains/staking/substrate/useTotalStaked.ts
+++ b/apps/portal/src/domains/staking/substrate/useTotalStaked.ts
@@ -1,6 +1,6 @@
-import { selectedSubstrateAccountsState } from '@domains/accounts/recoils'
-import { nativeTokenPriceState, nominationPoolsEnabledChainsState } from '@domains/chains/recoils'
-import { chainDeriveState, chainQueryState, substrateApiState } from '@domains/common'
+import { selectedSubstrateAccountsState } from '../../accounts/recoils'
+import { nativeTokenPriceState, nominationPoolsEnabledChainsState } from '../../chains/recoils'
+import { chainDeriveState, chainQueryState, substrateApiState } from '../../common'
import { Decimal } from '@talismn/math'
import { useMemo } from 'react'
import { useRecoilValue, waitForAll, waitForAny } from 'recoil'
diff --git a/apps/portal/src/domains/staking/substrate/validator/hooks/useValidatorUnstakeForm.ts b/apps/portal/src/domains/staking/substrate/validator/hooks/useValidatorUnstakeForm.ts
index 839126a50..f877759fe 100644
--- a/apps/portal/src/domains/staking/substrate/validator/hooks/useValidatorUnstakeForm.ts
+++ b/apps/portal/src/domains/staking/substrate/validator/hooks/useValidatorUnstakeForm.ts
@@ -1,4 +1,4 @@
-import { useExtrinsic, useQueryMulti, useTokenAmountFromPlanck, useTokenAmountState } from '@domains/common/hooks'
+import { useExtrinsic, useQueryMulti, useTokenAmountFromPlanck, useTokenAmountState } from '../../../../common/hooks'
import type { ApiPromise } from '@polkadot/api'
import { useCallback, useMemo } from 'react'
diff --git a/apps/portal/src/domains/staking/substrate/validator/recoils.ts b/apps/portal/src/domains/staking/substrate/validator/recoils.ts
index 1e2d68a52..50f456415 100644
--- a/apps/portal/src/domains/staking/substrate/validator/recoils.ts
+++ b/apps/portal/src/domains/staking/substrate/validator/recoils.ts
@@ -1,5 +1,5 @@
-import { selectedSubstrateAccountsState } from '@domains/accounts/recoils'
-import { useSubstrateApiEndpoint } from '@domains/common'
+import { selectedSubstrateAccountsState } from '../../../accounts/recoils'
+import { useSubstrateApiEndpoint } from '../../../common'
import { selectorFamily } from 'recoil'
import { Thread, spawn } from 'threads'
import type { WorkerFunction } from './worker'
diff --git a/apps/portal/src/index.tsx b/apps/portal/src/index.tsx
index bed821a3d..3f79f7089 100644
--- a/apps/portal/src/index.tsx
+++ b/apps/portal/src/index.tsx
@@ -1,8 +1,8 @@
-import { initSentry } from '@domains/common/sentry'
import * as Sentry from '@sentry/react'
import React from 'react'
import { createRoot } from 'react-dom/client'
import App from './App'
+import { initSentry } from './domains/common/sentry'
import './index.css'
import './libs/i18n/i18n'
diff --git a/apps/portal/src/libs/crowdloans/useCrowdloanContribute.tsx b/apps/portal/src/libs/crowdloans/useCrowdloanContribute.tsx
index 19858f5ab..668b6441e 100644
--- a/apps/portal/src/libs/crowdloans/useCrowdloanContribute.tsx
+++ b/apps/portal/src/libs/crowdloans/useCrowdloanContribute.tsx
@@ -1,14 +1,14 @@
/* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
/* eslint-disable @typescript-eslint/no-non-null-assertion */
/* eslint-disable @typescript-eslint/restrict-template-expressions */
-import { useConnectedSubstrateWallet } from '@domains/extension'
-import { parachainDetails, supportedRelayChainsState } from '@libs/talisman/util/_config'
+import { useConnectedSubstrateWallet } from '../../domains/extension'
+import { parachainDetails, supportedRelayChainsState } from '../talisman/util/_config'
import { ApiPromise, WsProvider, type SubmittableResult } from '@polkadot/api'
import { type SubmittableExtrinsic } from '@polkadot/api/submittable/types'
import { isEthereumChecksum } from '@polkadot/util-crypto'
import { encodeAnyAddress, planckToTokens, tokensToPlanck } from '@talismn/util'
-import customRpcs from '@util/customRpcs'
-import { Maybe } from '@util/monads'
+import customRpcs from '../../util/customRpcs'
+import { Maybe } from '../../util/monads'
import BigNumber from 'bignumber.js'
import { useCallback, useEffect, useMemo, useState } from 'react'
import { useRecoilValue } from 'recoil'
diff --git a/apps/portal/src/libs/crowdloans/useCrowdloanContributions.ts b/apps/portal/src/libs/crowdloans/useCrowdloanContributions.ts
index 76489bf38..eb53ea5d1 100644
--- a/apps/portal/src/libs/crowdloans/useCrowdloanContributions.ts
+++ b/apps/portal/src/libs/crowdloans/useCrowdloanContributions.ts
@@ -1,5 +1,5 @@
-import { selectedSubstrateAccountsState } from '@domains/accounts'
-import { useChainmetaValue } from '@libs/talisman'
+import { selectedSubstrateAccountsState } from '../../domains/accounts'
+import { useChainmetaValue } from '../talisman'
import { encodeAnyAddress } from '@talismn/util'
import BigNumber from 'bignumber.js'
import { request } from 'graphql-request'
diff --git a/apps/portal/src/libs/portfolio/index.tsx b/apps/portal/src/libs/portfolio/index.tsx
index 44904d604..824f6a669 100644
--- a/apps/portal/src/libs/portfolio/index.tsx
+++ b/apps/portal/src/libs/portfolio/index.tsx
@@ -1,6 +1,6 @@
-import { type GqlContribution } from '@libs/crowdloans'
+import { type GqlContribution } from '../crowdloans'
import { encodeAnyAddress, planckToTokens } from '@talismn/util'
-import useUniqueId from '@util/useUniqueId'
+import useUniqueId from '../../util/useUniqueId'
import BigNumber from 'bignumber.js'
import {
useContext as _useContext,
diff --git a/apps/portal/src/libs/talisman/crowdloan.tsx b/apps/portal/src/libs/talisman/crowdloan.tsx
index 63214f02c..a2b910003 100644
--- a/apps/portal/src/libs/talisman/crowdloan.tsx
+++ b/apps/portal/src/libs/talisman/crowdloan.tsx
@@ -1,5 +1,5 @@
/* eslint-disable @typescript-eslint/no-non-null-assertion */
-import crowdloanDataState, { type CrowdloanDetail } from '@libs/@talisman-crowdloans/provider'
+import crowdloanDataState, { type CrowdloanDetail } from '../@talisman-crowdloans/provider'
import type { AccountId } from '@polkadot/types/interfaces'
import { stringToU8a, u8aConcat, u8aEq } from '@polkadot/util'
import { planckToTokens } from '@talismn/util'
@@ -8,7 +8,7 @@ import { find, get } from 'lodash'
import { useContext as _useContext, createContext, useEffect, useMemo, useState, type PropsWithChildren } from 'react'
import { selector, useRecoilValue, useRecoilValueLoadable, waitForAll } from 'recoil'
-import { substrateApiState } from '@domains/common'
+import { substrateApiState } from '../../domains/common'
import { supportedRelayChainsState } from './util/_config'
export type Crowdloan = {
diff --git a/apps/portal/src/libs/talisman/parachain.tsx b/apps/portal/src/libs/talisman/parachain.tsx
index 05921ada4..00458ad3c 100644
--- a/apps/portal/src/libs/talisman/parachain.tsx
+++ b/apps/portal/src/libs/talisman/parachain.tsx
@@ -1,12 +1,10 @@
-import { chainsState } from '@domains/chains'
-import { substrateApiState } from '@domains/common'
-import crowdloanDataState, { type CrowdloanDetail } from '@libs/@talisman-crowdloans/provider'
+import { chainsState } from '../../domains/chains'
+import { substrateApiState } from '../../domains/common'
+import crowdloanDataState, { type CrowdloanDetail } from '../@talisman-crowdloans/provider'
import { find } from 'lodash'
import { useContext as _useContext, createContext, useEffect, useMemo, useState, type PropsWithChildren } from 'react'
import { selector, useRecoilValue, useRecoilValueLoadable, waitForAll } from 'recoil'
-export type { CrowdloanDetail } from '@libs/@talisman-crowdloans/provider'
-
export const useParachainsDetails = () => useContext()
export const useParachainsDetailsIndexedById = () => {
const { parachains, hydrated } = useParachainsDetails()
diff --git a/apps/portal/src/libs/talisman/util/_config.ts b/apps/portal/src/libs/talisman/util/_config.ts
index 39b6d4270..58fdc740e 100644
--- a/apps/portal/src/libs/talisman/util/_config.ts
+++ b/apps/portal/src/libs/talisman/util/_config.ts
@@ -1,4 +1,4 @@
-import { chainState } from '@domains/chains'
+import { chainState } from '../../../domains/chains'
import { selector, waitForAll } from 'recoil'
export const statusOptions = {
diff --git a/apps/portal/src/routes/admin.tsx b/apps/portal/src/routes/admin.tsx
index 771f9ac09..74d5a9498 100644
--- a/apps/portal/src/routes/admin.tsx
+++ b/apps/portal/src/routes/admin.tsx
@@ -1,15 +1,3 @@
-import { TalismanHandLoader } from '@components/legacy/TalismanHandLoader'
-import { useAccountSelector } from '@components/widgets/AccountSelector'
-import { writeableSubstrateAccountsState } from '@domains/accounts'
-import {
- ChainProvider,
- assertChain,
- nominationPoolsEnabledChainsState,
- useChainState,
- useNativeTokenPriceState,
-} from '@domains/chains'
-import { useExtrinsic, useSubstrateApiState, useTokenAmountState } from '@domains/common'
-import { AnalyticsContext } from '@domains/common/analytics'
import type { ApiPromise } from '@polkadot/api'
import type { Option, StorageKey } from '@polkadot/types'
import type { AccountId32, Balance } from '@polkadot/types/interfaces'
@@ -18,6 +6,18 @@ import { Button, Surface, Text, TextInput, toast } from '@talismn/ui'
import { chunk } from 'lodash'
import { Suspense, useCallback, useMemo, useState } from 'react'
import { useRecoilValue } from 'recoil'
+import { TalismanHandLoader } from '../components/legacy/TalismanHandLoader'
+import { useAccountSelector } from '../components/widgets/AccountSelector'
+import { writeableSubstrateAccountsState } from '../domains/accounts'
+import {
+ ChainProvider,
+ assertChain,
+ nominationPoolsEnabledChainsState,
+ useChainState,
+ useNativeTokenPriceState,
+} from '../domains/chains'
+import { useExtrinsic, useSubstrateApiState, useTokenAmountState } from '../domains/common'
+import { AnalyticsContext } from '../domains/common/analytics'
const _NominationPoolsRewardsClaim = () => {
const chain = useRecoilValue(useChainState())
diff --git a/apps/portal/src/routes/crowdloans/item.tsx b/apps/portal/src/routes/crowdloans/item.tsx
index c51bfbe51..a5f46dd89 100644
--- a/apps/portal/src/routes/crowdloans/item.tsx
+++ b/apps/portal/src/routes/crowdloans/item.tsx
@@ -1,8 +1,8 @@
-import { Crowdloan, Parachain } from '@components/legacy/archetypes'
-import { Panel, PanelSection, Poster, useModal } from '@components/legacy'
+import { Crowdloan, Parachain } from '../../components/legacy/archetypes'
+import { Panel, PanelSection, Poster, useModal } from '../../components/legacy'
import styled from '@emotion/styled'
-import { useCrowdloanContributions } from '@libs/crowdloans'
-import { useCrowdloanByParachainId, useParachainAssets, useParachainDetailsBySlug } from '@libs/talisman'
+import { useCrowdloanContributions } from '../../libs/crowdloans'
+import { useCrowdloanByParachainId, useParachainAssets, useParachainDetailsBySlug } from '../../libs/talisman'
import { Button } from '@talismn/ui'
import { useTranslation } from 'react-i18next'
import { useParams } from 'react-router-dom'
diff --git a/apps/portal/src/routes/crowdloans/main.tsx b/apps/portal/src/routes/crowdloans/main.tsx
index 04a5d71d2..761dd5b7b 100644
--- a/apps/portal/src/routes/crowdloans/main.tsx
+++ b/apps/portal/src/routes/crowdloans/main.tsx
@@ -1,4 +1,4 @@
-import { Crowdloan } from '@components/legacy/archetypes'
+import { Crowdloan } from '../../components/legacy/archetypes'
import styled from '@emotion/styled'
export const CrowdloanIndex = styled(({ className }: { className?: string }) => (
diff --git a/apps/portal/src/routes/crowdloans/participated.tsx b/apps/portal/src/routes/crowdloans/participated.tsx
index 8a2175681..d021fb349 100644
--- a/apps/portal/src/routes/crowdloans/participated.tsx
+++ b/apps/portal/src/routes/crowdloans/participated.tsx
@@ -1,7 +1,7 @@
-import { RootNav } from '@components/legacy/archetypes/Crowdloan/RootNav'
-import ParticipatedCrowdloans from '@components/legacy/archetypes/Wallet/Crowdloans'
+import { RootNav } from '../../components/legacy/archetypes/Crowdloan/RootNav'
+import ParticipatedCrowdloans from '../../components/legacy/archetypes/Wallet/Crowdloans'
import styled from '@emotion/styled'
-import { TitlePortal } from '@routes/layout'
+import { TitlePortal } from '../layout'
export const CrowdloanParticipated = styled(({ className }: { className?: string }) => (
diff --git a/apps/portal/src/routes/dex/layout.tsx b/apps/portal/src/routes/dex/layout.tsx
index 7c8471117..942d92bd7 100644
--- a/apps/portal/src/routes/dex/layout.tsx
+++ b/apps/portal/src/routes/dex/layout.tsx
@@ -1,5 +1,5 @@
-import ErrorBoundary from '@components/widgets/ErrorBoundary'
-import { TitlePortal } from '@routes/layout'
+import ErrorBoundary from '../../components/widgets/ErrorBoundary'
+import { TitlePortal } from '../layout'
import type { ReactNode } from 'react'
import { Outlet } from 'react-router-dom'
diff --git a/apps/portal/src/routes/dex/swap.tsx b/apps/portal/src/routes/dex/swap.tsx
index b89aacdfc..d92265565 100644
--- a/apps/portal/src/routes/dex/swap.tsx
+++ b/apps/portal/src/routes/dex/swap.tsx
@@ -1,5 +1,5 @@
-import SectionHeader from '@components/molecules/SectionHeader'
-import SwapForm from '@components/widgets/dex/SwapForm'
+import SectionHeader from '../../components/molecules/SectionHeader'
+import SwapForm from '../../components/widgets/dex/SwapForm'
import { Chip, Details, OrderedDetailsList, Text } from '@talismn/ui'
import { FaqLayout } from './layout'
diff --git a/apps/portal/src/routes/dex/transport.tsx b/apps/portal/src/routes/dex/transport.tsx
index 156aaa5fe..9df36800e 100644
--- a/apps/portal/src/routes/dex/transport.tsx
+++ b/apps/portal/src/routes/dex/transport.tsx
@@ -1,12 +1,12 @@
-import DexForm from '@components/recipes/DexForm/DexForm'
import { Details, OrderedDetailsList, Text } from '@talismn/ui'
import React, { Suspense } from 'react'
+import DexForm from '../../components/recipes/DexForm/DexForm'
import { FaqLayout } from './layout'
import illustrationAvif from './transport-illustration.avif'
import illustrationPng from './transport-illustration.png'
import illustrationWebp from './transport-illustration.webp'
-const TransportForm = React.lazy(async () => await import('@components/widgets/dex/TransportForm'))
+const TransportForm = React.lazy(async () => await import('../../components/widgets/dex/TransportForm'))
const Transport = () => {
return (
diff --git a/apps/portal/src/routes/explore.tsx b/apps/portal/src/routes/explore.tsx
index c1aebde61..31731f65c 100644
--- a/apps/portal/src/routes/explore.tsx
+++ b/apps/portal/src/routes/explore.tsx
@@ -1,10 +1,10 @@
-import { Card, CardLoading, TagLoading } from '@components/legacy/archetypes/Explore'
-import { useFetchDapps, type Dapp } from '@components/legacy/archetypes/Explore/hooks'
import styled from '@emotion/styled'
import { HiddenDetails, SearchBar, Text } from '@talismn/ui'
-import { device } from '@util/breakpoints'
import { useState } from 'react'
import { useDebounce } from 'react-use'
+import { Card, CardLoading, TagLoading } from '../components/legacy/archetypes/Explore'
+import { useFetchDapps, type Dapp } from '../components/legacy/archetypes/Explore/hooks'
+import { device } from '../util/breakpoints'
import { TitlePortal } from './layout'
const ExploreGrid = ({ className }: { className?: string }) => {
diff --git a/apps/portal/src/routes/index.tsx b/apps/portal/src/routes/index.tsx
index fb591ea80..3a5c8f966 100644
--- a/apps/portal/src/routes/index.tsx
+++ b/apps/portal/src/routes/index.tsx
@@ -1,7 +1,7 @@
-import AccountConnectionGuard from '@components/widgets/AccountConnectionGuard'
-import { RouteErrorElement } from '@components/widgets/ErrorBoundary'
import * as Sentry from '@sentry/react'
import { Navigate, createBrowserRouter } from 'react-router-dom'
+import AccountConnectionGuard from '../components/widgets/AccountConnectionGuard'
+import { RouteErrorElement } from '../components/widgets/ErrorBoundary'
import Admin from './admin'
import crowdloanRoutes from './crowdloans'
import dexRoutes from './dex'
diff --git a/apps/portal/src/routes/layout.tsx b/apps/portal/src/routes/layout.tsx
index 2de0315f5..faf8cc05c 100644
--- a/apps/portal/src/routes/layout.tsx
+++ b/apps/portal/src/routes/layout.tsx
@@ -1,35 +1,4 @@
-import { Total } from '@components/legacy/archetypes/Wallet'
-import Discord from '@assets/icons/discord-header.svg?react'
-import GitHub from '@assets/icons/github-header.svg?react'
-import Medium from '@assets/icons/medium-header.svg?react'
-import Twitter from '@assets/icons/twitter-header.svg?react'
-import { ModalProvider } from '@components/legacy'
-import AccountValueInfo from '@components/recipes/AccountValueInfo'
-import { useShouldShowAccountConnectionGuard } from '@components/widgets/AccountConnectionGuard'
-import AccountsManagementMenu from '@components/widgets/AccountsManagementMenu'
-import WalletConnectionSideSheet, {
- walletConnectionSideSheetOpenState,
-} from '@components/widgets/WalletConnectionSideSheet'
-import DappStakingStakeSideSheet from '@components/widgets/staking/dappStaking/StakeSideSheet'
-import LidoStakeSideSheet from '@components/widgets/staking/lido/StakeSideSheet'
-import SlpxStakeSideSheet from '@components/widgets/staking/slpx/StakeSideSheet'
-import NominationPoolsStakeSideSheet from '@components/widgets/staking/substrate/NominationPoolsStakeSideSheet'
-import { lookupAccountAddressState, selectedAccountsState } from '@domains/accounts'
-import { currencyConfig, selectedCurrencyState } from '@domains/balances'
-import { useHasActiveWalletConnection } from '@domains/extension'
import { useTheme } from '@emotion/react'
-import {
- Compass,
- CreditCard,
- PieChart,
- FileText,
- MoreHorizontal,
- Repeat,
- Search,
- Star,
- TalismanHand,
- Zap,
-} from '@talismn/web-icons'
import {
Button,
IconButton,
@@ -45,12 +14,43 @@ import {
TopAppBar,
createPortal,
} from '@talismn/ui'
-import { isNilOrWhitespace } from '@util/nil'
+import {
+ Compass,
+ CreditCard,
+ FileText,
+ MoreHorizontal,
+ PieChart,
+ Repeat,
+ Search,
+ Star,
+ TalismanHand,
+ Zap,
+} from '@talismn/web-icons'
import { LayoutGroup, motion } from 'framer-motion'
import { usePostHog } from 'posthog-js/react'
import { useCallback, useEffect, useRef, useState } from 'react'
import { Link, Outlet, useLocation } from 'react-router-dom'
import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'
+import Discord from '../assets/icons/discord-header.svg?react'
+import GitHub from '../assets/icons/github-header.svg?react'
+import Medium from '../assets/icons/medium-header.svg?react'
+import Twitter from '../assets/icons/twitter-header.svg?react'
+import { ModalProvider } from '../components/legacy'
+import { Total } from '../components/legacy/archetypes/Wallet'
+import AccountValueInfo from '../components/recipes/AccountValueInfo'
+import { useShouldShowAccountConnectionGuard } from '../components/widgets/AccountConnectionGuard'
+import AccountsManagementMenu from '../components/widgets/AccountsManagementMenu'
+import WalletConnectionSideSheet, {
+ walletConnectionSideSheetOpenState,
+} from '../components/widgets/WalletConnectionSideSheet'
+import DappStakingStakeSideSheet from '../components/widgets/staking/dappStaking/StakeSideSheet'
+import LidoStakeSideSheet from '../components/widgets/staking/lido/StakeSideSheet'
+import SlpxStakeSideSheet from '../components/widgets/staking/slpx/StakeSideSheet'
+import NominationPoolsStakeSideSheet from '../components/widgets/staking/substrate/NominationPoolsStakeSideSheet'
+import { lookupAccountAddressState, selectedAccountsState } from '../domains/accounts'
+import { currencyConfig, selectedCurrencyState } from '../domains/balances'
+import { useHasActiveWalletConnection } from '../domains/extension'
+import { isNilOrWhitespace } from '../util/nil'
const CurrencySelect = () => {
const [currency, setCurrency] = useRecoilState(selectedCurrencyState)
diff --git a/apps/portal/src/routes/portfolio/assets/item.tsx b/apps/portal/src/routes/portfolio/assets/item.tsx
index d99820e6c..2ce7a8b8c 100644
--- a/apps/portal/src/routes/portfolio/assets/item.tsx
+++ b/apps/portal/src/routes/portfolio/assets/item.tsx
@@ -1,7 +1,7 @@
-import { useSingleAsset } from '@components/legacy/archetypes/Portfolio/Assets'
-import { AssetBreakdownList } from '@components/recipes/AssetBreakdown/AssetBreakdownList'
-import AnimatedFiatNumber from '@components/widgets/AnimatedFiatNumber'
-import RedactableBalance from '@components/widgets/RedactableBalance'
+import { useSingleAsset } from '../../../components/legacy/archetypes/Portfolio/Assets'
+import { AssetBreakdownList } from '../../../components/recipes/AssetBreakdown/AssetBreakdownList'
+import AnimatedFiatNumber from '../../../components/widgets/AnimatedFiatNumber'
+import RedactableBalance from '../../../components/widgets/RedactableBalance'
import { keyframes } from '@emotion/react'
import { ChevronLeft } from '@talismn/web-icons'
import { Button, HiddenDetails, InfoCard, Text, Tooltip } from '@talismn/ui'
diff --git a/apps/portal/src/routes/portfolio/assets/main.tsx b/apps/portal/src/routes/portfolio/assets/main.tsx
index 917c39b0e..bc490bd8b 100644
--- a/apps/portal/src/routes/portfolio/assets/main.tsx
+++ b/apps/portal/src/routes/portfolio/assets/main.tsx
@@ -1,7 +1,7 @@
-import useAssets, { useAssetsFiltered } from '@components/legacy/archetypes/Portfolio/Assets'
-import { Total } from '@components/legacy/archetypes/Wallet'
-import Asset, { AssetsList, AssetsListLocked } from '@components/recipes/Asset'
-import AnimatedFiatNumber from '@components/widgets/AnimatedFiatNumber'
+import useAssets, { useAssetsFiltered } from '../../../components/legacy/archetypes/Portfolio/Assets'
+import { Total } from '../../../components/legacy/archetypes/Wallet'
+import Asset, { AssetsList, AssetsListLocked } from '../../../components/recipes/Asset'
+import AnimatedFiatNumber from '../../../components/widgets/AnimatedFiatNumber'
import { ClassNames } from '@emotion/react'
import styled from '@emotion/styled'
import { ChevronLeft } from '@talismn/web-icons'
diff --git a/apps/portal/src/routes/portfolio/collectibles.tsx b/apps/portal/src/routes/portfolio/collectibles.tsx
index 426c11da8..3628541a1 100644
--- a/apps/portal/src/routes/portfolio/collectibles.tsx
+++ b/apps/portal/src/routes/portfolio/collectibles.tsx
@@ -1,6 +1,6 @@
-import AccountIcon from '@components/molecules/AccountIcon/AccountIcon'
-import ErrorBoundary from '@components/widgets/ErrorBoundary'
-import { selectedAccountsState, type Account } from '@domains/accounts'
+import AccountIcon from '../../components/molecules/AccountIcon/AccountIcon'
+import ErrorBoundary from '../../components/widgets/ErrorBoundary'
+import { selectedAccountsState, type Account } from '../../domains/accounts'
import {
nftCollectionItemsState,
nftCollectionsState,
@@ -12,7 +12,7 @@ import {
type Nft,
type NftCollection,
type NftTag,
-} from '@domains/nfts'
+} from '../../domains/nfts'
import { useTheme } from '@emotion/react'
import {
Button,
@@ -29,8 +29,8 @@ import {
} from '@talismn/ui'
import { usePagination } from '@talismn/utils/react'
import { ChevronLeft, ChevronRight, ExternalLink, Eye, EyeOff, Heart } from '@talismn/web-icons'
-import { shortenAddress } from '@util/format'
-import { Maybe } from '@util/monads'
+import { shortenAddress } from '../../util/format'
+import { Maybe } from '../../util/monads'
import { AnimatePresence, motion } from 'framer-motion'
import {
Suspense,
diff --git a/apps/portal/src/routes/portfolio/index.tsx b/apps/portal/src/routes/portfolio/index.tsx
index 69068c6b7..acc296cff 100644
--- a/apps/portal/src/routes/portfolio/index.tsx
+++ b/apps/portal/src/routes/portfolio/index.tsx
@@ -1,4 +1,4 @@
-import AccountConnectionGuard from '@components/widgets/AccountConnectionGuard'
+import AccountConnectionGuard from '../../components/widgets/AccountConnectionGuard'
import type { RouteObject } from 'react-router-dom'
import assetRoutes from './assets'
import Collectibles from './collectibles'
diff --git a/apps/portal/src/routes/portfolio/layout.tsx b/apps/portal/src/routes/portfolio/layout.tsx
index 41a6c62f4..99ebd271a 100644
--- a/apps/portal/src/routes/portfolio/layout.tsx
+++ b/apps/portal/src/routes/portfolio/layout.tsx
@@ -1,4 +1,4 @@
-import ErrorBoundary from '@components/widgets/ErrorBoundary'
+import ErrorBoundary from '../../components/widgets/ErrorBoundary'
import { Tabs } from '@talismn/ui'
import { Outlet } from 'react-router'
import { Link, useMatch } from 'react-router-dom'
diff --git a/apps/portal/src/routes/portfolio/overview.tsx b/apps/portal/src/routes/portfolio/overview.tsx
index 755750197..bd7c81de3 100644
--- a/apps/portal/src/routes/portfolio/overview.tsx
+++ b/apps/portal/src/routes/portfolio/overview.tsx
@@ -1,12 +1,12 @@
-import { useAssetsFiltered } from '@components/legacy/archetypes/Portfolio/Assets'
-import { Crowdloans } from '@components/legacy/archetypes/Wallet'
-import SectionHeader from '@components/molecules/SectionHeader'
-import Asset, { AssetsList, AssetsListLocked } from '@components/recipes/Asset'
-import AnimatedFiatNumber from '@components/widgets/AnimatedFiatNumber'
-import ErrorBoundary from '@components/widgets/ErrorBoundary'
-import PortfolioAllocationGraph from '@components/widgets/PortfolioAllocationGraph'
-import { redactBalanceState } from '@components/widgets/RedactableBalance'
-import Stakes from '@components/widgets/staking/Stakes'
+import { useAssetsFiltered } from '../../components/legacy/archetypes/Portfolio/Assets'
+import { Crowdloans } from '../../components/legacy/archetypes/Wallet'
+import SectionHeader from '../../components/molecules/SectionHeader'
+import Asset, { AssetsList, AssetsListLocked } from '../../components/recipes/Asset'
+import AnimatedFiatNumber from '../../components/widgets/AnimatedFiatNumber'
+import ErrorBoundary from '../../components/widgets/ErrorBoundary'
+import PortfolioAllocationGraph from '../../components/widgets/PortfolioAllocationGraph'
+import { redactBalanceState } from '../../components/widgets/RedactableBalance'
+import Stakes from '../../components/widgets/staking/Stakes'
import { Button, IconButton, SearchBar } from '@talismn/ui'
import { Eye, EyeOff } from '@talismn/web-icons'
import { Suspense, useMemo, useState } from 'react'
diff --git a/apps/portal/src/routes/staking/index.tsx b/apps/portal/src/routes/staking/index.tsx
index b1847364e..1858013ce 100644
--- a/apps/portal/src/routes/staking/index.tsx
+++ b/apps/portal/src/routes/staking/index.tsx
@@ -1,5 +1,5 @@
-import StakeProviders from '@components/widgets/staking/StakeProviders'
-import Stakes from '@components/widgets/staking/Stakes'
+import StakeProviders from '../../components/widgets/staking/StakeProviders'
+import Stakes from '../../components/widgets/staking/Stakes'
import { Navigate, type RouteObject } from 'react-router-dom'
import Layout from './layout'
diff --git a/apps/portal/src/routes/staking/layout.tsx b/apps/portal/src/routes/staking/layout.tsx
index 87c48ff70..5ba90d717 100644
--- a/apps/portal/src/routes/staking/layout.tsx
+++ b/apps/portal/src/routes/staking/layout.tsx
@@ -1,7 +1,7 @@
-import AccountConnectionGuard from '@components/widgets/AccountConnectionGuard'
-import AnimatedFiatNumber from '@components/widgets/AnimatedFiatNumber'
-import { useTotalStaked } from '@domains/staking'
-import { HeaderWidgetPortal, TitlePortal } from '@routes/layout'
+import AccountConnectionGuard from '../../components/widgets/AccountConnectionGuard'
+import AnimatedFiatNumber from '../../components/widgets/AnimatedFiatNumber'
+import { useTotalStaked } from '../../domains/staking'
+import { HeaderWidgetPortal, TitlePortal } from '../layout'
import { Layers, Zap } from '@talismn/web-icons'
import { CircularProgressIndicator, SegmentedButton, Surface, Text } from '@talismn/ui'
import { Suspense, useMemo } from 'react'
diff --git a/apps/portal/src/util/useKeyDown.tsx b/apps/portal/src/util/useKeyDown.tsx
index 56ea1c5cf..e2632a080 100644
--- a/apps/portal/src/util/useKeyDown.tsx
+++ b/apps/portal/src/util/useKeyDown.tsx
@@ -1,4 +1,4 @@
-import useEventListener from '@util/useEventListener'
+import useEventListener from './useEventListener'
import { useCallback } from 'react'
export default function useKeyDown(targetKey: string, callback: () => any) {
diff --git a/apps/portal/src/util/useKeyPressed.tsx b/apps/portal/src/util/useKeyPressed.tsx
index ee6ad74aa..2448fa52a 100644
--- a/apps/portal/src/util/useKeyPressed.tsx
+++ b/apps/portal/src/util/useKeyPressed.tsx
@@ -1,5 +1,5 @@
-import useKeyDown from '@util/useKeyDown'
-import useKeyUp from '@util/useKeyUp'
+import useKeyDown from './useKeyDown'
+import useKeyUp from './useKeyUp'
import { useCallback, useState } from 'react'
export const useKeyPressed = (targetKey: string): boolean => {
diff --git a/apps/portal/src/util/useKeyUp.tsx b/apps/portal/src/util/useKeyUp.tsx
index 080dbcdb7..e663b066c 100644
--- a/apps/portal/src/util/useKeyUp.tsx
+++ b/apps/portal/src/util/useKeyUp.tsx
@@ -1,4 +1,4 @@
-import useEventListener from '@util/useEventListener'
+import useEventListener from './useEventListener'
import { useCallback } from 'react'
export default function useKeyUp(targetKey: string, callback: () => any) {
diff --git a/apps/portal/tsconfig.json b/apps/portal/tsconfig.json
index 776cd4244..36ad6e6d6 100644
--- a/apps/portal/tsconfig.json
+++ b/apps/portal/tsconfig.json
@@ -1,61 +1,7 @@
{
"extends": "@talismn/tsconfig/vite-react",
"compilerOptions": {
- "jsxImportSource": "@emotion/react",
- "baseUrl": "./src",
- "paths": {
- "@archetypes": [
- "./archetypes"
- ],
- "@archetypes/*": [
- "./archetypes/*"
- ],
- "@assets": [
- "./assets"
- ],
- "@assets/*": [
- "./assets/*"
- ],
- "@components": [
- "./components"
- ],
- "@components/*": [
- "./components/*"
- ],
- "@icons": [
- "./assets/icons"
- ],
- "@icons/*": [
- "./assets/icons/*"
- ],
- "@libs": [
- "./libs"
- ],
- "@libs/*": [
- "./libs/*"
- ],
- "@routes": [
- "./routes"
- ],
- "@routes/*": [
- "./routes/*"
- ],
- "@util": [
- "./util"
- ],
- "@util/*": [
- "./util/*"
- ],
- "@layout": [
- "./layout"
- ],
- "@layout/*": [
- "./layout/*"
- ],
- "@domains/*": [
- "./domains/*"
- ]
- }
+ "jsxImportSource": "@emotion/react"
},
"include": [
"src"
diff --git a/apps/portal/vite.config.ts b/apps/portal/vite.config.ts
index 46f2ba9a9..57a7ff78c 100644
--- a/apps/portal/vite.config.ts
+++ b/apps/portal/vite.config.ts
@@ -1,7 +1,6 @@
import react from '@vitejs/plugin-react'
import { defineConfig } from 'vite'
import svgr from 'vite-plugin-svgr'
-import viteTsconfigPaths from 'vite-tsconfig-paths'
export default defineConfig({
plugins: [
@@ -11,7 +10,6 @@ export default defineConfig({
plugins: ['@emotion/babel-plugin'],
},
}),
- viteTsconfigPaths(),
svgr(),
],
envPrefix: 'REACT_APP_',
diff --git a/yarn.lock b/yarn.lock
index 7bc2d8923..348f11b1a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8458,7 +8458,6 @@ __metadata:
viem: "npm:^2.9.26"
vite: "npm:^5.2.9"
vite-plugin-svgr: "npm:^4.2.0"
- vite-tsconfig-paths: "npm:^4.3.2"
wagmi: "npm:^2.5.20"
languageName: unknown
linkType: soft
@@ -15664,13 +15663,6 @@ __metadata:
languageName: node
linkType: hard
-"globrex@npm:^0.1.2":
- version: 0.1.2
- resolution: "globrex@npm:0.1.2"
- checksum: 10c0/a54c029520cf58bda1d8884f72bd49b4cd74e977883268d931fd83bcbd1a9eb96d57c7dbd4ad80148fb9247467ebfb9b215630b2ed7563b2a8de02e1ff7f89d1
- languageName: node
- linkType: hard
-
"goober@npm:^2.1.10":
version: 2.1.11
resolution: "goober@npm:2.1.11"
@@ -22395,20 +22387,6 @@ __metadata:
languageName: node
linkType: hard
-"tsconfck@npm:^3.0.3":
- version: 3.0.3
- resolution: "tsconfck@npm:3.0.3"
- peerDependencies:
- typescript: ^5.0.0
- peerDependenciesMeta:
- typescript:
- optional: true
- bin:
- tsconfck: bin/tsconfck.js
- checksum: 10c0/d45009230c4caa5fc765bdded96f3b8703a7cdd44a1d63024914b0fb1c4dabf9e94d28cc9f9edccaef9baa7b99adc963502d34943d82fcb07b92e1161ee03c56
- languageName: node
- linkType: hard
-
"tsconfig-paths@npm:^3.14.1":
version: 3.14.1
resolution: "tsconfig-paths@npm:3.14.1"
@@ -23722,22 +23700,6 @@ __metadata:
languageName: node
linkType: hard
-"vite-tsconfig-paths@npm:^4.3.2":
- version: 4.3.2
- resolution: "vite-tsconfig-paths@npm:4.3.2"
- dependencies:
- debug: "npm:^4.1.1"
- globrex: "npm:^0.1.2"
- tsconfck: "npm:^3.0.3"
- peerDependencies:
- vite: "*"
- peerDependenciesMeta:
- vite:
- optional: true
- checksum: 10c0/f390ac1d1c3992fc5ac50f9274c1090f8b55ab34a89ea88893db9a6924a3b26c9f64bc1163615150ad100749db73b6b2cf1d57f6cd60df6e762ceb5b8ad30024
- languageName: node
- linkType: hard
-
"vite@npm:^5.0.0":
version: 5.2.11
resolution: "vite@npm:5.2.11"