UNPKG

6.82 kBTypeScriptView Raw
1/**
2 * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved.
3 * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4 */
5/**
6 * @module list/documentlist/utils/model
7 */
8import type { DocumentFragment, Element, Model, Node, Writer, Item } from 'ckeditor5/src/engine';
9import { type ArrayOrItem } from 'ckeditor5/src/utils';
10/**
11 * The list item ID generator.
12 *
13 * @internal
14 */
15export declare class ListItemUid {
16 /**
17 * Returns the next ID.
18 *
19 * @internal
20 */
21 static next(): string;
22}
23/**
24 * An {@link module:engine/model/element~Element} that is known to be a list element.
25 *
26 * @internal
27 */
28export interface ListElement extends Element {
29 getAttribute(key: 'listItemId'): string;
30 getAttribute(key: 'listIndent'): number;
31 getAttribute(key: 'listType'): 'numbered' | 'bulleted';
32 getAttribute(key: string): unknown;
33}
34/**
35 * Returns true if the given model node is a list item block.
36 *
37 * @internal
38 */
39export declare function isListItemBlock(node: Item | DocumentFragment | null): node is ListElement;
40/**
41 * Returns an array with all elements that represents the same list item.
42 *
43 * It means that values for `listIndent`, and `listItemId` for all items are equal.
44 *
45 * @internal
46 * @param listItem Starting list item element.
47 * @param options.higherIndent Whether blocks with a higher indent level than the start block should be included
48 * in the result.
49 */
50export declare function getAllListItemBlocks(listItem: Node, options?: {
51 higherIndent?: boolean;
52}): Array<ListElement>;
53/**
54 * Returns an array with elements that represents the same list item in the specified direction.
55 *
56 * It means that values for `listIndent` and `listItemId` for all items are equal.
57 *
58 * **Note**: For backward search the provided item is not included, but for forward search it is included in the result.
59 *
60 * @internal
61 * @param listItem Starting list item element.
62 * @param options.direction Walking direction.
63 * @param options.higherIndent Whether blocks with a higher indent level than the start block should be included in the result.
64 */
65export declare function getListItemBlocks(listItem: Node, options?: {
66 direction?: 'forward' | 'backward';
67 higherIndent?: boolean;
68}): Array<ListElement>;
69/**
70 * Returns a list items nested inside the given list item.
71 *
72 * @internal
73 */
74export declare function getNestedListBlocks(listItem: Element): Array<ListElement>;
75/**
76 * Returns array of all blocks/items of the same list as given block (same indent, same type and properties).
77 *
78 * @internal
79 * @param listItem Starting list item element.
80 */
81export declare function getListItems(listItem: Element): Array<ListElement>;
82/**
83 * Check if the given block is the first in the list item.
84 *
85 * @internal
86 * @param listBlock The list block element.
87 */
88export declare function isFirstBlockOfListItem(listBlock: Node): boolean;
89/**
90 * Check if the given block is the last in the list item.
91 *
92 * @internal
93 */
94export declare function isLastBlockOfListItem(listBlock: Element): boolean;
95/**
96 * Expands the given list of selected blocks to include the leading and tailing blocks of partially selected list items.
97 *
98 * @internal
99 * @param blocks The list of selected blocks.
100 * @param options.withNested Whether should include nested list items.
101 */
102export declare function expandListBlocksToCompleteItems(blocks: ArrayOrItem<Element>, options?: {
103 withNested?: boolean;
104}): Array<ListElement>;
105/**
106 * Expands the given list of selected blocks to include all the items of the lists they're in.
107 *
108 * @internal
109 * @param blocks The list of selected blocks.
110 */
111export declare function expandListBlocksToCompleteList(blocks: ArrayOrItem<Element>): Array<ListElement>;
112/**
113 * Splits the list item just before the provided list block.
114 *
115 * @internal
116 * @param listBlock The list block element.
117 * @param writer The model writer.
118 * @returns The array of updated blocks.
119 */
120export declare function splitListItemBefore(listBlock: Element, writer: Writer): Array<ListElement>;
121/**
122 * Merges the list item with the parent list item.
123 *
124 * @internal
125 * @param listBlock The list block element.
126 * @param parentBlock The list block element to merge with.
127 * @param writer The model writer.
128 * @returns The array of updated blocks.
129 */
130export declare function mergeListItemBefore(listBlock: Node, parentBlock: Element, writer: Writer): Array<ListElement>;
131/**
132 * Increases indentation of given list blocks.
133 *
134 * @internal
135 * @param blocks The block or iterable of blocks.
136 * @param writer The model writer.
137 * @param options.expand Whether should expand the list of blocks to include complete list items.
138 * @param options.indentBy The number of levels the indentation should change (could be negative).
139 */
140export declare function indentBlocks(blocks: ArrayOrItem<ListElement>, writer: Writer, { expand, indentBy }?: {
141 expand?: boolean;
142 indentBy?: number;
143}): Array<ListElement>;
144/**
145 * Decreases indentation of given list of blocks. If the indentation of some blocks matches the indentation
146 * of surrounding blocks, they get merged together.
147 *
148 * @internal
149 * @param blocks The block or iterable of blocks.
150 * @param writer The model writer.
151 */
152export declare function outdentBlocksWithMerge(blocks: ArrayOrItem<ListElement>, writer: Writer): Array<ListElement>;
153/**
154 * Removes all list attributes from the given blocks.
155 *
156 * @internal
157 * @param blocks The block or iterable of blocks.
158 * @param writer The model writer.
159 * @returns Array of altered blocks.
160 */
161export declare function removeListAttributes(blocks: ArrayOrItem<Element>, writer: Writer): Array<Element>;
162/**
163 * Checks whether the given blocks are related to a single list item.
164 *
165 * @internal
166 * @param blocks The list block elements.
167 */
168export declare function isSingleListItem(blocks: Array<Node>): boolean;
169/**
170 * Modifies the indents of list blocks following the given list block so the indentation is valid after
171 * the given block is no longer a list item.
172 *
173 * @internal
174 * @param lastBlock The last list block that has become a non-list element.
175 * @param writer The model writer.
176 * @returns Array of altered blocks.
177 */
178export declare function outdentFollowingItems(lastBlock: Element, writer: Writer): Array<ListElement>;
179/**
180 * Returns the array of given blocks sorted by model indexes (document order).
181 *
182 * @internal
183 */
184export declare function sortBlocks<T extends Element>(blocks: Iterable<T>): Array<T>;
185/**
186 * Returns a selected block object. If a selected object is inline or when there is no selected
187 * object, `null` is returned.
188 *
189 * @internal
190 * @param model The instance of editor model.
191 * @returns Selected block object or `null`.
192 */
193export declare function getSelectedBlockObject(model: Model): Element | null;