}) => {
+ const [selectedIndex, setSelectedIndex] = useState(0)
+ const { scrollYProgress } = useScrollProgress(sectionRef)
+
+ useEffect(() => {
+ const handleScroll = () => {
+ const newIndex = selectIndex(scrollYProgress.get())
+ setSelectedIndex(newIndex)
+ }
+
+ const unsubscribe = scrollYProgress.on('change', handleScroll)
+
+ return () => {
+ unsubscribe()
+ }
+ }, [scrollYProgress, items.length])
+
+ return (
+
+ {items.map((item, index) => (
+
+ ))}
+
+ )
+}
+
+export default Table
diff --git a/src/components/Wallet/VerticalStack/index.tsx b/src/components/Wallet/VerticalStack/index.tsx
index 3122cc4a..1e7834f8 100644
--- a/src/components/Wallet/VerticalStack/index.tsx
+++ b/src/components/Wallet/VerticalStack/index.tsx
@@ -1,51 +1,42 @@
-import type { DetailedHTMLProps, ReactElement, SourceHTMLAttributes } from 'react'
+import dynamic from 'next/dynamic'
+import { useRef, type DetailedHTMLProps, type SourceHTMLAttributes } from 'react'
import { Container, Grid, Typography } from '@mui/material'
import type { BaseBlock } from '@/components/Home/types'
import layoutCss from '@/components/common/styles.module.css'
import css from './styles.module.css'
+const Table = dynamic(() => import('./Table'))
+
type VideoEmbed = {
sources: Array, HTMLSourceElement>>
}
-export const GridItem = ({ image, title, text }: Partial): ReactElement => (
-
- {image ? : null}
-
- {title}
-
- {text && (
-
- {text}
-
- )}
-
-)
-
-const VerticalStack = ({ title, video, items = [] }: BaseBlock & { video: VideoEmbed }) => (
-
-
-
- {video && (
-
- )}
-
- {title}
-
-
-
-
- {items.map((item, index) => (
-
- ))}
-
-
-
-
-)
+const VerticalStack = ({ title, video, items = [] }: BaseBlock & { video: VideoEmbed }) => {
+ const sectionRef = useRef(null)
+
+ return (
+
+
+
+
+ {video && (
+
+ )}
+
+ {title}
+
+
+
+
+
+
+
+
+ )
+}
export default VerticalStack
diff --git a/src/components/Wallet/VerticalStack/styles.module.css b/src/components/Wallet/VerticalStack/styles.module.css
index 4dbc8ad5..8f194383 100644
--- a/src/components/Wallet/VerticalStack/styles.module.css
+++ b/src/components/Wallet/VerticalStack/styles.module.css
@@ -11,15 +11,45 @@
flex-direction: column;
gap: 16px;
align-items: flex-start;
- padding: 48px 40px;
+ padding: 32px;
text-align: left;
+ position: relative;
}
.video {
width: 144px;
}
+.card.selected::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: 4px;
+ background-color: var(--mui-palette-primary-main);
+}
+
+.selected {
+ color: var(--mui-palette-primary-main);
+}
+
@media (min-width: 900px) {
+ .sectionContainer {
+ height: 240vh;
+ }
+
+ .stickyContainer {
+ height: 100vh;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: flex-start;
+ position: sticky;
+ top: 0;
+ overflow: hidden;
+ }
+
.titleWrapper {
display: flex;
flex-direction: column;