diff --git a/packages/twenty-ui/src/json-visualizer/components/JsonNestedNode.tsx b/packages/twenty-ui/src/json-visualizer/components/JsonNestedNode.tsx index 29c08d3fa..fe9775f8f 100644 --- a/packages/twenty-ui/src/json-visualizer/components/JsonNestedNode.tsx +++ b/packages/twenty-ui/src/json-visualizer/components/JsonNestedNode.tsx @@ -5,14 +5,15 @@ import { JsonArrow } from '@ui/json-visualizer/components/internal/JsonArrow'; import { JsonList } from '@ui/json-visualizer/components/internal/JsonList'; import { JsonNodeLabel } from '@ui/json-visualizer/components/internal/JsonNodeLabel'; import { JsonNode } from '@ui/json-visualizer/components/JsonNode'; +import { ANIMATION } from '@ui/theme'; +import { AnimatePresence, motion } from 'framer-motion'; import { useState } from 'react'; import { isDefined } from 'twenty-shared'; import { JsonValue } from 'type-fest'; const StyledContainer = styled.li` - list-style-type: none; display: grid; - row-gap: ${({ theme }) => theme.spacing(2)}; + list-style-type: none; `; const StyledLabelContainer = styled.div` @@ -29,6 +30,8 @@ const StyledEmptyState = styled.div` color: ${({ theme }) => theme.font.color.tertiary}; `; +const StyledJsonList = styled(JsonList)``.withComponent(motion.ul); + export const JsonNestedNode = ({ label, Icon, @@ -51,7 +54,25 @@ export const JsonNestedNode = ({ const [isOpen, setIsOpen] = useState(true); const renderedChildren = ( - + {elements.length === 0 ? ( {emptyElementsText} ) : ( @@ -71,7 +92,7 @@ export const JsonNestedNode = ({ ); }) )} - + ); const handleArrowClick = () => { @@ -79,7 +100,11 @@ export const JsonNestedNode = ({ }; if (hideRoot) { - return {renderedChildren}; + return ( + + {renderedChildren} + + ); } return ( @@ -96,7 +121,9 @@ export const JsonNestedNode = ({ )} - {isOpen && renderedChildren} + + {isOpen && renderedChildren} + ); }; diff --git a/packages/twenty-ui/src/json-visualizer/components/internal/JsonArrow.tsx b/packages/twenty-ui/src/json-visualizer/components/internal/JsonArrow.tsx index 6b4bf720b..46ed51793 100644 --- a/packages/twenty-ui/src/json-visualizer/components/internal/JsonArrow.tsx +++ b/packages/twenty-ui/src/json-visualizer/components/internal/JsonArrow.tsx @@ -3,6 +3,7 @@ import styled from '@emotion/styled'; import { VisibilityHidden } from '@ui/accessibility'; import { IconChevronDown } from '@ui/display'; import { useJsonTreeContextOrThrow } from '@ui/json-visualizer/hooks/useJsonTreeContextOrThrow'; +import { ANIMATION } from '@ui/theme'; import { motion } from 'framer-motion'; const StyledButton = styled(motion.button)` @@ -45,7 +46,8 @@ export const JsonArrow = ({ size={theme.icon.size.md} color={theme.font.color.secondary} initial={false} - animate={{ rotate: isOpen ? -180 : 0 }} + animate={{ rotate: isOpen ? 0 : -90 }} + transition={{ duration: ANIMATION.duration.normal }} /> ); diff --git a/packages/twenty-ui/src/json-visualizer/components/internal/JsonList.tsx b/packages/twenty-ui/src/json-visualizer/components/internal/JsonList.tsx index 55c9103e5..9fb23958d 100644 --- a/packages/twenty-ui/src/json-visualizer/components/internal/JsonList.tsx +++ b/packages/twenty-ui/src/json-visualizer/components/internal/JsonList.tsx @@ -12,6 +12,10 @@ const StyledList = styled.ul<{ depth: number }>` depth > 0 && css` padding-left: ${theme.spacing(8)}; + + > :first-of-type { + margin-top: ${theme.spacing(2)}; + } `} `;