Таблица: объединённые ячейки и контент ячеек
Полнофункциональный блок таблицы. Каждая ячейка содержит собственный редактор блоков. В ячейке допустим любой тип блока, кроме header, table и column_list: они всегда запрещены внутри ячеек.
Поддерживаются объединение и разделение ячеек. Для этого используются colspan/rowspan, а перекрытые ячейки записываются как mergedInto.
- Есть строки заголовков, столбцы заголовков и изменение ширины столбцов.
- Поддерживаются цвет фона и текста ячеек.
- Есть элементы управления для добавления и удаления строк и столбцов, а также копирование и вставка.
В меню настроек блока есть переключение плотности текста: компактная или комфортная.
Импорт
import { Table } from '@bloklabs/core/tools';Конфигурация
| Опция | Тип | По умолчанию | Описание |
|---|---|---|---|
rows | number | 3 | Начальное количество строк при вставке новой таблицы. |
cols | number | 3 | Начальное количество столбцов при вставке новой таблицы. |
withHeadings | boolean | false | Оформлять ли первую строку как строку заголовков по умолчанию. |
withHeadingColumn | boolean | false | Оформлять ли первый столбец как столбец заголовков по умолчанию. |
stretched | boolean | false | Если true, таблица по умолчанию занимает всю ширину редактора. |
restrictedTools | string[] | [] | Дополнительные имена инструментов, которые нельзя вставлять в ячейки таблицы. |
Формат данных
interface TableData {
withHeadings: boolean; // First row is a heading row
withHeadingColumn: boolean; // First column is a heading column
stretched?: boolean;
content: CellContent[][]; // 2D array of cell content
colWidths?: number[]; // Column widths in pixels
initialColWidth?: number; // Per-column width in px captured at creation; new columns get initialColWidth / 2
textSize?: 'compact' | 'comfortable'; // Cell text density; omitted = 'compact' (small text)
}
// Each cell:
interface CellContent {
blocks: string[]; // IDs of child blocks in this cell
id?: string; // Column id, the same on every cell of the column; minted on load when missing
rowId?: string; // Row id, the same on every cell of the row; minted on load when missing
color?: string; // Cell background colour
textColor?: string; // Cell text colour
placement?: CellPlacement; // 9-way vertical+horizontal alignment (e.g. 'top-left', 'middle-center')
colspan?: number; // Columns this cell spans (origin cells only)
rowspan?: number; // Rows this cell spans (origin cells only)
mergedInto?: [number, number]; // Set when covered by a merge; origin cell at [row, col]
}{
"id": "jkl012",
"type": "table",
"data": {
"withHeadings": true,
"withHeadingColumn": false,
"content": [
[{ "blocks": ["block1"] }, { "blocks": ["block2"] }],
[{ "blocks": ["block3"] }, { "blocks": ["block4"] }]
]
}
}Пример использования
import { Blok } from '@bloklabs/core';
import { Table } from '@bloklabs/core/tools';
const editor = new Blok({
holder: 'editor',
tools: {
table: {
class: Table,
rows: 3,
cols: 3,
withHeadings: true,
},
},
});