Hi,

you have various strategies you can follow in order to style you themes and
components.

The first thing to notice is unlike Basic, Jewel brings from structure to
each component when needed. For example, a CheckBox in Basic is just an
input with type="checkbox", while in Jewel is a label with 2 childs tags:
input and span. Most of the time structure is needed to get some actual
look and feel.

Next, all components use to have a bead default configuration that is
created in Jewel library and based on the jewel namespace and the name of
the component (j|CheckBox), and CSS styles.

CSS Styles are of two kinds:

a.- Structure: Are the styles use to be needed most of the time and will
not change from one theme to another. Those are found in Jewel library,
since are considered "not part of a theme". Examples of this styles are:
display: flex, user-select: none, position: relative, zoom: 1,...
b.- Look and feel: Are styles in charge of bring colors, font-faces, font
sizes and styles, borders, backgrounds, gradients, round corners...all this
styles are in themes, and is the ones you need to target.

Notice that no matter the style from a or b, you always can override it
thanks to royale compiler taking precedence of your project.

About themes like "Jewel-Light-NoFlat-Primary-Blue-Theme". This are
predefined themes for people that does not want to make anything on this
regard. So they just can use a combination of 3 (primary, secondary and
emphasized). Jewel will bring 144 themes to get the different combinations
between 12 colors, flat/noflat, light/dark options. So while this kind of
themes can be override, they are not designed for that, since are
precompiled CSS just for final use.

To change all components look and feel: you can create your own theme. To
do this you should duplicate JewelTheme and configure it in your project
and start changing things to match how you want your look and feel.

If you just want to change some components, you can just modify in your
project the same as I did when doing TodoMVC example. In TodoMVC you can
see how I override the styles of some jewel components like Button,
ToggleButton, CheckBox and List to name some.

Aditionally you can use natural overriding mechanisms of CSS by creating a
style that depends on a Jewel style. For example, if I just want to change
a concrete button I can add a style like this:
.jewel.button.mystyle{
border: 1px solid red;
}
then <j:Button className="mystyle"/>

So you can have styles changed for all buttons, and changed for concrete
ones.

About future changes of styles. I can guarantee Jewel styles will freeze.
I'll try to make it as stable as possible over time but there's some plans
for the next months to make this possible.

For example, few weeks ago, I change how list item renderers highlight or
select, to avoid :hover pseudo elements, that was needed to get DataGrid
hover working for a complete row where mouse cursor are not physically over
the renderer. So the only thing I can recommend is to be connected to the
project and check what changes we are doing in this area and update your
project accordingly.

I can list here some of the things I expect to change styles in the future:

* "SizeControl" bead and "FontIcon" sizes, where setup many months ago to
show different sizes, but needs to give more options and be synchronized.
* "Card": right now is like a flex "Panel" but will need to have more
things like CardFooter or CardTitle (names are nothing final), probably
main color will be white instead of grey
* "FormItem": the actual layout does not seems to be the most general

Themes are implemented right now for Light and Flat/NoFlat, but I still
need to go over Dark themes (and Flat/NoFlat)

I think is not too much, other things that will change will be due to the
needs or improvements that are required.

HTH

Carlos


El mar., 11 feb. 2020 a las 11:10, Maria Jose Esteve (<mjest...@iest.com>)
escribió:

> Hi,
> In order to have an overview of the style structure, we have done some
> tests with SASS and Jewel.
>
> The structure we have identified consists of 3 parts, in order of
> dependence is as follows:
>
> - In the Jewel project of the Apache Royale framework, you will find the
> .sass classes of the Jewel components, here you define the basic aspects of
> each one.
> - In the Themes folder of the Royale framework, we find the JewelTheme
> project, in this project the default appearance of the Jewel components is
> defined according to their type (Primary, secondary or Emphasized)
> - On the same route, we find different projects that define a particular
> style for a specific type, for example:
> Jewel-Light-NoFlat-Primary-Blue-Theme.
>
> We were able to create a new style, "xxx-Primary-Theme", which depends on
> the JewelTheme library (which in turn depends on the .sass of the Jewel
> library)
>
> We have also been able to add a copy of Jewel Theme to the structure of
> our project, as indicated in [1]
>
> Up to this point, we have been able to compile and use our own styles.
>
> The problem we have arises when we need to modify the general appearance
> of a component (located in the SASS folder of the Jewel library)
>
> For example, we need to modify the default padding of the Button element.
> What would be the correct way to make this modification?
>
> We would need a solution that would allow us to modify our style, without
> losing the code updates that are continuously carried out in the SDK.
>
> [1]
> https://apache.github.io/royale-docs/component-sets/jewel/theme-creation
>
> thanks for everything.
>
> Hiedra.
>


-- 
Carlos Rovira
http://about.me/carlosrovira

Reply via email to