+
Dash.
+
+ {!dashdotService ? (
+
No dash. service found. Please add one to your Homarr dashboard.
+ ) : !info ? (
+
Cannot acquire information from dash. - are you running the latest version?
+ ) : (
+
+
+ {storageEnabled && isCompact && (
+
+
Storage:
+
+ {(totalUsed / (totalSize || 1)).toFixed(1)}%{'\n'}
+ {bytePrettyPrint(totalUsed)} / {bytePrettyPrint(totalSize)}
+
+
+ )}
+ {networkEnabled && (
+
+
Network:
+
+ {bpsPrettyPrint(info?.network?.speedUp)} Up{'\n'}
+ {bpsPrettyPrint(info?.network?.speedDown)} Down
+
+
+ )}
+
+
+ {graphs.map((graph) => (
+
+ )}
+
+ );
+}
diff --git a/src/components/modules/dash./index.ts b/src/components/modules/dash./index.ts
new file mode 100644
index 00000000000..4d483ea4d09
--- /dev/null
+++ b/src/components/modules/dash./index.ts
@@ -0,0 +1 @@
+export { DashdotModule } from './DashdotModule';
diff --git a/src/components/modules/date/DateModule.tsx b/src/components/modules/date/DateModule.tsx
index ad599173682..3e212af8359 100644
--- a/src/components/modules/date/DateModule.tsx
+++ b/src/components/modules/date/DateModule.tsx
@@ -23,7 +23,7 @@ export default function DateComponent(props: any) {
const [date, setDate] = useState(new Date());
const setSafeInterval = useSetSafeInterval();
const { config } = useConfig();
- const isFullTime = config?.modules?.[DateModule.title]?.options?.full?.value ?? false;
+ const isFullTime = config?.modules?.[DateModule.title]?.options?.full?.value ?? true;
const formatString = isFullTime ? 'HH:mm' : 'h:mm A';
// Change date on minute change
// Note: Using 10 000ms instead of 1000ms to chill a little :)
diff --git a/src/components/modules/index.ts b/src/components/modules/index.ts
index 410bf3b5616..85b4b765bb7 100644
--- a/src/components/modules/index.ts
+++ b/src/components/modules/index.ts
@@ -1,6 +1,7 @@
-export * from './date';
export * from './calendar';
-export * from './search';
+export * from './dash.';
+export * from './date';
+export * from './downloads';
export * from './ping';
+export * from './search';
export * from './weather';
-export * from './downloads';
diff --git a/src/components/modules/moduleWrapper.tsx b/src/components/modules/moduleWrapper.tsx
index a28cde8a8fe..6bbd69c8611 100644
--- a/src/components/modules/moduleWrapper.tsx
+++ b/src/components/modules/moduleWrapper.tsx
@@ -1,10 +1,18 @@
-import { Button, Card, Group, Menu, Switch, TextInput, useMantineColorScheme } from '@mantine/core';
+import {
+ Button,
+ Card,
+ Group,
+ Menu,
+ MultiSelect,
+ Switch,
+ TextInput,
+ useMantineColorScheme,
+} from '@mantine/core';
import { useConfig } from '../../tools/state';
import { IModule } from './modules';
function getItems(module: IModule) {
const { config, setConfig } = useConfig();
- const enabledModules = config.modules ?? {};
const items: JSX.Element[] = [];
if (module.options) {
const keys = Object.keys(module.options);
@@ -15,6 +23,38 @@ function getItems(module: IModule) {
types.forEach((type, index) => {
const optionName = `${module.title}.${keys[index]}`;
const moduleInConfig = config.modules?.[module.title];
+ if (type === 'object') {
+ items.push(
+