﻿// @flow
import RuleList from './RuleList'
import type {
  InternalStyleSheetOptions,
  Rule,
  ToCssOptions,
  RuleOptions,
  StyleSheetOptions,
  JssStyle,
  Classes,
  KeyframesMap,
  JssStyles,
  Renderer,
  UpdateArguments,
  UpdateOptions
} from './flow-types'

declare export default class StyleSheet {
  options: InternalStyleSheetOptions;
  deployed: boolean;
  attached: boolean;
  rules: RuleList;
  renderer?: Renderer;
  classes: Classes;
  keyframes: KeyframesMap;
  queue?: Array<Rule>;
  constructor(styles: JssStyles, options: StyleSheetOptions): this;
  attach(): this;
  detach(): this;
  addRule(name: string, decl: JssStyle, options?: RuleOptions): Rule | null;
  replaceRule(name: string, decl: JssStyle, options?: RuleOptions): Rule | null;
  insertRule(rule: Rule): void;
  addRules(styles: JssStyles, options?: RuleOptions): Array<Rule>;
  getRule(nameOrSelector: string): Rule;
  deleteRule(name: string | Rule): boolean;
  indexOf(rule: Rule): number;
  deploy(): this;
  update(...args: UpdateArguments): this;
  updateOne(rule: Rule, data: Object, options?: UpdateOptions): this;
  toString(options?: ToCssOptions): string;
}
