//#region src/types/main.d.ts
/**
 * Represents the core data structure containing item information and metadata
 */
type Data<T extends DataCategory, U extends DataCategory> = {
  uuid: string;
  belongsTo: {
    uuid: string;
    abbreviation: string;
  };
  publicationDateTime: Date;
  metadata: Metadata;
  item: Tree<T, U> | Set<T> | Resource | SpatialUnit | Concept | Period | Bibliography | Person | PropertyValue;
};
type DataCategory = "tree" | "set" | "resource" | "spatialUnit" | "concept" | "period" | "bibliography" | "person" | "propertyValue";
/**
 * Basic identification information used across multiple types
 */
type Identification = {
  label: string;
  abbreviation: string;
  code: string | null;
};
/**
 * Metadata information for items including project, publisher and language details
 */
type Metadata = {
  project: {
    identification: Identification & {
      website: string | null;
    };
  } | null;
  item: {
    identification: Identification;
    category: string;
    type: string;
    maxLength: number | null;
  } | null;
  dataset: string;
  publisher: string;
  languages: Array<string>;
  identifier: string;
  description: string;
};
/**
 * Represents a single item in a context hierarchy with its metadata
 */
type ContextItem = {
  uuid: string;
  publicationDateTime: Date | null;
  number: number;
  content: string;
};
/**
 * Represents a node in the context tree containing tree, project and spatial unit information
 */
type ContextNode = {
  tree: ContextItem;
  project: ContextItem;
  spatialUnit: Array<ContextItem>;
};
/**
 * Contains the full context information including nodes and display path
 */
type Context = {
  nodes: Array<ContextNode>;
  displayPath: string;
};
/**
 * License information for content items
 */
type License = {
  content: string;
  url: string;
};
/**
 * Represents a person (author, creator, etc.) with their identification and metadata
 */
type Person = {
  uuid: string;
  category: "person";
  publicationDateTime: Date | null;
  type: string | null;
  number: number | null;
  context: Context | null;
  availability: License | null;
  date: Date | null;
  identification: Identification | null;
  address: {
    country: string | null;
    city: string | null;
    state: string | null;
  } | null;
  description: string | null;
  coordinates: Coordinates;
  content: string | null;
  notes: Array<Note>;
  events: Array<Event>;
  properties: Array<Property>;
};
/**
 * Represents a note with number, title and content
 */
type Note = {
  number: number;
  title: string | null;
  content: string;
};
/**
 * Represents an image with its metadata and content
 */
type Image = {
  publicationDateTime: Date | null;
  identification: Identification | null;
  url: string | null;
  htmlPrefix: string | null;
  content: string | null;
  widthPreview: number | null;
  heightPreview: number | null;
  width: number | null;
  height: number | null;
};
/**
 * Represents a link to another item with optional image and bibliographic references
 */
type Link = {
  uuid: string | null;
  publicationDateTime: Date | null;
  type: string | null;
  category: string | null;
  identification: Identification | null;
  description: string | null;
  content: string | null;
  href: string | null;
  fileFormat: string | null;
  fileSize: number | null;
  image: {
    isInline: boolean;
    isPrimary: boolean;
    heightPreview: number;
    widthPreview: number;
    height: number;
    width: number;
  } | null;
  bibliographies: Array<Bibliography> | null;
};
/**
 * Represents a clickable/interactive area on an image map
 */
type ImageMapArea = {
  uuid: string;
  publicationDateTime: Date | null;
  type: string;
  title: string;
  shape: "rectangle" | "circle" | "polygon";
  coords: Array<number>;
};
/**
 * Contains image map areas and dimensions
 */
type ImageMap = {
  area: Array<ImageMapArea>;
  width: number;
  height: number;
};
/**
 * Geographic coordinates item with optional type and label
 */
type CoordinatesItem = {
  type: "point";
  latitude: number;
  longitude: number;
  altitude: number | null;
  source: {
    context: "self";
    uuid: string;
    label: string;
  } | {
    context: "related";
    uuid: string;
    label: string;
    value: string;
  } | {
    context: "inherited";
    item: {
      uuid: string;
      label: string;
    };
    uuid: string;
    label: string;
  } | null;
} | {
  type: "plane";
  minimum: {
    latitude: number;
    longitude: number;
  };
  maximum: {
    latitude: number;
    longitude: number;
  };
  source: {
    context: "self";
    uuid: string;
    label: string;
  } | {
    context: "related";
    uuid: string;
    label: string;
    value: string;
  } | {
    context: "inherited";
    item: {
      uuid: string;
      label: string;
    };
    uuid: string;
    label: string;
  } | null;
};
/**
 * Geographic coordinates with optional type and label
 */
type Coordinates = Array<CoordinatesItem>;
/**
 * Represents an observation with notes, links and properties
 */
type Observation = {
  number: number;
  date: Date | null;
  observers: Array<string> | Array<Person>;
  notes: Array<Note>;
  links: Array<Link>;
  properties: Array<Property>;
};
/**
 * Represents an event with date, label and optional agent
 */
type Event = {
  date: Date | null;
  label: string;
  agent: {
    uuid: string;
    content: string;
  } | null;
};
/**
 * Represents an interpretation with date and properties
 */
type Interpretation = {
  date: Date | null;
  number: number;
  properties: Array<Property>;
};
/**
 * Represents a resource item with associated metadata, content and relationships
 */
type Resource = {
  uuid: string;
  category: "resource";
  publicationDateTime: Date | null;
  type: string;
  number: number;
  context: Context | null;
  license: License | null;
  copyright: string | null;
  identification: Identification;
  date: Date | null;
  image: Image | null;
  creators: Array<Person>;
  notes: Array<Note>;
  description: string;
  coordinates: Coordinates;
  document: string | null;
  href: string | null;
  fileFormat: string | null;
  fileSize: number | null;
  imageMap: ImageMap | null;
  periods: Array<Period>;
  links: Array<Link>;
  reverseLinks: Array<Link>;
  properties: Array<Property>;
  bibliographies: Array<Bibliography>;
  resources: Array<Resource>;
};
/**
 * Represents a spatial unit with geographic coordinates and observations
 */
type SpatialUnit = {
  uuid: string;
  category: "spatialUnit";
  publicationDateTime: Date | null;
  number: number;
  context: Context | null;
  license: License | null;
  identification: Identification;
  image: Image | null;
  description: string | null;
  coordinates: Coordinates;
  mapData: {
    geoJSON: {
      multiPolygon: string;
      EPSG: number;
    };
  } | null;
  observations: Array<Observation>;
  events: Array<Event>;
  properties: Array<Property>;
};
/**
 * Represents a concept with associated interpretations
 */
type Concept = {
  uuid: string;
  category: "concept";
  publicationDateTime: Date | null;
  number: number;
  license: License | null;
  context: Context | null;
  identification: Identification;
  image: Image | null;
  description: string | null;
  interpretations: Array<Interpretation>;
  properties: Array<Property>;
};
/**
 * Represents a set that can contain resources, spatial units and concepts
 */
type Set<T extends DataCategory> = {
  uuid: string;
  category: "set";
  itemCategory: T;
  publicationDateTime: Date | null;
  type: string;
  number: number;
  date: Date | null;
  license: License | null;
  identification: Identification;
  isSuppressingBlanks: boolean;
  description: string;
  creators: Array<Person>;
  items: T extends "resource" ? Array<Resource> : T extends "spatialUnit" ? Array<SpatialUnit> : T extends "concept" ? Array<Concept> : T extends "period" ? Array<Period> : T extends "bibliography" ? Array<Bibliography> : T extends "person" ? Array<Person> : T extends "propertyValue" ? Array<PropertyValue> : never;
};
/**
 * Represents a bibliography entry with citation and publication information
 */
type Bibliography = {
  uuid: string | null;
  zoteroId: string | null;
  category: "bibliography";
  publicationDateTime: Date | null;
  type: string | null;
  number: number | null;
  identification: Identification | null;
  projectIdentification: Identification | null;
  context: Context | null;
  citation: {
    details: string | null;
    format: string | null;
    short: string | null;
    long: string | null;
  };
  publicationInfo: {
    publishers: Array<Person>;
    startDate: Date | null;
  };
  entryInfo: {
    startIssue: string;
    startVolume: string;
  } | null;
  source: {
    resource: Pick<Resource, "uuid" | "publicationDateTime" | "type" | "identification"> | null;
    documentUrl: string | null;
  };
  periods: Array<Period>;
  authors: Array<Person>;
  properties: Array<Property>;
};
/**
 * Represents a time period with identification
 */
type Period = {
  uuid: string;
  category: "period";
  publicationDateTime: Date | null;
  type: string | null;
  number: number | null;
  identification: Identification;
  description: string | null;
};
/**
 * Represents a property value with type information
 */
type PropertyValue = {
  uuid: string;
  category: "propertyValue";
  number: number;
  publicationDateTime: Date | null;
  context: Context | null;
  availability: License | null;
  identification: Identification;
  date: Date | null;
  creators: Array<Person>;
  description: string;
  notes: Array<Note>;
  links: Array<Link>;
};
type PropertyValueContentType = "string" | "integer" | "decimal" | "boolean" | "date" | "dateTime" | "time" | "coordinate" | "IDREF";
/**
 * Represents a property value with type information
 */
type PropertyValueContent<T extends PropertyValueContentType> = {
  content: (T extends "integer" ? number : T extends "decimal" ? number : T extends "time" ? number : T extends "boolean" ? boolean : string) | null;
  dataType: T;
  label: string | null;
  isUncertain: boolean;
  unit: string | null;
  category: string | null;
  type: string | null;
  uuid: string | null;
  publicationDateTime: Date | null;
  href: string | null;
  slug: string | null;
};
/**
 * Represents a property with label, values and nested properties
 */
type Property<T extends PropertyValueContentType = PropertyValueContentType> = {
  uuid: string;
  label: string;
  values: Array<PropertyValueContent<T>>;
  comment: string | null;
  properties: Array<Property>;
};
/**
 * Represents a tree structure containing resources, spatial units and concepts
 */
type Tree<T extends DataCategory, U extends DataCategory> = {
  uuid: string;
  category: "tree";
  publicationDateTime: Date | null;
  type: string;
  number: number;
  date: Date | null;
  license: License | null;
  identification: Identification;
  creators: Array<Person>;
  properties: Array<Property>;
  items: T extends "resource" ? Array<Resource> : T extends "spatialUnit" ? Array<SpatialUnit> : T extends "concept" ? Array<Concept> : T extends "period" ? Array<Period> : T extends "bibliography" ? Array<Bibliography> : T extends "person" ? Array<Person> : T extends "propertyValue" ? Array<PropertyValue> : T extends "set" ? Array<Set<U>> : never;
};
/**
 * Represents a gallery with its identification, project identification, resources and max length
 */
type Gallery = {
  identification: Identification;
  projectIdentification: Identification;
  resources: Array<Resource>;
  maxLength: number;
};
/**
 * Represents a property query item with its item and value UUIDs
 */
type PropertyQueryItem = {
  value: {
    uuid: string | null;
    category: string | null;
    type: string | null;
    dataType: string;
    publicationDateTime: string | null;
    content: string;
    label: string | null;
  };
  resultUuids: Array<string>;
};
/**
 * Represents a metadata object given a UUID
 */
type UuidMetadata = {
  item: {
    uuid: string;
    name: string;
    type: string;
  };
  project: {
    name: string;
    website: string | null;
  };
} | null;
/**
 * Represents a level context item with a variable and value
 */
type LevelContextItem = {
  variableUuid: string;
  valueUuid: string | null;
};
/**
 * Represents a level context with a context item
 */
type LevelContext = {
  context: Array<LevelContextItem>;
  identification: Identification;
  type: string;
};
/**
 * Represents a website with its properties and elements
 */
type Website = {
  uuid: string;
  publicationDateTime: Date | null;
  identification: Identification;
  project: {
    name: string;
    website: string | null;
  };
  creators: Array<Person>;
  license: License | null;
  pages: Array<Webpage>;
  sidebar: {
    elements: Array<WebElement>;
    title: WebElement["title"];
    layout: "start" | "end";
    mobileLayout: "default" | "inline";
    cssStyles: Array<Style>;
    cssStylesMobile: Array<Style>;
  } | null;
  properties: WebsiteProperties;
  searchOptions: {
    filters: Array<{
      uuid: string;
      type: string;
    }>;
    scopes: Array<{
      uuid: string;
      type: string;
      identification: Identification;
    }>;
  };
  globalOptions: {
    contexts: {
      flatten: Array<LevelContext>;
      suppress: Array<LevelContext>;
      filter: Array<LevelContext>;
      detail: Array<LevelContext>;
      download: Array<LevelContext>;
      label: Array<LevelContext>;
    };
  };
};
/**
 * Properties for configuring website display and styling
 */
type WebsiteProperties = {
  type: "traditional" | "digital-collection" | "plum" | "cedar" | "elm" | "maple" | "oak" | "palm";
  privacy: "public" | "password" | "private";
  status: "development" | "preview" | "production";
  contact: {
    name: string;
    email: string | null;
  } | null;
  isHeaderDisplayed: boolean;
  headerVariant: "default" | "floating" | "inline";
  headerAlignment: "start" | "center" | "end";
  isHeaderProjectDisplayed: boolean;
  isFooterDisplayed: boolean;
  isSidebarDisplayed: boolean;
  supportsThemeToggle: boolean;
  defaultTheme: "light" | "dark" | null;
  logoUrl: string | null;
};
type Webpage = {
  title: string;
  slug: string;
  properties: WebpageProperties;
  items: Array<WebElement | WebBlock>;
  webpages: Array<Webpage>;
};
/**
 * Properties for configuring webpage display and styling
 */
type WebpageProperties = {
  displayedInHeader: boolean;
  width: "full" | "large" | "narrow" | "default";
  variant: "default" | "no-background";
  backgroundImageUrl: string | null;
  isSidebarDisplayed: boolean;
  isBreadcrumbsDisplayed: boolean;
  cssStyles: Array<Style>;
  cssStylesMobile: Array<Style>;
};
type WebTitle = {
  label: string;
  variant: "default" | "simple";
  properties: {
    isNameDisplayed: boolean;
    isDescriptionDisplayed: boolean;
    isDateDisplayed: boolean;
    isCreatorsDisplayed: boolean;
    isCountDisplayed: boolean;
  };
};
/**
 * Base properties for web elements
 */
type WebElement = {
  uuid: string;
  type: "element";
  title: WebTitle;
  isDisplayedInBlockSectionSidebar: boolean;
  cssStyles: Array<Style>;
  cssStylesMobile: Array<Style>;
} & WebElementComponent;
/**
 * Union type of all possible web element components
 */
type WebElementComponent = {
  component: "annotated-document";
  documentId: string;
} | {
  component: "annotated-image";
  imageUuid: string;
  isFilterDisplayed: boolean;
} | {
  component: "audio-player";
  audioId: string;
  isSpeedControlsDisplayed: boolean;
  isVolumeControlsDisplayed: boolean;
  isSeekBarDisplayed: boolean;
} | {
  component: "bibliography";
  bibliographies: Array<Bibliography>;
  layout: "long" | "short";
} | {
  component: "entries";
  entriesId: string;
  variant: "entry" | "item";
  isFilterDisplayed: boolean;
} | {
  component: "button";
  variant: "default" | "transparent" | "link";
  href: string;
  isExternal: boolean;
  label: string;
  startIcon: string | null;
  endIcon: string | null;
} | {
  component: "collection";
  collectionId: string;
  variant: "full" | "highlights";
  itemVariant: "detailed" | "card" | "tile";
  paginationVariant: "default" | "numeric";
  isFilterDisplayed: boolean;
  layout: "image-top" | "image-bottom" | "image-start" | "image-end";
} | {
  component: "empty-space";
  height: string | null;
  width: string | null;
} | {
  component: "iframe";
  href: string;
  height: string | null;
  width: string | null;
} | {
  component: "iiif-viewer";
  IIIFId: string;
} | {
  component: "image";
  images: Array<WebImage>;
  variant: "default" | "carousel" | "grid" | "hero";
  width: number | null;
  height: number | null;
  isFullWidth: boolean;
  isFullHeight: boolean;
  imageQuality: "high" | "low";
  captionSource: "name" | "abbreviation" | "description";
  captionLayout: "top" | "bottom" | "inset" | "suppress";
  altTextSource: "name" | "abbreviation" | "description";
  isTransparentBackground: boolean;
  isCover: boolean;
  carouselOptions: {
    secondsPerImage: number;
  } | null;
} | {
  component: "image-gallery";
  galleryId: string;
  isFilterDisplayed: boolean;
} | {
  component: "map";
  mapId: string;
  customBasemap: string | null;
  isControlsDisplayed: boolean;
  isInteractive: boolean;
  isClustered: boolean;
  isUsingPins: boolean;
  isFullHeight: boolean;
} | {
  component: "network-graph";
} | {
  component: "query";
  queries: Array<{
    label: string;
    propertyUuids: Array<string>;
    startIcon: string | null;
    endIcon: string | null;
  }>;
} | {
  component: "search-bar";
  variant: "default" | "full";
  placeholder: string | null;
  baseQuery: string | null;
} | {
  component: "table";
  tableId: string;
} | {
  component: "text";
  variant: "title" | "block" | "banner";
  heading: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | null;
  content: string;
} | {
  component: "timeline";
  timelineId: string;
} | {
  component: "video";
  isChaptersDislayed: boolean;
};
/**
 * Represents an image used in web elements
 */
type WebImage = {
  url: string;
  label: string | null;
  description: string | null;
  width: number;
  height: number;
};
/**
 * Represents a CSS style with label and value
 */
type Style = {
  label: string;
  value: string;
};
/**
 * Represents a block of vertical or horizontal content alignment
 */
type WebBlock = {
  uuid: string;
  type: "block";
  layout: "vertical" | "horizontal" | "grid";
  title: WebTitle;
  items: Array<WebElement | WebBlock>;
  properties: {
    /**
     * valid `gridTemplateColumns` or `gridTemplateRows` CSS property value
     */
    spacing: string | undefined;
    /**
     * `gap` CSS property value
     */
    gap: string | undefined;
    /**
     * `align-items` CSS property value
     */
    alignItems: "stretch" | "start" | "center" | "end" | "space-between";
    /**
     * `justify-content` CSS property value
     */
    justifyContent: "stretch" | "start" | "center" | "end" | "space-between";
    sectionSidebarItems: Array<WebSectionSidebarItem> | null;
  };
  propertiesMobile: Record<string, string> | null;
  cssStyles: Array<Style>;
  cssStylesMobile: Array<Style>;
};
type WebSectionSidebarItem = {
  uuid: string;
  type: "block" | "element";
  name: string | null;
  items: Array<WebSectionSidebarItem> | null;
};
//#endregion
//#region src/utils/fetchers/gallery.d.ts
/**
 * Fetches and parses a gallery from the OCHRE API
 *
 * @param uuid - The UUID of the gallery
 * @param filter - The filter to apply to the gallery
 * @param page - The page number to fetch
 * @param perPage - The number of items per page
 * @returns The parsed gallery or null if the fetch/parse fails
 *
 * @example
 * ```ts
 * const gallery = await fetchGallery("9c4da06b-f15e-40af-a747-0933eaf3587e", "1978", 1, 12);
 * if (gallery === null) {
 *   console.error("Failed to fetch gallery");
 *   return;
 * }
 * console.log(`Fetched gallery: ${gallery.identification.label}`);
 * console.log(`Contains ${gallery.resources.length.toLocaleString()} resources`);
 * ```
 *
 * @remarks
 * The returned gallery includes:
 * - Gallery metadata and identification
 * - Project identification
 * - Resources (gallery items)
 */
declare function fetchGallery(uuid: string, filter: string, page: number, perPage: number, customFetch?: (input: string | URL | globalThis.Request, init?: RequestInit) => Promise<Response>): Promise<{
  item: Gallery | null;
  error: null;
} | {
  item: null;
  error: string;
}>;
//#endregion
//#region src/utils/fetchers/item.d.ts
/**
 * Fetches and parses an OCHRE item from the OCHRE API
 *
 * @param uuid - The UUID of the OCHRE item to fetch
 * @returns Object containing the parsed OCHRE item and its metadata, or null if the fetch/parse fails
 *
 * @example
 * ```ts
 * const result = await fetchItem("123e4567-e89b-12d3-a456-426614174000");
 * if (result === null) {
 *   console.error("Failed to fetch OCHRE item");
 *   return;
 * }
 * const { metadata, belongsTo, item, category } = result;
 * console.log(`Fetched OCHRE item: ${item.identification.label} with category ${category}`);
 * ```
 *
 * Or, if you want to fetch a specific category, you can do so by passing the category as an argument:
 * ```ts
 * const result = await fetchItem("123e4567-e89b-12d3-a456-426614174000", "resource");
 * const { metadata, belongsTo, item, category } = result;
 * console.log(item.category); // "resource"
 * ```
 *
 * @remarks
 * The returned OCHRE item includes:
 * - Item metadata
 * - Item belongsTo information
 * - Item content
 * - Item category
 *
 * If the fetch/parse fails, the returned object will have an `error` property.
 */
declare function fetchItem<T extends DataCategory, U extends DataCategory>(uuid: string, category?: T, setCategory?: T extends "set" ? U : never, customFetch?: (input: string | URL | globalThis.Request, init?: RequestInit) => Promise<Response>): Promise<{
  error: null;
  metadata: Metadata;
  belongsTo: {
    uuid: string;
    abbreviation: string;
  };
  item: T extends "resource" ? Resource : T extends "spatialUnit" ? SpatialUnit : T extends "concept" ? Concept : T extends "period" ? Period : T extends "bibliography" ? Bibliography : T extends "person" ? Person : T extends "propertyValue" ? PropertyValue : T extends "set" ? Set<U> : T extends "tree" ? Tree<T, U> : never;
  category: T;
} | {
  error: string;
  metadata: never;
  belongsTo: never;
  item: never;
  category: never;
}>;
//#endregion
//#region src/utils/fetchers/property-query.d.ts
/**
 * Fetches and parses a property query from the OCHRE API
 *
 * @param scopeUuids - The scope UUIDs to filter by
 * @param propertyUuids - The property UUIDs to query by
 * @param customFetch - A custom fetch function to use instead of the default fetch
 * @returns The parsed property query or null if the fetch/parse fails
 *
 * @example
 * ```ts
 * const propertyQuery = await fetchPropertyQuery(["0c0aae37-7246-495b-9547-e25dbf5b99a3"], ["9c4da06b-f15e-40af-a747-0933eaf3587e"]);
 * if (propertyQuery === null) {
 *   console.error("Failed to fetch property query");
 *   return;
 * }
 * console.log(`Fetched property query: ${propertyQuery.item}`);
 * ```
 *
 * @remarks
 * The returned property query includes:
 * - Property items
 */
declare function fetchPropertyQuery(scopeUuids: Array<string>, propertyUuids: Array<string>, customFetch?: (input: string | URL | globalThis.Request, init?: RequestInit) => Promise<Response>): Promise<{
  items: Array<PropertyQueryItem> | null;
  error: null;
} | {
  items: null;
  error: string;
}>;
//#endregion
//#region src/utils/fetchers/uuid-metadata.d.ts
/**
 * Fetches raw OCHRE metadata by UUID from the OCHRE API
 *
 * @param uuid - The UUID of the OCHRE item to fetch
 * @returns An object containing the OCHRE metadata or an error message
 *
 * @example
 * ```ts
 * const { item, error } = await fetchByUuidMetadata("123e4567-e89b-12d3-a456-426614174000");
 * if (error !== null) {
 *   console.error(`Failed to fetch: ${error}`);
 *   return;
 * }
 * // Process data...
 * ```
 */
declare function fetchByUuidMetadata(uuid: string, customFetch?: (input: string | URL | globalThis.Request, init?: RequestInit) => Promise<Response>): Promise<{
  item: UuidMetadata | null;
  error: string | null;
}>;
//#endregion
//#region src/utils/fetchers/website.d.ts
/**
 * Fetches and parses a website configuration from the OCHRE API
 *
 * @param abbreviation - The abbreviation identifier for the website
 * @returns The parsed website configuration or null if the fetch/parse fails
 *
 * @example
 * ```ts
 * const website = await fetchWebsite("guerrilla-television");
 * if (website === null) {
 *   console.error("Failed to fetch website");
 *   return;
 * }
 * console.log(`Fetched website: ${website.identification.label}`);
 * console.log(`Contains ${website.pages.length.toLocaleString()} pages`);
 * ```
 *
 * @remarks
 * The returned website configuration includes:
 * - Website metadata and identification
 * - Page structure and content
 * - Layout and styling properties
 * - Navigation configuration
 * - Sidebar elements
 * - Project information
 * - Creator details
 *
 * The abbreviation is case-insensitive and should match the website's configured abbreviation in OCHRE.
 */
declare function fetchWebsite(abbreviation: string, customFetch?: (input: string | URL | globalThis.Request, init?: RequestInit) => Promise<Response>): Promise<[null, Website] | [string, null]>;
//#endregion
//#region src/utils/getters.d.ts
/**
 * Options for property search operations
 */
type PropertyOptions = {
  /** Whether to recursively search through nested properties */
  includeNestedProperties: boolean;
};
/**
 * Finds a property by its UUID in an array of properties
 *
 * @param properties - Array of properties to search through
 * @param uuid - The UUID to search for
 * @param options - Search options, including whether to include nested properties
 * @returns The matching Property object, or null if not found
 *
 * @example
 * ```ts
 * const property = getPropertyByUuid(properties, "123e4567-e89b-12d3-a456-426614174000", { includeNestedProperties: true });
 * if (property) {
 *   console.log(property.values);
 * }
 * ```
 */
declare function getPropertyByUuid(properties: Array<Property>, uuid: string, options?: PropertyOptions): Property | null;
/**
 * Retrieves all values for a property with the given UUID
 *
 * @param properties - Array of properties to search through
 * @param uuid - The UUID to search for
 * @param options - Search options, including whether to include nested properties
 * @returns Array of property values as strings, or null if property not found
 *
 * @example
 * ```ts
 * const values = getPropertyValuesByUuid(properties, "123e4567-e89b-12d3-a456-426614174000");
 * if (values) {
 *   for (const value of values) {
 *     console.log(value);
 *   }
 * }
 * ```
 */
declare function getPropertyValuesByUuid(properties: Array<Property>, uuid: string, options?: PropertyOptions): Array<string | number | boolean | Date | null> | null;
/**
 * Gets the first value of a property with the given UUID
 *
 * @param properties - Array of properties to search through
 * @param uuid - The UUID to search for
 * @param options - Search options, including whether to include nested properties
 * @returns The first property value as string, or null if property not found
 *
 * @example
 * ```ts
 * const title = getPropertyValueByUuid(properties, "123e4567-e89b-12d3-a456-426614174000");
 * if (title) {
 *   console.log(`Document title: ${title}`);
 * }
 * ```
 */
declare function getPropertyValueByUuid(properties: Array<Property>, uuid: string, options?: PropertyOptions): string | number | boolean | Date | null;
/**
 * Finds a property by its label in an array of properties
 *
 * @param properties - Array of properties to search through
 * @param label - The label to search for
 * @param options - Search options, including whether to include nested properties
 * @returns The matching Property object, or null if not found
 *
 * @example
 * ```ts
 * const property = getPropertyByLabel(properties, "author", { includeNestedProperties: true });
 * if (property) {
 *   console.log(property.values);
 * }
 * ```
 */
declare function getPropertyByLabel(properties: Array<Property>, label: string, options?: PropertyOptions): Property | null;
/**
 * Retrieves all values for a property with the given label
 *
 * @param properties - Array of properties to search through
 * @param label - The label to search for
 * @param options - Search options, including whether to include nested properties
 * @returns Array of property values as strings, or null if property not found
 *
 * @example
 * ```ts
 * const values = getPropertyValuesByLabel(properties, "keywords");
 * if (values) {
 *   for (const value of values) {
 *     console.log(value);
 *   }
 * }
 * ```
 */
declare function getPropertyValuesByLabel(properties: Array<Property>, label: string, options?: PropertyOptions): Array<string | number | boolean | Date | null> | null;
/**
 * Gets the first value of a property with the given label
 *
 * @param properties - Array of properties to search through
 * @param label - The label to search for
 * @param options - Search options, including whether to include nested properties
 * @returns The first property value as string, or null if property not found
 *
 * @example
 * ```ts
 * const title = getPropertyValueByLabel(properties, "title");
 * if (title) {
 *   console.log(`Document title: ${title}`);
 * }
 * ```
 */
declare function getPropertyValueByLabel(properties: Array<Property>, label: string, options?: PropertyOptions): string | number | boolean | Date | null;
/**
 * Gets all unique properties from an array of properties
 *
 * @param properties - Array of properties to get unique properties from
 * @param options - Search options, including whether to include nested properties
 * @returns Array of unique properties
 *
 * @example
 * ```ts
 * const properties = getAllUniqueProperties(properties, { includeNestedProperties: true });
 * console.log(`Available properties: ${properties.map((p) => p.label).join(", ")}`);
 * ```
 */
declare function getUniqueProperties(properties: Array<Property>, options?: PropertyOptions): Array<Property>;
/**
 * Gets all unique property labels from an array of properties
 *
 * @param properties - Array of properties to get unique property labels from
 * @param options - Search options, including whether to include nested properties
 * @returns Array of unique property labels
 *
 * @example
 * ```ts
 * const properties = getAllUniquePropertyLabels(properties, { includeNestedProperties: true });
 * console.log(`Available properties: ${properties.join(", ")}`);
 * ```
 */
declare function getUniquePropertyLabels(properties: Array<Property>, options?: PropertyOptions): Array<string>;
/**
 * Filters a property based on a label and value criteria
 *
 * @param property - The property to filter
 * @param filter - Filter criteria containing label and value to match
 * @param filter.label - The label to filter by
 * @param filter.value - The value to filter by
 * @param options - Search options, including whether to include nested properties
 * @returns True if the property matches the filter criteria, false otherwise
 *
 * @example
 * ```ts
 * const matches = filterProperties(property, {
 *   label: "category",
 *   value: "book"
 * });
 * if (matches) {
 *   console.log("Property matches filter criteria");
 * }
 * ```
 */
declare function filterProperties(property: Property, filter: {
  label: string;
  value: string | number | boolean | Date;
}, options?: PropertyOptions): boolean;
//#endregion
export { Bibliography, Concept, Context, ContextItem, ContextNode, Coordinates, CoordinatesItem, Data, DataCategory, Event, Gallery, Identification, Image, ImageMap, ImageMapArea, Interpretation, LevelContext, LevelContextItem, License, Link, Metadata, Note, Observation, Period, Person, Property, PropertyQueryItem, PropertyValue, PropertyValueContent, PropertyValueContentType, Resource, Set, SpatialUnit, Style, Tree, UuidMetadata, WebBlock, WebElement, WebElementComponent, WebImage, WebSectionSidebarItem, WebTitle, Webpage, WebpageProperties, Website, WebsiteProperties, fetchByUuidMetadata, fetchGallery, fetchItem, fetchPropertyQuery, fetchWebsite, filterProperties, getPropertyByLabel, getPropertyByUuid, getPropertyValueByLabel, getPropertyValueByUuid, getPropertyValuesByLabel, getPropertyValuesByUuid, getUniqueProperties, getUniquePropertyLabels };