diff --git a/packages/widgets/src/calendar/calender-day.tsx b/packages/widgets/src/calendar/calender-day.tsx
index 70f2f26a8..650356d2c 100644
--- a/packages/widgets/src/calendar/calender-day.tsx
+++ b/packages/widgets/src/calendar/calender-day.tsx
@@ -1,6 +1,4 @@
-import { useCallback, useState } from "react";
-import { Box, Container, Flex, Popover, Text, useMantineTheme } from "@mantine/core";
-import { useElementSize } from "@mantine/hooks";
+import { Box, Container, Flex, HoverCard, Text, useMantineTheme } from "@mantine/core";
import { useRequiredBoard } from "@homarr/boards/context";
import type { CalendarEvent } from "@homarr/integrations/types";
@@ -13,14 +11,9 @@ interface CalendarDayProps {
disabled: boolean;
rootWidth: number;
rootHeight: number;
- onOpen: (close: () => void) => void;
}
-export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onOpen }: CalendarDayProps) => {
- const [opened, setOpened] = useState(false);
- const [pinned, setPinned] = useState(false);
- const { primaryColor } = useMantineTheme();
- const { ref, height } = useElementSize();
+export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth }: CalendarDayProps) => {
const board = useRequiredBoard();
const mantineTheme = useMantineTheme();
const actualItemRadius = mantineTheme.radius[board.itemRadius];
@@ -29,39 +22,19 @@ export const CalendarDay = ({ date, events, disabled, rootHeight, rootWidth, onO
const shouldScaleDown = minAxisSize < 350;
const isSmall = rootHeight < 256;
- const isTooSmallForIndicators = height < 30;
-
- const handleMouseEnter = useCallback(() => {
- if (disabled) return;
- onOpen(() => {
- setOpened(false);
- setPinned(false);
- });
- setOpened(true);
- }, [disabled, onOpen]);
-
- const handleMouseLeave = useCallback(() => {
- if (!pinned) setOpened(false);
- }, [pinned]);
-
return (
- {
- setOpened(value);
- if (!value) setPinned(false);
- }}
- opened={opened}
+ transitionProps={{ transition: "pop" }}
+ openDelay={350}
+ closeDelay={400}
disabled={disabled}
>
-
+
{
- if (!disabled) setPinned((prev) => !prev);
- }}
- onMouseEnter={handleMouseEnter}
- onMouseLeave={handleMouseLeave}
>
{date.getDate()}
- {!isTooSmallForIndicators && }
+
-
- {/* Popover has some offset on the left side, padding is removed because of scrollarea paddings */}
- setOpened(true)}
- onMouseLeave={handleMouseLeave}
- >
+
+
-
-
+
+
);
};
@@ -111,7 +69,6 @@ interface NotificationIndicatorProps {
const NotificationIndicator = ({ events, isSmall }: NotificationIndicatorProps) => {
const notificationEvents = [...new Set(events.map((event) => event.indicatorColor))].filter(String);
- /* position bottom is lower when small to not be on top of number*/
return (
splitEvents(events), [events]);
- const activeCloseRef = useRef<(() => void) | null>(null);
- const onDayOpen = useCallback((close: () => void) => {
- activeCloseRef.current?.();
- activeCloseRef.current = close;
- }, []);
return (
);
}}