diff --git a/app/package.json b/app/package.json index da7e0c7..3978329 100644 --- a/app/package.json +++ b/app/package.json @@ -14,6 +14,7 @@ "dependencies": { "@headlessui/react": "^1.7.18", "@headlessui/tailwindcss": "^0.2.0", + "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-alert-dialog": "^1.0.4", "@radix-ui/react-checkbox": "^1.0.4", "@radix-ui/react-context-menu": "^2.1.4", diff --git a/app/pnpm-lock.yaml b/app/pnpm-lock.yaml index 71ec44e..82c4857 100644 --- a/app/pnpm-lock.yaml +++ b/app/pnpm-lock.yaml @@ -11,6 +11,9 @@ dependencies: '@headlessui/tailwindcss': specifier: ^0.2.0 version: 0.2.0(tailwindcss@3.3.5) + '@radix-ui/react-accordion': + specifier: ^1.1.2 + version: 1.1.2(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-alert-dialog': specifier: ^1.0.4 version: 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0) @@ -746,6 +749,35 @@ packages: '@babel/runtime': 7.23.2 dev: false + /@radix-ui/react-accordion@1.1.2(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-collapsible': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0) + '@radix-ui/react-direction': 1.0.1(@types/react@18.2.33)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.33)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.33)(react@18.2.0) + '@types/react': 18.2.33 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-OrVIOcZL0tl6xibeuGt5/+UxoT2N27KCFOPjFyfXMnchxSHZ/OW7cCX2nGlIYJrbHK/fczPcFzAwvNBB6XBNMA==} peerDependencies: @@ -821,6 +853,34 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.23.2 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.33)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.33)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.33)(react@18.2.0) + '@types/react': 18.2.33 + '@types/react-dom': 18.2.14 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==} peerDependencies: diff --git a/app/src/assets/ui.less b/app/src/assets/ui.less index cd3296a..4e909ed 100644 --- a/app/src/assets/ui.less +++ b/app/src/assets/ui.less @@ -152,7 +152,7 @@ input[type="number"] { display: flex; flex-direction: column; margin: 0.5rem 0; - padding: 1.5rem; + padding: 1rem 1.5rem 0.25rem; border-radius: var(--radius); background: hsl(var(--background)); color: hsl(var(--text)); @@ -191,7 +191,6 @@ input[type="number"] { display: flex; flex-direction: row; flex-wrap: nowrap; - margin-bottom: 1.5rem; align-items: center; transform: translateY(-0.25rem); } @@ -205,6 +204,7 @@ input[type="number"] { line-height: 1.1rem; color: hsl(var(--text-secondary)); transition: .25s; + text-decoration: none !important; &:before { content: ''; @@ -273,6 +273,10 @@ input[type="number"] { height: 0.25rem; } + .paragraph-content { + transition: 1.5s ease-in-out; + } + .paragraph-footer { display: flex; flex-direction: row; diff --git a/app/src/components/Paragraph.tsx b/app/src/components/Paragraph.tsx index e7ef599..0607f10 100644 --- a/app/src/components/Paragraph.tsx +++ b/app/src/components/Paragraph.tsx @@ -1,8 +1,13 @@ import React from "react"; -import { ChevronDown, Info } from "lucide-react"; +import { Info } from "lucide-react"; import { cn } from "@/components/ui/lib/utils.ts"; -import { Button } from "@/components/ui/button.tsx"; import Markdown from "@/components/Markdown.tsx"; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from "@/components/ui/accordion.tsx"; export type ParagraphProps = { title?: string; @@ -10,8 +15,6 @@ export type ParagraphProps = { className?: string; configParagraph?: boolean; isCollapsed?: boolean; - onCollapse?: () => void; - defaultCollapsed?: boolean; }; function Paragraph({ @@ -20,51 +23,25 @@ function Paragraph({ className, configParagraph, isCollapsed, - onCollapse, - defaultCollapsed, }: ParagraphProps) { - const [collapsed, setCollapsed] = React.useState(defaultCollapsed ?? false); - - React.useEffect(() => onCollapse && onCollapse(), [collapsed]); - return ( -