/**
 * A convenience module for importing [Content](https://developers.arcgis.com/javascript/latest/references/core/popup/content/Content/) classes when developing
 * with [TypeScript](https://developers.arcgis.com/javascript/latest/get-started/#typescript).
 * For example, rather than importing content elements one at a time like this:
 *
 * ```js
 * import TextContent from "@arcgis/core/popup/content/TextContent.js";
 * import MediaContent from "@arcgis/core/popup/content/MediaContent.js";
 * import FieldsContent from "@arcgis/core/popup/content/FieldsContent.js";
 * import AttachmentsContent from "@arcgis/core/popup/content/AttachmentsContent.js";
 * import CustomContent from "@arcgis/core/popup/content/CustomContent.js";
 * import ExpressionContent from "@arcgis/core/popup/content/ExpressionContent.js";
 * import RelationshipContent from "@arcgis/core/popup/content/RelationshipContent.js";
 * ```
 *
 * You can use this module to import them on a single line:
 *
 * ```js
 * import { TextContent, MediaContent, FieldsContent, AttachmentsContent, CustomContent, ExpressionContent, RelationshipContent } from "@arcgis/core/popup/content.js";
 * ```
 *
 * This module also allows you to implement [type guards](https://basarat.gitbook.io/typescript/type-system/typeguard)
 * on the content elements, making your code smarter.
 *
 * ```js
 * import { Content } from "@arcgis/core/popup/content.js";
 *
 * function logContentElement(content: Content): void {
 *   if (content.type === "media") {
 *     console.log("Content type is media");
 *   }
 *   else {
 *     // The compiler knows the content element must be `text | fields | media | attachment | custom`
 *     console.log("The value is not a valid popup content element.")
 *   }
 * }
 * ```
 *
 * @since 4.11
 * @see [PopupTemplate](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/)
 * @see [TextContent](https://developers.arcgis.com/javascript/latest/references/core/popup/content/TextContent/)
 * @see [MediaContent](https://developers.arcgis.com/javascript/latest/references/core/popup/content/MediaContent/)
 * @see [FieldsContent](https://developers.arcgis.com/javascript/latest/references/core/popup/content/FieldsContent/)
 * @see [AttachmentsContent](https://developers.arcgis.com/javascript/latest/references/core/popup/content/AttachmentsContent/)
 * @see [CustomContent](https://developers.arcgis.com/javascript/latest/references/core/popup/content/CustomContent/)
 * @see [ExpressionContent](https://developers.arcgis.com/javascript/latest/references/core/popup/content/ExpressionContent/)
 * @see [RelationshipContent](https://developers.arcgis.com/javascript/latest/references/core/popup/content/RelationshipContent/)
 */
import type AttachmentsContentClass from "./content/AttachmentsContent.js";
import type CustomContentClass from "./content/CustomContent.js";
import type ExpressionContentClass from "./content/ExpressionContent.js";
import type FieldsContentClass from "./content/FieldsContent.js";
import type MediaContentClass from "./content/MediaContent.js";
import type RelationshipContentClass from "./content/RelationshipContent.js";
import type TextContentClass from "./content/TextContent.js";
import type UtilityNetworkAssociationsContentClass from "./content/UtilityNetworkAssociationsContent.js";

/**
 * AttachmentsContent represents an attachment element associated with a
 * feature.
 */
export type AttachmentsContent = AttachmentsContentClass;

/**
 * AttachmentsContent represents an attachment element associated with a
 * feature.
 *
 * @typedef {module:esri/popup/content/AttachmentsContent} module:esri/popup/content~AttachmentsContent
 */
export const AttachmentsContent: typeof AttachmentsContentClass;

/**
 * CustomContent represents a custom content element associated with a
 * feature.
 */
export type CustomContent = CustomContentClass;

/**
 * CustomContent represents a custom content element associated with a
 * feature.
 *
 * @typedef {module:esri/popup/content/CustomContent} module:esri/popup/content~CustomContent
 */
export const CustomContent: typeof CustomContentClass;

/**
 * ExpressionContent represents an expression element associated with a
 * feature.
 */
export type ExpressionContent = ExpressionContentClass;

/**
 * ExpressionContent represents an expression element associated with a
 * feature.
 *
 * @typedef {module:esri/popup/content/ExpressionContent} module:esri/popup/content~ExpressionContent
 */
export const ExpressionContent: typeof ExpressionContentClass;

/**
 * FieldsContent represents the [FieldInfo](https://developers.arcgis.com/javascript/latest/references/core/popup/FieldInfo/) associated with a
 * feature.
 */
export type FieldsContent = FieldsContentClass;

/**
 * FieldsContent represents the [FieldInfo](https://developers.arcgis.com/javascript/latest/references/core/popup/FieldInfo/) associated with a
 * feature.
 *
 * @typedef {module:esri/popup/content/FieldsContent} module:esri/popup/content~FieldsContent
 */
export const FieldsContent: typeof FieldsContentClass;

/**
 * MediaContent contains an individual or array of chart and/or image media elements
 * to display within a popup's content.
 */
export type MediaContent = MediaContentClass;

/**
 * MediaContent contains an individual or array of chart and/or image media elements
 * to display within a popup's content.
 *
 * @typedef {module:esri/popup/content/MediaContent} module:esri/popup/content~MediaContent
 */
export const MediaContent: typeof MediaContentClass;

/**
 * RelationshipContent represents an relationship element associated with a
 * feature.
 */
export type RelationshipContent = RelationshipContentClass;

/**
 * RelationshipContent represents an relationship element associated with a
 * feature.
 *
 * @typedef {module:esri/popup/content/RelationshipContent} module:esri/popup/content~RelationshipContent
 */
export const RelationshipContent: typeof RelationshipContentClass;

/**
 * TextContent defines descriptive text as an element within the [PopupTemplate's](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/)
 * content.
 */
export type TextContent = TextContentClass;

/**
 * TextContent defines descriptive text as an element within the [PopupTemplate's](https://developers.arcgis.com/javascript/latest/references/core/PopupTemplate/)
 * content.
 *
 * @typedef {module:esri/popup/content/TextContent} module:esri/popup/content~TextContent
 */
export const TextContent: typeof TextContentClass;

/**
 * UtilityNetworkAssociationsContent represents an utility network associations element associated with a
 * feature.
 */
export type UtilityNetworkAssociationsContent = UtilityNetworkAssociationsContentClass;

/**
 * UtilityNetworkAssociationsContent represents an utility network associations element associated with a
 * feature.
 *
 * @typedef {module:esri/popup/content/UtilityNetworkAssociationsContent} module:esri/popup/content~UtilityNetworkAssociationsContent
 */
export const UtilityNetworkAssociationsContent: typeof UtilityNetworkAssociationsContentClass;

/** Popup content element types. */
export type Content = AttachmentsContent | FieldsContent | MediaContent | TextContent | CustomContent | ExpressionContent | RelationshipContent | UtilityNetworkAssociationsContent;