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 379e23c0c0 Fixed List
379e23c0c0 is described below

commit 379e23c0c0d9357a68343cd848a3b12ddd6d5790
Author: Harbs <[email protected]>
AuthorDate: Tue Mar 31 14:39:19 2026 +0300

    Fixed List
---
 .../projects/Style/src/main/resources/defaults.css |  28 ++-
 .../Style/src/main/resources/style-manifest.xml    |   6 +
 .../org/apache/royale/style/DataItemRenderer.as    |   1 -
 .../main/royale/org/apache/royale/style/List.as    |  20 ++
 .../RowGap.as => beads/IKeyboardHandler.as}        |  10 +-
 .../apache/royale/style/beads/ListController.as    | 129 +++++++++++++
 .../org/apache/royale/style/beads/ListModel.as     | 215 +++++++++++++++++++++
 .../org/apache/royale/style/beads/ListView.as      |  99 ++++++++++
 .../org/apache/royale/style/colors/ColorSwatch.as  |  28 +++
 .../flexgrid/ColumnGap.as => data/IDataItem.as}    |  17 +-
 .../flexgrid/ColumnGap.as => data/IListItem.as}    |  23 ++-
 .../IListItemRenderer.as}                          |  17 +-
 .../royale/style/renderers/ListItemRenderer.as     | 185 ++++++++++++++++++
 .../apache/royale/style/skins/ListRendererSkin.as  | 163 ++++++++++++++++
 .../royale/style/stylebeads/flexgrid/ColumnGap.as  |   2 +-
 .../apache/royale/style/stylebeads/flexgrid/Gap.as |   2 +-
 .../style/stylebeads/flexgrid/JustifyContent.as    |   4 +-
 .../royale/style/stylebeads/flexgrid/RowGap.as     |   2 +-
 .../stylebeads/states/attribute/SelectedState.as   |   5 +-
 .../royale/style/support/UIItemRendererBase.as     |   3 +
 20 files changed, 910 insertions(+), 49 deletions(-)

diff --git a/frameworks/projects/Style/src/main/resources/defaults.css 
b/frameworks/projects/Style/src/main/resources/defaults.css
index 297f33e72e..17ae0a005d 100644
--- a/frameworks/projects/Style/src/main/resources/defaults.css
+++ b/frameworks/projects/Style/src/main/resources/defaults.css
@@ -51,6 +51,12 @@ CheckBox
 {
        IStyleSkin: 
ClassReference("org.apache.royale.style.skins.CheckBoxSkin");
 }
+
+DataItemRenderer
+{
+       IBeadController: 
ClassReference("org.apache.royale.html.beads.controllers.ItemRendererMouseController");
+}
+
 DataContainer
 {
        IBeadModel: 
ClassReference("org.apache.royale.html.beads.models.DataProviderModel");
@@ -75,8 +81,8 @@ MultiSelectionList
        IBeadController: 
ClassReference("org.apache.royale.html.beads.controllers.ListMultiSelectionMouseController");
        IBeadLayout: 
ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
        IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData");
-       IItemRendererClassFactory: 
ClassReference("org.apache.royale.html.beads.MultiSelectionItemRendererClassFactory");
-       IItemRendererInitializer: 
ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
+       IItemRendererClassFactory: 
ClassReference("org.apache.royale.core.OverridableSelectableItemRendererClassFactory");
+       IItemRendererInitializer: 
ClassReference("org.apache.royale.html.beads.IndexedItemRendererInitializer");
        IItemRenderer: 
ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer");
        ISelectableItemRenderer: 
ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
        IViewport: 
ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
@@ -84,18 +90,20 @@ MultiSelectionList
 }
 List
 {
-       IBeadModel: 
ClassReference("org.apache.royale.html.beads.models.ArraySelectionModel");
-       IBeadView:  ClassReference("org.apache.royale.html.beads.ListView");    
                
-       IBeadController: 
ClassReference("org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController");
-       IBeadLayout: 
ClassReference("org.apache.royale.html.beads.layouts.VerticalLayout");
+       IBeadModel: ClassReference("org.apache.royale.style.beads.ListModel");
+       IBeadView:  ClassReference("org.apache.royale.style.beads.ListView");   
                
+       IBeadController: 
ClassReference("org.apache.royale.style.beads.ListController");
+       IBeadLayout: 
ClassReference("org.apache.royale.html.beads.layouts.NoLayout");
        IDataProviderItemRendererMapper: 
ClassReference("org.apache.royale.html.beads.DataItemRendererFactoryForArrayData");
-       IItemRendererClassFactory: 
ClassReference("org.apache.royale.core.SelectableItemRendererClassFactory");
-       IItemRendererInitializer: 
ClassReference("org.apache.royale.html.beads.ListItemRendererInitializer");
-       IItemRenderer: 
ClassReference("org.apache.royale.html.supportClasses.StringItemRenderer");
-       ISelectableItemRenderer: 
ClassReference("org.apache.royale.html.beads.SolidBackgroundSelectableItemRendererBead");
+       IItemRendererInitializer: 
ClassReference("org.apache.royale.html.beads.IndexedItemRendererInitializer");
+       IItemRenderer: 
ClassReference("org.apache.royale.style.renderers.ListItemRenderer");
        IViewport: 
ClassReference("org.apache.royale.html.supportClasses.ScrollingViewport");
        IViewportModel: 
ClassReference("org.apache.royale.html.beads.models.ViewportModel");
 }
+ListItemRenderer
+{
+       IStyleSkin: 
ClassReference("org.apache.royale.style.skins.ListRendererSkin");
+}
 Tree
 {
        IBeadModel: 
ClassReference("org.apache.royale.html.beads.models.TreeModel");
diff --git a/frameworks/projects/Style/src/main/resources/style-manifest.xml 
b/frameworks/projects/Style/src/main/resources/style-manifest.xml
index 297add2c05..1dd68b067c 100644
--- a/frameworks/projects/Style/src/main/resources/style-manifest.xml
+++ b/frameworks/projects/Style/src/main/resources/style-manifest.xml
@@ -40,6 +40,11 @@
   <component id="MultiSelectionList" 
class="org.apache.royale.style.MultiSelectionList"/>
   <component id="Tree" class="org.apache.royale.style.Tree"/>
   <component id="DataItemRenderer" 
class="org.apache.royale.style.DataItemRenderer"/>
+  <component id="ListItemRenderer" 
class="org.apache.royale.style.renderers.ListItemRenderer"/>
+  
+  <component id="ListController" 
class="org.apache.royale.style.beads.ListController"/>
+  <component id="ListModel" class="org.apache.royale.style.beads.ListModel"/>
+  <component id="ListView" class="org.apache.royale.style.beads.ListView"/>
   
   <component id="DataState" 
class="org.apache.royale.style.stylebeads.states.attribute.DataState"/>
   <component id="AriaState" 
class="org.apache.royale.style.stylebeads.states.attribute.AriaState"/>
@@ -314,5 +319,6 @@
   <component id="AccordionSkin" 
class="org.apache.royale.style.skins.AccordionSkin"/>
   <component id="AccordionSectionSkin" 
class="org.apache.royale.style.skins.AccordionSectionSkin"/>
   <component id="AccordionContentSkin" 
class="org.apache.royale.style.skins.AccordionContentSkin"/>
+  <component id="ListRendererSkin" 
class="org.apache.royale.style.skins.ListRendererSkin"/>
 
 </componentPackage>
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/DataItemRenderer.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/DataItemRenderer.as
index 542a389757..964bdc61d0 100644
--- 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/DataItemRenderer.as
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/DataItemRenderer.as
@@ -39,7 +39,6 @@ package org.apache.royale.style
                 *
                 *  @langversion 3.0
                 *  @playerversion Flash 10.2
-                *  @playerversion AIR 2.6
                 *  @productversion Royale 0.0
                 */
                public function DataItemRenderer()
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/List.as 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/List.as
index 5e4351cfe9..a721cc181d 100644
--- a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/List.as
+++ b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/List.as
@@ -21,6 +21,7 @@ package org.apache.royale.style
        import org.apache.royale.core.IRollOverModel;
        import org.apache.royale.core.ISelectionModel;
        import org.apache.royale.html.IListPresentationModel;
+       import org.apache.royale.style.util.StyleManager;
 
        /**
         *  Indicates that the initialization of the list is complete.
@@ -67,8 +68,18 @@ package org.apache.royale.style
                public function List()
                {
                        super();
+                       register();
                        // typeNames += " List";
                }
+               private static var _registered:Boolean = false;
+               private static function register():void
+               {
+                       if(!_registered){
+                               var sel:String = "menu, ol, ul";
+                               StyleManager.addStyle(sel, sel, "list-style: 
none; margin: 0; padding: 0;");
+                               _registered = true;
+                       }
+               }
 
                /**
                 *  The index of the currently selected item. Changing this 
value
@@ -155,6 +166,15 @@ package org.apache.royale.style
                {
                        (model as ISelectionModel).selectedItem = value;
                }
+               override protected function getTag():String
+               {
+                       return "ul";
+               }
+
+    public function get focusParent():IStyleUIBase
+    {
+      return this;
+    }
 
        }
 }
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/RowGap.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/IKeyboardHandler.as
similarity index 85%
copy from 
frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/RowGap.as
copy to 
frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/IKeyboardHandler.as
index f5836ab9eb..73deb929c1 100644
--- 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/RowGap.as
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/IKeyboardHandler.as
@@ -16,14 +16,10 @@
 //  limitations under the License.
 //
 
////////////////////////////////////////////////////////////////////////////////
-package org.apache.royale.style.stylebeads.flexgrid
+package org.apache.royale.style.beads
 {
-
-       public class RowGap extends Gap
+       public interface IKeyboardHandler
        {
-               public function RowGap(value:* = null)
-               {
-                       super("gap-y", "row-gap", value);
-               }
+               
        }
 }
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/ListController.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/ListController.as
new file mode 100644
index 0000000000..aa4b5d65b4
--- /dev/null
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/ListController.as
@@ -0,0 +1,129 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.style.beads
+{
+       import org.apache.royale.core.IStrand;
+       import org.apache.royale.core.IBeadController;
+       import org.apache.royale.html.beads.IListView;
+       import org.apache.royale.core.IItemRendererOwnerView;
+       import org.apache.royale.events.IEventDispatcher;
+       import org.apache.royale.style.List;
+       import org.apache.royale.utils.loadBeadFromValuesManager;
+       import org.apache.royale.events.ItemAddedEvent;
+       import org.apache.royale.events.ItemRemovedEvent;
+       import org.apache.royale.events.ItemClickedEvent;
+       import org.apache.royale.utils.sendStrandEvent;
+       import org.apache.royale.style.renderers.IListItemRenderer;
+       import org.apache.royale.events.Event;
+
+       public class ListController implements IBeadController
+       {
+               public function ListController()
+               {                       
+               }
+               /**
+                *  The model.
+                */
+               protected var listModel:ListModel;
+
+               /**
+                *  The view.
+                *  
+                */
+               protected var listView:IListView;
+
+               /**
+                *  The parent of the item renderers.
+                */
+               protected var dataGroup:IItemRendererOwnerView;
+
+               protected var _strand:IStrand;
+
+               private var host:List;
+               
+               /**
+                *  @copy org.apache.royale.core.IBead#strand
+                * @royaleignorecoercion org.apache.royale.style.List
+                * @royaleignorecoercion org.apache.royale.style.beads.ListModel
+                * @royaleignorecoercion org.apache.royale.html.beads.IListView
+                */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       host = value as List;
+      listModel = host.model as ListModel;
+                       listView = host.view as IListView;
+                       host.addEventListener("itemAdded", handleItemAdded);
+                       host.addEventListener("itemRemoved", handleItemRemoved);
+                       loadBeadFromValuesManager(IKeyboardHandler, 
"iKeyboardHandler", _strand);
+               }
+               
+    /**
+     * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+     */
+               protected function handleItemAdded(event:ItemAddedEvent):void
+               {
+                       (event.item as 
IEventDispatcher).addEventListener("itemClicked", selectedHandler);
+                       (event.item as 
IEventDispatcher).addEventListener("itemRollOver", rolloverHandler);
+                       (event.item as 
IEventDispatcher).addEventListener("itemRollOut", rolloutHandler);
+               }
+               
+        /**
+         * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
+         */
+               protected function 
handleItemRemoved(event:ItemRemovedEvent):void
+               {
+                       (event.item as 
IEventDispatcher).removeEventListener("itemClicked", selectedHandler);
+                       (event.item as 
IEventDispatcher).removeEventListener("itemRollOver", rolloverHandler);
+                       (event.item as 
IEventDispatcher).removeEventListener("itemRollOut", rolloutHandler);
+               }
+               
+               protected function selectedHandler(event:ItemClickedEvent):void
+               {
+                       listModel.selectedIndex = event.index;
+                       listModel.selectedItem = event.data;
+                       sendStrandEvent(_strand,"change");
+               }
+               
+               /**
+                * @royaleemitcoercion 
org.apache.royale.style.renderers.IListItemRenderer
+                */
+               protected function rolloverHandler(event:Event):void
+               {
+                       var renderer:IListItemRenderer = event.currentTarget as 
IListItemRenderer;
+                       if (renderer) {
+                               listModel.rollOverIndex = renderer.index;
+                       }
+               }
+               
+               /**
+                       * @royaleemitcoercion 
org.apache.royale.style.renderers.IListItemRenderer
+                       */
+               protected function rolloutHandler(event:Event):void
+               {
+                       var renderer:IListItemRenderer  = event.currentTarget 
as IListItemRenderer;
+                       if (renderer) {
+                               renderer.hovered = false;
+                               renderer.down = false;
+                               listModel.rollOverIndex = -1;
+                       }
+               }
+
+       }       
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/ListModel.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/ListModel.as
new file mode 100644
index 0000000000..02a3718cf5
--- /dev/null
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/ListModel.as
@@ -0,0 +1,215 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.style.beads
+{
+  import org.apache.royale.core.DispatcherBead;
+  import org.apache.royale.core.ISelectionModel;
+  import org.apache.royale.core.IRollOverModel;
+  import org.apache.royale.collections.IArrayList;
+  import org.apache.royale.html.util.getLabelFromData;
+  import org.apache.royale.events.Event;
+
+  public class ListModel extends DispatcherBead implements ISelectionModel, 
IRollOverModel
+  {
+    public function ListModel()
+    {
+      
+    }
+               private var _untypedProvider:Object;
+               private var hasArray:Boolean;
+               /**
+                *  @copy org.apache.royale.core.ISelectionModel#dataProvider
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.0
+                */
+               public function get dataProvider():Object
+               {
+                       return _untypedProvider;
+               }
+
+               /**
+                *  @private
+                *  @royaleignorecoercion 
org.apache.royale.collections.IArrayList
+                */
+               public function set dataProvider(value:Object):void
+               {
+                       COMPILE::JS
+                       {
+                               if (value == _untypedProvider) return;
+                               hasArray = Array.isArray(value);
+                               _untypedProvider = value;
+                               if(!value || _selectedIndex >= value.length)
+                                       _selectedIndex = -1;
+                                                       
+                               _selectedItem = getItemAt(_selectedIndex);
+                               
+                               dispatchEvent(new Event("dataProviderChanged"));
+                       }
+               }
+               /**
+                *  @royaleignorecoercion Array
+                *  @royaleignorecoercion 
org.apache.royale.collections.IArrayList
+                */
+               public function getItemAt(index:int):Object{
+                       if(index < 0 || !_untypedProvider){
+                               return null;
+                       }
+                       if(index >= _untypedProvider.length){
+                               return null
+                       }
+                       if(hasArray){
+                               return (_untypedProvider as Array)[index];
+                       }
+                       return (_untypedProvider as 
IArrayList).getItemAt(index);
+               }
+               /**
+                *  @royaleignorecoercion Array
+                *  @royaleignorecoercion 
org.apache.royale.collections.IArrayList
+                */
+               private function getItemIndex(item:Object):int{
+                       if(hasArray){
+                               return (_untypedProvider as 
Array).indexOf(item);
+                       } else if(_untypedProvider){
+                               return (_untypedProvider as 
IArrayList).getItemIndex(item);
+                       }
+                       return -1;
+               }
+               private var _selectedIndex:int = -1;
+               private var _rollOverIndex:int = -1;
+               private var _labelField:String = null;
+
+               /**
+                *  @copy org.apache.royale.core.ISelectionModel#labelField
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.0
+                */
+               public function get labelField():String
+               {
+                       return _labelField;
+               }
+
+               /**
+                *  @private
+                */
+               public function set labelField(value:String):void
+               {
+                       if (value != _labelField) {
+                               _labelField = value;
+                               dispatchEvent(new Event("labelFieldChanged"));
+                       }
+               }
+
+               /**
+                *  @copy org.apache.royale.core.ISelectionModel#selectedIndex
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.0
+                */
+               public function get selectedIndex():int
+               {
+                       return _selectedIndex;
+               }
+
+               /**
+                *  @private
+                */
+               public function set selectedIndex(value:int):void
+               {
+                       if (value == _selectedIndex) return;
+
+                       _selectedIndex = value;
+                       _selectedItem = getItemAt(value);
+                       dispatchEvent(new Event("selectedIndexChanged"));
+               }
+
+               /**
+                *  @copy org.apache.royale.core.IRollOverModel#rollOverIndex
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.0
+                */
+               public function get rollOverIndex():int
+               {
+                       return _rollOverIndex;
+               }
+
+               /**
+                *  @private
+                */
+               public function set rollOverIndex(value:int):void
+               {
+                       if (value != _rollOverIndex) {
+                               _rollOverIndex = value;
+                               dispatchEvent(new 
Event("rollOverIndexChanged"));
+                       }
+               }
+
+               private var _selectedItem:Object;
+
+               /**
+                *  @copy org.apache.royale.core.ISelectionModel#selectedItem
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.0
+                */
+               public function get selectedItem():Object
+               {
+                       return _selectedItem;
+               }
+
+               /**
+                *  @private
+                */
+               public function set selectedItem(value:Object):void
+               {
+                       if (value == _selectedItem) return;
+
+                       _selectedItem = value;
+                       _selectedIndex = getItemIndex(value);
+                       dispatchEvent(new Event("selectedItemChanged"));
+                       dispatchEvent(new Event("selectedIndexChanged"));
+               }
+
+               public function refreshIndex():void{
+                       _selectedIndex = getItemIndex(_selectedItem);
+                       dispatchEvent(new Event("selectedItemChanged"));
+                       dispatchEvent(new Event("selectedIndexChanged"));
+               }
+               public function getLabelForIndex(index:int):String{
+                       var item:Object = getItemAt(index);
+                       if(item){
+                               return getLabelFromData(this,item);
+                       }
+                       return "";
+               }
+
+  }    
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/ListView.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/ListView.as
new file mode 100644
index 0000000000..0e37da1fb2
--- /dev/null
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/beads/ListView.as
@@ -0,0 +1,99 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.style.beads
+{
+  import org.apache.royale.html.beads.DataContainerView;
+  import org.apache.royale.events.Event;
+  import org.apache.royale.core.IRollOverModel;
+  import org.apache.royale.core.IParent;
+  import org.apache.royale.functional.decorator.debounceLong;
+  import org.apache.royale.style.DataItemRenderer;
+  import org.apache.royale.style.renderers.ListItemRenderer;
+
+       public class ListView extends DataContainerView
+       {
+               public function ListView()
+               {
+                       super();
+                       runChangeHandler = debounceLong(function():void{
+                               selectionChangeHandler(null);
+                       },0);
+               }
+
+               protected var listModel:ListModel;
+
+               protected var lastSelectedIndex:int = -1;
+               protected var lastFocusedIndex:int = -1;
+               // protected var lastKeyboardFocusedIndex:int = -1;
+
+               /**
+                * @private
+                * @royaleignorecoercion org.apache.royale.core.ISelectionModel
+                */
+               override protected function handleInitComplete(event:Event):void
+               {
+                       listModel = dataModel as ListModel;
+                       listModel.addEventListener("selectedIndexChanged", 
selectionChangeHandler);
+                       listModel.addEventListener("rollOverIndexChanged", 
rollOverIndexChangeHandler);
+                       // Don't call super because we don't need the overhead 
of layout
+                       // super.handleInitComplete(event);
+               }
+               private var focusableItemRenderer:ListItemRenderer;
+               override protected function 
itemsCreatedHandler(event:Event):void
+               {
+                       super.itemsCreatedHandler(event);
+                       runChangeHandler();
+               }
+               private var runChangeHandler:Function;
+               /**
+                * @private
+                * @royaleignorecoercion 
org.apache.royale.style.renderers.ListItemRenderer
+                */
+               protected function selectionChangeHandler(event:Event):void
+               {
+                       var ir:ListItemRenderer = 
dataGroup.getItemRendererForIndex(lastSelectedIndex) as ListItemRenderer;
+                       if(ir)
+                               ir.selected = false;
+                       ir = 
dataGroup.getItemRendererForIndex(listModel.selectedIndex) as ListItemRenderer;
+                       if(ir)
+                               ir.selected = true;
+
+                       lastSelectedIndex = listModel.selectedIndex;
+               }
+
+               protected var lastRollOverIndex:int = -1;
+
+               /**
+                * @private
+                * @royaleignorecoercion 
org.apache.royale.style.renderers.ListItemRenderer
+                * * @royaleignorecoercion org.apache.royale.core.IRollOverModel
+                */
+               protected function rollOverIndexChangeHandler(event:Event):void
+               {
+                       var ir:ListItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as ListItemRenderer;
+                       if(ir)
+                               ir.hovered = false;
+                       ir = dataGroup.getItemRendererForIndex((listModel as 
IRollOverModel).rollOverIndex) as ListItemRenderer;
+                       if(ir)
+                               ir.hovered = true;
+                       lastRollOverIndex = (listModel as 
IRollOverModel).rollOverIndex;
+               }
+       }
+
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/colors/ColorSwatch.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/colors/ColorSwatch.as
index d17dcddf3a..75581ad554 100644
--- 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/colors/ColorSwatch.as
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/colors/ColorSwatch.as
@@ -170,5 +170,33 @@ package org.apache.royale.style.colors
                public function getRGB():Array{
                        return rgb;
                }
+               /**
+                * Returns true if this color swatch is considered a "dark" 
color,
+                * meaning that it would require light text for good contrast.
+                * This is based on the base color, shade, not the opacity.
+                */
+               public function isDark():Boolean
+               {
+                       if (!rgb || rgb.length < 3)
+                       {
+                               return false;
+                       }
+
+                       var r:Number = Number(rgb[0]) / 255;
+                       var g:Number = Number(rgb[1]) / 255;
+                       var b:Number = Number(rgb[2]) / 255;
+
+                       var rLinear:Number = toLinearChannel(r);
+                       var gLinear:Number = toLinearChannel(g);
+                       var bLinear:Number = toLinearChannel(b);
+
+                       var luminance:Number = 0.2126 * rLinear + 0.7152 * 
gLinear + 0.0722 * bLinear;
+                       return luminance < 0.179;
+               }
+
+               private function toLinearChannel(channel:Number):Number
+               {
+                       return (channel <= 0.04045) ? channel / 12.92 : 
Math.pow((channel + 0.055) / 1.055, 2.4);
+               }
        }
 }
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/ColumnGap.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/data/IDataItem.as
similarity index 80%
copy from 
frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/ColumnGap.as
copy to 
frameworks/projects/Style/src/main/royale/org/apache/royale/style/data/IDataItem.as
index 5974f7e1f8..6cd7f553d3 100644
--- 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/ColumnGap.as
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/data/IDataItem.as
@@ -16,14 +16,13 @@
 //  limitations under the License.
 //
 
////////////////////////////////////////////////////////////////////////////////
-package org.apache.royale.style.stylebeads.flexgrid
+package org.apache.royale.style.data
 {
-
-       public class ColumnGap extends Gap
-       {
-               public function ColumnGap(value:* = null)
-               {
-                       super("gap-x", "column-gap", value);
-               }
-       }
+  public interface IDataItem
+  {
+    function get disabled():Boolean;
+    function set disabled(value:Boolean):void;
+    function get selected():Boolean;
+    function set selected(value:Boolean):void;
+  }    
 }
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/ColumnGap.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/data/IListItem.as
similarity index 69%
copy from 
frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/ColumnGap.as
copy to 
frameworks/projects/Style/src/main/royale/org/apache/royale/style/data/IListItem.as
index 5974f7e1f8..e9d0bfaa8f 100644
--- 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/ColumnGap.as
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/data/IListItem.as
@@ -16,14 +16,21 @@
 //  limitations under the License.
 //
 
////////////////////////////////////////////////////////////////////////////////
-package org.apache.royale.style.stylebeads.flexgrid
+package org.apache.royale.style.data
 {
+  public interface IListItem extends IDataItem
+  {
+    function get text():String;
+    function set text(value:String):void;
+    function get label():String;
+    function get icon():String;
+    function set icon(value:String):void;
 
-       public class ColumnGap extends Gap
-       {
-               public function ColumnGap(value:* = null)
-               {
-                       super("gap-x", "column-gap", value);
-               }
-       }
+    /**
+     * src of an icon to be rendered an an img
+     */
+    function get imageIcon():String;
+    function set imageIcon(value:String):void;
+
+  }    
 }
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/ColumnGap.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/renderers/IListItemRenderer.as
similarity index 65%
copy from 
frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/ColumnGap.as
copy to 
frameworks/projects/Style/src/main/royale/org/apache/royale/style/renderers/IListItemRenderer.as
index 5974f7e1f8..a2116ec8b9 100644
--- 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/ColumnGap.as
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/renderers/IListItemRenderer.as
@@ -16,14 +16,19 @@
 //  limitations under the License.
 //
 
////////////////////////////////////////////////////////////////////////////////
-package org.apache.royale.style.stylebeads.flexgrid
+package org.apache.royale.style.renderers
 {
+       import org.apache.royale.core.ILabelFieldItemRenderer;
+       import org.apache.royale.core.IHasLabelField;
+       import org.apache.royale.core.IHasDataField;
 
-       public class ColumnGap extends Gap
+       public interface IListItemRenderer extends ILabelFieldItemRenderer, 
IHasLabelField, IHasDataField
        {
-               public function ColumnGap(value:* = null)
-               {
-                       super("gap-x", "column-gap", value);
-               }
+               function get selected():Boolean;
+               function set selected(value:Boolean):void;
+               function get hovered():Boolean;
+               function set hovered(value:Boolean):void;
+               function get down():Boolean;
+               function set down(value:Boolean):void;
        }
 }
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/renderers/ListItemRenderer.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/renderers/ListItemRenderer.as
new file mode 100644
index 0000000000..a5e88d35cb
--- /dev/null
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/renderers/ListItemRenderer.as
@@ -0,0 +1,185 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.style.renderers
+{
+       import org.apache.royale.style.DataItemRenderer;
+       import org.apache.royale.html.util.getLabelFromData;
+       import org.apache.royale.core.IParent;
+       import org.apache.royale.style.Icon;
+       import org.apache.royale.style.data.IListItem;
+       import org.apache.royale.style.elements.Img;
+
+       public class ListItemRenderer extends DataItemRenderer implements 
IListItemRenderer
+       {
+               public function ListItemRenderer()
+               {
+                       super();
+               }
+               private var _listData:Object;
+
+               [Bindable("__NoChangeEvent__")]
+
+               /**
+                *  Additional data about the list structure the itemRenderer 
may
+                *  find useful.
+                *
+                *  @langversion 3.0
+                *  @productversion Royale 0.9.13
+                */
+               public function get listData():Object
+               {
+                       return _listData;
+               }
+               public function set listData(value:Object):void
+               {
+                       _listData = value;
+               }
+               protected var firstElementPosition:Number = 0;
+               protected function get iconParent():IParent
+               {
+                       return this;
+               }
+               override public function set data(value:Object):void
+               {
+                       super.data = value;
+                       setText(getLabelFromData(this, value));
+                       COMPILE::JS
+                       {
+                               var iconSelector:String = getIconSelector();
+                               if (iconSelector)
+                               {
+                                       if (icon)
+                                       {
+                                               iconParent.removeElement(icon);
+                                       }
+                                       icon = new Icon(iconSelector);
+                                       // TODO apply styles to icon
+                                       iconParent.addElementAt(icon, 
firstElementPosition);
+                               }
+                               else if (icon)
+                               {
+                                       icon.setStyle("display", "none");
+                               }
+
+                               var iconSrc:String = getImageIcon();
+                               if (iconSrc)
+                               {
+                                       if (!imageIcon)
+                                       {
+                                               imageIcon = new Img();
+                                               imageIcon.src = iconSrc;
+                                               // TODO apply styles to 
imageIcon
+                                               
iconParent.addElementAt(imageIcon, firstElementPosition);
+                                       }
+                                       else
+                                       {
+                                               imageIcon.setStyle("display", 
null);
+                                               imageIcon.src = iconSrc;
+                                       }
+                               }
+                               else if (imageIcon)
+                               {
+                                       imageIcon.setStyle("display", "none");
+                               }
+                       }
+               }
+               COMPILE::JS
+               protected var textNode:Text;
+               protected function setText(value:String):void
+               {
+                       COMPILE::JS
+                       {
+                               if (textNode == null)
+                               {
+                                       textNode = document.createTextNode('') 
as Text;
+                                       element.appendChild(textNode);
+                               }
+
+                               textNode.nodeValue = value;
+                       }
+               }
+
+               /**
+                * @royaleignorecoercion org.apache.royale.style.data.IListItem
+                */
+               private function getIconSelector():String
+               {
+                       if (data is IListItem)
+                       {
+                               return (data as IListItem).icon;
+                       }
+                       return data["icon"];
+               }
+               private function getImageIcon():String
+               {
+                       if (data is IListItem)
+                       {
+                               return (data as IListItem).imageIcon;
+                       }
+                       return data["imageIcon"];
+               }
+               protected var icon:Icon;
+               protected var imageIcon:Img;
+
+               override protected function getTag():String
+               {
+                       return "li";
+               }
+
+               public function get selected():Boolean
+               {
+                       return getAttribute("data-selected") != null;
+               }
+
+               public function set selected(value:Boolean):void
+               {
+                       toggleAttribute("data-selected", value);
+               }
+
+               public function get hovered():Boolean
+               {
+                       return getAttribute("data-hovered") != null;
+               }
+
+               public function set hovered(value:Boolean):void
+               {
+                       toggleAttribute("data-hovered", value);
+               }
+
+               public function get down():Boolean
+               {
+                       return getAttribute("data-down") != null;
+               }
+
+               public function set down(value:Boolean):void
+               {
+                       toggleAttribute("data-down", value);
+               }
+
+               public function get disabled():Boolean
+               {
+                       return getAttribute("data-disabled") != null;
+               }
+
+               public function set disabled(value:Boolean):void
+               {
+                       toggleAttribute("data-disabled", value);
+               }
+       }
+}
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/skins/ListRendererSkin.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/skins/ListRendererSkin.as
new file mode 100644
index 0000000000..50efacbd68
--- /dev/null
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/skins/ListRendererSkin.as
@@ -0,0 +1,163 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.style.skins
+{
+       import org.apache.royale.style.StyleSkin;
+       import org.apache.royale.core.IStrand;
+       import org.apache.royale.style.stylebeads.layout.Display;
+       import org.apache.royale.style.stylebeads.flexgrid.FlexDirection;
+       import org.apache.royale.style.stylebeads.flexgrid.AlignItems;
+       import org.apache.royale.style.stylebeads.flexgrid.Gap;
+       import org.apache.royale.style.stylebeads.flexgrid.JustifyContent;
+       import org.apache.royale.style.stylebeads.flexgrid.RowGap;
+       import org.apache.royale.style.stylebeads.typography.TextSize;
+       import org.apache.royale.style.stylebeads.typography.FontWeight;
+       import org.apache.royale.style.stylebeads.spacing.Margin;
+       import org.apache.royale.style.stylebeads.states.HoverState;
+       import org.apache.royale.style.stylebeads.interact.Cursor;
+       import org.apache.royale.style.stylebeads.background.BackgroundColor;
+       import 
org.apache.royale.style.stylebeads.states.attribute.SelectedState;
+       import org.apache.royale.style.stylebeads.typography.TextColor;
+       import org.apache.royale.style.IStyleUIBase;
+       import org.apache.royale.style.colors.ThemeColorSet;
+       import org.apache.royale.style.util.ThemeManager;
+       import org.apache.royale.style.colors.ColorSwatch;
+       import org.apache.royale.style.stylebeads.spacing.Padding;
+
+       public class ListRendererSkin extends StyleSkin
+       {
+               public function ListRendererSkin()
+               {
+                       super();
+               }
+               /**
+                * @royaleignorecoercion org.apache.royale.style.IStyleUIBase
+                */
+               override public function set strand(value:IStrand):void
+               {
+                       super.strand = value;
+                       if(_styles)
+                               return;
+
+                       var host:IStyleUIBase = value as IStyleUIBase;
+                       // var colorSet:ThemeColorSet = 
ThemeManager.instance.activeTheme.themeColorSet;
+                       // var colorName:String = host ? host.theme : 
ThemeColorSet.NEUTRAL;
+                       // var selectedColor:ColorSwatch = 
colorSet.getSwatch(ThemeColorSet.PRIMARY,500);
+                       // var enabledBorder:ColorSwatch = 
colorSet.getSwatch(ThemeColorSet.NEUTRAL,500);
+
+                       var selectedColor:ColorSwatch = new 
ColorSwatch("slate",800);
+                       var hoverColor:ColorSwatch = 
selectedColor.getVariant(100);
+                       var textColor:ColorSwatch = new 
ColorSwatch("slate",800);
+                       var selectedTextColor:ColorSwatch = 
selectedColor.isDark() ? textColor.getVariant(50) : textColor.getVariant(900);
+                       var padding:Padding = new Padding();
+                       padding.block = 1;
+                       padding.inline = .75;
+                       _styles = [
+                               new Display("flex"),
+                               new FlexDirection("row"),
+                               new AlignItems("center"),
+                               new JustifyContent("start"),
+                               new RowGap(1),
+                               padding,
+                               new TextSize("sm"),
+                               new FontWeight("normal"),
+                               new Cursor("pointer"),
+                               new BackgroundColor("transparent"),
+                               new TextColor(textColor),
+                               new HoverState([
+                                       new BackgroundColor(hoverColor),
+                               ]),
+                               new SelectedState([
+                                       new BackgroundColor(selectedColor),
+                                       new TextColor(selectedTextColor)
+                               ])
+                       ];
+                       host.setStyles(styles);
+               }
+       }
+}
+/**
+ * border-radius: var(--radius-field);
+      text-align: start;
+      text-wrap: balance;
+      -webkit-user-select: none;
+      user-select: none;
+      grid-auto-columns: minmax(auto,max-content) auto max-content;
+      grid-auto-flow: column;
+      align-content: flex-start;
+      align-items: center;
+      gap: .5rem;
+      padding-block: .375rem;
+      padding-inline: .75rem;
+      transition-property: color,background-color,box-shadow;
+      transition-duration: .2s;
+      transition-timing-function: cubic-bezier(0,0,.2,1);
+      display: grid;
+                       layer utilities {
+  @layer daisyui.l1.l2 {
+    :where(:not(ul, details, .menu-title, .btn)).menu-active {
+      color: var(--menu-active-fg);
+      background-color: var(--menu-active-bg);
+      background-size: auto,calc(var(--noise)*100%);
+      background-image: none,var(--fx-noise);
+    }
+  }
+@layer utilities {
+  @layer daisyui.l1.l2.l3 {
+    @supports (color:color-mix(in lab,red,red)) {
+      .menu :where(li:not(.menu-title, .disabled) > :not(ul, details, 
.menu-title):not(.menu-active, :active, .btn):hover, li:not(.menu-title, 
.disabled) > details > summary:not(.menu-title):not(.menu-active, :active, 
.btn):hover) {
+        background-color: color-mix(in 
oklab,var(--color-base-content)10%,transparent);
+      }
+    }
+  }
+}
+    list-style-type: none;
+    margin-top: 4px;
+    margin-bottom: 4px;
+    margin-left: 0px;
+    margin-right: 0px;
+               font-size: 14px;
+    font-weight: 400;
+    line-height: 1.5;
+    font-style: normal;
+               .spectrum--light, .spectrum--light .spectrum-Body {
+    color: rgb(75, 75, 75);
+
+    position: relative;
+    display: inline-flex;
+    align-items: center;
+    justify-content: left;
+    box-sizing: border-box;
+    width: 100%;
+    min-height: 32px;
+    padding-left: 12px;
+    padding-right: 12px;
+    padding-top: 5px;
+    padding-bottom: 5px;
+    font-size: 14px;
+    font-weight: 400;
+    font-style: normal;
+    word-break: break-word;
+    hyphens: auto;
+    cursor: pointer;
+    border-radius: 4px;
+    text-decoration: none;
+    transition: background-color 130ms ease-out, color 130ms ease-out;
+}
+ */
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/ColumnGap.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/ColumnGap.as
index 5974f7e1f8..89786fd823 100644
--- 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/ColumnGap.as
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/ColumnGap.as
@@ -23,7 +23,7 @@ package org.apache.royale.style.stylebeads.flexgrid
        {
                public function ColumnGap(value:* = null)
                {
-                       super("gap-x", "column-gap", value);
+                       super(value, "gap-x", "column-gap");
                }
        }
 }
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/Gap.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/Gap.as
index b7cec29990..7c26685e3e 100644
--- 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/Gap.as
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/Gap.as
@@ -25,7 +25,7 @@ package org.apache.royale.style.stylebeads.flexgrid
 
        public class Gap extends LeafStyleBase
        {
-               public function Gap(selectorBase:String="gap", 
ruleBase:String="gap", value:* = null)
+               public function Gap(value:* = null, selectorBase:String="gap", 
ruleBase:String="gap")
                {
                        super(selectorBase, ruleBase, value);
                        // TODO: Is this the correct default?
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/JustifyContent.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/JustifyContent.as
index 7b6efa1cfe..64404907b6 100644
--- 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/JustifyContent.as
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/JustifyContent.as
@@ -40,10 +40,10 @@ package org.apache.royale.style.stylebeads.flexgrid
                        }
                        return [value];
                }
-               [Inspectable(category="General", enumeration="center,safe 
center,start,flex-end,safe 
flex-end,space-between,space-around,space-evenly,baseline,stretch,normal", 
defaultValue="normal")]
+               [Inspectable(category="General", enumeration="center,safe 
center,start,end,safe 
end,space-between,space-around,space-evenly,baseline,stretch,normal", 
defaultValue="normal")]
                override public function set value(value:*):void
                {
-                       assert(["center","center safe","safe 
center","start","flex-end","flex-end safe","safe 
flex-end","space-between","space-around","space-evenly","baseline","stretch","normal"].indexOf(value)
 >= 0, "Invalid value for place-content: " + value);
+                       assert(["center","center safe","safe 
center","start","end","end safe","safe 
end","space-between","space-around","space-evenly","baseline","stretch","normal"].indexOf(value)
 >= 0, "Invalid value for place-content: " + value);
                        _value = value;
                        var vals:Array = normalizeSafeKeyword(value);
                        calculatedRuleValue = vals[0];
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/RowGap.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/RowGap.as
index f5836ab9eb..eba5d4cb1f 100644
--- 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/RowGap.as
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/flexgrid/RowGap.as
@@ -23,7 +23,7 @@ package org.apache.royale.style.stylebeads.flexgrid
        {
                public function RowGap(value:* = null)
                {
-                       super("gap-y", "row-gap", value);
+                       super(value, "gap-y", "row-gap");
                }
        }
 }
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/SelectedState.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/SelectedState.as
index 3ecac79862..36893b2f6c 100644
--- 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/SelectedState.as
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/stylebeads/states/attribute/SelectedState.as
@@ -20,10 +20,9 @@ package org.apache.royale.style.stylebeads.states.attribute
 {
        public class SelectedState extends DataState
        {
-               public function SelectedState()
+               public function SelectedState(styles:Array = null)
                {
-                       super();
-                       dataType = "selected";
+                       super("selected", styles);
                }       
        }
 }
\ No newline at end of file
diff --git 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/support/UIItemRendererBase.as
 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/support/UIItemRendererBase.as
index aabf2941af..bdf53bcfaa 100644
--- 
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/support/UIItemRendererBase.as
+++ 
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/support/UIItemRendererBase.as
@@ -132,7 +132,10 @@ package org.apache.royale.style.support
                public function set data(value:Object):void
                {
                        _data = value;
+                       if(focusable)
+                               tabFocusable = true;
                }
+               public var focusable:Boolean = true;
 
                private var _labelField:String = "label";
 


Reply via email to