Merge branch 'dev' into v2

This commit is contained in:
Thomas Camlong committed 2026-07-15 15:17:18 +02:00
commit e0de370340
6 files changed
+271 -262

No files matched your search

@@ -32,6 +32,176 @@ interface CustomWidgetFormProps {
definitionId?: string;
}
const displayConfigBuilders: Record<string, (values: z.infer<typeof formSchema>) => Record<string, unknown>> = {
singleValue: (v) => ({
type: "singleValue",
jsonPath: v.jsonPath,
label: v.label,
unit: v.unit,
valueSize: v.valueSize,
labelPosition: v.labelPosition,
}),
keyValue: (v) => ({
type: "keyValue",
mappings: v.mappings,
layout: v.kvLayout,
columns: v.kvColumns,
}),
table: (v) => ({
type: "table",
tablePath: v.tablePath,
columns: v.columns,
striped: v.striped,
compact: v.compact,
}),
statGrid: (v) => ({
type: "statGrid",
items: v.statGridItems,
columns: v.statGridColumns,
cardStyle: v.cardStyle,
}),
progressBars: (v) => ({
type: "progressBars",
bars: v.progressBars.map((b) => ({
...b,
maxPath: b.maxPath || undefined,
})),
showPercentage: v.showPercentage,
barSize: v.barSize,
}),
statusIndicator: (v) => ({
type: "statusIndicator",
items: v.statusItems.map((item) => ({
...item,
goodValues: item.goodValues
.split(",")
.map((s) => s.trim())
.filter(Boolean),
})),
layout: v.statusLayout,
dotSize: v.dotSize,
}),
countGrid: (v) => ({
type: "countGrid",
items: v.countGridItems,
columns: v.countGridColumns,
valueSize: v.countValueSize,
}),
raw: (v) => ({
type: "raw",
jsonPath: v.rawJsonPath,
maxHeight: v.rawMaxHeight,
}),
actionButton: (v) => ({
type: "actionButton",
buttonLabel: v.buttonLabel,
buttonColor: v.buttonColor,
confirmText: v.confirmText || undefined,
successMessage: v.successMessage || undefined,
}),
customJsx: (v) => ({ type: "customJsx", template: v.template }),
};
const serverToFormFieldMap: Record<string, Record<string, string>> = {
statGrid: { items: "statGridItems" },
countGrid: { items: "countGridItems" },
statusIndicator: { items: "statusItems" },
progressBars: { bars: "progressBars" },
keyValue: { mappings: "mappings" },
table: { columns: "columns", tablePath: "tablePath" },
singleValue: { jsonPath: "jsonPath", label: "label", unit: "unit" },
raw: { jsonPath: "rawJsonPath" },
actionButton: { buttonLabel: "buttonLabel" },
customJsx: { template: "template" },
};
function extractServerErrors(err: unknown, displayType: string): Record<string, string> {
const errors: Record<string, string> = {};
const trpcErr = err as {
data?: { zodError?: { fieldErrors?: Record<string, string[]> } };
message?: string;
};
if (trpcErr?.data?.zodError?.fieldErrors) {
for (const [field, messages] of Object.entries(trpcErr.data.zodError.fieldErrors)) {
if (messages?.[0]) {
errors[field] = messages[0];
}
}
return errors;
}
try {
const issues = JSON.parse(trpcErr?.message ?? "[]") as Array<{
path: (string | number)[];
message: string;
}>;
const fieldMap = serverToFormFieldMap[displayType] ?? {};
for (const issue of issues) {
const path = [...issue.path];
if (path[0] === "displayConfig") {
path.shift();
const serverField = String(path[0]);
const formField = fieldMap[serverField] ?? serverField;
path[0] = formField;
}
errors[path.join(".")] = issue.message;
}
} catch {
// not parseable, ignore
}
return errors;
}
const listItemDefaults = {
mapping: { label: "", jsonPath: "$", unit: "" },
column: { header: "", jsonPath: "$" },
statGridItem: { label: "", jsonPath: "$", unit: "", color: "blue" },
progressBar: {
label: "",
valuePath: "$",
maxPath: "",
unit: "",
color: "blue",
},
statusItem: { label: "", jsonPath: "$", goodValues: "online,true" },
countGridItem: { label: "", jsonPath: "$", unit: "" },
} as const;
function cloneLast<T extends Record<string, unknown>>(arr: T[], fallback: T): T {
const last = arr[arr.length - 1];
return last ? { ...last } : { ...fallback };
}
const ALL_DISPLAY_TYPES = [
"singleValue",
"keyValue",
"table",
"statGrid",
"progressBars",
"statusIndicator",
"countGrid",
"raw",
"actionButton",
"customJsx",
] as const;
const MANTINE_COLORS = [
"blue",
"teal",
"green",
"red",
"orange",
"yellow",
"violet",
"pink",
"cyan",
"grape",
"indigo",
"lime",
] as const;
export function CustomWidgetForm({ mode, initialValues, definitionId }: CustomWidgetFormProps) {
const router = useRouter();
const globalT = useI18n();
@@ -44,11 +44,12 @@ export const CustomWidgetList = ({ definitions }: CustomWidgetListProps) => {
}
return (
<Stack gap="sm">
<Stack gap="sm">
{definitions.map((def) => (
<CustomWidgetCard key={def.id} widget={def} />
))}
</Stack>
</Stack>
);
};
+1 -1
View File
@@ -6,7 +6,7 @@
"build": "cross-env CI=true turbo build",
"clean": "git clean -xdf node_modules",
"clean:workspaces": "turbo clean",
"check:custom-widgets": "pnpm --filter @homarr/custom-widgets check:architecture",
"check:custom-widgets": "pnpm --filter @homarr/custom-widgets check:architecture",
"check:custom-widget-bundle": "node ./scripts/check-custom-widget-bundle.mjs",
"ci:act:all": "bash scripts/ci/act.sh all",
"ci:act:cleanup": "bash scripts/ci/act.sh cleanup",
+2 -2
View File
@@ -699,7 +699,7 @@
"title": "Edit Custom Widget"
}
},
"betaBanner": {
"betaBanner": {
"title": "Custom Widgets are in Beta",
"description": "This feature is experimental and will probably change. If you encounter bugs, need more capabilities, or find something confusing, tell us in the",
"link": "official discussion thread",
@@ -723,7 +723,7 @@
"addBar": "Add Bar",
"duplicate": "Duplicate",
"copyAiPrompt": "Copy AI prompt",
"readyToSave": "Ready to save",
"readyToSave": "Ready to save",
"enable": "Enable",
"disable": "Disable",
"menu": "Actions"
+95 -257
View File
@@ -12,24 +12,6 @@ catalogs:
'@auth/drizzle-adapter':
specifier: ^1.11.2
version: 1.11.2
'@codemirror/autocomplete':
specifier: ^6.20.3
version: 6.20.3
'@codemirror/commands':
specifier: ^6.10.3
version: 6.10.3
'@codemirror/lang-javascript':
specifier: ^6.2.5
version: 6.2.5
'@codemirror/lang-json':
specifier: ^6.0.2
version: 6.0.2
'@codemirror/lint':
specifier: ^6.9.6
version: 6.9.6
'@codemirror/view':
specifier: ^6.43.0
version: 6.43.0
'@ctrl/deluge':
specifier: ^8.0.0
version: 8.0.0
@@ -58,8 +40,8 @@ catalogs:
specifier: 7.2.1
version: 7.2.1
'@gfazioli/mantine-onboarding-tour':
specifier: ^4.0.6
version: 4.0.6
specifier: ^4.0.7
version: 4.0.8
'@homarr/gridstack':
specifier: ^1.12.0
version: 1.12.0
@@ -285,9 +267,6 @@ catalogs:
'@types/xml2js':
specifier: ^0.4.14
version: 0.4.14
'@uiw/react-codemirror':
specifier: ^4.25.11
version: 4.25.11
'@vitejs/plugin-react':
specifier: ^6.0.3
version: 6.0.3
@@ -306,12 +285,6 @@ catalogs:
'@xterm/xterm':
specifier: ^6.0.0
version: 6.0.0
acorn:
specifier: ^8.16.0
version: 8.16.0
acorn-jsx:
specifier: ^5.3.2
version: 5.3.2
adm-zip:
specifier: 0.5.18
version: 0.5.18
@@ -489,6 +462,9 @@ catalogs:
react-error-boundary:
specifier: ^6.1.2
version: 6.1.2
react-jsx-parser:
specifier: ^2.4.1
version: 2.4.1
react-markdown:
specifier: ^10.1.0
version: 10.1.0
@@ -806,24 +782,6 @@ importers:
apps/nextjs:
dependencies:
'@codemirror/autocomplete':
specifier: 'catalog:'
version: 6.20.3
'@codemirror/commands':
specifier: 'catalog:'
version: 6.10.3
'@codemirror/lang-javascript':
specifier: 'catalog:'
version: 6.2.5
'@codemirror/lang-json':
specifier: 'catalog:'
version: 6.0.2
'@codemirror/lint':
specifier: 'catalog:'
version: 6.9.6
'@codemirror/view':
specifier: 'catalog:'
version: 6.43.0
'@dnd-kit/core':
specifier: 'catalog:'
version: 6.3.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
@@ -838,7 +796,7 @@ importers:
version: 3.2.2(react@19.2.7)
'@gfazioli/mantine-onboarding-tour':
specifier: 'catalog:'
version: 4.0.6(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(@tabler/icons-react@3.44.0(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
version: 4.0.8(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(@tabler/icons-react@3.44.0(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@homarr/analytics':
specifier: workspace:^0.1.0
version: link:../../packages/analytics
@@ -860,9 +818,6 @@ importers:
'@homarr/cron-job-status':
specifier: workspace:^0.1.0
version: link:../../packages/cron-job-status
'@homarr/custom-widgets':
specifier: workspace:^0.1.0
version: link:../../packages/custom-widgets
'@homarr/db':
specifier: workspace:^0.1.0
version: link:../../packages/db
@@ -989,9 +944,6 @@ importers:
'@trpc/server':
specifier: 'catalog:'
version: 11.18.0(@typescript/typescript6@6.0.2)
'@uiw/react-codemirror':
specifier: 'catalog:'
version: 4.25.11(@babel/runtime@7.29.7)(@codemirror/autocomplete@6.20.3)(@codemirror/language@6.12.3)(@codemirror/lint@6.9.6)(@codemirror/search@6.7.1)(@codemirror/state@6.6.0)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.43.0)(codemirror@6.0.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@xterm/addon-canvas':
specifier: 'catalog:'
version: 0.7.0(@xterm/xterm@6.0.0)
@@ -1317,9 +1269,6 @@ importers:
'@homarr/cron-jobs':
specifier: workspace:^0.1.0
version: link:../cron-jobs
'@homarr/custom-widgets':
specifier: workspace:^0.1.0
version: link:../custom-widgets
'@homarr/db':
specifier: workspace:^0.1.0
version: link:../db
@@ -1377,6 +1326,9 @@ importers:
'@trpc/tanstack-react-query':
specifier: 'catalog:'
version: 11.18.0(@tanstack/react-query@5.101.2(react@19.2.7))(@trpc/client@11.18.0(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2))(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(@typescript/typescript6@6.0.2)(react@19.2.7)
jsonpath-plus:
specifier: 'catalog:'
version: 10.4.0
lodash.clonedeep:
specifier: 'catalog:'
version: 4.5.0
@@ -1398,9 +1350,6 @@ importers:
trpc-to-openapi:
specifier: 'catalog:'
version: 3.3.0(patch_hash=2ca3c16af0fcca0c736697ad4fe553a14f794524fa9ce0d5c3e8ee4aea76090c)(@trpc/server@11.18.0(@typescript/typescript6@6.0.2))(zod-openapi@5.3.0(zod@4.4.3))(zod@4.4.3)
undici:
specifier: 'catalog:'
version: 7.28.0
zod:
specifier: 'catalog:'
version: 4.4.3
@@ -1711,70 +1660,6 @@ importers:
specifier: 'catalog:'
version: '@typescript/typescript6@6.0.2'
packages/custom-widgets:
dependencies:
'@mantine/charts':
specifier: 'catalog:'
version: 9.4.1(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(recharts@3.9.1(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react-is@19.2.7)(react@19.2.7)(redux@5.0.1))
'@mantine/core':
specifier: 'catalog:'
version: 9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@mantine/dates':
specifier: 'catalog:'
version: 9.4.1(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(dayjs@1.11.21)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@mantine/hooks':
specifier: 'catalog:'
version: 9.4.1(react@19.2.7)
'@tabler/icons-react':
specifier: 'catalog:'
version: 3.44.0(react@19.2.7)
'@tanstack/react-query':
specifier: 'catalog:'
version: 5.101.2(react@19.2.7)
acorn:
specifier: 'catalog:'
version: 8.16.0
acorn-jsx:
specifier: 'catalog:'
version: 5.3.2(acorn@8.16.0)
jsonpath-plus:
specifier: 'catalog:'
version: 10.4.0
react:
specifier: 'catalog:'
version: 19.2.7
undici:
specifier: 'catalog:'
version: 7.28.0
zod:
specifier: 'catalog:'
version: 4.4.3
devDependencies:
'@homarr/tsconfig':
specifier: workspace:^0.1.0
version: link:../../tooling/typescript
'@types/node':
specifier: 'catalog:'
version: 24.13.3
'@types/react':
specifier: 'catalog:'
version: 19.2.17
'@types/react-dom':
specifier: 'catalog:'
version: 19.2.3(@types/react@19.2.17)
jsdom:
specifier: 'catalog:'
version: 29.1.1(@noble/hashes@2.0.1)
react-dom:
specifier: 'catalog:'
version: 19.2.7(react@19.2.7)
typescript:
specifier: 'catalog:'
version: '@typescript/typescript6@6.0.2'
vitest:
specifier: 'catalog:'
version: 4.1.10(@opentelemetry/api@1.9.0)(@types/node@24.13.3)(@vitest/coverage-v8@4.1.10)(@vitest/ui@4.1.10)(jsdom@29.1.1(@noble/hashes@2.0.1))(msw@2.14.6(@types/node@24.13.3)(@typescript/typescript6@6.0.2))(vite@8.1.4(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(sass@1.101.0)(sugarss@5.0.0(postcss@8.5.16))(terser@5.46.1)(tsx@4.21.0)(yaml@2.9.0))
packages/db:
dependencies:
'@auth/core':
@@ -1786,9 +1671,6 @@ importers:
'@homarr/core':
specifier: workspace:^0.1.0
version: link:../core
'@homarr/custom-widgets':
specifier: workspace:^0.1.0
version: link:../custom-widgets
'@homarr/definitions':
specifier: workspace:^0.1.0
version: link:../definitions
@@ -1862,9 +1744,6 @@ importers:
'@homarr/common':
specifier: workspace:^0.1.0
version: link:../common
'@homarr/custom-widgets':
specifier: workspace:^0.1.0
version: link:../custom-widgets
fast-xml-parser:
specifier: 'catalog:'
version: 5.9.3
@@ -2617,12 +2496,6 @@ importers:
'@homarr/translation':
specifier: workspace:^0.1.0
version: link:../translation
acorn:
specifier: 'catalog:'
version: 8.16.0
acorn-jsx:
specifier: 'catalog:'
version: 5.3.2(acorn@8.16.0)
zod:
specifier: 'catalog:'
version: 4.4.3
@@ -2660,9 +2533,6 @@ importers:
'@homarr/core':
specifier: workspace:^0.1.0
version: link:../core
'@homarr/custom-widgets':
specifier: workspace:^0.1.0
version: link:../custom-widgets
'@homarr/db':
specifier: workspace:^0.1.0
version: link:../db
@@ -2717,9 +2587,6 @@ importers:
'@mantine/core':
specifier: 'catalog:'
version: 9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@mantine/dates':
specifier: 'catalog:'
version: 9.4.1(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(dayjs@1.11.21)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@mantine/form':
specifier: 'catalog:'
version: 9.4.1(react@19.2.7)
@@ -2777,18 +2644,15 @@ importers:
'@tiptap/starter-kit':
specifier: 'catalog:'
version: 3.27.3
acorn:
specifier: 'catalog:'
version: 8.16.0
acorn-jsx:
specifier: 'catalog:'
version: 5.3.2(acorn@8.16.0)
clsx:
specifier: 'catalog:'
version: 2.1.1
dayjs:
specifier: 'catalog:'
version: 1.11.21
jsonpath-plus:
specifier: 'catalog:'
version: 10.4.0
lucide-react:
specifier: 'catalog:'
version: 1.24.0(react@19.2.7)
@@ -2807,6 +2671,9 @@ importers:
react-dom:
specifier: 'catalog:'
version: 19.2.7(react@19.2.7)
react-jsx-parser:
specifier: 'catalog:'
version: 2.4.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
react-markdown:
specifier: 'catalog:'
version: 10.1.0(@types/react@19.2.17)(react@19.2.7)
@@ -3727,15 +3594,9 @@ packages:
'@codemirror/lint@6.9.6':
resolution: {integrity: sha512-6Kp7r6XfCi/D/5sdXieMfg9pJU1bUEx96WITuLU6ESaKizCz0QHFMjY/TaFSbigDdEAIgi93itLBIUETP4oK+A==}
'@codemirror/search@6.7.1':
resolution: {integrity: sha512-uMe5UO6PamJtSHrXhhHOzSX3ReWtiJrva6GnPMwSOrZtiExb5X5eExhr2OUZQVvdxPsKpY3Ro2mFbQadpPWmHA==}
'@codemirror/state@6.6.0':
resolution: {integrity: sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==}
'@codemirror/theme-one-dark@6.1.3':
resolution: {integrity: sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==}
'@codemirror/view@6.43.0':
resolution: {integrity: sha512-V7ZCLQO3Jus9hzh2jVCCPW3mO4IBMr43O37PqSUYautJSnnJF41YlgLw21x0fLJTYvJ+Vkm6Gp+qKGH9pltgXA==}
@@ -5106,8 +4967,8 @@ packages:
'@formatjs/intl-localematcher@0.8.1':
resolution: {integrity: sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==}
'@gfazioli/mantine-onboarding-tour@4.0.6':
resolution: {integrity: sha512-EMXwq5VPdQO8ppgKGY3i/KbB3jfuqJir5xmbAx0RNV3Ua3uXfznXJb0mNLykP1gQ+qe6WceORNsFUtQS0tIZAw==}
'@gfazioli/mantine-onboarding-tour@4.0.8':
resolution: {integrity: sha512-5YePS8nXkrLyc0OEHPZ/cpkcVEPjtf9VP9QWl6HxfMW9s6pBq1bWz5VcOoRKEVZWKi4xmskBcEPxB81syYrYXQ==}
peerDependencies:
'@mantine/core': '>=9.0.0'
'@mantine/hooks': '>=9.0.0'
@@ -8040,12 +7901,20 @@ packages:
'@types/prismjs@1.26.6':
resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==}
'@types/prop-types@15.7.15':
resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
'@types/qs@6.9.16':
resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==}
'@types/range-parser@1.2.7':
resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
'@types/react-dom@18.3.7':
resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==}
peerDependencies:
'@types/react': ^18.0.0
'@types/react-dom@19.2.3':
resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
peerDependencies:
@@ -8060,6 +7929,9 @@ packages:
'@types/react-router@5.1.20':
resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==}
'@types/react@18.3.31':
resolution: {integrity: sha512-vfEqpXTvwT91yhmwdfouStN2hSKwTvyRs8qpLfADyrq/kxDw0hZM7Wk9Ug1FELj8hIby+S/+kQCSRFF32nv2Qw==}
'@types/react@19.2.17':
resolution: {integrity: sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==}
@@ -8142,28 +8014,6 @@ packages:
resolution: {integrity: sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w==}
hasBin: true
'@uiw/codemirror-extensions-basic-setup@4.25.11':
resolution: {integrity: sha512-otyFa+n9IOYtEjaKOxPedHkj15fTPUF21wdR9pv0GpZPfuGl27cvmcv6+tognbRu9VvEcsHKE+ESoszeo3KfTw==}
peerDependencies:
'@codemirror/autocomplete': '>=6.0.0'
'@codemirror/commands': '>=6.0.0'
'@codemirror/language': '>=6.0.0'
'@codemirror/lint': '>=6.0.0'
'@codemirror/search': '>=6.0.0'
'@codemirror/state': '>=6.0.0'
'@codemirror/view': '>=6.0.0'
'@uiw/react-codemirror@4.25.11':
resolution: {integrity: sha512-DYVFAKLX+F/4JS9N/7xexh+TICrlncwkX9HKKInrP1bwO0tSfc3k0GB6oawTYhelVKh20cX3TuRx+NJSkVXuMw==}
peerDependencies:
'@babel/runtime': '>=7.29.7'
'@codemirror/state': '>=6.0.0'
'@codemirror/theme-one-dark': '>=6.0.0'
'@codemirror/view': '>=6.0.0'
codemirror: '>=6.0.0'
react: '>=17.0.0'
react-dom: '>=17.0.0'
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
deprecated: Potential CWE-502 - Update to 1.3.1 or higher
@@ -9107,9 +8957,6 @@ packages:
resolution: {integrity: sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==}
engines: {node: '>=8.0.0'}
codemirror@6.0.2:
resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==}
collapse-white-space@2.1.0:
resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
@@ -11014,6 +10861,9 @@ packages:
immediate@3.0.6:
resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
immer@11.1.4:
resolution: {integrity: sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==}
immer@11.1.9:
resolution: {integrity: sha512-sc/z0Cyti70bZa0ZU4sWfAElfovFb9Ni8tArJZLuklYWxegPiK3pDOql1Rq5H0FIRAW9LSQRG6OX4KqBldbhBA==}
@@ -13535,6 +13385,13 @@ packages:
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-jsx-parser@2.4.1:
resolution: {integrity: sha512-gE25DiHseuKmSbb5O1K1IkyQ/bwth3zl4z3EdW8XMhwrb2agUpuh8GvqHFvGwh/wdZjDDuadGrSR2lEgjcOvqQ==}
engines: {bun: ^1.1.27}
peerDependencies:
react: '>=18'
react-dom: '>=18'
react-loadable-ssr-addon-v5-slorber@1.0.3:
resolution: {integrity: sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ==}
engines: {node: '>=10.13.0'}
@@ -13832,6 +13689,9 @@ packages:
requires-port@1.0.0:
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
reselect@5.1.1:
resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==}
reselect@5.2.0:
resolution: {integrity: sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==}
@@ -16660,23 +16520,10 @@ snapshots:
'@codemirror/view': 6.43.0
crelt: 1.0.6
'@codemirror/search@6.7.1':
dependencies:
'@codemirror/state': 6.6.0
'@codemirror/view': 6.43.0
crelt: 1.0.6
'@codemirror/state@6.6.0':
dependencies:
'@marijn/find-cluster-break': 1.0.2
'@codemirror/theme-one-dark@6.1.3':
dependencies:
'@codemirror/language': 6.12.3
'@codemirror/state': 6.6.0
'@codemirror/view': 6.43.0
'@lezer/highlight': 1.2.3
'@codemirror/view@6.43.0':
dependencies:
'@codemirror/state': 6.6.0
@@ -18564,7 +18411,7 @@ snapshots:
'@formatjs/fast-memoize': 3.1.0
tslib: 2.8.1
'@gfazioli/mantine-onboarding-tour@4.0.6(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(@tabler/icons-react@3.44.0(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
'@gfazioli/mantine-onboarding-tour@4.0.8(@mantine/core@9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7))(@mantine/hooks@9.4.1(react@19.2.7))(@tabler/icons-react@3.44.0(react@19.2.7))(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@mantine/core': 9.4.1(@mantine/hooks@9.4.1(react@19.2.7))(@types/react@19.2.17)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)
'@mantine/hooks': 9.4.1(react@19.2.7)
@@ -18920,7 +18767,7 @@ snapshots:
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/yargs': 17.0.35
chalk: 4.1.2
@@ -20151,10 +19998,10 @@ snapshots:
dependencies:
'@standard-schema/spec': 1.1.0
'@standard-schema/utils': 0.3.0
immer: 11.1.9
immer: 11.1.4
redux: 5.0.1
redux-thunk: 3.1.0(redux@5.0.1)
reselect: 5.2.0
reselect: 5.1.1
optionalDependencies:
react: 19.2.7
react-redux: 9.2.0(@types/react@19.2.17)(react@19.2.7)(redux@5.0.1)
@@ -20497,7 +20344,7 @@ snapshots:
'@scalar/icons@0.7.3(@typescript/typescript6@6.0.2)':
dependencies:
'@phosphor-icons/core': 2.1.1
'@types/node': 24.13.3
'@types/node': 24.13.2
chalk: 5.6.2
vue: 3.5.35(@typescript/typescript6@6.0.2)
transitivePeerDependencies:
@@ -21472,11 +21319,11 @@ snapshots:
'@types/body-parser@1.19.5':
dependencies:
'@types/connect': 3.4.38
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/bonjour@3.5.13':
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/chai@5.2.2':
dependencies:
@@ -21487,11 +21334,11 @@ snapshots:
'@types/connect-history-api-fallback@1.5.4':
dependencies:
'@types/express-serve-static-core': 4.19.5
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/connect@3.4.38':
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/cookies@0.9.2':
dependencies:
@@ -21637,13 +21484,13 @@ snapshots:
'@types/docker-modem@3.0.6':
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/ssh2': 1.15.1
'@types/dockerode@4.0.1':
dependencies:
'@types/docker-modem': 3.0.6
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/ssh2': 1.15.1
'@types/estree-jsx@1.0.5':
@@ -21654,7 +21501,7 @@ snapshots:
'@types/express-serve-static-core@4.19.5':
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/qs': 6.9.16
'@types/range-parser': 1.2.7
'@types/send': 0.17.4
@@ -21686,7 +21533,7 @@ snapshots:
'@types/http-proxy@1.17.17':
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/istanbul-lib-coverage@2.0.6': {}
@@ -21716,7 +21563,7 @@ snapshots:
'@types/node-fetch@2.6.13':
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
form-data: 4.0.6
'@types/node-unifi@2.5.1(patch_hash=5e6ae51e2a17a7f9729bfa30b0eb3d0842a5810ac6db47603ab4a6efa1ed84c5)':
@@ -21747,10 +21594,18 @@ snapshots:
'@types/prismjs@1.26.6': {}
'@types/prop-types@15.7.15':
optional: true
'@types/qs@6.9.16': {}
'@types/range-parser@1.2.7': {}
'@types/react-dom@18.3.7(@types/react@18.3.31)':
dependencies:
'@types/react': 18.3.31
optional: true
'@types/react-dom@19.2.3(@types/react@19.2.17)':
dependencies:
'@types/react': 19.2.17
@@ -21772,6 +21627,12 @@ snapshots:
'@types/history': 4.7.11
'@types/react': 19.2.17
'@types/react@18.3.31':
dependencies:
'@types/prop-types': 15.7.15
csstype: 3.2.3
optional: true
'@types/react@19.2.17':
dependencies:
csstype: 3.2.3
@@ -21780,14 +21641,14 @@ snapshots:
'@types/sax@1.2.7':
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/semver@7.5.8': {}
'@types/send@0.17.4':
dependencies:
'@types/mime': 1.3.5
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/serve-index@1.9.4':
dependencies:
@@ -21796,7 +21657,7 @@ snapshots:
'@types/serve-static@1.15.7':
dependencies:
'@types/http-errors': 2.0.4
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/send': 0.17.4
'@types/set-cookie-parser@2.4.10':
@@ -21806,15 +21667,15 @@ snapshots:
'@types/sockjs@0.3.36':
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/ssh2-streams@0.1.12':
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/ssh2@0.5.52':
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/ssh2-streams': 0.1.12
'@types/ssh2@1.15.1':
@@ -21826,7 +21687,7 @@ snapshots:
'@types/stream-buffers@3.0.7':
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/triple-beam@1.3.5': {}
@@ -21851,7 +21712,7 @@ snapshots:
'@types/xml2js@0.4.14':
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
'@types/yargs-parser@21.0.3': {}
@@ -21863,33 +21724,6 @@ snapshots:
dependencies:
'@typescript/old': typescript@6.0.3
'@uiw/codemirror-extensions-basic-setup@4.25.11(@codemirror/autocomplete@6.20.3)(@codemirror/commands@6.10.3)(@codemirror/language@6.12.3)(@codemirror/lint@6.9.6)(@codemirror/search@6.7.1)(@codemirror/state@6.6.0)(@codemirror/view@6.43.0)':
dependencies:
'@codemirror/autocomplete': 6.20.3
'@codemirror/commands': 6.10.3
'@codemirror/language': 6.12.3
'@codemirror/lint': 6.9.6
'@codemirror/search': 6.7.1
'@codemirror/state': 6.6.0
'@codemirror/view': 6.43.0
'@uiw/react-codemirror@4.25.11(@babel/runtime@7.29.7)(@codemirror/autocomplete@6.20.3)(@codemirror/language@6.12.3)(@codemirror/lint@6.9.6)(@codemirror/search@6.7.1)(@codemirror/state@6.6.0)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.43.0)(codemirror@6.0.2)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)':
dependencies:
'@babel/runtime': 7.29.7
'@codemirror/commands': 6.10.3
'@codemirror/state': 6.6.0
'@codemirror/theme-one-dark': 6.1.3
'@codemirror/view': 6.43.0
'@uiw/codemirror-extensions-basic-setup': 4.25.11(@codemirror/autocomplete@6.20.3)(@codemirror/commands@6.10.3)(@codemirror/language@6.12.3)(@codemirror/lint@6.9.6)(@codemirror/search@6.7.1)(@codemirror/state@6.6.0)(@codemirror/view@6.43.0)
codemirror: 6.0.2
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
transitivePeerDependencies:
- '@codemirror/autocomplete'
- '@codemirror/language'
- '@codemirror/lint'
- '@codemirror/search'
'@ungap/structured-clone@1.3.0': {}
'@unhead/vue@2.1.15(vue@3.5.35(@typescript/typescript6@6.0.2))':
@@ -22941,16 +22775,6 @@ snapshots:
raw-body: 2.5.3
type-is: 1.6.18
codemirror@6.0.2:
dependencies:
'@codemirror/autocomplete': 6.20.3
'@codemirror/commands': 6.10.3
'@codemirror/language': 6.12.3
'@codemirror/lint': 6.9.6
'@codemirror/search': 6.7.1
'@codemirror/state': 6.6.0
'@codemirror/view': 6.43.0
collapse-white-space@2.1.0: {}
color-convert@1.9.3:
@@ -24121,7 +23945,7 @@ snapshots:
eval@0.1.8:
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
require-like: 0.1.2
event-target-shim@5.0.1: {}
@@ -25170,6 +24994,8 @@ snapshots:
immediate@3.0.6: {}
immer@11.1.4: {}
immer@11.1.9: {}
immutable@5.1.5: {}
@@ -25427,7 +25253,7 @@ snapshots:
jest-util@29.7.0:
dependencies:
'@jest/types': 29.6.3
'@types/node': 24.13.3
'@types/node': 24.13.2
chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11
@@ -25441,7 +25267,7 @@ snapshots:
jest-worker@29.7.0:
dependencies:
'@types/node': 24.13.3
'@types/node': 24.13.2
jest-util: 29.7.0
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -27833,7 +27659,7 @@ snapshots:
'@protobufjs/path': 1.1.2
'@protobufjs/pool': 1.1.0
'@protobufjs/utf8': 1.1.0
'@types/node': 24.13.3
'@types/node': 24.13.2
long: 5.3.2
proxmox-api@1.1.1:
@@ -27965,6 +27791,16 @@ snapshots:
dependencies:
react: 19.2.7
react-jsx-parser@2.4.1(react-dom@19.2.7(react@19.2.7))(react@19.2.7):
dependencies:
acorn: 8.16.0
acorn-jsx: 5.3.2(acorn@8.16.0)
react: 19.2.7
react-dom: 19.2.7(react@19.2.7)
optionalDependencies:
'@types/react': 18.3.31
'@types/react-dom': 18.3.7(@types/react@18.3.31)
react-loadable-ssr-addon-v5-slorber@1.0.3(@docusaurus/react-loadable@6.0.0(react@19.2.7))(webpack@5.107.1(@swc/core@1.15.3(@swc/helpers@0.5.15))(esbuild@0.28.1)(postcss@8.5.16)):
dependencies:
'@babel/runtime': 7.29.7
@@ -28401,6 +28237,8 @@ snapshots:
requires-port@1.0.0: {}
reselect@5.1.1: {}
reselect@5.2.0: {}
reserved-identifiers@1.2.0: {}
+1 -1
View File
@@ -20,7 +20,7 @@ catalog:
"@dnd-kit/utilities": ^3.2.2
"@drizzle-team/brocli": ^0.12.0
"@extractus/feed-extractor": 7.2.1
"@gfazioli/mantine-onboarding-tour": ^4.0.6
"@gfazioli/mantine-onboarding-tour": ^4.0.7
"@gitbeaker/rest": ^43.8.0
"@homarr/gridstack": ^1.12.0
"@homarr/node-unifi": ^2.6.0