This is an automated email from the ASF dual-hosted git repository.
yishayw 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 87cb488841 Add TourDeStyle component explorer example
87cb488841 is described below
commit 87cb488841e4847017ae3571c51ed693ca0ba9f9
Author: Yishay Weiss <[email protected]>
AuthorDate: Thu Apr 16 09:35:19 2026 +0300
Add TourDeStyle component explorer example
Standalone example project showcasing all Style UI components with
interactive demos. Supports building the full tabbed tour with `ant`
or individual playgrounds with `ant -Dexample=<Name>`.
Defaults to JSRoyale target only. Maven and asconfigc are not yet
supported.
Includes playgrounds for: Pagination, Card, Modal, Tabs, Toggle, Dropdown.
Also registers DropdownSkin and Modal skins in style-manifest.xml,
and fixes AlignItems value in TabBarSkin.
---
examples/royale/TourDeStyle/README.md | 72 +++++++
examples/royale/TourDeStyle/build-output.txt | Bin 0 -> 6646 bytes
examples/royale/TourDeStyle/build.xml | 42 ++++
examples/royale/TourDeStyle/build_output.txt | Bin 0 -> 5860 bytes
.../src/main/config/compile-app-config.xml | 25 +++
.../src/main/royale/CardPlayGround.mxml | 73 +++++++
.../src/main/royale/DropdownPlayGround.mxml | 77 +++++++
.../src/main/royale/ModalPlayGround.mxml | 83 ++++++++
.../src/main/royale/PaginationPlayGround.mxml | 61 ++++++
.../src/main/royale/TabsPlayGround.mxml | 96 +++++++++
.../src/main/royale/TogglePlayGround.mxml | 54 +++++
.../TourDeStyle/src/main/royale/TourDeStyle.mxml | 225 +++++++++++++++++++++
.../Style/src/main/resources/style-manifest.xml | 5 +
.../org/apache/royale/style/skins/TabBarSkin.as | 2 +-
14 files changed, 814 insertions(+), 1 deletion(-)
diff --git a/examples/royale/TourDeStyle/README.md
b/examples/royale/TourDeStyle/README.md
new file mode 100644
index 0000000000..c3361a1e48
--- /dev/null
+++ b/examples/royale/TourDeStyle/README.md
@@ -0,0 +1,72 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// 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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+## DESCRIPTION
+
+Tour De Style is a Component Explorer for the Apache Royale Style UI Set.
+
+Style is a CSS-driven UI component set that uses DaisyUI/Tailwind-inspired
+design tokens and applies them through ActionScript skin classes.
+
+This example showcases all Style components with different variants and
+configurations.
+
+## BUILDING
+
+### Prerequisites
+
+The Style library SWC must be built before compiling this example. From the
+SDK root:
+
+ cd frameworks/js/projects/StyleJS
+ ant
+
+### Build All Components (Tour)
+
+To build the combined application with tabbed navigation across all components:
+
+ cd examples/royale/TourDeStyle
+ ant
+
+### Build a Single Component
+
+Each component has a standalone PlayGround application that can be compiled
+individually:
+
+ ant -Dexample=PaginationPlayGround
+ ant -Dexample=CardPlayGround
+ ant -Dexample=ModalPlayGround
+ ant -Dexample=TabsPlayGround
+ ant -Dexample=TogglePlayGround
+ ant -Dexample=DropdownPlayGround
+
+### Viewing
+
+After building, open `bin/js-debug/index.html` in a browser.
+
+## COMPONENTS
+
+| PlayGround | Description |
+|------------------------|--------------------------------------------------|
+| PaginationPlayGround | Pagination with prev/next, disabled items |
+| CardPlayGround | Card with shadow, border, and dash variants |
+| ModalPlayGround | Modal dialogs with actions and easy dismiss |
+| TabsPlayGround | TabBar with content switching, disabled tabs |
+| TogglePlayGround | Toggle switches, checked and disabled states |
+| DropdownPlayGround | Dropdowns with programmatic and disabled states |
diff --git a/examples/royale/TourDeStyle/build-output.txt
b/examples/royale/TourDeStyle/build-output.txt
new file mode 100644
index 0000000000..759c77140d
Binary files /dev/null and b/examples/royale/TourDeStyle/build-output.txt differ
diff --git a/examples/royale/TourDeStyle/build.xml
b/examples/royale/TourDeStyle/build.xml
new file mode 100644
index 0000000000..4edd682c7d
--- /dev/null
+++ b/examples/royale/TourDeStyle/build.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!--
+
+ 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.
+
+-->
+
+<project name="TourDeStyle" default="main" basedir=".">
+ <property name="ROYALE_HOME" location="../../.."/>
+ <property name="example" value="TourDeStyle" />
+
+ <property file="${ROYALE_HOME}/env.properties"/>
+ <property environment="env"/>
+ <property file="${ROYALE_HOME}/build.properties"/>
+ <property name="ROYALE_HOME" value="${ROYALE_HOME}"/>
+
+ <include file="${basedir}/../../build_example.xml" />
+
+ <target name="main" depends="clean,build_example.compile"
description="Clean build of ${example}">
+ </target>
+
+ <target name="clean">
+ <delete dir="${basedir}/bin" failonerror="false" />
+ <delete dir="${basedir}/bin-debug" failonerror="false" />
+ <delete dir="${basedir}/bin-release" failonerror="false" />
+ <delete dir="${basedir}/target" failonerror="false" />
+ </target>
+
+</project>
diff --git a/examples/royale/TourDeStyle/build_output.txt
b/examples/royale/TourDeStyle/build_output.txt
new file mode 100644
index 0000000000..76a5bfa13d
Binary files /dev/null and b/examples/royale/TourDeStyle/build_output.txt differ
diff --git a/examples/royale/TourDeStyle/src/main/config/compile-app-config.xml
b/examples/royale/TourDeStyle/src/main/config/compile-app-config.xml
new file mode 100644
index 0000000000..55f5d02f14
--- /dev/null
+++ b/examples/royale/TourDeStyle/src/main/config/compile-app-config.xml
@@ -0,0 +1,25 @@
+<!--
+
+ 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.
+
+-->
+<royale-config>
+ <compiler>
+ <targets>
+ <target>JSRoyale</target>
+ </targets>
+ </compiler>
+</royale-config>
diff --git a/examples/royale/TourDeStyle/src/main/royale/CardPlayGround.mxml
b/examples/royale/TourDeStyle/src/main/royale/CardPlayGround.mxml
new file mode 100644
index 0000000000..f373949eff
--- /dev/null
+++ b/examples/royale/TourDeStyle/src/main/royale/CardPlayGround.mxml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:s="library://ns.apache.org/royale/style"
+ xmlns:e="library://ns.apache.org/royale/style-elements">
+
+ <s:initialView>
+ <s:View>
+ <s:FlexContainer vertical="true" gap="24">
+
+ <!-- Default Card with shadow -->
+ <s:Card width="384">
+ <s:CardBody>
+ <s:CardTitle text="Default Card" />
+ <e:Div text="A card component has a figure, a body part, and
inside body there are title and actions parts." />
+ <s:CardActions>
+ <e:Div text="Buy Now" />
+ </s:CardActions>
+ </s:CardBody>
+ </s:Card>
+
+ <!-- Card with border variant -->
+ <s:Card width="384" variant="border">
+ <s:CardBody>
+ <s:CardTitle text="Border Card" />
+ <e:Div text="This card uses a border instead of a shadow." />
+ <s:CardActions>
+ <e:Div text="Action" />
+ </s:CardActions>
+ </s:CardBody>
+ </s:Card>
+
+ <!-- Card with dash variant -->
+ <s:Card width="384" variant="dash">
+ <s:CardBody>
+ <s:CardTitle text="Dash Border Card" />
+ <e:Div text="This card uses a dashed border style." />
+ <s:CardActions>
+ <e:Div text="Action" />
+ </s:CardActions>
+ </s:CardBody>
+ </s:Card>
+
+ <!-- Card with no actions -->
+ <s:Card width="384">
+ <s:CardBody>
+ <s:CardTitle text="Simple Card" />
+ <e:Div text="A simple card with just a title and text, no
action buttons." />
+ </s:CardBody>
+ </s:Card>
+
+ </s:FlexContainer>
+ </s:View>
+ </s:initialView>
+
+</s:Application>
diff --git
a/examples/royale/TourDeStyle/src/main/royale/DropdownPlayGround.mxml
b/examples/royale/TourDeStyle/src/main/royale/DropdownPlayGround.mxml
new file mode 100644
index 0000000000..a42a94e2f5
--- /dev/null
+++ b/examples/royale/TourDeStyle/src/main/royale/DropdownPlayGround.mxml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:s="library://ns.apache.org/royale/style"
+ xmlns:e="library://ns.apache.org/royale/style-elements">
+ <fx:Style>
+ @namespace s "library://ns.apache.org/royale/style";
+ s|Dropdown
+ {
+ IStyleSkin:
ClassReference("org.apache.royale.style.skins.DropdownSkin");
+ }
+ s|View
+ {
+ IBeadView:
ClassReference("org.apache.royale.html.beads.GroupView");
+ IBeadLayout:
ClassReference("org.apache.royale.style.beads.FlexLayout");
+ }
+ </fx:Style>
+ <fx:Script>
+ <![CDATA[
+ import org.apache.royale.style.Dropdown;
+
+ private function toggleOpen():void
+ {
+ programmaticDropdown.open = !programmaticDropdown.open;
+ }
+ ]]>
+ </fx:Script>
+
+ <s:initialView>
+ <s:View>
+ <s:FlexContainer gap="1rem">
+
+ <!-- Basic dropdown (focus-within) -->
+ <s:Dropdown triggerText="Click me">
+ <e:Div text="Option 1" />
+ <e:Div text="Option 2" />
+ <e:Div text="Option 3" />
+ </s:Dropdown>
+
+ <!-- Force open -->
+ <s:Dropdown triggerText="Always open" open="true">
+ <e:Div text="Item A" />
+ <e:Div text="Item B" />
+ </s:Dropdown>
+
+ <!-- Disabled -->
+ <s:Dropdown triggerText="Disabled" disabled="true">
+ <e:Div text="Unreachable" />
+ </s:Dropdown>
+
+ <!-- Programmatic toggle -->
+ <s:Dropdown id="programmaticDropdown" triggerText="Programmatic">
+ <e:Div text="Toggled item" />
+ </s:Dropdown>
+
+ </s:FlexContainer>
+ </s:View>
+ </s:initialView>
+
+</s:Application>
diff --git a/examples/royale/TourDeStyle/src/main/royale/ModalPlayGround.mxml
b/examples/royale/TourDeStyle/src/main/royale/ModalPlayGround.mxml
new file mode 100644
index 0000000000..a4aa6c116c
--- /dev/null
+++ b/examples/royale/TourDeStyle/src/main/royale/ModalPlayGround.mxml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:s="library://ns.apache.org/royale/style"
+ xmlns:e="library://ns.apache.org/royale/style-elements">
+
+ <fx:Script>
+ <![CDATA[
+ private function openModal(id:String):void
+ {
+ var modal:Modal = this[id] as Modal;
+ if (modal)
+ modal.open = true;
+ }
+ ]]>
+ </fx:Script>
+
+ <s:initialView>
+ <s:View>
+ <s:FlexContainer vertical="true" gap="24">
+
+ <!-- Button to open basic modal -->
+ <e:Div text="Open Basic Modal" click="openModal('basicModal')" />
+
+ <!-- Button to open easy-dismiss modal -->
+ <e:Div text="Open Easy Dismiss Modal" click="openModal('easyModal')" />
+
+ <!-- Button to open modal with actions -->
+ <e:Div text="Open Modal with Actions"
click="openModal('actionsModal')" />
+
+ <!-- Basic modal -->
+ <s:Modal id="basicModal">
+ <s:ModalBody>
+ <s:ModalTitle text="Hello!" />
+ <e:Div text="Press ESC key or click the button below to
close." />
+ </s:ModalBody>
+ <s:ModalActions>
+ <e:Div text="Close" click="basicModal.open = false" />
+ </s:ModalActions>
+ </s:Modal>
+
+ <!-- Easy dismiss modal (click backdrop to close) -->
+ <s:Modal id="easyModal" easyDismiss="true">
+ <s:ModalBody>
+ <s:ModalTitle text="Easy Dismiss" />
+ <e:Div text="Click outside this dialog or press ESC to close."
/>
+ </s:ModalBody>
+ </s:Modal>
+
+ <!-- Modal with actions -->
+ <s:Modal id="actionsModal">
+ <s:ModalBody>
+ <s:ModalTitle text="Confirm Action" />
+ <e:Div text="Are you sure you want to proceed?" />
+ </s:ModalBody>
+ <s:ModalActions>
+ <e:Div text="Cancel" click="actionsModal.open = false" />
+ <e:Div text="Confirm" click="actionsModal.open = false" />
+ </s:ModalActions>
+ </s:Modal>
+
+ </s:FlexContainer>
+ </s:View>
+ </s:initialView>
+
+</s:Application>
diff --git
a/examples/royale/TourDeStyle/src/main/royale/PaginationPlayGround.mxml
b/examples/royale/TourDeStyle/src/main/royale/PaginationPlayGround.mxml
new file mode 100644
index 0000000000..b7115d5d31
--- /dev/null
+++ b/examples/royale/TourDeStyle/src/main/royale/PaginationPlayGround.mxml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:s="library://ns.apache.org/royale/style">
+
+ <s:initialView>
+ <s:View>
+ <s:FlexContainer vertical="true" gap="24">
+ <s:styleBeads>
+ <s:AlignItems value="flex-start" />
+ </s:styleBeads>
+
+ <!-- Basic pagination with active page 3 -->
+ <s:Pagination>
+ <s:PaginationItem text="1" />
+ <s:PaginationItem text="2" />
+ <s:PaginationItem text="3" selected="true" />
+ <s:PaginationItem text="4" />
+ </s:Pagination>
+
+ <!-- With Prev/Next -->
+ <s:Pagination>
+ <s:PaginationItem text="Prev" selectable="false" />
+ <s:PaginationItem text="1" selected="true" />
+ <s:PaginationItem text="2" />
+ <s:PaginationItem text="3" />
+ <s:PaginationItem text="Next" selectable="false" />
+ </s:Pagination>
+
+ <!-- With disabled items -->
+ <s:Pagination>
+ <s:PaginationItem text="Prev" disabled="true" selectable="false" />
+ <s:PaginationItem text="1" selected="true" />
+ <s:PaginationItem text="2" />
+ <s:PaginationItem text="…" disabled="true" selectable="false" />
+ <s:PaginationItem text="99" />
+ <s:PaginationItem text="100" />
+ <s:PaginationItem text="Next" selectable="false" />
+ </s:Pagination>
+
+ </s:FlexContainer>
+ </s:View>
+ </s:initialView>
+</s:Application>
diff --git a/examples/royale/TourDeStyle/src/main/royale/TabsPlayGround.mxml
b/examples/royale/TourDeStyle/src/main/royale/TabsPlayGround.mxml
new file mode 100644
index 0000000000..f88de9490b
--- /dev/null
+++ b/examples/royale/TourDeStyle/src/main/royale/TabsPlayGround.mxml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:s="library://ns.apache.org/royale/style"
+ xmlns:e="library://ns.apache.org/royale/style-elements">
+ <fx:Script>
+ <![CDATA[
+ private function onTabChange():void
+ {
+ var idx:int = tabBar1.selectedIndex;
+ panel1.visible = (idx == 0);
+ panel2.visible = (idx == 1);
+ panel3.visible = (idx == 2);
+ }
+ ]]>
+ </fx:Script>
+ <fx:Style>
+ @namespace s "library://ns.apache.org/royale/style";
+ s|Tab
+ {
+ IStyleSkin:
ClassReference("org.apache.royale.style.skins.TabSkin");
+ }
+ s|TabBar
+ {
+ IStyleSkin:
ClassReference("org.apache.royale.style.skins.TabBarSkin");
+ }
+ s|View
+ {
+ IBeadView:
ClassReference("org.apache.royale.html.beads.GroupView");
+ IBeadLayout:
ClassReference("org.apache.royale.style.beads.FlexLayout");
+ }
+ </fx:Style>
+
+ <s:initialView>
+ <s:View>
+ <s:FlexContainer gap="2rem" vertical="true">
+
+ <!-- Test 1: Tabs with content switching -->
+ <s:FlexContainer vertical="true">
+ <s:TabBar id="tabBar1" selectedIndex="0" change="onTabChange()">
+ <s:tabs>
+ <s:Tab text="Tab 1" />
+ <s:Tab text="Tab 2" />
+ <s:Tab text="Tab 3" />
+ </s:tabs>
+ </s:TabBar>
+ <s:Container id="panel1">
+ <e:Div text="Content for Tab 1: Welcome to the first panel." />
+ </s:Container>
+ <s:Container id="panel2" visible="false">
+ <e:Div text="Content for Tab 2: Here is the second panel." />
+ </s:Container>
+ <s:Container id="panel3" visible="false">
+ <e:Div text="Content for Tab 3: And the third panel." />
+ </s:Container>
+ </s:FlexContainer>
+
+ <!-- Test 2: TabBar with second tab selected -->
+ <s:TabBar selectedIndex="1">
+ <s:tabs>
+ <s:Tab text="Home" />
+ <s:Tab text="Profile" />
+ <s:Tab text="Settings" />
+ </s:tabs>
+ </s:TabBar>
+
+ <!-- Test 3: TabBar with disabled tab -->
+ <s:TabBar selectedIndex="0">
+ <s:tabs>
+ <s:Tab text="Active" />
+ <s:Tab text="Disabled" disabled="true" />
+ <s:Tab text="Another" />
+ </s:tabs>
+ </s:TabBar>
+
+ </s:FlexContainer>
+ </s:View>
+ </s:initialView>
+</s:Application>
diff --git a/examples/royale/TourDeStyle/src/main/royale/TogglePlayGround.mxml
b/examples/royale/TourDeStyle/src/main/royale/TogglePlayGround.mxml
new file mode 100644
index 0000000000..19d3cd0390
--- /dev/null
+++ b/examples/royale/TourDeStyle/src/main/royale/TogglePlayGround.mxml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:s="library://ns.apache.org/royale/style">
+ <fx:Style>
+ @namespace s "library://ns.apache.org/royale/style";
+ s|Toggle
+ {
+ IStyleSkin:
ClassReference("org.apache.royale.style.skins.ToggleSkin");
+ }
+ s|View
+ {
+ IBeadView:
ClassReference("org.apache.royale.html.beads.GroupView");
+ IBeadLayout:
ClassReference("org.apache.royale.style.beads.FlexLayout");
+ }
+ </fx:Style>
+
+ <s:initialView>
+ <s:View>
+ <s:FlexContainer gap="1rem" vertical="true">
+
+ <!-- Basic toggle -->
+ <s:Toggle label="Enable notifications" />
+
+ <!-- Checked by default -->
+ <s:Toggle label="Dark mode" checked="true" />
+
+ <!-- Disabled unchecked -->
+ <s:Toggle label="Disabled off" disabled="true" />
+
+ <!-- Disabled checked -->
+ <s:Toggle label="Disabled on" checked="true" disabled="true" />
+
+ </s:FlexContainer>
+ </s:View>
+ </s:initialView>
+</s:Application>
diff --git a/examples/royale/TourDeStyle/src/main/royale/TourDeStyle.mxml
b/examples/royale/TourDeStyle/src/main/royale/TourDeStyle.mxml
new file mode 100644
index 0000000000..d214b40e4b
--- /dev/null
+++ b/examples/royale/TourDeStyle/src/main/royale/TourDeStyle.mxml
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+ xmlns:s="library://ns.apache.org/royale/style"
+ xmlns:e="library://ns.apache.org/royale/style-elements">
+ <fx:Script>
+ <![CDATA[
+ private function onTabChange():void
+ {
+ var idx:int = navBar.selectedIndex;
+ toggleSection.visible = (idx == 0);
+ tabsSection.visible = (idx == 1);
+ cardSection.visible = (idx == 2);
+ dropdownSection.visible = (idx == 3);
+ modalSection.visible = (idx == 4);
+ paginationSection.visible = (idx == 5);
+ }
+
+ private function openModal(id:String):void
+ {
+ var modal:Modal = this[id] as Modal;
+ if (modal)
+ modal.open = true;
+ }
+ ]]>
+ </fx:Script>
+ <fx:Style>
+ @namespace s "library://ns.apache.org/royale/style";
+ s|Tab
+ {
+ IStyleSkin:
ClassReference("org.apache.royale.style.skins.TabSkin");
+ }
+ s|TabBar
+ {
+ IStyleSkin:
ClassReference("org.apache.royale.style.skins.TabBarSkin");
+ }
+ s|Toggle
+ {
+ IStyleSkin:
ClassReference("org.apache.royale.style.skins.ToggleSkin");
+ }
+ s|Dropdown
+ {
+ IStyleSkin:
ClassReference("org.apache.royale.style.skins.DropdownSkin");
+ }
+ s|View
+ {
+ IBeadView:
ClassReference("org.apache.royale.html.beads.GroupView");
+ IBeadLayout:
ClassReference("org.apache.royale.style.beads.FlexLayout");
+ }
+ </fx:Style>
+
+ <s:initialView>
+ <s:View>
+ <s:FlexContainer vertical="true" gap="24">
+
+ <!-- Navigation -->
+ <s:TabBar id="navBar" selectedIndex="0" change="onTabChange()">
+ <s:tabs>
+ <s:Tab text="Toggle" />
+ <s:Tab text="Tabs" />
+ <s:Tab text="Card" />
+ <s:Tab text="Dropdown" />
+ <s:Tab text="Modal" />
+ <s:Tab text="Pagination" />
+ </s:tabs>
+ </s:TabBar>
+
+ <!-- Toggle Section -->
+ <s:FlexContainer id="toggleSection" gap="1rem" vertical="true">
+ <s:Toggle label="Enable notifications" />
+ <s:Toggle label="Dark mode" checked="true" />
+ <s:Toggle label="Disabled off" disabled="true" />
+ <s:Toggle label="Disabled on" checked="true" disabled="true" />
+ </s:FlexContainer>
+
+ <!-- Tabs Section -->
+ <s:FlexContainer id="tabsSection" visible="false" gap="2rem"
vertical="true">
+ <s:TabBar selectedIndex="1">
+ <s:tabs>
+ <s:Tab text="Home" />
+ <s:Tab text="Profile" />
+ <s:Tab text="Settings" />
+ </s:tabs>
+ </s:TabBar>
+ <s:TabBar selectedIndex="0">
+ <s:tabs>
+ <s:Tab text="Active" />
+ <s:Tab text="Disabled" disabled="true" />
+ <s:Tab text="Another" />
+ </s:tabs>
+ </s:TabBar>
+ </s:FlexContainer>
+
+ <!-- Card Section -->
+ <s:FlexContainer id="cardSection" visible="false" gap="24"
vertical="true">
+ <s:Card width="384">
+ <s:CardBody>
+ <s:CardTitle text="Default Card" />
+ <e:Div text="A card component has a figure, a body part,
and inside body there are title and actions parts." />
+ <s:CardActions>
+ <e:Div text="Buy Now" />
+ </s:CardActions>
+ </s:CardBody>
+ </s:Card>
+ <s:Card width="384" variant="border">
+ <s:CardBody>
+ <s:CardTitle text="Border Card" />
+ <e:Div text="This card uses a border instead of a shadow."
/>
+ <s:CardActions>
+ <e:Div text="Action" />
+ </s:CardActions>
+ </s:CardBody>
+ </s:Card>
+ <s:Card width="384" variant="dash">
+ <s:CardBody>
+ <s:CardTitle text="Dash Border Card" />
+ <e:Div text="This card uses a dashed border style." />
+ <s:CardActions>
+ <e:Div text="Action" />
+ </s:CardActions>
+ </s:CardBody>
+ </s:Card>
+ </s:FlexContainer>
+
+ <!-- Dropdown Section -->
+ <s:FlexContainer id="dropdownSection" visible="false" gap="1rem">
+ <s:Dropdown triggerText="Click me">
+ <e:Div text="Option 1" />
+ <e:Div text="Option 2" />
+ <e:Div text="Option 3" />
+ </s:Dropdown>
+ <s:Dropdown triggerText="Always open" open="true">
+ <e:Div text="Item A" />
+ <e:Div text="Item B" />
+ </s:Dropdown>
+ <s:Dropdown triggerText="Disabled" disabled="true">
+ <e:Div text="Unreachable" />
+ </s:Dropdown>
+ </s:FlexContainer>
+
+ <!-- Modal Section -->
+ <s:FlexContainer id="modalSection" visible="false" gap="24"
vertical="true">
+ <e:Div text="Open Basic Modal" click="openModal('basicModal')" />
+ <e:Div text="Open Easy Dismiss Modal"
click="openModal('easyModal')" />
+ <e:Div text="Open Modal with Actions"
click="openModal('actionsModal')" />
+
+ <s:Modal id="basicModal">
+ <s:ModalBody>
+ <s:ModalTitle text="Hello!" />
+ <e:Div text="Press ESC key or click the button below to
close." />
+ </s:ModalBody>
+ <s:ModalActions>
+ <e:Div text="Close" click="basicModal.open = false" />
+ </s:ModalActions>
+ </s:Modal>
+ <s:Modal id="easyModal" easyDismiss="true">
+ <s:ModalBody>
+ <s:ModalTitle text="Easy Dismiss" />
+ <e:Div text="Click outside this dialog or press ESC to
close." />
+ </s:ModalBody>
+ </s:Modal>
+ <s:Modal id="actionsModal">
+ <s:ModalBody>
+ <s:ModalTitle text="Confirm Action" />
+ <e:Div text="Are you sure you want to proceed?" />
+ </s:ModalBody>
+ <s:ModalActions>
+ <e:Div text="Cancel" click="actionsModal.open = false" />
+ <e:Div text="Confirm" click="actionsModal.open = false" />
+ </s:ModalActions>
+ </s:Modal>
+ </s:FlexContainer>
+
+ <!-- Pagination Section -->
+ <s:FlexContainer id="paginationSection" visible="false" gap="24"
vertical="true">
+ <s:styleBeads>
+ <s:AlignItems value="flex-start" />
+ </s:styleBeads>
+
+ <s:Pagination>
+ <s:PaginationItem text="1" />
+ <s:PaginationItem text="2" />
+ <s:PaginationItem text="3" selected="true" />
+ <s:PaginationItem text="4" />
+ </s:Pagination>
+ <s:Pagination>
+ <s:PaginationItem text="Prev" selectable="false" />
+ <s:PaginationItem text="1" selected="true" />
+ <s:PaginationItem text="2" />
+ <s:PaginationItem text="3" />
+ <s:PaginationItem text="Next" selectable="false" />
+ </s:Pagination>
+ <s:Pagination>
+ <s:PaginationItem text="Prev" disabled="true"
selectable="false" />
+ <s:PaginationItem text="1" selected="true" />
+ <s:PaginationItem text="2" />
+ <s:PaginationItem text="…" disabled="true" selectable="false"
/>
+ <s:PaginationItem text="99" />
+ <s:PaginationItem text="100" />
+ <s:PaginationItem text="Next" selectable="false" />
+ </s:Pagination>
+ </s:FlexContainer>
+
+ </s:FlexContainer>
+ </s:View>
+ </s:initialView>
+
+</s:Application>
diff --git a/frameworks/projects/Style/src/main/resources/style-manifest.xml
b/frameworks/projects/Style/src/main/resources/style-manifest.xml
index 1f5a60a709..afc610ae5f 100644
--- a/frameworks/projects/Style/src/main/resources/style-manifest.xml
+++ b/frameworks/projects/Style/src/main/resources/style-manifest.xml
@@ -293,6 +293,11 @@
<component id="CardTitleSkin"
class="org.apache.royale.style.skins.CardTitleSkin"/>
<component id="CardActionsSkin"
class="org.apache.royale.style.skins.CardActionsSkin"/>
<component id="ToggleSkin" class="org.apache.royale.style.skins.ToggleSkin"/>
+ <component id="DropdownSkin"
class="org.apache.royale.style.skins.DropdownSkin"/>
+ <component id="ModalSkin" class="org.apache.royale.style.skins.ModalSkin"/>
+ <component id="ModalBodySkin"
class="org.apache.royale.style.skins.ModalBodySkin"/>
+ <component id="ModalTitleSkin"
class="org.apache.royale.style.skins.ModalTitleSkin"/>
+ <component id="ModalActionsSkin"
class="org.apache.royale.style.skins.ModalActionsSkin"/>
<component id="PaginationSkin"
class="org.apache.royale.style.skins.PaginationSkin"/>
<component id="PaginationItemSkin"
class="org.apache.royale.style.skins.PaginationItemSkin"/>
diff --git
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/skins/TabBarSkin.as
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/skins/TabBarSkin.as
index 9ffea098bc..f9dd1a4dc0 100644
---
a/frameworks/projects/Style/src/main/royale/org/apache/royale/style/skins/TabBarSkin.as
+++
b/frameworks/projects/Style/src/main/royale/org/apache/royale/style/skins/TabBarSkin.as
@@ -65,7 +65,7 @@ package org.apache.royale.style.skins
_styles = [
new Display("flex"),
- new AlignItems("end"),
+ new AlignItems("flex-end"),
new FlexWrap("wrap"),
borderWidth,
border