/*
 * Copyright (C) 2007-2022 Crafter Software Corporation. All Rights Reserved.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3 as published by
 * the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/// <reference types="ace" />
import React from 'react';
import { CSSObject as CSSProperties } from 'tss-react';
export interface AceOptions {
  selectionStyle: 'line' | 'text';
  highlightActiveLine: boolean;
  highlightSelectedWord: boolean;
  readOnly: boolean;
  cursorStyle: 'ace' | 'slim' | 'smooth' | 'wide';
  mergeUndoDeltas: false | true | 'always';
  behavioursEnabled: boolean;
  wrapBehavioursEnabled: boolean;
  autoScrollEditorIntoView: boolean;
  copyWithEmptySelection: boolean;
  useSoftTabs: boolean;
  navigateWithinSoftTabs: boolean;
  enableMultiselect: boolean;
  hScrollBarAlwaysVisible: boolean;
  vScrollBarAlwaysVisible: boolean;
  highlightGutterLine: boolean;
  animatedScroll: boolean;
  showInvisibles: boolean;
  showPrintMargin: boolean;
  printMarginColumn: number;
  printMargin: false | number;
  fadeFoldWidgets: boolean;
  showFoldWidgets: boolean;
  showLineNumbers: boolean;
  showGutter: boolean;
  displayIndentGuides: boolean;
  fontSize: number | string;
  fontFamily: string;
  maxLines: number;
  minLines: number;
  scrollPastEnd: number | boolean;
  fixedWidthGutter: boolean;
  theme: string;
  scrollSpeed: number;
  dragDelay: number;
  dragEnabled: boolean;
  focusTimout: number;
  tooltipFollowsMouse: boolean;
  firstLineNumber: number;
  overwrite: boolean;
  newLineMode: 'auto' | 'unix' | 'windows';
  useWorker: boolean;
  tabSize: number;
  wrap: boolean | number;
  foldStyle: 'markbegin' | 'markbeginend' | 'manual';
  mode: string;
  enableBasicAutocompletion: boolean;
  enableLiveAutocompletion: boolean;
  enableSnippets: boolean;
  enableEmmet: boolean;
  useElasticTabstops: boolean;
}
export type AceEditorClassKey = 'root' | 'editorRoot';
export type AceEditorStyles = Partial<Record<AceEditorClassKey, CSSProperties>>;
export interface AceEditorProps extends Partial<AceOptions> {
  value?: any;
  classes?: Partial<Record<AceEditorClassKey, string>>;
  autoFocus?: boolean;
  styles?: AceEditorStyles;
  extensions?: string[];
  onChange?(e: any): void;
  onInit?(editor: AceAjax.Editor): void;
}
declare global {
  interface Window {
    ace: AceAjax.Ace;
  }
}
export declare const AceEditor: React.ForwardRefExoticComponent<AceEditorProps & React.RefAttributes<AceAjax.Editor>>;
export default AceEditor;
