@ckeditor/ckeditor5-special-characters 48.2.0 → 48.3.0-alpha.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.
package/dist/index.js CHANGED
@@ -2,1861 +2,1895 @@
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 { Plugin } from '@ckeditor/ckeditor5-core/dist/index.js';
6
- import { Typing } from '@ckeditor/ckeditor5-typing/dist/index.js';
7
- import { IconSpecialCharacters } from '@ckeditor/ckeditor5-icons/dist/index.js';
8
- import { View, addKeyboardHandlingForGrid, ButtonView, FocusCycler, LabeledFieldView, createLabeledDropdown, UIModel, addListToDropdown, Dialog, MenuBarMenuListItemButtonView, DialogViewPosition } from '@ckeditor/ckeditor5-ui/dist/index.js';
9
- import { FocusTracker, KeystrokeHandler, global, Collection, CKEditorError } from '@ckeditor/ckeditor5-utils/dist/index.js';
5
+ import { Plugin } from "@ckeditor/ckeditor5-core";
6
+ import { Typing } from "@ckeditor/ckeditor5-typing";
7
+ import { IconSpecialCharacters } from "@ckeditor/ckeditor5-icons";
8
+ import { ButtonView, Dialog, DialogViewPosition, FocusCycler, LabeledFieldView, MenuBarMenuListItemButtonView, UIModel, View, addKeyboardHandlingForGrid, addListToDropdown, createLabeledDropdown } from "@ckeditor/ckeditor5-ui";
9
+ import { CKEditorError, Collection, FocusTracker, KeystrokeHandler, global } from "@ckeditor/ckeditor5-utils";
10
10
 
11
11
  /**
12
- * A grid of character tiles. It allows browsing special characters and selecting the character to
13
- * be inserted into the content.
14
- *
15
- * @internal
16
- */ class CharacterGridView extends View {
17
- /**
18
- * A collection of the child tile views. Each tile represents a particular character.
19
- */ tiles;
20
- /**
21
- * Tracks information about the DOM focus in the grid.
22
- */ focusTracker;
23
- /**
24
- * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.
25
- */ keystrokes;
26
- /**
27
- * Creates an instance of a character grid containing tiles representing special characters.
28
- *
29
- * @param locale The localization services instance.
30
- */ constructor(locale){
31
- super(locale);
32
- this.tiles = this.createCollection();
33
- this.setTemplate({
34
- tag: 'div',
35
- children: [
36
- {
37
- tag: 'div',
38
- attributes: {
39
- class: [
40
- 'ck',
41
- 'ck-character-grid__tiles'
42
- ]
43
- },
44
- children: this.tiles
45
- }
46
- ],
47
- attributes: {
48
- class: [
49
- 'ck',
50
- 'ck-character-grid'
51
- ]
52
- }
53
- });
54
- this.focusTracker = new FocusTracker();
55
- this.keystrokes = new KeystrokeHandler();
56
- addKeyboardHandlingForGrid({
57
- keystrokeHandler: this.keystrokes,
58
- focusTracker: this.focusTracker,
59
- gridItems: this.tiles,
60
- numberOfColumns: ()=>global.window.getComputedStyle(this.element.firstChild) // Responsive .ck-character-grid__tiles
61
- .getPropertyValue('grid-template-columns').split(' ').length,
62
- uiLanguageDirection: this.locale && this.locale.uiLanguageDirection
63
- });
64
- }
65
- /**
66
- * Creates a new tile for the grid.
67
- *
68
- * @param character A human-readable character displayed as the label (e.g. "ε").
69
- * @param name The name of the character (e.g. "greek small letter epsilon").
70
- */ createTile(character, name) {
71
- const tile = new ButtonView(this.locale);
72
- tile.set({
73
- label: character,
74
- withText: true,
75
- class: 'ck-character-grid__tile'
76
- });
77
- // Labels are vital for the users to understand what character they're looking at.
78
- // For now we're using native title attribute for that, see https://github.com/ckeditor/ckeditor5/issues/5817.
79
- tile.extendTemplate({
80
- attributes: {
81
- title: name
82
- },
83
- on: {
84
- mouseover: tile.bindTemplate.to('mouseover'),
85
- focus: tile.bindTemplate.to('focus')
86
- }
87
- });
88
- tile.on('mouseover', ()=>{
89
- this.fire('tileHover', {
90
- name,
91
- character
92
- });
93
- });
94
- tile.on('focus', ()=>{
95
- this.fire('tileFocus', {
96
- name,
97
- character
98
- });
99
- });
100
- tile.on('execute', ()=>{
101
- this.fire('execute', {
102
- name,
103
- character
104
- });
105
- });
106
- return tile;
107
- }
108
- /**
109
- * @inheritDoc
110
- */ render() {
111
- super.render();
112
- for (const item of this.tiles){
113
- this.focusTracker.add(item.element);
114
- }
115
- this.tiles.on('change', (eventInfo, { added, removed })=>{
116
- if (added.length > 0) {
117
- for (const item of added){
118
- this.focusTracker.add(item.element);
119
- }
120
- }
121
- if (removed.length > 0) {
122
- for (const item of removed){
123
- this.focusTracker.remove(item.element);
124
- }
125
- }
126
- });
127
- this.keystrokes.listenTo(this.element);
128
- }
129
- /**
130
- * @inheritDoc
131
- */ destroy() {
132
- super.destroy();
133
- this.keystrokes.destroy();
134
- }
135
- /**
136
- * Focuses the first focusable in {@link ~CharacterGridView#tiles}.
137
- */ focus() {
138
- this.tiles.first.focus();
139
- }
140
- }
12
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
13
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
14
+ */
15
+ /**
16
+ * @module special-characters/ui/charactergridview
17
+ */
18
+ /**
19
+ * A grid of character tiles. It allows browsing special characters and selecting the character to
20
+ * be inserted into the content.
21
+ *
22
+ * @internal
23
+ */
24
+ var CharacterGridView = class extends View {
25
+ /**
26
+ * A collection of the child tile views. Each tile represents a particular character.
27
+ */
28
+ tiles;
29
+ /**
30
+ * Tracks information about the DOM focus in the grid.
31
+ */
32
+ focusTracker;
33
+ /**
34
+ * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.
35
+ */
36
+ keystrokes;
37
+ /**
38
+ * Creates an instance of a character grid containing tiles representing special characters.
39
+ *
40
+ * @param locale The localization services instance.
41
+ */
42
+ constructor(locale) {
43
+ super(locale);
44
+ this.tiles = this.createCollection();
45
+ this.setTemplate({
46
+ tag: "div",
47
+ children: [{
48
+ tag: "div",
49
+ attributes: { class: ["ck", "ck-character-grid__tiles"] },
50
+ children: this.tiles
51
+ }],
52
+ attributes: { class: ["ck", "ck-character-grid"] }
53
+ });
54
+ this.focusTracker = new FocusTracker();
55
+ this.keystrokes = new KeystrokeHandler();
56
+ addKeyboardHandlingForGrid({
57
+ keystrokeHandler: this.keystrokes,
58
+ focusTracker: this.focusTracker,
59
+ gridItems: this.tiles,
60
+ numberOfColumns: () => global.window.getComputedStyle(this.element.firstChild).getPropertyValue("grid-template-columns").split(" ").length,
61
+ uiLanguageDirection: this.locale && this.locale.uiLanguageDirection
62
+ });
63
+ }
64
+ /**
65
+ * Creates a new tile for the grid.
66
+ *
67
+ * @param character A human-readable character displayed as the label (e.g. "ε").
68
+ * @param name The name of the character (e.g. "greek small letter epsilon").
69
+ */
70
+ createTile(character, name) {
71
+ const tile = new ButtonView(this.locale);
72
+ tile.set({
73
+ label: character,
74
+ withText: true,
75
+ class: "ck-character-grid__tile"
76
+ });
77
+ tile.extendTemplate({
78
+ attributes: { title: name },
79
+ on: {
80
+ mouseover: tile.bindTemplate.to("mouseover"),
81
+ focus: tile.bindTemplate.to("focus")
82
+ }
83
+ });
84
+ tile.on("mouseover", () => {
85
+ this.fire("tileHover", {
86
+ name,
87
+ character
88
+ });
89
+ });
90
+ tile.on("focus", () => {
91
+ this.fire("tileFocus", {
92
+ name,
93
+ character
94
+ });
95
+ });
96
+ tile.on("execute", () => {
97
+ this.fire("execute", {
98
+ name,
99
+ character
100
+ });
101
+ });
102
+ return tile;
103
+ }
104
+ /**
105
+ * @inheritDoc
106
+ */
107
+ render() {
108
+ super.render();
109
+ for (const item of this.tiles) this.focusTracker.add(item.element);
110
+ this.tiles.on("change", (eventInfo, { added, removed }) => {
111
+ if (added.length > 0) for (const item of added) this.focusTracker.add(item.element);
112
+ if (removed.length > 0) for (const item of removed) this.focusTracker.remove(item.element);
113
+ });
114
+ this.keystrokes.listenTo(this.element);
115
+ }
116
+ /**
117
+ * @inheritDoc
118
+ */
119
+ destroy() {
120
+ super.destroy();
121
+ this.keystrokes.destroy();
122
+ this.focusTracker.destroy();
123
+ }
124
+ /**
125
+ * Focuses the first focusable in {@link ~CharacterGridView#tiles}.
126
+ */
127
+ focus() {
128
+ this.tiles.first.focus();
129
+ }
130
+ };
141
131
 
142
132
  /**
143
- * The view displaying detailed information about a special character glyph, e.g. upon
144
- * hovering it with a mouse.
145
- *
146
- * @internal
147
- */ class CharacterInfoView extends View {
148
- constructor(locale){
149
- super(locale);
150
- const bind = this.bindTemplate;
151
- this.set('character', null);
152
- this.set('name', null);
153
- this.bind('code').to(this, 'character', characterToUnicodeString);
154
- this.setTemplate({
155
- tag: 'div',
156
- children: [
157
- {
158
- tag: 'span',
159
- attributes: {
160
- class: [
161
- 'ck-character-info__name'
162
- ]
163
- },
164
- children: [
165
- {
166
- // Note: ZWSP to prevent vertical collapsing.
167
- text: bind.to('name', (name)=>name ? name : '\u200B')
168
- }
169
- ]
170
- },
171
- {
172
- tag: 'span',
173
- attributes: {
174
- class: [
175
- 'ck-character-info__code'
176
- ]
177
- },
178
- children: [
179
- {
180
- text: bind.to('code')
181
- }
182
- ]
183
- }
184
- ],
185
- attributes: {
186
- class: [
187
- 'ck',
188
- 'ck-character-info'
189
- ]
190
- }
191
- });
192
- }
193
- }
133
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
134
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
135
+ */
136
+ /**
137
+ * The view displaying detailed information about a special character glyph, e.g. upon
138
+ * hovering it with a mouse.
139
+ *
140
+ * @internal
141
+ */
142
+ var CharacterInfoView = class extends View {
143
+ constructor(locale) {
144
+ super(locale);
145
+ const bind = this.bindTemplate;
146
+ this.set("character", null);
147
+ this.set("name", null);
148
+ this.bind("code").to(this, "character", characterToUnicodeString);
149
+ this.setTemplate({
150
+ tag: "div",
151
+ children: [{
152
+ tag: "span",
153
+ attributes: { class: ["ck-character-info__name"] },
154
+ children: [{ text: bind.to("name", (name) => name ? name : "​") }]
155
+ }, {
156
+ tag: "span",
157
+ attributes: { class: ["ck-character-info__code"] },
158
+ children: [{ text: bind.to("code") }]
159
+ }],
160
+ attributes: { class: ["ck", "ck-character-info"] }
161
+ });
162
+ }
163
+ };
194
164
  /**
195
- * Converts a character into a "Unicode string", for instance:
196
- *
197
- * "$" -> "U+0024"
198
- *
199
- * Returns an empty string when the character is `null`.
200
- */ function characterToUnicodeString(character) {
201
- if (character === null) {
202
- return '';
203
- }
204
- const hexCode = character.codePointAt(0).toString(16);
205
- return 'U+' + ('0000' + hexCode).slice(-4);
165
+ * Converts a character into a "Unicode string", for instance:
166
+ *
167
+ * "$" -> "U+0024"
168
+ *
169
+ * Returns an empty string when the character is `null`.
170
+ */
171
+ function characterToUnicodeString(character) {
172
+ if (character === null) return "";
173
+ return "U+" + ("0000" + character.codePointAt(0).toString(16)).slice(-4);
206
174
  }
207
175
 
208
176
  /**
209
- * A view that glues pieces of the special characters dropdown panel together:
210
- *
211
- * * the navigation view (allows selecting the category),
212
- * * the grid view (displays characters as a grid),
213
- * * and the info view (displays detailed info about a specific character).
214
- *
215
- * @internal
216
- */ class SpecialCharactersView extends View {
217
- /**
218
- * A collection of the focusable children of the view.
219
- */ items;
220
- /**
221
- * Tracks information about the DOM focus in the view.
222
- */ focusTracker;
223
- /**
224
- * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.
225
- */ keystrokes;
226
- /**
227
- * Helps cycling over focusable {@link #items} in the view.
228
- */ _focusCycler;
229
- /**
230
- * An instance of the `SpecialCharactersCategoriesView`.
231
- */ categoriesView;
232
- /**
233
- * An instance of the `CharacterGridView`.
234
- */ gridView;
235
- /**
236
- * An instance of the `CharacterInfoView`.
237
- */ infoView;
238
- /**
239
- * Creates an instance of the `SpecialCharactersView`.
240
- */ constructor(locale, categoriesView, gridView, infoView){
241
- super(locale);
242
- this.categoriesView = categoriesView;
243
- this.gridView = gridView;
244
- this.infoView = infoView;
245
- this.items = this.createCollection();
246
- this.focusTracker = new FocusTracker();
247
- this.keystrokes = new KeystrokeHandler();
248
- this._focusCycler = new FocusCycler({
249
- focusables: this.items,
250
- focusTracker: this.focusTracker,
251
- keystrokeHandler: this.keystrokes,
252
- actions: {
253
- focusPrevious: 'shift + tab',
254
- focusNext: 'tab'
255
- }
256
- });
257
- this.setTemplate({
258
- tag: 'div',
259
- children: [
260
- this.categoriesView,
261
- this.gridView,
262
- this.infoView
263
- ],
264
- attributes: {
265
- // Avoid focus loss when the user clicks the area of the grid that is not a button.
266
- // https://github.com/ckeditor/ckeditor5/pull/12319#issuecomment-1231779819
267
- tabindex: '-1'
268
- }
269
- });
270
- this.items.add(this.categoriesView);
271
- this.items.add(this.gridView);
272
- }
273
- /**
274
- * @inheritDoc
275
- */ render() {
276
- super.render();
277
- this.focusTracker.add(this.categoriesView.element);
278
- this.focusTracker.add(this.gridView.element);
279
- // Start listening for the keystrokes coming from #element.
280
- this.keystrokes.listenTo(this.element);
281
- }
282
- /**
283
- * @inheritDoc
284
- */ destroy() {
285
- super.destroy();
286
- this.focusTracker.destroy();
287
- this.keystrokes.destroy();
288
- }
289
- /**
290
- * Focuses the first focusable in {@link #items}.
291
- */ focus() {
292
- this._focusCycler.focusFirst();
293
- }
294
- }
177
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
178
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
179
+ */
180
+ /**
181
+ * @module special-characters/ui/specialcharactersview
182
+ */
183
+ /**
184
+ * A view that glues pieces of the special characters dropdown panel together:
185
+ *
186
+ * * the navigation view (allows selecting the category),
187
+ * * the grid view (displays characters as a grid),
188
+ * * and the info view (displays detailed info about a specific character).
189
+ *
190
+ * @internal
191
+ */
192
+ var SpecialCharactersView = class extends View {
193
+ /**
194
+ * A collection of the focusable children of the view.
195
+ */
196
+ items;
197
+ /**
198
+ * Tracks information about the DOM focus in the view.
199
+ */
200
+ focusTracker;
201
+ /**
202
+ * An instance of the {@link module:utils/keystrokehandler~KeystrokeHandler}.
203
+ */
204
+ keystrokes;
205
+ /**
206
+ * Helps cycling over focusable {@link #items} in the view.
207
+ */
208
+ _focusCycler;
209
+ /**
210
+ * An instance of the `SpecialCharactersCategoriesView`.
211
+ */
212
+ categoriesView;
213
+ /**
214
+ * An instance of the `CharacterGridView`.
215
+ */
216
+ gridView;
217
+ /**
218
+ * An instance of the `CharacterInfoView`.
219
+ */
220
+ infoView;
221
+ /**
222
+ * Creates an instance of the `SpecialCharactersView`.
223
+ */
224
+ constructor(locale, categoriesView, gridView, infoView) {
225
+ super(locale);
226
+ this.categoriesView = categoriesView;
227
+ this.gridView = gridView;
228
+ this.infoView = infoView;
229
+ this.items = this.createCollection();
230
+ this.focusTracker = new FocusTracker();
231
+ this.keystrokes = new KeystrokeHandler();
232
+ this._focusCycler = new FocusCycler({
233
+ focusables: this.items,
234
+ focusTracker: this.focusTracker,
235
+ keystrokeHandler: this.keystrokes,
236
+ actions: {
237
+ focusPrevious: "shift + tab",
238
+ focusNext: "tab"
239
+ }
240
+ });
241
+ this.setTemplate({
242
+ tag: "div",
243
+ children: [
244
+ this.categoriesView,
245
+ this.gridView,
246
+ this.infoView
247
+ ],
248
+ attributes: { tabindex: "-1" }
249
+ });
250
+ this.items.add(this.categoriesView);
251
+ this.items.add(this.gridView);
252
+ }
253
+ /**
254
+ * @inheritDoc
255
+ */
256
+ render() {
257
+ super.render();
258
+ this.focusTracker.add(this.categoriesView.element);
259
+ this.focusTracker.add(this.gridView.element);
260
+ this.keystrokes.listenTo(this.element);
261
+ }
262
+ /**
263
+ * @inheritDoc
264
+ */
265
+ destroy() {
266
+ super.destroy();
267
+ this.focusTracker.destroy();
268
+ this.keystrokes.destroy();
269
+ }
270
+ /**
271
+ * Focuses the first focusable in {@link #items}.
272
+ */
273
+ focus() {
274
+ this._focusCycler.focusFirst();
275
+ }
276
+ };
295
277
 
296
278
  /**
297
- * A class representing the navigation part of the special characters UI. It is responsible
298
- * for describing the feature and allowing the user to select a particular character group.
299
- *
300
- * @internal
301
- */ class SpecialCharactersCategoriesView extends View {
302
- _groupNames;
303
- _dropdownView;
304
- /**
305
- * Creates an instance of the {@link module:special-characters/ui/specialcharacterscategoriesview~SpecialCharactersCategoriesView}
306
- * class.
307
- *
308
- * @param locale The localization services instance.
309
- * @param groupNames The names of the character groups.
310
- */ constructor(locale, groupNames){
311
- super(locale);
312
- this.set('currentGroupName', Array.from(groupNames.entries())[0][0]);
313
- this._groupNames = groupNames;
314
- this._dropdownView = new LabeledFieldView(locale, createLabeledDropdown);
315
- this.setTemplate({
316
- tag: 'div',
317
- attributes: {
318
- class: [
319
- 'ck',
320
- 'ck-character-categories'
321
- ]
322
- },
323
- children: [
324
- this._dropdownView
325
- ]
326
- });
327
- }
328
- /**
329
- * @inheritDoc
330
- */ render() {
331
- super.render();
332
- this._setupDropdown();
333
- }
334
- /**
335
- * @inheritDoc
336
- */ focus() {
337
- this._dropdownView.focus();
338
- }
339
- /**
340
- * Creates dropdown item list, sets up bindings and fills properties.
341
- */ _setupDropdown() {
342
- const items = new Collection();
343
- for (const [name, label] of this._groupNames){
344
- const item = {
345
- type: 'button',
346
- model: new UIModel({
347
- name,
348
- label,
349
- role: 'menuitemradio',
350
- withText: true
351
- })
352
- };
353
- item.model.bind('isOn').to(this, 'currentGroupName', (value)=>{
354
- return value === name;
355
- });
356
- items.add(item);
357
- }
358
- const t = this.locale.t;
359
- const accessibleLabel = t('Category');
360
- this._dropdownView.set({
361
- label: accessibleLabel,
362
- isEmpty: false
363
- });
364
- this._dropdownView.fieldView.panelPosition = this.locale.uiLanguageDirection === 'rtl' ? 'se' : 'sw';
365
- this._dropdownView.fieldView.buttonView.set({
366
- withText: true,
367
- tooltip: accessibleLabel,
368
- ariaLabel: accessibleLabel,
369
- ariaLabelledBy: undefined,
370
- isOn: false
371
- });
372
- this._dropdownView.fieldView.buttonView.bind('label').to(this, 'currentGroupName', (value)=>this._groupNames.get(value));
373
- this._dropdownView.fieldView.on('execute', ({ source })=>{
374
- this.currentGroupName = source.name;
375
- });
376
- addListToDropdown(this._dropdownView.fieldView, items, {
377
- ariaLabel: accessibleLabel,
378
- role: 'menu'
379
- });
380
- }
381
- }
279
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
280
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
281
+ */
282
+ /**
283
+ * @module special-characters/ui/specialcharacterscategoriesview
284
+ */
285
+ /**
286
+ * A class representing the navigation part of the special characters UI. It is responsible
287
+ * for describing the feature and allowing the user to select a particular character group.
288
+ *
289
+ * @internal
290
+ */
291
+ var SpecialCharactersCategoriesView = class extends View {
292
+ _groupNames;
293
+ _dropdownView;
294
+ /**
295
+ * Creates an instance of the {@link module:special-characters/ui/specialcharacterscategoriesview~SpecialCharactersCategoriesView}
296
+ * class.
297
+ *
298
+ * @param locale The localization services instance.
299
+ * @param groupNames The names of the character groups.
300
+ */
301
+ constructor(locale, groupNames) {
302
+ super(locale);
303
+ this.set("currentGroupName", Array.from(groupNames.entries())[0][0]);
304
+ this._groupNames = groupNames;
305
+ this._dropdownView = new LabeledFieldView(locale, createLabeledDropdown);
306
+ this.setTemplate({
307
+ tag: "div",
308
+ attributes: { class: ["ck", "ck-character-categories"] },
309
+ children: [this._dropdownView]
310
+ });
311
+ }
312
+ /**
313
+ * @inheritDoc
314
+ */
315
+ render() {
316
+ super.render();
317
+ this._setupDropdown();
318
+ }
319
+ /**
320
+ * @inheritDoc
321
+ */
322
+ focus() {
323
+ this._dropdownView.focus();
324
+ }
325
+ /**
326
+ * Creates dropdown item list, sets up bindings and fills properties.
327
+ */
328
+ _setupDropdown() {
329
+ const items = new Collection();
330
+ for (const [name, label] of this._groupNames) {
331
+ const item = {
332
+ type: "button",
333
+ model: new UIModel({
334
+ name,
335
+ label,
336
+ role: "menuitemradio",
337
+ withText: true
338
+ })
339
+ };
340
+ item.model.bind("isOn").to(this, "currentGroupName", (value) => {
341
+ return value === name;
342
+ });
343
+ items.add(item);
344
+ }
345
+ const t = this.locale.t;
346
+ const accessibleLabel = t("Category");
347
+ this._dropdownView.set({
348
+ label: accessibleLabel,
349
+ isEmpty: false
350
+ });
351
+ this._dropdownView.fieldView.panelPosition = this.locale.uiLanguageDirection === "rtl" ? "se" : "sw";
352
+ this._dropdownView.fieldView.buttonView.set({
353
+ withText: true,
354
+ tooltip: accessibleLabel,
355
+ ariaLabel: accessibleLabel,
356
+ ariaLabelledBy: void 0,
357
+ isOn: false
358
+ });
359
+ this._dropdownView.fieldView.buttonView.bind("label").to(this, "currentGroupName", (value) => this._groupNames.get(value));
360
+ this._dropdownView.fieldView.on("execute", ({ source }) => {
361
+ this.currentGroupName = source.name;
362
+ });
363
+ addListToDropdown(this._dropdownView.fieldView, items, {
364
+ ariaLabel: accessibleLabel,
365
+ role: "menu"
366
+ });
367
+ }
368
+ };
382
369
 
383
- const ALL_SPECIAL_CHARACTERS_GROUP = 'All';
384
370
  /**
385
- * The special characters feature.
386
- *
387
- * Introduces the `'specialCharacters'` dropdown.
388
- */ class SpecialCharacters extends Plugin {
389
- /**
390
- * Registered characters. A pair of a character name and its symbol.
391
- */ _characters;
392
- /**
393
- * Registered groups. Each group contains a displayed label and a collection with symbol names.
394
- */ _groups;
395
- /**
396
- * A label describing the "All" special characters category.
397
- */ _allSpecialCharactersGroupLabel;
398
- /**
399
- * @inheritDoc
400
- */ static get requires() {
401
- return [
402
- Typing,
403
- Dialog
404
- ];
405
- }
406
- /**
407
- * @inheritDoc
408
- */ static get pluginName() {
409
- return 'SpecialCharacters';
410
- }
411
- /**
412
- * @inheritDoc
413
- * @internal
414
- */ static get licenseFeatureCode() {
415
- return 'SCH';
416
- }
417
- /**
418
- * @inheritDoc
419
- */ static get isOfficialPlugin() {
420
- return true;
421
- }
422
- /**
423
- * @inheritDoc
424
- */ static get isPremiumPlugin() {
425
- return true;
426
- }
427
- /**
428
- * @inheritDoc
429
- */ constructor(editor){
430
- super(editor);
431
- const t = editor.t;
432
- this._characters = new Map();
433
- this._groups = new Map();
434
- this._allSpecialCharactersGroupLabel = t('All');
435
- }
436
- /**
437
- * @inheritDoc
438
- */ init() {
439
- const editor = this.editor;
440
- editor.ui.componentFactory.add('specialCharacters', ()=>{
441
- const button = this._createDialogButton(ButtonView);
442
- button.set({
443
- tooltip: true
444
- });
445
- return button;
446
- });
447
- editor.ui.componentFactory.add('menuBar:specialCharacters', ()=>{
448
- return this._createDialogButton(MenuBarMenuListItemButtonView);
449
- });
450
- }
451
- /**
452
- * Adds a collection of special characters to the specified group. The title of a special character must be unique.
453
- *
454
- * **Note:** The "All" category name is reserved by the plugin and cannot be used as a new name for a special
455
- * characters category.
456
- */ addItems(groupName, items, options = {
457
- label: groupName
458
- }) {
459
- if (groupName === ALL_SPECIAL_CHARACTERS_GROUP) {
460
- /**
461
- * The name "All" for a special category group cannot be used because it is a special category that displays all
462
- * available special characters.
463
- *
464
- * @error special-character-invalid-group-name
465
- */ throw new CKEditorError('special-character-invalid-group-name', null);
466
- }
467
- const group = this._getGroup(groupName, options.label);
468
- for (const item of items){
469
- group.items.add(item.title);
470
- this._characters.set(item.title, item.character);
471
- }
472
- }
473
- /**
474
- * Returns special character groups in an order determined based on configuration and registration sequence.
475
- */ getGroups() {
476
- const groups = Array.from(this._groups.keys());
477
- const order = this.editor.config.get('specialCharacters.order') || [];
478
- const invalidGroup = order.find((item)=>!groups.includes(item));
479
- if (invalidGroup) {
480
- /**
481
- * One of the special character groups in the "specialCharacters.order" configuration doesn't exist.
482
- *
483
- * @error special-character-invalid-order-group-name
484
- */ throw new CKEditorError('special-character-invalid-order-group-name', null, {
485
- invalidGroup
486
- });
487
- }
488
- return new Set([
489
- ...order,
490
- ...groups
491
- ]);
492
- }
493
- /**
494
- * Returns a collection of special characters symbol names (titles).
495
- */ getCharactersForGroup(groupName) {
496
- if (groupName === ALL_SPECIAL_CHARACTERS_GROUP) {
497
- return new Set(this._characters.keys());
498
- }
499
- const group = this._groups.get(groupName);
500
- if (group) {
501
- return group.items;
502
- }
503
- }
504
- /**
505
- * Returns the symbol of a special character for the specified name. If the special character could not be found, `undefined`
506
- * is returned.
507
- *
508
- * @param title The title of a special character.
509
- */ getCharacter(title) {
510
- return this._characters.get(title);
511
- }
512
- /**
513
- * Returns a group of special characters. If the group with the specified name does not exist, it will be created.
514
- *
515
- * @param groupName The name of the group to create.
516
- * @param label The label describing the new group.
517
- */ _getGroup(groupName, label) {
518
- if (!this._groups.has(groupName)) {
519
- this._groups.set(groupName, {
520
- items: new Set(),
521
- label
522
- });
523
- }
524
- return this._groups.get(groupName);
525
- }
526
- /**
527
- * Updates the symbol grid depending on the currently selected character group.
528
- */ _updateGrid(currentGroupName, gridView) {
529
- // Updating the grid starts with removing all tiles belonging to the old group.
530
- gridView.tiles.clear();
531
- const characterTitles = this.getCharactersForGroup(currentGroupName);
532
- for (const title of characterTitles){
533
- const character = this.getCharacter(title);
534
- gridView.tiles.add(gridView.createTile(character, title));
535
- }
536
- }
537
- /**
538
- * Initializes the dropdown, used for lazy loading.
539
- *
540
- * @returns An object with `categoriesView`, `gridView` and `infoView` properties, containing UI parts.
541
- */ _createDropdownPanelContent(locale) {
542
- const groupEntries = Array.from(this.getGroups()).map((name)=>[
543
- name,
544
- this._groups.get(name).label
545
- ]);
546
- // The map contains a name of category (an identifier) and its label (a translational string).
547
- const specialCharsGroups = new Map([
548
- // Add a special group that shows all available special characters.
549
- [
550
- ALL_SPECIAL_CHARACTERS_GROUP,
551
- this._allSpecialCharactersGroupLabel
552
- ],
553
- ...groupEntries
554
- ]);
555
- const categoriesView = new SpecialCharactersCategoriesView(locale, specialCharsGroups);
556
- const gridView = new CharacterGridView(locale);
557
- const infoView = new CharacterInfoView(locale);
558
- gridView.on('tileHover', (evt, data)=>{
559
- infoView.set(data);
560
- });
561
- gridView.on('tileFocus', (evt, data)=>{
562
- infoView.set(data);
563
- });
564
- // Update the grid of special characters when a user changed the character group.
565
- categoriesView.on('change:currentGroupName', (evt, propertyName, newValue)=>{
566
- this._updateGrid(newValue, gridView);
567
- });
568
- // Set the initial content of the special characters grid.
569
- this._updateGrid(categoriesView.currentGroupName, gridView);
570
- return {
571
- categoriesView,
572
- gridView,
573
- infoView
574
- };
575
- }
576
- /**
577
- * Creates a button for toolbar and menu bar that will show special characters dialog.
578
- */ _createDialogButton(ButtonClass) {
579
- const editor = this.editor;
580
- const locale = editor.locale;
581
- const buttonView = new ButtonClass(editor.locale);
582
- const command = editor.commands.get('insertText');
583
- const t = locale.t;
584
- const dialogPlugin = this.editor.plugins.get('Dialog');
585
- buttonView.set({
586
- label: t('Special characters'),
587
- icon: IconSpecialCharacters,
588
- isToggleable: true
589
- });
590
- buttonView.bind('isOn').to(dialogPlugin, 'id', (id)=>id === 'specialCharacters');
591
- buttonView.bind('isEnabled').to(command, 'isEnabled');
592
- buttonView.on('execute', ()=>{
593
- if (dialogPlugin.id === 'specialCharacters') {
594
- dialogPlugin.hide();
595
- return;
596
- }
597
- this._showDialog();
598
- });
599
- return buttonView;
600
- }
601
- _showDialog() {
602
- const editor = this.editor;
603
- const dialog = editor.plugins.get('Dialog');
604
- const locale = editor.locale;
605
- const t = locale.t;
606
- const { categoriesView, gridView, infoView } = this._createDropdownPanelContent(locale);
607
- const content = new SpecialCharactersView(locale, categoriesView, gridView, infoView);
608
- gridView.on('execute', (evt, data)=>{
609
- editor.execute('insertText', {
610
- text: data.character
611
- });
612
- });
613
- dialog.show({
614
- id: 'specialCharacters',
615
- title: t('Special characters'),
616
- className: 'ck-special-characters',
617
- content,
618
- position: DialogViewPosition.EDITOR_TOP_SIDE
619
- });
620
- }
621
- }
371
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
372
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
373
+ */
374
+ /**
375
+ * @module special-characters/specialcharacters
376
+ */
377
+ const ALL_SPECIAL_CHARACTERS_GROUP = "All";
378
+ /**
379
+ * The special characters feature.
380
+ *
381
+ * Introduces the `'specialCharacters'` dropdown.
382
+ */
383
+ var SpecialCharacters = class extends Plugin {
384
+ /**
385
+ * Registered characters. A pair of a character name and its symbol.
386
+ */
387
+ _characters;
388
+ /**
389
+ * Registered groups. Each group contains a displayed label and a collection with symbol names.
390
+ */
391
+ _groups;
392
+ /**
393
+ * A label describing the "All" special characters category.
394
+ */
395
+ _allSpecialCharactersGroupLabel;
396
+ /**
397
+ * @inheritDoc
398
+ */
399
+ static get requires() {
400
+ return [Typing, Dialog];
401
+ }
402
+ /**
403
+ * @inheritDoc
404
+ */
405
+ static get pluginName() {
406
+ return "SpecialCharacters";
407
+ }
408
+ /**
409
+ * @inheritDoc
410
+ * @internal
411
+ */
412
+ static get licenseFeatureCode() {
413
+ return "SCH";
414
+ }
415
+ /**
416
+ * @inheritDoc
417
+ */
418
+ static get isOfficialPlugin() {
419
+ return true;
420
+ }
421
+ /**
422
+ * @inheritDoc
423
+ */
424
+ static get isPremiumPlugin() {
425
+ return true;
426
+ }
427
+ /**
428
+ * @inheritDoc
429
+ */
430
+ constructor(editor) {
431
+ super(editor);
432
+ const t = editor.t;
433
+ this._characters = /* @__PURE__ */ new Map();
434
+ this._groups = /* @__PURE__ */ new Map();
435
+ this._allSpecialCharactersGroupLabel = t("All");
436
+ }
437
+ /**
438
+ * @inheritDoc
439
+ */
440
+ init() {
441
+ const editor = this.editor;
442
+ editor.ui.componentFactory.add("specialCharacters", () => {
443
+ const button = this._createDialogButton(ButtonView);
444
+ button.set({ tooltip: true });
445
+ return button;
446
+ });
447
+ editor.ui.componentFactory.add("menuBar:specialCharacters", () => {
448
+ return this._createDialogButton(MenuBarMenuListItemButtonView);
449
+ });
450
+ }
451
+ /**
452
+ * Adds a collection of special characters to the specified group. The title of a special character must be unique.
453
+ *
454
+ * **Note:** The "All" category name is reserved by the plugin and cannot be used as a new name for a special
455
+ * characters category.
456
+ */
457
+ addItems(groupName, items, options = { label: groupName }) {
458
+ if (groupName === ALL_SPECIAL_CHARACTERS_GROUP)
459
+ /**
460
+ * The name "All" for a special category group cannot be used because it is a special category that displays all
461
+ * available special characters.
462
+ *
463
+ * @error special-character-invalid-group-name
464
+ */
465
+ throw new CKEditorError("special-character-invalid-group-name", null);
466
+ const group = this._getGroup(groupName, options.label);
467
+ for (const item of items) {
468
+ group.items.add(item.title);
469
+ this._characters.set(item.title, item.character);
470
+ }
471
+ }
472
+ /**
473
+ * Returns special character groups in an order determined based on configuration and registration sequence.
474
+ */
475
+ getGroups() {
476
+ const groups = Array.from(this._groups.keys());
477
+ const order = this.editor.config.get("specialCharacters.order") || [];
478
+ const invalidGroup = order.find((item) => !groups.includes(item));
479
+ if (invalidGroup)
480
+ /**
481
+ * One of the special character groups in the "specialCharacters.order" configuration doesn't exist.
482
+ *
483
+ * @error special-character-invalid-order-group-name
484
+ */
485
+ throw new CKEditorError("special-character-invalid-order-group-name", null, { invalidGroup });
486
+ return new Set([...order, ...groups]);
487
+ }
488
+ /**
489
+ * Returns a collection of special characters symbol names (titles).
490
+ */
491
+ getCharactersForGroup(groupName) {
492
+ if (groupName === ALL_SPECIAL_CHARACTERS_GROUP) return new Set(this._characters.keys());
493
+ const group = this._groups.get(groupName);
494
+ if (group) return group.items;
495
+ }
496
+ /**
497
+ * Returns the symbol of a special character for the specified name. If the special character could not be found, `undefined`
498
+ * is returned.
499
+ *
500
+ * @param title The title of a special character.
501
+ */
502
+ getCharacter(title) {
503
+ return this._characters.get(title);
504
+ }
505
+ /**
506
+ * Returns a group of special characters. If the group with the specified name does not exist, it will be created.
507
+ *
508
+ * @param groupName The name of the group to create.
509
+ * @param label The label describing the new group.
510
+ */
511
+ _getGroup(groupName, label) {
512
+ if (!this._groups.has(groupName)) this._groups.set(groupName, {
513
+ items: /* @__PURE__ */ new Set(),
514
+ label
515
+ });
516
+ return this._groups.get(groupName);
517
+ }
518
+ /**
519
+ * Updates the symbol grid depending on the currently selected character group.
520
+ */
521
+ _updateGrid(currentGroupName, gridView) {
522
+ gridView.tiles.clear();
523
+ const characterTitles = this.getCharactersForGroup(currentGroupName);
524
+ for (const title of characterTitles) {
525
+ const character = this.getCharacter(title);
526
+ gridView.tiles.add(gridView.createTile(character, title));
527
+ }
528
+ }
529
+ /**
530
+ * Initializes the dropdown, used for lazy loading.
531
+ *
532
+ * @returns An object with `categoriesView`, `gridView` and `infoView` properties, containing UI parts.
533
+ */
534
+ _createDropdownPanelContent(locale) {
535
+ const groupEntries = Array.from(this.getGroups()).map((name) => [name, this._groups.get(name).label]);
536
+ const categoriesView = new SpecialCharactersCategoriesView(locale, new Map([[ALL_SPECIAL_CHARACTERS_GROUP, this._allSpecialCharactersGroupLabel], ...groupEntries]));
537
+ const gridView = new CharacterGridView(locale);
538
+ const infoView = new CharacterInfoView(locale);
539
+ gridView.on("tileHover", (evt, data) => {
540
+ infoView.set(data);
541
+ });
542
+ gridView.on("tileFocus", (evt, data) => {
543
+ infoView.set(data);
544
+ });
545
+ categoriesView.on("change:currentGroupName", (evt, propertyName, newValue) => {
546
+ this._updateGrid(newValue, gridView);
547
+ });
548
+ this._updateGrid(categoriesView.currentGroupName, gridView);
549
+ return {
550
+ categoriesView,
551
+ gridView,
552
+ infoView
553
+ };
554
+ }
555
+ /**
556
+ * Creates a button for toolbar and menu bar that will show special characters dialog.
557
+ */
558
+ _createDialogButton(ButtonClass) {
559
+ const editor = this.editor;
560
+ const locale = editor.locale;
561
+ const buttonView = new ButtonClass(editor.locale);
562
+ const command = editor.commands.get("insertText");
563
+ const t = locale.t;
564
+ const dialogPlugin = this.editor.plugins.get("Dialog");
565
+ buttonView.set({
566
+ label: t("Special characters"),
567
+ icon: IconSpecialCharacters,
568
+ isToggleable: true
569
+ });
570
+ buttonView.bind("isOn").to(dialogPlugin, "id", (id) => id === "specialCharacters");
571
+ buttonView.bind("isEnabled").to(command, "isEnabled");
572
+ buttonView.on("execute", () => {
573
+ if (dialogPlugin.id === "specialCharacters") {
574
+ dialogPlugin.hide();
575
+ return;
576
+ }
577
+ this._showDialog();
578
+ });
579
+ return buttonView;
580
+ }
581
+ _showDialog() {
582
+ const editor = this.editor;
583
+ const dialog = editor.plugins.get("Dialog");
584
+ const locale = editor.locale;
585
+ const t = locale.t;
586
+ const { categoriesView, gridView, infoView } = this._createDropdownPanelContent(locale);
587
+ const content = new SpecialCharactersView(locale, categoriesView, gridView, infoView);
588
+ gridView.on("execute", (evt, data) => {
589
+ editor.execute("insertText", { text: data.character });
590
+ });
591
+ dialog.show({
592
+ id: "specialCharacters",
593
+ title: t("Special characters"),
594
+ className: "ck-special-characters",
595
+ content,
596
+ position: DialogViewPosition.EDITOR_TOP_SIDE
597
+ });
598
+ }
599
+ };
622
600
 
623
601
  /**
624
- * A plugin that provides special characters for the "Arrows" category.
625
- *
626
- * ```ts
627
- * ClassicEditor
628
- * .create( {
629
- * plugins: [ ..., SpecialCharacters, SpecialCharactersArrows ],
630
- * } )
631
- * .then( ... )
632
- * .catch( ... );
633
- * ```
634
- */ class SpecialCharactersArrows extends Plugin {
635
- /**
636
- * @inheritDoc
637
- */ static get pluginName() {
638
- return 'SpecialCharactersArrows';
639
- }
640
- /**
641
- * @inheritDoc
642
- */ static get isOfficialPlugin() {
643
- return true;
644
- }
645
- /**
646
- * @inheritDoc
647
- */ init() {
648
- const editor = this.editor;
649
- const t = editor.t;
650
- const plugin = editor.plugins.get('SpecialCharacters');
651
- plugin.addItems('Arrows', [
652
- {
653
- title: t('leftwards simple arrow'),
654
- character: '←'
655
- },
656
- {
657
- title: t('rightwards simple arrow'),
658
- character: '→'
659
- },
660
- {
661
- title: t('upwards simple arrow'),
662
- character: '↑'
663
- },
664
- {
665
- title: t('downwards simple arrow'),
666
- character: '↓'
667
- },
668
- {
669
- title: t('leftwards double arrow'),
670
- character: '⇐'
671
- },
672
- {
673
- title: t('rightwards double arrow'),
674
- character: '⇒'
675
- },
676
- {
677
- title: t('upwards double arrow'),
678
- character: '⇑'
679
- },
680
- {
681
- title: t('downwards double arrow'),
682
- character: '⇓'
683
- },
684
- {
685
- title: t('leftwards dashed arrow'),
686
- character: '⇠'
687
- },
688
- {
689
- title: t('rightwards dashed arrow'),
690
- character: '⇢'
691
- },
692
- {
693
- title: t('upwards dashed arrow'),
694
- character: '⇡'
695
- },
696
- {
697
- title: t('downwards dashed arrow'),
698
- character: '⇣'
699
- },
700
- {
701
- title: t('leftwards arrow to bar'),
702
- character: '⇤'
703
- },
704
- {
705
- title: t('rightwards arrow to bar'),
706
- character: '⇥'
707
- },
708
- {
709
- title: t('upwards arrow to bar'),
710
- character: '⤒'
711
- },
712
- {
713
- title: t('downwards arrow to bar'),
714
- character: '⤓'
715
- },
716
- {
717
- title: t('up down arrow with base'),
718
- character: '↨'
719
- },
720
- {
721
- title: t('back with leftwards arrow above'),
722
- character: '🔙'
723
- },
724
- {
725
- title: t('end with leftwards arrow above'),
726
- character: '🔚'
727
- },
728
- {
729
- title: t('on with exclamation mark with left right arrow above'),
730
- character: '🔛'
731
- },
732
- {
733
- title: t('soon with rightwards arrow above'),
734
- character: '🔜'
735
- },
736
- {
737
- title: t('top with upwards arrow above'),
738
- character: '🔝'
739
- }
740
- ], {
741
- label: t('Arrows')
742
- });
743
- }
744
- }
602
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
603
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
604
+ */
605
+ /**
606
+ * @module special-characters/specialcharactersarrows
607
+ */
608
+ /**
609
+ * A plugin that provides special characters for the "Arrows" category.
610
+ *
611
+ * ```ts
612
+ * ClassicEditor
613
+ * .create( {
614
+ * plugins: [ ..., SpecialCharacters, SpecialCharactersArrows ],
615
+ * } )
616
+ * .then( ... )
617
+ * .catch( ... );
618
+ * ```
619
+ */
620
+ var SpecialCharactersArrows = class extends Plugin {
621
+ /**
622
+ * @inheritDoc
623
+ */
624
+ static get pluginName() {
625
+ return "SpecialCharactersArrows";
626
+ }
627
+ /**
628
+ * @inheritDoc
629
+ */
630
+ static get isOfficialPlugin() {
631
+ return true;
632
+ }
633
+ /**
634
+ * @inheritDoc
635
+ */
636
+ init() {
637
+ const editor = this.editor;
638
+ const t = editor.t;
639
+ editor.plugins.get("SpecialCharacters").addItems("Arrows", [
640
+ {
641
+ title: t("leftwards simple arrow"),
642
+ character: "←"
643
+ },
644
+ {
645
+ title: t("rightwards simple arrow"),
646
+ character: "→"
647
+ },
648
+ {
649
+ title: t("upwards simple arrow"),
650
+ character: "↑"
651
+ },
652
+ {
653
+ title: t("downwards simple arrow"),
654
+ character: "↓"
655
+ },
656
+ {
657
+ title: t("leftwards double arrow"),
658
+ character: "⇐"
659
+ },
660
+ {
661
+ title: t("rightwards double arrow"),
662
+ character: "⇒"
663
+ },
664
+ {
665
+ title: t("upwards double arrow"),
666
+ character: "⇑"
667
+ },
668
+ {
669
+ title: t("downwards double arrow"),
670
+ character: "⇓"
671
+ },
672
+ {
673
+ title: t("leftwards dashed arrow"),
674
+ character: "⇠"
675
+ },
676
+ {
677
+ title: t("rightwards dashed arrow"),
678
+ character: "⇢"
679
+ },
680
+ {
681
+ title: t("upwards dashed arrow"),
682
+ character: "⇡"
683
+ },
684
+ {
685
+ title: t("downwards dashed arrow"),
686
+ character: "⇣"
687
+ },
688
+ {
689
+ title: t("leftwards arrow to bar"),
690
+ character: "⇤"
691
+ },
692
+ {
693
+ title: t("rightwards arrow to bar"),
694
+ character: "⇥"
695
+ },
696
+ {
697
+ title: t("upwards arrow to bar"),
698
+ character: "⤒"
699
+ },
700
+ {
701
+ title: t("downwards arrow to bar"),
702
+ character: "⤓"
703
+ },
704
+ {
705
+ title: t("up down arrow with base"),
706
+ character: "↨"
707
+ },
708
+ {
709
+ title: t("back with leftwards arrow above"),
710
+ character: "🔙"
711
+ },
712
+ {
713
+ title: t("end with leftwards arrow above"),
714
+ character: "🔚"
715
+ },
716
+ {
717
+ title: t("on with exclamation mark with left right arrow above"),
718
+ character: "🔛"
719
+ },
720
+ {
721
+ title: t("soon with rightwards arrow above"),
722
+ character: "🔜"
723
+ },
724
+ {
725
+ title: t("top with upwards arrow above"),
726
+ character: "🔝"
727
+ }
728
+ ], { label: t("Arrows") });
729
+ }
730
+ };
745
731
 
746
732
  /**
747
- * A plugin that provides special characters for the "Text" category.
748
- *
749
- * ```ts
750
- * ClassicEditor
751
- * .create( {
752
- * plugins: [ ..., SpecialCharacters, SpecialCharactersText ],
753
- * } )
754
- * .then( ... )
755
- * .catch( ... );
756
- * ```
757
- */ class SpecialCharactersText extends Plugin {
758
- /**
759
- * @inheritDoc
760
- */ static get pluginName() {
761
- return 'SpecialCharactersText';
762
- }
763
- /**
764
- * @inheritDoc
765
- */ static get isOfficialPlugin() {
766
- return true;
767
- }
768
- /**
769
- * @inheritDoc
770
- */ init() {
771
- const editor = this.editor;
772
- const t = editor.t;
773
- const plugin = editor.plugins.get('SpecialCharacters');
774
- plugin.addItems('Text', [
775
- {
776
- character: '‹',
777
- title: t('Single left-pointing angle quotation mark')
778
- },
779
- {
780
- character: '›',
781
- title: t('Single right-pointing angle quotation mark')
782
- },
783
- {
784
- character: '«',
785
- title: t('Left-pointing double angle quotation mark')
786
- },
787
- {
788
- character: '»',
789
- title: t('Right-pointing double angle quotation mark')
790
- },
791
- {
792
- character: '‘',
793
- title: t('Left single quotation mark')
794
- },
795
- {
796
- character: '’',
797
- title: t('Right single quotation mark')
798
- },
799
- {
800
- character: '“',
801
- title: t('Left double quotation mark')
802
- },
803
- {
804
- character: '”',
805
- title: t('Right double quotation mark')
806
- },
807
- {
808
- character: '‚',
809
- title: t('Single low-9 quotation mark')
810
- },
811
- {
812
- character: '„',
813
- title: t('Double low-9 quotation mark')
814
- },
815
- {
816
- character: '¡',
817
- title: t('Inverted exclamation mark')
818
- },
819
- {
820
- character: '¿',
821
- title: t('Inverted question mark')
822
- },
823
- {
824
- character: '‥',
825
- title: t('Two dot leader')
826
- },
827
- {
828
- character: '…',
829
- title: t('Horizontal ellipsis')
830
- },
831
- {
832
- character: '‡',
833
- title: t('Double dagger')
834
- },
835
- {
836
- character: '‰',
837
- title: t('Per mille sign')
838
- },
839
- {
840
- character: '‱',
841
- title: t('Per ten thousand sign')
842
- },
843
- {
844
- character: '‼',
845
- title: t('Double exclamation mark')
846
- },
847
- {
848
- character: '⁈',
849
- title: t('Question exclamation mark')
850
- },
851
- {
852
- character: '⁉',
853
- title: t('Exclamation question mark')
854
- },
855
- {
856
- character: '⁇',
857
- title: t('Double question mark')
858
- },
859
- {
860
- character: '©',
861
- title: t('Copyright sign')
862
- },
863
- {
864
- character: '®',
865
- title: t('Registered sign')
866
- },
867
- {
868
- character: '™',
869
- title: t('Trade mark sign')
870
- },
871
- {
872
- character: '§',
873
- title: t('Section sign')
874
- },
875
- {
876
- character: '¶',
877
- title: t('Paragraph sign')
878
- },
879
- {
880
- character: '⁋',
881
- title: t('Reversed paragraph sign')
882
- }
883
- ], {
884
- label: t('Text')
885
- });
886
- }
887
- }
733
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
734
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
735
+ */
736
+ /**
737
+ * @module special-characters/specialcharacterstext
738
+ */
739
+ /**
740
+ * A plugin that provides special characters for the "Text" category.
741
+ *
742
+ * ```ts
743
+ * ClassicEditor
744
+ * .create( {
745
+ * plugins: [ ..., SpecialCharacters, SpecialCharactersText ],
746
+ * } )
747
+ * .then( ... )
748
+ * .catch( ... );
749
+ * ```
750
+ */
751
+ var SpecialCharactersText = class extends Plugin {
752
+ /**
753
+ * @inheritDoc
754
+ */
755
+ static get pluginName() {
756
+ return "SpecialCharactersText";
757
+ }
758
+ /**
759
+ * @inheritDoc
760
+ */
761
+ static get isOfficialPlugin() {
762
+ return true;
763
+ }
764
+ /**
765
+ * @inheritDoc
766
+ */
767
+ init() {
768
+ const editor = this.editor;
769
+ const t = editor.t;
770
+ editor.plugins.get("SpecialCharacters").addItems("Text", [
771
+ {
772
+ character: "‹",
773
+ title: t("Single left-pointing angle quotation mark")
774
+ },
775
+ {
776
+ character: "›",
777
+ title: t("Single right-pointing angle quotation mark")
778
+ },
779
+ {
780
+ character: "«",
781
+ title: t("Left-pointing double angle quotation mark")
782
+ },
783
+ {
784
+ character: "»",
785
+ title: t("Right-pointing double angle quotation mark")
786
+ },
787
+ {
788
+ character: "‘",
789
+ title: t("Left single quotation mark")
790
+ },
791
+ {
792
+ character: "’",
793
+ title: t("Right single quotation mark")
794
+ },
795
+ {
796
+ character: "“",
797
+ title: t("Left double quotation mark")
798
+ },
799
+ {
800
+ character: "”",
801
+ title: t("Right double quotation mark")
802
+ },
803
+ {
804
+ character: "‚",
805
+ title: t("Single low-9 quotation mark")
806
+ },
807
+ {
808
+ character: "„",
809
+ title: t("Double low-9 quotation mark")
810
+ },
811
+ {
812
+ character: "¡",
813
+ title: t("Inverted exclamation mark")
814
+ },
815
+ {
816
+ character: "¿",
817
+ title: t("Inverted question mark")
818
+ },
819
+ {
820
+ character: "‥",
821
+ title: t("Two dot leader")
822
+ },
823
+ {
824
+ character: "…",
825
+ title: t("Horizontal ellipsis")
826
+ },
827
+ {
828
+ character: "‡",
829
+ title: t("Double dagger")
830
+ },
831
+ {
832
+ character: "‰",
833
+ title: t("Per mille sign")
834
+ },
835
+ {
836
+ character: "‱",
837
+ title: t("Per ten thousand sign")
838
+ },
839
+ {
840
+ character: "‼",
841
+ title: t("Double exclamation mark")
842
+ },
843
+ {
844
+ character: "⁈",
845
+ title: t("Question exclamation mark")
846
+ },
847
+ {
848
+ character: "⁉",
849
+ title: t("Exclamation question mark")
850
+ },
851
+ {
852
+ character: "⁇",
853
+ title: t("Double question mark")
854
+ },
855
+ {
856
+ character: "©",
857
+ title: t("Copyright sign")
858
+ },
859
+ {
860
+ character: "®",
861
+ title: t("Registered sign")
862
+ },
863
+ {
864
+ character: "™",
865
+ title: t("Trade mark sign")
866
+ },
867
+ {
868
+ character: "§",
869
+ title: t("Section sign")
870
+ },
871
+ {
872
+ character: "¶",
873
+ title: t("Paragraph sign")
874
+ },
875
+ {
876
+ character: "⁋",
877
+ title: t("Reversed paragraph sign")
878
+ }
879
+ ], { label: t("Text") });
880
+ }
881
+ };
888
882
 
889
883
  /**
890
- * A plugin that provides special characters for the "Mathematical" category.
891
- *
892
- * ```ts
893
- * ClassicEditor
894
- * .create( {
895
- * plugins: [ ..., SpecialCharacters, SpecialCharactersMathematical ],
896
- * } )
897
- * .then( ... )
898
- * .catch( ... );
899
- * ```
900
- */ class SpecialCharactersMathematical extends Plugin {
901
- /**
902
- * @inheritDoc
903
- */ static get pluginName() {
904
- return 'SpecialCharactersMathematical';
905
- }
906
- /**
907
- * @inheritDoc
908
- */ static get isOfficialPlugin() {
909
- return true;
910
- }
911
- /**
912
- * @inheritDoc
913
- */ init() {
914
- const editor = this.editor;
915
- const t = editor.t;
916
- const plugin = editor.plugins.get('SpecialCharacters');
917
- plugin.addItems('Mathematical', [
918
- {
919
- character: '<',
920
- title: t('Less-than sign')
921
- },
922
- {
923
- character: '>',
924
- title: t('Greater-than sign')
925
- },
926
- {
927
- character: '≤',
928
- title: t('Less-than or equal to')
929
- },
930
- {
931
- character: '≥',
932
- title: t('Greater-than or equal to')
933
- },
934
- {
935
- character: '–',
936
- title: t('En dash')
937
- },
938
- {
939
- character: '—',
940
- title: t('Em dash')
941
- },
942
- {
943
- character: '¯',
944
- title: t('Macron')
945
- },
946
- {
947
- character: '‾',
948
- title: t('Overline')
949
- },
950
- {
951
- character: '°',
952
- title: t('Degree sign')
953
- },
954
- {
955
- character: '−',
956
- title: t('Minus sign')
957
- },
958
- {
959
- character: '±',
960
- title: t('Plus-minus sign')
961
- },
962
- {
963
- character: '÷',
964
- title: t('Division sign')
965
- },
966
- {
967
- character: '⁄',
968
- title: t('Fraction slash')
969
- },
970
- {
971
- character: '×',
972
- title: t('Multiplication sign')
973
- },
974
- {
975
- character: 'ƒ',
976
- title: t('Latin small letter f with hook')
977
- },
978
- {
979
- character: '∫',
980
- title: t('Integral')
981
- },
982
- {
983
- character: '∑',
984
- title: t('N-ary summation')
985
- },
986
- {
987
- character: '∞',
988
- title: t('Infinity')
989
- },
990
- {
991
- character: '√',
992
- title: t('Square root')
993
- },
994
- {
995
- character: '∼',
996
- title: t('Tilde operator')
997
- },
998
- {
999
- character: '≅',
1000
- title: t('Approximately equal to')
1001
- },
1002
- {
1003
- character: '≈',
1004
- title: t('Almost equal to')
1005
- },
1006
- {
1007
- character: '≠',
1008
- title: t('Not equal to')
1009
- },
1010
- {
1011
- character: '≡',
1012
- title: t('Identical to')
1013
- },
1014
- {
1015
- character: '∈',
1016
- title: t('Element of')
1017
- },
1018
- {
1019
- character: '∉',
1020
- title: t('Not an element of')
1021
- },
1022
- {
1023
- character: '∋',
1024
- title: t('Contains as member')
1025
- },
1026
- {
1027
- character: '∏',
1028
- title: t('N-ary product')
1029
- },
1030
- {
1031
- character: '∧',
1032
- title: t('Logical and')
1033
- },
1034
- {
1035
- character: '∨',
1036
- title: t('Logical or')
1037
- },
1038
- {
1039
- character: '¬',
1040
- title: t('Not sign')
1041
- },
1042
- {
1043
- character: '∩',
1044
- title: t('Intersection')
1045
- },
1046
- {
1047
- character: '∪',
1048
- title: t('Union')
1049
- },
1050
- {
1051
- character: '∂',
1052
- title: t('Partial differential')
1053
- },
1054
- {
1055
- character: '∀',
1056
- title: t('For all')
1057
- },
1058
- {
1059
- character: '∃',
1060
- title: t('There exists')
1061
- },
1062
- {
1063
- character: '∅',
1064
- title: t('Empty set')
1065
- },
1066
- {
1067
- character: '∇',
1068
- title: t('Nabla')
1069
- },
1070
- {
1071
- character: '∗',
1072
- title: t('Asterisk operator')
1073
- },
1074
- {
1075
- character: '∝',
1076
- title: t('Proportional to')
1077
- },
1078
- {
1079
- character: '∠',
1080
- title: t('Angle')
1081
- },
1082
- {
1083
- character: '¼',
1084
- title: t('Vulgar fraction one quarter')
1085
- },
1086
- {
1087
- character: '½',
1088
- title: t('Vulgar fraction one half')
1089
- },
1090
- {
1091
- character: '¾',
1092
- title: t('Vulgar fraction three quarters')
1093
- }
1094
- ], {
1095
- label: t('Mathematical')
1096
- });
1097
- }
1098
- }
884
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
885
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
886
+ */
887
+ /**
888
+ * @module special-characters/specialcharactersmathematical
889
+ */
890
+ /**
891
+ * A plugin that provides special characters for the "Mathematical" category.
892
+ *
893
+ * ```ts
894
+ * ClassicEditor
895
+ * .create( {
896
+ * plugins: [ ..., SpecialCharacters, SpecialCharactersMathematical ],
897
+ * } )
898
+ * .then( ... )
899
+ * .catch( ... );
900
+ * ```
901
+ */
902
+ var SpecialCharactersMathematical = class extends Plugin {
903
+ /**
904
+ * @inheritDoc
905
+ */
906
+ static get pluginName() {
907
+ return "SpecialCharactersMathematical";
908
+ }
909
+ /**
910
+ * @inheritDoc
911
+ */
912
+ static get isOfficialPlugin() {
913
+ return true;
914
+ }
915
+ /**
916
+ * @inheritDoc
917
+ */
918
+ init() {
919
+ const editor = this.editor;
920
+ const t = editor.t;
921
+ editor.plugins.get("SpecialCharacters").addItems("Mathematical", [
922
+ {
923
+ character: "<",
924
+ title: t("Less-than sign")
925
+ },
926
+ {
927
+ character: ">",
928
+ title: t("Greater-than sign")
929
+ },
930
+ {
931
+ character: "≤",
932
+ title: t("Less-than or equal to")
933
+ },
934
+ {
935
+ character: "≥",
936
+ title: t("Greater-than or equal to")
937
+ },
938
+ {
939
+ character: "–",
940
+ title: t("En dash")
941
+ },
942
+ {
943
+ character: "—",
944
+ title: t("Em dash")
945
+ },
946
+ {
947
+ character: "¯",
948
+ title: t("Macron")
949
+ },
950
+ {
951
+ character: "‾",
952
+ title: t("Overline")
953
+ },
954
+ {
955
+ character: "°",
956
+ title: t("Degree sign")
957
+ },
958
+ {
959
+ character: "−",
960
+ title: t("Minus sign")
961
+ },
962
+ {
963
+ character: "±",
964
+ title: t("Plus-minus sign")
965
+ },
966
+ {
967
+ character: "÷",
968
+ title: t("Division sign")
969
+ },
970
+ {
971
+ character: "⁄",
972
+ title: t("Fraction slash")
973
+ },
974
+ {
975
+ character: "×",
976
+ title: t("Multiplication sign")
977
+ },
978
+ {
979
+ character: "ƒ",
980
+ title: t("Latin small letter f with hook")
981
+ },
982
+ {
983
+ character: "∫",
984
+ title: t("Integral")
985
+ },
986
+ {
987
+ character: "∑",
988
+ title: t("N-ary summation")
989
+ },
990
+ {
991
+ character: "∞",
992
+ title: t("Infinity")
993
+ },
994
+ {
995
+ character: "√",
996
+ title: t("Square root")
997
+ },
998
+ {
999
+ character: "∼",
1000
+ title: t("Tilde operator")
1001
+ },
1002
+ {
1003
+ character: "≅",
1004
+ title: t("Approximately equal to")
1005
+ },
1006
+ {
1007
+ character: "≈",
1008
+ title: t("Almost equal to")
1009
+ },
1010
+ {
1011
+ character: "≠",
1012
+ title: t("Not equal to")
1013
+ },
1014
+ {
1015
+ character: "≡",
1016
+ title: t("Identical to")
1017
+ },
1018
+ {
1019
+ character: "∈",
1020
+ title: t("Element of")
1021
+ },
1022
+ {
1023
+ character: "∉",
1024
+ title: t("Not an element of")
1025
+ },
1026
+ {
1027
+ character: "∋",
1028
+ title: t("Contains as member")
1029
+ },
1030
+ {
1031
+ character: "∏",
1032
+ title: t("N-ary product")
1033
+ },
1034
+ {
1035
+ character: "∧",
1036
+ title: t("Logical and")
1037
+ },
1038
+ {
1039
+ character: "∨",
1040
+ title: t("Logical or")
1041
+ },
1042
+ {
1043
+ character: "¬",
1044
+ title: t("Not sign")
1045
+ },
1046
+ {
1047
+ character: "∩",
1048
+ title: t("Intersection")
1049
+ },
1050
+ {
1051
+ character: "∪",
1052
+ title: t("Union")
1053
+ },
1054
+ {
1055
+ character: "∂",
1056
+ title: t("Partial differential")
1057
+ },
1058
+ {
1059
+ character: "∀",
1060
+ title: t("For all")
1061
+ },
1062
+ {
1063
+ character: "∃",
1064
+ title: t("There exists")
1065
+ },
1066
+ {
1067
+ character: "∅",
1068
+ title: t("Empty set")
1069
+ },
1070
+ {
1071
+ character: "∇",
1072
+ title: t("Nabla")
1073
+ },
1074
+ {
1075
+ character: "∗",
1076
+ title: t("Asterisk operator")
1077
+ },
1078
+ {
1079
+ character: "∝",
1080
+ title: t("Proportional to")
1081
+ },
1082
+ {
1083
+ character: "∠",
1084
+ title: t("Angle")
1085
+ },
1086
+ {
1087
+ character: "¼",
1088
+ title: t("Vulgar fraction one quarter")
1089
+ },
1090
+ {
1091
+ character: "½",
1092
+ title: t("Vulgar fraction one half")
1093
+ },
1094
+ {
1095
+ character: "¾",
1096
+ title: t("Vulgar fraction three quarters")
1097
+ }
1098
+ ], { label: t("Mathematical") });
1099
+ }
1100
+ };
1099
1101
 
1100
1102
  /**
1101
- * A plugin that provides special characters for the "Latin" category.
1102
- *
1103
- * ```ts
1104
- * ClassicEditor
1105
- * .create( {
1106
- * plugins: [ ..., SpecialCharacters, SpecialCharactersLatin ],
1107
- * } )
1108
- * .then( ... )
1109
- * .catch( ... );
1110
- * ```
1111
- */ class SpecialCharactersLatin extends Plugin {
1112
- /**
1113
- * @inheritDoc
1114
- */ static get pluginName() {
1115
- return 'SpecialCharactersLatin';
1116
- }
1117
- /**
1118
- * @inheritDoc
1119
- */ static get isOfficialPlugin() {
1120
- return true;
1121
- }
1122
- /**
1123
- * @inheritDoc
1124
- */ init() {
1125
- const editor = this.editor;
1126
- const t = editor.t;
1127
- const plugin = editor.plugins.get('SpecialCharacters');
1128
- plugin.addItems('Latin', [
1129
- {
1130
- character: 'Ā',
1131
- title: t('Latin capital letter a with macron')
1132
- },
1133
- {
1134
- character: 'ā',
1135
- title: t('Latin small letter a with macron')
1136
- },
1137
- {
1138
- character: 'Ă',
1139
- title: t('Latin capital letter a with breve')
1140
- },
1141
- {
1142
- character: 'ă',
1143
- title: t('Latin small letter a with breve')
1144
- },
1145
- {
1146
- character: 'Ą',
1147
- title: t('Latin capital letter a with ogonek')
1148
- },
1149
- {
1150
- character: 'ą',
1151
- title: t('Latin small letter a with ogonek')
1152
- },
1153
- {
1154
- character: 'Ć',
1155
- title: t('Latin capital letter c with acute')
1156
- },
1157
- {
1158
- character: 'ć',
1159
- title: t('Latin small letter c with acute')
1160
- },
1161
- {
1162
- character: 'Ĉ',
1163
- title: t('Latin capital letter c with circumflex')
1164
- },
1165
- {
1166
- character: 'ĉ',
1167
- title: t('Latin small letter c with circumflex')
1168
- },
1169
- {
1170
- character: 'Ċ',
1171
- title: t('Latin capital letter c with dot above')
1172
- },
1173
- {
1174
- character: 'ċ',
1175
- title: t('Latin small letter c with dot above')
1176
- },
1177
- {
1178
- character: 'Č',
1179
- title: t('Latin capital letter c with caron')
1180
- },
1181
- {
1182
- character: 'č',
1183
- title: t('Latin small letter c with caron')
1184
- },
1185
- {
1186
- character: 'Ď',
1187
- title: t('Latin capital letter d with caron')
1188
- },
1189
- {
1190
- character: 'ď',
1191
- title: t('Latin small letter d with caron')
1192
- },
1193
- {
1194
- character: 'Đ',
1195
- title: t('Latin capital letter d with stroke')
1196
- },
1197
- {
1198
- character: 'đ',
1199
- title: t('Latin small letter d with stroke')
1200
- },
1201
- {
1202
- character: 'Ē',
1203
- title: t('Latin capital letter e with macron')
1204
- },
1205
- {
1206
- character: 'ē',
1207
- title: t('Latin small letter e with macron')
1208
- },
1209
- {
1210
- character: 'Ĕ',
1211
- title: t('Latin capital letter e with breve')
1212
- },
1213
- {
1214
- character: 'ĕ',
1215
- title: t('Latin small letter e with breve')
1216
- },
1217
- {
1218
- character: 'Ė',
1219
- title: t('Latin capital letter e with dot above')
1220
- },
1221
- {
1222
- character: 'ė',
1223
- title: t('Latin small letter e with dot above')
1224
- },
1225
- {
1226
- character: 'Ę',
1227
- title: t('Latin capital letter e with ogonek')
1228
- },
1229
- {
1230
- character: 'ę',
1231
- title: t('Latin small letter e with ogonek')
1232
- },
1233
- {
1234
- character: 'Ě',
1235
- title: t('Latin capital letter e with caron')
1236
- },
1237
- {
1238
- character: 'ě',
1239
- title: t('Latin small letter e with caron')
1240
- },
1241
- {
1242
- character: 'Ĝ',
1243
- title: t('Latin capital letter g with circumflex')
1244
- },
1245
- {
1246
- character: 'ĝ',
1247
- title: t('Latin small letter g with circumflex')
1248
- },
1249
- {
1250
- character: 'Ğ',
1251
- title: t('Latin capital letter g with breve')
1252
- },
1253
- {
1254
- character: 'ğ',
1255
- title: t('Latin small letter g with breve')
1256
- },
1257
- {
1258
- character: 'Ġ',
1259
- title: t('Latin capital letter g with dot above')
1260
- },
1261
- {
1262
- character: 'ġ',
1263
- title: t('Latin small letter g with dot above')
1264
- },
1265
- {
1266
- character: 'Ģ',
1267
- title: t('Latin capital letter g with cedilla')
1268
- },
1269
- {
1270
- character: 'ģ',
1271
- title: t('Latin small letter g with cedilla')
1272
- },
1273
- {
1274
- character: 'Ĥ',
1275
- title: t('Latin capital letter h with circumflex')
1276
- },
1277
- {
1278
- character: 'ĥ',
1279
- title: t('Latin small letter h with circumflex')
1280
- },
1281
- {
1282
- character: 'Ħ',
1283
- title: t('Latin capital letter h with stroke')
1284
- },
1285
- {
1286
- character: 'ħ',
1287
- title: t('Latin small letter h with stroke')
1288
- },
1289
- {
1290
- character: 'Ĩ',
1291
- title: t('Latin capital letter i with tilde')
1292
- },
1293
- {
1294
- character: 'ĩ',
1295
- title: t('Latin small letter i with tilde')
1296
- },
1297
- {
1298
- character: 'Ī',
1299
- title: t('Latin capital letter i with macron')
1300
- },
1301
- {
1302
- character: 'ī',
1303
- title: t('Latin small letter i with macron')
1304
- },
1305
- {
1306
- character: 'Ĭ',
1307
- title: t('Latin capital letter i with breve')
1308
- },
1309
- {
1310
- character: 'ĭ',
1311
- title: t('Latin small letter i with breve')
1312
- },
1313
- {
1314
- character: 'Į',
1315
- title: t('Latin capital letter i with ogonek')
1316
- },
1317
- {
1318
- character: 'į',
1319
- title: t('Latin small letter i with ogonek')
1320
- },
1321
- {
1322
- character: 'İ',
1323
- title: t('Latin capital letter i with dot above')
1324
- },
1325
- {
1326
- character: 'ı',
1327
- title: t('Latin small letter dotless i')
1328
- },
1329
- {
1330
- character: 'IJ',
1331
- title: t('Latin capital ligature ij')
1332
- },
1333
- {
1334
- character: 'ij',
1335
- title: t('Latin small ligature ij')
1336
- },
1337
- {
1338
- character: 'Ĵ',
1339
- title: t('Latin capital letter j with circumflex')
1340
- },
1341
- {
1342
- character: 'ĵ',
1343
- title: t('Latin small letter j with circumflex')
1344
- },
1345
- {
1346
- character: 'Ķ',
1347
- title: t('Latin capital letter k with cedilla')
1348
- },
1349
- {
1350
- character: 'ķ',
1351
- title: t('Latin small letter k with cedilla')
1352
- },
1353
- {
1354
- character: 'ĸ',
1355
- title: t('Latin small letter kra')
1356
- },
1357
- {
1358
- character: 'Ĺ',
1359
- title: t('Latin capital letter l with acute')
1360
- },
1361
- {
1362
- character: 'ĺ',
1363
- title: t('Latin small letter l with acute')
1364
- },
1365
- {
1366
- character: 'Ļ',
1367
- title: t('Latin capital letter l with cedilla')
1368
- },
1369
- {
1370
- character: 'ļ',
1371
- title: t('Latin small letter l with cedilla')
1372
- },
1373
- {
1374
- character: 'Ľ',
1375
- title: t('Latin capital letter l with caron')
1376
- },
1377
- {
1378
- character: 'ľ',
1379
- title: t('Latin small letter l with caron')
1380
- },
1381
- {
1382
- character: 'Ŀ',
1383
- title: t('Latin capital letter l with middle dot')
1384
- },
1385
- {
1386
- character: 'ŀ',
1387
- title: t('Latin small letter l with middle dot')
1388
- },
1389
- {
1390
- character: 'Ł',
1391
- title: t('Latin capital letter l with stroke')
1392
- },
1393
- {
1394
- character: 'ł',
1395
- title: t('Latin small letter l with stroke')
1396
- },
1397
- {
1398
- character: 'Ń',
1399
- title: t('Latin capital letter n with acute')
1400
- },
1401
- {
1402
- character: 'ń',
1403
- title: t('Latin small letter n with acute')
1404
- },
1405
- {
1406
- character: 'Ņ',
1407
- title: t('Latin capital letter n with cedilla')
1408
- },
1409
- {
1410
- character: 'ņ',
1411
- title: t('Latin small letter n with cedilla')
1412
- },
1413
- {
1414
- character: 'Ň',
1415
- title: t('Latin capital letter n with caron')
1416
- },
1417
- {
1418
- character: 'ň',
1419
- title: t('Latin small letter n with caron')
1420
- },
1421
- {
1422
- character: 'ʼn',
1423
- title: t('Latin small letter n preceded by apostrophe')
1424
- },
1425
- {
1426
- character: 'Ŋ',
1427
- title: t('Latin capital letter eng')
1428
- },
1429
- {
1430
- character: 'ŋ',
1431
- title: t('Latin small letter eng')
1432
- },
1433
- {
1434
- character: 'Ō',
1435
- title: t('Latin capital letter o with macron')
1436
- },
1437
- {
1438
- character: 'ō',
1439
- title: t('Latin small letter o with macron')
1440
- },
1441
- {
1442
- character: 'Ŏ',
1443
- title: t('Latin capital letter o with breve')
1444
- },
1445
- {
1446
- character: 'ŏ',
1447
- title: t('Latin small letter o with breve')
1448
- },
1449
- {
1450
- character: 'Ő',
1451
- title: t('Latin capital letter o with double acute')
1452
- },
1453
- {
1454
- character: 'ő',
1455
- title: t('Latin small letter o with double acute')
1456
- },
1457
- {
1458
- character: 'Œ',
1459
- title: t('Latin capital ligature oe')
1460
- },
1461
- {
1462
- character: 'œ',
1463
- title: t('Latin small ligature oe')
1464
- },
1465
- {
1466
- character: 'Ŕ',
1467
- title: t('Latin capital letter r with acute')
1468
- },
1469
- {
1470
- character: 'ŕ',
1471
- title: t('Latin small letter r with acute')
1472
- },
1473
- {
1474
- character: 'Ŗ',
1475
- title: t('Latin capital letter r with cedilla')
1476
- },
1477
- {
1478
- character: 'ŗ',
1479
- title: t('Latin small letter r with cedilla')
1480
- },
1481
- {
1482
- character: 'Ř',
1483
- title: t('Latin capital letter r with caron')
1484
- },
1485
- {
1486
- character: 'ř',
1487
- title: t('Latin small letter r with caron')
1488
- },
1489
- {
1490
- character: 'Ś',
1491
- title: t('Latin capital letter s with acute')
1492
- },
1493
- {
1494
- character: 'ś',
1495
- title: t('Latin small letter s with acute')
1496
- },
1497
- {
1498
- character: 'Ŝ',
1499
- title: t('Latin capital letter s with circumflex')
1500
- },
1501
- {
1502
- character: 'ŝ',
1503
- title: t('Latin small letter s with circumflex')
1504
- },
1505
- {
1506
- character: 'Ş',
1507
- title: t('Latin capital letter s with cedilla')
1508
- },
1509
- {
1510
- character: 'ş',
1511
- title: t('Latin small letter s with cedilla')
1512
- },
1513
- {
1514
- character: 'Š',
1515
- title: t('Latin capital letter s with caron')
1516
- },
1517
- {
1518
- character: 'š',
1519
- title: t('Latin small letter s with caron')
1520
- },
1521
- {
1522
- character: 'Ţ',
1523
- title: t('Latin capital letter t with cedilla')
1524
- },
1525
- {
1526
- character: 'ţ',
1527
- title: t('Latin small letter t with cedilla')
1528
- },
1529
- {
1530
- character: 'Ť',
1531
- title: t('Latin capital letter t with caron')
1532
- },
1533
- {
1534
- character: 'ť',
1535
- title: t('Latin small letter t with caron')
1536
- },
1537
- {
1538
- character: 'Ŧ',
1539
- title: t('Latin capital letter t with stroke')
1540
- },
1541
- {
1542
- character: 'ŧ',
1543
- title: t('Latin small letter t with stroke')
1544
- },
1545
- {
1546
- character: 'Ũ',
1547
- title: t('Latin capital letter u with tilde')
1548
- },
1549
- {
1550
- character: 'ũ',
1551
- title: t('Latin small letter u with tilde')
1552
- },
1553
- {
1554
- character: 'Ū',
1555
- title: t('Latin capital letter u with macron')
1556
- },
1557
- {
1558
- character: 'ū',
1559
- title: t('Latin small letter u with macron')
1560
- },
1561
- {
1562
- character: 'Ŭ',
1563
- title: t('Latin capital letter u with breve')
1564
- },
1565
- {
1566
- character: 'ŭ',
1567
- title: t('Latin small letter u with breve')
1568
- },
1569
- {
1570
- character: 'Ů',
1571
- title: t('Latin capital letter u with ring above')
1572
- },
1573
- {
1574
- character: 'ů',
1575
- title: t('Latin small letter u with ring above')
1576
- },
1577
- {
1578
- character: 'Ű',
1579
- title: t('Latin capital letter u with double acute')
1580
- },
1581
- {
1582
- character: 'ű',
1583
- title: t('Latin small letter u with double acute')
1584
- },
1585
- {
1586
- character: 'Ų',
1587
- title: t('Latin capital letter u with ogonek')
1588
- },
1589
- {
1590
- character: 'ų',
1591
- title: t('Latin small letter u with ogonek')
1592
- },
1593
- {
1594
- character: 'Ŵ',
1595
- title: t('Latin capital letter w with circumflex')
1596
- },
1597
- {
1598
- character: 'ŵ',
1599
- title: t('Latin small letter w with circumflex')
1600
- },
1601
- {
1602
- character: 'Ŷ',
1603
- title: t('Latin capital letter y with circumflex')
1604
- },
1605
- {
1606
- character: 'ŷ',
1607
- title: t('Latin small letter y with circumflex')
1608
- },
1609
- {
1610
- character: 'Ÿ',
1611
- title: t('Latin capital letter y with diaeresis')
1612
- },
1613
- {
1614
- character: 'Ź',
1615
- title: t('Latin capital letter z with acute')
1616
- },
1617
- {
1618
- character: 'ź',
1619
- title: t('Latin small letter z with acute')
1620
- },
1621
- {
1622
- character: 'Ż',
1623
- title: t('Latin capital letter z with dot above')
1624
- },
1625
- {
1626
- character: 'ż',
1627
- title: t('Latin small letter z with dot above')
1628
- },
1629
- {
1630
- character: 'Ž',
1631
- title: t('Latin capital letter z with caron')
1632
- },
1633
- {
1634
- character: 'ž',
1635
- title: t('Latin small letter z with caron')
1636
- },
1637
- {
1638
- character: 'ſ',
1639
- title: t('Latin small letter long s')
1640
- }
1641
- ], {
1642
- label: t('Latin')
1643
- });
1644
- }
1645
- }
1103
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
1104
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
1105
+ */
1106
+ /**
1107
+ * @module special-characters/specialcharacterslatin
1108
+ */
1109
+ /**
1110
+ * A plugin that provides special characters for the "Latin" category.
1111
+ *
1112
+ * ```ts
1113
+ * ClassicEditor
1114
+ * .create( {
1115
+ * plugins: [ ..., SpecialCharacters, SpecialCharactersLatin ],
1116
+ * } )
1117
+ * .then( ... )
1118
+ * .catch( ... );
1119
+ * ```
1120
+ */
1121
+ var SpecialCharactersLatin = class extends Plugin {
1122
+ /**
1123
+ * @inheritDoc
1124
+ */
1125
+ static get pluginName() {
1126
+ return "SpecialCharactersLatin";
1127
+ }
1128
+ /**
1129
+ * @inheritDoc
1130
+ */
1131
+ static get isOfficialPlugin() {
1132
+ return true;
1133
+ }
1134
+ /**
1135
+ * @inheritDoc
1136
+ */
1137
+ init() {
1138
+ const editor = this.editor;
1139
+ const t = editor.t;
1140
+ editor.plugins.get("SpecialCharacters").addItems("Latin", [
1141
+ {
1142
+ character: "Ā",
1143
+ title: t("Latin capital letter a with macron")
1144
+ },
1145
+ {
1146
+ character: "ā",
1147
+ title: t("Latin small letter a with macron")
1148
+ },
1149
+ {
1150
+ character: "Ă",
1151
+ title: t("Latin capital letter a with breve")
1152
+ },
1153
+ {
1154
+ character: "ă",
1155
+ title: t("Latin small letter a with breve")
1156
+ },
1157
+ {
1158
+ character: "Ą",
1159
+ title: t("Latin capital letter a with ogonek")
1160
+ },
1161
+ {
1162
+ character: "ą",
1163
+ title: t("Latin small letter a with ogonek")
1164
+ },
1165
+ {
1166
+ character: "Ć",
1167
+ title: t("Latin capital letter c with acute")
1168
+ },
1169
+ {
1170
+ character: "ć",
1171
+ title: t("Latin small letter c with acute")
1172
+ },
1173
+ {
1174
+ character: "Ĉ",
1175
+ title: t("Latin capital letter c with circumflex")
1176
+ },
1177
+ {
1178
+ character: "ĉ",
1179
+ title: t("Latin small letter c with circumflex")
1180
+ },
1181
+ {
1182
+ character: "Ċ",
1183
+ title: t("Latin capital letter c with dot above")
1184
+ },
1185
+ {
1186
+ character: "ċ",
1187
+ title: t("Latin small letter c with dot above")
1188
+ },
1189
+ {
1190
+ character: "Č",
1191
+ title: t("Latin capital letter c with caron")
1192
+ },
1193
+ {
1194
+ character: "č",
1195
+ title: t("Latin small letter c with caron")
1196
+ },
1197
+ {
1198
+ character: "Ď",
1199
+ title: t("Latin capital letter d with caron")
1200
+ },
1201
+ {
1202
+ character: "ď",
1203
+ title: t("Latin small letter d with caron")
1204
+ },
1205
+ {
1206
+ character: "Đ",
1207
+ title: t("Latin capital letter d with stroke")
1208
+ },
1209
+ {
1210
+ character: "đ",
1211
+ title: t("Latin small letter d with stroke")
1212
+ },
1213
+ {
1214
+ character: "Ē",
1215
+ title: t("Latin capital letter e with macron")
1216
+ },
1217
+ {
1218
+ character: "ē",
1219
+ title: t("Latin small letter e with macron")
1220
+ },
1221
+ {
1222
+ character: "Ĕ",
1223
+ title: t("Latin capital letter e with breve")
1224
+ },
1225
+ {
1226
+ character: "ĕ",
1227
+ title: t("Latin small letter e with breve")
1228
+ },
1229
+ {
1230
+ character: "Ė",
1231
+ title: t("Latin capital letter e with dot above")
1232
+ },
1233
+ {
1234
+ character: "ė",
1235
+ title: t("Latin small letter e with dot above")
1236
+ },
1237
+ {
1238
+ character: "Ę",
1239
+ title: t("Latin capital letter e with ogonek")
1240
+ },
1241
+ {
1242
+ character: "ę",
1243
+ title: t("Latin small letter e with ogonek")
1244
+ },
1245
+ {
1246
+ character: "Ě",
1247
+ title: t("Latin capital letter e with caron")
1248
+ },
1249
+ {
1250
+ character: "ě",
1251
+ title: t("Latin small letter e with caron")
1252
+ },
1253
+ {
1254
+ character: "Ĝ",
1255
+ title: t("Latin capital letter g with circumflex")
1256
+ },
1257
+ {
1258
+ character: "ĝ",
1259
+ title: t("Latin small letter g with circumflex")
1260
+ },
1261
+ {
1262
+ character: "Ğ",
1263
+ title: t("Latin capital letter g with breve")
1264
+ },
1265
+ {
1266
+ character: "ğ",
1267
+ title: t("Latin small letter g with breve")
1268
+ },
1269
+ {
1270
+ character: "Ġ",
1271
+ title: t("Latin capital letter g with dot above")
1272
+ },
1273
+ {
1274
+ character: "ġ",
1275
+ title: t("Latin small letter g with dot above")
1276
+ },
1277
+ {
1278
+ character: "Ģ",
1279
+ title: t("Latin capital letter g with cedilla")
1280
+ },
1281
+ {
1282
+ character: "ģ",
1283
+ title: t("Latin small letter g with cedilla")
1284
+ },
1285
+ {
1286
+ character: "Ĥ",
1287
+ title: t("Latin capital letter h with circumflex")
1288
+ },
1289
+ {
1290
+ character: "ĥ",
1291
+ title: t("Latin small letter h with circumflex")
1292
+ },
1293
+ {
1294
+ character: "Ħ",
1295
+ title: t("Latin capital letter h with stroke")
1296
+ },
1297
+ {
1298
+ character: "ħ",
1299
+ title: t("Latin small letter h with stroke")
1300
+ },
1301
+ {
1302
+ character: "Ĩ",
1303
+ title: t("Latin capital letter i with tilde")
1304
+ },
1305
+ {
1306
+ character: "ĩ",
1307
+ title: t("Latin small letter i with tilde")
1308
+ },
1309
+ {
1310
+ character: "Ī",
1311
+ title: t("Latin capital letter i with macron")
1312
+ },
1313
+ {
1314
+ character: "ī",
1315
+ title: t("Latin small letter i with macron")
1316
+ },
1317
+ {
1318
+ character: "Ĭ",
1319
+ title: t("Latin capital letter i with breve")
1320
+ },
1321
+ {
1322
+ character: "ĭ",
1323
+ title: t("Latin small letter i with breve")
1324
+ },
1325
+ {
1326
+ character: "Į",
1327
+ title: t("Latin capital letter i with ogonek")
1328
+ },
1329
+ {
1330
+ character: "į",
1331
+ title: t("Latin small letter i with ogonek")
1332
+ },
1333
+ {
1334
+ character: "İ",
1335
+ title: t("Latin capital letter i with dot above")
1336
+ },
1337
+ {
1338
+ character: "ı",
1339
+ title: t("Latin small letter dotless i")
1340
+ },
1341
+ {
1342
+ character: "IJ",
1343
+ title: t("Latin capital ligature ij")
1344
+ },
1345
+ {
1346
+ character: "ij",
1347
+ title: t("Latin small ligature ij")
1348
+ },
1349
+ {
1350
+ character: "Ĵ",
1351
+ title: t("Latin capital letter j with circumflex")
1352
+ },
1353
+ {
1354
+ character: "ĵ",
1355
+ title: t("Latin small letter j with circumflex")
1356
+ },
1357
+ {
1358
+ character: "Ķ",
1359
+ title: t("Latin capital letter k with cedilla")
1360
+ },
1361
+ {
1362
+ character: "ķ",
1363
+ title: t("Latin small letter k with cedilla")
1364
+ },
1365
+ {
1366
+ character: "ĸ",
1367
+ title: t("Latin small letter kra")
1368
+ },
1369
+ {
1370
+ character: "Ĺ",
1371
+ title: t("Latin capital letter l with acute")
1372
+ },
1373
+ {
1374
+ character: "ĺ",
1375
+ title: t("Latin small letter l with acute")
1376
+ },
1377
+ {
1378
+ character: "Ļ",
1379
+ title: t("Latin capital letter l with cedilla")
1380
+ },
1381
+ {
1382
+ character: "ļ",
1383
+ title: t("Latin small letter l with cedilla")
1384
+ },
1385
+ {
1386
+ character: "Ľ",
1387
+ title: t("Latin capital letter l with caron")
1388
+ },
1389
+ {
1390
+ character: "ľ",
1391
+ title: t("Latin small letter l with caron")
1392
+ },
1393
+ {
1394
+ character: "Ŀ",
1395
+ title: t("Latin capital letter l with middle dot")
1396
+ },
1397
+ {
1398
+ character: "ŀ",
1399
+ title: t("Latin small letter l with middle dot")
1400
+ },
1401
+ {
1402
+ character: "Ł",
1403
+ title: t("Latin capital letter l with stroke")
1404
+ },
1405
+ {
1406
+ character: "ł",
1407
+ title: t("Latin small letter l with stroke")
1408
+ },
1409
+ {
1410
+ character: "Ń",
1411
+ title: t("Latin capital letter n with acute")
1412
+ },
1413
+ {
1414
+ character: "ń",
1415
+ title: t("Latin small letter n with acute")
1416
+ },
1417
+ {
1418
+ character: "Ņ",
1419
+ title: t("Latin capital letter n with cedilla")
1420
+ },
1421
+ {
1422
+ character: "ņ",
1423
+ title: t("Latin small letter n with cedilla")
1424
+ },
1425
+ {
1426
+ character: "Ň",
1427
+ title: t("Latin capital letter n with caron")
1428
+ },
1429
+ {
1430
+ character: "ň",
1431
+ title: t("Latin small letter n with caron")
1432
+ },
1433
+ {
1434
+ character: "ʼn",
1435
+ title: t("Latin small letter n preceded by apostrophe")
1436
+ },
1437
+ {
1438
+ character: "Ŋ",
1439
+ title: t("Latin capital letter eng")
1440
+ },
1441
+ {
1442
+ character: "ŋ",
1443
+ title: t("Latin small letter eng")
1444
+ },
1445
+ {
1446
+ character: "Ō",
1447
+ title: t("Latin capital letter o with macron")
1448
+ },
1449
+ {
1450
+ character: "ō",
1451
+ title: t("Latin small letter o with macron")
1452
+ },
1453
+ {
1454
+ character: "Ŏ",
1455
+ title: t("Latin capital letter o with breve")
1456
+ },
1457
+ {
1458
+ character: "ŏ",
1459
+ title: t("Latin small letter o with breve")
1460
+ },
1461
+ {
1462
+ character: "Ő",
1463
+ title: t("Latin capital letter o with double acute")
1464
+ },
1465
+ {
1466
+ character: "ő",
1467
+ title: t("Latin small letter o with double acute")
1468
+ },
1469
+ {
1470
+ character: "Œ",
1471
+ title: t("Latin capital ligature oe")
1472
+ },
1473
+ {
1474
+ character: "œ",
1475
+ title: t("Latin small ligature oe")
1476
+ },
1477
+ {
1478
+ character: "Ŕ",
1479
+ title: t("Latin capital letter r with acute")
1480
+ },
1481
+ {
1482
+ character: "ŕ",
1483
+ title: t("Latin small letter r with acute")
1484
+ },
1485
+ {
1486
+ character: "Ŗ",
1487
+ title: t("Latin capital letter r with cedilla")
1488
+ },
1489
+ {
1490
+ character: "ŗ",
1491
+ title: t("Latin small letter r with cedilla")
1492
+ },
1493
+ {
1494
+ character: "Ř",
1495
+ title: t("Latin capital letter r with caron")
1496
+ },
1497
+ {
1498
+ character: "ř",
1499
+ title: t("Latin small letter r with caron")
1500
+ },
1501
+ {
1502
+ character: "Ś",
1503
+ title: t("Latin capital letter s with acute")
1504
+ },
1505
+ {
1506
+ character: "ś",
1507
+ title: t("Latin small letter s with acute")
1508
+ },
1509
+ {
1510
+ character: "Ŝ",
1511
+ title: t("Latin capital letter s with circumflex")
1512
+ },
1513
+ {
1514
+ character: "ŝ",
1515
+ title: t("Latin small letter s with circumflex")
1516
+ },
1517
+ {
1518
+ character: "Ş",
1519
+ title: t("Latin capital letter s with cedilla")
1520
+ },
1521
+ {
1522
+ character: "ş",
1523
+ title: t("Latin small letter s with cedilla")
1524
+ },
1525
+ {
1526
+ character: "Š",
1527
+ title: t("Latin capital letter s with caron")
1528
+ },
1529
+ {
1530
+ character: "š",
1531
+ title: t("Latin small letter s with caron")
1532
+ },
1533
+ {
1534
+ character: "Ţ",
1535
+ title: t("Latin capital letter t with cedilla")
1536
+ },
1537
+ {
1538
+ character: "ţ",
1539
+ title: t("Latin small letter t with cedilla")
1540
+ },
1541
+ {
1542
+ character: "Ť",
1543
+ title: t("Latin capital letter t with caron")
1544
+ },
1545
+ {
1546
+ character: "ť",
1547
+ title: t("Latin small letter t with caron")
1548
+ },
1549
+ {
1550
+ character: "Ŧ",
1551
+ title: t("Latin capital letter t with stroke")
1552
+ },
1553
+ {
1554
+ character: "ŧ",
1555
+ title: t("Latin small letter t with stroke")
1556
+ },
1557
+ {
1558
+ character: "Ũ",
1559
+ title: t("Latin capital letter u with tilde")
1560
+ },
1561
+ {
1562
+ character: "ũ",
1563
+ title: t("Latin small letter u with tilde")
1564
+ },
1565
+ {
1566
+ character: "Ū",
1567
+ title: t("Latin capital letter u with macron")
1568
+ },
1569
+ {
1570
+ character: "ū",
1571
+ title: t("Latin small letter u with macron")
1572
+ },
1573
+ {
1574
+ character: "Ŭ",
1575
+ title: t("Latin capital letter u with breve")
1576
+ },
1577
+ {
1578
+ character: "ŭ",
1579
+ title: t("Latin small letter u with breve")
1580
+ },
1581
+ {
1582
+ character: "Ů",
1583
+ title: t("Latin capital letter u with ring above")
1584
+ },
1585
+ {
1586
+ character: "ů",
1587
+ title: t("Latin small letter u with ring above")
1588
+ },
1589
+ {
1590
+ character: "Ű",
1591
+ title: t("Latin capital letter u with double acute")
1592
+ },
1593
+ {
1594
+ character: "ű",
1595
+ title: t("Latin small letter u with double acute")
1596
+ },
1597
+ {
1598
+ character: "Ų",
1599
+ title: t("Latin capital letter u with ogonek")
1600
+ },
1601
+ {
1602
+ character: "ų",
1603
+ title: t("Latin small letter u with ogonek")
1604
+ },
1605
+ {
1606
+ character: "Ŵ",
1607
+ title: t("Latin capital letter w with circumflex")
1608
+ },
1609
+ {
1610
+ character: "ŵ",
1611
+ title: t("Latin small letter w with circumflex")
1612
+ },
1613
+ {
1614
+ character: "Ŷ",
1615
+ title: t("Latin capital letter y with circumflex")
1616
+ },
1617
+ {
1618
+ character: "ŷ",
1619
+ title: t("Latin small letter y with circumflex")
1620
+ },
1621
+ {
1622
+ character: "Ÿ",
1623
+ title: t("Latin capital letter y with diaeresis")
1624
+ },
1625
+ {
1626
+ character: "Ź",
1627
+ title: t("Latin capital letter z with acute")
1628
+ },
1629
+ {
1630
+ character: "ź",
1631
+ title: t("Latin small letter z with acute")
1632
+ },
1633
+ {
1634
+ character: "Ż",
1635
+ title: t("Latin capital letter z with dot above")
1636
+ },
1637
+ {
1638
+ character: "ż",
1639
+ title: t("Latin small letter z with dot above")
1640
+ },
1641
+ {
1642
+ character: "Ž",
1643
+ title: t("Latin capital letter z with caron")
1644
+ },
1645
+ {
1646
+ character: "ž",
1647
+ title: t("Latin small letter z with caron")
1648
+ },
1649
+ {
1650
+ character: "ſ",
1651
+ title: t("Latin small letter long s")
1652
+ }
1653
+ ], { label: t("Latin") });
1654
+ }
1655
+ };
1646
1656
 
1647
1657
  /**
1648
- * A plugin that provides special characters for the "Currency" category.
1649
- *
1650
- * ```ts
1651
- * ClassicEditor
1652
- * .create( {
1653
- * plugins: [ ..., SpecialCharacters, SpecialCharactersCurrency ],
1654
- * } )
1655
- * .then( ... )
1656
- * .catch( ... );
1657
- * ```
1658
- */ class SpecialCharactersCurrency extends Plugin {
1659
- /**
1660
- * @inheritDoc
1661
- */ static get pluginName() {
1662
- return 'SpecialCharactersCurrency';
1663
- }
1664
- /**
1665
- * @inheritDoc
1666
- */ static get isOfficialPlugin() {
1667
- return true;
1668
- }
1669
- /**
1670
- * @inheritDoc
1671
- */ init() {
1672
- const editor = this.editor;
1673
- const t = editor.t;
1674
- const plugin = editor.plugins.get('SpecialCharacters');
1675
- plugin.addItems('Currency', [
1676
- {
1677
- character: '$',
1678
- title: t('Dollar sign')
1679
- },
1680
- {
1681
- character: '€',
1682
- title: t('Euro sign')
1683
- },
1684
- {
1685
- character: '¥',
1686
- title: t('Yen sign')
1687
- },
1688
- {
1689
- character: '£',
1690
- title: t('Pound sign')
1691
- },
1692
- {
1693
- character: '¢',
1694
- title: t('Cent sign')
1695
- },
1696
- {
1697
- character: '₠',
1698
- title: t('Euro-currency sign')
1699
- },
1700
- {
1701
- character: '₡',
1702
- title: t('Colon sign')
1703
- },
1704
- {
1705
- character: '₢',
1706
- title: t('Cruzeiro sign')
1707
- },
1708
- {
1709
- character: '₣',
1710
- title: t('French franc sign')
1711
- },
1712
- {
1713
- character: '₤',
1714
- title: t('Lira sign')
1715
- },
1716
- {
1717
- character: '¤',
1718
- title: t('Currency sign')
1719
- },
1720
- {
1721
- character: '₿',
1722
- title: t('Bitcoin sign')
1723
- },
1724
- {
1725
- character: '₥',
1726
- title: t('Mill sign')
1727
- },
1728
- {
1729
- character: '₦',
1730
- title: t('Naira sign')
1731
- },
1732
- {
1733
- character: '₧',
1734
- title: t('Peseta sign')
1735
- },
1736
- {
1737
- character: '₨',
1738
- title: t('Rupee sign')
1739
- },
1740
- {
1741
- character: '₩',
1742
- title: t('Won sign')
1743
- },
1744
- {
1745
- character: '₪',
1746
- title: t('New sheqel sign')
1747
- },
1748
- {
1749
- character: '₫',
1750
- title: t('Dong sign')
1751
- },
1752
- {
1753
- character: '₭',
1754
- title: t('Kip sign')
1755
- },
1756
- {
1757
- character: '₮',
1758
- title: t('Tugrik sign')
1759
- },
1760
- {
1761
- character: '₯',
1762
- title: t('Drachma sign')
1763
- },
1764
- {
1765
- character: '₰',
1766
- title: t('German penny sign')
1767
- },
1768
- {
1769
- character: '₱',
1770
- title: t('Peso sign')
1771
- },
1772
- {
1773
- character: '₲',
1774
- title: t('Guarani sign')
1775
- },
1776
- {
1777
- character: '₳',
1778
- title: t('Austral sign')
1779
- },
1780
- {
1781
- character: '₴',
1782
- title: t('Hryvnia sign')
1783
- },
1784
- {
1785
- character: '₵',
1786
- title: t('Cedi sign')
1787
- },
1788
- {
1789
- character: '₶',
1790
- title: t('Livre tournois sign')
1791
- },
1792
- {
1793
- character: '₷',
1794
- title: t('Spesmilo sign')
1795
- },
1796
- {
1797
- character: '₸',
1798
- title: t('Tenge sign')
1799
- },
1800
- {
1801
- character: '₹',
1802
- title: t('Indian rupee sign')
1803
- },
1804
- {
1805
- character: '₺',
1806
- title: t('Turkish lira sign')
1807
- },
1808
- {
1809
- character: '₻',
1810
- title: t('Nordic mark sign')
1811
- },
1812
- {
1813
- character: '₼',
1814
- title: t('Manat sign')
1815
- },
1816
- {
1817
- character: '₽',
1818
- title: t('Ruble sign')
1819
- }
1820
- ], {
1821
- label: t('Currency')
1822
- });
1823
- }
1824
- }
1658
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
1659
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
1660
+ */
1661
+ /**
1662
+ * @module special-characters/specialcharacterscurrency
1663
+ */
1664
+ /**
1665
+ * A plugin that provides special characters for the "Currency" category.
1666
+ *
1667
+ * ```ts
1668
+ * ClassicEditor
1669
+ * .create( {
1670
+ * plugins: [ ..., SpecialCharacters, SpecialCharactersCurrency ],
1671
+ * } )
1672
+ * .then( ... )
1673
+ * .catch( ... );
1674
+ * ```
1675
+ */
1676
+ var SpecialCharactersCurrency = class extends Plugin {
1677
+ /**
1678
+ * @inheritDoc
1679
+ */
1680
+ static get pluginName() {
1681
+ return "SpecialCharactersCurrency";
1682
+ }
1683
+ /**
1684
+ * @inheritDoc
1685
+ */
1686
+ static get isOfficialPlugin() {
1687
+ return true;
1688
+ }
1689
+ /**
1690
+ * @inheritDoc
1691
+ */
1692
+ init() {
1693
+ const editor = this.editor;
1694
+ const t = editor.t;
1695
+ editor.plugins.get("SpecialCharacters").addItems("Currency", [
1696
+ {
1697
+ character: "$",
1698
+ title: t("Dollar sign")
1699
+ },
1700
+ {
1701
+ character: "€",
1702
+ title: t("Euro sign")
1703
+ },
1704
+ {
1705
+ character: "¥",
1706
+ title: t("Yen sign")
1707
+ },
1708
+ {
1709
+ character: "£",
1710
+ title: t("Pound sign")
1711
+ },
1712
+ {
1713
+ character: "¢",
1714
+ title: t("Cent sign")
1715
+ },
1716
+ {
1717
+ character: "₠",
1718
+ title: t("Euro-currency sign")
1719
+ },
1720
+ {
1721
+ character: "₡",
1722
+ title: t("Colon sign")
1723
+ },
1724
+ {
1725
+ character: "₢",
1726
+ title: t("Cruzeiro sign")
1727
+ },
1728
+ {
1729
+ character: "₣",
1730
+ title: t("French franc sign")
1731
+ },
1732
+ {
1733
+ character: "₤",
1734
+ title: t("Lira sign")
1735
+ },
1736
+ {
1737
+ character: "¤",
1738
+ title: t("Currency sign")
1739
+ },
1740
+ {
1741
+ character: "₿",
1742
+ title: t("Bitcoin sign")
1743
+ },
1744
+ {
1745
+ character: "₥",
1746
+ title: t("Mill sign")
1747
+ },
1748
+ {
1749
+ character: "₦",
1750
+ title: t("Naira sign")
1751
+ },
1752
+ {
1753
+ character: "₧",
1754
+ title: t("Peseta sign")
1755
+ },
1756
+ {
1757
+ character: "₨",
1758
+ title: t("Rupee sign")
1759
+ },
1760
+ {
1761
+ character: "₩",
1762
+ title: t("Won sign")
1763
+ },
1764
+ {
1765
+ character: "₪",
1766
+ title: t("New sheqel sign")
1767
+ },
1768
+ {
1769
+ character: "₫",
1770
+ title: t("Dong sign")
1771
+ },
1772
+ {
1773
+ character: "₭",
1774
+ title: t("Kip sign")
1775
+ },
1776
+ {
1777
+ character: "₮",
1778
+ title: t("Tugrik sign")
1779
+ },
1780
+ {
1781
+ character: "₯",
1782
+ title: t("Drachma sign")
1783
+ },
1784
+ {
1785
+ character: "₰",
1786
+ title: t("German penny sign")
1787
+ },
1788
+ {
1789
+ character: "₱",
1790
+ title: t("Peso sign")
1791
+ },
1792
+ {
1793
+ character: "₲",
1794
+ title: t("Guarani sign")
1795
+ },
1796
+ {
1797
+ character: "₳",
1798
+ title: t("Austral sign")
1799
+ },
1800
+ {
1801
+ character: "₴",
1802
+ title: t("Hryvnia sign")
1803
+ },
1804
+ {
1805
+ character: "₵",
1806
+ title: t("Cedi sign")
1807
+ },
1808
+ {
1809
+ character: "₶",
1810
+ title: t("Livre tournois sign")
1811
+ },
1812
+ {
1813
+ character: "₷",
1814
+ title: t("Spesmilo sign")
1815
+ },
1816
+ {
1817
+ character: "₸",
1818
+ title: t("Tenge sign")
1819
+ },
1820
+ {
1821
+ character: "₹",
1822
+ title: t("Indian rupee sign")
1823
+ },
1824
+ {
1825
+ character: "₺",
1826
+ title: t("Turkish lira sign")
1827
+ },
1828
+ {
1829
+ character: "₻",
1830
+ title: t("Nordic mark sign")
1831
+ },
1832
+ {
1833
+ character: "₼",
1834
+ title: t("Manat sign")
1835
+ },
1836
+ {
1837
+ character: "₽",
1838
+ title: t("Ruble sign")
1839
+ }
1840
+ ], { label: t("Currency") });
1841
+ }
1842
+ };
1825
1843
 
1826
1844
  /**
1827
- * A plugin combining a basic set of characters for the special characters plugin.
1828
- *
1829
- * ```ts
1830
- * ClassicEditor
1831
- * .create( {
1832
- * plugins: [ ..., SpecialCharacters, SpecialCharactersEssentials ],
1833
- * } )
1834
- * .then( ... )
1835
- * .catch( ... );
1836
- * ```
1837
- */ class SpecialCharactersEssentials extends Plugin {
1838
- /**
1839
- * @inheritDoc
1840
- */ static get pluginName() {
1841
- return 'SpecialCharactersEssentials';
1842
- }
1843
- /**
1844
- * @inheritDoc
1845
- */ static get isOfficialPlugin() {
1846
- return true;
1847
- }
1848
- /**
1849
- * @inheritDoc
1850
- */ static get requires() {
1851
- return [
1852
- SpecialCharactersCurrency,
1853
- SpecialCharactersText,
1854
- SpecialCharactersMathematical,
1855
- SpecialCharactersArrows,
1856
- SpecialCharactersLatin
1857
- ];
1858
- }
1859
- }
1845
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
1846
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
1847
+ */
1848
+ /**
1849
+ * @module special-characters/specialcharactersessentials
1850
+ */
1851
+ /**
1852
+ * A plugin combining a basic set of characters for the special characters plugin.
1853
+ *
1854
+ * ```ts
1855
+ * ClassicEditor
1856
+ * .create( {
1857
+ * plugins: [ ..., SpecialCharacters, SpecialCharactersEssentials ],
1858
+ * } )
1859
+ * .then( ... )
1860
+ * .catch( ... );
1861
+ * ```
1862
+ */
1863
+ var SpecialCharactersEssentials = class extends Plugin {
1864
+ /**
1865
+ * @inheritDoc
1866
+ */
1867
+ static get pluginName() {
1868
+ return "SpecialCharactersEssentials";
1869
+ }
1870
+ /**
1871
+ * @inheritDoc
1872
+ */
1873
+ static get isOfficialPlugin() {
1874
+ return true;
1875
+ }
1876
+ /**
1877
+ * @inheritDoc
1878
+ */
1879
+ static get requires() {
1880
+ return [
1881
+ SpecialCharactersCurrency,
1882
+ SpecialCharactersText,
1883
+ SpecialCharactersMathematical,
1884
+ SpecialCharactersArrows,
1885
+ SpecialCharactersLatin
1886
+ ];
1887
+ }
1888
+ };
1889
+
1890
+ /**
1891
+ * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved.
1892
+ * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options
1893
+ */
1860
1894
 
1861
1895
  export { SpecialCharacters, SpecialCharactersArrows, SpecialCharactersCurrency, SpecialCharactersEssentials, SpecialCharactersLatin, SpecialCharactersMathematical, SpecialCharactersText, SpecialCharactersCategoriesView as _SpecialCharactersCategoriesView, CharacterGridView as _SpecialCharactersGridView, CharacterInfoView as _SpecialCharactersInfoView, SpecialCharactersView as _SpecialCharactersView };
1862
- //# sourceMappingURL=index.js.map
1896
+ //# sourceMappingURL=index.js.map