@ckeditor/ckeditor5-ui 41.3.1 → 41.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index-content.css +4 -0
- package/dist/index-editor.css +497 -0
- package/dist/index.css +942 -0
- package/dist/index.css.map +1 -0
- package/dist/index.js +14343 -0
- package/dist/index.js.map +1 -0
- package/dist/translations/af.d.ts +8 -0
- package/dist/translations/af.js +5 -0
- package/dist/translations/af.umd.js +11 -0
- package/dist/translations/ar.d.ts +8 -0
- package/dist/translations/ar.js +5 -0
- package/dist/translations/ar.umd.js +11 -0
- package/dist/translations/ast.d.ts +8 -0
- package/dist/translations/ast.js +5 -0
- package/dist/translations/ast.umd.js +11 -0
- package/dist/translations/az.d.ts +8 -0
- package/dist/translations/az.js +5 -0
- package/dist/translations/az.umd.js +11 -0
- package/dist/translations/bg.d.ts +8 -0
- package/dist/translations/bg.js +5 -0
- package/dist/translations/bg.umd.js +11 -0
- package/dist/translations/bn.d.ts +8 -0
- package/dist/translations/bn.js +5 -0
- package/dist/translations/bn.umd.js +11 -0
- package/dist/translations/bs.d.ts +8 -0
- package/dist/translations/bs.js +5 -0
- package/dist/translations/bs.umd.js +11 -0
- package/dist/translations/ca.d.ts +8 -0
- package/dist/translations/ca.js +5 -0
- package/dist/translations/ca.umd.js +11 -0
- package/dist/translations/cs.d.ts +8 -0
- package/dist/translations/cs.js +5 -0
- package/dist/translations/cs.umd.js +11 -0
- package/dist/translations/da.d.ts +8 -0
- package/dist/translations/da.js +5 -0
- package/dist/translations/da.umd.js +11 -0
- package/dist/translations/de-ch.d.ts +8 -0
- package/dist/translations/de-ch.js +5 -0
- package/dist/translations/de-ch.umd.js +11 -0
- package/dist/translations/de.d.ts +8 -0
- package/dist/translations/de.js +5 -0
- package/dist/translations/de.umd.js +11 -0
- package/dist/translations/el.d.ts +8 -0
- package/dist/translations/el.js +5 -0
- package/dist/translations/el.umd.js +11 -0
- package/dist/translations/en-au.d.ts +8 -0
- package/dist/translations/en-au.js +5 -0
- package/dist/translations/en-au.umd.js +11 -0
- package/dist/translations/en-gb.d.ts +8 -0
- package/dist/translations/en-gb.js +5 -0
- package/dist/translations/en-gb.umd.js +11 -0
- package/dist/translations/en.d.ts +8 -0
- package/dist/translations/en.js +5 -0
- package/dist/translations/en.umd.js +11 -0
- package/dist/translations/eo.d.ts +8 -0
- package/dist/translations/eo.js +5 -0
- package/dist/translations/eo.umd.js +11 -0
- package/dist/translations/es-co.d.ts +8 -0
- package/dist/translations/es-co.js +5 -0
- package/dist/translations/es-co.umd.js +11 -0
- package/dist/translations/es.d.ts +8 -0
- package/dist/translations/es.js +5 -0
- package/dist/translations/es.umd.js +11 -0
- package/dist/translations/et.d.ts +8 -0
- package/dist/translations/et.js +5 -0
- package/dist/translations/et.umd.js +11 -0
- package/dist/translations/eu.d.ts +8 -0
- package/dist/translations/eu.js +5 -0
- package/dist/translations/eu.umd.js +11 -0
- package/dist/translations/fa.d.ts +8 -0
- package/dist/translations/fa.js +5 -0
- package/dist/translations/fa.umd.js +11 -0
- package/dist/translations/fi.d.ts +8 -0
- package/dist/translations/fi.js +5 -0
- package/dist/translations/fi.umd.js +11 -0
- package/dist/translations/fr.d.ts +8 -0
- package/dist/translations/fr.js +5 -0
- package/dist/translations/fr.umd.js +11 -0
- package/dist/translations/gl.d.ts +8 -0
- package/dist/translations/gl.js +5 -0
- package/dist/translations/gl.umd.js +11 -0
- package/dist/translations/he.d.ts +8 -0
- package/dist/translations/he.js +5 -0
- package/dist/translations/he.umd.js +11 -0
- package/dist/translations/hi.d.ts +8 -0
- package/dist/translations/hi.js +5 -0
- package/dist/translations/hi.umd.js +11 -0
- package/dist/translations/hr.d.ts +8 -0
- package/dist/translations/hr.js +5 -0
- package/dist/translations/hr.umd.js +11 -0
- package/dist/translations/hu.d.ts +8 -0
- package/dist/translations/hu.js +5 -0
- package/dist/translations/hu.umd.js +11 -0
- package/dist/translations/id.d.ts +8 -0
- package/dist/translations/id.js +5 -0
- package/dist/translations/id.umd.js +11 -0
- package/dist/translations/it.d.ts +8 -0
- package/dist/translations/it.js +5 -0
- package/dist/translations/it.umd.js +11 -0
- package/dist/translations/ja.d.ts +8 -0
- package/dist/translations/ja.js +5 -0
- package/dist/translations/ja.umd.js +11 -0
- package/dist/translations/jv.d.ts +8 -0
- package/dist/translations/jv.js +5 -0
- package/dist/translations/jv.umd.js +11 -0
- package/dist/translations/km.d.ts +8 -0
- package/dist/translations/km.js +5 -0
- package/dist/translations/km.umd.js +11 -0
- package/dist/translations/kn.d.ts +8 -0
- package/dist/translations/kn.js +5 -0
- package/dist/translations/kn.umd.js +11 -0
- package/dist/translations/ko.d.ts +8 -0
- package/dist/translations/ko.js +5 -0
- package/dist/translations/ko.umd.js +11 -0
- package/dist/translations/ku.d.ts +8 -0
- package/dist/translations/ku.js +5 -0
- package/dist/translations/ku.umd.js +11 -0
- package/dist/translations/lt.d.ts +8 -0
- package/dist/translations/lt.js +5 -0
- package/dist/translations/lt.umd.js +11 -0
- package/dist/translations/lv.d.ts +8 -0
- package/dist/translations/lv.js +5 -0
- package/dist/translations/lv.umd.js +11 -0
- package/dist/translations/ms.d.ts +8 -0
- package/dist/translations/ms.js +5 -0
- package/dist/translations/ms.umd.js +11 -0
- package/dist/translations/nb.d.ts +8 -0
- package/dist/translations/nb.js +5 -0
- package/dist/translations/nb.umd.js +11 -0
- package/dist/translations/ne.d.ts +8 -0
- package/dist/translations/ne.js +5 -0
- package/dist/translations/ne.umd.js +11 -0
- package/dist/translations/nl.d.ts +8 -0
- package/dist/translations/nl.js +5 -0
- package/dist/translations/nl.umd.js +11 -0
- package/dist/translations/no.d.ts +8 -0
- package/dist/translations/no.js +5 -0
- package/dist/translations/no.umd.js +11 -0
- package/dist/translations/pl.d.ts +8 -0
- package/dist/translations/pl.js +5 -0
- package/dist/translations/pl.umd.js +11 -0
- package/dist/translations/pt-br.d.ts +8 -0
- package/dist/translations/pt-br.js +5 -0
- package/dist/translations/pt-br.umd.js +11 -0
- package/dist/translations/pt.d.ts +8 -0
- package/dist/translations/pt.js +5 -0
- package/dist/translations/pt.umd.js +11 -0
- package/dist/translations/ro.d.ts +8 -0
- package/dist/translations/ro.js +5 -0
- package/dist/translations/ro.umd.js +11 -0
- package/dist/translations/ru.d.ts +8 -0
- package/dist/translations/ru.js +5 -0
- package/dist/translations/ru.umd.js +11 -0
- package/dist/translations/sk.d.ts +8 -0
- package/dist/translations/sk.js +5 -0
- package/dist/translations/sk.umd.js +11 -0
- package/dist/translations/sl.d.ts +8 -0
- package/dist/translations/sl.js +5 -0
- package/dist/translations/sl.umd.js +11 -0
- package/dist/translations/sq.d.ts +8 -0
- package/dist/translations/sq.js +5 -0
- package/dist/translations/sq.umd.js +11 -0
- package/dist/translations/sr-latn.d.ts +8 -0
- package/dist/translations/sr-latn.js +5 -0
- package/dist/translations/sr-latn.umd.js +11 -0
- package/dist/translations/sr.d.ts +8 -0
- package/dist/translations/sr.js +5 -0
- package/dist/translations/sr.umd.js +11 -0
- package/dist/translations/sv.d.ts +8 -0
- package/dist/translations/sv.js +5 -0
- package/dist/translations/sv.umd.js +11 -0
- package/dist/translations/th.d.ts +8 -0
- package/dist/translations/th.js +5 -0
- package/dist/translations/th.umd.js +11 -0
- package/dist/translations/ti.d.ts +8 -0
- package/dist/translations/ti.js +5 -0
- package/dist/translations/ti.umd.js +11 -0
- package/dist/translations/tk.d.ts +8 -0
- package/dist/translations/tk.js +5 -0
- package/dist/translations/tk.umd.js +11 -0
- package/dist/translations/tr.d.ts +8 -0
- package/dist/translations/tr.js +5 -0
- package/dist/translations/tr.umd.js +11 -0
- package/dist/translations/tt.d.ts +8 -0
- package/dist/translations/tt.js +5 -0
- package/dist/translations/tt.umd.js +11 -0
- package/dist/translations/ug.d.ts +8 -0
- package/dist/translations/ug.js +5 -0
- package/dist/translations/ug.umd.js +11 -0
- package/dist/translations/uk.d.ts +8 -0
- package/dist/translations/uk.js +5 -0
- package/dist/translations/uk.umd.js +11 -0
- package/dist/translations/ur.d.ts +8 -0
- package/dist/translations/ur.js +5 -0
- package/dist/translations/ur.umd.js +11 -0
- package/dist/translations/uz.d.ts +8 -0
- package/dist/translations/uz.js +5 -0
- package/dist/translations/uz.umd.js +11 -0
- package/dist/translations/vi.d.ts +8 -0
- package/dist/translations/vi.js +5 -0
- package/dist/translations/vi.umd.js +11 -0
- package/dist/translations/zh-cn.d.ts +8 -0
- package/dist/translations/zh-cn.js +5 -0
- package/dist/translations/zh-cn.umd.js +11 -0
- package/dist/translations/zh.d.ts +8 -0
- package/dist/translations/zh.js +5 -0
- package/dist/translations/zh.umd.js +11 -0
- package/dist/types/arialiveannouncer.d.ts +113 -0
- package/dist/types/augmentation.d.ts +92 -0
- package/dist/types/autocomplete/autocompleteview.d.ts +85 -0
- package/dist/types/bindings/addkeyboardhandlingforgrid.d.ts +31 -0
- package/dist/types/bindings/clickoutsidehandler.d.ts +32 -0
- package/dist/types/bindings/csstransitiondisablermixin.d.ts +44 -0
- package/dist/types/bindings/draggableviewmixin.d.ts +50 -0
- package/dist/types/bindings/injectcsstransitiondisabler.d.ts +63 -0
- package/dist/types/bindings/preventdefault.d.ts +37 -0
- package/dist/types/bindings/submithandler.d.ts +61 -0
- package/dist/types/button/button.d.ts +185 -0
- package/dist/types/button/buttonlabel.d.ts +38 -0
- package/dist/types/button/buttonlabelview.d.ts +35 -0
- package/dist/types/button/buttonview.d.ts +189 -0
- package/dist/types/button/filedialogbuttonview.d.ts +84 -0
- package/dist/types/button/switchbuttonview.d.ts +49 -0
- package/dist/types/collapsible/collapsibleview.d.ts +74 -0
- package/dist/types/colorgrid/colorgridview.d.ts +136 -0
- package/dist/types/colorgrid/colortileview.d.ts +32 -0
- package/dist/types/colorgrid/utils.d.ts +51 -0
- package/dist/types/colorpicker/colorpickerview.d.ts +177 -0
- package/dist/types/colorpicker/utils.d.ts +52 -0
- package/dist/types/colorselector/colorgridsfragmentview.d.ts +199 -0
- package/dist/types/colorselector/colorpickerfragmentview.d.ts +137 -0
- package/dist/types/colorselector/colorselectorview.d.ts +246 -0
- package/dist/types/colorselector/documentcolorcollection.d.ts +74 -0
- package/dist/types/componentfactory.d.ts +85 -0
- package/dist/types/dialog/dialog.d.ts +277 -0
- package/dist/types/dialog/dialogactionsview.d.ts +73 -0
- package/dist/types/dialog/dialogcontentview.d.ts +31 -0
- package/dist/types/dialog/dialogview.d.ts +260 -0
- package/dist/types/dropdown/button/dropdownbutton.d.ts +29 -0
- package/dist/types/dropdown/button/dropdownbuttonview.d.ts +52 -0
- package/dist/types/dropdown/button/splitbuttonview.d.ts +166 -0
- package/dist/types/dropdown/dropdownpanelfocusable.d.ts +25 -0
- package/dist/types/dropdown/dropdownpanelview.d.ts +66 -0
- package/dist/types/dropdown/dropdownview.d.ts +319 -0
- package/dist/types/dropdown/utils.d.ts +239 -0
- package/dist/types/editableui/editableuiview.d.ts +76 -0
- package/dist/types/editableui/inline/inlineeditableuiview.d.ts +44 -0
- package/dist/types/editorui/accessibilityhelp/accessibilityhelp.d.ts +55 -0
- package/dist/types/editorui/accessibilityhelp/accessibilityhelpcontentview.d.ts +39 -0
- package/dist/types/editorui/bodycollection.d.ts +59 -0
- package/dist/types/editorui/boxed/boxededitoruiview.d.ts +44 -0
- package/dist/types/editorui/editorui.d.ts +292 -0
- package/dist/types/editorui/editoruiview.d.ts +43 -0
- package/dist/types/editorui/poweredby.d.ts +75 -0
- package/dist/types/focuscycler.d.ts +249 -0
- package/dist/types/formheader/formheaderview.d.ts +63 -0
- package/dist/types/highlightedtext/highlightedtextview.d.ts +42 -0
- package/dist/types/icon/iconview.d.ts +92 -0
- package/dist/types/iframe/iframeview.d.ts +54 -0
- package/dist/types/index.d.ts +87 -0
- package/dist/types/input/inputbase.d.ts +123 -0
- package/dist/types/input/inputview.d.ts +40 -0
- package/dist/types/inputnumber/inputnumberview.d.ts +53 -0
- package/dist/types/inputtext/inputtextview.d.ts +22 -0
- package/dist/types/label/labelview.d.ts +40 -0
- package/dist/types/labeledfield/labeledfieldview.d.ts +191 -0
- package/dist/types/labeledfield/utils.d.ts +127 -0
- package/dist/types/labeledinput/labeledinputview.d.ts +129 -0
- package/dist/types/list/listitemgroupview.d.ts +63 -0
- package/dist/types/list/listitemview.d.ts +40 -0
- package/dist/types/list/listseparatorview.d.ts +22 -0
- package/dist/types/list/listview.d.ts +128 -0
- package/dist/types/menubar/menubarmenubuttonview.d.ts +39 -0
- package/dist/types/menubar/menubarmenulistitembuttonview.d.ts +25 -0
- package/dist/types/menubar/menubarmenulistitemfiledialogbuttonview.d.ts +27 -0
- package/dist/types/menubar/menubarmenulistitemview.d.ts +29 -0
- package/dist/types/menubar/menubarmenulistview.d.ts +28 -0
- package/dist/types/menubar/menubarmenupanelview.d.ts +57 -0
- package/dist/types/menubar/menubarmenuview.d.ts +113 -0
- package/dist/types/menubar/menubarview.d.ts +168 -0
- package/dist/types/menubar/utils.d.ts +443 -0
- package/dist/types/model.d.ts +26 -0
- package/dist/types/notification/notification.d.ts +215 -0
- package/dist/types/panel/balloon/balloonpanelview.d.ts +689 -0
- package/dist/types/panel/balloon/contextualballoon.d.ts +303 -0
- package/dist/types/panel/sticky/stickypanelview.d.ts +160 -0
- package/dist/types/search/filteredview.d.ts +35 -0
- package/dist/types/search/searchinfoview.d.ts +49 -0
- package/dist/types/search/searchresultsview.d.ts +58 -0
- package/dist/types/search/text/searchtextqueryview.d.ts +80 -0
- package/dist/types/search/text/searchtextview.d.ts +223 -0
- package/dist/types/spinner/spinnerview.d.ts +29 -0
- package/dist/types/template.d.ts +946 -0
- package/dist/types/textarea/textareaview.d.ts +108 -0
- package/dist/types/toolbar/balloon/balloontoolbar.d.ts +121 -0
- package/dist/types/toolbar/block/blockbuttonview.d.ts +39 -0
- package/dist/types/toolbar/block/blocktoolbar.d.ts +157 -0
- package/dist/types/toolbar/normalizetoolbarconfig.d.ts +44 -0
- package/dist/types/toolbar/toolbarlinebreakview.d.ts +22 -0
- package/dist/types/toolbar/toolbarseparatorview.d.ts +22 -0
- package/dist/types/toolbar/toolbarview.d.ts +271 -0
- package/dist/types/tooltipmanager.d.ts +199 -0
- package/dist/types/view.d.ts +426 -0
- package/dist/types/viewcollection.d.ts +143 -0
- package/lang/contexts.json +2 -1
- package/lang/translations/af.po +4 -0
- package/lang/translations/ar.po +4 -0
- package/lang/translations/ast.po +4 -0
- package/lang/translations/az.po +4 -0
- package/lang/translations/bg.po +4 -0
- package/lang/translations/bn.po +4 -0
- package/lang/translations/bs.po +4 -0
- package/lang/translations/ca.po +4 -0
- package/lang/translations/cs.po +4 -0
- package/lang/translations/da.po +4 -0
- package/lang/translations/de-ch.po +4 -0
- package/lang/translations/de.po +4 -0
- package/lang/translations/el.po +4 -0
- package/lang/translations/en-au.po +4 -0
- package/lang/translations/en-gb.po +4 -0
- package/lang/translations/en.po +4 -0
- package/lang/translations/eo.po +4 -0
- package/lang/translations/es-co.po +4 -0
- package/lang/translations/es.po +4 -0
- package/lang/translations/et.po +4 -0
- package/lang/translations/eu.po +4 -0
- package/lang/translations/fa.po +4 -0
- package/lang/translations/fi.po +4 -0
- package/lang/translations/fr.po +4 -0
- package/lang/translations/gl.po +4 -0
- package/lang/translations/he.po +4 -0
- package/lang/translations/hi.po +4 -0
- package/lang/translations/hr.po +4 -0
- package/lang/translations/hu.po +4 -0
- package/lang/translations/id.po +4 -0
- package/lang/translations/it.po +4 -0
- package/lang/translations/ja.po +4 -0
- package/lang/translations/jv.po +4 -0
- package/lang/translations/km.po +4 -0
- package/lang/translations/kn.po +4 -0
- package/lang/translations/ko.po +4 -0
- package/lang/translations/ku.po +4 -0
- package/lang/translations/lt.po +4 -0
- package/lang/translations/lv.po +4 -0
- package/lang/translations/ms.po +4 -0
- package/lang/translations/nb.po +4 -0
- package/lang/translations/ne.po +4 -0
- package/lang/translations/nl.po +4 -0
- package/lang/translations/no.po +4 -0
- package/lang/translations/pl.po +4 -0
- package/lang/translations/pt-br.po +4 -0
- package/lang/translations/pt.po +4 -0
- package/lang/translations/ro.po +4 -0
- package/lang/translations/ru.po +4 -0
- package/lang/translations/sk.po +4 -0
- package/lang/translations/sl.po +4 -0
- package/lang/translations/sq.po +4 -0
- package/lang/translations/sr-latn.po +4 -0
- package/lang/translations/sr.po +4 -0
- package/lang/translations/sv.po +4 -0
- package/lang/translations/th.po +4 -0
- package/lang/translations/ti.po +214 -0
- package/lang/translations/tk.po +4 -0
- package/lang/translations/tr.po +4 -0
- package/lang/translations/tt.po +4 -0
- package/lang/translations/ug.po +4 -0
- package/lang/translations/uk.po +4 -0
- package/lang/translations/ur.po +4 -0
- package/lang/translations/uz.po +4 -0
- package/lang/translations/vi.po +4 -0
- package/lang/translations/zh-cn.po +4 -0
- package/lang/translations/zh.po +4 -0
- package/package.json +4 -3
- package/src/arialiveannouncer.d.ts +34 -23
- package/src/arialiveannouncer.js +80 -30
- package/src/colorgrid/colortileview.d.ts +1 -1
- package/src/colorgrid/colortileview.js +3 -1
- package/src/colorpicker/colorpickerview.d.ts +32 -1
- package/src/colorpicker/colorpickerview.js +62 -13
- package/src/colorselector/colorpickerfragmentview.d.ts +4 -0
- package/src/colorselector/colorpickerfragmentview.js +13 -5
- package/src/colorselector/colorselectorview.js +1 -0
- package/src/index.d.ts +4 -4
- package/src/index.js +3 -2
- package/src/menubar/utils.d.ts +8 -1
- package/src/menubar/utils.js +26 -2
- package/src/toolbar/toolbarview.js +2 -3
- package/theme/components/arialiveannouncer/arialiveannouncer.css +4 -0
- package/theme/components/tooltip/tooltip.css +4 -0
- package/theme/globals/globals.css +0 -1
- package/theme/mixins/_mediacolors.css +20 -0
- package/theme/globals/_reset.css +0 -13
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* @module ui/textarea/textareaview
|
|
11
|
+
*/
|
|
12
|
+
import { type Locale } from '@ckeditor/ckeditor5-utils';
|
|
13
|
+
import InputBase from '../input/inputbase.js';
|
|
14
|
+
import '../../theme/components/input/input.css';
|
|
15
|
+
import '../../theme/components/textarea/textarea.css';
|
|
16
|
+
/**
|
|
17
|
+
* The textarea view class.
|
|
18
|
+
*
|
|
19
|
+
* ```ts
|
|
20
|
+
* const textareaView = new TextareaView();
|
|
21
|
+
*
|
|
22
|
+
* textareaView.minRows = 2;
|
|
23
|
+
* textareaView.maxRows = 10;
|
|
24
|
+
*
|
|
25
|
+
* textareaView.render();
|
|
26
|
+
*
|
|
27
|
+
* document.body.append( textareaView.element );
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export default class TextareaView extends InputBase<HTMLTextAreaElement> {
|
|
31
|
+
/**
|
|
32
|
+
* Specifies the visible height of a text area, in lines.
|
|
33
|
+
*
|
|
34
|
+
* @observable
|
|
35
|
+
* @default 2
|
|
36
|
+
*/
|
|
37
|
+
minRows: number;
|
|
38
|
+
/**
|
|
39
|
+
* Specifies the maximum number of rows.
|
|
40
|
+
*
|
|
41
|
+
* @observable
|
|
42
|
+
* @default 5
|
|
43
|
+
*/
|
|
44
|
+
maxRows: number;
|
|
45
|
+
/**
|
|
46
|
+
* Specifies the value of HTML attribute that indicates whether the user can resize the element.
|
|
47
|
+
*
|
|
48
|
+
* @observable
|
|
49
|
+
* @default 'none'
|
|
50
|
+
*/
|
|
51
|
+
resize: 'both' | 'horizontal' | 'vertical' | 'none';
|
|
52
|
+
/**
|
|
53
|
+
* An internal property that stores the current height of the textarea. Used for the DOM binding.
|
|
54
|
+
*
|
|
55
|
+
* @observable
|
|
56
|
+
* @default null
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
_height: number | null;
|
|
60
|
+
/**
|
|
61
|
+
* An instance of the resize observer used to detect when the view is visible or not and update
|
|
62
|
+
* its height if any changes that affect it were made while it was invisible.
|
|
63
|
+
*
|
|
64
|
+
* **Note:** Created in {@link #render}.
|
|
65
|
+
*/
|
|
66
|
+
private _resizeObserver;
|
|
67
|
+
/**
|
|
68
|
+
* A flag that indicates whether the {@link #_updateAutoGrowHeight} method should be called when the view becomes
|
|
69
|
+
* visible again. See {@link #_resizeObserver}.
|
|
70
|
+
*/
|
|
71
|
+
private _isUpdateAutoGrowHeightPending;
|
|
72
|
+
/**
|
|
73
|
+
* @inheritDoc
|
|
74
|
+
*/
|
|
75
|
+
constructor(locale?: Locale);
|
|
76
|
+
/**
|
|
77
|
+
* @inheritDoc
|
|
78
|
+
*/
|
|
79
|
+
render(): void;
|
|
80
|
+
/**
|
|
81
|
+
* @inheritDoc
|
|
82
|
+
*/
|
|
83
|
+
destroy(): void;
|
|
84
|
+
/**
|
|
85
|
+
* @inheritDoc
|
|
86
|
+
*/
|
|
87
|
+
reset(): void;
|
|
88
|
+
/**
|
|
89
|
+
* Updates the {@link #_height} of the view depending on {@link #minRows}, {@link #maxRows}, and the current content size.
|
|
90
|
+
*
|
|
91
|
+
* **Note**: This method overrides manual resize done by the user using a handle. It's a known bug.
|
|
92
|
+
*/
|
|
93
|
+
private _updateAutoGrowHeight;
|
|
94
|
+
/**
|
|
95
|
+
* Validates the {@link #minRows} and {@link #maxRows} properties and warns in the console if the configuration is incorrect.
|
|
96
|
+
*/
|
|
97
|
+
private _validateMinMaxRows;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Fired every time the layout of the {@link module:ui/textarea/textareaview~TextareaView} possibly changed as a result
|
|
101
|
+
* of the user input or the value change via {@link module:ui/textarea/textareaview~TextareaView#value}.
|
|
102
|
+
*
|
|
103
|
+
* @eventName ~TextareaView#update
|
|
104
|
+
*/
|
|
105
|
+
export type TextareaViewUpdateEvent = {
|
|
106
|
+
name: 'update';
|
|
107
|
+
args: [];
|
|
108
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* @module ui/toolbar/balloon/balloontoolbar
|
|
11
|
+
*/
|
|
12
|
+
import ContextualBalloon from '../../panel/balloon/contextualballoon.js';
|
|
13
|
+
import ToolbarView from '../toolbarview.js';
|
|
14
|
+
import { Plugin, type Editor } from '@ckeditor/ckeditor5-core';
|
|
15
|
+
import { FocusTracker } from '@ckeditor/ckeditor5-utils';
|
|
16
|
+
/**
|
|
17
|
+
* The contextual toolbar.
|
|
18
|
+
*
|
|
19
|
+
* It uses the {@link module:ui/panel/balloon/contextualballoon~ContextualBalloon contextual balloon plugin}.
|
|
20
|
+
*/
|
|
21
|
+
export default class BalloonToolbar extends Plugin {
|
|
22
|
+
/**
|
|
23
|
+
* The toolbar view displayed in the balloon.
|
|
24
|
+
*/
|
|
25
|
+
readonly toolbarView: ToolbarView;
|
|
26
|
+
/**
|
|
27
|
+
* Tracks the focus of the {@link module:ui/editorui/editorui~EditorUI#getEditableElement editable element}
|
|
28
|
+
* and the {@link #toolbarView}. When both are blurred then the toolbar should hide.
|
|
29
|
+
*/
|
|
30
|
+
readonly focusTracker: FocusTracker;
|
|
31
|
+
/**
|
|
32
|
+
* A cached and normalized `config.balloonToolbar` object.
|
|
33
|
+
*/
|
|
34
|
+
private _balloonConfig;
|
|
35
|
+
/**
|
|
36
|
+
* An instance of the resize observer that allows to respond to changes in editable's geometry
|
|
37
|
+
* so the toolbar can stay within its boundaries (and group toolbar items that do not fit).
|
|
38
|
+
*
|
|
39
|
+
* **Note**: Used only when `shouldNotGroupWhenFull` was **not** set in the
|
|
40
|
+
* {@link module:core/editor/editorconfig~EditorConfig#balloonToolbar configuration}.
|
|
41
|
+
*
|
|
42
|
+
* **Note:** Created in {@link #init}.
|
|
43
|
+
*/
|
|
44
|
+
private _resizeObserver;
|
|
45
|
+
/**
|
|
46
|
+
* The contextual balloon plugin instance.
|
|
47
|
+
*/
|
|
48
|
+
private readonly _balloon;
|
|
49
|
+
/**
|
|
50
|
+
* Fires `_selectionChangeDebounced` event using `lodash#debounce`.
|
|
51
|
+
*
|
|
52
|
+
* This event is an internal plugin event which is fired 200 ms after model selection last change.
|
|
53
|
+
* This is to makes easy test debounced action without need to use `setTimeout`.
|
|
54
|
+
*
|
|
55
|
+
* This function is stored as a plugin property to make possible to cancel
|
|
56
|
+
* trailing debounced invocation on destroy.
|
|
57
|
+
*/
|
|
58
|
+
private readonly _fireSelectionChangeDebounced;
|
|
59
|
+
/**
|
|
60
|
+
* @inheritDoc
|
|
61
|
+
*/
|
|
62
|
+
static get pluginName(): "BalloonToolbar";
|
|
63
|
+
/**
|
|
64
|
+
* @inheritDoc
|
|
65
|
+
*/
|
|
66
|
+
static get requires(): readonly [typeof ContextualBalloon];
|
|
67
|
+
/**
|
|
68
|
+
* @inheritDoc
|
|
69
|
+
*/
|
|
70
|
+
constructor(editor: Editor);
|
|
71
|
+
/**
|
|
72
|
+
* @inheritDoc
|
|
73
|
+
*/
|
|
74
|
+
init(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Creates the toolbar view instance.
|
|
77
|
+
*/
|
|
78
|
+
private _createToolbarView;
|
|
79
|
+
/**
|
|
80
|
+
* Shows the toolbar and attaches it to the selection.
|
|
81
|
+
*
|
|
82
|
+
* Fires {@link #event:show} event which can be stopped to prevent the toolbar from showing up.
|
|
83
|
+
*
|
|
84
|
+
* @param showForCollapsedSelection When set `true`, the toolbar will show despite collapsed selection in the
|
|
85
|
+
* editing view.
|
|
86
|
+
*/
|
|
87
|
+
show(showForCollapsedSelection?: boolean): void;
|
|
88
|
+
/**
|
|
89
|
+
* Hides the toolbar.
|
|
90
|
+
*/
|
|
91
|
+
hide(): void;
|
|
92
|
+
/**
|
|
93
|
+
* Returns positioning options for the {@link #_balloon}. They control the way balloon is attached
|
|
94
|
+
* to the selection.
|
|
95
|
+
*/
|
|
96
|
+
private _getBalloonPositionData;
|
|
97
|
+
/**
|
|
98
|
+
* Updates the position of the {@link #_balloon} to make up for changes:
|
|
99
|
+
*
|
|
100
|
+
* * in the geometry of the selection it is attached to (e.g. the selection moved in the viewport or expanded or shrunk),
|
|
101
|
+
* * or the geometry of the balloon toolbar itself (e.g. the toolbar has grouped or ungrouped some items and it is shorter or longer).
|
|
102
|
+
*/
|
|
103
|
+
private _updatePosition;
|
|
104
|
+
/**
|
|
105
|
+
* @inheritDoc
|
|
106
|
+
*/
|
|
107
|
+
destroy(): void;
|
|
108
|
+
/**
|
|
109
|
+
* Returns toolbar positions for the given direction of the selection.
|
|
110
|
+
*/
|
|
111
|
+
private _getBalloonPositions;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* This event is fired just before the toolbar shows up. Stopping this event will prevent this.
|
|
115
|
+
*
|
|
116
|
+
* @eventName ~BalloonToolbar#show
|
|
117
|
+
*/
|
|
118
|
+
export type BalloonToolbarShowEvent = {
|
|
119
|
+
name: 'show';
|
|
120
|
+
args: [];
|
|
121
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* @module ui/toolbar/block/blockbuttonview
|
|
11
|
+
*/
|
|
12
|
+
import ButtonView from '../../button/buttonview.js';
|
|
13
|
+
import { type Locale } from '@ckeditor/ckeditor5-utils';
|
|
14
|
+
import '../../../theme/components/toolbar/blocktoolbar.css';
|
|
15
|
+
/**
|
|
16
|
+
* The block button view class.
|
|
17
|
+
*
|
|
18
|
+
* This view represents a button attached next to block element where the selection is anchored.
|
|
19
|
+
*
|
|
20
|
+
* See {@link module:ui/toolbar/block/blocktoolbar~BlockToolbar}.
|
|
21
|
+
*/
|
|
22
|
+
export default class BlockButtonView extends ButtonView {
|
|
23
|
+
/**
|
|
24
|
+
* Top offset.
|
|
25
|
+
*
|
|
26
|
+
* @observable
|
|
27
|
+
*/
|
|
28
|
+
top: number;
|
|
29
|
+
/**
|
|
30
|
+
* Left offset.
|
|
31
|
+
*
|
|
32
|
+
* @observable
|
|
33
|
+
*/
|
|
34
|
+
left: number;
|
|
35
|
+
/**
|
|
36
|
+
* @inheritDoc
|
|
37
|
+
*/
|
|
38
|
+
constructor(locale?: Locale);
|
|
39
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* @module ui/toolbar/block/blocktoolbar
|
|
11
|
+
*/
|
|
12
|
+
import { Plugin, type Editor } from '@ckeditor/ckeditor5-core';
|
|
13
|
+
import BlockButtonView from './blockbuttonview.js';
|
|
14
|
+
import BalloonPanelView from '../../panel/balloon/balloonpanelview.js';
|
|
15
|
+
import ToolbarView from '../toolbarview.js';
|
|
16
|
+
/**
|
|
17
|
+
* The block toolbar plugin.
|
|
18
|
+
*
|
|
19
|
+
* This plugin provides a button positioned next to the block of content where the selection is anchored.
|
|
20
|
+
* Upon clicking the button, a dropdown providing access to editor features shows up, as configured in
|
|
21
|
+
* {@link module:core/editor/editorconfig~EditorConfig#blockToolbar}.
|
|
22
|
+
*
|
|
23
|
+
* By default, the button is displayed next to all elements marked in {@link module:engine/model/schema~Schema}
|
|
24
|
+
* as `$block` for which the toolbar provides at least one option.
|
|
25
|
+
*
|
|
26
|
+
* By default, the button is attached so its right boundary is touching the
|
|
27
|
+
* {@link module:engine/view/editableelement~EditableElement}:
|
|
28
|
+
*
|
|
29
|
+
* ```
|
|
30
|
+
* __ |
|
|
31
|
+
* | || This is a block of content that the
|
|
32
|
+
* ¯¯ | button is attached to. This is a
|
|
33
|
+
* | block of content that the button is
|
|
34
|
+
* | attached to.
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* The position of the button can be adjusted using the CSS `transform` property:
|
|
38
|
+
*
|
|
39
|
+
* ```css
|
|
40
|
+
* .ck-block-toolbar-button {
|
|
41
|
+
* transform: translateX( -10px );
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* ```
|
|
46
|
+
* __ |
|
|
47
|
+
* | | | This is a block of content that the
|
|
48
|
+
* ¯¯ | button is attached to. This is a
|
|
49
|
+
* | block of content that the button is
|
|
50
|
+
* | attached to.
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* **Note**: If you plan to run the editor in a right–to–left (RTL) language, keep in mind the button
|
|
54
|
+
* will be attached to the **right** boundary of the editable area. In that case, make sure the
|
|
55
|
+
* CSS position adjustment works properly by adding the following styles:
|
|
56
|
+
*
|
|
57
|
+
* ```css
|
|
58
|
+
* .ck[dir="rtl"] .ck-block-toolbar-button {
|
|
59
|
+
* transform: translateX( 10px );
|
|
60
|
+
* }
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export default class BlockToolbar extends Plugin {
|
|
64
|
+
/**
|
|
65
|
+
* The toolbar view.
|
|
66
|
+
*/
|
|
67
|
+
readonly toolbarView: ToolbarView;
|
|
68
|
+
/**
|
|
69
|
+
* The balloon panel view, containing the {@link #toolbarView}.
|
|
70
|
+
*/
|
|
71
|
+
readonly panelView: BalloonPanelView;
|
|
72
|
+
/**
|
|
73
|
+
* The button view that opens the {@link #toolbarView}.
|
|
74
|
+
*/
|
|
75
|
+
readonly buttonView: BlockButtonView;
|
|
76
|
+
/**
|
|
77
|
+
* An instance of the resize observer that allows to respond to changes in editable's geometry
|
|
78
|
+
* so the toolbar can stay within its boundaries (and group toolbar items that do not fit).
|
|
79
|
+
*
|
|
80
|
+
* **Note**: Used only when `shouldNotGroupWhenFull` was **not** set in the
|
|
81
|
+
* {@link module:core/editor/editorconfig~EditorConfig#blockToolbar configuration}.
|
|
82
|
+
*/
|
|
83
|
+
private _resizeObserver;
|
|
84
|
+
/**
|
|
85
|
+
* A cached and normalized `config.blockToolbar` object.
|
|
86
|
+
*/
|
|
87
|
+
private _blockToolbarConfig;
|
|
88
|
+
/**
|
|
89
|
+
* @inheritDoc
|
|
90
|
+
*/
|
|
91
|
+
static get pluginName(): "BlockToolbar";
|
|
92
|
+
/**
|
|
93
|
+
* @inheritDoc
|
|
94
|
+
*/
|
|
95
|
+
constructor(editor: Editor);
|
|
96
|
+
/**
|
|
97
|
+
* @inheritDoc
|
|
98
|
+
*/
|
|
99
|
+
init(): void;
|
|
100
|
+
/**
|
|
101
|
+
* @inheritDoc
|
|
102
|
+
*/
|
|
103
|
+
destroy(): void;
|
|
104
|
+
/**
|
|
105
|
+
* Creates the {@link #toolbarView}.
|
|
106
|
+
*/
|
|
107
|
+
private _createToolbarView;
|
|
108
|
+
/**
|
|
109
|
+
* Creates the {@link #panelView}.
|
|
110
|
+
*/
|
|
111
|
+
private _createPanelView;
|
|
112
|
+
/**
|
|
113
|
+
* Creates the {@link #buttonView}.
|
|
114
|
+
*/
|
|
115
|
+
private _createButtonView;
|
|
116
|
+
/**
|
|
117
|
+
* Shows or hides the button.
|
|
118
|
+
* When all the conditions for displaying the button are matched, it shows the button. Hides otherwise.
|
|
119
|
+
*/
|
|
120
|
+
private _updateButton;
|
|
121
|
+
/**
|
|
122
|
+
* Hides the button.
|
|
123
|
+
*/
|
|
124
|
+
private _hideButton;
|
|
125
|
+
/**
|
|
126
|
+
* Shows the {@link #toolbarView} attached to the {@link #buttonView}.
|
|
127
|
+
* If the toolbar is already visible, then it simply repositions it.
|
|
128
|
+
*/
|
|
129
|
+
private _showPanel;
|
|
130
|
+
/**
|
|
131
|
+
* Returns currently selected editable, based on the model selection.
|
|
132
|
+
*/
|
|
133
|
+
private _getSelectedEditableElement;
|
|
134
|
+
/**
|
|
135
|
+
* Hides the {@link #toolbarView}.
|
|
136
|
+
*
|
|
137
|
+
* @param focusEditable When `true`, the editable will be focused after hiding the panel.
|
|
138
|
+
*/
|
|
139
|
+
private _hidePanel;
|
|
140
|
+
/**
|
|
141
|
+
* Attaches the {@link #buttonView} to the target block of content.
|
|
142
|
+
*
|
|
143
|
+
* @param targetElement Target element.
|
|
144
|
+
*/
|
|
145
|
+
private _attachButtonToElement;
|
|
146
|
+
/**
|
|
147
|
+
* Creates a resize observer that observes selected editable and resizes the toolbar panel accordingly.
|
|
148
|
+
*/
|
|
149
|
+
private _setupToolbarResize;
|
|
150
|
+
/**
|
|
151
|
+
* Gets the {@link #toolbarView} max-width, based on given `editableElement` width plus the distance between the farthest
|
|
152
|
+
* edge of the {@link #buttonView} and the editable.
|
|
153
|
+
*
|
|
154
|
+
* @returns A maximum width that toolbar can have, in pixels.
|
|
155
|
+
*/
|
|
156
|
+
private _getToolbarMaxWidth;
|
|
157
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
8
|
+
*/
|
|
9
|
+
import type { ToolbarConfig, ToolbarConfigItem } from '@ckeditor/ckeditor5-core';
|
|
10
|
+
/**
|
|
11
|
+
* @module ui/toolbar/normalizetoolbarconfig
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Normalizes the toolbar configuration (`config.toolbar`), which:
|
|
15
|
+
*
|
|
16
|
+
* * may be defined as an `Array`:
|
|
17
|
+
*
|
|
18
|
+
* ```
|
|
19
|
+
* toolbar: [ 'heading', 'bold', 'italic', 'link', ... ]
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* * or an `Object`:
|
|
23
|
+
*
|
|
24
|
+
* ```
|
|
25
|
+
* toolbar: {
|
|
26
|
+
* items: [ 'heading', 'bold', 'italic', 'link', ... ],
|
|
27
|
+
* removeItems: [ 'bold' ],
|
|
28
|
+
* ...
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* * or may not be defined at all (`undefined`)
|
|
33
|
+
*
|
|
34
|
+
* and returns it in the object form.
|
|
35
|
+
*
|
|
36
|
+
* @param config The value of `config.toolbar`.
|
|
37
|
+
* @returns A normalized toolbar config object.
|
|
38
|
+
*/
|
|
39
|
+
export default function normalizeToolbarConfig(config: ToolbarConfig | undefined): {
|
|
40
|
+
items: Array<ToolbarConfigItem>;
|
|
41
|
+
removeItems: Array<string>;
|
|
42
|
+
shouldNotGroupWhenFull?: boolean;
|
|
43
|
+
icon?: string;
|
|
44
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* @module ui/toolbar/toolbarlinebreakview
|
|
11
|
+
*/
|
|
12
|
+
import View from '../view.js';
|
|
13
|
+
import type { Locale } from '@ckeditor/ckeditor5-utils';
|
|
14
|
+
/**
|
|
15
|
+
* The toolbar line break view class.
|
|
16
|
+
*/
|
|
17
|
+
export default class ToolbarLineBreakView extends View {
|
|
18
|
+
/**
|
|
19
|
+
* @inheritDoc
|
|
20
|
+
*/
|
|
21
|
+
constructor(locale?: Locale);
|
|
22
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
3
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
|
|
7
|
+
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* @module ui/toolbar/toolbarseparatorview
|
|
11
|
+
*/
|
|
12
|
+
import View from '../view.js';
|
|
13
|
+
import type { Locale } from '@ckeditor/ckeditor5-utils';
|
|
14
|
+
/**
|
|
15
|
+
* The toolbar separator view class.
|
|
16
|
+
*/
|
|
17
|
+
export default class ToolbarSeparatorView extends View {
|
|
18
|
+
/**
|
|
19
|
+
* @inheritDoc
|
|
20
|
+
*/
|
|
21
|
+
constructor(locale?: Locale);
|
|
22
|
+
}
|