import type Accessor from "../../core/Accessor.js";
import type Portal from "../../portal/Portal.js";
import type { PortalProperties } from "../../portal/Portal.js";

export interface StyleOriginProperties extends Partial<Pick<StyleOrigin, "name" | "styleName" | "styleUrl">> {
  /** The portal of the style origin. */
  portal?: PortalProperties | null;
}

/** The style origin. */
export default class StyleOrigin extends Accessor {
  constructor(properties?: StyleOriginProperties);
  /** Name of the symbol in the style referenced by styleName or styleUrl. */
  accessor name: string | null | undefined;
  /** The portal of the style origin. */
  get portal(): Portal | null | undefined;
  set portal(value: PortalProperties | null | undefined);
  /** The well-known esri-provided style, such as `EsriThematicShapesStyle`. */
  accessor styleName: string | null | undefined;
  /** A url to a style definition. */
  accessor styleUrl: string | null | undefined;
  /**
   * Creates a deep clone of the style origin.
   *
   * @returns A deep clone of the object that invoked this method.
   */
  clone(): StyleOrigin;
}