obsidian-dev-utils
Version:
This is the collection of useful functions that you can use for your Obsidian plugin development
215 lines (214 loc) • 7.4 kB
text/typescript
/**
* @packageDocumentation
*
* This module provides utility functions for working with Dataview in Obsidian.
*/
import type { Promisable } from 'type-fest';
import type { DataviewInlineApi as DataviewInlineApiOriginal } from './@types/Dataview/api/inline-api.d.cjs';
import type { DataArray, DataviewApi, SMarkdownPage } from './@types/Dataview/index.d.cjs';
import type { PathOrFile } from './FileSystem.cjs';
import type { CombinedFrontmatter } from './Frontmatter.cjs';
/**
* Export DateTime and Link types from the Dataview API.
*/
export type { DateTime, Link } from './@types/Dataview/index.d.cjs';
declare global {
/**
* The DataviewAPI object represents the API for interacting with Dataview in Obsidian.
*/
var DataviewAPI: DataviewApi | undefined;
}
/**
* The combined page type, which includes the front matter and the SMarkdownPage.
*/
export type CombinedPage<CustomFrontmatter = unknown> = CombinedFrontmatter<CustomFrontmatter> & SMarkdownPage;
/**
* Extended interface for the Dataview Inline API, providing additional methods for custom page types and array handling.
*
* @typeParam CustomPage - The type of the custom page. Defaults to `SMarkdownPage`.
*/
export interface DataviewInlineApi extends DataviewInlineApiOriginal {
/**
* Wraps an array of items into a {@link DataArray} object.
*
* @typeParam T - The type of the items in the array.
* @param arr - The array of items to wrap.
* @returns A {@link DataArray} containing the items.
*/
array<T>(arr: T[]): DataArray<T>;
/**
* Retrieves the current page, with an optional custom page type.
*
* @typeParam CustomPage - The type of the custom page. Defaults to `SMarkdownPage`.
* @returns The current page.
*/
current<CustomFrontmatter = unknown>(): CombinedPage<CustomFrontmatter>;
/**
* Retrieves pages based on an optional query, with an optional custom page type.
*
* @typeParam CustomPage - The type of the custom page. Defaults to `SMarkdownPage`.
* @param query - An optional string query to filter the pages.
* @returns A {@link DataArray} of pages matching the query.
*/
pages<CustomFrontmatter = unknown>(query?: string): DataArray<CombinedPage<CustomFrontmatter>>;
/**
* Creates a paragraph HTML element with the provided text and optional DOM element options.
*
* @param text - The content of the paragraph.
* @param options - Optional DOM element options, including an optional container.
* @returns The created HTML paragraph element.
*/
paragraph(text: unknown, options?: DomElementInfoWithContainer): HTMLParagraphElement;
}
/**
* DomElementInfo with an optional container.
*/
export type DomElementInfoWithContainer = {
container?: HTMLElement;
} & DomElementInfo;
/**
* The combined file type, which includes the front matter and the SMarkdownFile.
*/
export type PageFile = SMarkdownPage['file'];
/**
* List of page files.
*/
export type PageFiles = ArrayOrDataArray<PageFile>;
/**
* Reloads the current file cache using the Dataview API.
*
* @param dv - The DataviewInlineApi instance.
* @returns A {@link Promise} that resolves when the cache is reloaded.
*/
export declare function reloadCurrentFileCache(dv: DataviewInlineApi): Promise<void>;
/**
* Array or DataArray type.
*/
export type ArrayOrDataArray<T> = DataArray<T> | T[];
/**
* Options for rendering an iframe in the Dataview container.
*/
export interface RenderIframeOptions {
/**
* The DataviewInlineApi instance.
*/
dv: DataviewInlineApi;
/**
* The height of the iframe.
*/
height: string;
/**
* The relative path to the resource to be displayed in the iframe.
*/
relativePathOrFile: PathOrFile;
/**
* The width of the iframe.
*/
width: string;
}
/**
* Options for rendering a paginated list using the Dataview API.
*/
export interface RenderPaginatedListOptions<T> {
/**
* The DataviewInlineApi instance.
*/
dv: DataviewInlineApi;
/**
* Options for items per page. Defaults to `[10, 20, 50, 100]`.
*/
itemsPerPageOptions?: number[];
/**
* The list of items to paginate.
*/
rows: ArrayOrDataArray<T>;
}
/**
* Options for rendering a paginated element using the Dataview API.
*/
export interface RenderPaginatedOptions<T> {
/**
* The DataviewInlineApi instance.
*/
dv: DataviewInlineApi;
/**
* Options for items per page.
*/
itemsPerPageOptions: number[];
/**
* The renderer function to display the paginated content.
*
* @param rowsForOnePage - The rows to render.
* @returns A {@link Promise} that resolves when the content is rendered.
*/
renderer: (rowsForOnePage: ArrayOrDataArray<T>) => Promisable<void>;
/**
* The rows to paginate.
*/
rows: ArrayOrDataArray<T>;
}
/**
* Options for rendering a paginated table using the Dataview API.
*/
export interface RenderPaginatedTableOptions<T> {
/**
* The DataviewInlineApi instance.
*/
dv: DataviewInlineApi;
/**
* The headers of the table.
*/
headers: string[];
/**
* Options for items per page. Defaults to `[10, 20, 50, 100]`.
*/
itemsPerPageOptions?: number[];
/**
* The rows of the table to paginate.
*/
rows: ArrayOrDataArray<T>;
}
/**
* Renders the content using the provided renderer function in a temporary container,
* and then returns the container.
*
* @param dv - The DataviewInlineApi instance.
* @param renderer - The function responsible for rendering the content.
* @returns A {@link Promise} that resolves to the HTML paragraph element
* that was used as the temporary container.
*/
export declare function getRenderedContainer(dv: DataviewInlineApi, renderer: () => Promisable<void>): Promise<HTMLParagraphElement>;
/**
* Inserts a code block into the specified Dataview instance using the provided language and code.
*
* @param dv - The DataviewInlineApi instance to insert the code block into.
* @param language - The language identifier for the code block.
* @param code - The code content to be inserted into the code block.
*/
export declare function insertCodeBlock(dv: DataviewInlineApi, language: string, code: string): void;
/**
* Renders an iframe in the Dataview container with the specified relative path, width, and height.
*
* @param options - The options for rendering the iframe.
*/
export declare function renderIframe(options: RenderIframeOptions): void;
/**
* Renders a paginated list using the provided DataviewInlineApi instance.
*
* @typeParam T - The type of items in the list.
*
* @param options - The options for rendering the paginated list.
*
* @returns A {@link Promise} that resolves when the list is rendered.
*/
export declare function renderPaginatedList<T>(options: RenderPaginatedListOptions<T>): Promise<void>;
/**
* Renders a paginated table using the provided DataviewInlineApi instance.
*
* @typeParam T - The type of items in the table rows.
*
* @param options - The options for rendering the paginated table.
*
* @returns A {@link Promise} that resolves when the table is rendered.
*/
export declare function renderPaginatedTable<T extends unknown[]>(options: RenderPaginatedTableOptions<T>): Promise<void>;