import dynamic from "next/dynamic"; import { ActionIcon, Badge, Box, Button, Card } from "@mantine/core"; import { IconChevronDown, IconChevronUp, IconExternalLink, IconGripVertical } from "@tabler/icons-react"; import combineClasses from "clsx"; import { useRequiredBoard } from "@homarr/boards/context"; import { useEditMode } from "@homarr/boards/edit-mode"; import { useI18n, useScopedI18n } from "@homarr/translation/client"; import type { ContainerSectionItem } from "~/app/[locale]/boards/_types"; import { SectionGrid } from "./grid/section-grid"; import { useSectionCollapse } from "./section-collapse"; import { useOpenSectionApps } from "./use-open-section-apps"; import classes from "./item.module.css"; const BoardContainerMenu = dynamic( () => import("./container/container-menu").then((module) => module.BoardContainerMenu), { ssr: false }, ); interface Props { section: ContainerSectionItem; } export const BoardContainerSection = ({ section }: Props) => { const board = useRequiredBoard(); const [isEditMode] = useEditMode(); const t = useScopedI18n("section.container"); const tAll = useI18n(); const options = section.options; const { open: openAllInNewTabs, isLoading: areAppsLoading } = useOpenSectionApps( section.id, options.showOpenAll && !isEditMode, ); const { isVisuallyCollapsed, toggle } = useSectionCollapse({ sectionId: section.id, collapsible: options.collapsible, }); const label = options.title.trim() || t("untitled"); const contentId = `board-container-${section.id}-content`; const labelLeft = isEditMode ? 40 : 8; const labelRight = isEditMode ? 48 : options.showOpenAll ? 40 : 8; return ( {options.collapsible && !isEditMode && ( )} {isEditMode && ( )} {!isVisuallyCollapsed && (!options.collapsible || isEditMode) && options.showLabel && options.title && ( {options.title} )} {options.showOpenAll && !isEditMode && ( )} {isEditMode && } ); };