@ckeditor/ckeditor5-table 0.0.0-nightly-next-20260127.0 → 0.0.0-nightly-next-20260128.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -47,6 +47,7 @@
47
47
  "table",
48
48
  "thead",
49
49
  "tbody",
50
+ "tfoot",
50
51
  "tr"
51
52
  ]
52
53
  },
@@ -2,21 +2,7 @@
2
2
  * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
- import type { TableConfig, Table, TableCaption, TableCaptionEditing, TableCaptionUI, TableCellProperties, TableCellPropertiesEditing, TableCellPropertiesUI, TableCellWidthEditing, TableClipboard, TableColumnResize, TableColumnResizeEditing, TableEditing, TableKeyboard, TableLayout, TableLayoutEditing, TableMouse, TableProperties, TablePropertiesEditing, TablePropertiesUI, TableSelection, TableToolbar, TableUI, TableUtils, PlainTableOutput, InsertColumnCommand, InsertRowCommand, InsertTableCommand, InsertTableLayoutCommand, MergeCellCommand, MergeCellsCommand, RemoveColumnCommand, RemoveRowCommand, SelectColumnCommand, SelectRowCommand, SetHeaderColumnCommand, SetHeaderRowCommand, TableTypeCommand, SplitCellCommand, ToggleTableCaptionCommand, TableCellBackgroundColorCommand, TableCellBorderColorCommand, TableCellBorderStyleCommand, TableCellBorderWidthCommand, TableCellHeightCommand, TableCellHorizontalAlignmentCommand, TableCellPaddingCommand, TableCellVerticalAlignmentCommand, TableCellWidthCommand, TableAlignmentCommand, TableBackgroundColorCommand, TableBorderColorCommand, TableBorderStyleCommand, TableBorderWidthCommand, TableHeightCommand, TableWidthCommand, TableCellTypeCommand } from './index.js';
6
- declare module '@ckeditor/ckeditor5-engine' {
7
- interface ExperimentalFlagsConfig {
8
- /**
9
- * When enabled, the {@link module:table/tableproperties/tablepropertiesediting~TablePropertiesEditing table properties feature}
10
- * and {@link module:table/tablecellproperties/tablecellpropertiesediting~TableCellPropertiesEditing table cell properties feature}
11
- * upcast `border="0"` attributes on `<table>` and `<td>`/`<th>` elements as `tableBorderStyle` and `tableCellBorderStyle` styles
12
- * with value set to `none`.
13
- *
14
- * This is useful when migrating content from the CKEditor 4, which used `border="0"` to represent tables and cells without borders.
15
- * This will be enabled by default in the future CKEditor 5 releases.
16
- */
17
- upcastTableBorderZeroAttributes?: boolean;
18
- }
19
- }
5
+ import type { TableConfig, Table, TableCaption, TableCaptionEditing, TableCaptionUI, TableCellProperties, TableCellPropertiesEditing, TableCellPropertiesUI, TableCellWidthEditing, TableClipboard, TableColumnResize, TableColumnResizeEditing, TableEditing, TableKeyboard, TableLayout, TableLayoutEditing, TableMouse, TableProperties, TablePropertiesEditing, TablePropertiesUI, TableSelection, TableToolbar, TableUI, TableUtils, PlainTableOutput, InsertColumnCommand, InsertRowCommand, InsertTableCommand, InsertTableLayoutCommand, MergeCellCommand, MergeCellsCommand, RemoveColumnCommand, RemoveRowCommand, SelectColumnCommand, SelectRowCommand, SetHeaderColumnCommand, SetHeaderRowCommand, TableTypeCommand, SplitCellCommand, ToggleTableCaptionCommand, TableCellBackgroundColorCommand, TableCellBorderColorCommand, TableCellBorderStyleCommand, TableCellBorderWidthCommand, TableCellHeightCommand, TableCellHorizontalAlignmentCommand, TableCellPaddingCommand, TableCellVerticalAlignmentCommand, TableCellWidthCommand, TableAlignmentCommand, TableBackgroundColorCommand, TableBorderColorCommand, TableBorderStyleCommand, TableBorderWidthCommand, TableHeightCommand, TableWidthCommand, TableCellTypeCommand, SetFooterRowCommand } from './index.js';
20
6
  declare module '@ckeditor/ckeditor5-core' {
21
7
  interface EditorConfig {
22
8
  /**
@@ -70,6 +56,7 @@ declare module '@ckeditor/ckeditor5-core' {
70
56
  selectTableRow: SelectRowCommand;
71
57
  setTableColumnHeader: SetHeaderColumnCommand;
72
58
  setTableRowHeader: SetHeaderRowCommand;
59
+ setTableFooterRow: SetFooterRowCommand;
73
60
  splitTableCellVertically: SplitCellCommand;
74
61
  splitTableCellHorizontally: SplitCellCommand;
75
62
  toggleTableCaption: ToggleTableCaptionCommand;
@@ -33,6 +33,9 @@ export declare class InsertTableCommand extends Command {
33
33
  * {@link module:table/tableconfig~TableConfig#defaultHeadings `config.table.defaultHeadings.rows`} table config.
34
34
  * @param options.headingColumns The number of heading columns. If not provided it will default to
35
35
  * {@link module:table/tableconfig~TableConfig#defaultHeadings `config.table.defaultHeadings.columns`} table config.
36
+ * @param options.footerRows The number of footer rows. If not provided it will default to
37
+ * {@link module:table/tableconfig~TableConfig#defaultFooters `config.table.defaultFooters`} table config.
38
+ * This option is ignored when {@link module:table/tableconfig~TableConfig#enableFooters `config.table.enableFooters`} is `false`.
36
39
  * @fires execute
37
40
  */
38
41
  execute(options?: {
@@ -40,5 +43,6 @@ export declare class InsertTableCommand extends Command {
40
43
  columns?: number;
41
44
  headingRows?: number;
42
45
  headingColumns?: number;
46
+ footerRows?: number;
43
47
  }): void;
44
48
  }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
+ */
5
+ /**
6
+ * @module table/commands/setfooterrowcommand
7
+ */
8
+ import { Command } from '@ckeditor/ckeditor5-core';
9
+ /**
10
+ * The footer row command.
11
+ *
12
+ * The command is registered by {@link module:table/tableediting~TableEditing} as the `'setTableFooterRow'` editor command.
13
+ *
14
+ * You can make the row containing the selected cell a footer by executing:
15
+ *
16
+ * ```ts
17
+ * editor.execute( 'setTableFooterRow' );
18
+ * ```
19
+ *
20
+ * **Note:** All following rows will also become footers. If the current row is already a footer, executing this command
21
+ * will make it a regular row back again (including the preceding rows).
22
+ */
23
+ export declare class SetFooterRowCommand extends Command {
24
+ /**
25
+ * Flag indicating whether the command is active. The command is active when the
26
+ * {@link module:engine/model/selection~ModelSelection} is in a footer row.
27
+ *
28
+ * @observable
29
+ */
30
+ value: boolean;
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ refresh(): void;
35
+ /**
36
+ * Executes the command.
37
+ *
38
+ * When the selection is in a non-footer row, the command will set the `footerRows` table attribute to cover that row.
39
+ *
40
+ * When the selection is already in a footer row, it will set `footerRows` so the footer section will start after that row.
41
+ *
42
+ * @fires execute
43
+ * @param options.forceValue If set, the command will set (`true`) or unset (`false`) the footer rows according to
44
+ * the `forceValue` parameter instead of the current model state.
45
+ */
46
+ execute(options?: {
47
+ forceValue?: boolean;
48
+ }): void;
49
+ /**
50
+ * Checks if a table cell is in the footer section.
51
+ */
52
+ private _isInFooter;
53
+ }
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import { type Editor } from '@ckeditor/ckeditor5-core';
9
9
  import type { ViewElement, ModelElement, DowncastElementCreatorFunction, DowncastConversionApi } from '@ckeditor/ckeditor5-engine';
10
- import { type TableUtils } from '../tableutils.js';
10
+ import { TableUtils } from '../tableutils.js';
11
11
  import type { TableConversionAdditionalSlot } from '../tableediting.js';
12
12
  /**
13
13
  * Model table element to view table element conversion helper.
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
3
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
+ */
5
+ /**
6
+ * @module table/converters/table-structure-post-fixer
7
+ */
8
+ import type { Editor } from '@ckeditor/ckeditor5-core';
9
+ /**
10
+ * Injects a table structure post-fixer into the model.
11
+ *
12
+ * It checks if the `headingRows` and `footerRows` attributes do not overlap.
13
+ * If they overlap, the `footerRows` attribute is corrected.
14
+ *
15
+ * We prefer `headingRows` over `footerRows` because changing `headingRows` would require updating
16
+ * the `tableCellType` attribute of the cells in the row, which is not required when changing `footerRows`.
17
+ *
18
+ * @param editor The editor instance.
19
+ */
20
+ export declare function injectTableStructurePostFixer(editor: Editor): void;
@@ -3,7 +3,7 @@
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
4
4
  */
5
5
  /**
6
- * @module table/converters/table-headings-refresh-handler
6
+ * @module table/converters/table-structure-refresh-handler
7
7
  */
8
8
  import type { EditingController, Model } from '@ckeditor/ckeditor5-engine';
9
9
  /**
@@ -16,4 +16,4 @@ import type { EditingController, Model } from '@ckeditor/ckeditor5-engine';
16
16
  *
17
17
  * @internal
18
18
  */
19
- export declare function tableHeadingsRefreshHandler(model: Model, editing: EditingController): void;
19
+ export declare function tableStructureRefreshHandler(model: Model, editing: EditingController): void;
@@ -27,10 +27,14 @@ export declare function upcastTableFigure(): (dispatcher: UpcastDispatcher) => v
27
27
  *
28
28
  * This conversion helper converts the table element as well as table rows.
29
29
  *
30
+ * @param options Conversion options.
31
+ * @param options.enableFooters If set to `true` the `footerRows` attribute will be upcasted.
30
32
  * @returns Conversion helper.
31
33
  * @internal
32
34
  */
33
- export declare function upcastTable(): (dispatcher: UpcastDispatcher) => void;
35
+ export declare function upcastTable(options: {
36
+ enableFooters?: boolean;
37
+ }): (dispatcher: UpcastDispatcher) => void;
34
38
  /**
35
39
  * A conversion helper that skips empty <tr> elements from upcasting at the beginning of the table.
36
40
  *
@@ -34,17 +34,21 @@
34
34
  border:1px double hsl(0, 0%, 70%);
35
35
  }
36
36
 
37
- .ck-content table.table:not(.layout-table) > thead > tr > th, .ck-content figure.table:not(.layout-table) > table > thead > tr > th, .ck-content table.table:not(.layout-table) > tbody > tr > th, .ck-content figure.table:not(.layout-table) > table > tbody > tr > th{
37
+ .ck-content table.table:not(.layout-table) > thead > tr > th, .ck-content figure.table:not(.layout-table) > table > thead > tr > th, .ck-content table.table:not(.layout-table) > tfoot > tr > th, .ck-content figure.table:not(.layout-table) > table > tfoot > tr > th, .ck-content table.table:not(.layout-table) > tbody > tr > th, .ck-content figure.table:not(.layout-table) > table > tbody > tr > th{
38
38
  font-weight:bold;
39
39
  background:hsla(0, 0%, 0%, 5%);
40
40
  }
41
41
 
42
42
  .ck-content table.table:not(.layout-table) > thead > tr > td,
43
43
  .ck-content figure.table:not(.layout-table) > table > thead > tr > td,
44
+ .ck-content table.table:not(.layout-table) > tfoot > tr > td,
45
+ .ck-content figure.table:not(.layout-table) > table > tfoot > tr > td,
44
46
  .ck-content table.table:not(.layout-table) > tbody > tr > td,
45
47
  .ck-content figure.table:not(.layout-table) > table > tbody > tr > td,
46
48
  .ck-content table.table:not(.layout-table) > thead > tr > th,
47
49
  .ck-content figure.table:not(.layout-table) > table > thead > tr > th,
50
+ .ck-content table.table:not(.layout-table) > tfoot > tr > th,
51
+ .ck-content figure.table:not(.layout-table) > table > tfoot > tr > th,
48
52
  .ck-content table.table:not(.layout-table) > tbody > tr > th,
49
53
  .ck-content figure.table:not(.layout-table) > table > tbody > tr > th{
50
54
 
@@ -53,11 +57,11 @@
53
57
  border:1px solid hsl(0, 0%, 75%);
54
58
  }
55
59
 
56
- .ck-content table.table:not(.layout-table) > thead > tr > td > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > td > p:first-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > td > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > td > p:first-of-type, .ck-content table.table:not(.layout-table) > thead > tr > th > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > th > p:first-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > th > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > th > p:first-of-type{
60
+ .ck-content table.table:not(.layout-table) > thead > tr > td > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > td > p:first-of-type, .ck-content table.table:not(.layout-table) > tfoot > tr > td > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > tfoot > tr > td > p:first-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > td > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > td > p:first-of-type, .ck-content table.table:not(.layout-table) > thead > tr > th > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > th > p:first-of-type, .ck-content table.table:not(.layout-table) > tfoot > tr > th > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > tfoot > tr > th > p:first-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > th > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > th > p:first-of-type{
57
61
  margin-top:0;
58
62
  }
59
63
 
60
- .ck-content table.table:not(.layout-table) > thead > tr > td > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > td > p:last-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > td > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > td > p:last-of-type, .ck-content table.table:not(.layout-table) > thead > tr > th > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > th > p:last-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > th > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > th > p:last-of-type{
64
+ .ck-content table.table:not(.layout-table) > thead > tr > td > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > td > p:last-of-type, .ck-content table.table:not(.layout-table) > tfoot > tr > td > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > tfoot > tr > td > p:last-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > td > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > td > p:last-of-type, .ck-content table.table:not(.layout-table) > thead > tr > th > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > th > p:last-of-type, .ck-content table.table:not(.layout-table) > tfoot > tr > th > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > tfoot > tr > th > p:last-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > th > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > th > p:last-of-type{
61
65
  margin-bottom:0;
62
66
  }
63
67
 
package/dist/index.css CHANGED
@@ -57,17 +57,21 @@
57
57
 
58
58
  /* stylelint-disable no-descending-specificity */
59
59
 
60
- .ck-content table.table:not(.layout-table) > thead > tr > th, .ck-content figure.table:not(.layout-table) > table > thead > tr > th, .ck-content table.table:not(.layout-table) > tbody > tr > th, .ck-content figure.table:not(.layout-table) > table > tbody > tr > th {
60
+ .ck-content table.table:not(.layout-table) > thead > tr > th, .ck-content figure.table:not(.layout-table) > table > thead > tr > th, .ck-content table.table:not(.layout-table) > tfoot > tr > th, .ck-content figure.table:not(.layout-table) > table > tfoot > tr > th, .ck-content table.table:not(.layout-table) > tbody > tr > th, .ck-content figure.table:not(.layout-table) > table > tbody > tr > th {
61
61
  font-weight: bold;
62
62
  background: hsla(0, 0%, 0%, 5%);
63
63
  }
64
64
 
65
65
  .ck-content table.table:not(.layout-table) > thead > tr > td,
66
66
  .ck-content figure.table:not(.layout-table) > table > thead > tr > td,
67
+ .ck-content table.table:not(.layout-table) > tfoot > tr > td,
68
+ .ck-content figure.table:not(.layout-table) > table > tfoot > tr > td,
67
69
  .ck-content table.table:not(.layout-table) > tbody > tr > td,
68
70
  .ck-content figure.table:not(.layout-table) > table > tbody > tr > td,
69
71
  .ck-content table.table:not(.layout-table) > thead > tr > th,
70
72
  .ck-content figure.table:not(.layout-table) > table > thead > tr > th,
73
+ .ck-content table.table:not(.layout-table) > tfoot > tr > th,
74
+ .ck-content figure.table:not(.layout-table) > table > tfoot > tr > th,
71
75
  .ck-content table.table:not(.layout-table) > tbody > tr > th,
72
76
  .ck-content figure.table:not(.layout-table) > table > tbody > tr > th {
73
77
 
@@ -84,7 +88,7 @@
84
88
  */
85
89
  }
86
90
 
87
- .ck-content table.table:not(.layout-table) > thead > tr > td > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > td > p:first-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > td > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > td > p:first-of-type, .ck-content table.table:not(.layout-table) > thead > tr > th > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > th > p:first-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > th > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > th > p:first-of-type {
91
+ .ck-content table.table:not(.layout-table) > thead > tr > td > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > td > p:first-of-type, .ck-content table.table:not(.layout-table) > tfoot > tr > td > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > tfoot > tr > td > p:first-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > td > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > td > p:first-of-type, .ck-content table.table:not(.layout-table) > thead > tr > th > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > th > p:first-of-type, .ck-content table.table:not(.layout-table) > tfoot > tr > th > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > tfoot > tr > th > p:first-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > th > p:first-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > th > p:first-of-type {
88
92
  margin-top: 0;
89
93
  }
90
94
 
@@ -98,7 +102,7 @@
98
102
  * See: https://github.com/ckeditor/ckeditor5/pull/18801
99
103
  */
100
104
 
101
- .ck-content table.table:not(.layout-table) > thead > tr > td > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > td > p:last-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > td > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > td > p:last-of-type, .ck-content table.table:not(.layout-table) > thead > tr > th > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > th > p:last-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > th > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > th > p:last-of-type {
105
+ .ck-content table.table:not(.layout-table) > thead > tr > td > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > td > p:last-of-type, .ck-content table.table:not(.layout-table) > tfoot > tr > td > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > tfoot > tr > td > p:last-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > td > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > td > p:last-of-type, .ck-content table.table:not(.layout-table) > thead > tr > th > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > thead > tr > th > p:last-of-type, .ck-content table.table:not(.layout-table) > tfoot > tr > th > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > tfoot > tr > th > p:last-of-type, .ck-content table.table:not(.layout-table) > tbody > tr > th > p:last-of-type, .ck-content figure.table:not(.layout-table) > table > tbody > tr > th > p:last-of-type {
102
106
  margin-bottom: 0;
103
107
  }
104
108