import { OjWebElement } from '../';

/**
 * This is the base class for oj-timeline WebElement, and is generated from the
 * component's metadata. Do not modify these contents since they'll be replaced
 * during the next generation.
 * Put overrides into the WebElements's subclass, OjTimeline.ts.
 */
export class OjTimelineBase extends OjWebElement {
  /**
   * Gets the value of <code>animationOnDataChange</code> property.
   * Specifies the animation that is applied on data changes.
   * @return The value of <code>animationOnDataChange</code> property.
   *
   */
  public getAnimationOnDataChange(): Promise<string> {
    return this.getProperty<string>('animationOnDataChange');
  }

  /**
   * Gets the value of <code>animationOnDisplay</code> property.
   * Specifies the animation that is shown on initial display.
   * @return The value of <code>animationOnDisplay</code> property.
   *
   */
  public getAnimationOnDisplay(): Promise<string> {
    return this.getProperty<string>('animationOnDisplay');
  }

  /**
   * Gets the value of <code>dnd</code> property.
   * Enables drag and drop functionality.
   * @return The value of <code>dnd</code> property.
   *
   */
  public getDnd(): Promise<Dnd> {
    return this.getProperty<Dnd>('dnd');
  }

  /**
   * Gets the value of <code>end</code> property.
   * The end time of the timeline. See the Help documentation for more information.
   * @return The value of <code>end</code> property.
   *
   */
  public getEnd(): Promise<string> {
    return this.getProperty<string>('end');
  }

  /**
   * Gets the value of <code>itemDefaults</code> property.
   * Specifies default properties for items in the Timeline.
   * @return The value of <code>itemDefaults</code> property.
   *
   */
  public getItemDefaults(): Promise<ItemDefaults> {
    return this.getProperty<ItemDefaults>('itemDefaults');
  }

  /**
   * Gets the value of <code>majorAxis</code> property.
   * An object defining the optional timeline major axis.
   * @return The value of <code>majorAxis</code> property.
   *
   */
  public getMajorAxis(): Promise<MajorAxis> {
    return this.getProperty<MajorAxis>('majorAxis');
  }

  /**
   * Gets the value of <code>minorAxis</code> property.
   * An object defining the timeline minor axis.
   * @return The value of <code>minorAxis</code> property.
   *
   */
  public getMinorAxis(): Promise<MinorAxis> {
    return this.getProperty<MinorAxis>('minorAxis');
  }

  /**
   * Gets the value of <code>orientation</code> property.
   * The orientation of the element.
   * @return The value of <code>orientation</code> property.
   *
   */
  public getOrientation(): Promise<string> {
    return this.getProperty<string>('orientation');
  }

  /**
   * Gets the value of <code>overview</code> property.
   * An object defining the optional timeline overview.
   * @return The value of <code>overview</code> property.
   *
   */
  public getOverview(): Promise<Overview> {
    return this.getProperty<Overview>('overview');
  }

  /**
   * Gets the value of <code>referenceObjects</code> property.
   * The array of reference objects associated with the timeline. See the Help documentation for more information.
   * @return The value of <code>referenceObjects</code> property.
   *
   */
  public getReferenceObjects(): Promise<Array<ReferenceObjects>> {
    return this.getProperty<Array<ReferenceObjects>>('referenceObjects');
  }

  /**
   * Sets the value of <code>selection</code> property.
   * An array of strings containing the ids of the initially selected items.
   * @param selection The value to set for <code>selection</code>
   *
   */
  public changeSelection(selection: Array<any>): Promise<void> {
    return this.setProperty<Array<any>>('selection', selection);
  }

  /**
   * Gets the value of <code>selection</code> property.
   * An array of strings containing the ids of the initially selected items.
   * @return The value of <code>selection</code> property.
   *
   */
  public getSelection(): Promise<Array<any>> {
    return this.getProperty<Array<any>>('selection');
  }

  /**
   * Gets the value of <code>selectionMode</code> property.
   * Specifies the selection mode.
   * @return The value of <code>selectionMode</code> property.
   *
   */
  public getSelectionMode(): Promise<string> {
    return this.getProperty<string>('selectionMode');
  }

  /**
   * Gets the value of <code>series</code> property.
   * An array of objects defining each timeline series. Also accepts a Promise for deferred data rendering.
   * @return The value of <code>series</code> property.
   *
   */
  public getSeries(): Promise<Array<Series> | null> {
    return this.getProperty<Array<Series> | null>('series');
  }

  /**
   * Gets the value of <code>start</code> property.
   * The start time of the timeline. See the Help documentation for more information.
   * @return The value of <code>start</code> property.
   *
   */
  public getStart(): Promise<string> {
    return this.getProperty<string>('start');
  }

  /**
   * Gets the value of <code>styleDefaults</code> property.
   * An object defining the default styling for this timeline.
   * @return The value of <code>styleDefaults</code> property.
   *
   */
  public getStyleDefaults(): Promise<StyleDefaults> {
    return this.getProperty<StyleDefaults>('styleDefaults');
  }

  /**
   * Gets the value of <code>tooltip</code> property.
   * An object containing an optional callback function for tooltip customization.
   * @return The value of <code>tooltip</code> property.
   *
   */
  public getTooltip(): Promise<Tooltip> {
    return this.getProperty<Tooltip>('tooltip');
  }

  /**
   * Gets the value of <code>trackResize</code> property.
   * Defines whether the element will automatically render in response to changes in size. See the Help documentation for more information.
   * @return The value of <code>trackResize</code> property.
   *
   */
  public getTrackResize(): Promise<string> {
    return this.getProperty<string>('trackResize');
  }

  /**
   * Gets the value of <code>translations</code> property.
   * A collection of translated resources from the translation bundle, or null if this component has no resources.
   * @return The value of <code>translations</code> property.
   *
   */
  public getTranslations(): Promise<Translations | null> {
    return this.getProperty<Translations | null>('translations');
  }

  /**
   * Gets the value of <code>valueFormats</code> property.
   * An object specifying value formatting and tooltip behavior, whose keys generally correspond to item properties.
   * @return The value of <code>valueFormats</code> property.
   *
   */
  public getValueFormats(): Promise<ValueFormats> {
    return this.getProperty<ValueFormats>('valueFormats');
  }

  /**
   * Gets the value of <code>viewportEnd</code> property.
   * The end time of the timeline's viewport. See the Help documentation for more information.
   * @return The value of <code>viewportEnd</code> property.
   *
   */
  public getViewportEnd(): Promise<string> {
    return this.getProperty<string>('viewportEnd');
  }

  /**
   * Gets the value of <code>viewportNavigationMode</code> property.
   * The viewport navigation mode of the timeline.
   * @return The value of <code>viewportNavigationMode</code> property.
   *
   */
  public getViewportNavigationMode(): Promise<string> {
    return this.getProperty<string>('viewportNavigationMode');
  }

  /**
   * Gets the value of <code>viewportStart</code> property.
   * The start time of the timeline's viewport. See the Help documentation for more information.
   * @return The value of <code>viewportStart</code> property.
   *
   */
  public getViewportStart(): Promise<string> {
    return this.getProperty<string>('viewportStart');
  }
}
export interface Dnd {
  /**
   * Defines a subset of high level configurations for moving elements to another location within the timeline.
   */
  move: DndMove;
}
export interface DndMove {
  /**
   * Enable or disable moving items to a different location within the same timeline series.
   */
  items: string;
}
export interface ItemDefaults {
  /**
   * Hide or show item feelers
   */
  feelers: string;
  /**
   * Enable or disable resizing of items
   */
  resizable: string;
}
export interface MajorAxis {
  /**
   * An object that converts the labels of the major axis for all 'scale' values'. See the Help documentation for more information.
   */
  converter: MajorAxisConverter;
  /**
   * Specifies the time scale used for the major axis.
   */
  scale: string;
  /**
   * The CSS style object defining any additional styling of the major axis.
   */
  svgStyle: object;
}
export interface MajorAxisConverter {
  /**
   * A converter (an instance that duck types Converter) used to format the 'days' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  days: object;
  /**
   * The default converter (an object literal or instance that duck types Converter) to use for all 'scale' values that do not otherwise have a converter object provided. See also DateTimeConverter.
   */
  default: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'hours' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  hours: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'minutes' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  minutes: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'months' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  months: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'quarters' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  quarters: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'seconds' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  seconds: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'weeks' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  weeks: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'years' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  years: object;
}
export interface MinorAxis {
  /**
   * An object that converts the labels of the minor axis for all 'scale' values. See the Help documentation for more information.
   */
  converter: MinorAxisConverter;
  /**
   * Specifies the time scale used for the minor axis.
   */
  scale: string;
  /**
   * The CSS style object defining any additional styling of the minor axis.
   */
  svgStyle: object;
  /**
   * An array of scales used for zooming. See the Help documentation for more information.
   */
  zoomOrder: Array<string | unknown>;
}
export interface MinorAxisConverter {
  /**
   * A converter (an instance that duck types Converter) used to format the 'days' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  days: object;
  /**
   * The default converter (an object literal or instance that duck types Converter) to use for all 'scale' values that do not otherwise have a converter object provided. See also DateTimeConverter.
   */
  default: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'hours' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  hours: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'minutes' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  minutes: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'months' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  months: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'quarters' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  quarters: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'seconds' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  seconds: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'weeks' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  weeks: object;
  /**
   * A converter (an instance that duck types Converter) used to format the 'years' scale. If not specified, the default converter will be used for this scale. See also DateTimeConverter.
   */
  years: object;
}
export interface Overview {
  /**
   * Specifies whether the overview scrollbar is rendered.
   */
  rendered: string;
  /**
   * The CSS style object defining any additional styling of the overview.
   */
  svgStyle: object;
}
export interface ReferenceObjects {
  /**
   * The label value of this reference object. If not specified, no reference object label will be shown.
   */
  label: string;
  /**
   * The time value of this reference object. If not specified, no reference object will be shown. See Date and Time Formats for more details on the required string formats.
   */
  value: string;
}
export interface Series {
  /**
   * The text of an empty timeline series.
   */
  emptyText: string;
  /**
   * The identifier for the timeline series.
   */
  id: string;
  /**
   * The direction in which items are laid out when in a horizontal orientation. This attribute is ignored when in a vertical orientation.
   */
  itemLayout: string;
  /**
   * An array of items. If not specified, no data will be shown in this series.
   */
  items: Array<object>;
  /**
   * The label displayed on the timeline series. In not specified, no label will be shown.
   */
  label: string;
  /**
   * The CSS style object defining any additional styling of the series. If not specified, no additional styling will be applied. Only SVG CSS style properties are supported.
   */
  svgStyle: object;
}
export interface StyleDefaults {
  /**
   * The duration of the animations in milliseconds.
   */
  animationDuration: number;
  /**
   * The border color of the timeline.
   */
  borderColor: string;
  /**
   * An object defining the default styling for this timeline's items.
   */
  item: StyleDefaultsItem;
  /**
   * An object defining the default styling for this timeline's major axis.
   */
  majorAxis: StyleDefaultsMajorAxis;
  /**
   * An object defining the default styling for this timeline's minor axis.
   */
  minorAxis: StyleDefaultsMinorAxis;
  /**
   * An object defining the default styling for this timeline's overview.
   */
  overview: StyleDefaultsOverview;
  /**
   * An object defining the default styling for this timeline's reference objects.
   */
  referenceObject: StyleDefaultsReferenceObject;
  /**
   * An object defining the default styling for this timeline's series.
   */
  series: StyleDefaultsSeries;
}
export interface StyleDefaultsItem {
  /**
   * The background color of the timeline items.
   */
  backgroundColor: string;
  /**
   * The border color of the timeline items.
   */
  borderColor: string;
  /**
   * The CSS style object defining the style of the timeline item description text.
   */
  descriptionStyle: object;
  /**
   * The background color of the highlighted timeline items.
   */
  hoverBackgroundColor: string;
  /**
   * The border color of the highlighted timeline items.
   */
  hoverBorderColor: string;
  /**
   * The background color of the selected timeline items.
   */
  selectedBackgroundColor: string;
  /**
   * The border color of the selected timeline items.
   */
  selectedBorderColor: string;
  /**
   * The CSS style object defining the style of the timeline item title text.
   */
  titleStyle: object;
}
export interface StyleDefaultsMajorAxis {
  /**
   * The CSS style object defining the style of the major axis label text.
   */
  labelStyle: object;
  /**
   * The color of the major axis separators.
   */
  separatorColor: string;
}
export interface StyleDefaultsMinorAxis {
  /**
   * The background color of the minor axis.
   */
  backgroundColor: string;
  /**
   * The border color of the minor axis.
   */
  borderColor: string;
  /**
   * The CSS style object defining the style of the minor axis label text.
   */
  labelStyle: object;
  /**
   * The color of the minor axis separators.
   */
  separatorColor: string;
}
export interface StyleDefaultsOverview {
  /**
   * The background color of the timeline overview.
   */
  backgroundColor: string;
  /**
   * The CSS style object defining the style of the timeline overview label text.
   */
  labelStyle: object;
  /**
   * An object defining the default styling for the timeline overview window.
   */
  window: StyleDefaultsOverviewWindow;
}
export interface StyleDefaultsOverviewWindow {
  /**
   * The background color of the timeline overview window.
   */
  backgroundColor: string;
  /**
   * The border color of the timeline overview window.
   */
  borderColor: string;
}
export interface StyleDefaultsReferenceObject {
  /**
   * The color of the reference objects.
   */
  color: string;
}
export interface StyleDefaultsSeries {
  /**
   * The background color of the series.
   */
  backgroundColor: string;
  /**
   * The array defining the default color ramp for the series items.
   */
  colors: Array<string>;
  /**
   * The CSS style object defining the style of the series empty text.
   */
  emptyTextStyle: object;
  /**
   * The CSS style object defining the style of the series label text.
   */
  labelStyle: object;
}
export interface Tooltip {}
export interface Translations {
  /**
   * Used to describe a container that contains controls.
   */
  accessibleContainsControls: string;
  /**
   * Provides properties to customize the screen reader text describing an item's description text.
   */
  accessibleItemDesc: string;
  /**
   * Provides properties to customize the screen reader text describing an item's end time.
   */
  accessibleItemEnd: string;
  /**
   * Provides properties to customize the screen reader text describing an item's start time.
   */
  accessibleItemStart: string;
  /**
   * Provides properties to customize the screen reader text describing an item's title text.
   */
  accessibleItemTitle: string;
  /**
   * Used to describe the data visualization type for accessibility.
   */
  componentName: string;
  /**
   * Used to indicate item move is cancelled for accessibility.
   */
  itemMoveCancelled: string;
  /**
   * Used to indicate item move is finalized for accessibility.
   */
  itemMoveFinalized: string;
  /**
   * Used to indicate item move is initiated for accessibility.
   */
  itemMoveInitiated: string;
  /**
   * Used to indicate item move instructions for accessibility.
   */
  itemMoveInitiatedInstruction: string;
  /**
   * Used to indicate whether other items are also selected during move.
   */
  itemMoveSelectionInfo: string;
  /**
   * Used to indicate item resize is cancelled for accessibility.
   */
  itemResizeCancelled: string;
  /**
   * Used to indicate item end resize handle for accessibility.
   * @deprecated Since 15.0.0. This resource is not used by oj-timeline.
   */
  itemResizeEndHandle: string;
  /**
   * Used to indicate item resize end is initiated for accessibility.
   */
  itemResizeEndInitiated: string;
  /**
   * Used to indicate item resize is finalized for accessibility.
   */
  itemResizeFinalized: string;
  /**
   * Used to indicate item resize instructions for accessibility.
   */
  itemResizeInitiatedInstruction: string;
  /**
   * Used to indicate whether other items are also selected during item resize.
   */
  itemResizeSelectionInfo: string;
  /**
   * Used to indicate item start resize handle for accessibility.
   * @deprecated Since 15.0.0. This resource is not used by oj-timeline.
   */
  itemResizeStartHandle: string;
  /**
   * Used to indicate item resize start is initiated for accessibility.
   */
  itemResizeStartInitiated: string;
  /**
   * Used for the discrete navigation mode next arrow aria-label.
   */
  labelAccNavNextPage: string;
  /**
   * Used for the discrete navigation mode previous arrow aria-label.
   */
  labelAccNavPreviousPage: string;
  /**
   * Used to display a label and its value.
   */
  labelAndValue: string;
  /**
   * Text shown for clearing multiple selection on touch devices.
   */
  labelClearSelection: string;
  /**
   * Used to display a count out of a total.
   * @deprecated Since 15.0.0. This resource is not used by oj-timeline.
   */
  labelCountWithTotal: string;
  /**
   * Label for data visualizations used for accessibility.
   */
  labelDataVisualization: string;
  /**
   * Used for the default tooltip label for instance item information.
   */
  labelDate: string;
  /**
   * Used for the default tooltip label for item description information.
   */
  labelDescription: string;
  /**
   * Used for the default tooltip label for end time information.
   */
  labelEnd: string;
  /**
   * Text shown when the component receives invalid data.
   */
  labelInvalidData: string;
  /**
   * Used for the default tooltip label for item move scale change.
   */
  labelMoveBy: string;
  /**
   * Text shown when the component receives no data.
   */
  labelNoData: string;
  /**
   * Used for the default tooltip label for item resize scale change.
   */
  labelResizeBy: string;
  /**
   * Used for accessibility.
   */
  labelSeries: string;
  /**
   * Used for the default tooltip label for start time information.
   */
  labelStart: string;
  /**
   * Used for the default tooltip label for item title information.
   */
  labelTitle: string;
  /**
   * Used for the discrete navigation mode arrow ariaLabel text when disabled.
   */
  navArrowDisabledState: string;
  /**
   * Used to describe the collapsed state for accessibility.
   * @deprecated Since 15.0.0. This resource is not used by oj-timeline.
   */
  stateCollapsed: string;
  /**
   * Used to describe a drillable object for accessibility.
   * @deprecated Since 15.0.0. This resource is not used by oj-timeline.
   */
  stateDrillable: string;
  /**
   * Used to describe the expanded state for accessibility.
   * @deprecated Since 15.0.0. This resource is not used by oj-timeline.
   */
  stateExpanded: string;
  /**
   * Used to describe the hidden state for accessibility.
   * @deprecated Since 15.0.0. This resource is not used by oj-timeline.
   */
  stateHidden: string;
  /**
   * Used to describe the isolated state for accessibility.
   * @deprecated Since 15.0.0. This resource is not used by oj-timeline.
   */
  stateIsolated: string;
  /**
   * Used to describe the maximized state for accessibility.
   * @deprecated Since 15.0.0. This resource is not used by oj-timeline.
   */
  stateMaximized: string;
  /**
   * Used to describe the minimized state for accessibility.
   * @deprecated Since 15.0.0. This resource is not used by oj-timeline.
   */
  stateMinimized: string;
  /**
   * Used to describe the selected state for accessibility.
   */
  stateSelected: string;
  /**
   * Used to describe the unselected state for accessibility.
   */
  stateUnselected: string;
  /**
   * Used to describe the visible state for accessibility.
   * @deprecated Since 15.0.0. This resource is not used by oj-timeline.
   */
  stateVisible: string;
  /**
   * Used for the discrete navigation mode next arrow alt text.
   * @deprecated Since 15.0.0. This resource is not used by oj-timeline.
   */
  tipArrowNextPage: string;
  /**
   * Used for the discrete navigation mode previous arrow alt text.
   * @deprecated Since 15.0.0. This resource is not used by oj-timeline.
   */
  tipArrowPreviousPage: string;
  /**
   * Used for the zoom in tooltip.
   */
  tooltipZoomIn: string;
  /**
   * Used for the zoom out tooltip.
   */
  tooltipZoomOut: string;
}
export interface ValueFormats {
  /**
   * Specifies tooltip behavior for the date value of an instance item.
   */
  date: ValueFormatsDate;
  /**
   * Specifies tooltip behavior for the description value.
   */
  description: ValueFormatsDescription;
  /**
   * Specifies tooltip behavior for the end value.
   */
  end: ValueFormatsEnd;
  /**
   * Specifies tooltip behavior for the series value.
   */
  series: ValueFormatsSeries;
  /**
   * Specifies tooltip behavior for the start value.
   */
  start: ValueFormatsStart;
  /**
   * Specifies tooltip behavior for the title value.
   */
  title: ValueFormatsTitle;
}
export interface ValueFormatsDate {
  /**
   * The converter used to format the label. See the Help documentation for more information.
   */
  converter: object;
  /**
   * Specifies whether the date value is displayed in the tooltip.
   */
  tooltipDisplay: string;
  /**
   * A string representing the label that is displayed before the date value in the tooltip. See the Help documentation for more information.
   */
  tooltipLabel: string;
}
export interface ValueFormatsDescription {
  /**
   * Specifies whether the description value is displayed in the tooltip.
   */
  tooltipDisplay: string;
  /**
   * A string representing the label that is displayed before the description value in the tooltip. See the Help documentation for more information.
   */
  tooltipLabel: string;
}
export interface ValueFormatsEnd {
  /**
   * The converter used to format the label. See the Help documentation for more information.
   */
  converter: object;
  /**
   * Specifies whether the end value is displayed in the tooltip.
   */
  tooltipDisplay: string;
  /**
   * A string representing the label that is displayed before the end value in the tooltip. See the Help documentation for more information.
   */
  tooltipLabel: string;
}
export interface ValueFormatsSeries {
  /**
   * Specifies whether the series value is displayed in the tooltip.
   */
  tooltipDisplay: string;
  /**
   * A string representing the label that is displayed before the series value in the tooltip. See the Help documentation for more information.
   */
  tooltipLabel: string;
}
export interface ValueFormatsStart {
  /**
   * The converter used to format the label. See the Help documentation for more information.
   */
  converter: object;
  /**
   * Specifies whether the start value is displayed in the tooltip.
   */
  tooltipDisplay: string;
  /**
   * A string representing the label that is displayed before the start value in the tooltip. See the Help documentation for more information.
   */
  tooltipLabel: string;
}
export interface ValueFormatsTitle {
  /**
   * Specifies whether the title value is displayed in the tooltip.
   */
  tooltipDisplay: string;
  /**
   * A string representing the label that is displayed before the title value in the tooltip. See the Help documentation for more information.
   */
  tooltipLabel: string;
}
