export type PaletteEntryAction = (event: Event, autoActivate: boolean) => any;

export type PaletteEntry = {
  action: Record<string, PaletteEntryAction> | PaletteEntryAction;
  className?: string;
  group?: string;
  html?: string;
  imageUrl?: string;
  separator?: boolean;
  title?: string;
};

export type PaletteEntries = Record<string, PaletteEntry>;

export type PaletteEntriesCallback = (entries: PaletteEntries) => PaletteEntries;

export default interface PaletteProvider {

  /**
   * Returns a map of entries or a function that receives, modifies and returns
   * a map of entries.
   *
   * The following example shows how to replace any entries returned by previous
   * providers with one entry which alerts the ID of the given element when
   * clicking on the entry.
   *
   * @example
   *
   * ```javascript
   * getPaletteEntries() {
   *   return function(entries) {
   *     return {
   *       foo: {
   *         action: (event, autoActivate) => {
   *           alert('Foo');
   *         },
   *         className: 'foo',
   *         title: 'Foo'
   *       }
   *     };
   *   };
   * }
   * ```
   */
  getPaletteEntries: () => PaletteEntriesCallback | PaletteEntries;
}
