@webiny/app-admin 5.34.8 → 5.35.0-beta.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.
Files changed (255) hide show
  1. package/assets/icons/add-18px.svg +1 -1
  2. package/assets/icons/arrow_drop_down-24px.svg +1 -1
  3. package/assets/icons/filter-24px.svg +1 -1
  4. package/assets/icons/highlight-24px.svg +1 -1
  5. package/assets/icons/info.svg +1 -1
  6. package/assets/icons/insert_drive_file-24px.svg +1 -1
  7. package/assets/icons/insert_photo-24px.svg +1 -1
  8. package/assets/icons/label-24px.svg +1 -1
  9. package/assets/icons/round-account_circle-24px.svg +1 -1
  10. package/assets/icons/round-arrow_drop_down-24px.svg +1 -1
  11. package/assets/icons/round-help-24px.svg +1 -1
  12. package/assets/icons/round-settings-24px.svg +1 -1
  13. package/assets/icons/today-24px.svg +1 -1
  14. package/assets/icons/touch_app.svg +1 -1
  15. package/base/Admin.js +1 -15
  16. package/base/Admin.js.map +1 -1
  17. package/base/Base.js +6 -44
  18. package/base/Base.js.map +1 -1
  19. package/base/plugins/AddGraphQLQuerySelection.js +5 -9
  20. package/base/plugins/AddGraphQLQuerySelection.js.map +1 -1
  21. package/base/providers/ApolloProvider.js +0 -5
  22. package/base/providers/ApolloProvider.js.map +1 -1
  23. package/base/providers/TelemetryProvider.js +1 -7
  24. package/base/providers/TelemetryProvider.js.map +1 -1
  25. package/base/providers/UiStateProvider.js +0 -5
  26. package/base/providers/UiStateProvider.js.map +1 -1
  27. package/base/providers/ViewCompositionProvider.js +3 -16
  28. package/base/providers/ViewCompositionProvider.js.map +1 -1
  29. package/base/ui/Brand.js +0 -4
  30. package/base/ui/Brand.js.map +1 -1
  31. package/base/ui/CenteredView.js +2 -7
  32. package/base/ui/CenteredView.js.map +1 -1
  33. package/base/ui/Dashboard.js +0 -4
  34. package/base/ui/Dashboard.js.map +1 -1
  35. package/base/ui/FileManager.d.ts +67 -0
  36. package/base/ui/FileManager.js +61 -0
  37. package/base/ui/FileManager.js.map +1 -0
  38. package/base/ui/Layout.js +1 -6
  39. package/base/ui/Layout.js.map +1 -1
  40. package/base/ui/LocaleSelector.js +0 -4
  41. package/base/ui/LocaleSelector.js.map +1 -1
  42. package/base/ui/LoginScreen.js +0 -6
  43. package/base/ui/LoginScreen.js.map +1 -1
  44. package/base/ui/Logo.js +0 -6
  45. package/base/ui/Logo.js.map +1 -1
  46. package/base/ui/Menu.js +2 -31
  47. package/base/ui/Menu.js.map +1 -1
  48. package/base/ui/Navigation.js +11 -44
  49. package/base/ui/Navigation.js.map +1 -1
  50. package/base/ui/NotFound.js +0 -4
  51. package/base/ui/NotFound.js.map +1 -1
  52. package/base/ui/Search.js +5 -23
  53. package/base/ui/Search.js.map +1 -1
  54. package/base/ui/Tags.js +1 -8
  55. package/base/ui/Tags.js.map +1 -1
  56. package/base/ui/UserMenu.js +5 -29
  57. package/base/ui/UserMenu.js.map +1 -1
  58. package/components/AdminLayout.js +1 -6
  59. package/components/AdminLayout.js.map +1 -1
  60. package/components/AppInstaller/AppInstaller.js +18 -84
  61. package/components/AppInstaller/AppInstaller.js.map +1 -1
  62. package/components/AppInstaller/Sidebar.js +11 -44
  63. package/components/AppInstaller/Sidebar.js.map +1 -1
  64. package/components/AppInstaller/index.js +0 -7
  65. package/components/AppInstaller/index.js.map +1 -1
  66. package/components/AppInstaller/styled.d.ts +17 -5
  67. package/components/AppInstaller/styled.js +0 -4
  68. package/components/AppInstaller/styled.js.map +1 -1
  69. package/components/AppInstaller/useInstaller.d.ts +1 -7
  70. package/components/AppInstaller/useInstaller.js +72 -183
  71. package/components/AppInstaller/useInstaller.js.map +1 -1
  72. package/components/EmptyView.js +4 -12
  73. package/components/EmptyView.js.map +1 -1
  74. package/components/FloatingActionButton.js +2 -8
  75. package/components/FloatingActionButton.js.map +1 -1
  76. package/components/MultiImageUpload.js +1 -10
  77. package/components/MultiImageUpload.js.map +1 -1
  78. package/components/OverlayLayout/OverlayLayout.js +9 -38
  79. package/components/OverlayLayout/OverlayLayout.js.map +1 -1
  80. package/components/OverlayLayout/index.js +0 -2
  81. package/components/OverlayLayout/index.js.map +1 -1
  82. package/components/Permissions/Permissions.d.ts +2 -0
  83. package/components/Permissions/Permissions.js +25 -27
  84. package/components/Permissions/Permissions.js.map +1 -1
  85. package/components/Permissions/StyledComponents.js +0 -7
  86. package/components/Permissions/StyledComponents.js.map +1 -1
  87. package/components/Permissions/index.js +0 -3
  88. package/components/Permissions/index.js.map +1 -1
  89. package/components/RichTextEditor/RichTextEditor.js +0 -7
  90. package/components/RichTextEditor/RichTextEditor.js.map +1 -1
  91. package/components/RichTextEditor/index.js +0 -2
  92. package/components/RichTextEditor/index.js.map +1 -1
  93. package/components/RichTextEditor/tools/header/index.js +62 -102
  94. package/components/RichTextEditor/tools/header/index.js.map +1 -1
  95. package/components/RichTextEditor/tools/image/index.js +15 -36
  96. package/components/RichTextEditor/tools/image/index.js.map +1 -1
  97. package/components/RichTextEditor/tools/image/svgs.js.map +1 -1
  98. package/components/RichTextEditor/tools/image/tunes.js +5 -22
  99. package/components/RichTextEditor/tools/image/tunes.js.map +1 -1
  100. package/components/RichTextEditor/tools/image/ui.js +16 -39
  101. package/components/RichTextEditor/tools/image/ui.js.map +1 -1
  102. package/components/RichTextEditor/tools/paragraph/index.js +55 -81
  103. package/components/RichTextEditor/tools/paragraph/index.js.map +1 -1
  104. package/components/RichTextEditor/tools/textColor/index.js +15 -41
  105. package/components/RichTextEditor/tools/textColor/index.js.map +1 -1
  106. package/components/RichTextEditor/tools/utils.js +0 -2
  107. package/components/RichTextEditor/tools/utils.js.map +1 -1
  108. package/components/Routes.js +6 -13
  109. package/components/Routes.js.map +1 -1
  110. package/components/SearchUI.d.ts +1 -0
  111. package/components/SearchUI.js +14 -14
  112. package/components/SearchUI.js.map +1 -1
  113. package/components/SimpleForm/SimpleForm.js +3 -32
  114. package/components/SimpleForm/SimpleForm.js.map +1 -1
  115. package/components/SimpleForm/index.js +0 -1
  116. package/components/SimpleForm/index.js.map +1 -1
  117. package/components/SimpleUI/InputField.d.ts +2 -0
  118. package/components/SimpleUI/InputField.js +16 -30
  119. package/components/SimpleUI/InputField.js.map +1 -1
  120. package/components/SingleImageUpload.d.ts +1 -1
  121. package/components/SingleImageUpload.js +14 -30
  122. package/components/SingleImageUpload.js.map +1 -1
  123. package/components/SplitView/SplitView.js +1 -20
  124. package/components/SplitView/SplitView.js.map +1 -1
  125. package/components/SplitView/index.js +0 -1
  126. package/components/SplitView/index.js.map +1 -1
  127. package/components/index.d.ts +1 -1
  128. package/components/index.js +1 -2
  129. package/components/index.js.map +1 -1
  130. package/hooks/useConfirmationDialog.js +6 -18
  131. package/hooks/useConfirmationDialog.js.map +1 -1
  132. package/hooks/useDialog.js +0 -5
  133. package/hooks/useDialog.js.map +1 -1
  134. package/hooks/useSnackbar.js +0 -5
  135. package/hooks/useSnackbar.js.map +1 -1
  136. package/index.d.ts +2 -3
  137. package/index.js +1 -61
  138. package/index.js.map +1 -1
  139. package/package.json +22 -32
  140. package/plugins/MenuPlugin.js +0 -15
  141. package/plugins/MenuPlugin.js.map +1 -1
  142. package/plugins/PermissionRendererPlugin.js +0 -15
  143. package/plugins/PermissionRendererPlugin.js.map +1 -1
  144. package/plugins/globalSearch/SearchBar.js +5 -53
  145. package/plugins/globalSearch/SearchBar.js.map +1 -1
  146. package/plugins/globalSearch/SearchBarDropdown.js +15 -33
  147. package/plugins/globalSearch/SearchBarDropdown.js.map +1 -1
  148. package/plugins/globalSearch/index.js.map +1 -1
  149. package/plugins/globalSearch/styled.d.ts +13 -4
  150. package/plugins/globalSearch/styled.js +1 -5
  151. package/plugins/globalSearch/styled.js.map +1 -1
  152. package/plugins/uiLayoutRenderer/index.js +2 -16
  153. package/plugins/uiLayoutRenderer/index.js.map +1 -1
  154. package/styles/theme.scss +31 -1
  155. package/types.d.ts +23 -27
  156. package/types.js.map +1 -1
  157. package/ui/UIElement.js +0 -1
  158. package/ui/UIElement.js.map +1 -1
  159. package/ui/UILayout.js +0 -1
  160. package/ui/UILayout.js.map +1 -1
  161. package/ui/UIRenderer.js +0 -1
  162. package/ui/UIRenderer.js.map +1 -1
  163. package/ui/UIView.js +0 -1
  164. package/ui/UIView.js.map +1 -1
  165. package/ui/elements/AccordionElement.js +2 -28
  166. package/ui/elements/AccordionElement.js.map +1 -1
  167. package/ui/elements/ButtonElement.js +0 -19
  168. package/ui/elements/ButtonElement.js.map +1 -1
  169. package/ui/elements/ButtonGroupElement.js +0 -19
  170. package/ui/elements/ButtonGroupElement.js.map +1 -1
  171. package/ui/elements/GenericElement.js +0 -2
  172. package/ui/elements/GenericElement.js.map +1 -1
  173. package/ui/elements/LabelElement.js +0 -14
  174. package/ui/elements/LabelElement.js.map +1 -1
  175. package/ui/elements/NavigationMenuElement.js +3 -36
  176. package/ui/elements/NavigationMenuElement.js.map +1 -1
  177. package/ui/elements/PanelElement.js +0 -11
  178. package/ui/elements/PanelElement.js.map +1 -1
  179. package/ui/elements/PlaceholderElement.js +0 -11
  180. package/ui/elements/PlaceholderElement.js.map +1 -1
  181. package/ui/elements/SmallButtonElement.js +0 -19
  182. package/ui/elements/SmallButtonElement.js.map +1 -1
  183. package/ui/elements/TypographyElement.js +0 -19
  184. package/ui/elements/TypographyElement.js.map +1 -1
  185. package/ui/elements/ViewElement.js +0 -2
  186. package/ui/elements/ViewElement.js.map +1 -1
  187. package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js +0 -16
  188. package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js.map +1 -1
  189. package/ui/elements/form/DynamicFieldsetElement.js +11 -34
  190. package/ui/elements/form/DynamicFieldsetElement.js.map +1 -1
  191. package/ui/elements/form/FileManagerElement/EmptyStateElement.js +0 -15
  192. package/ui/elements/form/FileManagerElement/EmptyStateElement.js.map +1 -1
  193. package/ui/elements/form/FileManagerElement/EmptyStateElementRenderer.js +5 -27
  194. package/ui/elements/form/FileManagerElement/EmptyStateElementRenderer.js.map +1 -1
  195. package/ui/elements/form/FileManagerElement/FileManagerElementRenderer.js +4 -23
  196. package/ui/elements/form/FileManagerElement/FileManagerElementRenderer.js.map +1 -1
  197. package/ui/elements/form/FileManagerElement/styled.d.ts +23 -16
  198. package/ui/elements/form/FileManagerElement/styled.js +0 -5
  199. package/ui/elements/form/FileManagerElement/styled.js.map +1 -1
  200. package/ui/elements/form/FileManagerElement.js +0 -20
  201. package/ui/elements/form/FileManagerElement.js.map +1 -1
  202. package/ui/elements/form/FormElement.js +0 -21
  203. package/ui/elements/form/FormElement.js.map +1 -1
  204. package/ui/elements/form/FormFieldElement.js +0 -33
  205. package/ui/elements/form/FormFieldElement.js.map +1 -1
  206. package/ui/elements/form/HiddenElement.js +0 -17
  207. package/ui/elements/form/HiddenElement.js.map +1 -1
  208. package/ui/elements/form/InputElement.js +0 -18
  209. package/ui/elements/form/InputElement.js.map +1 -1
  210. package/ui/elements/form/PasswordElement.js +0 -15
  211. package/ui/elements/form/PasswordElement.js.map +1 -1
  212. package/ui/elements/form/SelectElement.js +1 -19
  213. package/ui/elements/form/SelectElement.js.map +1 -1
  214. package/ui/elements/form/TextareaElement.js +0 -17
  215. package/ui/elements/form/TextareaElement.js.map +1 -1
  216. package/ui/views/AdminView/ContentElement.js +1 -25
  217. package/ui/views/AdminView/ContentElement.js.map +1 -1
  218. package/ui/views/AdminView/HeaderElement.js +0 -40
  219. package/ui/views/AdminView/HeaderElement.js.map +1 -1
  220. package/ui/views/AdminView/HeaderSectionCenterElement.js +0 -20
  221. package/ui/views/AdminView/HeaderSectionCenterElement.js.map +1 -1
  222. package/ui/views/AdminView/HeaderSectionLeftElement.js +0 -20
  223. package/ui/views/AdminView/HeaderSectionLeftElement.js.map +1 -1
  224. package/ui/views/AdminView/HeaderSectionRightElement.js +0 -20
  225. package/ui/views/AdminView/HeaderSectionRightElement.js.map +1 -1
  226. package/ui/views/AdminView/components/Dialog.js +10 -21
  227. package/ui/views/AdminView/components/Dialog.js.map +1 -1
  228. package/ui/views/AdminView/components/Hamburger.js +2 -10
  229. package/ui/views/AdminView/components/Hamburger.js.map +1 -1
  230. package/ui/views/AdminView/components/Snackbar.js +0 -9
  231. package/ui/views/AdminView/components/Snackbar.js.map +1 -1
  232. package/ui/views/FormView/FormContainerElement.js +0 -21
  233. package/ui/views/FormView/FormContainerElement.js.map +1 -1
  234. package/ui/views/FormView/FormContentElement.js +0 -11
  235. package/ui/views/FormView/FormContentElement.js.map +1 -1
  236. package/ui/views/FormView/FormFooterElement.js +0 -19
  237. package/ui/views/FormView/FormFooterElement.js.map +1 -1
  238. package/ui/views/FormView/FormHeaderElement.js +2 -24
  239. package/ui/views/FormView/FormHeaderElement.js.map +1 -1
  240. package/ui/views/FormView.js +0 -41
  241. package/ui/views/FormView.js.map +1 -1
  242. package/ui/views/OverlayView/ContentElement.js +0 -19
  243. package/ui/views/OverlayView/ContentElement.js.map +1 -1
  244. package/ui/views/OverlayView/HeaderElement.js +4 -26
  245. package/ui/views/OverlayView/HeaderElement.js.map +1 -1
  246. package/ui/views/OverlayView/HeaderTitleElement.js +0 -22
  247. package/ui/views/OverlayView/HeaderTitleElement.js.map +1 -1
  248. package/ui/views/OverlayView/useOverlayView.js +3 -13
  249. package/ui/views/OverlayView/useOverlayView.js.map +1 -1
  250. package/ui/views/OverlayView.js +4 -38
  251. package/ui/views/OverlayView.js.map +1 -1
  252. package/ui/views/SplitView/SplitViewPanelElement.js +2 -22
  253. package/ui/views/SplitView/SplitViewPanelElement.js.map +1 -1
  254. package/ui/views/SplitView.js +0 -40
  255. package/ui/views/SplitView.js.map +1 -1
@@ -1,24 +1,16 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
9
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
13
-
14
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
-
16
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
-
18
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
-
20
13
  var _utils = require("../utils");
21
-
22
14
  var Paragraph = /*#__PURE__*/function () {
23
15
  // private readonly _settings: any;
24
16
 
@@ -33,9 +25,9 @@ var Paragraph = /*#__PURE__*/function () {
33
25
  */
34
26
  function Paragraph(_ref) {
35
27
  var data = _ref.data,
36
- config = _ref.config,
37
- api = _ref.api,
38
- readOnly = _ref.readOnly;
28
+ config = _ref.config,
29
+ api = _ref.api,
30
+ readOnly = _ref.readOnly;
39
31
  (0, _classCallCheck2.default)(this, Paragraph);
40
32
  (0, _defineProperty2.default)(this, "api", void 0);
41
33
  (0, _defineProperty2.default)(this, "readOnly", void 0);
@@ -56,33 +48,31 @@ var Paragraph = /*#__PURE__*/function () {
56
48
  settingsButtonActive: this.api.styles.settingsButtonActive,
57
49
  wrapper: "ce-paragraph"
58
50
  };
59
-
60
51
  if (!this.readOnly) {
61
52
  this.onKeyUp = this.onKeyUp.bind(this);
62
53
  }
54
+
63
55
  /**
64
56
  * Placeholder for paragraph if it is first Block
65
57
  * @type {string}
66
58
  */
67
-
68
-
69
59
  this._placeholder = config.placeholder ? config.placeholder : Paragraph.DEFAULT_PLACEHOLDER;
70
60
  this._data = this.normalizeData(data);
71
61
  this._element = this.drawView();
72
62
  this._preserveBlank = config.preserveBlank !== undefined ? config.preserveBlank : false;
73
63
  this.settingsButtons = [];
74
- this.alignments = _utils.ALIGNMENTS; // Call the `data` setter, to properly render the view element.
64
+ this.alignments = _utils.ALIGNMENTS;
75
65
 
66
+ // Call the `data` setter, to properly render the view element.
76
67
  this.data = this._data;
77
68
  }
69
+
78
70
  /**
79
71
  * Default placeholder for Paragraph Tool
80
72
  *
81
73
  * @return {string}
82
74
  * @constructor
83
75
  */
84
-
85
-
86
76
  (0, _createClass2.default)(Paragraph, [{
87
77
  key: "data",
88
78
  get:
@@ -92,12 +82,15 @@ var Paragraph = /*#__PURE__*/function () {
92
82
  * @private
93
83
  */
94
84
  function get() {
95
- var text = this._element.innerHTML; // this._data.text = text;
85
+ var text = this._element.innerHTML;
86
+
87
+ // this._data.text = text;
96
88
 
97
89
  return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, this._data), {}, {
98
90
  text: text
99
91
  });
100
92
  }
93
+
101
94
  /**
102
95
  * Store data in plugin:
103
96
  * - at the this._data property
@@ -105,17 +98,15 @@ var Paragraph = /*#__PURE__*/function () {
105
98
  *
106
99
  * @param {ParagraphData} data — data to set
107
100
  * @private
108
- */
109
- ,
101
+ */,
110
102
  set: function set(data) {
111
103
  var _this = this;
112
-
113
104
  this._data = data || {};
114
105
  this._element.innerHTML = this._data.text || "";
106
+
115
107
  /**
116
108
  * Add Alignment class
117
109
  */
118
-
119
110
  this.alignments.forEach(function (alignment) {
120
111
  if (alignment.name === _this._data.textAlign) {
121
112
  _this._element.classList.add("ce-header-text--".concat(alignment.name));
@@ -123,23 +114,22 @@ var Paragraph = /*#__PURE__*/function () {
123
114
  _this._element.classList.remove("ce-header-text--".concat(alignment.name));
124
115
  }
125
116
  });
117
+
126
118
  /**
127
119
  * Add Typography class
128
120
  */
129
-
130
121
  if (this._data.className) {
131
122
  var _this$_element$classL;
132
-
133
123
  (_this$_element$classL = this._element.classList).add.apply(_this$_element$classL, (0, _toConsumableArray2.default)(this._data.className.split(" ")));
134
124
  }
135
125
  }
126
+
136
127
  /**
137
128
  * Used by Editor paste handling API.
138
129
  * Provides configuration to handle P tags.
139
130
  *
140
131
  * @returns {{tags: string[]}}
141
132
  */
142
-
143
133
  }, {
144
134
  key: "currentAlignment",
145
135
  get:
@@ -150,167 +140,156 @@ var Paragraph = /*#__PURE__*/function () {
150
140
  */
151
141
  function get() {
152
142
  var _this2 = this;
153
-
154
143
  var alignment = this.alignments.find(function (alignment) {
155
144
  return alignment.name === _this2._data.textAlign;
156
145
  });
157
-
158
146
  if (!alignment) {
159
147
  alignment = {
160
148
  name: _utils.TextAlign.START,
161
149
  svg: _utils.ALIGNMENT_ICONS.start
162
150
  };
163
151
  }
164
-
165
152
  return alignment;
166
153
  }
154
+
167
155
  /**
168
156
  * Check if text content is empty and set empty string to inner html.
169
157
  * We need this because some browsers (e.g. Safari) insert <br> into empty contentEditable elements
170
158
  *
171
159
  * @param {KeyboardEvent} e - key up event
172
160
  */
173
-
174
161
  }, {
175
162
  key: "onKeyUp",
176
163
  value: function onKeyUp(e) {
177
164
  if (e.code !== "Backspace" && e.code !== "Delete") {
178
165
  return;
179
166
  }
180
-
181
167
  var textContent = this._element.textContent;
182
-
183
168
  if (textContent === "") {
184
169
  this._element.innerHTML = "";
185
170
  }
186
171
  }
172
+
187
173
  /**
188
174
  * Create Tool's view
189
175
  * @return {HTMLElement}
190
176
  * @private
191
177
  */
192
-
193
178
  }, {
194
179
  key: "drawView",
195
180
  value: function drawView() {
196
181
  var div = document.createElement("div");
197
- div.classList.add(this._CSS.wrapper, this._CSS.block); // Add custom className to view.
198
-
182
+ div.classList.add(this._CSS.wrapper, this._CSS.block);
183
+ // Add custom className to view.
199
184
  if (this._data.className) {
200
185
  div.classList.add(this._data.className);
201
186
  }
202
-
203
187
  div.contentEditable = "false";
204
188
  div.dataset["placeholder"] = this.api.i18n.t(this._placeholder);
205
-
206
189
  if (!this.readOnly) {
207
190
  div.contentEditable = "true";
208
191
  div.addEventListener("keyup", this.onKeyUp);
209
192
  }
210
-
211
193
  return div;
212
194
  }
195
+
213
196
  /**
214
197
  * Return Tool's view
215
198
  */
216
-
217
199
  }, {
218
200
  key: "render",
219
201
  value: function render() {
220
202
  return this._element;
221
203
  }
204
+
222
205
  /**
223
206
  * Create Block's settings block
224
207
  */
225
-
226
208
  }, {
227
209
  key: "renderSettings",
228
210
  value: function renderSettings() {
229
211
  var _this3 = this;
212
+ var holder = document.createElement("div");
230
213
 
231
- var holder = document.createElement("div"); // Add alignment selectors
232
-
214
+ // Add alignment selectors
233
215
  this.alignments.forEach(function (alignment) {
234
216
  var selectTypeButton = document.createElement("span");
235
217
  selectTypeButton.classList.add(_this3._CSS.settingsButton);
218
+
236
219
  /**
237
220
  * Highlight current level button
238
221
  */
239
-
240
222
  if (_this3.currentAlignment.name === alignment.name) {
241
223
  selectTypeButton.classList.add(_this3._CSS.settingsButtonActive);
242
224
  }
225
+
243
226
  /**
244
227
  * Add SVG icon
245
228
  */
246
-
247
-
248
229
  selectTypeButton.innerHTML = alignment.svg;
230
+
249
231
  /**
250
232
  * Save alignment to its button
251
233
  */
252
-
253
234
  selectTypeButton.dataset["textAlign"] = alignment.name;
235
+
254
236
  /**
255
237
  * Set up click handler
256
238
  */
257
-
258
239
  selectTypeButton.addEventListener("click", function () {
259
240
  _this3.setAlignment(alignment);
260
241
  });
242
+
261
243
  /**
262
244
  * Append settings button to holder
263
245
  */
264
-
265
246
  holder.appendChild(selectTypeButton);
247
+
266
248
  /**
267
249
  * Save settings buttons
268
250
  */
269
-
270
251
  _this3.settingsButtons.push(selectTypeButton);
271
- }); // Add `Typography` selector
252
+ });
272
253
 
254
+ // Add `Typography` selector
273
255
  if (this.typography) {
274
256
  var typographyForParagraph = Object.values(this.typography).filter(function (item) {
275
257
  return item.component === "p";
276
258
  });
277
- var selectTypeButton = document.createElement("SELECT"); // Add editor's default input style
278
-
279
- selectTypeButton.classList.add(this.api.styles.input); // Add typography options
280
-
259
+ var selectTypeButton = document.createElement("SELECT");
260
+ // Add editor's default input style
261
+ selectTypeButton.classList.add(this.api.styles.input);
262
+ // Add typography options
281
263
  typographyForParagraph.forEach(function (item) {
282
264
  var option = new Option(item.label, item.className);
283
265
  selectTypeButton.appendChild(option);
284
- }); // Add "onclick" handler
285
-
266
+ });
267
+ // Add "onclick" handler
286
268
  selectTypeButton.onclick = function (event) {
287
269
  var _ref2 = event.target,
288
- value = _ref2.value;
289
-
270
+ value = _ref2.value;
290
271
  _this3.setTypographyClass(value);
291
272
  };
273
+
292
274
  /**
293
275
  * Append settings button to holder
294
276
  */
295
-
296
-
297
277
  holder.appendChild(selectTypeButton);
278
+
298
279
  /**
299
280
  * Save settings buttons
300
281
  */
301
-
302
282
  this.settingsButtons.push(selectTypeButton);
303
283
  }
304
-
305
284
  return holder;
306
285
  }
286
+
307
287
  /**
308
288
  * Method that specified how to merge two Text blocks.
309
289
  * Called by Editor.js by backspace at the beginning of the Block
310
290
  * @param {ParagraphData} data
311
291
  * @public
312
292
  */
313
-
314
293
  }, {
315
294
  key: "merge",
316
295
  value: function merge(data) {
@@ -318,6 +297,7 @@ var Paragraph = /*#__PURE__*/function () {
318
297
  text: this.data.text + data.text
319
298
  });
320
299
  }
300
+
321
301
  /**
322
302
  * Validate Paragraph block data:
323
303
  * - check for emptiness
@@ -326,19 +306,18 @@ var Paragraph = /*#__PURE__*/function () {
326
306
  * @returns {boolean} false if saved data is not correct, otherwise true
327
307
  * @public
328
308
  */
329
-
330
309
  }, {
331
310
  key: "validate",
332
311
  value: function validate(savedData) {
333
312
  return !(savedData.text.trim() === "" && !this._preserveBlank);
334
313
  }
314
+
335
315
  /**
336
316
  * Extract Tool's data from the view
337
317
  * @param {HTMLDivElement} toolsContent - Paragraph tools rendered view
338
318
  * @returns {ParagraphData} - saved data
339
319
  * @public
340
320
  */
341
-
342
321
  }, {
343
322
  key: "save",
344
323
  value: function save(toolsContent) {
@@ -348,18 +327,18 @@ var Paragraph = /*#__PURE__*/function () {
348
327
  className: this.data.className
349
328
  };
350
329
  }
330
+
351
331
  /**
352
332
  * Extract textAlign from className
353
333
  *
354
334
  * @param {string} className - heading element className
355
335
  * @returns {TextAlign} textAlign
356
336
  */
357
-
358
337
  }, {
359
338
  key: "getTextAlign",
360
339
  value: function getTextAlign(className) {
361
- var textAlign = _utils.TextAlign.START; // Match className with alignment
362
-
340
+ var textAlign = _utils.TextAlign.START;
341
+ // Match className with alignment
363
342
  this.alignments.forEach(function (alignment) {
364
343
  if (className.includes("ce-header-text--".concat(alignment.name))) {
365
344
  textAlign = alignment.name;
@@ -367,12 +346,12 @@ var Paragraph = /*#__PURE__*/function () {
367
346
  });
368
347
  return textAlign;
369
348
  }
349
+
370
350
  /**
371
351
  * On paste callback fired from Editor.
372
352
  *
373
353
  * @param {PasteEvent} event - event with pasted data
374
354
  */
375
-
376
355
  }, {
377
356
  key: "onPaste",
378
357
  value: function onPaste(event) {
@@ -381,35 +360,34 @@ var Paragraph = /*#__PURE__*/function () {
381
360
  text: detail.data.innerHTML
382
361
  });
383
362
  }
363
+
384
364
  /**
385
365
  * Callback for Block's settings buttons
386
366
  *
387
367
  * @param {number} alignment - level to set
388
368
  */
389
-
390
369
  }, {
391
370
  key: "setAlignment",
392
371
  value: function setAlignment(alignment) {
393
372
  var _this4 = this;
394
-
395
373
  this.data = {
396
374
  textAlign: alignment.name,
397
375
  text: this.data.text
398
376
  };
377
+
399
378
  /**
400
379
  * Highlight button by selected level
401
380
  */
402
-
403
381
  this.settingsButtons.forEach(function (button) {
404
382
  button.classList.toggle(_this4._CSS.settingsButtonActive, button.dataset["textAlign"] === alignment.name);
405
383
  });
406
384
  }
385
+
407
386
  /**
408
387
  * Callback for Block's settings buttons
409
388
  *
410
389
  * @param {string} className - name of typography class
411
390
  */
412
-
413
391
  }, {
414
392
  key: "setTypographyClass",
415
393
  value: function setTypographyClass(className) {
@@ -419,6 +397,7 @@ var Paragraph = /*#__PURE__*/function () {
419
397
  className: className
420
398
  };
421
399
  }
400
+
422
401
  /**
423
402
  * Normalize input data
424
403
  *
@@ -427,16 +406,13 @@ var Paragraph = /*#__PURE__*/function () {
427
406
  * @returns {HeaderData}
428
407
  * @private
429
408
  */
430
-
431
409
  }, {
432
410
  key: "normalizeData",
433
411
  value: function normalizeData(data) {
434
412
  var newData = {};
435
-
436
413
  if (typeof data !== "object") {
437
414
  data = {};
438
415
  }
439
-
440
416
  newData.text = data.text || "";
441
417
  newData.textAlign = data.textAlign || _utils.TextAlign.START;
442
418
  newData.className = data.className || "";
@@ -447,10 +423,10 @@ var Paragraph = /*#__PURE__*/function () {
447
423
  get: function get() {
448
424
  return "";
449
425
  }
426
+
450
427
  /**
451
428
  * Enable Conversion Toolbar. Paragraph can be converted to/from other tools
452
429
  */
453
-
454
430
  }, {
455
431
  key: "conversionConfig",
456
432
  get: function get() {
@@ -458,13 +434,12 @@ var Paragraph = /*#__PURE__*/function () {
458
434
  export: "text",
459
435
  // to convert Paragraph to other block, use 'text' property of saved data
460
436
  import: "text" // to covert other block's exported string to Paragraph, fill 'text' property of tool data
461
-
462
437
  };
463
438
  }
439
+
464
440
  /**
465
441
  * Sanitizer rules
466
442
  */
467
-
468
443
  }, {
469
444
  key: "sanitize",
470
445
  get: function get() {
@@ -474,12 +449,12 @@ var Paragraph = /*#__PURE__*/function () {
474
449
  }
475
450
  };
476
451
  }
452
+
477
453
  /**
478
454
  * Returns true to notify the core that read-only mode is supported
479
455
  *
480
456
  * @return {boolean}
481
457
  */
482
-
483
458
  }, {
484
459
  key: "isReadOnlySupported",
485
460
  get: function get() {
@@ -492,12 +467,12 @@ var Paragraph = /*#__PURE__*/function () {
492
467
  tags: ["P"]
493
468
  };
494
469
  }
470
+
495
471
  /**
496
472
  * Icon and title for displaying at the Toolbox
497
473
  *
498
474
  * @return {{icon: string, title: string}}
499
475
  */
500
-
501
476
  }, {
502
477
  key: "toolbox",
503
478
  get: function get() {
@@ -509,6 +484,5 @@ var Paragraph = /*#__PURE__*/function () {
509
484
  }]);
510
485
  return Paragraph;
511
486
  }();
512
-
513
487
  var _default = Paragraph;
514
488
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["Paragraph","data","config","api","readOnly","typography","_CSS","block","styles","settingsButton","settingsButtonActive","wrapper","onKeyUp","bind","_placeholder","placeholder","DEFAULT_PLACEHOLDER","_data","normalizeData","_element","drawView","_preserveBlank","preserveBlank","undefined","settingsButtons","alignments","ALIGNMENTS","text","innerHTML","forEach","alignment","name","textAlign","classList","add","remove","className","split","find","TextAlign","START","svg","ALIGNMENT_ICONS","start","e","code","textContent","div","document","createElement","contentEditable","dataset","i18n","t","addEventListener","holder","selectTypeButton","currentAlignment","setAlignment","appendChild","push","typographyForParagraph","Object","values","filter","item","component","input","option","Option","label","onclick","event","target","value","setTypographyClass","savedData","trim","toolsContent","getTextAlign","includes","detail","button","toggle","newData","export","import","br","tags","icon","title"],"sources":["index.ts"],"sourcesContent":["import { API, PasteEvent } from \"@editorjs/editorjs\";\nimport { Alignment, ALIGNMENTS, TextAlign, ALIGNMENT_ICONS } from \"../utils\";\nimport { HTMLPasteEventDetail } from \"@editorjs/editorjs/types/tools/paste-events\";\n\n/**\n * @typedef {object} ParagraphConfig\n * @property {string} placeholder - placeholder for the empty paragraph\n * @property {boolean} preserveBlank - Whether or not to keep blank paragraphs when saving editor data`\n */\ninterface ParagraphConfig {\n placeholder: string;\n preserveBlank: boolean;\n typography?: Typography;\n}\n/**\n * @typedef {Object} ParagraphData\n * @description Tool's input and output data format\n * @property {String} text — Paragraph's content. Can include HTML tags: <a><b><i>\n */\ninterface ParagraphData {\n text: string;\n textAlign: TextAlign;\n className?: string;\n}\n\ninterface Typography {\n [key: string]: {\n label: string;\n component: string;\n className: string;\n };\n}\n\ninterface ParagraphArgs {\n data: ParagraphData;\n config: ParagraphConfig;\n api: any;\n readOnly: boolean;\n}\nclass Paragraph {\n private readonly api: API;\n private readonly readOnly: boolean;\n private readonly _CSS: any;\n // private readonly _settings: any;\n private _data: ParagraphData;\n private readonly _element: any;\n private readonly _placeholder: string;\n private readonly _preserveBlank: boolean;\n private readonly alignments: Alignment[];\n private readonly settingsButtons: HTMLElement[];\n private readonly typography: Typography | null;\n\n /**\n * Render plugin`s main Element and fill it with saved data\n *\n * @param {object} params - constructor params\n * @param {ParagraphData} params.data - previously saved data\n * @param {ParagraphConfig} params.config - user config for Tool\n * @param {object} params.api - editor.js api\n * @param {boolean} readOnly - read only mode flag\n */\n public constructor({ data, config, api, readOnly }: ParagraphArgs) {\n this.api = api;\n this.readOnly = readOnly;\n this.typography = config.typography || null;\n this._CSS = {\n block: this.api.styles.block,\n settingsButton: this.api.styles.settingsButton,\n settingsButtonActive: this.api.styles.settingsButtonActive,\n wrapper: \"ce-paragraph\"\n };\n\n if (!this.readOnly) {\n this.onKeyUp = this.onKeyUp.bind(this);\n }\n\n /**\n * Placeholder for paragraph if it is first Block\n * @type {string}\n */\n this._placeholder = config.placeholder ? config.placeholder : Paragraph.DEFAULT_PLACEHOLDER;\n this._data = this.normalizeData(data);\n this._element = this.drawView();\n this._preserveBlank = config.preserveBlank !== undefined ? config.preserveBlank : false;\n this.settingsButtons = [];\n this.alignments = ALIGNMENTS;\n\n // Call the `data` setter, to properly render the view element.\n this.data = this._data;\n }\n\n /**\n * Default placeholder for Paragraph Tool\n *\n * @return {string}\n * @constructor\n */\n public static get DEFAULT_PLACEHOLDER(): string {\n return \"\";\n }\n\n /**\n * Enable Conversion Toolbar. Paragraph can be converted to/from other tools\n */\n public static get conversionConfig() {\n return {\n export: \"text\", // to convert Paragraph to other block, use 'text' property of saved data\n import: \"text\" // to covert other block's exported string to Paragraph, fill 'text' property of tool data\n };\n }\n\n /**\n * Sanitizer rules\n */\n public static get sanitize() {\n return {\n text: {\n br: true\n }\n };\n }\n\n /**\n * Returns true to notify the core that read-only mode is supported\n *\n * @return {boolean}\n */\n public static get isReadOnlySupported(): boolean {\n return true;\n }\n\n /**\n * Get current Tools`s data\n * @returns {ParagraphData} Current data\n * @private\n */\n public get data(): ParagraphData {\n const text = this._element.innerHTML;\n\n // this._data.text = text;\n\n return {\n ...this._data,\n text\n };\n }\n\n /**\n * Store data in plugin:\n * - at the this._data property\n * - at the HTML\n *\n * @param {ParagraphData} data — data to set\n * @private\n */\n public set data(data: ParagraphData) {\n this._data = data || ({} as ParagraphData);\n\n this._element.innerHTML = this._data.text || \"\";\n\n /**\n * Add Alignment class\n */\n this.alignments.forEach(alignment => {\n if (alignment.name === this._data.textAlign) {\n this._element.classList.add(`ce-header-text--${alignment.name}`);\n } else {\n this._element.classList.remove(`ce-header-text--${alignment.name}`);\n }\n });\n\n /**\n * Add Typography class\n */\n if (this._data.className) {\n this._element.classList.add(...this._data.className.split(\" \"));\n }\n }\n\n /**\n * Used by Editor paste handling API.\n * Provides configuration to handle P tags.\n *\n * @returns {{tags: string[]}}\n */\n public static get pasteConfig() {\n return {\n tags: [\"P\"]\n };\n }\n\n /**\n * Icon and title for displaying at the Toolbox\n *\n * @return {{icon: string, title: string}}\n */\n public static get toolbox() {\n return {\n icon:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0.2 -0.3 9 11.4\" width=\"12\" height=\"14\">\\n' +\n ' <path d=\"M0 2.77V.92A1 1 0 01.2.28C.35.1.56 0 .83 0h7.66c.28.01.48.1.63.28.14.17.21.38.21.64v1.85c0 .26-.08.48-.23.66-.15.17-.37.26-.66.26-.28 0-.5-.09-.64-.26a1 1 0 01-.21-.66V1.69H5.6v7.58h.5c.25 0 .45.08.6.23.17.16.25.35.25.6s-.08.45-.24.6a.87.87 0 01-.62.22H3.21a.87.87 0 01-.61-.22.78.78 0 01-.24-.6c0-.25.08-.44.24-.6a.85.85 0 01.61-.23h.5V1.7H1.73v1.08c0 .26-.08.48-.23.66-.15.17-.37.26-.66.26-.28 0-.5-.09-.64-.26A1 1 0 010 2.77z\"/>\\n' +\n \"</svg>\",\n title: \"Text\"\n };\n }\n\n /**\n * Get current alignment\n *\n * @returns {alignment}\n */\n public get currentAlignment(): Alignment {\n let alignment = this.alignments.find(alignment => alignment.name === this._data.textAlign);\n\n if (!alignment) {\n alignment = { name: TextAlign.START, svg: ALIGNMENT_ICONS.start };\n }\n\n return alignment;\n }\n\n /**\n * Check if text content is empty and set empty string to inner html.\n * We need this because some browsers (e.g. Safari) insert <br> into empty contentEditable elements\n *\n * @param {KeyboardEvent} e - key up event\n */\n public onKeyUp(e: KeyboardEvent): void {\n if (e.code !== \"Backspace\" && e.code !== \"Delete\") {\n return;\n }\n\n const { textContent } = this._element;\n\n if (textContent === \"\") {\n this._element.innerHTML = \"\";\n }\n }\n\n /**\n * Create Tool's view\n * @return {HTMLElement}\n * @private\n */\n public drawView(): HTMLElement {\n const div: HTMLDivElement = document.createElement(\"div\");\n div.classList.add(this._CSS.wrapper, this._CSS.block);\n // Add custom className to view.\n if (this._data.className) {\n div.classList.add(this._data.className);\n }\n div.contentEditable = \"false\";\n div.dataset[\"placeholder\"] = this.api.i18n.t(this._placeholder);\n\n if (!this.readOnly) {\n div.contentEditable = \"true\";\n div.addEventListener(\"keyup\", this.onKeyUp);\n }\n\n return div;\n }\n\n /**\n * Return Tool's view\n */\n public render(): HTMLDivElement {\n return this._element;\n }\n\n /**\n * Create Block's settings block\n */\n public renderSettings(): HTMLElement {\n const holder: HTMLDivElement = document.createElement(\"div\");\n\n // Add alignment selectors\n this.alignments.forEach(alignment => {\n const selectTypeButton: HTMLSpanElement = document.createElement(\"span\");\n\n selectTypeButton.classList.add(this._CSS.settingsButton);\n\n /**\n * Highlight current level button\n */\n if (this.currentAlignment.name === alignment.name) {\n selectTypeButton.classList.add(this._CSS.settingsButtonActive);\n }\n\n /**\n * Add SVG icon\n */\n selectTypeButton.innerHTML = alignment.svg;\n\n /**\n * Save alignment to its button\n */\n selectTypeButton.dataset[\"textAlign\"] = alignment.name;\n\n /**\n * Set up click handler\n */\n selectTypeButton.addEventListener(\"click\", () => {\n this.setAlignment(alignment);\n });\n\n /**\n * Append settings button to holder\n */\n holder.appendChild(selectTypeButton);\n\n /**\n * Save settings buttons\n */\n this.settingsButtons.push(selectTypeButton);\n });\n\n // Add `Typography` selector\n if (this.typography) {\n const typographyForParagraph = Object.values(this.typography).filter(\n item => item.component === \"p\"\n );\n\n const selectTypeButton = document.createElement(\"SELECT\") as HTMLSelectElement;\n // Add editor's default input style\n selectTypeButton.classList.add(this.api.styles.input);\n // Add typography options\n typographyForParagraph.forEach(item => {\n const option = new Option(item.label, item.className);\n\n selectTypeButton.appendChild(option);\n });\n // Add \"onclick\" handler\n selectTypeButton.onclick = event => {\n const { value } = event.target as HTMLSelectElement;\n this.setTypographyClass(value);\n };\n\n /**\n * Append settings button to holder\n */\n holder.appendChild(selectTypeButton);\n\n /**\n * Save settings buttons\n */\n this.settingsButtons.push(selectTypeButton);\n }\n\n return holder;\n }\n\n /**\n * Method that specified how to merge two Text blocks.\n * Called by Editor.js by backspace at the beginning of the Block\n * @param {ParagraphData} data\n * @public\n */\n public merge(data: ParagraphData): void {\n this.data = {\n ...this.data,\n text: this.data.text + data.text\n };\n }\n\n /**\n * Validate Paragraph block data:\n * - check for emptiness\n *\n * @param {ParagraphData} savedData — data received after saving\n * @returns {boolean} false if saved data is not correct, otherwise true\n * @public\n */\n public validate(savedData: ParagraphData): boolean {\n return !(savedData.text.trim() === \"\" && !this._preserveBlank);\n }\n\n /**\n * Extract Tool's data from the view\n * @param {HTMLDivElement} toolsContent - Paragraph tools rendered view\n * @returns {ParagraphData} - saved data\n * @public\n */\n public save(toolsContent: HTMLElement) {\n return {\n text: toolsContent.innerHTML,\n textAlign: this.getTextAlign(toolsContent.className),\n className: this.data.className\n };\n }\n\n /**\n * Extract textAlign from className\n *\n * @param {string} className - heading element className\n * @returns {TextAlign} textAlign\n */\n public getTextAlign(className: string): TextAlign {\n let textAlign = TextAlign.START;\n // Match className with alignment\n this.alignments.forEach(alignment => {\n if (className.includes(`ce-header-text--${alignment.name}`)) {\n textAlign = alignment.name;\n }\n });\n return textAlign;\n }\n\n /**\n * On paste callback fired from Editor.\n *\n * @param {PasteEvent} event - event with pasted data\n */\n public onPaste(event: PasteEvent): void {\n const detail = event.detail as HTMLPasteEventDetail;\n this.data = {\n ...this.data,\n text: detail.data.innerHTML\n };\n }\n\n /**\n * Callback for Block's settings buttons\n *\n * @param {number} alignment - level to set\n */\n public setAlignment(alignment: Alignment): void {\n this.data = {\n textAlign: alignment.name,\n text: this.data.text\n };\n\n /**\n * Highlight button by selected level\n */\n this.settingsButtons.forEach(button => {\n button.classList.toggle(\n this._CSS.settingsButtonActive,\n button.dataset[\"textAlign\"] === alignment.name\n );\n });\n }\n\n /**\n * Callback for Block's settings buttons\n *\n * @param {string} className - name of typography class\n */\n public setTypographyClass(className: string): void {\n this.data = {\n textAlign: this.data.textAlign,\n text: this.data.text,\n className: className\n };\n }\n\n /**\n * Normalize input data\n *\n * @param {HeaderData} data - saved data to process\n *\n * @returns {HeaderData}\n * @private\n */\n public normalizeData(data?: Partial<ParagraphData>): ParagraphData {\n const newData: Partial<ParagraphData> = {};\n\n if (typeof data !== \"object\") {\n data = {};\n }\n\n newData.text = data.text || \"\";\n newData.textAlign = data.textAlign || TextAlign.START;\n newData.className = data.className || \"\";\n\n return newData as ParagraphData;\n }\n}\n\nexport default Paragraph;\n"],"mappings":"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"}
1
+ {"version":3,"names":["Paragraph","data","config","api","readOnly","typography","_CSS","block","styles","settingsButton","settingsButtonActive","wrapper","onKeyUp","bind","_placeholder","placeholder","DEFAULT_PLACEHOLDER","_data","normalizeData","_element","drawView","_preserveBlank","preserveBlank","undefined","settingsButtons","alignments","ALIGNMENTS","text","innerHTML","forEach","alignment","name","textAlign","classList","add","remove","className","split","find","TextAlign","START","svg","ALIGNMENT_ICONS","start","e","code","textContent","div","document","createElement","contentEditable","dataset","i18n","t","addEventListener","holder","selectTypeButton","currentAlignment","setAlignment","appendChild","push","typographyForParagraph","Object","values","filter","item","component","input","option","Option","label","onclick","event","target","value","setTypographyClass","savedData","trim","toolsContent","getTextAlign","includes","detail","button","toggle","newData","export","import","br","tags","icon","title"],"sources":["index.ts"],"sourcesContent":["import { API, PasteEvent } from \"@editorjs/editorjs\";\nimport { Alignment, ALIGNMENTS, TextAlign, ALIGNMENT_ICONS } from \"../utils\";\nimport { HTMLPasteEventDetail } from \"@editorjs/editorjs/types/tools/paste-events\";\n\n/**\n * @typedef {object} ParagraphConfig\n * @property {string} placeholder - placeholder for the empty paragraph\n * @property {boolean} preserveBlank - Whether or not to keep blank paragraphs when saving editor data`\n */\ninterface ParagraphConfig {\n placeholder: string;\n preserveBlank: boolean;\n typography?: Typography;\n}\n/**\n * @typedef {Object} ParagraphData\n * @description Tool's input and output data format\n * @property {String} text — Paragraph's content. Can include HTML tags: <a><b><i>\n */\ninterface ParagraphData {\n text: string;\n textAlign: TextAlign;\n className?: string;\n}\n\ninterface Typography {\n [key: string]: {\n label: string;\n component: string;\n className: string;\n };\n}\n\ninterface ParagraphArgs {\n data: ParagraphData;\n config: ParagraphConfig;\n api: any;\n readOnly: boolean;\n}\nclass Paragraph {\n private readonly api: API;\n private readonly readOnly: boolean;\n private readonly _CSS: any;\n // private readonly _settings: any;\n private _data: ParagraphData;\n private readonly _element: any;\n private readonly _placeholder: string;\n private readonly _preserveBlank: boolean;\n private readonly alignments: Alignment[];\n private readonly settingsButtons: HTMLElement[];\n private readonly typography: Typography | null;\n\n /**\n * Render plugin`s main Element and fill it with saved data\n *\n * @param {object} params - constructor params\n * @param {ParagraphData} params.data - previously saved data\n * @param {ParagraphConfig} params.config - user config for Tool\n * @param {object} params.api - editor.js api\n * @param {boolean} readOnly - read only mode flag\n */\n public constructor({ data, config, api, readOnly }: ParagraphArgs) {\n this.api = api;\n this.readOnly = readOnly;\n this.typography = config.typography || null;\n this._CSS = {\n block: this.api.styles.block,\n settingsButton: this.api.styles.settingsButton,\n settingsButtonActive: this.api.styles.settingsButtonActive,\n wrapper: \"ce-paragraph\"\n };\n\n if (!this.readOnly) {\n this.onKeyUp = this.onKeyUp.bind(this);\n }\n\n /**\n * Placeholder for paragraph if it is first Block\n * @type {string}\n */\n this._placeholder = config.placeholder ? config.placeholder : Paragraph.DEFAULT_PLACEHOLDER;\n this._data = this.normalizeData(data);\n this._element = this.drawView();\n this._preserveBlank = config.preserveBlank !== undefined ? config.preserveBlank : false;\n this.settingsButtons = [];\n this.alignments = ALIGNMENTS;\n\n // Call the `data` setter, to properly render the view element.\n this.data = this._data;\n }\n\n /**\n * Default placeholder for Paragraph Tool\n *\n * @return {string}\n * @constructor\n */\n public static get DEFAULT_PLACEHOLDER(): string {\n return \"\";\n }\n\n /**\n * Enable Conversion Toolbar. Paragraph can be converted to/from other tools\n */\n public static get conversionConfig() {\n return {\n export: \"text\", // to convert Paragraph to other block, use 'text' property of saved data\n import: \"text\" // to covert other block's exported string to Paragraph, fill 'text' property of tool data\n };\n }\n\n /**\n * Sanitizer rules\n */\n public static get sanitize() {\n return {\n text: {\n br: true\n }\n };\n }\n\n /**\n * Returns true to notify the core that read-only mode is supported\n *\n * @return {boolean}\n */\n public static get isReadOnlySupported(): boolean {\n return true;\n }\n\n /**\n * Get current Tools`s data\n * @returns {ParagraphData} Current data\n * @private\n */\n public get data(): ParagraphData {\n const text = this._element.innerHTML;\n\n // this._data.text = text;\n\n return {\n ...this._data,\n text\n };\n }\n\n /**\n * Store data in plugin:\n * - at the this._data property\n * - at the HTML\n *\n * @param {ParagraphData} data — data to set\n * @private\n */\n public set data(data: ParagraphData) {\n this._data = data || ({} as ParagraphData);\n\n this._element.innerHTML = this._data.text || \"\";\n\n /**\n * Add Alignment class\n */\n this.alignments.forEach(alignment => {\n if (alignment.name === this._data.textAlign) {\n this._element.classList.add(`ce-header-text--${alignment.name}`);\n } else {\n this._element.classList.remove(`ce-header-text--${alignment.name}`);\n }\n });\n\n /**\n * Add Typography class\n */\n if (this._data.className) {\n this._element.classList.add(...this._data.className.split(\" \"));\n }\n }\n\n /**\n * Used by Editor paste handling API.\n * Provides configuration to handle P tags.\n *\n * @returns {{tags: string[]}}\n */\n public static get pasteConfig() {\n return {\n tags: [\"P\"]\n };\n }\n\n /**\n * Icon and title for displaying at the Toolbox\n *\n * @return {{icon: string, title: string}}\n */\n public static get toolbox() {\n return {\n icon:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0.2 -0.3 9 11.4\" width=\"12\" height=\"14\">\\n' +\n ' <path d=\"M0 2.77V.92A1 1 0 01.2.28C.35.1.56 0 .83 0h7.66c.28.01.48.1.63.28.14.17.21.38.21.64v1.85c0 .26-.08.48-.23.66-.15.17-.37.26-.66.26-.28 0-.5-.09-.64-.26a1 1 0 01-.21-.66V1.69H5.6v7.58h.5c.25 0 .45.08.6.23.17.16.25.35.25.6s-.08.45-.24.6a.87.87 0 01-.62.22H3.21a.87.87 0 01-.61-.22.78.78 0 01-.24-.6c0-.25.08-.44.24-.6a.85.85 0 01.61-.23h.5V1.7H1.73v1.08c0 .26-.08.48-.23.66-.15.17-.37.26-.66.26-.28 0-.5-.09-.64-.26A1 1 0 010 2.77z\"/>\\n' +\n \"</svg>\",\n title: \"Text\"\n };\n }\n\n /**\n * Get current alignment\n *\n * @returns {alignment}\n */\n public get currentAlignment(): Alignment {\n let alignment = this.alignments.find(alignment => alignment.name === this._data.textAlign);\n\n if (!alignment) {\n alignment = { name: TextAlign.START, svg: ALIGNMENT_ICONS.start };\n }\n\n return alignment;\n }\n\n /**\n * Check if text content is empty and set empty string to inner html.\n * We need this because some browsers (e.g. Safari) insert <br> into empty contentEditable elements\n *\n * @param {KeyboardEvent} e - key up event\n */\n public onKeyUp(e: KeyboardEvent): void {\n if (e.code !== \"Backspace\" && e.code !== \"Delete\") {\n return;\n }\n\n const { textContent } = this._element;\n\n if (textContent === \"\") {\n this._element.innerHTML = \"\";\n }\n }\n\n /**\n * Create Tool's view\n * @return {HTMLElement}\n * @private\n */\n public drawView(): HTMLElement {\n const div: HTMLDivElement = document.createElement(\"div\");\n div.classList.add(this._CSS.wrapper, this._CSS.block);\n // Add custom className to view.\n if (this._data.className) {\n div.classList.add(this._data.className);\n }\n div.contentEditable = \"false\";\n div.dataset[\"placeholder\"] = this.api.i18n.t(this._placeholder);\n\n if (!this.readOnly) {\n div.contentEditable = \"true\";\n div.addEventListener(\"keyup\", this.onKeyUp);\n }\n\n return div;\n }\n\n /**\n * Return Tool's view\n */\n public render(): HTMLDivElement {\n return this._element;\n }\n\n /**\n * Create Block's settings block\n */\n public renderSettings(): HTMLElement {\n const holder: HTMLDivElement = document.createElement(\"div\");\n\n // Add alignment selectors\n this.alignments.forEach(alignment => {\n const selectTypeButton: HTMLSpanElement = document.createElement(\"span\");\n\n selectTypeButton.classList.add(this._CSS.settingsButton);\n\n /**\n * Highlight current level button\n */\n if (this.currentAlignment.name === alignment.name) {\n selectTypeButton.classList.add(this._CSS.settingsButtonActive);\n }\n\n /**\n * Add SVG icon\n */\n selectTypeButton.innerHTML = alignment.svg;\n\n /**\n * Save alignment to its button\n */\n selectTypeButton.dataset[\"textAlign\"] = alignment.name;\n\n /**\n * Set up click handler\n */\n selectTypeButton.addEventListener(\"click\", () => {\n this.setAlignment(alignment);\n });\n\n /**\n * Append settings button to holder\n */\n holder.appendChild(selectTypeButton);\n\n /**\n * Save settings buttons\n */\n this.settingsButtons.push(selectTypeButton);\n });\n\n // Add `Typography` selector\n if (this.typography) {\n const typographyForParagraph = Object.values(this.typography).filter(\n item => item.component === \"p\"\n );\n\n const selectTypeButton = document.createElement(\"SELECT\") as HTMLSelectElement;\n // Add editor's default input style\n selectTypeButton.classList.add(this.api.styles.input);\n // Add typography options\n typographyForParagraph.forEach(item => {\n const option = new Option(item.label, item.className);\n\n selectTypeButton.appendChild(option);\n });\n // Add \"onclick\" handler\n selectTypeButton.onclick = event => {\n const { value } = event.target as HTMLSelectElement;\n this.setTypographyClass(value);\n };\n\n /**\n * Append settings button to holder\n */\n holder.appendChild(selectTypeButton);\n\n /**\n * Save settings buttons\n */\n this.settingsButtons.push(selectTypeButton);\n }\n\n return holder;\n }\n\n /**\n * Method that specified how to merge two Text blocks.\n * Called by Editor.js by backspace at the beginning of the Block\n * @param {ParagraphData} data\n * @public\n */\n public merge(data: ParagraphData): void {\n this.data = {\n ...this.data,\n text: this.data.text + data.text\n };\n }\n\n /**\n * Validate Paragraph block data:\n * - check for emptiness\n *\n * @param {ParagraphData} savedData — data received after saving\n * @returns {boolean} false if saved data is not correct, otherwise true\n * @public\n */\n public validate(savedData: ParagraphData): boolean {\n return !(savedData.text.trim() === \"\" && !this._preserveBlank);\n }\n\n /**\n * Extract Tool's data from the view\n * @param {HTMLDivElement} toolsContent - Paragraph tools rendered view\n * @returns {ParagraphData} - saved data\n * @public\n */\n public save(toolsContent: HTMLElement) {\n return {\n text: toolsContent.innerHTML,\n textAlign: this.getTextAlign(toolsContent.className),\n className: this.data.className\n };\n }\n\n /**\n * Extract textAlign from className\n *\n * @param {string} className - heading element className\n * @returns {TextAlign} textAlign\n */\n public getTextAlign(className: string): TextAlign {\n let textAlign = TextAlign.START;\n // Match className with alignment\n this.alignments.forEach(alignment => {\n if (className.includes(`ce-header-text--${alignment.name}`)) {\n textAlign = alignment.name;\n }\n });\n return textAlign;\n }\n\n /**\n * On paste callback fired from Editor.\n *\n * @param {PasteEvent} event - event with pasted data\n */\n public onPaste(event: PasteEvent): void {\n const detail = event.detail as HTMLPasteEventDetail;\n this.data = {\n ...this.data,\n text: detail.data.innerHTML\n };\n }\n\n /**\n * Callback for Block's settings buttons\n *\n * @param {number} alignment - level to set\n */\n public setAlignment(alignment: Alignment): void {\n this.data = {\n textAlign: alignment.name,\n text: this.data.text\n };\n\n /**\n * Highlight button by selected level\n */\n this.settingsButtons.forEach(button => {\n button.classList.toggle(\n this._CSS.settingsButtonActive,\n button.dataset[\"textAlign\"] === alignment.name\n );\n });\n }\n\n /**\n * Callback for Block's settings buttons\n *\n * @param {string} className - name of typography class\n */\n public setTypographyClass(className: string): void {\n this.data = {\n textAlign: this.data.textAlign,\n text: this.data.text,\n className: className\n };\n }\n\n /**\n * Normalize input data\n *\n * @param {HeaderData} data - saved data to process\n *\n * @returns {HeaderData}\n * @private\n */\n public normalizeData(data?: Partial<ParagraphData>): ParagraphData {\n const newData: Partial<ParagraphData> = {};\n\n if (typeof data !== \"object\") {\n data = {};\n }\n\n newData.text = data.text || \"\";\n newData.textAlign = data.textAlign || TextAlign.START;\n newData.className = data.className || \"\";\n\n return newData as ParagraphData;\n }\n}\n\nexport default Paragraph;\n"],"mappings":"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"}