diff --git a/src/components/ShowMoreOptionsBanner.tsx b/src/components/ShowMoreOptionsBanner.tsx
deleted file mode 100644
index 3fbdc6c..0000000
--- a/src/components/ShowMoreOptionsBanner.tsx
+++ /dev/null
@@ -1,56 +0,0 @@
-import { ChevronDownIcon } from 'lucide-react'
-import { startTransition, useEffect } from 'react'
-import { usePersistedStore } from '../../store/persisted'
-
-export default function ShowMoreOptionsBanner() {
- const acknowledgements = usePersistedStore((state) => state.acknowledgements)
-
- const showMoreOptions = !acknowledgements.includes('showMoreOptions')
-
- useEffect(() => {
- if (acknowledgements.includes('showMoreOptions')) return
-
- const handleScroll = () => {
- usePersistedStore.setState((prev) => {
- if (prev.acknowledgements.includes('showMoreOptions')) return prev
- return {
- acknowledgements: [...prev.acknowledgements, 'showMoreOptions'],
- }
- })
- }
-
- window.addEventListener('scroll', handleScroll, { once: true })
-
- return () => {
- window.removeEventListener('scroll', handleScroll)
- }
- }, [acknowledgements])
-
- if (!showMoreOptions) return null
-
- return (
-
{
- startTransition(() => {
- usePersistedStore.setState((prev) => ({
- acknowledgements: [...prev.acknowledgements, 'showMoreOptions'],
- }))
- })
- requestAnimationFrame(() => {
- setTimeout(() => {
- scrollTo({
- top: document.body.scrollHeight,
- behavior: 'smooth',
- })
- }, 400)
- })
- }}
- >
-
- Show more options
-
-
-
- )
-}
diff --git a/src/components/operation/OptionsAccordion.tsx b/src/components/operation/OptionsAccordion.tsx
index 7a3171f..8c9740c 100644
--- a/src/components/operation/OptionsAccordion.tsx
+++ b/src/components/operation/OptionsAccordion.tsx
@@ -1,5 +1,6 @@
import { Accordion, AccordionItem, Avatar } from '@heroui/react'
import {
+ ChevronDownIcon,
CopyIcon,
DiamondPercentIcon,
FilterIcon,
@@ -8,8 +9,8 @@ import {
ServerIcon,
WrenchIcon,
} from 'lucide-react'
-import { type ComponentType, type ReactNode, useMemo } from 'react'
-import ShowMoreOptionsBanner from '../ShowMoreOptionsBanner'
+import { type ComponentType, type ReactNode, startTransition, useEffect, useMemo } from 'react'
+import { usePersistedStore } from '../../../store/persisted'
// Avatar/indicator/title per option category — exactly what each page's accordion rendered.
export const CATEGORY_META: Record<
@@ -110,3 +111,58 @@ export default function OptionsAccordion({
)
}
+
+// A one-time nudge pinned to the bottom of the banner-wrapped accordion, inviting the user to
+// scroll for more options. Dismisses itself the first time the user scrolls, and is remembered.
+function ShowMoreOptionsBanner() {
+ const acknowledgements = usePersistedStore((state) => state.acknowledgements)
+
+ const showMoreOptions = !acknowledgements.includes('showMoreOptions')
+
+ useEffect(() => {
+ if (acknowledgements.includes('showMoreOptions')) return
+
+ const handleScroll = () => {
+ usePersistedStore.setState((prev) => {
+ if (prev.acknowledgements.includes('showMoreOptions')) return prev
+ return {
+ acknowledgements: [...prev.acknowledgements, 'showMoreOptions'],
+ }
+ })
+ }
+
+ window.addEventListener('scroll', handleScroll, { once: true })
+
+ return () => {
+ window.removeEventListener('scroll', handleScroll)
+ }
+ }, [acknowledgements])
+
+ if (!showMoreOptions) return null
+
+ return (
+ {
+ startTransition(() => {
+ usePersistedStore.setState((prev) => ({
+ acknowledgements: [...prev.acknowledgements, 'showMoreOptions'],
+ }))
+ })
+ requestAnimationFrame(() => {
+ setTimeout(() => {
+ scrollTo({
+ top: document.body.scrollHeight,
+ behavior: 'smooth',
+ })
+ }, 400)
+ })
+ }}
+ >
+
+ Show more options
+
+
+
+ )
+}