public void AfterRead(BlockNode node, bool inResponsiveContext)
        {
            var controlName  = node.Name.Identifier;
            var templateName = node.Name.Kind.TypeName;
            var variantName  = node.Name.Kind.OptionalVariant;

            var styleName = $"default{templateName.FirstCharToUpper()}Style";

            if (_controlStore.TryGetControlState(controlName, out var controlState))
            {
                styleName = controlState.StyleName;
            }

            ControlTemplate template;

            if (!_templateStore.TryGetValue(templateName, out template))
            {
                template = null;
            }

            var defaultHelper = new DefaultRuleHelper(styleName, template, templateName, variantName, _theme, inResponsiveContext);

            foreach (var property in node.Properties.ToList())
            {
                var propName = property.Identifier;
                if (defaultHelper.TryGetDefaultRule(propName, out var defaultScript) && defaultScript == property.Expression.Expression)
                {
                    node.Properties.Remove(property);
                }
            }
        }
        public void BeforeWrite(BlockNode node, bool inResponsiveContext)
        {
            var controlName  = node.Name.Identifier;
            var templateName = node.Name.Kind.TypeName;
            var variantName  = node.Name.Kind.OptionalVariant;

            var styleName = $"default{templateName.FirstCharToUpper()}Style";

            HashSet <string> propNames = null;

            if (_controlStore.TryGetControlState(controlName, out var controlState))
            {
                styleName = controlState.StyleName;
                propNames = new HashSet <string>(controlState.Properties.Select(state => state.PropertyName)
                                                 .Concat(controlState.DynamicProperties?.Select(state => state.PropertyName) ?? Enumerable.Empty <string>()));
            }

            ControlTemplate template;

            if (!_templateStore.TryGetValue(templateName, out template))
            {
                template = null;
            }

            var defaults = new DefaultRuleHelper(styleName, template, templateName, variantName, _theme, inResponsiveContext).GetDefaultRules();

            foreach (var property in node.Properties)
            {
                defaults.Remove(property.Identifier);
            }

            foreach (var defaultkvp in defaults)
            {
                if (propNames != null && !propNames.Contains(defaultkvp.Key))
                {
                    continue;
                }

                node.Properties.Add(new PropertyNode
                {
                    Identifier = defaultkvp.Key,
                    Expression = new ExpressionNode
                    {
                        Expression = defaultkvp.Value
                    }
                });
            }
        }