@blinkk/selective-edit
Version:
Selective structured text editor.
188 lines (187 loc) • 7.43 kB
TypeScript
import { DeepObject } from '../../utility/deepObject';
import { Field, FieldComponent, FieldConfig } from '../field';
import { GlobalConfig, SelectiveEditor } from '../editor';
import { SortableFieldComponent } from '../../mixins/sortable';
import { TemplateResult } from 'lit-html';
import { Actions } from '../../utility/actions';
import { Base } from '../../mixins';
import { FieldsComponent } from '../fields';
import { PreviewTypes } from '../../utility/preview';
import { Types } from '../types';
export interface ListFieldConfig extends FieldConfig {
/**
* Label for adding more list items.
*/
addLabel?: string;
/**
* Label for when the list is empty.
*/
emptyLabel?: string;
/**
* Are the fields complex?
*
* When set to true, the list will not use the 'Simple' mode
* for showing list items when there is only one field configured
* in the fields config.
*/
isComplex?: boolean;
/**
* Field definitions for each item in the list.
*/
fields?: Array<FieldConfig>;
/**
* Preview field key.
*
* When showing a preview of the list items, use this key to determine
* the value to show for the preview.
*/
previewField?: string;
/**
* Preview field keys.
*
* When showing a preview of the list items, use these keys to determine
* the value to show for the preview.
*/
previewFields?: Array<string>;
/**
* Control how the editor displays the preview for the list items.
*/
previewType?: PreviewTypes;
}
export interface ListFieldComponent extends FieldComponent {
/**
* Allow simple display for fields in the list.
*
* For complex fields it is better to not allow the simple view
* since it makes the list crowded and hard to read. (ex: media field)
*/
allowSimple: boolean;
/**
* Can the list add more items?
*/
allowAdd?: boolean;
/**
* Can the list remove items?
*/
allowRemove?: boolean;
/**
* Handle adding a new item to the list.
* @param evt Event triggering the add.
* @param editor Editor instance.
* @param data Data object.
*/
handleAddItem(evt: Event, editor: SelectiveEditor, data: DeepObject): void;
/**
* Event handler for deleting items.
*
* @param evt Click event from delete action.
* @param index Item index being deleted.
*/
handleDeleteItem(evt: Event, index: number): void;
/**
* Number of items in the list.
*/
length: number;
}
export interface ListItemComponent {
listField: ListFieldComponent & SortableFieldComponent;
fields: FieldsComponent;
/**
* Event handler for hovering off an item.
*
* @param evt Event from mouse action.
* @param index Item index.
*/
handleHoverOffItem(evt: MouseEvent, index: number): void;
/**
* Event handler for hovering over an item.
*
* @param evt Event from mouse action.
* @param index Item index.
*/
handleHoverOnItem(evt: MouseEvent, index: number): void;
isExpanded: boolean;
template: (editor: SelectiveEditor, data: DeepObject, index: number) => TemplateResult;
uid: string;
}
export interface ListItemConstructor {
new (listField: ListFieldComponent & SortableFieldComponent, fields: FieldsComponent): ListItemComponent;
}
declare const ListField_base: {
new (...args: any[]): {
_sortableUi?: import("../../mixins/sortable").SortableUiComponent | undefined;
sortableUi: import("../../mixins/sortable").SortableUiComponent;
};
} & typeof Field;
export declare class ListField extends ListField_base implements ListFieldComponent {
config: ListFieldConfig;
protected items: Array<ListItemComponent> | null;
protected ListItemCls: ListItemConstructor;
usingAutoFields: boolean;
constructor(types: Types, config: ListFieldConfig, globalConfig: GlobalConfig, fieldType?: string);
get allowAdd(): boolean;
get allowRemove(): boolean;
/**
* Does the list allow for showing simple fields?
*/
get allowSimple(): boolean;
protected createFields(fieldConfigs: Array<any>): FieldsComponent;
protected ensureItems(editor: SelectiveEditor): Array<ListItemComponent>;
handleAddItem(evt: Event, editor: SelectiveEditor, data: DeepObject): void;
handleDeleteItem(evt: Event, index: number): void;
handleSort(startIndex: number, endIndex: number): void;
get isClean(): boolean;
/**
* Check if the data format is invalid for what the field expects to edit.
*/
get isDataFormatValid(): boolean;
get isValid(): boolean;
/**
* Length of the list.
*/
get length(): number;
templateEmpty(editor: SelectiveEditor, data: DeepObject, index: number): TemplateResult;
templateFooter(editor: SelectiveEditor, data: DeepObject): TemplateResult;
templateHeader(editor: SelectiveEditor, data: DeepObject): TemplateResult;
templateInput(editor: SelectiveEditor, data: DeepObject): TemplateResult;
get value(): any;
}
declare const ListFieldItem_base: {
new (...args: any[]): {
_uuid?: string | undefined;
readonly uuid: string;
readonly uid: string;
};
} & typeof Base;
export declare class ListFieldItem extends ListFieldItem_base implements ListItemComponent {
listField: ListFieldComponent & SortableFieldComponent;
fields: FieldsComponent;
isExpanded: boolean;
constructor(listField: ListFieldComponent & SortableFieldComponent, fields: FieldsComponent);
actionsCollapsedPre(editor: SelectiveEditor, data: DeepObject, index: number): Actions;
actionsCollapsedPost(editor: SelectiveEditor, data: DeepObject, index: number): Actions;
actionsExpandedPre(editor: SelectiveEditor, data: DeepObject, index: number): Actions;
actionsExpandedPost(editor: SelectiveEditor, data: DeepObject, index: number): Actions;
actionsSimplePre(editor: SelectiveEditor, data: DeepObject, index: number): Actions;
actionsSimplePost(editor: SelectiveEditor, data: DeepObject, index: number): Actions;
classesCollpased(editor: SelectiveEditor, data: DeepObject, index: number): Record<string, boolean>;
classesExpanded(editor: SelectiveEditor, data: DeepObject, index: number): Record<string, boolean>;
classesSimple(editor: SelectiveEditor, data: DeepObject, index: number): Record<string, boolean>;
handleCollapseItem(): void;
handleExpandItem(): void;
handleHoverOffItem(evt: MouseEvent, index: number): void;
handleHoverOnItem(evt: MouseEvent, index: number): void;
template(editor: SelectiveEditor, data: DeepObject, index: number): TemplateResult;
templateCollapsed(editor: SelectiveEditor, data: DeepObject, index: number): TemplateResult;
templateExpanded(editor: SelectiveEditor, data: DeepObject, index: number): TemplateResult;
/**
* Template for how to render a preview.
*
* @param editor Selective editor used to render the template.
* @param data Data provided to render the template.
*/
templatePreviewValue(editor: SelectiveEditor, data: DeepObject, index?: number): TemplateResult;
templateRemove(editor: SelectiveEditor, data: DeepObject, index: number): TemplateResult;
templateSimple(editor: SelectiveEditor, data: DeepObject, index: number): TemplateResult;
}
export {};