diff --git a/CHANGELOG.md b/CHANGELOG.md
index 597b2c302..1955859b9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -39,6 +39,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Features
+- [#782](https://github.com/alleslabs/celatone-frontend/pull/782) Show proposal details on vote details section tabs
+- [#779](https://github.com/alleslabs/celatone-frontend/pull/779) Proposal period overview voting - no with veto alert
+- [#778](https://github.com/alleslabs/celatone-frontend/pull/778) Proposal period overview voting
+- [#775](https://github.com/alleslabs/celatone-frontend/pull/775) Proposal period overview deposit
+- [#777](https://github.com/alleslabs/celatone-frontend/pull/777) Proposal votes table including filter and search functionality
- [#766](https://github.com/alleslabs/celatone-frontend/pull/766) Proposal status summary body
- [#763](https://github.com/alleslabs/celatone-frontend/pull/763) Proposal status summary top
- [#765](https://github.com/alleslabs/celatone-frontend/pull/765) Support Proposal Cancelled status
@@ -56,6 +61,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Improvements
- [#776](https://github.com/alleslabs/celatone-frontend/pull/776) Add expand/collapse all to proposal messages in detail page
+- [#781](https://github.com/alleslabs/celatone-frontend/pull/781) Tooltip default shouldWrap
- [#774](https://github.com/alleslabs/celatone-frontend/pull/774) Add relevant contract to cosmwasm pool
- [#771](https://github.com/alleslabs/celatone-frontend/pull/771) Adjust proposal detail
- [#772](https://github.com/alleslabs/celatone-frontend/pull/772) Add zod validator to code details page code id params
@@ -69,6 +75,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Bug fixes
+- [#780](https://github.com/alleslabs/celatone-frontend/pull/780) Fix proposal vote table, scroll to top on table
- [#761](https://github.com/alleslabs/celatone-frontend/pull/761) Fix copy button tooltip alignment
- [#754](https://github.com/alleslabs/celatone-frontend/pull/754) Fix mobile guard incorrect behavior
- [#751](https://github.com/alleslabs/celatone-frontend/pull/751) Fix fail txs should have no logs and remove stone-12-1
diff --git a/package.json b/package.json
index 4607cc5eb..29257e5cc 100644
--- a/package.json
+++ b/package.json
@@ -97,7 +97,7 @@
"cosmjs-types": "^0.9.0",
"dayjs": "^1.11.6",
"file-saver": "^2.0.5",
- "framer-motion": "^7.6.12",
+ "framer-motion": "^11.0.3",
"graphql": "^16.6.0",
"graphql-request": "^5.0.0",
"js-base64": "^3.7.4",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 39ba30a15..b15ce61bf 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -31,7 +31,7 @@ dependencies:
version: 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/react':
specifier: 2.8.2
- version: 2.8.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.48)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0)
+ version: 2.8.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.48)(framer-motion@11.0.3)(react-dom@18.2.0)(react@18.2.0)
'@chakra-ui/styled-system':
specifier: ^2.9.2
version: 2.9.2
@@ -103,7 +103,7 @@ dependencies:
version: 4.6.0(monaco-editor@0.44.0)(react-dom@18.2.0)(react@18.2.0)
'@rjsf/chakra-ui':
specifier: v5.0.0-beta.10
- version: 5.0.0-beta.10(@chakra-ui/form-control@2.2.0)(@chakra-ui/icon@3.2.0)(@chakra-ui/icons@2.1.1)(@chakra-ui/layout@2.3.1)(@chakra-ui/media-query@3.3.0)(@chakra-ui/menu@2.2.1)(@chakra-ui/react@2.8.2)(@chakra-ui/spinner@2.1.0)(@chakra-ui/system@2.6.2)(@emotion/react@11.11.3)(@rjsf/core@5.0.0-beta.10)(@rjsf/utils@5.0.0-beta.10)(@types/react@18.2.48)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0)
+ version: 5.0.0-beta.10(@chakra-ui/form-control@2.2.0)(@chakra-ui/icon@3.2.0)(@chakra-ui/icons@2.1.1)(@chakra-ui/layout@2.3.1)(@chakra-ui/media-query@3.3.0)(@chakra-ui/menu@2.2.1)(@chakra-ui/react@2.8.2)(@chakra-ui/spinner@2.1.0)(@chakra-ui/system@2.6.2)(@emotion/react@11.11.3)(@rjsf/core@5.0.0-beta.10)(@rjsf/utils@5.0.0-beta.10)(@types/react@18.2.48)(framer-motion@11.0.3)(react-dom@18.2.0)(react@18.2.0)
'@rjsf/core':
specifier: v5.0.0-beta.10
version: 5.0.0-beta.10(@rjsf/utils@5.0.0-beta.10)(react@18.2.0)
@@ -177,8 +177,8 @@ dependencies:
specifier: ^2.0.5
version: 2.0.5
framer-motion:
- specifier: ^7.6.12
- version: 7.10.3(react-dom@18.2.0)(react@18.2.0)
+ specifier: ^11.0.3
+ version: 11.0.3(react-dom@18.2.0)(react@18.2.0)
graphql:
specifier: ^16.6.0
version: 16.8.1
@@ -1815,7 +1815,7 @@ packages:
'@babel/runtime': 7.23.8
dev: false
- /@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@7.10.3)(react@18.2.0):
+ /@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@11.0.3)(react@18.2.0):
resolution: {integrity: sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag==}
peerDependencies:
'@chakra-ui/system': '>=2.0.0'
@@ -1829,8 +1829,8 @@ packages:
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0)
'@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0)
- '@chakra-ui/transition': 2.1.0(framer-motion@7.10.3)(react@18.2.0)
- framer-motion: 7.10.3(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/transition': 2.1.0(framer-motion@11.0.3)(react@18.2.0)
+ framer-motion: 11.0.3(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
/@chakra-ui/alert@2.2.2(@chakra-ui/system@2.6.2)(react@18.2.0):
@@ -2129,7 +2129,7 @@ packages:
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0)
react: 18.2.0
- /@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@7.10.3)(react@18.2.0):
+ /@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@11.0.3)(react@18.2.0):
resolution: {integrity: sha512-lJS7XEObzJxsOwWQh7yfG4H8FzFPRP5hVPN/CL+JzytEINCSBvsCDHrYPQGp7jzpCi8vnTqQQGQe0f8dwnXd2g==}
peerDependencies:
'@chakra-ui/system': '>=2.0.0'
@@ -2151,11 +2151,11 @@ packages:
'@chakra-ui/react-use-update-effect': 2.1.0(react@18.2.0)
'@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0)
- '@chakra-ui/transition': 2.1.0(framer-motion@7.10.3)(react@18.2.0)
- framer-motion: 7.10.3(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/transition': 2.1.0(framer-motion@11.0.3)(react@18.2.0)
+ framer-motion: 11.0.3(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
- /@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.2.48)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0):
+ /@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.2.48)(framer-motion@11.0.3)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-TQv1ZaiJMZN+rR9DK0snx/OPwmtaGH1HbZtlYt4W4s6CzyK541fxLRTjIXfEzIGpvNW+b6VFuFjbcR78p4DEoQ==}
peerDependencies:
'@chakra-ui/system': '>=2.0.0'
@@ -2171,9 +2171,9 @@ packages:
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0)
'@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0)
- '@chakra-ui/transition': 2.1.0(framer-motion@7.10.3)(react@18.2.0)
+ '@chakra-ui/transition': 2.1.0(framer-motion@11.0.3)(react@18.2.0)
aria-hidden: 1.2.3
- framer-motion: 7.10.3(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 11.0.3(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-remove-scroll: 2.5.7(@types/react@18.2.48)(react@18.2.0)
@@ -2222,7 +2222,7 @@ packages:
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0)
react: 18.2.0
- /@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@7.10.3)(react@18.2.0):
+ /@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.2)(framer-motion@11.0.3)(react@18.2.0):
resolution: {integrity: sha512-K+2ai2dD0ljvJnlrzesCDT9mNzLifE3noGKZ3QwLqd/K34Ym1W/0aL1ERSynrcG78NKoXS54SdEzkhCZ4Gn/Zg==}
peerDependencies:
'@chakra-ui/system': '>=2.0.0'
@@ -2241,7 +2241,7 @@ packages:
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0)
'@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0)
- framer-motion: 7.10.3(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 11.0.3(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
/@chakra-ui/popper@3.1.0(react@18.2.0):
@@ -2481,7 +2481,7 @@ packages:
'@chakra-ui/utils': 2.0.15
react: 18.2.0
- /@chakra-ui/react@2.8.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.48)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0):
+ /@chakra-ui/react@2.8.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.48)(framer-motion@11.0.3)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Hn0moyxxyCDKuR9ywYpqgX8dvjqwu9ArwpIb9wHNYjnODETjLwazgNIliCVBRcJvysGRiV51U2/JtJVrpeCjUQ==}
peerDependencies:
'@emotion/react': ^11.0.0
@@ -2490,7 +2490,7 @@ packages:
react: '>=18'
react-dom: '>=18'
dependencies:
- '@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@7.10.3)(react@18.2.0)
+ '@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@11.0.3)(react@18.2.0)
'@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0)
@@ -2511,11 +2511,11 @@ packages:
'@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/live-region': 2.1.0(react@18.2.0)
'@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2)(react@18.2.0)
- '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@7.10.3)(react@18.2.0)
- '@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.2.48)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@11.0.3)(react@18.2.0)
+ '@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.2)(@types/react@18.2.48)(framer-motion@11.0.3)(react-dom@18.2.0)(react@18.2.0)
'@chakra-ui/number-input': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0)
- '@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@7.10.3)(react@18.2.0)
+ '@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@11.0.3)(react@18.2.0)
'@chakra-ui/popper': 3.1.0(react@18.2.0)
'@chakra-ui/portal': 2.1.0(react-dom@18.2.0)(react@18.2.0)
'@chakra-ui/progress': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0)
@@ -2530,7 +2530,7 @@ packages:
'@chakra-ui/stat': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/stepper': 2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/styled-system': 2.9.2
- '@chakra-ui/switch': 2.1.2(@chakra-ui/system@2.6.2)(framer-motion@7.10.3)(react@18.2.0)
+ '@chakra-ui/switch': 2.1.2(@chakra-ui/system@2.6.2)(framer-motion@11.0.3)(react@18.2.0)
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0)
'@chakra-ui/table': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/tabs': 3.0.0(@chakra-ui/system@2.6.2)(react@18.2.0)
@@ -2538,14 +2538,14 @@ packages:
'@chakra-ui/textarea': 2.1.2(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2)
'@chakra-ui/theme-utils': 2.0.21
- '@chakra-ui/toast': 7.0.2(@chakra-ui/system@2.6.2)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0)
- '@chakra-ui/tooltip': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0)
- '@chakra-ui/transition': 2.1.0(framer-motion@7.10.3)(react@18.2.0)
+ '@chakra-ui/toast': 7.0.2(@chakra-ui/system@2.6.2)(framer-motion@11.0.3)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/tooltip': 2.3.1(@chakra-ui/system@2.6.2)(framer-motion@11.0.3)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/transition': 2.1.0(framer-motion@11.0.3)(react@18.2.0)
'@chakra-ui/utils': 2.0.15
'@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2)(react@18.2.0)
'@emotion/react': 11.11.3(@types/react@18.2.48)(react@18.2.0)
'@emotion/styled': 11.11.0(@emotion/react@11.11.3)(@types/react@18.2.48)(react@18.2.0)
- framer-motion: 7.10.3(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 11.0.3(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
transitivePeerDependencies:
@@ -2655,7 +2655,7 @@ packages:
react-dom:
optional: true
dependencies:
- '@chakra-ui/react': 2.8.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.48)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/react': 2.8.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.48)(framer-motion@11.0.3)(react-dom@18.2.0)(react@18.2.0)
'@storybook/components': 7.6.9(@types/react-dom@18.2.18)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0)
'@storybook/manager-api': 7.6.9(react-dom@18.2.0)(react@18.2.0)
'@storybook/preview-api': 7.6.9
@@ -2671,7 +2671,7 @@ packages:
csstype: 3.1.3
lodash.mergewith: 4.6.2
- /@chakra-ui/switch@2.1.2(@chakra-ui/system@2.6.2)(framer-motion@7.10.3)(react@18.2.0):
+ /@chakra-ui/switch@2.1.2(@chakra-ui/system@2.6.2)(framer-motion@11.0.3)(react@18.2.0):
resolution: {integrity: sha512-pgmi/CC+E1v31FcnQhsSGjJnOE2OcND4cKPyTE+0F+bmGm48Q/b5UmKD9Y+CmZsrt/7V3h8KNczowupfuBfIHA==}
peerDependencies:
'@chakra-ui/system': '>=2.0.0'
@@ -2681,7 +2681,7 @@ packages:
'@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0)
- framer-motion: 7.10.3(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 11.0.3(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
/@chakra-ui/system@2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0):
@@ -2781,7 +2781,7 @@ packages:
'@chakra-ui/styled-system': 2.9.2
'@chakra-ui/theme-tools': 2.1.2(@chakra-ui/styled-system@2.9.2)
- /@chakra-ui/toast@7.0.2(@chakra-ui/system@2.6.2)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0):
+ /@chakra-ui/toast@7.0.2(@chakra-ui/system@2.6.2)(framer-motion@11.0.3)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-yvRP8jFKRs/YnkuE41BVTq9nB2v/KDRmje9u6dgDmE5+1bFt3bwjdf9gVbif4u5Ve7F7BGk5E093ARRVtvLvXA==}
peerDependencies:
'@chakra-ui/system': 2.6.2
@@ -2799,11 +2799,11 @@ packages:
'@chakra-ui/styled-system': 2.9.2
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0)
'@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2)
- framer-motion: 7.10.3(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 11.0.3(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- /@chakra-ui/tooltip@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0):
+ /@chakra-ui/tooltip@2.3.1(@chakra-ui/system@2.6.2)(framer-motion@11.0.3)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Rh39GBn/bL4kZpuEMPPRwYNnccRCL+w9OqamWHIB3Qboxs6h8cOyXfIdGxjo72lvhu1QI/a4KFqkM3St+WfC0A==}
peerDependencies:
'@chakra-ui/system': '>=2.0.0'
@@ -2820,18 +2820,18 @@ packages:
'@chakra-ui/react-use-merge-refs': 2.1.0(react@18.2.0)
'@chakra-ui/shared-utils': 2.0.5
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0)
- framer-motion: 7.10.3(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 11.0.3(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- /@chakra-ui/transition@2.1.0(framer-motion@7.10.3)(react@18.2.0):
+ /@chakra-ui/transition@2.1.0(framer-motion@11.0.3)(react@18.2.0):
resolution: {integrity: sha512-orkT6T/Dt+/+kVwJNy7zwJ+U2xAZ3EU7M3XCs45RBvUnZDr/u9vdmaM/3D/rOpmQJWgQBwKPJleUXrYWUagEDQ==}
peerDependencies:
framer-motion: '>=4.0.0'
react: '>=18'
dependencies:
'@chakra-ui/shared-utils': 2.0.5
- framer-motion: 7.10.3(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 11.0.3(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
/@chakra-ui/utils@2.0.15:
@@ -5426,47 +5426,6 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@motionone/animation@10.17.0:
- resolution: {integrity: sha512-ANfIN9+iq1kGgsZxs+Nz96uiNcPLGTXwfNo2Xz/fcJXniPYpaz/Uyrfa+7I5BPLxCP82sh7quVDudf1GABqHbg==}
- dependencies:
- '@motionone/easing': 10.17.0
- '@motionone/types': 10.17.0
- '@motionone/utils': 10.17.0
- tslib: 2.4.0
-
- /@motionone/dom@10.17.0:
- resolution: {integrity: sha512-cMm33swRlCX/qOPHWGbIlCl0K9Uwi6X5RiL8Ma6OrlJ/TP7Q+Np5GE4xcZkFptysFjMTi4zcZzpnNQGQ5D6M0Q==}
- dependencies:
- '@motionone/animation': 10.17.0
- '@motionone/generators': 10.17.0
- '@motionone/types': 10.17.0
- '@motionone/utils': 10.17.0
- hey-listen: 1.0.8
- tslib: 2.4.0
-
- /@motionone/easing@10.17.0:
- resolution: {integrity: sha512-Bxe2wSuLu/qxqW4rBFS5m9tMLOw+QBh8v5A7Z5k4Ul4sTj5jAOfZG5R0bn5ywmk+Fs92Ij1feZ5pmC4TeXA8Tg==}
- dependencies:
- '@motionone/utils': 10.17.0
- tslib: 2.4.0
-
- /@motionone/generators@10.17.0:
- resolution: {integrity: sha512-T6Uo5bDHrZWhIfxG/2Aut7qyWQyJIWehk6OB4qNvr/jwA/SRmixwbd7SOrxZi1z5rH3LIeFFBKK1xHnSbGPZSQ==}
- dependencies:
- '@motionone/types': 10.17.0
- '@motionone/utils': 10.17.0
- tslib: 2.4.0
-
- /@motionone/types@10.17.0:
- resolution: {integrity: sha512-EgeeqOZVdRUTEHq95Z3t8Rsirc7chN5xFAPMYFobx8TPubkEfRSm5xihmMUkbaR2ErKJTUw3347QDPTHIW12IA==}
-
- /@motionone/utils@10.17.0:
- resolution: {integrity: sha512-bGwrki4896apMWIj9yp5rAS2m0xyhxblg6gTB/leWDPt+pb410W8lYWsxyurX+DH+gO1zsQsfx2su/c1/LtTpg==}
- dependencies:
- '@motionone/types': 10.17.0
- hey-listen: 1.0.8
- tslib: 2.4.0
-
/@mysten/bcs@0.8.1:
resolution: {integrity: sha512-wSEdP7QEfGQdb34g+7R0f3OdRqrv88iIABfJVDVJ6IsGLYVILreh8dZfNpZNUUyzctiyhX7zB9e/lR5qkddFPA==}
dependencies:
@@ -7639,7 +7598,7 @@ packages:
resolution: {integrity: sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==}
dev: false
- /@rjsf/chakra-ui@5.0.0-beta.10(@chakra-ui/form-control@2.2.0)(@chakra-ui/icon@3.2.0)(@chakra-ui/icons@2.1.1)(@chakra-ui/layout@2.3.1)(@chakra-ui/media-query@3.3.0)(@chakra-ui/menu@2.2.1)(@chakra-ui/react@2.8.2)(@chakra-ui/spinner@2.1.0)(@chakra-ui/system@2.6.2)(@emotion/react@11.11.3)(@rjsf/core@5.0.0-beta.10)(@rjsf/utils@5.0.0-beta.10)(@types/react@18.2.48)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0):
+ /@rjsf/chakra-ui@5.0.0-beta.10(@chakra-ui/form-control@2.2.0)(@chakra-ui/icon@3.2.0)(@chakra-ui/icons@2.1.1)(@chakra-ui/layout@2.3.1)(@chakra-ui/media-query@3.3.0)(@chakra-ui/menu@2.2.1)(@chakra-ui/react@2.8.2)(@chakra-ui/spinner@2.1.0)(@chakra-ui/system@2.6.2)(@emotion/react@11.11.3)(@rjsf/core@5.0.0-beta.10)(@rjsf/utils@5.0.0-beta.10)(@types/react@18.2.48)(framer-motion@11.0.3)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-WHTOLrim5SgSR6rfxr+gu2fjIo69W0mL6dYngI9mI6Ep7xlpA9OLtE/njDDnwMczTVo4MkbCx/D1y5eqPeZyoQ==}
engines: {node: '>=14'}
peerDependencies:
@@ -7651,11 +7610,11 @@ packages:
react: ^16.14.0 || >=17
dependencies:
'@chakra-ui/icons': 2.1.1(@chakra-ui/system@2.6.2)(react@18.2.0)
- '@chakra-ui/react': 2.8.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.48)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/react': 2.8.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.48)(framer-motion@11.0.3)(react-dom@18.2.0)(react@18.2.0)
'@rjsf/core': 5.0.0-beta.10(@rjsf/utils@5.0.0-beta.10)(react@18.2.0)
'@rjsf/utils': 5.0.0-beta.10(react@18.2.0)
chakra-react-select: 4.7.6(@chakra-ui/form-control@2.2.0)(@chakra-ui/icon@3.2.0)(@chakra-ui/layout@2.3.1)(@chakra-ui/media-query@3.3.0)(@chakra-ui/menu@2.2.1)(@chakra-ui/spinner@2.1.0)(@chakra-ui/system@2.6.2)(@emotion/react@11.11.3)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0)
- framer-motion: 7.10.3(react-dom@18.2.0)(react@18.2.0)
+ framer-motion: 11.0.3(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-select: 5.8.0(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0)
transitivePeerDependencies:
@@ -11373,7 +11332,7 @@ packages:
'@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2)(react@18.2.0)
- '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@7.10.3)(react@18.2.0)
+ '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2)(framer-motion@11.0.3)(react@18.2.0)
'@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2)(react@18.2.0)
'@chakra-ui/system': 2.6.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0)
'@emotion/react': 11.11.3(@types/react@18.2.48)(react@18.2.0)
@@ -11390,7 +11349,7 @@ packages:
'@chakra-ui/react': ^1.6.1 || ^2
react-markdown: ^7 || ^8
dependencies:
- '@chakra-ui/react': 2.8.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.48)(framer-motion@7.10.3)(react-dom@18.2.0)(react@18.2.0)
+ '@chakra-ui/react': 2.8.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.48)(framer-motion@11.0.3)(react-dom@18.2.0)(react@18.2.0)
deepmerge: 4.3.1
react-markdown: 9.0.1(@types/react@18.2.48)(react@18.2.0)
dev: false
@@ -13873,17 +13832,20 @@ packages:
engines: {node: '>= 0.6'}
dev: true
- /framer-motion@7.10.3(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-k2ccYeZNSpPg//HTaqrU+4pRq9f9ZpaaN7rr0+Rx5zA4wZLbk547wtDzge2db1sB+1mnJ6r59P4xb+aEIi/W+w==}
+ /framer-motion@11.0.3(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-6x2poQpIWBdbZwLd73w6cKZ1I9IEPIU94C6/Swp1Zt3LJ+sB5bPe1E2wC6EH5hSISXNkMJ4afH7AdwS7MrtkWw==}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
+ peerDependenciesMeta:
+ react:
+ optional: true
+ react-dom:
+ optional: true
dependencies:
- '@motionone/dom': 10.17.0
- hey-listen: 1.0.8
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- tslib: 2.4.0
+ tslib: 2.6.2
optionalDependencies:
'@emotion/is-prop-valid': 0.8.8
@@ -14411,9 +14373,6 @@ packages:
tslib: 2.6.2
dev: false
- /hey-listen@1.0.8:
- resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==}
-
/hmac-drbg@1.0.1:
resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==}
dependencies:
diff --git a/src/lib/app-provider/env.ts b/src/lib/app-provider/env.ts
index dfdcae140..b959c86e3 100644
--- a/src/lib/app-provider/env.ts
+++ b/src/lib/app-provider/env.ts
@@ -53,7 +53,9 @@ export enum CELATONE_QUERY_KEYS {
// X/GOV
PROPOSAL_DATA = "CELATONE_QUERY_PROPOSAL_DATA",
PROPOSAL_VALIDATOR_VOTES_INFO = "CELATONE_QUERY_PROPOSAL_VALIDATOR_VOTES_INFO",
+ PROPOSAL_VOTES = "CELATONE_QUERY_PROPOSAL_VOTES",
PROPOSAL_VALIDATOR_VOTES = "CELATONE_QUERY_PROPOSAL_VALIDATOR_VOTES",
+ PROPOSAL_ANSWER_COUNTS = "CELATONE_QUERY_PROPOSAL_ANSWER_COUNTS",
RELATED_PROPOSALS_BY_CONTRACT_ADDRESS = "CELATONE_QUERY_RELATED_PROPOSALS_BY_CONTRACT_ADDRESS",
PROPOSALS_BY_MODULE_ID = "CELATONE_QUERY_PROPOSALS_BY_MODULE_ID",
PROPOSALS_COUNT_BY_MODULE_ID = "CELATONE_QUERY_PROPOSALS_COUNT_BY_MODULE_ID",
diff --git a/src/lib/components/PrimaryNameMark.tsx b/src/lib/components/PrimaryNameMark.tsx
index d1676eabe..a734a654a 100644
--- a/src/lib/components/PrimaryNameMark.tsx
+++ b/src/lib/components/PrimaryNameMark.tsx
@@ -3,8 +3,6 @@ import { Tooltip } from "lib/components/Tooltip";
export const PrimaryNameMark = () => (
-
-
-
+
);
diff --git a/src/lib/components/Tooltip.tsx b/src/lib/components/Tooltip.tsx
index e110ff274..7a01ba290 100644
--- a/src/lib/components/Tooltip.tsx
+++ b/src/lib/components/Tooltip.tsx
@@ -1,5 +1,5 @@
import type { TooltipProps } from "@chakra-ui/react";
-import { Flex, Tooltip as ChakraTooltip } from "@chakra-ui/react";
+import { Tooltip as ChakraTooltip } from "@chakra-ui/react";
import { CustomIcon } from "./icon";
@@ -11,6 +11,7 @@ export const Tooltip = ({
hasArrow
placement={placement}
arrowSize={8}
+ shouldWrapChildren
{...tooltipProps}
/>
);
@@ -23,14 +24,13 @@ export const TooltipInfo = ({
iconVariant = "default",
...tooltipProps
}: TooltipInfoProps) => (
-
-
-
-
+
+
);
diff --git a/src/lib/components/ValidatorBadge.tsx b/src/lib/components/ValidatorBadge.tsx
index f1c2ec92d..e6b7d66e4 100644
--- a/src/lib/components/ValidatorBadge.tsx
+++ b/src/lib/components/ValidatorBadge.tsx
@@ -14,6 +14,7 @@ interface ValidatorBadgeProps {
ampCopierSection?: string;
maxWidth?: string;
hasLabel?: boolean;
+ moreInfo?: JSX.Element;
}
const FallbackRender = ({
@@ -40,6 +41,7 @@ export const ValidatorBadge = ({
ampCopierSection,
maxWidth = "160px",
hasLabel = true,
+ moreInfo,
}: ValidatorBadgeProps) => {
const { data: valImgSrc, isLoading } = useValidatorImage(validator);
const isMobile = useMobile();
@@ -71,6 +73,7 @@ export const ValidatorBadge = ({
maxWidth={maxWidth}
fixedHeight
/>
+ {moreInfo}
>
) : (
diff --git a/src/lib/components/delegations/total-card/TotalCardTop.tsx b/src/lib/components/delegations/total-card/TotalCardTop.tsx
index a7bd4d10a..d7c17282c 100644
--- a/src/lib/components/delegations/total-card/TotalCardTop.tsx
+++ b/src/lib/components/delegations/total-card/TotalCardTop.tsx
@@ -1,8 +1,7 @@
import type { TextProps } from "@chakra-ui/react";
import { Flex, Text } from "@chakra-ui/react";
-import { CustomIcon } from "lib/components/icon";
-import { Tooltip } from "lib/components/Tooltip";
+import { TooltipInfo } from "lib/components/Tooltip";
interface TotalCardTopProps {
title: string;
@@ -19,15 +18,6 @@ export const TotalCardTop = ({
{title}
-
-
-
-
-
+
);
diff --git a/src/lib/components/forms/SelectInput.tsx b/src/lib/components/forms/SelectInput.tsx
index 574f7113c..8ff8056bf 100644
--- a/src/lib/components/forms/SelectInput.tsx
+++ b/src/lib/components/forms/SelectInput.tsx
@@ -34,6 +34,7 @@ interface SelectInputProps {
hasDivider?: boolean;
helperTextComponent?: ReactNode;
labelBgColor?: string;
+ popoverBgColor?: string;
size?: string | object;
}
@@ -69,6 +70,7 @@ export const SelectInput = ({
hasDivider = false,
helperTextComponent,
labelBgColor = "background.main",
+ popoverBgColor = "gray.900",
size = "lg",
}: SelectInputProps) => {
const inputRef = useRef() as MutableRefObject;
@@ -149,7 +151,7 @@ export const SelectInput = ({
+ ),
+ viewBox: viewboxDefault,
+ },
close: {
svg: (
diff --git a/src/lib/pages/proposals/index.tsx b/src/lib/pages/proposals/index.tsx
index 124176f00..8cc2755fb 100644
--- a/src/lib/pages/proposals/index.tsx
+++ b/src/lib/pages/proposals/index.tsx
@@ -118,35 +118,33 @@ const Proposals = () => {
maxW="240px"
textAlign="center"
>
-
- {
- if (e.target.checked && address) {
- track(AmpEvent.USE_FILTER_MY_PROPOSALS, {
- toggle: "on",
- });
- setProposer(address);
- } else {
- track(AmpEvent.USE_FILTER_MY_PROPOSALS, {
- toggle: "off",
- });
- setProposer(undefined);
- }
- }}
- >
-
- My Proposals
-
-
-
+ {
+ if (e.target.checked && address) {
+ track(AmpEvent.USE_FILTER_MY_PROPOSALS, {
+ toggle: "on",
+ });
+ setProposer(address);
+ } else {
+ track(AmpEvent.USE_FILTER_MY_PROPOSALS, {
+ toggle: "off",
+ });
+ setProposer(undefined);
+ }
+ }}
+ >
+
+ My Proposals
+
+
)}
diff --git a/src/lib/services/proposal.ts b/src/lib/services/proposal.ts
index 4fa226606..440257776 100644
--- a/src/lib/services/proposal.ts
+++ b/src/lib/services/proposal.ts
@@ -279,12 +279,15 @@ const zProposalVotesResponseItem = z
no_with_veto: z.number().nonnegative(),
yes: z.number().nonnegative(),
is_vote_weighted: z.boolean(),
- validator: zValidator,
+ validator: zValidator.nullable(),
voter: zBechAddr.nullable(),
timestamp: zUtcDate.nullable(),
tx_hash: z.string().nullable(),
})
- .transform(snakeToCamel);
+ .transform((val) => ({
+ ...snakeToCamel(val),
+ txHash: val.tx_hash ? parseTxHash(val.tx_hash) : null,
+ }));
const zProposalVotesResponse = z.object({
items: z.array(zProposalVotesResponseItem),
@@ -299,3 +302,49 @@ export const getProposalValidatorVotes = async (
axios
.get(`${endpoint}/${encodeURIComponent(id)}/validator-votes`)
.then(({ data }) => zProposalVotesResponse.parse(data));
+
+export const getProposalVotes = async (
+ endpoint: string,
+ id: number,
+ limit: number,
+ offset: number,
+ answer?: string,
+ search?: string
+): Promise => {
+ let url = `${endpoint}/${encodeURIComponent(id)}/votes?limit=${limit}&offset=${offset}`;
+ url = url.concat(search ? `&search=${encodeURIComponent(search)}` : "");
+ url = url.concat(answer ? `&answer=${encodeURIComponent(answer)}` : "");
+
+ return axios.get(url).then(({ data }) => zProposalVotesResponse.parse(data));
+};
+
+const zProposalAnswerCounts = z.object({
+ yes: z.number().nonnegative(),
+ abstain: z.number().nonnegative(),
+ no: z.number().nonnegative(),
+ no_with_veto: z.number().nonnegative(),
+ total: z.number().nonnegative(),
+ weighted: z.number().nonnegative(),
+});
+
+const zProposalAnswerCountsResponse = z
+ .object({
+ all: zProposalAnswerCounts,
+ validator: zProposalAnswerCounts,
+ })
+ .transform(snakeToCamel);
+
+export type ProposalAnswerCountsResponse = z.infer<
+ typeof zProposalAnswerCountsResponse
+>;
+
+export const getProposalAnswerCounts = async (
+ endpoint: string,
+ id: number,
+ validatorOnly: boolean
+): Promise =>
+ axios
+ .get(
+ `${endpoint}/${encodeURIComponent(id)}/answer-counts?validator=${validatorOnly}`
+ )
+ .then(({ data }) => zProposalAnswerCountsResponse.parse(data));
diff --git a/src/lib/services/proposalService.ts b/src/lib/services/proposalService.ts
index e867de4ad..6e278cc10 100644
--- a/src/lib/services/proposalService.ts
+++ b/src/lib/services/proposalService.ts
@@ -41,6 +41,7 @@ import { useAssetInfos } from "./assetService";
import { useMovePoolInfos } from "./move";
import type {
DepositParamsInternal,
+ ProposalAnswerCountsResponse,
ProposalDataResponse,
ProposalVotesResponse,
ProposalsResponse,
@@ -57,6 +58,8 @@ import {
getProposalData,
getProposalParams,
getProposalTypes,
+ getProposalAnswerCounts,
+ getProposalVotes,
getProposalValidatorVotes,
getProposalVotesInfo,
getRelatedProposalsByContractAddress,
@@ -359,3 +362,40 @@ export const useProposalValidatorVotes = (id: number) => {
{ retry: 1, refetchOnWindowFocus: false }
);
};
+
+export const useProposalVotes = (
+ id: number,
+ limit: number,
+ offset: number,
+ answer?: string,
+ search?: string
+): UseQueryResult => {
+ const endpoint = useBaseApiRoute("proposals");
+
+ return useQuery(
+ [
+ CELATONE_QUERY_KEYS.PROPOSAL_VOTES,
+ endpoint,
+ id,
+ limit,
+ offset,
+ search,
+ answer,
+ ],
+ async () => getProposalVotes(endpoint, id, limit, offset, answer, search),
+ { retry: 1, refetchOnWindowFocus: false }
+ );
+};
+
+export const useProposalAnswerCounts = (
+ id: number,
+ validatorOnly = false
+): UseQueryResult => {
+ const endpoint = useBaseApiRoute("proposals");
+
+ return useQuery(
+ [CELATONE_QUERY_KEYS.PROPOSAL_ANSWER_COUNTS, endpoint, id, validatorOnly],
+ async () => getProposalAnswerCounts(endpoint, id, validatorOnly),
+ { retry: 1, refetchOnWindowFocus: false }
+ );
+};
diff --git a/src/lib/styles/theme/components/heading.ts b/src/lib/styles/theme/components/heading.ts
index 516d4a5e0..55068c5f5 100644
--- a/src/lib/styles/theme/components/heading.ts
+++ b/src/lib/styles/theme/components/heading.ts
@@ -45,5 +45,11 @@ export const Heading: ComponentStyleConfig = {
lineHeight: 1.2,
letterSpacing: "0.15px",
},
+ h7: {
+ fontSize: "16px",
+ fontWeight: 500,
+ lineHeight: 1.2,
+ letterSpacing: "0px",
+ },
},
};
diff --git a/src/lib/types/proposal.ts b/src/lib/types/proposal.ts
index 846a11df7..69b6b84a7 100644
--- a/src/lib/types/proposal.ts
+++ b/src/lib/types/proposal.ts
@@ -143,7 +143,7 @@ export interface ProposalVote {
noWithVeto: number;
yes: number;
isVoteWeighted: boolean;
- validator: Validator;
+ validator: Nullable;
voter: Nullable;
timestamp: Nullable;
txHash: Nullable;
diff --git a/src/lib/utils/formatter/percentage.ts b/src/lib/utils/formatter/percentage.ts
index 0b1e99fde..1654332a8 100644
--- a/src/lib/utils/formatter/percentage.ts
+++ b/src/lib/utils/formatter/percentage.ts
@@ -29,3 +29,13 @@ export const formatPercent = (value: Percent): string => {
*/
export const formatRatio = (ratio: Ratio): string =>
formatPercent(big(ratio).times(100) as Percent);
+
+export const formatPrettyPercent = (ratio: number, fp = 2, fixedFp = false) => {
+ const lowestPercent = 10 ** -fp;
+
+ const percent = ratio * 100;
+ if (percent > 0 && percent < lowestPercent) return `<${lowestPercent}%`;
+
+ const rounded = big(percent).round(fp);
+ return `${fixedFp ? rounded.toFixed(fp) : rounded.toNumber()}%`;
+};
diff --git a/src/lib/utils/formatter/token.test.ts b/src/lib/utils/formatter/token.test.ts
index e95317a10..c7a454e04 100644
--- a/src/lib/utils/formatter/token.test.ts
+++ b/src/lib/utils/formatter/token.test.ts
@@ -12,6 +12,7 @@ import {
formatUTokenWithPrecision,
formatPrice,
formatInteger,
+ d0Formatter,
} from "./token";
const FALLBACK = "fallback";
@@ -107,6 +108,18 @@ describe("formatDecimal", () => {
});
});
+describe("d0Formatter", () => {
+ test("from string", () => {
+ expect(d0Formatter("-1234.5678", FALLBACK)).toEqual("-1,234");
+ expect(d0Formatter("1234", FALLBACK)).toEqual("1,234");
+ });
+ test("from number", () => {
+ expect(d0Formatter(1234.5, FALLBACK)).toEqual("1,234");
+ expect(d0Formatter(1234, FALLBACK)).toEqual("1,234");
+ expect(d0Formatter(-1234.5, FALLBACK)).toEqual("-1,234");
+ });
+});
+
describe("d2Formatter", () => {
test("from string", () => {
expect(d2Formatter("-1234.5678", FALLBACK)).toEqual("-1,234.56");
diff --git a/src/lib/utils/formatter/token.ts b/src/lib/utils/formatter/token.ts
index e5a29c488..d4606c68e 100644
--- a/src/lib/utils/formatter/token.ts
+++ b/src/lib/utils/formatter/token.ts
@@ -42,6 +42,7 @@ export const formatDecimal =
}
};
+export const d0Formatter = formatDecimal({ decimalPoints: 0, delimiter: true });
export const d2Formatter = formatDecimal({ decimalPoints: 2, delimiter: true });
export const d6Formatter = formatDecimal({ decimalPoints: 6, delimiter: true });