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

carlosrovira 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 777ce24  Add Float/Fixed modes to Drawer for responsivenes.
777ce24 is described below

commit 777ce24f7c2b2392dd7fb67d16e200f46ef53993
Author: Carlos Rovira <[email protected]>
AuthorDate: Mon Jul 9 23:38:30 2018 +0200

    Add Float/Fixed modes to Drawer for responsivenes.
---
 .../src/main/resources/jewel-example-styles.css    |  10 +-
 .../src/main/royale/ListPlayGround.mxml            |   1 +
 .../JewelExample/src/main/royale/MainContent.mxml  |   9 +-
 .../projects/Jewel/src/main/resources/defaults.css |  87 +++++---
 .../royale/jewel/ApplicationResponsiveView.as      |   2 +-
 .../main/royale/org/apache/royale/jewel/Drawer.as  | 227 +++++++++++++++------
 .../royale/jewel/{Drawer.as => DrawerBase.as}      |  90 +++-----
 .../royale/org/apache/royale/jewel/TopAppBar.as    | 120 ++++++++++-
 .../projects/Jewel/src/main/sass/_global.sass      |   9 +
 .../sass/components/_applicationmaincontent.sass   |   2 +-
 .../Jewel/src/main/sass/components/_card.sass      |   1 +
 .../Jewel/src/main/sass/components/_divider.sass   |   5 +-
 .../Jewel/src/main/sass/components/_drawer.sass    | 115 +++++++----
 .../Jewel/src/main/sass/components/_topappbar.sass |  72 +++++--
 .../JewelTheme/src/main/resources/defaults.css     |  35 +++-
 .../JewelTheme/src/main/sass/_variables.sass       |   6 +
 .../main/sass/components-primary}/_divider.sass    |   5 +-
 .../src/main/sass/components-primary/_drawer.sass  |  70 +++++--
 .../main/sass/components-primary/_topappbar.sass   |  31 +--
 .../themes/JewelTheme/src/main/sass/defaults.sass  |   1 +
 20 files changed, 615 insertions(+), 283 deletions(-)

diff --git 
a/examples/royale/JewelExample/src/main/resources/jewel-example-styles.css 
b/examples/royale/JewelExample/src/main/resources/jewel-example-styles.css
index 4eb1ae9..57c93c1 100644
--- a/examples/royale/JewelExample/src/main/resources/jewel-example-styles.css
+++ b/examples/royale/JewelExample/src/main/resources/jewel-example-styles.css
@@ -20,11 +20,18 @@
 */
 
 @namespace "http://www.w3.org/1999/xhtml";;
+@namespace j "library://ns.apache.org/royale/jewel";
 
-.mainContent {
+.mainContent 
+{
     padding: 20px;
 }
 
+.jewel.section
+{
+    padding-top: 20px;
+}
+
 .iconListItemRenderer
 {
     IItemRenderer: ClassReference("itemRenderers.IconListItemRenderer");
@@ -47,7 +54,6 @@
 .jewel.drawerheader img
 {
     height: 140px;
-    padding: 16px;
 }
 
 .wrapper {
diff --git a/examples/royale/JewelExample/src/main/royale/ListPlayGround.mxml 
b/examples/royale/JewelExample/src/main/royale/ListPlayGround.mxml
index ea4247c..45b4a54 100644
--- a/examples/royale/JewelExample/src/main/royale/ListPlayGround.mxml
+++ b/examples/royale/JewelExample/src/main/royale/ListPlayGround.mxml
@@ -56,6 +56,7 @@ limitations under the License.
 
        <j:beads>
         <js:ContainerDataBinding/>
+               <j:VerticalLayout gap="3"/>
     </j:beads>
 
        <j:Card>
diff --git a/examples/royale/JewelExample/src/main/royale/MainContent.mxml 
b/examples/royale/JewelExample/src/main/royale/MainContent.mxml
index e383a90..9897ee8 100644
--- a/examples/royale/JewelExample/src/main/royale/MainContent.mxml
+++ b/examples/royale/JewelExample/src/main/royale/MainContent.mxml
@@ -32,7 +32,8 @@ limitations under the License.
             {
                 var item:NavigationLinkVO = (event.target as 
Navigation).selectedItem as NavigationLinkVO;
                 main.showContent(item.href);
-                drawer.close();
+                if(!drawer.fixed)
+                    drawer.close();
             }
 
             private function toggleTopAppBarFixed():void
@@ -51,7 +52,7 @@ limitations under the License.
                <js:ContainerDataBinding/>
        </j:beads>
 
-    <j:Drawer id="drawer">
+    <j:Drawer id="drawer" auto="true">
         <j:DrawerHeader>
             <j:Image src="assets/apache-royale-jewel-logo-white.svg"/>
         </j:DrawerHeader>
@@ -79,7 +80,7 @@ limitations under the License.
     <j:TopAppBar id="topappbar" fixed="true">
         <j:TopAppBarRow>
             <j:TopAppBarSection>
-                <j:Button click="drawer.open()">
+                <j:Button click="drawer.isOpen ? drawer.close() : 
drawer.open()">
                     <j:icon>
                         <js:FontIcon text="{MaterialIconType.MENU}" 
material="true"/>
                     </j:icon>
@@ -87,7 +88,7 @@ limitations under the License.
                 <j:TopAppBarTitle text="Apache Royale Jewel UI Set Theme 
Showcase"/>
             </j:TopAppBarSection>
             <j:TopAppBarSection alignRight="true">
-                <j:Button click="topappbar.visible = !topappbar.visible">
+                <j:Button click="drawer.fixed = !drawer.fixed">
                     <j:icon>
                         <js:FontIcon text="{MaterialIconType.VISIBILITY}" 
material="true"/>
                     </j:icon>
diff --git a/frameworks/projects/Jewel/src/main/resources/defaults.css 
b/frameworks/projects/Jewel/src/main/resources/defaults.css
index 1a65b89..c810823 100644
--- a/frameworks/projects/Jewel/src/main/resources/defaults.css
+++ b/frameworks/projects/Jewel/src/main/resources/defaults.css
@@ -37,6 +37,15 @@ j|View {
   IBeadLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.BasicLayout");
 }
 
+j|ApplicationResponsiveView {
+  IBeadView: ClassReference("org.apache.royale.core.beads.GroupView");
+}
+
+.applicationResponsiveView {
+  display: inline-flex;
+  width: 100%;
+}
+
 j|ApplicationView {
   IBeadView: ClassReference("org.apache.royale.core.beads.GroupView");
   IBeadLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.VerticalLayout");
@@ -105,7 +114,6 @@ j|Alert {
 
 .jewel.main {
   width: 100%;
-  height: 100%;
 }
 
 j|ApplicationMainContent {
@@ -144,6 +152,7 @@ j|ApplicationMainContent {
   flex-direction: column;
   min-width: 320px;
   min-height: 180px;
+  width: 350px;
 }
 
 j|Card {
@@ -230,7 +239,7 @@ j|ControlBar {
     IMeasurementBead: 
ClassReference("org.apache.royale.html.beads.ControlBarMeasurementBead");
   }
 }
-.jewel.drawer {
+.jewel.drawer.float {
   position: fixed;
   pointer-events: none;
   top: 0;
@@ -241,7 +250,7 @@ j|ControlBar {
   contain: strict;
   z-index: 5;
 }
-.jewel.drawer::before {
+.jewel.drawer.float::before {
   position: absolute;
   display: block;
   top: 0;
@@ -251,7 +260,7 @@ j|ControlBar {
   content: "";
   opacity: 0;
 }
-.jewel.drawer .drawermain {
+.jewel.drawer.float .drawermain {
   position: absolute;
   display: flex;
   flex-direction: column;
@@ -259,12 +268,40 @@ j|ControlBar {
   right: initial;
   height: 100%;
 }
-.jewel.drawer.open {
+.jewel.drawer.float.open {
   pointer-events: auto;
 }
-.jewel.drawer.open::before {
+.jewel.drawer.float.open::before {
   opacity: 1;
 }
+.jewel.drawer.fixed {
+  width: 0;
+}
+.jewel.drawer.fixed .drawermain {
+  display: inline-flex;
+  flex-direction: column;
+  left: 0;
+  right: auto;
+  height: 100%;
+  overflow: hidden;
+  touch-action: none;
+}
+.jewel.drawer.fixed.open {
+  pointer-events: auto;
+}
+.jewel.drawer.fixed.open .drawermain {
+  transform: none;
+}
+
+@media (min-width: 768px) {
+  .jewel.drawer.float .drawermain {
+    width: calc(100% - 60px);
+    max-width: 310px;
+  }
+}
+.remove-app-scroll {
+  overflow: hidden;
+}
 
 .jewel.drawerheader {
   position: relative;
@@ -291,23 +328,10 @@ j|ControlBar {
   touch-action: pan-y;
 }
 
-@media (min-width: 768px) {
-  .jewel.drawer .drawermain {
-    width: calc(100% - 60px);
-    max-width: 310px;
-  }
-}
-.remove-app-scroll {
-  overflow: hidden;
-}
-
 .jewel.divider {
   height: 0;
   margin: 0;
   border: none;
-  border-bottom-color: rgba(0, 0, 0, 0.12);
-  border-bottom-width: 1px;
-  border-bottom-style: solid;
 }
 
 @media -royale-swf {
@@ -2718,15 +2742,19 @@ j|TitleBar {
 }
 
 .jewel.topappbar {
+  display: inline-flex;
+  flex: 1 1 auto;
+}
+.jewel.topappbar .topBarAppHeader {
   display: flex;
   flex-direction: column;
   justify-content: space-between;
   width: 100%;
   z-index: 4;
-}
-.jewel.topappbar.fixed {
   position: fixed;
-  top: 0px;
+}
+.jewel.topappbar .topBarAppHeader.fixed {
+  transition: box-shadow 200ms linear;
 }
 
 .has-topappbar {
@@ -2765,18 +2793,13 @@ j|TitleBar {
   outline: none;
   text-decoration: none;
   cursor: pointer;
+  opacity: 1;
 }
-.jewel.topappbarsection button:hover, .jewel.topappbarsection 
button:hover:focus, .jewel.topappbarsection button:active, 
.jewel.topappbarsection button:active:focus, .jewel.topappbarsection 
button:focus {
-  background: transparent;
-  box-shadow: none;
-  border: none;
-}
-.jewel.topappbarsection button[disabled] {
-  background: transparent;
-  box-shadow: none;
-  border: none;
+.jewel.topappbarsection button:active, .jewel.topappbarsection 
button:active:focus, .jewel.topappbarsection button:focus {
+  transition: opacity 0.4s 0ms;
+  opacity: 0.5;
 }
-.jewel.topappbarsection button .icon {
+.jewel.topappbarsection button .fonticon {
   margin-left: 0px;
   margin-right: 0px;
 }
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ApplicationResponsiveView.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ApplicationResponsiveView.as
index 80e3f30..b4a0130 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ApplicationResponsiveView.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/ApplicationResponsiveView.as
@@ -52,7 +52,7 @@ package org.apache.royale.jewel
                {
                        super();
 
-            typeNames = "" + VerticalLayout.LAYOUT_TYPE_NAMES;
+            typeNames = "applicationResponsiveView"; //+ 
VerticalLayout.LAYOUT_TYPE_NAMES;
                }
         
                private var _applicationModel:Object;
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Drawer.as 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Drawer.as
index c38b7a8..1f70600 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Drawer.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Drawer.as
@@ -19,34 +19,34 @@
 package org.apache.royale.jewel
 {
        import org.apache.royale.events.MouseEvent;
+       import org.apache.royale.events.Event;
        import org.apache.royale.core.UIBase;
-       import org.apache.royale.core.IChild;
-       import org.apache.royale.core.IUIBase;
-
-       COMPILE::SWF
-    {
-               import org.apache.royale.core.IRenderedObject;
-        import flash.display.DisplayObject;
-    }
-
-       COMPILE::JS
-    {
-        import org.apache.royale.core.WrappedHTMLElement;
-               import org.apache.royale.html.util.addElementToWrapper;
-    }
+       import org.apache.royale.utils.StringUtil;
 
        /**
         *  The Drawer class is a container component used for navigation
-        *  can be opened with the menu icon on any screen size.
-        *  If fixed could serve as sidebar navigation on larger screens.
+        *  can be opened with the menu icon.
+        * 
+        *  It can be used in float or fixed modes. 
+        *  
+        *  float make the drawer appear over the screen without make anything 
change size
+        *  and click outside the drawer will hide it. Usually clicking in some 
navigation option
+        *  will hide it as well.
+        * 
+        *  fixed will need some place and make the other content shrink. click 
on navigation option 
+        *  in the drawer usually doesn't hide it.
         *
         *  @langversion 3.0
         *  @playerversion Flash 10.2
         *  @playerversion AIR 2.6
         *  @productversion Royale 0.9.3
         */
-       public class Drawer extends Group
+       public class Drawer extends DrawerBase
        {
+               public static const FLOAT:String = "float";
+               public static const FIXED:String = "fixed";
+               public static const AUTO:String = "auto";
+
                /**
                 *  constructor.
                 *
@@ -59,11 +59,27 @@ package org.apache.royale.jewel
                {
                        super();
 
-            typeNames = "jewel drawer";
+                       // defaults to float (notice that float or fixed is 
needed always)
+            typeNames = "jewel drawer " + FLOAT;
 
                        addEventListener(MouseEvent.CLICK, 
internalMouseHandler);
+
+                       // TODO (carlosrovira) handle swipe touch gesture to 
close drawer in mobile (only on float)
+                       // addEventListener("touchstart" handleTouchStart);
+                       // addEventListener("touchmove" handleTouchMove);
+                       // addEventListener("touchend" handleTouchEnd);
                }
 
+               // private function handleTouchStart(event:Event):void
+               // {
+               // }
+               // private function handleTouchMove(event:Event):void
+               // {
+               // }
+               // private function handleTouchEnd(event:Event):void
+               // {
+               // }
+
                private function internalMouseHandler(event:MouseEvent):void
                {
                        COMPILE::JS
@@ -73,7 +89,6 @@ package org.apache.royale.jewel
                                if (hostClassList.contains("drawer"))
                                {
                                        close();
-                                       //dispatchEvent(new 
Event("closeDrawer"));
                                }
                        }
                }
@@ -99,12 +114,26 @@ package org.apache.royale.jewel
                 _isOpen = value;
 
                 toggleClass("open", _isOpen);
+                               
+                               adjustAppScroll();
 
-                               COMPILE::JS
-                               {//avoid scroll in html
+                               _isOpen ? dispatchEvent(new 
Event("openDrawer")) : dispatchEvent(new Event("closeDrawer"));
+            }
+               }
+
+               protected function adjustAppScroll():void
+               {
+                       COMPILE::JS
+                       {
+                               //avoid scroll in html
+                               if(fixed)
+                               {
+                                       
document.body.classList.remove("remove-app-scroll");
+                               } else
+                               {
                                        
document.body.classList.toggle("remove-app-scroll", _isOpen);
                                }
-            }
+                       }
                }
 
                public function open():void
@@ -117,56 +146,124 @@ package org.apache.royale.jewel
             isOpen = false;
                }
 
-               COMPILE::JS
-               private var nav:HTMLElement;
-
-               /**
-         * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement
-         */
-        COMPILE::JS
-        override protected function createElement():WrappedHTMLElement
+               protected var _fixed:Boolean = false;
+        /**
+                *  A boolean flag to switch between "float" and "fixed" effect 
selector.
+                *  Optional. Makes the drawer always fixed instead of floating.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.3
+                */
+        public function get fixed():Boolean
+        {
+            return _fixed;
+        }
+        public function set fixed(value:Boolean):void
         {
-                       nav = addElementToWrapper(this,'nav');
-                       nav.className = "drawermain";
-                       
-                       var aside:HTMLElement = document.createElement('aside') 
as HTMLElement;
-                       aside.appendChild(nav);
+            if (_fixed != value)
+            {
+                _fixed = value;
 
-                       positioner = aside as WrappedHTMLElement;
-                       positioner.royale_wrapper = this;
+                               if(_fixed)
+                               {
+                                       typeNames = 
StringUtil.removeWord(typeNames, " " + FLOAT);
+                                       typeNames += " " + FIXED;
+                               }
+                               else
+                               {
+                                       typeNames = 
StringUtil.removeWord(typeNames, " " + FIXED);
+                                       typeNames += " " + FLOAT;
+                               }
 
-                       return element; 
-        }
+                               COMPILE::JS
+                               {
+                                       if (parent)
+                                               
setClassName(computeFinalClassNames()); 
 
-               /**
-         *  @copy org.apache.royale.core.IParent#addElement()
-         * 
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
-                *  @royaleignorecoercion org.apache.royale.core.IUIBase
-         */
-               override public function addElement(c:IChild, 
dispatchEvent:Boolean = true):void
-               {
-            COMPILE::SWF
-            {
-                if (c is IUIBase)
-                {
-                    if (c is IRenderedObject)
-                        $addChild(IRenderedObject(c).$displayObject);
-                    else
-                        $addChild(c as DisplayObject);                        
-                    IUIBase(c).addedToParent();
-                }
-                else
-                    $addChild(c as DisplayObject);
+                                       toggleClass("open", _isOpen);
+                               }
             }
-            COMPILE::JS
+        }
+
+               protected var _auto:Boolean = false;
+        /**
+                *  A boolean flag to activate "auto" effect selector.
+                *  Optional. Makes the drawer auto adapt using 
+                *  a float behaviour on mobile and tablets and fixed
+                *  behaviour on desktop.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.3
+                */
+        public function get auto():Boolean
+        {
+            return _auto;
+        }
+        public function set auto(value:Boolean):void
+        {
+            if (_auto != value)
             {
-                nav.appendChild(c.positioner);
-                (c as IUIBase).addedToParent();
+                _auto = value;
+
+                               COMPILE::JS
+                               {
+                               if(_auto)
+                               {
+                                       window.addEventListener('resize', 
autoResizeHandler, false);
+                               }
+                               else
+                               {
+                                       window.removeEventListener('resize', 
autoResizeHandler, false);
+                               }
+                               }
+
+                toggleClass("auto", _auto);
             }
+        }
+
+               /**
+                *  When set to "auto" this resize handler monitors the width 
of the app window
+                *  and switch between fixed and float modes.
+                * 
+                *  Note:This could be done with media queries, but since it 
handles open/close
+                *  maybe this is the right way
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.3
+                */
+               private function autoResizeHandler(event:Event = null):void
+        {
+                       COMPILE::JS
+                       {
+                               var outerWidth:Number = window.outerWidth;
+
+                               var tmpFixed:Boolean = fixed;
+
+                               // Desktop width size
+                               if(outerWidth > 992)
+                               {
+                                       fixed = true;
+                                       if(tmpFixed != fixed)
+                                       {
+                                               open();
+                                       }
+                               }
+                               else
+                               {
+                                       fixed = false;
+                                       if(tmpFixed != fixed)
+                                       {
+                                               close();
+                                       }
+                               }
+
+                       }
                }
        }
 }
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Drawer.as 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DrawerBase.as
similarity index 69%
copy from 
frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Drawer.as
copy to 
frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DrawerBase.as
index c38b7a8..9b5a2b9 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Drawer.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DrawerBase.as
@@ -36,16 +36,35 @@ package org.apache.royale.jewel
     }
 
        /**
-        *  The Drawer class is a container component used for navigation
-        *  can be opened with the menu icon on any screen size.
-        *  If fixed could serve as sidebar navigation on larger screens.
-        *
+     *  Dispatched when the drawer open
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.9.3
+     */
+       [Event(name="openDrawer", type="org.apache.royale.events.Event")]
+
+       /**
+     *  Dispatched when the drawer close
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.9.3
+     */
+       [Event(name="closeDrawer", type="org.apache.royale.events.Event")]
+
+       /**
+        *  The DrawerBase class is the base class for a container component 
+        *  used for navigation.
+        *  
         *  @langversion 3.0
         *  @playerversion Flash 10.2
         *  @playerversion AIR 2.6
         *  @productversion Royale 0.9.3
         */
-       public class Drawer extends Group
+       public class DrawerBase extends Group
        {
                /**
                 *  constructor.
@@ -55,70 +74,15 @@ package org.apache.royale.jewel
                 *  @playerversion AIR 2.6
                 *  @productversion Royale 0.9.3
                 */
-               public function Drawer()
+               public function DrawerBase()
                {
                        super();
 
             typeNames = "jewel drawer";
-
-                       addEventListener(MouseEvent.CLICK, 
internalMouseHandler);
-               }
-
-               private function internalMouseHandler(event:MouseEvent):void
-               {
-                       COMPILE::JS
-                       {
-                               var hostComponent:UIBase = event.target as 
UIBase;
-                               var hostClassList:DOMTokenList = 
hostComponent.positioner.classList;
-                               if (hostClassList.contains("drawer"))
-                               {
-                                       close();
-                                       //dispatchEvent(new 
Event("closeDrawer"));
-                               }
-                       }
-               }
-
-               private var _isOpen:Boolean;
-        /**
-         *  Open or close the drawer
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.3
-         */
-               public function get isOpen():Boolean
-               {
-            return _isOpen;
-               }
-
-               public function set isOpen(value:Boolean):void
-               {
-            if (_isOpen != value)
-            {
-                _isOpen = value;
-
-                toggleClass("open", _isOpen);
-
-                               COMPILE::JS
-                               {//avoid scroll in html
-                                       
document.body.classList.toggle("remove-app-scroll", _isOpen);
-                               }
-            }
-               }
-
-               public function open():void
-               {
-            isOpen = true;
-               }
-
-               public function close():void
-               {
-            isOpen = false;
                }
 
                COMPILE::JS
-               private var nav:HTMLElement;
+               protected var nav:HTMLElement;
 
                /**
          * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement
@@ -144,7 +108,7 @@ package org.apache.royale.jewel
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
-         *  @productversion Royale 0.0
+         *  @productversion Royale 0.9.3
                 *  @royaleignorecoercion org.apache.royale.core.IUIBase
          */
                override public function addElement(c:IChild, 
dispatchEvent:Boolean = true):void
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/TopAppBar.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/TopAppBar.as
index 1733315..976d216 100644
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/TopAppBar.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/TopAppBar.as
@@ -18,6 +18,15 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel
 {
+       import org.apache.royale.core.IChild;
+       import org.apache.royale.core.IUIBase;
+       import org.apache.royale.events.Event;
+
+       COMPILE::SWF
+    {
+               import org.apache.royale.core.IRenderedObject;
+        import flash.display.DisplayObject;
+    }
     COMPILE::JS
     {
         import org.apache.royale.core.WrappedHTMLElement;
@@ -50,9 +59,68 @@ package org.apache.royale.jewel
                        super();
 
             typeNames = "jewel topappbar"
+                       setListenersForFixed();
+               }
+
+               COMPILE::JS
+               private var currentOffset:Number = 0;
+               COMPILE::JS
+               private var lastPosition:Number = 0;
+
+               private function setListenersForFixed():void
+        {
+                       COMPILE::JS
+                       {
+                       if(_fixed)
+                       {
+                               header.classList.add("fixed");
+                               window.removeEventListener('scroll', 
scrollHandler, false);
+                       }
+                       else
+                       {
+                               header.classList.remove("fixed");
+                               window.addEventListener('scroll', 
scrollHandler, false);
+                       }
+                       }
+               }
+
+               /**
+                *  If not fixed this scroll handler manages that the top bar 
doesn't get lost above
+                *  and will get back to screen sooner since only get scroll up 
by its size
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.3
+                */
+               private function scrollHandler(event:Event = null):void
+        {
+                       COMPILE::JS
+            {
+                               var offset:Number;
+                               var currentPosition:Number = 
Math.max(window.pageYOffset, 0);
+                               var diff:Number = currentPosition - 
lastPosition;
+                               lastPosition = currentPosition;
+
+                               currentOffset -= diff;
+                               
+                               if (currentOffset > 0) {
+                                       currentOffset = 0;
+                               } else if (Math.abs(currentOffset) > 
header.clientHeight) {
+                                       currentOffset = -header.clientHeight;
+                               }
+
+                               offset = currentOffset;
+                               if (Math.abs(offset) >= header.clientHeight) {
+                                       offset = -128;
+                               }
+                               
+                               header.style.top = offset + "px";
+                       }
                }
 
-               protected var _fixed:Boolean;
+
+               protected var _fixed:Boolean = false;
         /**
                 *  A boolean flag to activate "fixed" effect selector.
                 *  Optional. Makes the header always visible.
@@ -72,17 +140,63 @@ package org.apache.royale.jewel
             {
                 _fixed = value;
 
-                toggleClass("fixed", _fixed);
+                //toggleClass("fixed", _fixed);
+                               setListenersForFixed();
             }
         }
 
+
+               COMPILE::JS
+               private var header:HTMLElement;
+
                /**
          * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement
          */
         COMPILE::JS
         override protected function createElement():WrappedHTMLElement
         {
-                       return addElementToWrapper(this, 'header');
+                       header = addElementToWrapper(this,'header');
+                       header.className = "topBarAppHeader";
+                       header.style.top = "0px";
+                       
+                       var div:HTMLDivElement = document.createElement('div') 
as HTMLDivElement;
+                       div.appendChild(header);
+
+                       positioner = div as WrappedHTMLElement;
+                       positioner.royale_wrapper = this;
+
+                       return element;
         }
+
+               /**
+         *  @copy org.apache.royale.core.IParent#addElement()
+         * 
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.3
+                *  @royaleignorecoercion org.apache.royale.core.IUIBase
+         */
+               override public function addElement(c:IChild, 
dispatchEvent:Boolean = true):void
+               {
+            COMPILE::SWF
+            {
+                if (c is IUIBase)
+                {
+                    if (c is IRenderedObject)
+                        $addChild(IRenderedObject(c).$displayObject);
+                    else
+                        $addChild(c as DisplayObject);                        
+                    IUIBase(c).addedToParent();
+                }
+                else
+                    $addChild(c as DisplayObject);
+            }
+            COMPILE::JS
+            {
+                header.appendChild(c.positioner);
+                (c as IUIBase).addedToParent();
+            }
+               }
        }
 }
diff --git a/frameworks/projects/Jewel/src/main/sass/_global.sass 
b/frameworks/projects/Jewel/src/main/sass/_global.sass
index 222ab54..75b6c83 100644
--- a/frameworks/projects/Jewel/src/main/sass/_global.sass
+++ b/frameworks/projects/Jewel/src/main/sass/_global.sass
@@ -39,6 +39,15 @@ j|View
        IBeadView: ClassReference("org.apache.royale.core.beads.GroupView")
        IBeadLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.BasicLayout")
 
+j|ApplicationResponsiveView
+       IBeadView: ClassReference("org.apache.royale.core.beads.GroupView")
+       //IBeadLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.BasicLayout")
+
+.applicationResponsiveView
+       display: inline-flex
+       width: 100%
+       // height: 100%
+
 j|ApplicationView
        IBeadView: ClassReference("org.apache.royale.core.beads.GroupView")
        IBeadLayout: 
ClassReference("org.apache.royale.jewel.beads.layouts.VerticalLayout")
diff --git 
a/frameworks/projects/Jewel/src/main/sass/components/_applicationmaincontent.sass
 
b/frameworks/projects/Jewel/src/main/sass/components/_applicationmaincontent.sass
index 4ea0450..502ed0c 100644
--- 
a/frameworks/projects/Jewel/src/main/sass/components/_applicationmaincontent.sass
+++ 
b/frameworks/projects/Jewel/src/main/sass/components/_applicationmaincontent.sass
@@ -23,7 +23,7 @@
 
 .jewel.main
     width: 100%
-    height: 100%
+    // height: 100%
     
     // display: inline-block
     // flex-grow: 1
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_card.sass 
b/frameworks/projects/Jewel/src/main/sass/components/_card.sass
index 22c74d2..a5b3544 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_card.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_card.sass
@@ -29,6 +29,7 @@ $card-height: 180px !default
     min-width: $card-width
     min-height: $card-height
 
+    width: 350px
     //overflow: hidden
     //position: relative
     //z-index: 1
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_divider.sass 
b/frameworks/projects/Jewel/src/main/sass/components/_divider.sass
index c9c7f69..5a27600 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_divider.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_divider.sass
@@ -21,9 +21,6 @@
     height: 0
     margin: 0
     border: none
-    border-bottom-color: rgba(0, 0, 0, 0.12)
-    border-bottom-width: 1px
-    border-bottom-style: solid
-
+    
 j|Divider
 
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_drawer.sass 
b/frameworks/projects/Jewel/src/main/sass/components/_drawer.sass
index fb776d3..bca8b18 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_drawer.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_drawer.sass
@@ -20,27 +20,14 @@
 // Jewel Drawer
 
 // Drawer variables
-$drawer-width-offset: 60px
-$drawer-max-width: 310px
+$drawer-float-width-offset: 60px
+$drawer-float-max-width: 310px
 
 .jewel.drawer
-    position: fixed
-    pointer-events: none
-    
-    top: 0
-    left: 0
-    
-    width: 100%
-    height: 100%
-    
-    overflow: hidden
-    contain: strict
-    
-    z-index: 5
 
-    &::before
-        position: absolute
-        display: block
+    &.float
+        position: fixed
+        pointer-events: none
         
         top: 0
         left: 0
@@ -48,35 +35,79 @@ $drawer-max-width: 310px
         width: 100%
         height: 100%
         
-        content: ""
-        opacity: 0
-
-    .drawermain
-        position: absolute
-        
-        display: flex
-        flex-direction: column
-        
-        left: 0
-        right: initial
+        overflow: hidden
+        contain: strict
         
-        height: 100%
-
-    &.open
-        pointer-events: auto
+        z-index: 5
 
         &::before
-            opacity: 1
+            position: absolute
+            display: block
+            
+            top: 0
+            left: 0
+            
+            width: 100%
+            height: 100%
+            
+            content: ""
+            opacity: 0
+
+        .drawermain
+            position: absolute
+            
+            display: flex
+            flex-direction: column
+            
+            left: 0
+            right: initial
+            
+            height: 100%
+
+        &.open
+            pointer-events: auto
+
+            &::before
+                opacity: 1
+
+    &.fixed
+        width: 0
 
+        .drawermain
+            display: inline-flex
+            flex-direction: column
+
+            left: 0
+            right: auto
+            
+            height: 100%
+            
+            overflow: hidden
+            touch-action: none
+  
+        &.open 
+            pointer-events: auto
+            
+            .drawermain
+                transform: none
+
+@media (min-width: $tablet)
+    .jewel.drawer
+        &.float
+            .drawermain
+                width: calc(100% - #{$drawer-float-width-offset})
+                max-width: $drawer-float-max-width
+
+// Used for float
+.remove-app-scroll
+    overflow: hidden
+
+// DrawerHeader
 .jewel.drawerheader
     position: relative
     display: flex
     flex-direction: column
     align-items: center
-    
-    // &::before 
-    //     display: block
-    //     content: ""
 
     div
         display: flex
@@ -87,6 +118,7 @@ $drawer-max-width: 310px
         left: 0
         align-items: flex-end
 
+// DrawerContent
 .jewel.drawercontent
     flex-grow: 1
     margin: 0
@@ -95,14 +127,7 @@ $drawer-max-width: 310px
     -webkit-overflow-scrolling: touch
     touch-action: pan-y
 
-@media (min-width: $tablet)
-    .jewel.drawer
-        .drawermain
-            width: calc(100% - #{$drawer-width-offset})
-            max-width: $drawer-max-width
 
-.remove-app-scroll
-    overflow: hidden
 
 j|Drawer
 
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_topappbar.sass 
b/frameworks/projects/Jewel/src/main/sass/components/_topappbar.sass
index cf34c56..e22157c 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_topappbar.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_topappbar.sass
@@ -24,15 +24,19 @@ $top-app-bar-row-height: 64px
 $top-app-bar-button-size: 48px
 
 .jewel.topappbar
-    display: flex
-    flex-direction: column
-    justify-content: space-between
-    width: 100%
-    z-index: 4
-    
-    &.fixed
+    display: inline-flex
+    flex: 1 1 auto
+
+    .topBarAppHeader
+        display: flex
+        flex-direction: column
+        justify-content: space-between
+        width: 100%
+        z-index: 4
         position: fixed
-        top: 0px
+    
+        &.fixed
+            transition: box-shadow 200ms linear
 
 // this adjust the container declared after TopAppBar and with only one row 
(most common case)
 // used by ApplicationMainContent 
@@ -70,18 +74,52 @@ $top-app-bar-button-size: 48px
         outline: none
         text-decoration: none
         cursor: pointer
+        opacity: 1
+
+        &:active, &:active:focus, &:focus
+            transition: opacity 0.4s 0ms
+            opacity: 0.5
+
+        // &:before
+        //     content: ""
+        //     background: #90EE90
+        //     display: block
+        //     position: absolute
+        //     padding-top: 300%
+        //     padding-left: 350%
+        //     margin-left: -20px!important
+        //     margin-top: -120%
+        //     opacity: 0
+        //     transition: all 0.8s
+        // &:after
+        //     content: ""
+        //     background: #90EE90
+        //     display: block
+        //     position: absolute
+        //     padding-top: 300%
+        //     padding-left: 350%
+        //     margin-left: -20px!important
+        //     margin-top: -120%
+        //     opacity: 0
+        //     transition: all 0.8s
+
+        // &:active:after 
+        //     padding: 0
+        //     margin: 0
+        //     opacity: 1
+        //     transition: 0s
 
-        &:hover, &:hover:focus, &:active, &:active:focus, &:focus
-            background: transparent
-            box-shadow: none
-            border: none
+        // &:hover, &:hover:focus, &:active, &:active:focus, &:focus
+        //     background: transparent
+        //     box-shadow: none
+        //     border: none
 
-        &[disabled]
-            background: transparent
-            box-shadow: none
-            border: none
+        // &[disabled]
+        //     background: transparent
+        //     box-shadow: none
+        //     border: none
 
-        .icon
+        .fonticon
             margin-left: 0px
             margin-right: 0px
 
diff --git a/frameworks/themes/JewelTheme/src/main/resources/defaults.css 
b/frameworks/themes/JewelTheme/src/main/resources/defaults.css
index 5af5691..328cd68 100644
--- a/frameworks/themes/JewelTheme/src/main/resources/defaults.css
+++ b/frameworks/themes/JewelTheme/src/main/resources/defaults.css
@@ -229,15 +229,21 @@ j|Card {
   font-size: 16px;
 }
 
-.jewel.drawer {
+.jewel.divider {
+  border-bottom-color: #d9d9d9;
+  border-bottom-width: 1px;
+  border-bottom-style: solid;
+}
+
+.jewel.drawer.float {
   color: rgba(0, 0, 0, 0.8);
 }
-.jewel.drawer::before {
+.jewel.drawer.float::before {
   background-color: rgba(0, 0, 0, 0.65);
   will-change: opacity;
   transition: opacity 0.4s 0ms;
 }
-.jewel.drawer .drawermain {
+.jewel.drawer.float .drawermain {
   box-shadow: 0px 0px 6px 1px rgba(1, 1, 1, 0.7);
   transform: translateX(-104%);
   will-change: transform;
@@ -246,10 +252,25 @@ j|Card {
   background-color: white;
   transition: transform 250ms 0ms;
 }
-.jewel.drawer.open .drawermain {
+.jewel.drawer.float.open .drawermain {
   transform: none;
   transition: transform 300ms 0ms;
 }
+.jewel.drawer.fixed .drawermain {
+  width: 240px;
+  transform: translateX(-104%);
+  will-change: transform;
+  transition: transform 250ms 0ms;
+  background-color: white;
+  border-left: 0;
+  border-right: 1px solid #d9d9d9;
+}
+.jewel.drawer.fixed.open {
+  width: 240px;
+}
+.jewel.drawer.fixed.open .drawermain {
+  transition: transform 300ms 0ms;
+}
 
 .jewel.drawerheader {
   background: linear-gradient(#54b7f3, #24a3ef);
@@ -257,6 +278,9 @@ j|Card {
   color: #FFFFFF;
   padding: 16px;
 }
+.jewel.drawerheader::before {
+  padding-top: 56.25%;
+}
 .jewel.drawerheader div {
   padding: 16px;
 }
@@ -521,11 +545,10 @@ j|Card {
   color: silver;
 }
 
-.jewel.topappbar {
+.jewel.topappbar .topBarAppHeader {
   background: linear-gradient(#54b7f3, #24a3ef);
   border-top: 1px solid #83cbf6;
   border-bottom: 1px solid #0d79ba;
-  box-shadow: 0px 0px 6px 1px rgba(1, 1, 1, 0.7);
   color: #FFFFFF;
   text-shadow: 0 -1px 0 rgba(10, 90, 138, 0.7);
 }
diff --git a/frameworks/themes/JewelTheme/src/main/sass/_variables.sass 
b/frameworks/themes/JewelTheme/src/main/sass/_variables.sass
index 27b82fd..81c1946 100644
--- a/frameworks/themes/JewelTheme/src/main/sass/_variables.sass
+++ b/frameworks/themes/JewelTheme/src/main/sass/_variables.sass
@@ -17,6 +17,12 @@
 //
 
////////////////////////////////////////////////////////////////////////////////
 
+// DEVICE DIMENSIONS
+$phone: 0px
+$tablet: 768px
+$desktop: 992px
+$widescreen: 1200px
+
 // TRANSITIONS
 $transitions-enable: false
 $transition-duration: .3s
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_divider.sass 
b/frameworks/themes/JewelTheme/src/main/sass/components-primary/_divider.sass
similarity index 92%
copy from frameworks/projects/Jewel/src/main/sass/components/_divider.sass
copy to 
frameworks/themes/JewelTheme/src/main/sass/components-primary/_divider.sass
index c9c7f69..5ebc81c 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_divider.sass
+++ 
b/frameworks/themes/JewelTheme/src/main/sass/components-primary/_divider.sass
@@ -18,10 +18,7 @@
 
////////////////////////////////////////////////////////////////////////////////
 
 .jewel.divider
-    height: 0
-    margin: 0
-    border: none
-    border-bottom-color: rgba(0, 0, 0, 0.12)
+    border-bottom-color: $default-color
     border-bottom-width: 1px
     border-bottom-style: solid
 
diff --git 
a/frameworks/themes/JewelTheme/src/main/sass/components-primary/_drawer.sass 
b/frameworks/themes/JewelTheme/src/main/sass/components-primary/_drawer.sass
index 5409cc5..0879a7f 100644
--- a/frameworks/themes/JewelTheme/src/main/sass/components-primary/_drawer.sass
+++ b/frameworks/themes/JewelTheme/src/main/sass/components-primary/_drawer.sass
@@ -27,30 +27,56 @@ $drawer-transition-open: animation-standard(transform, 
$drawer-transition-open-t
 $drawer-overlay-color: #000 !default
 $drawer-overlay-opacity: .65 !default
 
+$drawer-fixed-width: 240px
+
 .jewel.drawer
-    color: rgba(0, 0, 0, 0.8)
-    
-    &::before
-        background-color: rgba($drawer-overlay-color, $drawer-overlay-opacity)
-        will-change: opacity
-        transition: animation-standard(opacity, .4s)
-
-
-    .drawermain
-        box-shadow: 0px 0px 6px 1px rgba(.7, .7, .7, .7)
-        transform: translateX(-104%)
-        will-change: transform
-        width: calc(100% - #{$drawer-width-offset})
-        max-width: $drawer-max-width
-        background-color: lighten($default-color, 20%)
-        transition: $drawer-transition-close
-    
-    &.open        
+
+    &.float
+        color: rgba(0, 0, 0, 0.8)
+        
+        &::before
+            background-color: rgba($drawer-overlay-color, 
$drawer-overlay-opacity)
+            will-change: opacity
+            transition: animation-standard(opacity, .4s)
+
+
         .drawermain
-            transform: none
-            transition: $drawer-transition-open
+            box-shadow: 0px 0px 6px 1px rgba(.7, .7, .7, .7)
+            transform: translateX(-104%)
+            will-change: transform
+            width: calc(100% - #{$drawer-width-offset})
+            max-width: $drawer-max-width
+            background-color: lighten($default-color, 20%)
+            transition: $drawer-transition-close
 
+        &.open        
+            .drawermain
+                transform: none
+                transition: $drawer-transition-open
 
+    &.fixed
+
+        .drawermain
+            width: $drawer-fixed-width
+            transform: translateX(-104%)
+            // transform: translateX(-100%) translateX(-20px)
+            will-change: transform
+            //max-width: $drawer-max-width
+            transition: $drawer-transition-close
+        
+            background-color: lighten($default-color, 20%)
+            border-left: 0
+            border-right: 1px solid $default-color
+
+        &.open
+            width: $drawer-fixed-width
+            
+            .drawermain
+                transition: $drawer-transition-open
+
+    // &.permanent
+
+// DrawerHeader
 .jewel.drawerheader
     @if $flat
         background: $primary-color
@@ -63,14 +89,16 @@ $drawer-overlay-opacity: .65 !default
     padding: $drawer-header-padding
 
     &::before 
-        // padding-top: 9 / 16 * 100%
+        padding-top: 9 / 16 * 100%
 
     div
         padding: $drawer-header-padding
 
+// DrawerContent
 .jewel.drawercontent
 
 
+
 j|Drawer
 
 j|DrawerHeader
diff --git 
a/frameworks/themes/JewelTheme/src/main/sass/components-primary/_topappbar.sass 
b/frameworks/themes/JewelTheme/src/main/sass/components-primary/_topappbar.sass
index 27fbe11..c1b16d6 100644
--- 
a/frameworks/themes/JewelTheme/src/main/sass/components-primary/_topappbar.sass
+++ 
b/frameworks/themes/JewelTheme/src/main/sass/components-primary/_topappbar.sass
@@ -27,23 +27,24 @@ $top-app-bar-button-padding: 12px
 
 .jewel.topappbar
     
-    @if $flat
-        background: $primary-color
-        border: 0px solid
-    @else
-        background: linear-gradient(lighten($primary-color, 5%), 
darken($primary-color, 5%))
-        border-top: 1px solid lighten($primary-color, 15%)
-        border-bottom: 1px solid darken($primary-color, 20%)
-        box-shadow: 0px 0px 6px 1px rgba(.7, .7, .7, .7)
-    
-    color: $font-theme-color
+    .topBarAppHeader
+        @if $flat
+            background: $primary-color
+            border: 0px solid
+        @else
+            background: linear-gradient(lighten($primary-color, 5%), 
darken($primary-color, 5%))
+            border-top: 1px solid lighten($primary-color, 15%)
+            border-bottom: 1px solid darken($primary-color, 20%)
+            // box-shadow: 0px 0px 6px 1px rgba(.7, .7, .7, .7)
+        
+        color: $font-theme-color
 
-    @if not $flat //and $text-color == $font-theme-color
-        text:
-            shadow: 0 -1px 0 rgba(darken($primary-color, 30%), .7)
+        @if not $flat //and $text-color == $font-theme-color
+            text:
+                shadow: 0 -1px 0 rgba(darken($primary-color, 30%), .7)
 
-    &.fixed
-        // transition: box-shadow 200ms linear
+        //&.fixed
+            // transition: box-shadow 200ms linear
 
 .jewel.topappbarrow 
     
diff --git a/frameworks/themes/JewelTheme/src/main/sass/defaults.sass 
b/frameworks/themes/JewelTheme/src/main/sass/defaults.sass
index ea81dd4..3c792ef 100644
--- a/frameworks/themes/JewelTheme/src/main/sass/defaults.sass
+++ b/frameworks/themes/JewelTheme/src/main/sass/defaults.sass
@@ -31,6 +31,7 @@
 @import "components-primary/card"
 @import "components-primary/checkbox"
 @import "components-primary/controlbar"
+@import "components-primary/divider"
 @import "components-primary/drawer"
 @import "components-primary/dropdownlist"
 @import "components-primary/itemRenderer"

Reply via email to