﻿// @flow
import type {Plugin, Rule, RuleOptions, UpdateOptions, JssStyle, JssValue} from './flow-types'
import type StyleSheet from './StyleSheet'
import type {StyleRule, BaseStyleRule} from './plugins/styleRule'

declare export default class PluginsRegistry {
  use(newPlugin: Plugin, options?: {queue: 'internal' | 'external'}): void;
  onCreateRule(name: string, decl: JssStyle, options: RuleOptions): Rule | null;
  onProcessRule(rule: Rule): void;
  onProcessSheet(sheet: StyleSheet): void;
  onChangeValue(value: JssValue, prop: string, rule: StyleRule | BaseStyleRule): JssValue;
  onProcessStyle(style: JssStyle, rule: Rule, sheet?: StyleSheet): void;
  onUpdate(data: Object, rule: Rule, sheet?: StyleSheet, options: UpdateOptions): void;
}
