diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index 1e8db7d58..da432f9d5 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -2,7 +2,7 @@ import type { MantineProviderProps } from "@mantine/core"; import { theme } from "./theme"; -export { theme } from "./theme"; +export { scrollAreaDefaultProps, theme } from "./theme"; export { modalSizeForm, modalSizeSelect } from "./theme/modal"; export * from "./components"; diff --git a/packages/ui/src/theme.ts b/packages/ui/src/theme.ts index decaabbe2..976f4be2b 100644 --- a/packages/ui/src/theme.ts +++ b/packages/ui/src/theme.ts @@ -2,6 +2,13 @@ import { createTheme, rem } from "@mantine/core"; import { modalComponent } from "./theme/modal"; +export const scrollAreaDefaultProps = { + type: "hover", + scrollbarSize: 2, + scrollHideDelay: 500, + offsetScrollbars: true, +} as const; + export const theme = createTheme({ primaryColor: "red", autoContrast: true, @@ -96,6 +103,12 @@ export const theme = createTheme({ style: { borderRadius: 5 }, }, }, + ScrollArea: { + defaultProps: scrollAreaDefaultProps, + }, + ScrollAreaAutosize: { + defaultProps: scrollAreaDefaultProps, + }, LoadingOverlay: { defaultProps: { zIndex: 1000, diff --git a/packages/widgets/src/_inputs/json-path-tree-picker.tsx b/packages/widgets/src/_inputs/json-path-tree-picker.tsx index d449c1b0a..97e0b5a38 100644 --- a/packages/widgets/src/_inputs/json-path-tree-picker.tsx +++ b/packages/widgets/src/_inputs/json-path-tree-picker.tsx @@ -324,7 +324,7 @@ export function JsonPathTreePicker({ )} - + {!hasData && {noDataHint}} {hasData && visibleNodes.length === 0 && No matching paths} {visibleNodes.map((node) => ( diff --git a/packages/widgets/src/air-quality/component.tsx b/packages/widgets/src/air-quality/component.tsx index 7ab1ff6b7..7ecbb0d53 100644 --- a/packages/widgets/src/air-quality/component.tsx +++ b/packages/widgets/src/air-quality/component.tsx @@ -177,7 +177,7 @@ const AdvancedAirQuality = ({ airQuality, options, width }: AirQualityViewProps ]; return ( - + diff --git a/packages/widgets/src/bookmarks/add-button.tsx b/packages/widgets/src/bookmarks/add-button.tsx index 96c960459..cb85d1095 100644 --- a/packages/widgets/src/bookmarks/add-button.tsx +++ b/packages/widgets/src/bookmarks/add-button.tsx @@ -163,7 +163,7 @@ export const BookmarkAddButton: SortableItemListInput - + {pendingUrl && !selectedValues.has(pendingUrl.id) ? ( diff --git a/packages/widgets/src/bookmarks/bookmarks-widget.tsx b/packages/widgets/src/bookmarks/bookmarks-widget.tsx index 3d8188c24..77b3971ba 100644 --- a/packages/widgets/src/bookmarks/bookmarks-widget.tsx +++ b/packages/widgets/src/bookmarks/bookmarks-widget.tsx @@ -148,11 +148,7 @@ export default function BookmarksWidget({ ) : ( diff --git a/packages/widgets/src/calendar/calendar-event-list.tsx b/packages/widgets/src/calendar/calendar-event-list.tsx index 4392a01cb..0f8ffe715 100644 --- a/packages/widgets/src/calendar/calendar-event-list.tsx +++ b/packages/widgets/src/calendar/calendar-event-list.tsx @@ -56,7 +56,6 @@ export const CalendarEventList = ({ return ( diff --git a/packages/widgets/src/common/homarr-data-table.css b/packages/widgets/src/common/homarr-data-table.css index 22b6b358d..90e42b3f5 100644 --- a/packages/widgets/src/common/homarr-data-table.css +++ b/packages/widgets/src/common/homarr-data-table.css @@ -22,6 +22,16 @@ background-color: color-mix(in srgb, var(--mantine-color-default-hover) 40%, transparent) !important; } +.homarr-data-table .mantine-datatable-scroll-area-scrollbar[data-state="visible"]:hover { + @mixin light { + background-color: var(--mantine-color-gray-0); + } + + @mixin dark { + background-color: var(--mantine-color-dark-8); + } +} + .homarr-data-table th { padding: 0; white-space: nowrap; diff --git a/packages/widgets/src/common/homarr-data-table.tsx b/packages/widgets/src/common/homarr-data-table.tsx index cc73c222d..d79b07674 100644 --- a/packages/widgets/src/common/homarr-data-table.tsx +++ b/packages/widgets/src/common/homarr-data-table.tsx @@ -6,6 +6,8 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import type { DataTableColumn, DataTableProps } from "mantine-datatable"; import { DataTable } from "mantine-datatable"; +import { scrollAreaDefaultProps } from "@homarr/ui"; + const fallbackColumnWidth = 60; const getColumnWidth = (width: string | number | undefined): number => { @@ -153,7 +155,7 @@ export function HomarrDataTable({ resizable: !isEditMode, cellsStyle: defaultColumnProps?.cellsStyle ?? (() => ({ padding: cellPadding })), }} - scrollAreaProps={{ type: "auto", scrollbarSize: 6, ...scrollAreaProps }} + scrollAreaProps={{ ...scrollAreaDefaultProps, ...scrollAreaProps }} /> ); } diff --git a/packages/widgets/src/countdown/component.tsx b/packages/widgets/src/countdown/component.tsx index 947b8be9c..5c19288b9 100644 --- a/packages/widgets/src/countdown/component.tsx +++ b/packages/widgets/src/countdown/component.tsx @@ -184,7 +184,7 @@ export default function CountdownWidget({ onNotificationsChange={setNotifications} /> - + {showSourceStatuses && ( - + {successfulSummaries.map(({ integration, summary }) => ( {advanced && ( - + {assets.map((asset, index) => ( ( { tabScrollPositionsRef.current[tab] = position; diff --git a/packages/widgets/src/media-requests/list/component.tsx b/packages/widgets/src/media-requests/list/component.tsx index f0526aa65..f53bbf2c7 100644 --- a/packages/widgets/src/media-requests/list/component.tsx +++ b/packages/widgets/src/media-requests/list/component.tsx @@ -61,7 +61,6 @@ export default function MediaServerWidget({ )} diff --git a/packages/widgets/src/notebook/notebook.tsx b/packages/widgets/src/notebook/notebook.tsx index 60c646162..cff8d40c3 100644 --- a/packages/widgets/src/notebook/notebook.tsx +++ b/packages/widgets/src/notebook/notebook.tsx @@ -500,7 +500,6 @@ export function Notebook({ + + = 640 ? 2 : 1} spacing="sm"> {integrations.map((result) => ( diff --git a/packages/widgets/src/weather/advanced.tsx b/packages/widgets/src/weather/advanced.tsx index 4a4c3f0a9..007d9bc2b 100644 --- a/packages/widgets/src/weather/advanced.tsx +++ b/packages/widgets/src/weather/advanced.tsx @@ -143,7 +143,7 @@ export const AdvancedWeather = ({ height, options, weather, width }: AdvancedWea const ticks = hourly.filter((_, index) => index % layout.hourlyTickStep === 0).map((hour) => hour.observedAt); return ( - +