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 table/tableconfig
|
7 | */
|
8 | import type { ToolbarConfigItem } from 'ckeditor5/src/core';
|
9 | import type { ColorOption } from 'ckeditor5/src/ui';
|
10 | /**
|
11 | * The configuration of the table feature. Used by the table feature in the `@ckeditor/ckeditor5-table` package.
|
12 | *
|
13 | * ```ts
|
14 | * ClassicEditor
|
15 | * .create( editorElement, {
|
16 | * table: ... // Table feature options.
|
17 | * } )
|
18 | * .then( ... )
|
19 | * .catch( ... );
|
20 | * ```
|
21 | *
|
22 | * See {@link module:core/editor/editorconfig~EditorConfig all editor options}.
|
23 | */
|
24 | export interface TableConfig {
|
25 | /**
|
26 | * Number of rows and columns to render by default as table heading when inserting new tables.
|
27 | *
|
28 | * You can configure it like this:
|
29 | *
|
30 | * ```ts
|
31 | * const tableConfig = {
|
32 | * defaultHeadings: {
|
33 | * rows: 1,
|
34 | * columns: 1
|
35 | * }
|
36 | * };
|
37 | * ```
|
38 | *
|
39 | * Both rows and columns properties are optional defaulting to 0 (no heading).
|
40 | */
|
41 | defaultHeadings?: {
|
42 | rows?: number;
|
43 | columns?: number;
|
44 | };
|
45 | /**
|
46 | * Items to be placed in the table content toolbar.
|
47 | * The {@link module:table/tabletoolbar~TableToolbar} plugin is required to make this toolbar work.
|
48 | *
|
49 | * Assuming that you use the {@link module:table/tableui~TableUI} feature, the following toolbar items will be available
|
50 | * in {@link module:ui/componentfactory~ComponentFactory}:
|
51 | *
|
52 | * * `'tableRow'`,
|
53 | * * `'tableColumn'`,
|
54 | * * `'mergeTableCells'`.
|
55 | *
|
56 | * You can thus configure the toolbar like this:
|
57 | *
|
58 | * ```ts
|
59 | * const tableConfig = {
|
60 | * contentToolbar: [ 'tableRow', 'tableColumn', 'mergeTableCells' ]
|
61 | * };
|
62 | * ```
|
63 | *
|
64 | * Of course, the same buttons can also be used in the
|
65 | * {@link module:core/editor/editorconfig~EditorConfig#toolbar main editor toolbar}.
|
66 | *
|
67 | * Read more about configuring the toolbar in {@link module:core/editor/editorconfig~EditorConfig#toolbar}.
|
68 | */
|
69 | contentToolbar?: Array<ToolbarConfigItem>;
|
70 | /**
|
71 | * Items to be placed in the table toolbar.
|
72 | * The {@link module:table/tabletoolbar~TableToolbar} plugin is required to make this toolbar work.
|
73 | *
|
74 | * You can thus configure the toolbar like this:
|
75 | *
|
76 | * ```ts
|
77 | * const tableConfig = {
|
78 | * tableToolbar: [ 'blockQuote' ]
|
79 | * };
|
80 | * ```
|
81 | *
|
82 | * Of course, the same buttons can also be used in the
|
83 | * {@link module:core/editor/editorconfig~EditorConfig#toolbar main editor toolbar}.
|
84 | *
|
85 | * Read more about configuring the toolbar in {@link module:core/editor/editorconfig~EditorConfig#toolbar}.
|
86 | */
|
87 | tableToolbar?: Array<ToolbarConfigItem>;
|
88 | /**
|
89 | * The configuration of the table properties user interface (balloon). It allows to define:
|
90 | *
|
91 | * * The color palette for the table border color style field (`tableProperties.borderColors`),
|
92 | * * The color palette for the table background style field (`tableProperties.backgroundColors`).
|
93 | *
|
94 | * ```ts
|
95 | * const tableConfig = {
|
96 | * tableProperties: {
|
97 | * borderColors: [
|
98 | * {
|
99 | * color: 'hsl(0, 0%, 90%)',
|
100 | * label: 'Light grey'
|
101 | * },
|
102 | * // ...
|
103 | * ],
|
104 | * backgroundColors: [
|
105 | * {
|
106 | * color: 'hsl(120, 75%, 60%)',
|
107 | * label: 'Green'
|
108 | * },
|
109 | * // ...
|
110 | * ]
|
111 | * }
|
112 | * };
|
113 | * ```
|
114 | *
|
115 | * * The default styles for tables (`tableProperties.defaultProperties`):
|
116 | *
|
117 | * ```
|
118 | * const tableConfig = {
|
119 | * tableProperties: {
|
120 | * defaultProperties: {
|
121 | * borderStyle: 'dashed',
|
122 | * borderColor: 'hsl(0, 0%, 90%)',
|
123 | * borderWidth: '3px',
|
124 | * alignment: 'left'
|
125 | * }
|
126 | * }
|
127 | * }
|
128 | * ```
|
129 | *
|
130 | * {@link module:table/tableconfig~TablePropertiesOptions Read more about the supported properties.}
|
131 | *
|
132 | * **Note**: The `borderColors` and `backgroundColors` options do not impact the data loaded into the editor,
|
133 | * i.e. they do not limit or filter the colors in the data. They are used only in the user interface
|
134 | * allowing users to pick colors in a more convenient way. The `defaultProperties` option does impact the data.
|
135 | * Default values will not be kept in the editor model.
|
136 | *
|
137 | * The default color palettes for the table background and the table border are the same
|
138 | * ({@link module:table/utils/ui/table-properties#defaultColors check out their content}).
|
139 | *
|
140 | * Both color palette configurations must follow the
|
141 | * {@link module:table/tableconfig~TableColorConfig table color configuration format}.
|
142 | *
|
143 | * Read more about configuring the table feature in {@link module:table/tableconfig~TableConfig}.
|
144 | */
|
145 | tableProperties?: TablePropertiesConfig;
|
146 | /**
|
147 | * The configuration of the table cell properties user interface (balloon). It allows to define:
|
148 | *
|
149 | * * The color palette for the cell border color style field (`tableCellProperties.borderColors`),
|
150 | * * The color palette for the cell background style field (`tableCellProperties.backgroundColors`).
|
151 | *
|
152 | * ```ts
|
153 | * const tableConfig = {
|
154 | * tableCellProperties: {
|
155 | * borderColors: [
|
156 | * {
|
157 | * color: 'hsl(0, 0%, 90%)',
|
158 | * label: 'Light grey'
|
159 | * },
|
160 | * // ...
|
161 | * ],
|
162 | * backgroundColors: [
|
163 | * {
|
164 | * color: 'hsl(120, 75%, 60%)',
|
165 | * label: 'Green'
|
166 | * },
|
167 | * // ...
|
168 | * ]
|
169 | * }
|
170 | * };
|
171 | * ```
|
172 | *
|
173 | * * The default styles for table cells (`tableCellProperties.defaultProperties`):
|
174 | *
|
175 | * ```ts
|
176 | * const tableConfig = {
|
177 | * tableCellProperties: {
|
178 | * defaultProperties: {
|
179 | * horizontalAlignment: 'right',
|
180 | * verticalAlignment: 'bottom',
|
181 | * padding: '5px'
|
182 | * }
|
183 | * }
|
184 | * }
|
185 | * ```
|
186 | *
|
187 | * {@link module:table/tableconfig~TablePropertiesOptions Read more about the supported properties.}
|
188 | *
|
189 | * **Note**: The `borderColors` and `backgroundColors` options do not impact the data loaded into the editor,
|
190 | * i.e. they do not limit or filter the colors in the data. They are used only in the user interface
|
191 | * allowing users to pick colors in a more convenient way. The `defaultProperties` option does impact the data.
|
192 | * Default values will not be kept in the editor model.
|
193 | *
|
194 | * The default color palettes for the cell background and the cell border are the same
|
195 | * ({@link module:table/utils/ui/table-properties#defaultColors check out their content}).
|
196 | *
|
197 | * Both color palette configurations must follow the
|
198 | * {@link module:table/tableconfig~TableColorConfig table color configuration format}.
|
199 | *
|
200 | * Read more about configuring the table feature in {@link module:table/tableconfig~TableConfig}.
|
201 | */
|
202 | tableCellProperties?: TableCellPropertiesConfig;
|
203 | }
|
204 | /**
|
205 | * The configuration of the table properties user interface (balloon).
|
206 | */
|
207 | export interface TablePropertiesConfig {
|
208 | borderColors?: TableColorConfig;
|
209 | backgroundColors?: TableColorConfig;
|
210 | defaultProperties?: TablePropertiesOptions;
|
211 | }
|
212 | /**
|
213 | * The configuration of the table default properties feature.
|
214 | */
|
215 | export interface TablePropertiesOptions {
|
216 | /**
|
217 | * The default `width` of the table.
|
218 | */
|
219 | width?: string;
|
220 | /**
|
221 | * The default `height` of the table.
|
222 | */
|
223 | height?: string;
|
224 | /**
|
225 | * The default `background-color` of the table.
|
226 | */
|
227 | backgroundColor?: string;
|
228 | /**
|
229 | * The default `border-color` of the table.
|
230 | */
|
231 | borderColor?: string;
|
232 | /**
|
233 | * The default `border-width` of the table.
|
234 | */
|
235 | borderWidth?: string;
|
236 | /**
|
237 | * The default `border-style` of the table.
|
238 | *
|
239 | * @default 'none'
|
240 | */
|
241 | borderStyle?: string;
|
242 | /**
|
243 | * The default `alignment` of the table.
|
244 | *
|
245 | * @default 'center'
|
246 | */
|
247 | alignment?: string;
|
248 | }
|
249 | /**
|
250 | * The configuration of the table cell properties user interface (balloon).
|
251 | */
|
252 | export interface TableCellPropertiesConfig {
|
253 | borderColors?: TableColorConfig;
|
254 | backgroundColors?: TableColorConfig;
|
255 | defaultProperties?: TableCellPropertiesOptions;
|
256 | }
|
257 | /**
|
258 | * An array of color definitions (either strings or objects).
|
259 | *
|
260 | * ```ts
|
261 | * const colors = [
|
262 | * {
|
263 | * color: 'hsl(0, 0%, 60%)',
|
264 | * label: 'Grey'
|
265 | * },
|
266 | * 'hsl(0, 0%, 80%)',
|
267 | * {
|
268 | * color: 'hsl(0, 0%, 90%)',
|
269 | * label: 'Light grey'
|
270 | * },
|
271 | * {
|
272 | * color: 'hsl(0, 0%, 100%)',
|
273 | * label: 'White',
|
274 | * hasBorder: true
|
275 | * },
|
276 | * '#FF0000'
|
277 | * ]
|
278 | * ```
|
279 | *
|
280 | * Usually used as a configuration parameter, for instance in
|
281 | * {@link module:table/tableconfig~TableConfig#tableProperties `config.table.tableProperties`}
|
282 | * or {@link module:table/tableconfig~TableConfig#tableCellProperties `config.table.tableCellProperties`}.
|
283 | */
|
284 | export type TableColorConfig = Array<ColorOption>;
|
285 | /**
|
286 | * The configuration of the table cell default properties feature.
|
287 | */
|
288 | export interface TableCellPropertiesOptions {
|
289 | /**
|
290 | * The default `width` of the table cell.
|
291 | */
|
292 | width?: string;
|
293 | /**
|
294 | * The default `height` of the table cell.
|
295 | */
|
296 | height?: string;
|
297 | /**
|
298 | * The default `padding` of the table cell.
|
299 | */
|
300 | padding?: string;
|
301 | /**
|
302 | * The default `background-color` of the table cell.
|
303 | */
|
304 | backgroundColor?: string;
|
305 | /**
|
306 | * The default `border-color` of the table cell.
|
307 | */
|
308 | borderColor?: string;
|
309 | /**
|
310 | * The default `border-width` of the table cell.
|
311 | */
|
312 | borderWidth?: string;
|
313 | /**
|
314 | * The default `border-style` of the table cell.
|
315 | *
|
316 | * @default 'none'
|
317 | */
|
318 | borderStyle?: string;
|
319 | /**
|
320 | * The default `horizontalAlignment` of the table cell.
|
321 | *
|
322 | * @default 'center'
|
323 | */
|
324 | horizontalAlignment?: string;
|
325 | /**
|
326 | * The default `verticalAlignment` of the table cell.
|
327 | *
|
328 | * @default 'middle'
|
329 | */
|
330 | verticalAlignment?: string;
|
331 | }
|