Siema.
Kodowałem już projekty embedded, miałem styczność z AI, brałem też udział w pisaniu kodu do systemów wymagających wysokiej wydajności oraz bawiłem się w stawianie serwerów, ale skala trudności tych projektów to jest nic w porównaniu z CSSem - to g***o przerasta moje zdolności pojmowania.
Czy byłby ktoś w stanie pomóc mi ogarnąć taki styl okna - obrazek w załączniku?
Piszę to w reactcie oraz przy użyciu biblioteki komponentów ChakraUI.
W kodzie jest syf bo niezliczę ile razy eksperymentowałem z różnymi opcjami.
App.jsx:
import { Flex, Spacer } from "@chakra-ui/react";
import CodeEditor from "./components/CodeEditor";
import Toolbar from "./components/Toolbar";
function App() {
return (
<Flex direction="column" alignItems="center" minWidth="max-content" gap="2" w="100%" h="100%">
<Toolbar />
<Spacer p="10px"/>
<CodeEditor />
</Flex>
);
}
export default App;
Toolbar.jsx:
import { Flex, HStack, Image } from "@chakra-ui/react";
export default function Toolbar() {
return (
<Flex bg="green.400" minWidth="100%" minHeight="100%">
<HStack>
<Image borderRadius="full" boxSize="50px" />
</HStack>
</Flex>
);
}
CodeEditor.jsx:
import { Alert, AlertTitle, Flex, HStack } from "@chakra-ui/react";
import CodeInputWindow from "./CodeInputWindow";
import CompiledCodeWindow from "./CompiledCodeWindow";
import useFetch from "./useFetch";
export default function CodeEditor() {
const URL = "http://localhost:8000/api/available-compilers";
const { data: availableCompilers, isPending, error } = useFetch(URL);
return (
<Flex p="10px" mb="60px" alignItems="flex-start" w="100%" h="100%">
<HStack spacing="40px">
{error && (
<Alert status="error">
<AlertTitle>{error.message}</AlertTitle>
</Alert>
)}
{availableCompilers && (
<CodeInputWindow
availableCompilers={availableCompilers["available_compilers"]}
/>
)}
<CompiledCodeWindow />
</HStack>
</Flex>
);
}
CodeInputWindow.jsx:
import { Textarea, Flex, Menu, MenuButton, HStack, Spacer, MenuList, MenuItem, VStack, Box, Heading, Button} from "@chakra-ui/react";
import {ChevronDownIcon} from "@chakra-ui/icons";
export default function CodeInputWindow({availableCompilers}) {
return (
<Flex minWidth='max-content' alignItems='center' gap='2' direction="column" w="100%" h="100%">
<HStack p='2'>
<Heading size='md'>Chakra App</Heading>
<Menu>
<MenuButton
px={4}
py={2}
transition='all 0.2s'
borderRadius='md'
borderWidth='1px'
_hover={{ bg: 'gray.100' }}
_expanded={{ bg: 'gray.200' }}
_focus={{ boxShadow: 'outline' }}
>
Select Compiler <ChevronDownIcon />
</MenuButton>
{availableCompilers.map((availableCompiler) =>
<MenuList>
<MenuItem>{availableCompiler}</MenuItem>
</MenuList>
)}
</Menu>
</HStack>
<Spacer />
<Textarea resize="none" w="50vh"/>
</Flex>
)
}