import styled from '@emotion/styled'; import { ScrollWrapperInitEffect } from '@/ui/utilities/scroll/components/internal/ScrollWrapperInitEffect'; import { ScrollWrapperComponentInstanceContext } from '@/ui/utilities/scroll/states/contexts/ScrollWrapperComponentInstanceContext'; import { scrollWrapperScrollBottomComponentState } from '@/ui/utilities/scroll/states/scrollWrapperScrollBottomComponentState'; import { scrollWrapperScrollLeftComponentState } from '@/ui/utilities/scroll/states/scrollWrapperScrollLeftComponentState'; import { scrollWrapperScrollTopComponentState } from '@/ui/utilities/scroll/states/scrollWrapperScrollTopComponentState'; import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2'; const StyledScrollWrapper = styled.div` &.scroll-wrapper-x-enabled { overflow-x: overlay; } &.scroll-wrapper-y-enabled { overflow-y: overlay; } overflow-x: hidden; overflow-y: hidden; display: flex; width: 100%; height: 100%; `; export type ScrollWrapperProps = { children: React.ReactNode; className?: string; defaultEnableXScroll?: boolean; defaultEnableYScroll?: boolean; componentInstanceId: string; }; export const ScrollWrapper = ({ componentInstanceId, children, className, defaultEnableXScroll = true, defaultEnableYScroll = true, }: ScrollWrapperProps) => { const setScrollTop = useSetRecoilComponentStateV2( scrollWrapperScrollTopComponentState, componentInstanceId, ); const setScrollLeft = useSetRecoilComponentStateV2( scrollWrapperScrollLeftComponentState, componentInstanceId, ); const setScrollBottom = useSetRecoilComponentStateV2( scrollWrapperScrollBottomComponentState, componentInstanceId, ); const handleScroll = (event: React.UIEvent) => { const target = event.currentTarget; setScrollTop(target.scrollTop); setScrollLeft(target.scrollLeft); setScrollBottom( target.scrollHeight - target.clientHeight - target.scrollTop, ); }; return ( {children} ); };