From 436430523538fe6571c64c95e445a863e45a03d6 Mon Sep 17 00:00:00 2001 From: mohamedsalem401 Date: Mon, 16 Jun 2025 15:02:22 +0300 Subject: [PATCH] Add skip resolve option to component.getStyle --- .../core/src/dom_components/model/Component.ts | 18 ++++++++++++------ .../model/ModelDataResolverWatchers.ts | 8 ++++++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/packages/core/src/dom_components/model/Component.ts b/packages/core/src/dom_components/model/Component.ts index 60fb79117..437918e44 100644 --- a/packages/core/src/dom_components/model/Component.ts +++ b/packages/core/src/dom_components/model/Component.ts @@ -336,6 +336,10 @@ export default class Component extends StyleableModel { isSymbol(this) && initSymbol(this); em?.trigger(ComponentsEvents.create, this, opt); } + + if (avoidInline(em)) { + this.dataResolverWatchers.disableStyles(); + } } set( @@ -803,8 +807,10 @@ export default class Component extends StyleableModel { */ getStyle(options: any = {}, optsAdd: any = {}) { const { em } = this; - const prop = isString(options) ? options : ''; - const opts = prop ? optsAdd : options; + const isOptionsString = isString(options); + const prop = isOptionsString ? options : ''; + const opts = isOptionsString || options === '' ? optsAdd : options; + const skipResolve = !!opts?.skipResolve; if (avoidInline(em) && !opts.inline) { const state = em.get('state'); @@ -813,15 +819,15 @@ export default class Component extends StyleableModel { this.rule = rule; if (rule) { - return rule.getStyle(prop); + return rule.getStyle(prop, { skipResolve }); } - // Return empty style if not rule have been found. We cannot return inline style with the next return + // Return empty style if no rule have been found. We cannot return inline style with the next return // because else on load inline style is set a #id or .class style return {}; } - return super.getStyle.call(this, prop); + return super.getStyle.call(this, prop, { skipResolve }); } /** @@ -840,7 +846,7 @@ export default class Component extends StyleableModel { prop = { ...prop, ...(style as any) }; const state = em.get('state'); const cc = em.Css; - const propOrig = this.getStyle(opts); + const propOrig = this.getStyle({ ...opts, skipResolve: true }); const newStyle = { ...propOrig, ...prop }; this.rule = cc.setIdRule(this.getId(), newStyle, { state, ...opts }); const diff = shallowDiff(propOrig, prop); diff --git a/packages/core/src/dom_components/model/ModelDataResolverWatchers.ts b/packages/core/src/dom_components/model/ModelDataResolverWatchers.ts index 3f8cae5ec..1fb432824 100644 --- a/packages/core/src/dom_components/model/ModelDataResolverWatchers.ts +++ b/packages/core/src/dom_components/model/ModelDataResolverWatchers.ts @@ -71,6 +71,14 @@ export class ModelDataResolverWatchers { return this.styleWatcher.setDynamicValues(styles, options); } + /** + * Disables inline style management for the component. Style handling is shifted to CSS rules + */ + disableStyles() { + this.styleWatcher.removeListeners(); + this.styleWatcher.destroy(); + } + removeAttributes(attributes: string[]) { this.attributeWatcher.removeListeners(attributes); this.updateSymbolOverride();