@ckeditor/ckeditor5-indent 38.0.1 → 38.1.1

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.
@@ -1,142 +1,142 @@
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 indent/indentblock
7
- */
8
- import { Plugin } from 'ckeditor5/src/core';
9
- import { addMarginRules } from 'ckeditor5/src/engine';
10
- import IndentBlockCommand from './indentblockcommand';
11
- import IndentUsingOffset from './indentcommandbehavior/indentusingoffset';
12
- import IndentUsingClasses from './indentcommandbehavior/indentusingclasses';
13
- const DEFAULT_ELEMENTS = ['paragraph', 'heading1', 'heading2', 'heading3', 'heading4', 'heading5', 'heading6'];
14
- /**
15
- * The block indentation feature.
16
- *
17
- * It registers the `'indentBlock'` and `'outdentBlock'` commands.
18
- *
19
- * If the plugin {@link module:indent/indent~Indent} is defined, it also attaches the `'indentBlock'` and `'outdentBlock'` commands to
20
- * the `'indent'` and `'outdent'` commands.
21
- */
22
- export default class IndentBlock extends Plugin {
23
- /**
24
- * @inheritDoc
25
- */
26
- constructor(editor) {
27
- super(editor);
28
- editor.config.define('indentBlock', {
29
- offset: 40,
30
- unit: 'px'
31
- });
32
- }
33
- /**
34
- * @inheritDoc
35
- */
36
- static get pluginName() {
37
- return 'IndentBlock';
38
- }
39
- /**
40
- * @inheritDoc
41
- */
42
- init() {
43
- const editor = this.editor;
44
- const configuration = editor.config.get('indentBlock');
45
- if (configuration.classes && configuration.classes.length) {
46
- this._setupConversionUsingClasses(configuration.classes);
47
- editor.commands.add('indentBlock', new IndentBlockCommand(editor, new IndentUsingClasses({
48
- direction: 'forward',
49
- classes: configuration.classes
50
- })));
51
- editor.commands.add('outdentBlock', new IndentBlockCommand(editor, new IndentUsingClasses({
52
- direction: 'backward',
53
- classes: configuration.classes
54
- })));
55
- }
56
- else {
57
- editor.data.addStyleProcessorRules(addMarginRules);
58
- this._setupConversionUsingOffset();
59
- editor.commands.add('indentBlock', new IndentBlockCommand(editor, new IndentUsingOffset({
60
- direction: 'forward',
61
- offset: configuration.offset,
62
- unit: configuration.unit
63
- })));
64
- editor.commands.add('outdentBlock', new IndentBlockCommand(editor, new IndentUsingOffset({
65
- direction: 'backward',
66
- offset: configuration.offset,
67
- unit: configuration.unit
68
- })));
69
- }
70
- }
71
- /**
72
- * @inheritDoc
73
- */
74
- afterInit() {
75
- const editor = this.editor;
76
- const schema = editor.model.schema;
77
- const indentCommand = editor.commands.get('indent');
78
- const outdentCommand = editor.commands.get('outdent');
79
- // Enable block indentation to heading configuration options. If it is not defined enable in paragraph and default headings.
80
- const options = editor.config.get('heading.options');
81
- const configuredElements = options && options.map(option => option.model);
82
- const knownElements = configuredElements || DEFAULT_ELEMENTS;
83
- knownElements.forEach(elementName => {
84
- if (schema.isRegistered(elementName)) {
85
- schema.extend(elementName, { allowAttributes: 'blockIndent' });
86
- }
87
- });
88
- schema.setAttributeProperties('blockIndent', { isFormatting: true });
89
- indentCommand.registerChildCommand(editor.commands.get('indentBlock'));
90
- outdentCommand.registerChildCommand(editor.commands.get('outdentBlock'));
91
- }
92
- /**
93
- * Setups conversion for using offset indents.
94
- */
95
- _setupConversionUsingOffset() {
96
- const conversion = this.editor.conversion;
97
- const locale = this.editor.locale;
98
- const marginProperty = locale.contentLanguageDirection === 'rtl' ? 'margin-right' : 'margin-left';
99
- conversion.for('upcast').attributeToAttribute({
100
- view: {
101
- styles: {
102
- [marginProperty]: /[\s\S]+/
103
- }
104
- },
105
- model: {
106
- key: 'blockIndent',
107
- value: (viewElement) => viewElement.getStyle(marginProperty)
108
- }
109
- });
110
- conversion.for('downcast').attributeToAttribute({
111
- model: 'blockIndent',
112
- view: modelAttributeValue => {
113
- return {
114
- key: 'style',
115
- value: {
116
- [marginProperty]: modelAttributeValue
117
- }
118
- };
119
- }
120
- });
121
- }
122
- /**
123
- * Setups conversion for using classes.
124
- */
125
- _setupConversionUsingClasses(classes) {
126
- const definition = {
127
- model: {
128
- key: 'blockIndent',
129
- values: []
130
- },
131
- view: {}
132
- };
133
- for (const className of classes) {
134
- definition.model.values.push(className);
135
- definition.view[className] = {
136
- key: 'class',
137
- value: [className]
138
- };
139
- }
140
- this.editor.conversion.attributeToAttribute(definition);
141
- }
142
- }
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 indent/indentblock
7
+ */
8
+ import { Plugin } from 'ckeditor5/src/core';
9
+ import { addMarginRules } from 'ckeditor5/src/engine';
10
+ import IndentBlockCommand from './indentblockcommand';
11
+ import IndentUsingOffset from './indentcommandbehavior/indentusingoffset';
12
+ import IndentUsingClasses from './indentcommandbehavior/indentusingclasses';
13
+ const DEFAULT_ELEMENTS = ['paragraph', 'heading1', 'heading2', 'heading3', 'heading4', 'heading5', 'heading6'];
14
+ /**
15
+ * The block indentation feature.
16
+ *
17
+ * It registers the `'indentBlock'` and `'outdentBlock'` commands.
18
+ *
19
+ * If the plugin {@link module:indent/indent~Indent} is defined, it also attaches the `'indentBlock'` and `'outdentBlock'` commands to
20
+ * the `'indent'` and `'outdent'` commands.
21
+ */
22
+ export default class IndentBlock extends Plugin {
23
+ /**
24
+ * @inheritDoc
25
+ */
26
+ constructor(editor) {
27
+ super(editor);
28
+ editor.config.define('indentBlock', {
29
+ offset: 40,
30
+ unit: 'px'
31
+ });
32
+ }
33
+ /**
34
+ * @inheritDoc
35
+ */
36
+ static get pluginName() {
37
+ return 'IndentBlock';
38
+ }
39
+ /**
40
+ * @inheritDoc
41
+ */
42
+ init() {
43
+ const editor = this.editor;
44
+ const configuration = editor.config.get('indentBlock');
45
+ if (configuration.classes && configuration.classes.length) {
46
+ this._setupConversionUsingClasses(configuration.classes);
47
+ editor.commands.add('indentBlock', new IndentBlockCommand(editor, new IndentUsingClasses({
48
+ direction: 'forward',
49
+ classes: configuration.classes
50
+ })));
51
+ editor.commands.add('outdentBlock', new IndentBlockCommand(editor, new IndentUsingClasses({
52
+ direction: 'backward',
53
+ classes: configuration.classes
54
+ })));
55
+ }
56
+ else {
57
+ editor.data.addStyleProcessorRules(addMarginRules);
58
+ this._setupConversionUsingOffset();
59
+ editor.commands.add('indentBlock', new IndentBlockCommand(editor, new IndentUsingOffset({
60
+ direction: 'forward',
61
+ offset: configuration.offset,
62
+ unit: configuration.unit
63
+ })));
64
+ editor.commands.add('outdentBlock', new IndentBlockCommand(editor, new IndentUsingOffset({
65
+ direction: 'backward',
66
+ offset: configuration.offset,
67
+ unit: configuration.unit
68
+ })));
69
+ }
70
+ }
71
+ /**
72
+ * @inheritDoc
73
+ */
74
+ afterInit() {
75
+ const editor = this.editor;
76
+ const schema = editor.model.schema;
77
+ const indentCommand = editor.commands.get('indent');
78
+ const outdentCommand = editor.commands.get('outdent');
79
+ // Enable block indentation to heading configuration options. If it is not defined enable in paragraph and default headings.
80
+ const options = editor.config.get('heading.options');
81
+ const configuredElements = options && options.map(option => option.model);
82
+ const knownElements = configuredElements || DEFAULT_ELEMENTS;
83
+ knownElements.forEach(elementName => {
84
+ if (schema.isRegistered(elementName)) {
85
+ schema.extend(elementName, { allowAttributes: 'blockIndent' });
86
+ }
87
+ });
88
+ schema.setAttributeProperties('blockIndent', { isFormatting: true });
89
+ indentCommand.registerChildCommand(editor.commands.get('indentBlock'));
90
+ outdentCommand.registerChildCommand(editor.commands.get('outdentBlock'));
91
+ }
92
+ /**
93
+ * Setups conversion for using offset indents.
94
+ */
95
+ _setupConversionUsingOffset() {
96
+ const conversion = this.editor.conversion;
97
+ const locale = this.editor.locale;
98
+ const marginProperty = locale.contentLanguageDirection === 'rtl' ? 'margin-right' : 'margin-left';
99
+ conversion.for('upcast').attributeToAttribute({
100
+ view: {
101
+ styles: {
102
+ [marginProperty]: /[\s\S]+/
103
+ }
104
+ },
105
+ model: {
106
+ key: 'blockIndent',
107
+ value: (viewElement) => viewElement.getStyle(marginProperty)
108
+ }
109
+ });
110
+ conversion.for('downcast').attributeToAttribute({
111
+ model: 'blockIndent',
112
+ view: modelAttributeValue => {
113
+ return {
114
+ key: 'style',
115
+ value: {
116
+ [marginProperty]: modelAttributeValue
117
+ }
118
+ };
119
+ }
120
+ });
121
+ }
122
+ /**
123
+ * Setups conversion for using classes.
124
+ */
125
+ _setupConversionUsingClasses(classes) {
126
+ const definition = {
127
+ model: {
128
+ key: 'blockIndent',
129
+ values: []
130
+ },
131
+ view: {}
132
+ };
133
+ for (const className of classes) {
134
+ definition.model.values.push(className);
135
+ definition.view[className] = {
136
+ key: 'class',
137
+ value: [className]
138
+ };
139
+ }
140
+ this.editor.conversion.attributeToAttribute(definition);
141
+ }
142
+ }
@@ -1,45 +1,45 @@
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 indent/indentblockcommand
7
- */
8
- import { Command, type Editor } from 'ckeditor5/src/core';
9
- import type { IndentBehavior } from './indentcommandbehavior/indentbehavior';
10
- /**
11
- * The indent block command.
12
- *
13
- * The command is registered by the {@link module:indent/indentblock~IndentBlock} as `'indentBlock'` for indenting blocks and
14
- * `'outdentBlock'` for outdenting blocks.
15
- *
16
- * To increase block indentation at the current selection, execute the command:
17
- *
18
- * ```ts
19
- * editor.execute( 'indentBlock' );
20
- * ```
21
- *
22
- * To decrease block indentation at the current selection, execute the command:
23
- *
24
- * ```ts
25
- * editor.execute( 'outdentBlock' );
26
- * ```
27
- */
28
- export default class IndentBlockCommand extends Command {
29
- /**
30
- * The command's indentation behavior.
31
- */
32
- private readonly _indentBehavior;
33
- /**
34
- * Creates an instance of the command.
35
- */
36
- constructor(editor: Editor, indentBehavior: IndentBehavior);
37
- /**
38
- * @inheritDoc
39
- */
40
- refresh(): void;
41
- /**
42
- * @inheritDoc
43
- */
44
- execute(): void;
45
- }
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 indent/indentblockcommand
7
+ */
8
+ import { Command, type Editor } from 'ckeditor5/src/core';
9
+ import type { IndentBehavior } from './indentcommandbehavior/indentbehavior';
10
+ /**
11
+ * The indent block command.
12
+ *
13
+ * The command is registered by the {@link module:indent/indentblock~IndentBlock} as `'indentBlock'` for indenting blocks and
14
+ * `'outdentBlock'` for outdenting blocks.
15
+ *
16
+ * To increase block indentation at the current selection, execute the command:
17
+ *
18
+ * ```ts
19
+ * editor.execute( 'indentBlock' );
20
+ * ```
21
+ *
22
+ * To decrease block indentation at the current selection, execute the command:
23
+ *
24
+ * ```ts
25
+ * editor.execute( 'outdentBlock' );
26
+ * ```
27
+ */
28
+ export default class IndentBlockCommand extends Command {
29
+ /**
30
+ * The command's indentation behavior.
31
+ */
32
+ private readonly _indentBehavior;
33
+ /**
34
+ * Creates an instance of the command.
35
+ */
36
+ constructor(editor: Editor, indentBehavior: IndentBehavior);
37
+ /**
38
+ * @inheritDoc
39
+ */
40
+ refresh(): void;
41
+ /**
42
+ * @inheritDoc
43
+ */
44
+ execute(): void;
45
+ }
@@ -1,78 +1,78 @@
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 indent/indentblockcommand
7
- */
8
- import { Command } from 'ckeditor5/src/core';
9
- import { first } from 'ckeditor5/src/utils';
10
- /**
11
- * The indent block command.
12
- *
13
- * The command is registered by the {@link module:indent/indentblock~IndentBlock} as `'indentBlock'` for indenting blocks and
14
- * `'outdentBlock'` for outdenting blocks.
15
- *
16
- * To increase block indentation at the current selection, execute the command:
17
- *
18
- * ```ts
19
- * editor.execute( 'indentBlock' );
20
- * ```
21
- *
22
- * To decrease block indentation at the current selection, execute the command:
23
- *
24
- * ```ts
25
- * editor.execute( 'outdentBlock' );
26
- * ```
27
- */
28
- export default class IndentBlockCommand extends Command {
29
- /**
30
- * Creates an instance of the command.
31
- */
32
- constructor(editor, indentBehavior) {
33
- super(editor);
34
- this._indentBehavior = indentBehavior;
35
- }
36
- /**
37
- * @inheritDoc
38
- */
39
- refresh() {
40
- // Check whether any of the position's ancestors is a list item.
41
- const editor = this.editor;
42
- const model = editor.model;
43
- const block = first(model.document.selection.getSelectedBlocks());
44
- if (!block || !model.schema.checkAttribute(block, 'blockIndent')) {
45
- this.isEnabled = false;
46
- return;
47
- }
48
- this.isEnabled = this._indentBehavior.checkEnabled(block.getAttribute('blockIndent'));
49
- }
50
- /**
51
- * @inheritDoc
52
- */
53
- execute() {
54
- const model = this.editor.model;
55
- const blocksToChange = getBlocksToChange(model);
56
- model.change(writer => {
57
- for (const block of blocksToChange) {
58
- const currentIndent = block.getAttribute('blockIndent');
59
- const nextIndent = this._indentBehavior.getNextIndent(currentIndent);
60
- if (nextIndent) {
61
- writer.setAttribute('blockIndent', nextIndent, block);
62
- }
63
- else {
64
- writer.removeAttribute('blockIndent', block);
65
- }
66
- }
67
- });
68
- }
69
- }
70
- /**
71
- * Returns blocks from selection that should have blockIndent selection set.
72
- */
73
- function getBlocksToChange(model) {
74
- const selection = model.document.selection;
75
- const schema = model.schema;
76
- const blocksInSelection = Array.from(selection.getSelectedBlocks());
77
- return blocksInSelection.filter(block => schema.checkAttribute(block, 'blockIndent'));
78
- }
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 indent/indentblockcommand
7
+ */
8
+ import { Command } from 'ckeditor5/src/core';
9
+ import { first } from 'ckeditor5/src/utils';
10
+ /**
11
+ * The indent block command.
12
+ *
13
+ * The command is registered by the {@link module:indent/indentblock~IndentBlock} as `'indentBlock'` for indenting blocks and
14
+ * `'outdentBlock'` for outdenting blocks.
15
+ *
16
+ * To increase block indentation at the current selection, execute the command:
17
+ *
18
+ * ```ts
19
+ * editor.execute( 'indentBlock' );
20
+ * ```
21
+ *
22
+ * To decrease block indentation at the current selection, execute the command:
23
+ *
24
+ * ```ts
25
+ * editor.execute( 'outdentBlock' );
26
+ * ```
27
+ */
28
+ export default class IndentBlockCommand extends Command {
29
+ /**
30
+ * Creates an instance of the command.
31
+ */
32
+ constructor(editor, indentBehavior) {
33
+ super(editor);
34
+ this._indentBehavior = indentBehavior;
35
+ }
36
+ /**
37
+ * @inheritDoc
38
+ */
39
+ refresh() {
40
+ // Check whether any of the position's ancestors is a list item.
41
+ const editor = this.editor;
42
+ const model = editor.model;
43
+ const block = first(model.document.selection.getSelectedBlocks());
44
+ if (!block || !model.schema.checkAttribute(block, 'blockIndent')) {
45
+ this.isEnabled = false;
46
+ return;
47
+ }
48
+ this.isEnabled = this._indentBehavior.checkEnabled(block.getAttribute('blockIndent'));
49
+ }
50
+ /**
51
+ * @inheritDoc
52
+ */
53
+ execute() {
54
+ const model = this.editor.model;
55
+ const blocksToChange = getBlocksToChange(model);
56
+ model.change(writer => {
57
+ for (const block of blocksToChange) {
58
+ const currentIndent = block.getAttribute('blockIndent');
59
+ const nextIndent = this._indentBehavior.getNextIndent(currentIndent);
60
+ if (nextIndent) {
61
+ writer.setAttribute('blockIndent', nextIndent, block);
62
+ }
63
+ else {
64
+ writer.removeAttribute('blockIndent', block);
65
+ }
66
+ }
67
+ });
68
+ }
69
+ }
70
+ /**
71
+ * Returns blocks from selection that should have blockIndent selection set.
72
+ */
73
+ function getBlocksToChange(model) {
74
+ const selection = model.document.selection;
75
+ const schema = model.schema;
76
+ const blocksInSelection = Array.from(selection.getSelectedBlocks());
77
+ return blocksInSelection.filter(block => schema.checkAttribute(block, 'blockIndent'));
78
+ }
@@ -1,21 +1,21 @@
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 indent/indentcommandbehavior/indentbehavior
7
- */
8
- /**
9
- * Provides indentation behavior to {@link module:indent/indentblockcommand~IndentBlockCommand}.
10
- */
11
- export interface IndentBehavior {
12
- /**
13
- * Checks if the command should be enabled.
14
- */
15
- checkEnabled: (indentAttributeValue: string) => boolean;
16
- /**
17
- * Returns a new indent attribute value based on the current indent.
18
- * This method returns `undefined` when the indentation should be removed.
19
- */
20
- getNextIndent: (indentAttributeValue: string) => string | undefined;
21
- }
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 indent/indentcommandbehavior/indentbehavior
7
+ */
8
+ /**
9
+ * Provides indentation behavior to {@link module:indent/indentblockcommand~IndentBlockCommand}.
10
+ */
11
+ export interface IndentBehavior {
12
+ /**
13
+ * Checks if the command should be enabled.
14
+ */
15
+ checkEnabled: (indentAttributeValue: string) => boolean;
16
+ /**
17
+ * Returns a new indent attribute value based on the current indent.
18
+ * This method returns `undefined` when the indentation should be removed.
19
+ */
20
+ getNextIndent: (indentAttributeValue: string) => string | undefined;
21
+ }
@@ -1,5 +1,5 @@
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
- export {};
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
+ export {};
@@ -1,39 +1,39 @@
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 indent/indentcommandbehavior/indentusingclasses
7
- */
8
- import type { IndentBehavior } from './indentbehavior';
9
- /**
10
- * The block indentation behavior that uses classes to set indentation.
11
- */
12
- export default class IndentUsingClasses implements IndentBehavior {
13
- /**
14
- * The direction of indentation.
15
- */
16
- isForward: boolean;
17
- /**
18
- * A list of classes used for indentation.
19
- */
20
- classes: Array<string>;
21
- /**
22
- * Creates an instance of the indentation behavior.
23
- *
24
- * @param config.direction The direction of indentation.
25
- * @param config.classes A list of classes used for indentation.
26
- */
27
- constructor(config: {
28
- direction: 'forward' | 'backward';
29
- classes: Array<string>;
30
- });
31
- /**
32
- * @inheritDoc
33
- */
34
- checkEnabled(indentAttributeValue: string): boolean;
35
- /**
36
- * @inheritDoc
37
- */
38
- getNextIndent(indentAttributeValue: string): string | undefined;
39
- }
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 indent/indentcommandbehavior/indentusingclasses
7
+ */
8
+ import type { IndentBehavior } from './indentbehavior';
9
+ /**
10
+ * The block indentation behavior that uses classes to set indentation.
11
+ */
12
+ export default class IndentUsingClasses implements IndentBehavior {
13
+ /**
14
+ * The direction of indentation.
15
+ */
16
+ isForward: boolean;
17
+ /**
18
+ * A list of classes used for indentation.
19
+ */
20
+ classes: Array<string>;
21
+ /**
22
+ * Creates an instance of the indentation behavior.
23
+ *
24
+ * @param config.direction The direction of indentation.
25
+ * @param config.classes A list of classes used for indentation.
26
+ */
27
+ constructor(config: {
28
+ direction: 'forward' | 'backward';
29
+ classes: Array<string>;
30
+ });
31
+ /**
32
+ * @inheritDoc
33
+ */
34
+ checkEnabled(indentAttributeValue: string): boolean;
35
+ /**
36
+ * @inheritDoc
37
+ */
38
+ getNextIndent(indentAttributeValue: string): string | undefined;
39
+ }