/// <reference path="../../index.d.ts" />
import type { PublicLitElement as LitElement } from "@arcgis/lumina";
import type { IFilterOption, ISearchOption, ISearchTerm, ISolutionInfoCard, ISortOption, ISortType, SortType } from "../../utils/interfaces.js";
import type { T9nMeta } from "@arcgis/lumina/controllers";

export abstract class SolutionsAllPanel extends LitElement {
  /**
   * Contains the translations for this component.
   * All UI strings should be defined here.
   *
   * @internal
   */
  protected _translations: {
      allSolutionCards: string;
      fetchingSolutions: string;
      noSolutionsFound: string;
      changeSearchTerm: string;
      noSolutionsFoundShort: string;
      assistantHelp: string;
      askAssistant: string;
      disconnectedEnvironment: string;
  } & T9nMeta<{
      allSolutionCards: string;
      fetchingSolutions: string;
      noSolutionsFound: string;
      changeSearchTerm: string;
      noSolutionsFoundShort: string;
      assistantHelp: string;
      askAssistant: string;
      disconnectedEnvironment: string;
  }>;
  /**
   * Define how the cards will be sorted
   *
   * @default 'relevance'
   */
  accessor sortType: SortType;
  /** Returns displayed solution ids in the same order cards are currently rendered. */
  getDisplayedSolutionIds(): string[];
  /**
   * Search solutions based on key criteria
   *
   * @param searchOptions - the key criteria to search with
   */
  searchSolutions(searchOptions?: IFilterOption[] | ISearchOption | ISortOption): Promise<void>;
  /**
   * Set key properties for solution search
   * This is used for handeling multiple options from url params
   *
   * @param searchOptions - the key criteria that will be used when searched
   */
  setSearchOptions(searchOptions?: IFilterOption | ISearchOption | ISortOption): Promise<void>;
  /** Emitted on demand when all of the cards are first fetched */
  readonly allCardsFetched: import("@arcgis/lumina").TargetedEvent<this, ISolutionInfoCard[]>;
  /** Emitted on demand when cards are fetched */
  readonly cardsFetched: import("@arcgis/lumina").TargetedEvent<this, number>;
  /** Emitted on demand when the details card is selected. */
  readonly detailsCardSelected: import("@arcgis/lumina").TargetedEvent<this, ISolutionInfoCard>;
  /** Emitted on demand when the serachTerm is set from url param */
  readonly searchTermSet: import("@arcgis/lumina").TargetedEvent<this, ISearchTerm>;
  /** Emitted on demand when the sortType is set from url param */
  readonly sortTypeSet: import("@arcgis/lumina").TargetedEvent<this, ISortType>;
  readonly "@eventTypes": {
    allCardsFetched: SolutionsAllPanel["allCardsFetched"]["detail"];
    cardsFetched: SolutionsAllPanel["cardsFetched"]["detail"];
    detailsCardSelected: SolutionsAllPanel["detailsCardSelected"]["detail"];
    searchTermSet: SolutionsAllPanel["searchTermSet"]["detail"];
    sortTypeSet: SolutionsAllPanel["sortTypeSet"]["detail"];
  };
}