From 623c56c0686a97e28f6247430276c0796f5aa9ad Mon Sep 17 00:00:00 2001 From: Rizumu Ayaka Date: Tue, 27 Jan 2026 19:44:10 +0800 Subject: [PATCH] feat: user customizable advanced widgets --- .../parameters/TabNormalInputs.vue | 14 +- .../parameters/WidgetActions.vue | 43 ++++ src/components/rightSidePanel/shared.ts | 7 +- .../vueNodes/components/LGraphNode.vue | 11 +- .../vueNodes/components/NodeWidgets.vue | 51 +++-- .../components/layout/WidgetLayoutField.vue | 30 +-- .../advancedWidgetOverridesStore.test.ts | 160 ++++++++++++++ .../workspace/advancedWidgetOverridesStore.ts | 205 +++++++++--------- 8 files changed, 367 insertions(+), 154 deletions(-) create mode 100644 src/stores/workspace/advancedWidgetOverridesStore.test.ts diff --git a/src/components/rightSidePanel/parameters/TabNormalInputs.vue b/src/components/rightSidePanel/parameters/TabNormalInputs.vue index 7f63a766ac..93c0613fac 100644 --- a/src/components/rightSidePanel/parameters/TabNormalInputs.vue +++ b/src/components/rightSidePanel/parameters/TabNormalInputs.vue @@ -5,6 +5,7 @@ import { useI18n } from 'vue-i18n' import type { LGraphNode } from '@/lib/litegraph/src/litegraph' import FormSearchInput from '@/renderer/extensions/vueNodes/widgets/components/form/FormSearchInput.vue' +import { useAdvancedWidgetOverridesStore } from '@/stores/workspace/advancedWidgetOverridesStore' import { useRightSidePanelStore } from '@/stores/workspace/rightSidePanelStore' import { computedSectionDataList, searchWidgetsAndNodes } from '../shared' @@ -19,6 +20,7 @@ const { nodes, mustShowNodeTitle } = defineProps<{ const { t } = useI18n() const rightSidePanelStore = useRightSidePanelStore() +const advancedOverridesStore = useAdvancedWidgetOverridesStore() const { searchQuery } = storeToRefs(rightSidePanelStore) const { widgetsSectionDataList, includesAdvanced } = computedSectionDataList( @@ -35,7 +37,8 @@ const advancedWidgetsSectionDataList = computed((): NodeWidgetsListList => { const advancedWidgets = widgets .filter( (w) => - !(w.options?.canvasOnly || w.options?.hidden) && w.options?.advanced + !(w.options?.canvasOnly || w.options?.hidden) && + advancedOverridesStore.getAdvancedState(node, w) ) .map((widget) => ({ node, widget })) return { widgets: advancedWidgets, node } @@ -110,7 +113,14 @@ const advancedLabel = computed(() => { class="border-b border-interface-stroke" /> -