ФреймворкJavaScript
Таблица: объединённые ячейки и контент ячеек
Полнофункциональный блок таблицы. Каждая ячейка содержит собственный редактор блоков (любой тип блока, кроме `header`, `table` и `column_list` — они всегда запрещены внутри ячеек). Поддерживаются объединение и разделение ячеек (`colspan`/`rowspan`, перекрытые ячейки записываются как `mergedInto`), строки заголовков, столбцы заголовков, изменение ширины столбцов, цвет фона и текста ячеек, элементы управления для добавления и удаления строк и столбцов, копирование и вставка, а также переключение плотности текста (компактная или комфортная) в меню настроек блока.
Импорт
TypeScript
import { Table } from '@bloklabs/core/tools';Конфигурация
| Опция | Тип | По умолчанию | Описание |
|---|---|---|---|
rows | number | 3 | Начальное количество строк при вставке новой таблицы. |
cols | number | 3 | Начальное количество столбцов при вставке новой таблицы. |
withHeadings | boolean | false | Оформлять ли первую строку как строку заголовков по умолчанию. |
withHeadingColumn | boolean | false | Оформлять ли первый столбец как столбец заголовков по умолчанию. |
stretched | boolean | false | Если true, таблица по умолчанию занимает всю ширину редактора. |
restrictedTools | string[] | [] | Дополнительные имена инструментов, которые нельзя вставлять в ячейки таблицы. |
Формат данных
TypeScript
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
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]
}JSON
{
"id": "jkl012",
"type": "table",
"data": {
"withHeadings": true,
"withHeadingColumn": false,
"content": [
[{ "blocks": ["block1"] }, { "blocks": ["block2"] }],
[{ "blocks": ["block3"] }, { "blocks": ["block4"] }]
]
}
}Пример использования
TypeScript
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,
},
},
});