You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ha...@apache.org on 2026/03/18 09:05:25 UTC

(royale-asjs) branch develop updated: Closer

This is an automated email from the ASF dual-hosted git repository.

harbs pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git


The following commit(s) were added to refs/heads/develop by this push:
     new 2c4954fb52 Closer
2c4954fb52 is described below

commit 2c4954fb52af2c0148acd4989b4f9aec48a1e3cb
Author: Harbs <ha...@in-tools.com>
AuthorDate: Wed Mar 18 11:05:19 2026 +0200

    Closer
---
 .../royale/style/stylebeads/CompositeStyle.as      | 23 +++++++++++++++--
 .../apache/royale/style/stylebeads/IStyleBead.as   |  3 ++-
 .../royale/style/stylebeads/LeafStyleBase.as       |  4 +--
 .../royale/style/stylebeads/StyleBeadBase.as       |  6 ++++-
 .../royale/style/stylebeads/states/ActiveState.as  |  4 +--
 .../royale/style/stylebeads/states/CheckedState.as |  4 +--
 .../style/stylebeads/states/DisabledState.as       |  4 +--
 .../royale/style/stylebeads/states/EvenState.as    |  4 +--
 .../royale/style/stylebeads/states/FirstState.as   |  4 +--
 .../royale/style/stylebeads/states/FocusState.as   |  4 +--
 .../style/stylebeads/states/FocusVisibleState.as   |  4 +--
 .../royale/style/stylebeads/states/HoverState.as   |  4 +--
 .../style/stylebeads/states/IndeterminateState.as  |  4 +--
 .../royale/style/stylebeads/states/LastState.as    |  4 +--
 .../style/stylebeads/states/LeafDecorator.as       | 29 ++++++++++++++++------
 .../royale/style/stylebeads/states/OddState.as     |  4 +--
 .../royale/style/stylebeads/states/PeerPseudo.as   | 24 +++++++++++++-----
 .../style/stylebeads/states/QueryBaseStyle.as      |  5 ++++
 .../style/stylebeads/states/RequiredState.as       |  4 +--
 .../style/stylebeads/states/StyleStateBase.as      |  4 +--
 .../style/stylebeads/states/attribute/AriaState.as |  4 +--
 .../style/stylebeads/states/attribute/DataState.as |  4 +--
 .../stylebeads/states/attribute/InertState.as      |  4 +--
 .../style/stylebeads/states/attribute/OpenState.as |  4 +--
 .../style/stylebeads/states/attribute/RTLState.as  |  4 +--
 .../style/stylebeads/states/pseudo/AfterState.as   |  4 +--
 .../stylebeads/states/pseudo/BackdropState.as      |  4 +--
 .../style/stylebeads/states/pseudo/BeforeState.as  |  4 +--
 .../style/stylebeads/states/pseudo/FileState.as    |  4 +--
 .../stylebeads/states/pseudo/FirstLetterState.as   |  4 +--
 .../stylebeads/states/pseudo/FirstLineState.as     |  4 +--
 .../style/stylebeads/states/pseudo/MarkerState.as  |  4 +--
 .../stylebeads/states/pseudo/PlaceholderState.as   |  4 +--
 .../stylebeads/states/pseudo/SelectionState.as     |  4 +--
 .../EvenState.as => util/StyleDecoration.as}       | 15 +++++------
 35 files changed, 136 insertions(+), 81 deletions(-)

diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/CompositeStyle.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/CompositeStyle.as
index 27ca8f455f..afcb8a5a1c 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/CompositeStyle.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/CompositeStyle.as
@@ -18,6 +18,8 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.style.stylebeads
 {
+	import org.apache.royale.debugging.assert;
+
 	/**
 	 * Convenience class for styles that are composed of multiple leaf styles.
 	 * This class does not have any functionality on its own,
@@ -31,11 +33,28 @@ package org.apache.royale.style.stylebeads
 		{
 			super();
 		}
+		/**
+		 * Composite styles have no effect, so it should not insert itself into the hierarchy.
+		 */
+		override public function getLeaves():Array
+		{
+			assert(styles && styles.length > 0, "Non-leaf style beads must have child styles");
+			// nothing to preprocess.
+			var retVal:Array = [];
+			for each(var style:IStyleBead in styles)
+			{
+				// Composite styles have no effect, so it should not insert itself into the hierarchy.
+				style.parentStyle = parentStyle;
+				retVal = retVal.concat(style.getLeaves());
+			}
+		return retVal;
+		}
+
 		//TODO: Figure this out.
-		override public function decorateChildStyle(style:ILeafStyleBead):void
+		override public function decorateChildStyle(style:ILeafStyleBead,decorations:Array):void
 		{
 			if(parentStyle)
-				parentStyle.decorateChildStyle(style);
+				parentStyle.decorateChildStyle(style, decorations);
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/IStyleBead.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/IStyleBead.as
index 4f184e4696..a640d94187 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/IStyleBead.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/IStyleBead.as
@@ -30,10 +30,11 @@ package org.apache.royale.style.stylebeads
 	public interface IStyleBead extends IBead
 	{
 		function get isLeaf():Boolean;
+		function get isGroup():Boolean;
 		function getLeaves():Array;
 		function addStyleBead(bead:IStyleBead):void;
 		function get parentStyle():IStyleBead;
 		function set parentStyle(value:IStyleBead):void;
-		function decorateChildStyle(style:ILeafStyleBead):void;
+		function decorateChildStyle(style:ILeafStyleBead,decorations:Array):void;
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/LeafStyleBase.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/LeafStyleBase.as
index bb79006c77..2043827d90 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/LeafStyleBase.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/LeafStyleBase.as
@@ -45,7 +45,7 @@ package org.apache.royale.style.stylebeads
 		{
 			// Walk up the chain decorating the styles.
 			if(parentStyle)
-				parentStyle.decorateChildStyle(this);
+				parentStyle.decorateChildStyle(this,[]);
 			return [this];
 		}
 		protected var _value:*;
@@ -273,7 +273,7 @@ package org.apache.royale.style.stylebeads
 		{
 			_parentQueryId = value;
 		}
-		override public function decorateChildStyle(style:ILeafStyleBead):void
+		override public function decorateChildStyle(style:ILeafStyleBead, decorations:Array):void
 		{
 			assert(false, "Leaf styles should not have child styles.");
 		}
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/StyleBeadBase.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/StyleBeadBase.as
index 8e2c2fa477..9ca51a5544 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/StyleBeadBase.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/StyleBeadBase.as
@@ -90,11 +90,15 @@ package org.apache.royale.style.stylebeads
 		{
 			_parentStyle = value;
 		}
-		abstract public function decorateChildStyle(style:ILeafStyleBead):void;
+		abstract public function decorateChildStyle(style:ILeafStyleBead, decorations:Array):void;
 		public function get isLeaf():Boolean
 		{
 			return false;
 		}
+		public function get isGroup():Boolean
+		{
+			return false;
+		}
 
 		protected function validateColor(value:*,supportsNone:Boolean):StyleData
 		{
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/ActiveState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/ActiveState.as
index 2ba3c38005..092dfe9abc 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/ActiveState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/ActiveState.as
@@ -23,8 +23,8 @@ package org.apache.royale.style.stylebeads.states
 		public function ActiveState()
 		{
 			super();
-			preDecorator = "active:";
-			postDecorator = ":active";
+			selectorDecorator = "active:";
+			ruleDecorator = ":active";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/CheckedState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/CheckedState.as
index c2662c59fa..8b48662964 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/CheckedState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/CheckedState.as
@@ -23,8 +23,8 @@ package org.apache.royale.style.stylebeads.states
 		public function CheckedState(styles:Array = null)
 		{
 			super();
-			preDecorator = "checked:";
-			postDecorator = ":checked";
+			selectorDecorator = "checked:";
+			ruleDecorator = ":checked";
 			this.styles = styles;
 		}
 	}
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/DisabledState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/DisabledState.as
index 8e4205108f..8761aa5e6e 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/DisabledState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/DisabledState.as
@@ -23,8 +23,8 @@ package org.apache.royale.style.stylebeads.states
 		public function DisabledState(styles:Array = null)
 		{
 			super();
-			preDecorator = "disabled:";
-			postDecorator = ":disabled";
+			selectorDecorator = "disabled:";
+			ruleDecorator = ":disabled";
 			this.styles = styles;
 		}
 	}
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/EvenState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/EvenState.as
index 5099abeda3..3226675da8 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/EvenState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/EvenState.as
@@ -23,8 +23,8 @@ package org.apache.royale.style.stylebeads.states
 		public function EvenState()
 		{
 			super();
-			preDecorator = "even:";
-			postDecorator = ":nth-child(2n)";
+			selectorDecorator = "even:";
+			ruleDecorator = ":nth-child(2n)";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/FirstState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/FirstState.as
index 4d3d1335d0..5cf160ed54 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/FirstState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/FirstState.as
@@ -23,8 +23,8 @@ package org.apache.royale.style.stylebeads.states
 		public function FirstState()
 		{
 			super();
-			preDecorator = "first:";
-			postDecorator = ":first-child";
+			selectorDecorator = "first:";
+			ruleDecorator = ":first-child";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/FocusState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/FocusState.as
index ecf61af93d..33bb96d548 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/FocusState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/FocusState.as
@@ -23,8 +23,8 @@ package org.apache.royale.style.stylebeads.states
 		public function FocusState()
 		{
 			super();
-			preDecorator = "focus:";
-			postDecorator = ":focus";
+			selectorDecorator = "focus:";
+			ruleDecorator = ":focus";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/FocusVisibleState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/FocusVisibleState.as
index c7254e3c71..f63c694520 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/FocusVisibleState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/FocusVisibleState.as
@@ -23,8 +23,8 @@ package org.apache.royale.style.stylebeads.states
 		public function FocusVisibleState()
 		{
 			super();
-			preDecorator = "focus-visible:";
-			postDecorator = ":focus-visible";
+			selectorDecorator = "focus-visible:";
+			ruleDecorator = ":focus-visible";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/HoverState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/HoverState.as
index 8a3309dd73..ab4a23af12 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/HoverState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/HoverState.as
@@ -23,8 +23,8 @@ package org.apache.royale.style.stylebeads.states
 		public function HoverState()
 		{
 			super();
-			preDecorator = "hover:";
-			postDecorator = ":hover";
+			selectorDecorator = "hover:";
+			ruleDecorator = ":hover";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/IndeterminateState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/IndeterminateState.as
index 17a35887bb..49d914bbf1 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/IndeterminateState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/IndeterminateState.as
@@ -23,8 +23,8 @@ package org.apache.royale.style.stylebeads.states
 		public function IndeterminateState(styles:Array = null)
 		{
 			super();
-			preDecorator = "indeterminate:";
-			postDecorator = ":indeterminate";
+			selectorDecorator = "indeterminate:";
+			ruleDecorator = ":indeterminate";
 			this.styles = styles;
 		}
 	}
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/LastState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/LastState.as
index c4bd3b2c3b..705630b423 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/LastState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/LastState.as
@@ -23,8 +23,8 @@ package org.apache.royale.style.stylebeads.states
 		public function LastState()
 		{
 			super();
-			preDecorator = "last:";
-			postDecorator = ":last-child";
+			selectorDecorator = "last:";
+			ruleDecorator = ":last-child";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/LeafDecorator.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/LeafDecorator.as
index 600824237e..178144cdd9 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/LeafDecorator.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/LeafDecorator.as
@@ -23,29 +23,42 @@ package org.apache.royale.style.stylebeads.states
 	import org.apache.royale.debugging.assert;
 	import org.apache.royale.style.stylebeads.LeafStyleBase;
 	import org.apache.royale.style.stylebeads.ILeafStyleBead;
+	import org.apache.royale.style.util.StyleDecoration;
 
 	public class LeafDecorator extends StyleBeadBase
 	{
+		protected static const STATE:String = "state";
+		protected static const COMBINER:String = "combiner";
+		protected static const QUERY:String = "query";
+
 		public function LeafDecorator()
 		{
 			super();
 		}
-
-		protected var preDecorator:String;
-		protected var postDecorator:String;
+		protected var decoratorType:String = STATE;
+		protected var selectorDecorator:String;
+		protected var ruleDecorator:String;
 		protected var leafStyle:LeafStyleBase;
 		/**
 		 * @royaleignorecoercion org.apache.royale.style.stylebeads.LeafStyleBase
 		 */
-		override public function decorateChildStyle(style:ILeafStyleBead):void
+		override public function decorateChildStyle(style:ILeafStyleBead, decorations:Array):void
 		{
 			assert(style.isLeaf, "LeafDecorator can only decorate leaf styles");
 			var leafStyle:LeafStyleBase = style as LeafStyleBase;
-			leafStyle.rulePrefix = preDecorator + leafStyle.rulePrefix;
-			leafStyle.ruleSuffix = leafStyle.ruleSuffix + postDecorator;
-			leafStyle.selectorPrefix = preDecorator + leafStyle.selectorPrefix;
+			leafStyle.selectorPrefix = selectorDecorator + leafStyle.selectorPrefix;
+
+			decorations.push(new StyleDecoration(decoratorType, ruleDecorator));
+			/**
+			 * Default behavior is for state decorators. In that case, the decoration is added as a suffix.
+			 * Otherwise, the decoration is passed to the parent which handles the decoration based on the type.
+			 */
+			if(!parentStyle || parentStyle.isGroup)
+			{
+				leafStyle.ruleSuffix = leafStyle.ruleSuffix + ruleDecorator;
+			}
 			if(parentStyle)
-				parentStyle.decorateChildStyle(style);
+				parentStyle.decorateChildStyle(style, decorations);
 
 		}
 	}
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/OddState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/OddState.as
index de3594a1ad..a95c0c07dc 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/OddState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/OddState.as
@@ -23,8 +23,8 @@ package org.apache.royale.style.stylebeads.states
 		public function OddState()
 		{
 			super();
-			preDecorator = "odd:";
-			postDecorator = ":nth-child(odd)";
+			selectorDecorator = "odd:";
+			ruleDecorator = ":nth-child(odd)";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/PeerPseudo.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/PeerPseudo.as
index 0bd37fc4cd..367c9b2f76 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/PeerPseudo.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/PeerPseudo.as
@@ -20,23 +20,35 @@ package org.apache.royale.style.stylebeads.states
 {
 	import org.apache.royale.style.stylebeads.IStyleBead;
 	import org.apache.royale.style.stylebeads.ILeafStyleBead;
+	import org.apache.royale.style.util.StyleDecoration;
 
-	public class PeerPseudo extends StyleStateBase
+	public class PeerPseudo extends LeafDecorator
 	{
 		public function PeerPseudo(styles:Array = null)
 		{
 			super();
 			this.styles = styles;
+			selectorDecorator = "peer-";
+			ruleDecorator = "peer";
+
+			decoratorType = COMBINER;
 		}
-		override public function decorateChildStyle(style:ILeafStyleBead):void
+		override public function decorateChildStyle(style:ILeafStyleBead, decorations:Array):void
 		{
-			var selector:String = "peer";
-			style.selectorPrefix = selector + "-" + style.selectorPrefix;
-			style.rulePrefix = "." + selector + ":" +  style.rulePrefix + " ~ ";
+			style.selectorPrefix = selectorDecorator + style.selectorPrefix;
+
+			//TODO figure out more complex combinations. For now, just handle limited nesting.
+			var decorationStr:String = decorations.map(function(decoration:StyleDecoration, index:int, arr:Array):String{
+				return decoration.decoration;
+			}).join("");
+			
+			decorations.push(new StyleDecoration(decoratorType, ruleDecorator));
+
+			style.rulePrefix = "." + ruleDecorator + decorationStr + " ~ " + style.rulePrefix;
 			// style.ruleSuffix = selector + ":" + style.ruleSuffix;
 			
 			if(parentStyle)
-				parentStyle.decorateChildStyle(style);
+				parentStyle.decorateChildStyle(style, decorations);
 		}
 	}
 }
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/QueryBaseStyle.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/QueryBaseStyle.as
index a06120eebd..f4201ec104 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/QueryBaseStyle.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/QueryBaseStyle.as
@@ -27,6 +27,11 @@ package org.apache.royale.style.stylebeads.states
 		{
 			super();
 		}
+
+		override public function get isGroup():Boolean
+		{
+			return true;
+		}
 		/**
 		 * Change in subclasses for other query types such as `container` or `supports`.
 		 */
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/RequiredState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/RequiredState.as
index cca21bc947..0fc43498c9 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/RequiredState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/RequiredState.as
@@ -23,8 +23,8 @@ package org.apache.royale.style.stylebeads.states
 		public function RequiredState()
 		{
 			super();
-			preDecorator = "required:";
-			postDecorator = ":required";
+			selectorDecorator = "required:";
+			ruleDecorator = ":required";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/StyleStateBase.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/StyleStateBase.as
index f791bc8fee..46019a8581 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/StyleStateBase.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/StyleStateBase.as
@@ -44,11 +44,11 @@ selectorPrefix: dark:peer-focus-visible:ring-offset-slate-950
 }
 
  */
-		override public function decorateChildStyle(style:ILeafStyleBead):void
+		override public function decorateChildStyle(style:ILeafStyleBead, decorations:Array):void
 		{
 			//TODO: Figure out what goes in here.
 			if(parentStyle)
-				parentStyle.decorateChildStyle(style);
+				parentStyle.decorateChildStyle(style, decorations);
 
 		}
 
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/AriaState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/AriaState.as
index cc58186a71..b81186382a 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/AriaState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/AriaState.as
@@ -42,8 +42,8 @@ package org.apache.royale.style.stylebeads.states.attribute
 		public function set aria(value:String):void
 		{
 			_aria = value;
-			preDecorator = value + ":";
-			postDecorator = "[" + value + "=true]";
+			selectorDecorator = value + ":";
+			ruleDecorator = "[" + value + "=true]";
 		}
 		/**
 		 * The aria attribute without the aria- prefix.
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/DataState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/DataState.as
index 0589e4b62e..f2b3bf38b9 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/DataState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/DataState.as
@@ -38,8 +38,8 @@ package org.apache.royale.style.stylebeads.states.attribute
 		public function set data(value:String):void
 		{
 			_data = value;
-			preDecorator = value + ":";
-			postDecorator = "[" + value + "]";
+			selectorDecorator = value + ":";
+			ruleDecorator = "[" + value + "]";
 		}
 		private var _dataType:String;
 
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/InertState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/InertState.as
index be3a9ea6cc..70dd27cee1 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/InertState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/InertState.as
@@ -28,8 +28,8 @@ package org.apache.royale.style.stylebeads.states.attribute
 		public function InertState()
 		{
 			super();
-			preDecorator = "inert:";
-			postDecorator = ":is([inert], [inert] *)";
+			selectorDecorator = "inert:";
+			ruleDecorator = ":is([inert], [inert] *)";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/OpenState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/OpenState.as
index 86491f3631..93581e880a 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/OpenState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/OpenState.as
@@ -27,8 +27,8 @@ package org.apache.royale.style.stylebeads.states.attribute
 		public function OpenState()
 		{
 			super();
-			preDecorator = "open:";
-			postDecorator = ":is([open], :popover-open, :open)";
+			selectorDecorator = "open:";
+			ruleDecorator = ":is([open], :popover-open, :open)";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/RTLState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/RTLState.as
index 0eb47b5c75..a6cd6cad6b 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/RTLState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/RTLState.as
@@ -27,8 +27,8 @@ package org.apache.royale.style.stylebeads.states.attribute
 		public function RTLState()
 		{
 			super();
-			preDecorator = "rtl:";
-			postDecorator = ":where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *)";
+			selectorDecorator = "rtl:";
+			ruleDecorator = ":where(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)),[dir=rtl],[dir=rtl] *)";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/AfterState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/AfterState.as
index e1041c691c..9e4255a769 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/AfterState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/AfterState.as
@@ -28,8 +28,8 @@ package org.apache.royale.style.stylebeads.states.pseudo
 		public function AfterState()
 		{
 			super();
-			preDecorator = "after:";
-			postDecorator = "::after";
+			selectorDecorator = "after:";
+			ruleDecorator = "::after";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/BackdropState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/BackdropState.as
index 462a7e0255..b66471231b 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/BackdropState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/BackdropState.as
@@ -25,8 +25,8 @@ package org.apache.royale.style.stylebeads.states.pseudo
 		public function BackdropState()
 		{
 			super();
-			preDecorator = "backdrop:";
-			postDecorator = "::backdrop";
+			selectorDecorator = "backdrop:";
+			ruleDecorator = "::backdrop";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/BeforeState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/BeforeState.as
index 3d3602006f..79ede71409 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/BeforeState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/BeforeState.as
@@ -28,8 +28,8 @@ package org.apache.royale.style.stylebeads.states.pseudo
 		public function BeforeState()
 		{
 			super();
-			preDecorator = "before:";
-			postDecorator = "::before";
+			selectorDecorator = "before:";
+			ruleDecorator = "::before";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/FileState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/FileState.as
index 08771f60e5..ec87fcb576 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/FileState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/FileState.as
@@ -25,8 +25,8 @@ package org.apache.royale.style.stylebeads.states.pseudo
 		public function FileState()
 		{
 			super();
-			preDecorator = "file:";
-			postDecorator = "::file-selector-button";
+			selectorDecorator = "file:";
+			ruleDecorator = "::file-selector-button";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/FirstLetterState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/FirstLetterState.as
index b07a2085f1..af4516bc96 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/FirstLetterState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/FirstLetterState.as
@@ -25,8 +25,8 @@ package org.apache.royale.style.stylebeads.states.pseudo
 		public function FirstLetterState()
 		{
 			super();
-			preDecorator = "first-letter:";
-			postDecorator = ":first-letter";
+			selectorDecorator = "first-letter:";
+			ruleDecorator = ":first-letter";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/FirstLineState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/FirstLineState.as
index b62e374aeb..9358f29c09 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/FirstLineState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/FirstLineState.as
@@ -25,8 +25,8 @@ package org.apache.royale.style.stylebeads.states.pseudo
 		public function FirstLineState()
 		{
 			super();
-			preDecorator = "first-line:";
-			postDecorator = ":first-line";
+			selectorDecorator = "first-line:";
+			ruleDecorator = ":first-line";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/MarkerState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/MarkerState.as
index ef6178c021..1a7b5f8572 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/MarkerState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/MarkerState.as
@@ -25,8 +25,8 @@ package org.apache.royale.style.stylebeads.states.pseudo
 		public function MarkerState()
 		{
 			super();
-			preDecorator = "marker:";
-			postDecorator = "::marker";
+			selectorDecorator = "marker:";
+			ruleDecorator = "::marker";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/PlaceholderState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/PlaceholderState.as
index e6a34a1244..d256a6576c 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/PlaceholderState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/PlaceholderState.as
@@ -25,8 +25,8 @@ package org.apache.royale.style.stylebeads.states.pseudo
 		public function PlaceholderState()
 		{
 			super();
-			preDecorator = "placeholder:";
-			postDecorator = "::placeholder";
+			selectorDecorator = "placeholder:";
+			ruleDecorator = "::placeholder";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/SelectionState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/SelectionState.as
index c257cacda6..83ed022246 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/SelectionState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/pseudo/SelectionState.as
@@ -25,8 +25,8 @@ package org.apache.royale.style.stylebeads.states.pseudo
 		public function SelectionState()
 		{
 			super();
-			preDecorator = "selection:";
-			postDecorator = "::selection";
+			selectorDecorator = "selection:";
+			ruleDecorator = "::selection";
 		}
 	}
 }
\ No newline at end of file
diff --git a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/EvenState.as b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/util/StyleDecoration.as
similarity index 79%
copy from frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/EvenState.as
copy to frameworks/projects/Style/src/main/royale/org/apache/royale/style/util/StyleDecoration.as
index 5099abeda3..0d0040fb06 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/EvenState.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/util/StyleDecoration.as
@@ -16,15 +16,16 @@
 //  limitations under the License.
 //
 ////////////////////////////////////////////////////////////////////////////////
-package org.apache.royale.style.stylebeads.states
+package org.apache.royale.style.util
 {
-	public class EvenState extends LeafDecorator
+	public class StyleDecoration
 	{
-		public function EvenState()
+		public function StyleDecoration(type:String, decoration:String)
 		{
-			super();
-			preDecorator = "even:";
-			postDecorator = ":nth-child(2n)";
+			this.type = type;
+			this.decoration = decoration;
 		}
-	}
+		public var type:String;
+		public var decoration:String;
+	}	
 }
\ No newline at end of file