import { ApplySchemaAttributes } from '@remirror/core';
import { CommandFunction } from '@remirror/core';
import { IdentifierSchemaAttributes } from '@remirror/core';
import { LiteralUnion } from '@remirror/core';
import { NodeExtension } from '@remirror/core';
import { NodeExtensionSpec } from '@remirror/core';
import { NodeSpecOverride } from '@remirror/core';
import { PrimitiveSelection } from '@remirror/core';
import { ProsemirrorAttributes } from '@remirror/core';
import { Static } from '@remirror/core';

declare interface BaseColumnAttributes {
    /**
     * Specifies the number of columns an element should be divided into.
     *
     * @defaultValue 2
     */
    count?: number;
    /**
     * Specifies how to fill columns.
     *
     * @defaultValue 'auto'
     */
    fill?: 'balance' | 'auto';
    /**
     * Specifies the gap between the columns.
     *
     * @defaultValue 'inherit'
     */
    gap?: string;
    /**
     * Specifies the color of the rule between columns.
     *
     * @defaultValue 'transparent'
     */
    ruleColor?: string;
    /**
     * Specifies the style of the rule between columns.
     *
     * @defaultValue 'none'
     */
    ruleStyle?: 'none' | 'hidden' | 'dotted' | 'dashed' | 'solid' | 'double' | 'groove' | 'ridge' | 'inset' | 'outset';
    /**
     * Specifies the width of the rule between columns.
     *
     * @defaultValue 'inherit'
     */
    ruleWidth?: LiteralUnion<'medium' | 'thin' | 'thick', string>;
    /**
     * Specifies a suggested, optimal width for the columns.
     *
     * @defaultValue 'inherit'
     */
    width?: string;
}
export { BaseColumnAttributes }
export { BaseColumnAttributes as BaseColumnAttributes_alias_1 }

declare type ColumnAttributes = ProsemirrorAttributes<BaseColumnAttributes>;
export { ColumnAttributes }
export { ColumnAttributes as ColumnAttributes_alias_1 }

/**
 * Add column support to the nodes in your editor.
 */
declare class ColumnsExtension extends NodeExtension<ColumnsOptions> {
    get name(): "columns";
    createTags(): "block"[];
    createNodeSpec(extra: ApplySchemaAttributes, override: NodeSpecOverride): NodeExtensionSpec;
    /**
     * Add a column span attribute to all block nodes within the editor.
     */
    createSchemaAttributes(): IdentifierSchemaAttributes[];
    /**
     * Toggle a column wrap around the content.
     */
    toggleColumns(attrs?: ColumnAttributes, options?: ToggleColumnsOptions): CommandFunction;
}
export { ColumnsExtension }
export { ColumnsExtension as ColumnsExtension_alias_1 }

declare interface ColumnsOptions {
    /**
     * The default columns to use for created columns.
     *
     * @defaultValue `DEFAULT_COLUMN_ATTRIBUTES`
     */
    defaults?: Static<Required<BaseColumnAttributes>>;
}
export { ColumnsOptions }
export { ColumnsOptions as ColumnsOptions_alias_1 }

declare const DEFAULT_COLUMN_ATTRIBUTES: Required<BaseColumnAttributes>;
export { DEFAULT_COLUMN_ATTRIBUTES }
export { DEFAULT_COLUMN_ATTRIBUTES as DEFAULT_COLUMN_ATTRIBUTES_alias_1 }

declare interface ToggleColumnsOptions {
    selection?: PrimitiveSelection;
}

declare const toggleColumnsOptions: Remirror.CommandDecoratorOptions;
export { toggleColumnsOptions }
export { toggleColumnsOptions as toggleColumnsOptions_alias_1 }

export { }

declare global {
  namespace Remirror {
    interface Attributes {
      /**
       * The number of columns that a node should span across. This only comes
       * into effect if the block node is within a column node.
       */
      columnSpan?: 'none' | 'all';
    }

    interface AllExtensions {
      columns: ColumnsExtension;
    }
  }
}
