diff --git a/frontend/src/adapters/state/redux/chartSlice.ts b/frontend/src/adapters/state/redux/chartSlice.ts index 7579952..9e0f1c6 100644 --- a/frontend/src/adapters/state/redux/chartSlice.ts +++ b/frontend/src/adapters/state/redux/chartSlice.ts @@ -16,8 +16,14 @@ const DEFAULT_STYLE: StyleConfig = { animation: { enabled: true, duration: 500, easing: 'ease-out' }, }; -function ensureStyle(style: any): StyleConfig { +function ensureStyle(style: any): StyleConfig & Record { if (!style || typeof style !== 'object') return { ...DEFAULT_STYLE }; + // Collect any custom/extension properties (like wordcloud) + const known = new Set(['title','colors','legend','xAxis','yAxis','dataLabel','background','border','animation']); + const custom: Record = {}; + for (const key of Object.keys(style)) { + if (!known.has(key)) custom[key] = style[key]; + } return { title: { ...DEFAULT_STYLE.title, ...(style.title ?? {}) }, colors: (Array.isArray(style.colors) && style.colors.length > 0) ? style.colors : DEFAULT_STYLE.colors, @@ -28,6 +34,7 @@ function ensureStyle(style: any): StyleConfig { background: { ...DEFAULT_STYLE.background, ...(style.background ?? {}) }, border: { ...DEFAULT_STYLE.border, ...(style.border ?? {}) }, animation: { ...DEFAULT_STYLE.animation, ...(style.animation ?? {}) }, + ...custom, // Preserve wordcloud and any other custom extensions }; }