@webiny/app-admin 5.23.1 → 5.25.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 (306) hide show
  1. package/base/Admin.d.ts +3 -10
  2. package/base/Admin.js +4 -0
  3. package/base/Admin.js.map +1 -0
  4. package/base/Base.d.ts +1 -1
  5. package/base/Base.js.map +1 -0
  6. package/base/plugins/AddGraphQLQuerySelection.d.ts +2 -2
  7. package/base/plugins/AddGraphQLQuerySelection.js +3 -2
  8. package/base/plugins/AddGraphQLQuerySelection.js.map +1 -0
  9. package/base/providers/ApolloProvider.d.ts +9 -3
  10. package/base/providers/ApolloProvider.js +2 -1
  11. package/base/providers/ApolloProvider.js.map +1 -0
  12. package/base/providers/TelemetryProvider.d.ts +2 -4
  13. package/base/providers/TelemetryProvider.js +5 -0
  14. package/base/providers/TelemetryProvider.js.map +1 -0
  15. package/base/providers/UiStateProvider.d.ts +1 -3
  16. package/base/providers/UiStateProvider.js.map +1 -0
  17. package/base/providers/ViewCompositionProvider.d.ts +4 -5
  18. package/base/providers/ViewCompositionProvider.js +8 -1
  19. package/base/providers/ViewCompositionProvider.js.map +1 -0
  20. package/base/ui/Brand.d.ts +2 -9
  21. package/base/ui/Brand.js.map +1 -0
  22. package/base/ui/CenteredView.d.ts +1 -5
  23. package/base/ui/CenteredView.js.map +1 -0
  24. package/base/ui/Dashboard.d.ts +2 -9
  25. package/base/ui/Dashboard.js.map +1 -0
  26. package/base/ui/Layout.d.ts +2 -8
  27. package/base/ui/Layout.js.map +1 -0
  28. package/base/ui/LocaleSelector.d.ts +2 -9
  29. package/base/ui/LocaleSelector.js.map +1 -0
  30. package/base/ui/LoginScreen.d.ts +2 -5
  31. package/base/ui/LoginScreen.js.map +1 -0
  32. package/base/ui/Logo.d.ts +3 -9
  33. package/base/ui/Logo.js.map +1 -0
  34. package/base/ui/Menu.d.ts +8 -12
  35. package/base/ui/Menu.js +96 -30
  36. package/base/ui/Menu.js.map +1 -0
  37. package/base/ui/Navigation.d.ts +9 -20
  38. package/base/ui/Navigation.js +29 -29
  39. package/base/ui/Navigation.js.map +1 -0
  40. package/base/ui/NotFound.d.ts +2 -9
  41. package/base/ui/NotFound.js.map +1 -0
  42. package/base/ui/Search.d.ts +4 -13
  43. package/base/ui/Search.js +6 -1
  44. package/base/ui/Search.js.map +1 -0
  45. package/base/ui/Tags.d.ts +4 -2
  46. package/base/ui/Tags.js.map +1 -0
  47. package/base/ui/UserMenu.d.ts +9 -33
  48. package/base/ui/UserMenu.js +15 -2
  49. package/base/ui/UserMenu.js.map +1 -0
  50. package/components/AdminLayout.d.ts +1 -2
  51. package/components/AdminLayout.js.map +1 -0
  52. package/components/AppInstaller/AppInstaller.d.ts +2 -4
  53. package/components/AppInstaller/AppInstaller.js.map +1 -0
  54. package/components/AppInstaller/Sidebar.d.ts +8 -6
  55. package/components/AppInstaller/Sidebar.js +11 -10
  56. package/components/AppInstaller/Sidebar.js.map +1 -0
  57. package/components/AppInstaller/index.js.map +1 -0
  58. package/components/AppInstaller/styled.d.ts +4 -4
  59. package/components/AppInstaller/styled.js.map +1 -0
  60. package/components/AppInstaller/useInstaller.d.ts +28 -9
  61. package/components/AppInstaller/useInstaller.js +44 -36
  62. package/components/AppInstaller/useInstaller.js.map +1 -0
  63. package/components/EmptyView.d.ts +5 -5
  64. package/components/EmptyView.js.map +1 -0
  65. package/components/FileManager/BottomInfoBar/SupportedFileTypes.d.ts +5 -4
  66. package/components/FileManager/BottomInfoBar/SupportedFileTypes.js +7 -1
  67. package/components/FileManager/BottomInfoBar/SupportedFileTypes.js.map +1 -0
  68. package/components/FileManager/BottomInfoBar/UploadStatus.d.ts +5 -4
  69. package/components/FileManager/BottomInfoBar/UploadStatus.js.map +1 -0
  70. package/components/FileManager/BottomInfoBar.d.ts +4 -2
  71. package/components/FileManager/BottomInfoBar.js.map +1 -0
  72. package/components/FileManager/DropFilesHere.d.ts +4 -3
  73. package/components/FileManager/DropFilesHere.js +5 -2
  74. package/components/FileManager/DropFilesHere.js.map +1 -0
  75. package/components/FileManager/File.d.ts +7 -8
  76. package/components/FileManager/File.js +11 -5
  77. package/components/FileManager/File.js.map +1 -0
  78. package/components/FileManager/FileDetails/Name.d.ts +7 -5
  79. package/components/FileManager/FileDetails/Name.js +10 -7
  80. package/components/FileManager/FileDetails/Name.js.map +1 -0
  81. package/components/FileManager/FileDetails/Tags.d.ts +7 -5
  82. package/components/FileManager/FileDetails/Tags.js +22 -9
  83. package/components/FileManager/FileDetails/Tags.js.map +1 -0
  84. package/components/FileManager/FileDetails.d.ts +9 -8
  85. package/components/FileManager/FileDetails.js +80 -41
  86. package/components/FileManager/FileDetails.js.map +1 -0
  87. package/components/FileManager/FileManagerContext.d.ts +12 -9
  88. package/components/FileManager/FileManagerContext.js +14 -7
  89. package/components/FileManager/FileManagerContext.js.map +1 -0
  90. package/components/FileManager/FileManagerView.d.ts +3 -11
  91. package/components/FileManager/FileManagerView.js +79 -51
  92. package/components/FileManager/FileManagerView.js.map +1 -0
  93. package/components/FileManager/LeftSidebar.d.ts +6 -5
  94. package/components/FileManager/LeftSidebar.js +6 -5
  95. package/components/FileManager/LeftSidebar.js.map +1 -0
  96. package/components/FileManager/NoPermissionView.d.ts +2 -2
  97. package/components/FileManager/NoPermissionView.js.map +1 -0
  98. package/components/FileManager/NoResults.d.ts +3 -2
  99. package/components/FileManager/NoResults.js +5 -2
  100. package/components/FileManager/NoResults.js.map +1 -0
  101. package/components/FileManager/getFileTypePlugin.d.ts +4 -1
  102. package/components/FileManager/getFileTypePlugin.js +9 -0
  103. package/components/FileManager/getFileTypePlugin.js.map +1 -0
  104. package/components/FileManager/getFileUploader.d.ts +2 -1
  105. package/components/FileManager/getFileUploader.js.map +1 -0
  106. package/components/FileManager/graphql.d.ts +90 -0
  107. package/components/FileManager/graphql.js +25 -0
  108. package/components/FileManager/graphql.js.map +1 -0
  109. package/components/FileManager/outputFileSelectionError.d.ts +6 -1
  110. package/components/FileManager/outputFileSelectionError.js +3 -2
  111. package/components/FileManager/outputFileSelectionError.js.map +1 -0
  112. package/components/FileManager/types.d.ts +19 -0
  113. package/components/FileManager/types.js +1 -0
  114. package/components/FileManager/types.js.map +1 -0
  115. package/components/FileManager.d.ts +15 -10
  116. package/components/FileManager.js +27 -16
  117. package/components/FileManager.js.map +1 -0
  118. package/components/FloatingActionButton.d.ts +2 -2
  119. package/components/FloatingActionButton.js.map +1 -0
  120. package/components/MultiImageUpload.d.ts +13 -4
  121. package/components/MultiImageUpload.js +15 -4
  122. package/components/MultiImageUpload.js.map +1 -0
  123. package/components/OverlayLayout/OverlayLayout.d.ts +10 -13
  124. package/components/OverlayLayout/OverlayLayout.js.map +1 -0
  125. package/components/OverlayLayout/index.js.map +1 -0
  126. package/components/Permissions/Permissions.d.ts +4 -4
  127. package/components/Permissions/Permissions.js.map +1 -0
  128. package/components/Permissions/StyledComponents.d.ts +6 -4
  129. package/components/Permissions/StyledComponents.js.map +1 -0
  130. package/components/Permissions/index.js.map +1 -0
  131. package/components/RichTextEditor/RichTextEditor.d.ts +2 -2
  132. package/components/RichTextEditor/RichTextEditor.js.map +1 -0
  133. package/components/RichTextEditor/index.js.map +1 -0
  134. package/components/RichTextEditor/tools/header/index.d.ts +33 -34
  135. package/components/RichTextEditor/tools/header/index.js +5 -6
  136. package/components/RichTextEditor/tools/header/index.js.map +1 -0
  137. package/components/RichTextEditor/tools/image/index.d.ts +38 -13
  138. package/components/RichTextEditor/tools/image/index.js +4 -2
  139. package/components/RichTextEditor/tools/image/index.js.map +1 -0
  140. package/components/RichTextEditor/tools/image/svgs.js.map +1 -0
  141. package/components/RichTextEditor/tools/image/tunes.d.ts +12 -15
  142. package/components/RichTextEditor/tools/image/tunes.js +9 -4
  143. package/components/RichTextEditor/tools/image/tunes.js.map +1 -0
  144. package/components/RichTextEditor/tools/image/types.d.ts +29 -0
  145. package/components/RichTextEditor/tools/image/types.js +1 -0
  146. package/components/RichTextEditor/tools/image/types.js.map +1 -0
  147. package/components/RichTextEditor/tools/image/ui.d.ts +36 -27
  148. package/components/RichTextEditor/tools/image/ui.js +25 -12
  149. package/components/RichTextEditor/tools/image/ui.js.map +1 -0
  150. package/components/RichTextEditor/tools/paragraph/index.d.ts +32 -36
  151. package/components/RichTextEditor/tools/paragraph/index.js +17 -25
  152. package/components/RichTextEditor/tools/paragraph/index.js.map +1 -0
  153. package/components/RichTextEditor/tools/textColor/index.d.ts +30 -22
  154. package/components/RichTextEditor/tools/textColor/index.js +46 -10
  155. package/components/RichTextEditor/tools/textColor/index.js.map +1 -0
  156. package/components/RichTextEditor/tools/utils.js.map +1 -0
  157. package/components/Routes.d.ts +2 -2
  158. package/components/Routes.js.map +1 -0
  159. package/components/SearchUI.d.ts +4 -4
  160. package/components/SearchUI.js.map +1 -0
  161. package/components/SimpleForm/SimpleForm.d.ts +10 -11
  162. package/components/SimpleForm/SimpleForm.js.map +1 -0
  163. package/components/SimpleForm/index.js.map +1 -0
  164. package/components/SimpleUI/InputField.d.ts +4 -3
  165. package/components/SimpleUI/InputField.js +22 -20
  166. package/components/SimpleUI/InputField.js.map +1 -0
  167. package/components/SingleImageUpload.d.ts +3 -9
  168. package/components/SingleImageUpload.js +9 -11
  169. package/components/SingleImageUpload.js.map +1 -0
  170. package/components/SplitView/SplitView.d.ts +5 -5
  171. package/components/SplitView/SplitView.js.map +1 -0
  172. package/components/SplitView/index.js.map +1 -0
  173. package/components/index.js.map +1 -0
  174. package/hooks/useConfirmationDialog.d.ts +6 -5
  175. package/hooks/useConfirmationDialog.js +1 -2
  176. package/hooks/useConfirmationDialog.js.map +1 -0
  177. package/hooks/useDialog.d.ts +8 -3
  178. package/hooks/useDialog.js +1 -1
  179. package/hooks/useDialog.js.map +1 -0
  180. package/hooks/useSnackbar.d.ts +6 -3
  181. package/hooks/useSnackbar.js.map +1 -0
  182. package/index.js.map +1 -0
  183. package/package.json +24 -20
  184. package/plugins/FileManagerFileTypePlugin.d.ts +3 -3
  185. package/plugins/FileManagerFileTypePlugin.js +4 -0
  186. package/plugins/FileManagerFileTypePlugin.js.map +1 -0
  187. package/plugins/MenuPlugin.d.ts +6 -6
  188. package/plugins/MenuPlugin.js +4 -0
  189. package/plugins/MenuPlugin.js.map +1 -0
  190. package/plugins/PermissionRendererPlugin.d.ts +4 -4
  191. package/plugins/PermissionRendererPlugin.js +4 -0
  192. package/plugins/PermissionRendererPlugin.js.map +1 -0
  193. package/plugins/fileManager/fileDefault.js.map +1 -0
  194. package/plugins/fileManager/fileImage/DeleteAction.d.ts +6 -2
  195. package/plugins/fileManager/fileImage/DeleteAction.js.map +1 -0
  196. package/plugins/fileManager/fileImage/EditAction.d.ts +7 -6
  197. package/plugins/fileManager/fileImage/EditAction.js +24 -11
  198. package/plugins/fileManager/fileImage/EditAction.js.map +1 -0
  199. package/plugins/fileManager/fileImage/index.js.map +1 -0
  200. package/plugins/fileManager/index.js.map +1 -0
  201. package/plugins/globalSearch/SearchBar.d.ts +14 -5
  202. package/plugins/globalSearch/SearchBar.js +9 -0
  203. package/plugins/globalSearch/SearchBar.js.map +1 -0
  204. package/plugins/globalSearch/SearchBarDropdown.d.ts +19 -1
  205. package/plugins/globalSearch/SearchBarDropdown.js.map +1 -0
  206. package/plugins/globalSearch/index.d.ts +2 -1
  207. package/plugins/globalSearch/index.js.map +1 -0
  208. package/plugins/globalSearch/styled.d.ts +3 -3
  209. package/plugins/globalSearch/styled.js.map +1 -0
  210. package/plugins/index.d.ts +2 -1
  211. package/plugins/index.js.map +1 -0
  212. package/plugins/uiLayoutRenderer/index.js.map +1 -0
  213. package/types.d.ts +10 -8
  214. package/types.js.map +1 -0
  215. package/ui/UIElement.d.ts +1 -1
  216. package/ui/UIElement.js.map +1 -0
  217. package/ui/UILayout.js.map +1 -0
  218. package/ui/UIRenderer.js.map +1 -0
  219. package/ui/UIView.d.ts +1 -1
  220. package/ui/UIView.js.map +1 -0
  221. package/ui/elements/AccordionElement.d.ts +5 -5
  222. package/ui/elements/AccordionElement.js +4 -0
  223. package/ui/elements/AccordionElement.js.map +1 -0
  224. package/ui/elements/ButtonElement.d.ts +3 -3
  225. package/ui/elements/ButtonElement.js +7 -0
  226. package/ui/elements/ButtonElement.js.map +1 -0
  227. package/ui/elements/ButtonGroupElement.d.ts +2 -2
  228. package/ui/elements/ButtonGroupElement.js.map +1 -0
  229. package/ui/elements/GenericElement.js.map +1 -0
  230. package/ui/elements/LabelElement.js.map +1 -0
  231. package/ui/elements/NavigationMenuElement.d.ts +2 -1
  232. package/ui/elements/NavigationMenuElement.js +3 -2
  233. package/ui/elements/NavigationMenuElement.js.map +1 -0
  234. package/ui/elements/PanelElement.js.map +1 -0
  235. package/ui/elements/PlaceholderElement.d.ts +2 -1
  236. package/ui/elements/PlaceholderElement.js.map +1 -0
  237. package/ui/elements/SmallButtonElement.d.ts +1 -1
  238. package/ui/elements/SmallButtonElement.js.map +1 -0
  239. package/ui/elements/TypographyElement.d.ts +1 -1
  240. package/ui/elements/TypographyElement.js.map +1 -0
  241. package/ui/elements/ViewElement.js.map +1 -0
  242. package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.d.ts +2 -2
  243. package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js +10 -10
  244. package/ui/elements/form/DynamicFieldsetElement/DynamicFieldsetRowElement.js.map +1 -0
  245. package/ui/elements/form/DynamicFieldsetElement.d.ts +19 -18
  246. package/ui/elements/form/DynamicFieldsetElement.js +13 -0
  247. package/ui/elements/form/DynamicFieldsetElement.js.map +1 -0
  248. package/ui/elements/form/FileManagerElement/EmptyStateElement.js.map +1 -0
  249. package/ui/elements/form/FileManagerElement/EmptyStateElementRenderer.js.map +1 -0
  250. package/ui/elements/form/FileManagerElement/FileManagerElementRenderer.js.map +1 -0
  251. package/ui/elements/form/FileManagerElement/styled.d.ts +17 -13
  252. package/ui/elements/form/FileManagerElement/styled.js.map +1 -0
  253. package/ui/elements/form/FileManagerElement.d.ts +6 -6
  254. package/ui/elements/form/FileManagerElement.js.map +1 -0
  255. package/ui/elements/form/FormElement.d.ts +5 -5
  256. package/ui/elements/form/FormElement.js.map +1 -0
  257. package/ui/elements/form/FormFieldElement.d.ts +9 -8
  258. package/ui/elements/form/FormFieldElement.js +15 -7
  259. package/ui/elements/form/FormFieldElement.js.map +1 -0
  260. package/ui/elements/form/HiddenElement.js.map +1 -0
  261. package/ui/elements/form/InputElement.d.ts +1 -0
  262. package/ui/elements/form/InputElement.js.map +1 -0
  263. package/ui/elements/form/PasswordElement.js.map +1 -0
  264. package/ui/elements/form/SelectElement.d.ts +1 -1
  265. package/ui/elements/form/SelectElement.js +1 -1
  266. package/ui/elements/form/SelectElement.js.map +1 -0
  267. package/ui/elements/form/TextareaElement.js.map +1 -0
  268. package/ui/views/AdminView/ContentElement.js.map +1 -0
  269. package/ui/views/AdminView/HeaderElement.js +14 -2
  270. package/ui/views/AdminView/HeaderElement.js.map +1 -0
  271. package/ui/views/AdminView/HeaderSectionCenterElement.d.ts +2 -2
  272. package/ui/views/AdminView/HeaderSectionCenterElement.js.map +1 -0
  273. package/ui/views/AdminView/HeaderSectionLeftElement.d.ts +2 -2
  274. package/ui/views/AdminView/HeaderSectionLeftElement.js.map +1 -0
  275. package/ui/views/AdminView/HeaderSectionRightElement.d.ts +2 -2
  276. package/ui/views/AdminView/HeaderSectionRightElement.js.map +1 -0
  277. package/ui/views/AdminView/components/Dialog.js.map +1 -0
  278. package/ui/views/AdminView/components/Hamburger.d.ts +2 -2
  279. package/ui/views/AdminView/components/Hamburger.js.map +1 -0
  280. package/ui/views/AdminView/components/Snackbar.d.ts +2 -2
  281. package/ui/views/AdminView/components/Snackbar.js.map +1 -0
  282. package/ui/views/FormView/FormContainerElement.d.ts +2 -2
  283. package/ui/views/FormView/FormContainerElement.js.map +1 -0
  284. package/ui/views/FormView/FormContentElement.js.map +1 -0
  285. package/ui/views/FormView/FormFooterElement.d.ts +3 -3
  286. package/ui/views/FormView/FormFooterElement.js.map +1 -0
  287. package/ui/views/FormView/FormHeaderElement.d.ts +2 -2
  288. package/ui/views/FormView/FormHeaderElement.js.map +1 -0
  289. package/ui/views/FormView.d.ts +1 -1
  290. package/ui/views/FormView.js +25 -3
  291. package/ui/views/FormView.js.map +1 -0
  292. package/ui/views/OverlayView/ContentElement.d.ts +2 -2
  293. package/ui/views/OverlayView/ContentElement.js.map +1 -0
  294. package/ui/views/OverlayView/HeaderElement.d.ts +5 -5
  295. package/ui/views/OverlayView/HeaderElement.js.map +1 -0
  296. package/ui/views/OverlayView/HeaderTitleElement.d.ts +1 -1
  297. package/ui/views/OverlayView/HeaderTitleElement.js.map +1 -0
  298. package/ui/views/OverlayView/useOverlayView.d.ts +4 -5
  299. package/ui/views/OverlayView/useOverlayView.js +2 -2
  300. package/ui/views/OverlayView/useOverlayView.js.map +1 -0
  301. package/ui/views/OverlayView.d.ts +4 -6
  302. package/ui/views/OverlayView.js.map +1 -0
  303. package/ui/views/SplitView/SplitViewPanelElement.d.ts +3 -3
  304. package/ui/views/SplitView/SplitViewPanelElement.js.map +1 -0
  305. package/ui/views/SplitView.d.ts +3 -3
  306. package/ui/views/SplitView.js.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui.ts"],"names":["Ui","api","config","onSelectFile","readOnly","nodes","wrapper","make","CSS","baseClass","imageContainer","fileButton","createFileButton","imageEl","undefined","caption","input","contentEditable","dataset","captionPlaceholder","appendChild","styles","block","button","toolData","file","Object","keys","length","toggleStatus","status","EMPTY","innerHTML","i18n","t","addEventListener","url","tag","test","attributes","src","eventName","autoplay","loop","muted","playsinline","FILLED","text","statusType","prototype","hasOwnProperty","call","newStatus","classList","toggle","tuneName","tagName","classNames","el","document","createElement","Array","isArray","add","attrName"],"mappings":"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","sourcesContent":["import { API } from \"@editorjs/editorjs\";\nimport { ImageToolConfig, ImageToolData } from \"./types\";\n\ninterface OnSelectFileCallable {\n (): void;\n}\ninterface UiStatus {\n EMPTY: \"empty\";\n FILLED: \"filled\";\n [key: string]: string;\n}\ninterface UiParams {\n api: API;\n config: ImageToolConfig;\n onSelectFile: OnSelectFileCallable;\n readOnly: boolean;\n}\n/**\n * Class for working with UI:\n * - rendering base structure\n * - show/hide preview\n * - apply tune view\n */\nexport default class Ui {\n private api: API;\n private config: ImageToolConfig;\n private readonly readOnly: boolean;\n private readonly onSelectFile: OnSelectFileCallable;\n\n public readonly nodes: {\n wrapper: HTMLElement;\n imageContainer: HTMLElement;\n fileButton: HTMLElement;\n imageEl?: HTMLElement;\n caption: HTMLElement;\n };\n\n /**\n * @param ui - image tool Ui module\n * @param ui.api - Editor.js API\n * @param ui.config - user config\n * @param ui.onSelectFile - callback for clicks on Select file button\n * @param ui.readOnly - read-only mode flag\n */\n constructor({ api, config, onSelectFile, readOnly }: UiParams) {\n this.api = api;\n this.config = config;\n this.onSelectFile = onSelectFile;\n this.readOnly = readOnly;\n this.nodes = {\n wrapper: make(\"div\", [this.CSS.baseClass, this.CSS.wrapper]),\n imageContainer: make(\"div\", [this.CSS.imageContainer]),\n fileButton: this.createFileButton(),\n imageEl: undefined,\n caption: make(\"div\", [this.CSS.input, this.CSS.caption], {\n contentEditable: !this.readOnly\n })\n };\n\n /**\n * Create base structure\n * <wrapper>\n * <image-container/>\n * <caption />\n * </wrapper>\n */\n this.nodes.caption.dataset[\"placeholder\"] = this.config.captionPlaceholder;\n this.nodes.wrapper.appendChild(this.nodes.imageContainer);\n this.nodes.wrapper.appendChild(this.nodes.caption);\n this.nodes.wrapper.appendChild(this.nodes.fileButton);\n }\n\n /**\n * CSS classes\n *\n * @returns {object}\n */\n get CSS() {\n return {\n baseClass: this.api.styles.block,\n input: this.api.styles.input,\n button: this.api.styles.button,\n\n /**\n * Tool's classes\n */\n wrapper: \"image-tool\",\n imageContainer: \"image-tool__image\",\n imageEl: \"image-tool__image-picture\",\n caption: \"image-tool__caption\"\n };\n }\n\n /**\n * Ui statuses:\n * - empty\n * - filled\n *\n * @returns {{EMPTY: string, UPLOADING: string, FILLED: string}}\n */\n static get status(): UiStatus {\n return {\n EMPTY: \"empty\",\n FILLED: \"filled\"\n };\n }\n\n /**\n * Renders tool UI\n *\n * @param {ImageToolData} toolData - saved tool data\n * @returns {Element}\n */\n render(toolData: ImageToolData) {\n if (!toolData.file || Object.keys(toolData.file).length === 0) {\n this.toggleStatus(Ui.status.EMPTY);\n }\n\n return this.nodes.wrapper;\n }\n\n /**\n * Creates upload-file button\n *\n * @returns {Element}\n */\n createFileButton() {\n const button = make(\"div\", [this.CSS.button]);\n\n button.innerHTML = this.api.i18n.t(\"Select an Image\");\n\n button.addEventListener(\"click\", () => {\n this.onSelectFile();\n });\n\n return button;\n }\n\n /**\n * Shows an image\n *\n * @param {string} url - image source\n * @returns {void}\n */\n public fillImage(url: string): void {\n /**\n * Check for a source extension to compose element correctly: video tag for mp4, img — for others\n */\n const tag = /\\.mp4$/.test(url) ? \"VIDEO\" : \"IMG\";\n\n const attributes: any = {\n src: url\n };\n\n /**\n * We use eventName variable because IMG and VIDEO tags have different event to be called on source load\n * - IMG: load\n * - VIDEO: loadeddata\n *\n * @type {string}\n */\n let eventName = \"load\";\n\n /**\n * Update attributes and eventName if source is a mp4 video\n */\n if (tag === \"VIDEO\") {\n /**\n * Add attributes for playing muted mp4 as a gif\n *\n * @type {boolean}\n */\n attributes.autoplay = true;\n attributes.loop = true;\n attributes.muted = true;\n attributes.playsinline = true;\n\n /**\n * Change event to be listened\n *\n * @type {string}\n */\n eventName = \"loadeddata\";\n }\n\n /**\n * Compose tag with defined attributes\n *\n * @type {Element}\n */\n this.nodes.imageEl = make(tag, this.CSS.imageEl, attributes);\n\n /**\n * Add load event listener\n */\n this.nodes.imageEl.addEventListener(eventName, () => {\n this.toggleStatus(Ui.status.FILLED);\n });\n\n this.nodes.imageContainer.appendChild(this.nodes.imageEl);\n }\n\n /**\n * Shows caption input\n *\n * @param {string} text - caption text\n * @returns {void}\n */\n public fillCaption(text: string): void {\n if (!this.nodes.caption) {\n return;\n }\n this.nodes.caption.innerHTML = text;\n }\n\n /**\n * Changes UI status\n *\n * @param {string} status - see {@link Ui.status} constants\n * @returns {void}\n */\n public toggleStatus(status: string): void {\n for (const statusType in Ui.status) {\n if (Object.prototype.hasOwnProperty.call(Ui.status, statusType) === false) {\n continue;\n }\n const newStatus = Ui.status[statusType];\n this.nodes.wrapper.classList.toggle(\n `${this.CSS.wrapper}--${newStatus}`,\n status === newStatus\n );\n }\n }\n\n /**\n * Apply visual representation of activated tune\n *\n * @param {string} tuneName - one of available tunes {@link Tunes.tunes}\n * @param {boolean} status - true for enable, false for disable\n * @returns {void}\n */\n public applyTune(tuneName: string, status: boolean) {\n this.nodes.wrapper.classList.toggle(`${this.CSS.wrapper}--${tuneName}`, status);\n }\n}\n\n/**\n * Helper for making Elements with attributes\n *\n * @param {string} tagName - new Element tag name\n * @param {Array|string} classNames - list or name of CSS class\n * @param {object} attributes - any attributes\n * @returns {HTMLElement}\n */\nexport const make = function make(\n tagName: string,\n classNames: string[] | string | null = null,\n attributes?: Record<string, string | number | boolean>\n): HTMLElement {\n const el: HTMLElement = document.createElement(tagName);\n\n if (Array.isArray(classNames)) {\n el.classList.add(...classNames);\n } else if (classNames) {\n el.classList.add(classNames);\n }\n\n if (!attributes) {\n return el;\n }\n for (const attrName in attributes) {\n /**\n * Unfortunately it is a problem to map attributes to element because element is complaining\n * that attrName is a string, which cannot index the HTMLElement\n */\n (el as any)[attrName] = (attributes as any)[attrName];\n }\n\n return el;\n};\n"]}
@@ -1,31 +1,32 @@
1
- import { API } from "@editorjs/editorjs";
1
+ import { PasteEvent } from "@editorjs/editorjs";
2
2
  import { Alignment, TextAlign } from "../utils";
3
3
  /**
4
4
  * @typedef {object} ParagraphConfig
5
5
  * @property {string} placeholder - placeholder for the empty paragraph
6
6
  * @property {boolean} preserveBlank - Whether or not to keep blank paragraphs when saving editor data`
7
7
  */
8
- declare type ParagraphConfig = {
8
+ interface ParagraphConfig {
9
9
  placeholder: string;
10
10
  preserveBlank: boolean;
11
11
  typography?: Typography;
12
- };
12
+ }
13
13
  /**
14
14
  * @typedef {Object} ParagraphData
15
15
  * @description Tool's input and output data format
16
16
  * @property {String} text — Paragraph's content. Can include HTML tags: <a><b><i>
17
17
  */
18
- declare type ParagraphData = {
18
+ interface ParagraphData {
19
19
  text: string;
20
20
  textAlign: TextAlign;
21
- };
22
- declare type Typography = {
21
+ className?: string;
22
+ }
23
+ interface Typography {
23
24
  [key: string]: {
24
25
  label: string;
25
26
  component: string;
26
27
  className: string;
27
28
  };
28
- };
29
+ }
29
30
  interface ParagraphArgs {
30
31
  data: ParagraphData;
31
32
  config: ParagraphConfig;
@@ -33,17 +34,16 @@ interface ParagraphArgs {
33
34
  readOnly: boolean;
34
35
  }
35
36
  declare class Paragraph {
36
- api: API;
37
- readOnly: boolean;
38
- _CSS: any;
39
- _settings: any;
40
- _data: any;
41
- _element: any;
42
- _placeholder: string;
43
- _preserveBlank: boolean;
44
- alignments: Alignment[];
45
- settingsButtons: HTMLElement[];
46
- typography: Typography;
37
+ private readonly api;
38
+ private readonly readOnly;
39
+ private readonly _CSS;
40
+ private _data;
41
+ private readonly _element;
42
+ private readonly _placeholder;
43
+ private readonly _preserveBlank;
44
+ private readonly alignments;
45
+ private readonly settingsButtons;
46
+ private readonly typography;
47
47
  /**
48
48
  * Render plugin`s main Element and fill it with saved data
49
49
  *
@@ -87,7 +87,7 @@ declare class Paragraph {
87
87
  * @returns {ParagraphData} Current data
88
88
  * @private
89
89
  */
90
- get data(): any;
90
+ get data(): ParagraphData;
91
91
  /**
92
92
  * Store data in plugin:
93
93
  * - at the this._data property
@@ -96,7 +96,7 @@ declare class Paragraph {
96
96
  * @param {ParagraphData} data — data to set
97
97
  * @private
98
98
  */
99
- set data(data: any);
99
+ set data(data: ParagraphData);
100
100
  /**
101
101
  * Used by Editor paste handling API.
102
102
  * Provides configuration to handle P tags.
@@ -127,7 +127,7 @@ declare class Paragraph {
127
127
  *
128
128
  * @param {KeyboardEvent} e - key up event
129
129
  */
130
- onKeyUp(e: any): void;
130
+ onKeyUp(e: KeyboardEvent): void;
131
131
  /**
132
132
  * Create Tool's view
133
133
  * @return {HTMLElement}
@@ -136,14 +136,10 @@ declare class Paragraph {
136
136
  drawView(): HTMLElement;
137
137
  /**
138
138
  * Return Tool's view
139
- *
140
- * @returns {HTMLDivElement}
141
139
  */
142
- render(): any;
140
+ render(): HTMLDivElement;
143
141
  /**
144
142
  * Create Block's settings block
145
- *
146
- * @returns {HTMLElement}
147
143
  */
148
144
  renderSettings(): HTMLElement;
149
145
  /**
@@ -152,7 +148,7 @@ declare class Paragraph {
152
148
  * @param {ParagraphData} data
153
149
  * @public
154
150
  */
155
- merge(data: any): void;
151
+ merge(data: ParagraphData): void;
156
152
  /**
157
153
  * Validate Paragraph block data:
158
154
  * - check for emptiness
@@ -161,17 +157,17 @@ declare class Paragraph {
161
157
  * @returns {boolean} false if saved data is not correct, otherwise true
162
158
  * @public
163
159
  */
164
- validate(savedData: any): boolean;
160
+ validate(savedData: ParagraphData): boolean;
165
161
  /**
166
162
  * Extract Tool's data from the view
167
163
  * @param {HTMLDivElement} toolsContent - Paragraph tools rendered view
168
164
  * @returns {ParagraphData} - saved data
169
165
  * @public
170
166
  */
171
- save(toolsContent: any): {
172
- text: any;
173
- textAlign: TextAlign.START;
174
- className: any;
167
+ save(toolsContent: HTMLElement): {
168
+ text: string;
169
+ textAlign: TextAlign;
170
+ className: string | undefined;
175
171
  };
176
172
  /**
177
173
  * Extract textAlign from className
@@ -179,19 +175,19 @@ declare class Paragraph {
179
175
  * @param {string} className - heading element className
180
176
  * @returns {TextAlign} textAlign
181
177
  */
182
- getTextAlign(className: any): TextAlign.START;
178
+ getTextAlign(className: string): TextAlign;
183
179
  /**
184
180
  * On paste callback fired from Editor.
185
181
  *
186
182
  * @param {PasteEvent} event - event with pasted data
187
183
  */
188
- onPaste(event: any): void;
184
+ onPaste(event: PasteEvent): void;
189
185
  /**
190
186
  * Callback for Block's settings buttons
191
187
  *
192
188
  * @param {number} alignment - level to set
193
189
  */
194
- setAlignment(alignment: any): void;
190
+ setAlignment(alignment: Alignment): void;
195
191
  /**
196
192
  * Callback for Block's settings buttons
197
193
  *
@@ -206,6 +202,6 @@ declare class Paragraph {
206
202
  * @returns {HeaderData}
207
203
  * @private
208
204
  */
209
- normalizeData(data: any): any;
205
+ normalizeData(data?: Partial<ParagraphData>): ParagraphData;
210
206
  }
211
207
  export default Paragraph;
@@ -4,13 +4,10 @@ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
4
4
  import _createClass from "@babel/runtime/helpers/createClass";
5
5
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
6
6
  import { ALIGNMENTS, TextAlign, ALIGNMENT_ICONS } from "../utils";
7
- /**
8
- * @typedef {object} ParagraphConfig
9
- * @property {string} placeholder - placeholder for the empty paragraph
10
- * @property {boolean} preserveBlank - Whether or not to keep blank paragraphs when saving editor data`
11
- */
12
7
 
13
8
  var Paragraph = /*#__PURE__*/function () {
9
+ // private readonly _settings: any;
10
+
14
11
  /**
15
12
  * Render plugin`s main Element and fill it with saved data
16
13
  *
@@ -34,8 +31,6 @@ var Paragraph = /*#__PURE__*/function () {
34
31
 
35
32
  _defineProperty(this, "_CSS", void 0);
36
33
 
37
- _defineProperty(this, "_settings", void 0);
38
-
39
34
  _defineProperty(this, "_data", void 0);
40
35
 
41
36
  _defineProperty(this, "_element", void 0);
@@ -74,8 +69,9 @@ var Paragraph = /*#__PURE__*/function () {
74
69
  this._element = this.drawView();
75
70
  this._preserveBlank = config.preserveBlank !== undefined ? config.preserveBlank : false;
76
71
  this.settingsButtons = [];
77
- this.alignments = ALIGNMENTS;
78
- this.data = this.normalizeData(data);
72
+ this.alignments = ALIGNMENTS; // Call the `data` setter, to properly render the view element.
73
+
74
+ this.data = this._data;
79
75
  }
80
76
  /**
81
77
  * Default placeholder for Paragraph Tool
@@ -195,7 +191,7 @@ var Paragraph = /*#__PURE__*/function () {
195
191
  }, {
196
192
  key: "drawView",
197
193
  value: function drawView() {
198
- var div = document.createElement("DIV");
194
+ var div = document.createElement("div");
199
195
  div.classList.add(this._CSS.wrapper, this._CSS.block); // Add custom className to view.
200
196
 
201
197
  if (this._data.className) {
@@ -203,7 +199,7 @@ var Paragraph = /*#__PURE__*/function () {
203
199
  }
204
200
 
205
201
  div.contentEditable = "false";
206
- div.dataset.placeholder = this.api.i18n.t(this._placeholder);
202
+ div.dataset["placeholder"] = this.api.i18n.t(this._placeholder);
207
203
 
208
204
  if (!this.readOnly) {
209
205
  div.contentEditable = "true";
@@ -214,8 +210,6 @@ var Paragraph = /*#__PURE__*/function () {
214
210
  }
215
211
  /**
216
212
  * Return Tool's view
217
- *
218
- * @returns {HTMLDivElement}
219
213
  */
220
214
 
221
215
  }, {
@@ -225,8 +219,6 @@ var Paragraph = /*#__PURE__*/function () {
225
219
  }
226
220
  /**
227
221
  * Create Block's settings block
228
- *
229
- * @returns {HTMLElement}
230
222
  */
231
223
 
232
224
  }, {
@@ -234,10 +226,10 @@ var Paragraph = /*#__PURE__*/function () {
234
226
  value: function renderSettings() {
235
227
  var _this3 = this;
236
228
 
237
- var holder = document.createElement("DIV"); // Add alignment selectors
229
+ var holder = document.createElement("div"); // Add alignment selectors
238
230
 
239
231
  this.alignments.forEach(function (alignment) {
240
- var selectTypeButton = document.createElement("SPAN");
232
+ var selectTypeButton = document.createElement("span");
241
233
  selectTypeButton.classList.add(_this3._CSS.settingsButton);
242
234
  /**
243
235
  * Highlight current level button
@@ -256,7 +248,7 @@ var Paragraph = /*#__PURE__*/function () {
256
248
  * Save alignment to its button
257
249
  */
258
250
 
259
- selectTypeButton.dataset.textAlign = alignment.name;
251
+ selectTypeButton.dataset["textAlign"] = alignment.name;
260
252
  /**
261
253
  * Set up click handler
262
254
  */
@@ -320,9 +312,9 @@ var Paragraph = /*#__PURE__*/function () {
320
312
  }, {
321
313
  key: "merge",
322
314
  value: function merge(data) {
323
- this.data = {
315
+ this.data = _objectSpread(_objectSpread({}, this.data), {}, {
324
316
  text: this.data.text + data.text
325
- };
317
+ });
326
318
  }
327
319
  /**
328
320
  * Validate Paragraph block data:
@@ -382,10 +374,10 @@ var Paragraph = /*#__PURE__*/function () {
382
374
  }, {
383
375
  key: "onPaste",
384
376
  value: function onPaste(event) {
385
- var data = {
386
- text: event.detail.data.innerHTML
387
- };
388
- this.data = data;
377
+ var detail = event.detail;
378
+ this.data = _objectSpread(_objectSpread({}, this.data), {}, {
379
+ text: detail.data.innerHTML
380
+ });
389
381
  }
390
382
  /**
391
383
  * Callback for Block's settings buttons
@@ -407,7 +399,7 @@ var Paragraph = /*#__PURE__*/function () {
407
399
  */
408
400
 
409
401
  this.settingsButtons.forEach(function (button) {
410
- button.classList.toggle(_this4._CSS.settingsButtonActive, button.dataset.textAlign === alignment.name);
402
+ button.classList.toggle(_this4._CSS.settingsButtonActive, button.dataset["textAlign"] === alignment.name);
411
403
  });
412
404
  }
413
405
  /**
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":["ALIGNMENTS","TextAlign","ALIGNMENT_ICONS","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","text","innerHTML","forEach","alignment","name","textAlign","classList","add","remove","className","split","find","START","svg","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"],"mappings":"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","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"]}
@@ -1,27 +1,36 @@
1
1
  import { API } from "@editorjs/editorjs";
2
- declare class TextColorTool {
3
- _state: boolean;
4
- color: string;
2
+ interface Config {
3
+ themeColors: string[];
4
+ }
5
+ interface TextColorToolParams {
5
6
  api: API;
6
- tag: string;
7
- class: string;
8
- colorPicker: HTMLDivElement;
9
- button: HTMLButtonElement;
10
- config: {
11
- themeColors: string[];
12
- };
13
- _CSS: any;
14
- constructor({ api, config }: {
15
- api: any;
16
- config: any;
17
- });
7
+ config: Config;
8
+ }
9
+ interface SanitizeResultSpanResult {
10
+ class?: string;
11
+ style?: CSSStyleDeclaration;
12
+ }
13
+ interface SanitizeResult {
14
+ span: (element: HTMLElement) => SanitizeResultSpanResult;
15
+ }
16
+ declare class TextColorTool {
17
+ private _state;
18
+ private color;
19
+ private readonly api;
20
+ private readonly tag;
21
+ private readonly class;
22
+ private colorPicker;
23
+ private button;
24
+ private readonly config;
25
+ private readonly _CSS;
26
+ constructor({ api, config }: TextColorToolParams);
18
27
  static get isInline(): boolean;
19
28
  /**
20
29
  * Sanitize method returns rules to let Editor know which HTML tags it should respect.
21
30
  * @returns {object} sanitizer configuration.
22
31
  * https://editorjs.io/sanitizer
23
32
  */
24
- static get sanitize(): Record<string, any>;
33
+ static get sanitize(): SanitizeResult;
25
34
  get state(): boolean;
26
35
  set state(state: boolean);
27
36
  /**
@@ -35,19 +44,18 @@ declare class TextColorTool {
35
44
  /**
36
45
  * Finally, when button is pressed Editor calls
37
46
  * surround method of the tool with Range object as an argument.
38
- * @param range
39
47
  */
40
- surround(range: any): void;
41
- wrap(range: any): void;
42
- unwrap(range: any): void;
43
- showActions(mark: any): void;
48
+ surround(range: Range): void;
49
+ wrap(range: Range): void;
50
+ unwrap(range: Range): void;
51
+ showActions(mark: HTMLElement): void;
44
52
  hideActions(): void;
45
53
  /**
46
54
  * CheckState method of each Inline Tool is called by Editor with current `Selection`
47
55
  * when user selects some text
48
56
  */
49
57
  checkState(): void;
50
- convertToHex(color: any): string;
58
+ convertToHex(color: string): string;
51
59
  clear(): void;
52
60
  }
53
61
  export default TextColorTool;
@@ -30,6 +30,7 @@ var TextColorTool = /*#__PURE__*/function () {
30
30
 
31
31
  this.api = api;
32
32
  this.button = null;
33
+ this.colorPicker = null;
33
34
  this._state = false;
34
35
  this.tag = "SPAN";
35
36
  this.color = "red";
@@ -51,6 +52,11 @@ var TextColorTool = /*#__PURE__*/function () {
51
52
  },
52
53
  set: function set(state) {
53
54
  this._state = state;
55
+
56
+ if (!this.button) {
57
+ return;
58
+ }
59
+
54
60
  this.button.classList.toggle(this.api.styles.inlineToolButtonActive, state);
55
61
  }
56
62
  /**
@@ -94,16 +100,27 @@ var TextColorTool = /*#__PURE__*/function () {
94
100
  _this.color = color;
95
101
  }
96
102
 
97
- _this.colorPicker.childNodes.forEach(function (node) {
98
- if (node.classList.contains(_this._CSS.colorBoxActive)) {
99
- // remove active class
100
- node.classList.remove(_this._CSS.colorBoxActive);
101
- }
102
- }); // add active class
103
+ if (_this.colorPicker) {
104
+ /**
105
+ * TODO @ts-refactor
106
+ * TS Complains there is no classList on child node.
107
+ */
108
+ _this.colorPicker.childNodes.forEach(function (node) {
109
+ if (node.classList.contains(_this._CSS.colorBoxActive)) {
110
+ // remove active class
111
+ node.classList.remove(_this._CSS.colorBoxActive);
112
+ }
113
+ });
114
+ } // add active class
103
115
 
104
116
 
105
117
  colorBox.classList.add(_this._CSS.colorBoxActive);
106
- }); // save element
118
+ });
119
+
120
+ if (!_this.colorPicker) {
121
+ return;
122
+ } // save element
123
+
107
124
 
108
125
  _this.colorPicker.appendChild(colorBox);
109
126
  }); // Return element
@@ -113,7 +130,6 @@ var TextColorTool = /*#__PURE__*/function () {
113
130
  /**
114
131
  * Finally, when button is pressed Editor calls
115
132
  * surround method of the tool with Range object as an argument.
116
- * @param range
117
133
  */
118
134
 
119
135
  }, {
@@ -141,7 +157,11 @@ var TextColorTool = /*#__PURE__*/function () {
141
157
  value: function unwrap(range) {
142
158
  var mark = this.api.selection.findParentTag(this.tag, this.class);
143
159
  var text = range.extractContents();
144
- mark.remove();
160
+
161
+ if (mark) {
162
+ mark.remove();
163
+ }
164
+
145
165
  range.insertNode(text);
146
166
  }
147
167
  }, {
@@ -149,6 +169,10 @@ var TextColorTool = /*#__PURE__*/function () {
149
169
  value: function showActions(mark) {
150
170
  var _this2 = this;
151
171
 
172
+ if (!this.colorPicker) {
173
+ return;
174
+ }
175
+
152
176
  this.colorPicker.onclick = function () {
153
177
  mark.style.color = _this2.color;
154
178
  };
@@ -158,6 +182,10 @@ var TextColorTool = /*#__PURE__*/function () {
158
182
  }, {
159
183
  key: "hideActions",
160
184
  value: function hideActions() {
185
+ if (!this.colorPicker) {
186
+ return;
187
+ }
188
+
161
189
  this.colorPicker.onchange = null;
162
190
  this.colorPicker.hidden = true;
163
191
  }
@@ -172,7 +200,7 @@ var TextColorTool = /*#__PURE__*/function () {
172
200
  var mark = this.api.selection.findParentTag(this.tag);
173
201
  this.state = !!mark;
174
202
 
175
- if (this.state) {
203
+ if (!!mark) {
176
204
  this.showActions(mark);
177
205
  } else {
178
206
  this.hideActions();
@@ -182,6 +210,11 @@ var TextColorTool = /*#__PURE__*/function () {
182
210
  key: "convertToHex",
183
211
  value: function convertToHex(color) {
184
212
  var rgb = color.match(/(\d+)/g);
213
+
214
+ if (!rgb) {
215
+ return "";
216
+ }
217
+
185
218
  var hexR = parseInt(rgb[0]).toString(16);
186
219
  var hexG = parseInt(rgb[1]).toString(16);
187
220
  var hexB = parseInt(rgb[2]).toString(16);
@@ -213,6 +246,9 @@ var TextColorTool = /*#__PURE__*/function () {
213
246
  // so markup added by Inline Tool will be removed on pasting or on saving.
214
247
  // We need this config so that `class` & `style` attributes will remain intact for "span".
215
248
  return {
249
+ /**
250
+ * TODO: figure out the element type
251
+ */
216
252
  span: function span(el) {
217
253
  // Respect `class` and `style` attributes if this condition is meet.
218
254
  if (el.classList.contains(COLOR_TOOL_CLASS)) {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["index.ts"],"names":["COLOR_TOOL_CLASS","TextColorTool","api","config","button","colorPicker","_state","tag","color","class","themeColors","_CSS","colorBox","colorBoxActive","state","classList","toggle","styles","inlineToolButtonActive","document","createElement","type","innerHTML","add","inlineToolButton","forEach","style","backgroundColor","addEventListener","childNodes","node","contains","remove","appendChild","range","unwrap","wrap","selectedText","extractContents","mark","insertNode","selection","expandToTag","findParentTag","text","onclick","hidden","onchange","showActions","hideActions","rgb","match","hexR","parseInt","toString","hexG","hexB","length","span","el"],"mappings":"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","sourcesContent":["import { API } from \"@editorjs/editorjs\";\n\nconst COLOR_TOOL_CLASS = \"cdx-text-color\";\n\ninterface Config {\n themeColors: string[];\n}\n\ninterface TextColorToolParams {\n api: API;\n config: Config;\n}\n\ninterface SanitizeResultSpanResult {\n class?: string;\n style?: CSSStyleDeclaration;\n}\ninterface SanitizeResult {\n span: (element: HTMLElement) => SanitizeResultSpanResult;\n}\n\nclass TextColorTool {\n private _state: boolean;\n private color: string;\n private readonly api: API;\n private readonly tag: string;\n private readonly class: string;\n private colorPicker: HTMLDivElement | null;\n private button: HTMLButtonElement | null;\n private readonly config: Config;\n private readonly _CSS: any;\n\n constructor({ api, config }: TextColorToolParams) {\n this.api = api;\n this.button = null;\n this.colorPicker = null;\n this._state = false;\n this.tag = \"SPAN\";\n this.color = \"red\";\n this.class = COLOR_TOOL_CLASS;\n this.config = config || { themeColors: [\"#44bd32\"] };\n this._CSS = {\n colorPicker: \"ce-text-color-tool\",\n colorBox: \"ce-text-color-tool__color-box\",\n colorBoxActive: \"ce-text-color-tool__color-box--active\"\n };\n }\n\n static get isInline(): boolean {\n return true;\n }\n\n /**\n * Sanitize method returns rules to let Editor know which HTML tags it should respect.\n * @returns {object} sanitizer configuration.\n * https://editorjs.io/sanitizer\n */\n static get sanitize(): SanitizeResult {\n // Block Tools are not connected with Inline ones,\n // so markup added by Inline Tool will be removed on pasting or on saving.\n // We need this config so that `class` & `style` attributes will remain intact for \"span\".\n return {\n /**\n * TODO: figure out the element type\n */\n span: (el: HTMLElement) => {\n // Respect `class` and `style` attributes if this condition is meet.\n if (el.classList.contains(COLOR_TOOL_CLASS)) {\n return {\n class: COLOR_TOOL_CLASS,\n style: el.style\n };\n }\n return {};\n }\n };\n }\n\n get state(): boolean {\n return this._state;\n }\n\n set state(state) {\n this._state = state;\n if (!this.button) {\n return;\n }\n this.button.classList.toggle(this.api.styles.inlineToolButtonActive, state);\n }\n /**\n * Render method must return HTML element of the button for Inline Toolbar.\n */\n public render(): HTMLButtonElement {\n this.button = document.createElement(\"button\");\n this.button.type = \"button\";\n this.button.innerHTML =\n '<svg width=\"20\" height=\"18\"><path d=\"M10.458 12.04l2.919 1.686-.781 1.417-.984-.03-.974 1.687H8.674l1.49-2.583-.508-.775.802-1.401zm.546-.952l3.624-6.327a1.597 1.597 0 0 1 2.182-.59 1.632 1.632 0 0 1 .615 2.201l-3.519 6.391-2.902-1.675zm-7.73 3.467h3.465a1.123 1.123 0 1 1 0 2.247H3.273a1.123 1.123 0 1 1 0-2.247z\"/></svg>';\n this.button.classList.add(this.api.styles.inlineToolButton);\n\n return this.button;\n }\n\n /**\n * Input for the link\n */\n public renderActions(): HTMLElement {\n // Create action element\n this.colorPicker = document.createElement(\"div\");\n // Add element properties\n this.colorPicker.classList.add(this._CSS.colorPicker);\n\n this.config.themeColors.forEach(color => {\n // create element\n const colorBox = document.createElement(\"button\");\n // add properties\n colorBox.style.backgroundColor = color;\n colorBox.classList.add(this._CSS.colorBox);\n\n colorBox.addEventListener(\"click\", () => {\n if (this.color === color) {\n // reset the color\n this.color = \"unset\";\n } else {\n // set color\n this.color = color;\n }\n\n if (this.colorPicker) {\n /**\n * TODO @ts-refactor\n * TS Complains there is no classList on child node.\n */\n this.colorPicker.childNodes.forEach((node: any) => {\n if (node.classList.contains(this._CSS.colorBoxActive)) {\n // remove active class\n node.classList.remove(this._CSS.colorBoxActive);\n }\n });\n }\n // add active class\n colorBox.classList.add(this._CSS.colorBoxActive);\n });\n if (!this.colorPicker) {\n return;\n }\n // save element\n this.colorPicker.appendChild(colorBox);\n });\n\n // Return element\n return this.colorPicker;\n }\n\n /**\n * Finally, when button is pressed Editor calls\n * surround method of the tool with Range object as an argument.\n */\n public surround(range: Range): void {\n if (this.state) {\n this.unwrap(range);\n return;\n }\n\n this.wrap(range);\n }\n\n public wrap(range: Range): void {\n const selectedText = range.extractContents();\n const mark = document.createElement(this.tag);\n\n mark.classList.add(this.class);\n\n mark.appendChild(selectedText);\n range.insertNode(mark);\n\n this.api.selection.expandToTag(mark);\n }\n\n public unwrap(range: Range): void {\n const mark = this.api.selection.findParentTag(this.tag, this.class);\n const text = range.extractContents();\n\n if (mark) {\n mark.remove();\n }\n\n range.insertNode(text);\n }\n\n public showActions(mark: HTMLElement): void {\n if (!this.colorPicker) {\n return;\n }\n this.colorPicker.onclick = () => {\n mark.style.color = this.color;\n };\n this.colorPicker.hidden = false;\n }\n\n public hideActions(): void {\n if (!this.colorPicker) {\n return;\n }\n this.colorPicker.onchange = null;\n this.colorPicker.hidden = true;\n }\n\n /**\n * CheckState method of each Inline Tool is called by Editor with current `Selection`\n * when user selects some text\n */\n public checkState(): void {\n const mark = this.api.selection.findParentTag(this.tag);\n\n this.state = !!mark;\n\n if (!!mark) {\n this.showActions(mark);\n } else {\n this.hideActions();\n }\n }\n\n public convertToHex(color: string): string {\n const rgb = color.match(/(\\d+)/g);\n if (!rgb) {\n return \"\";\n }\n\n let hexR = parseInt(rgb[0]).toString(16);\n let hexG = parseInt(rgb[1]).toString(16);\n let hexB = parseInt(rgb[2]).toString(16);\n\n hexR = hexR.length === 1 ? \"0\" + hexR : hexR;\n hexG = hexG.length === 1 ? \"0\" + hexG : hexG;\n hexB = hexB.length === 1 ? \"0\" + hexB : hexB;\n\n return \"#\" + hexR + hexG + hexB;\n }\n\n public clear(): void {\n this.hideActions();\n }\n}\n\nexport default TextColorTool;\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["utils.ts"],"names":["TextAlign","ALIGNMENT_ICONS","start","end","center","justify","ALIGNMENTS","name","START","svg","CENTER","END"],"mappings":"AAAA,WAAYA,SAAZ;;WAAYA,S;AAAAA,EAAAA,S;AAAAA,EAAAA,S;AAAAA,EAAAA,S;GAAAA,S,KAAAA,S;;AAWZ,OAAO,IAAMC,eAAe,GAAG;AAC3BC,EAAAA,KAAK,EACD,sEACA,6CADA,GAEA,SAFA,GAGA,gXAHA,GAIA,UAJA,GAKA,QAPuB;AAQ3BC,EAAAA,GAAG,EACC,sEACA,6CADA,GAEA,SAFA,GAGA,iXAHA,GAIA,UAJA,GAKA,QAduB;AAe3BC,EAAAA,MAAM,EACF,sEACA,6CADA,GAEA,SAFA,GAGA,uXAHA,GAIA,UAJA,GAKA,QArBuB;AAsB3BC,EAAAA,OAAO,EACH,sEACA,6CADA,GAEA,SAFA,GAGA,8WAHA,GAIA,UAJA,GAKA;AA5BuB,CAAxB;AA+BP,OAAO,IAAMC,UAAU,GAAG,CACtB;AACIC,EAAAA,IAAI,EAAEP,SAAS,CAACQ,KADpB;AAEIC,EAAAA,GAAG,EAAER,eAAe,CAACC;AAFzB,CADsB,EAKtB;AACIK,EAAAA,IAAI,EAAEP,SAAS,CAACU,MADpB;AAEID,EAAAA,GAAG,EAAER,eAAe,CAACG;AAFzB,CALsB,EAStB;AACIG,EAAAA,IAAI,EAAEP,SAAS,CAACW,GADpB;AAEIF,EAAAA,GAAG,EAAER,eAAe,CAACE;AAFzB,CATsB,CAAnB","sourcesContent":["export enum TextAlign {\n START = \"start\",\n END = \"end\",\n CENTER = \"center\"\n}\n\nexport type Alignment = {\n name: TextAlign;\n svg: string;\n};\n\nexport const ALIGNMENT_ICONS = {\n start:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\">\\n' +\n ' <path fill=\"none\" d=\"M0 0h24v24H0V0z\"/>\\n' +\n \" <g>\\n\" +\n ' <path fill=\"currentColor\" d=\"M14 15H4c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zm0-8H4c-.55 0-1 .45-1 1s.45 1 1 1h10c.55 0 1-.45 1-1s-.45-1-1-1zM4 13h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm0 8h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zM3 4c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1z\"/>\\n' +\n \" </g>\\n\" +\n \"</svg>\",\n end:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\">\\n' +\n ' <path fill=\"none\" d=\"M0 0h24v24H0V0z\"/>\\n' +\n \" <g>\\n\" +\n ' <path fill=\"currentColor\" d=\"M4 21h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm6-4h10c.55 0 1-.45 1-1s-.45-1-1-1H10c-.55 0-1 .45-1 1s.45 1 1 1zm-6-4h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm6-4h10c.55 0 1-.45 1-1s-.45-1-1-1H10c-.55 0-1 .45-1 1s.45 1 1 1zM3 4c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1z\"/>\\n' +\n \" </g>\\n\" +\n \"</svg>\",\n center:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\">\\n' +\n ' <path fill=\"none\" d=\"M0 0h24v24H0V0z\"/>\\n' +\n \" <g>\\n\" +\n ' <path fill=\"currentColor\" d=\"M7 16c0 .55.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1zm-3 5h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm0-8h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm3-5c0 .55.45 1 1 1h8c.55 0 1-.45 1-1s-.45-1-1-1H8c-.55 0-1 .45-1 1zM3 4c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1z\"/>\\n' +\n \" </g>\\n\" +\n \"</svg>\",\n justify:\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\">\\n' +\n ' <path fill=\"none\" d=\"M0 0h24v24H0V0z\"/>\\n' +\n \" <g>\\n\" +\n ' <path fill=\"currentColor\" d=\"M4 21h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm0-4h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm0-4h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zm0-4h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1s.45 1 1 1zM3 4c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1z\"/>\\n' +\n \" </g>\\n\" +\n \"</svg>\"\n};\n\nexport const ALIGNMENTS = [\n {\n name: TextAlign.START,\n svg: ALIGNMENT_ICONS.start\n },\n {\n name: TextAlign.CENTER,\n svg: ALIGNMENT_ICONS.center\n },\n {\n name: TextAlign.END,\n svg: ALIGNMENT_ICONS.end\n }\n];\n"]}
@@ -1,6 +1,6 @@
1
- /// <reference types="react" />
1
+ import React from "react";
2
2
  interface RoutesProps {
3
3
  routes: JSX.Element[];
4
4
  }
5
- export declare const Routes: (props: RoutesProps) => JSX.Element;
5
+ export declare const Routes: React.FC<RoutesProps>;
6
6
  export {};