namespace EE::UI::CSS

namespace CSS {

// typedefs

typedef UnorderedMap<std::string, AnimationDefinition> AnimationsMap;
typedef std::function<Drawable*(const FunctionString&functionType, const Sizef&size, bool&ownIt, UINode*node)> DrawableImageParserFunc;
typedef std::map<std::string, KeyframesDefinition> KeyframesDefinitionMap;
typedef std::function<std::vector<StyleSheetProperty> const ShorthandDefinition*shorthand, std::string value)> ShorthandParserFunc;
typedef UnorderedMap<Uint32, StyleSheetProperty> StyleSheetProperties;
typedef std::function<bool(const UIWidget*node, int a, int b, const FunctionString&data)> StyleSheetNodeSelector;
typedef std::vector<StyleSheetStyle*> StyleSheetStyleVector;
typedef UnorderedMap<Uint32, StyleSheetVariable> StyleSheetVariables;
typedef UnorderedMap<std::string, TransitionDefinition> TransitionsMap;

// enums

enum AnimationOrigin;
enum AtRuleType;
enum MediaFeature;
enum MediaOrientation;
enum MediaType;
enum PropertyId;
enum PropertyRelativeTarget;
enum PropertyType;
enum ShorthandId;

// structs

struct MediaFeatures;
struct MediaQueryExpression;
struct StructuralSelector;
struct VariableFunctionCache;

// classes

class AnimationDefinition;
class DrawableImageParser;
class ElementDefinition;
class KeyframesDefinition;
class MediaQuery;
class MediaQueryList;
class PropertyDefinition;
class PropertyIdSet;
class PropertyIdSetIterator;
class PropertySpecification;
class ShorthandDefinition;
class StyleSheet;
class StyleSheetLength;
class StyleSheetParser;
class StyleSheetPropertiesParser;
class StyleSheetProperty;
class StyleSheetPropertyAnimation;
class StyleSheetSelector;
class StyleSheetSelectorParser;
class StyleSheetSelectorRule;
class StyleSheetSpecification;
class StyleSheetStyle;
class StyleSheetVariable;
class TimingFunction;
class TransitionDefinition;

// global functions

bool operator==(const AnimationDefinition& a, const AnimationDefinition& b);
bool operator!=(const AnimationDefinition& a, const AnimationDefinition& b);

} // namespace CSS