From ced96a57b322f268eafa4e5b8b99d32c760815d4 Mon Sep 17 00:00:00 2001 From: Thomas Camlong Date: Tue, 9 Jun 2026 21:03:00 +0200 Subject: [PATCH] feat: add maxIntegrations property to widget definitions Replaces the hardcoded audioStats check with a generic maxIntegrations field on WidgetDefinition. The integration select component respects this to enforce single-select mode. --- packages/widgets/src/audio-stats/index.ts | 1 + packages/widgets/src/definition.ts | 1 + packages/widgets/src/modals/widget-edit-modal.tsx | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/widgets/src/audio-stats/index.ts b/packages/widgets/src/audio-stats/index.ts index 2f90b668e..25af0bdaf 100644 --- a/packages/widgets/src/audio-stats/index.ts +++ b/packages/widgets/src/audio-stats/index.ts @@ -16,6 +16,7 @@ export const { definition, componentLoader } = createWidgetDefinition("audioStat icon: IconHeadphones, supportedIntegrations: ["navidrome", "audiobookshelf"], integrationsRequired: true, + maxIntegrations: 1, createOptions() { return optionsBuilder.from( (factory) => ({ diff --git a/packages/widgets/src/definition.ts b/packages/widgets/src/definition.ts index 6a6d026fb..4c65d231e 100644 --- a/packages/widgets/src/definition.ts +++ b/packages/widgets/src/definition.ts @@ -42,6 +42,7 @@ export interface WidgetDefinition { icon: TablerIcon; supportedIntegrations?: IntegrationKind[]; integrationsRequired?: boolean; + maxIntegrations?: number; createOptions: ( settings: Pick, ) => WidgetOptionsRecord; diff --git a/packages/widgets/src/modals/widget-edit-modal.tsx b/packages/widgets/src/modals/widget-edit-modal.tsx index 44eda2390..e3b814a59 100644 --- a/packages/widgets/src/modals/widget-edit-modal.tsx +++ b/packages/widgets/src/modals/widget-edit-modal.tsx @@ -117,7 +117,7 @@ export const WidgetEditModal = createModal>(({ actions, i 1} {...form.getInputProps("integrationIds")} /> )}