///
import { Subscribable } from 'rxjs';
import { SchemaType, SanityDocument } from '@sanity/types';
import { InitialValueTemplateItem, StructureBuilder } from '@sanity/structure';
export interface PreviewValue {
id?: string;
subtitle?: React.ReactNode;
title?: React.ReactNode;
media?: React.ReactNode | React.ComponentType;
icon?: boolean;
type?: string;
displayOptions?: {
showIcon?: boolean;
};
schemaType?: {
name?: string;
};
}
export declare type DeskToolPaneActionHandler = (params: any, scope?: unknown) => void;
/**
* Represents the state of the `panes` inside the desk-tool router
*
* - The desk tool stores the state of the current panes inside of the router.
* - The panes are stored in groups delimited in the URL by `;`.
* - In each group, there can be one or more sibling (aka split) panes delimited
* by `|`.
* - Each item pane can contain it's own parameters and payloads
* - Per item pane in each group, if not specified separately, the ID, params,
* and payload will be inherited from the first item pane in the pane group
* (unless it's an `exclusiveParam`)
*
* E.g. `/desk/books;book-123|,view=preview` will parse to:
*
* ```js
* [
* // first pane group
* [{id: 'book'}],
*
* // second pane group
* [
* [
* // first pane item
* {id: 'book-123'},
* // second pane item
* {id: 'book-123', params: {view: 'preview'}},
* ],
* ],
* ]
* ```
*
* see [`packages/@sanity/desk-tool/src/utils/parsePanesSegment.ts`][0]
*
* [0]: https://github.com/sanity-io/sanity/blob/287d308442938c98cbec4608d159401631792d7a/packages/%40sanity/desk-tool/src/utils/parsePanesSegment.ts#L71-L88
*/
export declare type RouterPanes = RouterPaneGroup[];
/**
* Represents a "pane group" in the router.
*
* @see RouterPanes
*/
export declare type RouterPaneGroup = RouterPaneSibling[];
/**
* Represents a "sibling pane" or "split pane" in the router.
*
* @see RouterPanes
*/
export interface RouterPaneSibling {
id: string;
params?: Record;
payload?: unknown;
}
/**
* Passed as the second argument to the item of resolving pane children
*
* @see RouterPanes
*/
export interface RouterPaneSiblingContext {
id: string;
parent: PaneNode | null;
index: number;
splitIndex: number;
path: string[];
params: Record;
payload: unknown;
serializeOptions?: {
path: (string | number)[];
index?: number;
hint?: string;
};
}
declare type MenuItem = ReturnType['serialize']>;
/**
* Represents what can be passed into `menuItems` inside of desk-tool panes
*
* @see BaseResolvedPaneNode
*/
export interface PaneMenuItem extends MenuItem {
isDisabled?: boolean;
shortcut?: string;
}
export interface PaneMenuItemGroup {
id: string;
title?: string;
}
interface BaseResolvedPaneNode {
id: string;
type: T;
title: string;
menuItems?: PaneMenuItem[];
menuItemGroups?: PaneMenuItemGroup[];
canHandleIntent?: (intentName: string, params: Record, options: {
pane: PaneNode;
index: number;
}) => boolean;
child?: UnresolvedPaneNode;
}
export interface CustomComponentPaneNode extends BaseResolvedPaneNode<'component'> {
component: React.ComponentType | React.ReactNode;
/**
* An experimental flag that can be used to opt out of the forced refresh when
* the `itemId` or `childItemId` changes. See `UserComponentPane`:
* https://github.com/sanity-io/sanity/commit/8340a003043edf6de3afd9ff628ce93be79978e2
*/
__preserveInstance?: boolean;
}
export interface CustomComponentPaneNodeProps {
id: string;
childItemId: string;
itemId: string;
paneKey: string;
urlParams: Record;
isActive: boolean;
isSelected: boolean;
}
export declare type PaneView = {
id: string;
type: 'form';
title: string;
icon?: React.ComponentType;
} | {
id: string;
type: 'component';
title: string;
icon?: React.ComponentType;
options?: TOptions;
component?: React.ComponentType<{
documentId: string;
options?: TOptions;
schemaType: SchemaType;
document: {
draft: SanityDocument | null;
displayed: Partial;
historical: Partial | null;
published: SanityDocument | null;
};
}>;
};
export interface DocumentPaneNode extends BaseResolvedPaneNode<'document'> {
options: {
id: string;
type: string;
template?: string;
templateParameters?: Record;
};
views?: PaneView[];
}
export interface DocumentListPaneNode extends BaseResolvedPaneNode<'documentList'> {
defaultLayout?: 'default' | 'detail' | 'card' | 'media';
displayOptions?: {
showIcons?: boolean;
};
initialValueTemplates?: InitialValueTemplateItem[];
options: {
filter: string;
defaultOrdering?: Array<{
field: string;
direction: 'asc' | 'desc';
}>;
params?: Record;
apiVersion?: string;
};
schemaTypeName: string;
}
export interface PaneListItem {
type: 'listItem';
id: string;
_id?: string;
schemaType?: SchemaType;
title: string;
icon?: React.ComponentType | false;
displayOptions?: {
showIcon?: boolean;
};
action?: (t: TParams) => unknown;
params?: TParams;
}
export interface PaneListItemDivider {
type: 'divider';
}
export interface ListPaneNode extends BaseResolvedPaneNode<'list'> {
defaultLayout?: 'inline' | 'block' | 'default' | 'card' | 'media' | 'detail';
displayOptions?: {
showIcons?: boolean;
};
items?: Array;
}
export declare type PaneNode = CustomComponentPaneNode | DocumentPaneNode | DocumentListPaneNode | ListPaneNode;
export declare type SerializablePaneNode = {
serialize(context: RouterPaneSiblingContext): UnresolvedPaneNode;
};
export declare type PaneNodeResolver = (id: string, context: RouterPaneSiblingContext) => UnresolvedPaneNode;
export declare type UnresolvedPaneNode = PaneNodeResolver | SerializablePaneNode | Subscribable | PromiseLike | PaneNode;
export {};
//# sourceMappingURL=types.d.ts.map