diff --git a/packages/extension/src/ui/action/components/app-menu/index.vue b/packages/extension/src/ui/action/components/app-menu/index.vue index ce5d1c027..1b7d11aa2 100644 --- a/packages/extension/src/ui/action/components/app-menu/index.vue +++ b/packages/extension/src/ui/action/components/app-menu/index.vue @@ -40,6 +40,7 @@ +
+ + + { (appMenuRef.value as HTMLElement).style.background = `radial-gradient(137.35% 97% at 100% 50%, rgba(250, 250, 250, 0.94) 0%, rgba(250, 250, 250, 0.96) 28.91%, rgba(250, 250, 250, 0.98) 100%), linear-gradient(180deg, ${newGradient} 80%, #684CFF 100%)`; }; + +/** ------------------ + * Swap Button + ------------------*/ +const route = useRoute(); +const router = useRouter(); +const openSwap = () => { + try { + router.push({ + name: 'swap', + params: { + id: route.params.id, + }, + }); + } catch (e) { + console.error('Error opening swap:', e); + } +}; diff --git a/packages/extension/src/ui/action/icons/common/warning-icon.vue b/packages/extension/src/ui/action/icons/common/warning-icon.vue new file mode 100644 index 000000000..16df6890b --- /dev/null +++ b/packages/extension/src/ui/action/icons/common/warning-icon.vue @@ -0,0 +1,23 @@ + + + diff --git a/packages/extension/src/ui/action/styles/color.less b/packages/extension/src/ui/action/styles/color.less index 139ff62c4..eb65156fa 100644 --- a/packages/extension/src/ui/action/styles/color.less +++ b/packages/extension/src/ui/action/styles/color.less @@ -2,6 +2,7 @@ @primary01: rgba(5, 192, 165, 0.1); @primaryLight: rgba(104, 76, 255, 0.1); @primary007: rgba(104, 76, 255, 0.07); +@primaryDarker: rgba(96, 60, 240, 1); @primaryLabel: #202124; @secondaryLabel: #5f6368; @@ -15,6 +16,8 @@ @grayPrimary: rgba(95, 99, 104, 1); @gray01: rgba(95, 99, 104, 0.1); @gray02: rgba(95, 99, 104, 0.2); +@grey08: rgba(0, 0, 0, 0.08); +@grey16: rgba(242, 244, 247, 1); @white07: rgba(255, 255, 255, 0.7); @white09: rgba(255, 255, 255, 0.9); @error: #f4432c; @@ -28,6 +31,7 @@ @buttonBg: #f2f4f7; @hoverItemBg: #f9fafb; @lightBg: #f9fafb; +@lightSurfaceBg: rgba(249, 250, 251, 1); @tipBg: #fff7b2; @overlayBg: rgba(0, 0, 0, 0.3); @introHeaderBg: #f9fafb; diff --git a/packages/extension/src/ui/action/styles/theme.less b/packages/extension/src/ui/action/styles/theme.less index 4f03d08ef..b578810ba 100644 --- a/packages/extension/src/ui/action/styles/theme.less +++ b/packages/extension/src/ui/action/styles/theme.less @@ -8,3 +8,15 @@ -ms-user-select: none; user-select: none; } +.skeleton { + animation: skeleton-loading 1s linear infinite alternate; +} + +@keyframes skeleton-loading { + 0% { + background-color: @gray01; + } + 100% { + background-color: @lightSurfaceBg; + } +} diff --git a/packages/extension/src/ui/action/views/swap/components/swap-address-select/components/address-item.vue b/packages/extension/src/ui/action/views/swap/components/swap-address-select/components/address-item.vue new file mode 100644 index 000000000..4c3e58e98 --- /dev/null +++ b/packages/extension/src/ui/action/views/swap/components/swap-address-select/components/address-item.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/packages/extension/src/ui/action/views/swap/components/swap-address-select/index.vue b/packages/extension/src/ui/action/views/swap/components/swap-address-select/index.vue new file mode 100644 index 000000000..74b493084 --- /dev/null +++ b/packages/extension/src/ui/action/views/swap/components/swap-address-select/index.vue @@ -0,0 +1,409 @@ + + + + + diff --git a/packages/extension/src/ui/action/views/swap/components/swap-network-select/index.vue b/packages/extension/src/ui/action/views/swap/components/swap-network-select/index.vue index 6e7431406..6a3e78cc9 100644 --- a/packages/extension/src/ui/action/views/swap/components/swap-network-select/index.vue +++ b/packages/extension/src/ui/action/views/swap/components/swap-network-select/index.vue @@ -1,19 +1,23 @@ diff --git a/packages/extension/src/ui/action/views/swap/components/swap-token-amount-input/components/swap-token-amount-input.vue b/packages/extension/src/ui/action/views/swap/components/swap-token-amount-input/components/swap-token-amount-input.vue index b086aa495..d3e91a0c0 100644 --- a/packages/extension/src/ui/action/views/swap/components/swap-token-amount-input/components/swap-token-amount-input.vue +++ b/packages/extension/src/ui/action/views/swap/components/swap-token-amount-input/components/swap-token-amount-input.vue @@ -97,14 +97,14 @@ const onlyNumber = ($event: KeyboardEvent) => { outline: none; background: @white; margin: 0; - padding: 0 76px 0 16px; + padding: 0px 10px 0px 0; font-style: normal; font-weight: 400; - font-size: 34px; + font-size: 32px; line-height: 40px; letter-spacing: 0.25px; color: @primaryLabel; - width: 100%; + width: 230px; box-sizing: border-box; border: 0 none; -moz-appearance: textfield; diff --git a/packages/extension/src/ui/action/views/swap/components/swap-token-amount-input/index.vue b/packages/extension/src/ui/action/views/swap/components/swap-token-amount-input/index.vue index 28051b97e..9838840c4 100644 --- a/packages/extension/src/ui/action/views/swap/components/swap-token-amount-input/index.vue +++ b/packages/extension/src/ui/action/views/swap/components/swap-token-amount-input/index.vue @@ -1,31 +1,35 @@ @@ -43,7 +47,7 @@ defineEmits<{ interface IProps { value: string; - token: TokenType; + token: TokenType | null; autofocus: boolean; errorMessage?: string; } @@ -53,13 +57,20 @@ const props = defineProps(); const isFocus = ref(false); const tokenPrice = computed(() => { - if (props.value !== '') { + if (props.value !== '' && props.token) { const Token = new SwapToken(props.token); return Token.getReadableToFiat(props.value); } return 0; }); +const tokenBalance = computed(() => { + if (!props.token) { + return 0; + } + return new SwapToken(props.token).getBalanceReadable(); +}); + const changeFocus = (newVal: boolean) => { isFocus.value = newVal; }; @@ -69,47 +80,41 @@ const changeFocus = (newVal: boolean) => { @import '@action/styles/theme.less'; .swap-token-input { width: 100%; - min-height: 125px; - border: 1px solid rgba(95, 99, 104, 0.2); + height: 100px; + border: 1px solid @grey08; box-sizing: border-box; border-radius: 10px; position: relative; + background-color: @white; + padding: 16px; + &__row { + display: flex; + justify-content: space-between; + align-items: center; + } &.focus { border: 1px solid @primary; } - &__max { - padding: 4px 8px; - text-decoration: none; - position: absolute; - width: 41px; - height: 24px; - right: 18px; - bottom: 30px; - background: rgba(0, 0, 0, 0.02); - border-radius: 6px; - cursor: pointer; - font-style: normal; - font-weight: 500; - font-size: 12px; - line-height: 16px; - letter-spacing: 0.8px; - box-sizing: border-box; - color: @primaryLabel; - } - - &__fiat { + &__secondary-label { font-style: normal; font-weight: 400; font-size: 14px; line-height: 20px; - text-align: center; letter-spacing: 0.25px; - color: @secondaryLabel; - position: absolute; - left: 16px; - bottom: 6px; + padding-top: 8px; + padding-left: 2px; + &__fiat { + color: @black06; + } + &__balance { + color: @black06; + margin-left: auto; + .focus { + color: @primaryDarker; + } + } } &__invalid { diff --git a/packages/extension/src/ui/action/views/swap/components/swap-token-select/index.vue b/packages/extension/src/ui/action/views/swap/components/swap-token-select/index.vue index 6f1be6c1c..e05520b8b 100644 --- a/packages/extension/src/ui/action/views/swap/components/swap-token-select/index.vue +++ b/packages/extension/src/ui/action/views/swap/components/swap-token-select/index.vue @@ -1,42 +1,40 @@