@Documented
@Retention(value=RUNTIME)
@Target(value=TYPE)
public static @interface CssResource.Shared
This is an example of "stateful" class selectors being used:
@Shared
interface FocusCss extends CssResource {
String focused();
String unfocused();
}
interface PanelCss extends CssResource, FocusCss {
String widget();
}
interface InputCss extends CssResource, FocusCss {
String widget();
}
input.css:
*.focused .widget {border: thin solid blue;}
Application.java:
myPanel.add(myInputWidget);
myPanel.addStyleName(instanceOfPanelCss.focused());
Because the FocusCss interface is tagged with @Shared,
the focused() method on the instance of PanelCss
will match the .focused parent selector in
input.css.
The effect of inheriting an Shared interface can be replicated by
use use of the CssResource.Import annotation (e.g. .FocusCss-focused
.widget), however the use of state-bearing descendant selectors is common
enough to warrant an easier use-case.