@os-design/editor 1.0.160 → 1.0.161

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 (115) hide show
  1. package/dist/cjs/Editor/BlockToolbar.js +4 -18
  2. package/dist/cjs/Editor/BlockToolbar.js.map +1 -1
  3. package/dist/cjs/Editor/StyleToolbar.js +6 -23
  4. package/dist/cjs/Editor/StyleToolbar.js.map +1 -1
  5. package/dist/cjs/Editor/Toolbar.js +0 -7
  6. package/dist/cjs/Editor/Toolbar.js.map +1 -1
  7. package/dist/cjs/Editor/ToolbarButton.js +2 -21
  8. package/dist/cjs/Editor/ToolbarButton.js.map +1 -1
  9. package/dist/cjs/Editor/blocks/Figure.js +0 -6
  10. package/dist/cjs/Editor/blocks/Figure.js.map +1 -1
  11. package/dist/cjs/Editor/blocks/FigureCaption.js +0 -7
  12. package/dist/cjs/Editor/blocks/FigureCaption.js.map +1 -1
  13. package/dist/cjs/Editor/blocks/imageBlock.js +12 -62
  14. package/dist/cjs/Editor/blocks/imageBlock.js.map +1 -1
  15. package/dist/cjs/Editor/blocks/videoBlock.js +4 -22
  16. package/dist/cjs/Editor/blocks/videoBlock.js.map +1 -1
  17. package/dist/cjs/Editor/decorators/linkDecorator.js +3 -9
  18. package/dist/cjs/Editor/decorators/linkDecorator.js.map +1 -1
  19. package/dist/cjs/Editor/hooks/useBlockToolbarProps.js +14 -32
  20. package/dist/cjs/Editor/hooks/useBlockToolbarProps.js.map +1 -1
  21. package/dist/cjs/Editor/hooks/usePastedTextHandler.js +0 -9
  22. package/dist/cjs/Editor/hooks/usePastedTextHandler.js.map +1 -1
  23. package/dist/cjs/Editor/hooks/useReturnHandler.js +0 -8
  24. package/dist/cjs/Editor/hooks/useReturnHandler.js.map +1 -1
  25. package/dist/cjs/Editor/hooks/useStyleToolbarProps.js +16 -29
  26. package/dist/cjs/Editor/hooks/useStyleToolbarProps.js.map +1 -1
  27. package/dist/cjs/Editor/index.js +41 -76
  28. package/dist/cjs/Editor/index.js.map +1 -1
  29. package/dist/cjs/Editor/styles/defaultDraftJsStyles.js +0 -4
  30. package/dist/cjs/Editor/styles/defaultDraftJsStyles.js.map +1 -1
  31. package/dist/cjs/Editor/styles/overrideDraftJsStyles.js +0 -6
  32. package/dist/cjs/Editor/styles/overrideDraftJsStyles.js.map +1 -1
  33. package/dist/cjs/Editor/utils/addNewBlockAt.js +0 -5
  34. package/dist/cjs/Editor/utils/addNewBlockAt.js.map +1 -1
  35. package/dist/cjs/Editor/utils/changeBlock.js +0 -3
  36. package/dist/cjs/Editor/utils/changeBlock.js.map +1 -1
  37. package/dist/cjs/Editor/utils/createContentEditorState.js +0 -5
  38. package/dist/cjs/Editor/utils/createContentEditorState.js.map +1 -1
  39. package/dist/cjs/Editor/utils/createDecorator.js +0 -5
  40. package/dist/cjs/Editor/utils/createDecorator.js.map +1 -1
  41. package/dist/cjs/Editor/utils/createEmptyEditorState.js +0 -5
  42. package/dist/cjs/Editor/utils/createEmptyEditorState.js.map +1 -1
  43. package/dist/cjs/Editor/utils/defaultStyleToolbarItems.js +0 -7
  44. package/dist/cjs/Editor/utils/defaultStyleToolbarItems.js.map +1 -1
  45. package/dist/cjs/Editor/utils/getCurrentBlock.js +0 -2
  46. package/dist/cjs/Editor/utils/getCurrentBlock.js.map +1 -1
  47. package/dist/cjs/Editor/utils/getSelectedBlockElement.js +0 -6
  48. package/dist/cjs/Editor/utils/getSelectedBlockElement.js.map +1 -1
  49. package/dist/cjs/Editor/utils/getSelectionRange.js +0 -2
  50. package/dist/cjs/Editor/utils/getSelectionRange.js.map +1 -1
  51. package/dist/cjs/Editor/utils/setLink.js +0 -6
  52. package/dist/cjs/Editor/utils/setLink.js.map +1 -1
  53. package/dist/cjs/Editor/utils/transformers.js +0 -4
  54. package/dist/cjs/Editor/utils/transformers.js.map +1 -1
  55. package/dist/cjs/Editor/utils/unsetLink.js +0 -4
  56. package/dist/cjs/Editor/utils/unsetLink.js.map +1 -1
  57. package/dist/cjs/EditorSkeleton/index.js +1 -12
  58. package/dist/cjs/EditorSkeleton/index.js.map +1 -1
  59. package/dist/cjs/index.js +0 -21
  60. package/dist/cjs/index.js.map +1 -1
  61. package/dist/esm/Editor/BlockToolbar.js +0 -2
  62. package/dist/esm/Editor/BlockToolbar.js.map +1 -1
  63. package/dist/esm/Editor/StyleToolbar.js +2 -5
  64. package/dist/esm/Editor/StyleToolbar.js.map +1 -1
  65. package/dist/esm/Editor/Toolbar.js.map +1 -1
  66. package/dist/esm/Editor/ToolbarButton.js +0 -5
  67. package/dist/esm/Editor/ToolbarButton.js.map +1 -1
  68. package/dist/esm/Editor/blocks/Figure.js.map +1 -1
  69. package/dist/esm/Editor/blocks/FigureCaption.js.map +1 -1
  70. package/dist/esm/Editor/blocks/imageBlock.js +9 -15
  71. package/dist/esm/Editor/blocks/imageBlock.js.map +1 -1
  72. package/dist/esm/Editor/blocks/videoBlock.js +0 -5
  73. package/dist/esm/Editor/blocks/videoBlock.js.map +1 -1
  74. package/dist/esm/Editor/decorators/linkDecorator.js.map +1 -1
  75. package/dist/esm/Editor/hooks/useBlockToolbarProps.js +0 -6
  76. package/dist/esm/Editor/hooks/useBlockToolbarProps.js.map +1 -1
  77. package/dist/esm/Editor/hooks/usePastedTextHandler.js +0 -4
  78. package/dist/esm/Editor/hooks/usePastedTextHandler.js.map +1 -1
  79. package/dist/esm/Editor/hooks/useReturnHandler.js +0 -4
  80. package/dist/esm/Editor/hooks/useReturnHandler.js.map +1 -1
  81. package/dist/esm/Editor/hooks/useStyleToolbarProps.js +5 -6
  82. package/dist/esm/Editor/hooks/useStyleToolbarProps.js.map +1 -1
  83. package/dist/esm/Editor/index.js +10 -10
  84. package/dist/esm/Editor/index.js.map +1 -1
  85. package/dist/esm/Editor/styles/defaultDraftJsStyles.js +1 -1
  86. package/dist/esm/Editor/styles/defaultDraftJsStyles.js.map +1 -1
  87. package/dist/esm/Editor/styles/overrideDraftJsStyles.js +2 -2
  88. package/dist/esm/Editor/styles/overrideDraftJsStyles.js.map +1 -1
  89. package/dist/esm/Editor/utils/addNewBlockAt.js +0 -2
  90. package/dist/esm/Editor/utils/addNewBlockAt.js.map +1 -1
  91. package/dist/esm/Editor/utils/changeBlock.js +0 -2
  92. package/dist/esm/Editor/utils/changeBlock.js.map +1 -1
  93. package/dist/esm/Editor/utils/createContentEditorState.js +0 -2
  94. package/dist/esm/Editor/utils/createContentEditorState.js.map +1 -1
  95. package/dist/esm/Editor/utils/createDecorator.js +0 -2
  96. package/dist/esm/Editor/utils/createDecorator.js.map +1 -1
  97. package/dist/esm/Editor/utils/createEmptyEditorState.js +0 -2
  98. package/dist/esm/Editor/utils/createEmptyEditorState.js.map +1 -1
  99. package/dist/esm/Editor/utils/defaultStyleToolbarItems.js.map +1 -1
  100. package/dist/esm/Editor/utils/getCurrentBlock.js +0 -1
  101. package/dist/esm/Editor/utils/getCurrentBlock.js.map +1 -1
  102. package/dist/esm/Editor/utils/getSelectedBlockElement.js +0 -4
  103. package/dist/esm/Editor/utils/getSelectedBlockElement.js.map +1 -1
  104. package/dist/esm/Editor/utils/getSelectionRange.js +0 -1
  105. package/dist/esm/Editor/utils/getSelectionRange.js.map +1 -1
  106. package/dist/esm/Editor/utils/setLink.js +0 -2
  107. package/dist/esm/Editor/utils/setLink.js.map +1 -1
  108. package/dist/esm/Editor/utils/transformers.js.map +1 -1
  109. package/dist/esm/Editor/utils/unsetLink.js +0 -2
  110. package/dist/esm/Editor/utils/unsetLink.js.map +1 -1
  111. package/dist/esm/EditorSkeleton/index.js +1 -2
  112. package/dist/esm/EditorSkeleton/index.js.map +1 -1
  113. package/dist/esm/emotion.d.js.map +1 -1
  114. package/dist/esm/index.js.map +1 -1
  115. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"imageBlock.js","names":["widthStyles","p","width","css","ImageFigure","styled","Figure","omitEmotionProps","Mask","div","theme","editorBlockImageMaskOpacity","LoadingIcon","Loading","editorBlockImageLoadingFontSize","Image","img","editorBlockImageMaxHeight","ImageBlock","props","block","data","getData","src","get","loading","imageRef","useRef","useState","setWidth","updateWidth","useCallback","current","useEvent","window","undefined","startsWith","getText","IMAGE_BLOCK","imageBlock","onImageUpload","type","component","icon","onClick","value","onChange","setReadOnly","Error","input","document","createElement","accept","onchange","e","target","files","file","URL","createObjectURL","currentBlock","getCurrentBlock","nextEditorState","changeBlock","message","error","click"],"sources":["../../../../src/Editor/blocks/imageBlock.tsx"],"sourcesContent":["import React, { useCallback, useRef, useState } from 'react';\nimport styled from '@emotion/styled';\nimport { EditorBlock } from 'draft-js';\nimport { Loading, Picture } from '@os-design/icons';\nimport { message } from '@os-design/core';\nimport { omitEmotionProps, useEvent } from '@os-design/utils';\nimport { css } from '@emotion/react';\nimport FigureCaption from './FigureCaption';\nimport changeBlock from '../utils/changeBlock';\nimport getCurrentBlock from '../utils/getCurrentBlock';\nimport Figure from './Figure';\nimport { BlockProps, BlockToolbarItem } from './types';\n\nconst widthStyles = (p) =>\n p.width &&\n css`\n width: ${p.width}px;\n `;\n\ninterface ImageFigureProps {\n width: number;\n}\nconst ImageFigure = styled(Figure, omitEmotionProps('width'))<ImageFigureProps>`\n position: relative;\n display: inline-block;\n max-width: 100%;\n ${widthStyles};\n`;\n\nconst Mask = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n background-color: hsla(\n 0,\n 0%,\n 0%,\n ${(p) => p.theme.editorBlockImageMaskOpacity}\n );\n color: hsl(0, 0%, 100%);\n`;\n\nconst LoadingIcon = styled(Loading)`\n font-size: ${(p) => p.theme.editorBlockImageLoadingFontSize}em;\n`;\n\nconst Image = styled.img`\n max-width: 100%;\n max-height: ${(p) => p.theme.editorBlockImageMaxHeight}em;\n vertical-align: bottom;\n`;\n\nconst ImageBlock: React.FC<BlockProps> = (props) => {\n const { block } = props;\n const data = block.getData();\n const src = data.get('src') as string;\n const loading = data.get('loading') as boolean;\n\n // Update the width of the image\n const imageRef = useRef<HTMLImageElement>(null);\n const [width, setWidth] = useState(0);\n const updateWidth = useCallback(() => {\n if (!imageRef.current) return;\n setWidth(imageRef.current.width);\n }, []);\n useEvent(\n (typeof window !== 'undefined' ? window : undefined) as EventTarget,\n 'resize',\n updateWidth\n );\n\n if (!src) return null;\n\n return (\n <ImageFigure width={width}>\n {loading && (\n <Mask>\n <LoadingIcon />\n </Mask>\n )}\n <Image\n src={src.startsWith('blob:') ? src : `${src}-1024`}\n alt={block.getText()}\n onLoad={updateWidth}\n ref={imageRef}\n />\n {!loading && (\n <FigureCaption>\n <EditorBlock {...props} />\n </FigureCaption>\n )}\n </ImageFigure>\n );\n};\n\nexport const IMAGE_BLOCK = 'atomic:image';\n\nconst imageBlock = (\n onImageUpload: (file: File) => Promise<string>\n): BlockToolbarItem => ({\n type: IMAGE_BLOCK,\n component: ImageBlock,\n icon: <Picture />,\n onClick: ({ value, onChange, setReadOnly }) => {\n if (!onImageUpload) throw new Error('Specify the onImageUpload method');\n\n // Not working in mobile Safari.\n // The input must be actually appended to the DOM.\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/jpeg,image/png,image/webp';\n input.onchange = async (e) => {\n const target = e.target as HTMLInputElement | null;\n if (!target) return;\n const { files } = target;\n if (!files) return;\n\n setReadOnly(true);\n const file = files[0];\n let src = URL.createObjectURL(file);\n\n // Add the local image\n const currentBlock = getCurrentBlock(value);\n let nextEditorState = changeBlock(value, currentBlock, IMAGE_BLOCK, {\n src,\n loading: true,\n });\n onChange(nextEditorState);\n\n // Replace the local image with the remote one\n try {\n src = await onImageUpload(file);\n nextEditorState = changeBlock(value, currentBlock, IMAGE_BLOCK, {\n src,\n });\n } catch (err) {\n if (err instanceof Error) {\n message.error(err.message);\n }\n nextEditorState = changeBlock(value, currentBlock, 'unstyled');\n }\n\n setReadOnly(false);\n onChange(nextEditorState);\n };\n input.click();\n },\n});\n\nexport default imageBlock;\n"],"mappings":"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"}
1
+ {"version":3,"file":"imageBlock.js","names":["widthStyles","p","width","css","ImageFigure","styled","Figure","omitEmotionProps","Mask","div","theme","editorBlockImageMaskOpacity","LoadingIcon","Loading","editorBlockImageLoadingFontSize","Image","img","editorBlockImageMaxHeight","ImageBlock","props","block","data","getData","src","get","loading","imageRef","useRef","useState","setWidth","updateWidth","useCallback","current","useEvent","window","undefined","startsWith","getText","IMAGE_BLOCK","imageBlock","onImageUpload","type","component","icon","onClick","value","onChange","setReadOnly","Error","input","document","createElement","accept","onchange","e","target","files","file","URL","createObjectURL","currentBlock","getCurrentBlock","nextEditorState","changeBlock","message","error","click"],"sources":["../../../../src/Editor/blocks/imageBlock.tsx"],"sourcesContent":["import React, { useCallback, useRef, useState } from 'react';\nimport styled from '@emotion/styled';\nimport { EditorBlock } from 'draft-js';\nimport { Loading, Picture } from '@os-design/icons';\nimport { message } from '@os-design/core';\nimport { omitEmotionProps, useEvent } from '@os-design/utils';\nimport { css } from '@emotion/react';\nimport FigureCaption from './FigureCaption';\nimport changeBlock from '../utils/changeBlock';\nimport getCurrentBlock from '../utils/getCurrentBlock';\nimport Figure from './Figure';\nimport { BlockProps, BlockToolbarItem } from './types';\n\nconst widthStyles = (p) =>\n p.width &&\n css`\n width: ${p.width}px;\n `;\n\ninterface ImageFigureProps {\n width: number;\n}\nconst ImageFigure = styled(Figure, omitEmotionProps('width'))<ImageFigureProps>`\n position: relative;\n display: inline-block;\n max-width: 100%;\n ${widthStyles};\n`;\n\nconst Mask = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n\n display: flex;\n justify-content: center;\n align-items: center;\n\n background-color: hsla(\n 0,\n 0%,\n 0%,\n ${(p) => p.theme.editorBlockImageMaskOpacity}\n );\n color: hsl(0, 0%, 100%);\n`;\n\nconst LoadingIcon = styled(Loading)`\n font-size: ${(p) => p.theme.editorBlockImageLoadingFontSize}em;\n`;\n\nconst Image = styled.img`\n max-width: 100%;\n max-height: ${(p) => p.theme.editorBlockImageMaxHeight}em;\n vertical-align: bottom;\n`;\n\nconst ImageBlock: React.FC<BlockProps> = (props) => {\n const { block } = props;\n const data = block.getData();\n const src = data.get('src') as string;\n const loading = data.get('loading') as boolean;\n\n // Update the width of the image\n const imageRef = useRef<HTMLImageElement>(null);\n const [width, setWidth] = useState(0);\n const updateWidth = useCallback(() => {\n if (!imageRef.current) return;\n setWidth(imageRef.current.width);\n }, []);\n useEvent(\n (typeof window !== 'undefined' ? window : undefined) as EventTarget,\n 'resize',\n updateWidth\n );\n\n if (!src) return null;\n\n return (\n <ImageFigure width={width}>\n {loading && (\n <Mask>\n <LoadingIcon />\n </Mask>\n )}\n <Image\n src={src.startsWith('blob:') ? src : `${src}-1024`}\n alt={block.getText()}\n onLoad={updateWidth}\n ref={imageRef}\n />\n {!loading && (\n <FigureCaption>\n <EditorBlock {...props} />\n </FigureCaption>\n )}\n </ImageFigure>\n );\n};\n\nexport const IMAGE_BLOCK = 'atomic:image';\n\nconst imageBlock = (\n onImageUpload: (file: File) => Promise<string>\n): BlockToolbarItem => ({\n type: IMAGE_BLOCK,\n component: ImageBlock,\n icon: <Picture />,\n onClick: ({ value, onChange, setReadOnly }) => {\n if (!onImageUpload) throw new Error('Specify the onImageUpload method');\n\n // Not working in mobile Safari.\n // The input must be actually appended to the DOM.\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = 'image/jpeg,image/png,image/webp';\n input.onchange = async (e) => {\n const target = e.target as HTMLInputElement | null;\n if (!target) return;\n const { files } = target;\n if (!files) return;\n\n setReadOnly(true);\n const file = files[0];\n let src = URL.createObjectURL(file);\n\n // Add the local image\n const currentBlock = getCurrentBlock(value);\n let nextEditorState = changeBlock(value, currentBlock, IMAGE_BLOCK, {\n src,\n loading: true,\n });\n onChange(nextEditorState);\n\n // Replace the local image with the remote one\n try {\n src = await onImageUpload(file);\n nextEditorState = changeBlock(value, currentBlock, IMAGE_BLOCK, {\n src,\n });\n } catch (err) {\n if (err instanceof Error) {\n message.error(err.message);\n }\n nextEditorState = changeBlock(value, currentBlock, 'unstyled');\n }\n\n setReadOnly(false);\n onChange(nextEditorState);\n };\n input.click();\n },\n});\n\nexport default imageBlock;\n"],"mappings":"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"}
@@ -4,31 +4,18 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = exports.VIDEO_BLOCK = void 0;
7
-
8
7
  var _react = _interopRequireDefault(require("react"));
9
-
10
8
  var _draftJs = require("draft-js");
11
-
12
9
  var _core = require("@os-design/core");
13
-
14
10
  var _icons = require("@os-design/icons");
15
-
16
11
  var _FigureCaption = _interopRequireDefault(require("./FigureCaption"));
17
-
18
12
  var _changeBlock = _interopRequireDefault(require("../utils/changeBlock"));
19
-
20
13
  var _getCurrentBlock = _interopRequireDefault(require("../utils/getCurrentBlock"));
21
-
22
14
  var _Figure = _interopRequireDefault(require("./Figure"));
23
-
24
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
25
-
26
16
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
27
-
28
17
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
29
-
30
18
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
31
-
32
19
  var VideoBlock = function VideoBlock(props) {
33
20
  var block = props.block;
34
21
  var data = block.getData();
@@ -39,7 +26,6 @@ var VideoBlock = function VideoBlock(props) {
39
26
  title: block.getText()
40
27
  }), /*#__PURE__*/_react["default"].createElement(_FigureCaption["default"], null, /*#__PURE__*/_react["default"].createElement(_draftJs.EditorBlock, props)));
41
28
  };
42
-
43
29
  var videoTypes = [
44
30
  /**
45
31
  * YouTube. Supported formats:
@@ -64,17 +50,15 @@ var videoTypes = [
64
50
  return "https://rutube.ru/play/embed/".concat(id);
65
51
  }
66
52
  }];
67
-
68
53
  var detectVideo = function detectVideo(url) {
69
54
  // eslint-disable-next-line no-restricted-syntax
70
55
  var _iterator = _createForOfIteratorHelper(videoTypes),
71
- _step;
72
-
56
+ _step;
73
57
  try {
74
58
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
75
59
  var _step$value = _step.value,
76
- re = _step$value.re,
77
- getUrl = _step$value.getUrl;
60
+ re = _step$value.re,
61
+ getUrl = _step$value.getUrl;
78
62
  var groups = url.match(re);
79
63
  if (groups && groups[1]) return getUrl(groups[1]);
80
64
  }
@@ -83,10 +67,8 @@ var detectVideo = function detectVideo(url) {
83
67
  } finally {
84
68
  _iterator.f();
85
69
  }
86
-
87
70
  return null;
88
71
  };
89
-
90
72
  var VIDEO_BLOCK = 'atomic:video';
91
73
  exports.VIDEO_BLOCK = VIDEO_BLOCK;
92
74
  var videoBlock = {
@@ -95,7 +77,7 @@ var videoBlock = {
95
77
  icon: /*#__PURE__*/_react["default"].createElement(_icons.Video, null),
96
78
  onClick: function onClick(_ref) {
97
79
  var value = _ref.value,
98
- onChange = _ref.onChange;
80
+ onChange = _ref.onChange;
99
81
  // eslint-disable-next-line no-alert
100
82
  var url = prompt('Insert a link to YouTube or RuTube');
101
83
  if (!url) return;
@@ -1 +1 @@
1
- {"version":3,"file":"videoBlock.js","names":["VideoBlock","props","block","data","getData","src","get","getText","videoTypes","re","getUrl","id","detectVideo","url","groups","match","VIDEO_BLOCK","videoBlock","type","component","icon","onClick","value","onChange","prompt","currentBlock","getCurrentBlock","nextEditorState","changeBlock"],"sources":["../../../../src/Editor/blocks/videoBlock.tsx"],"sourcesContent":["import React from 'react';\nimport { EditorBlock } from 'draft-js';\nimport { Video } from '@os-design/core';\nimport { Video as VideoIcon } from '@os-design/icons';\nimport { BlockToolbarItem, BlockProps } from './types';\nimport FigureCaption from './FigureCaption';\nimport changeBlock from '../utils/changeBlock';\nimport getCurrentBlock from '../utils/getCurrentBlock';\nimport Figure from './Figure';\n\nconst VideoBlock: React.FC<BlockProps> = (props) => {\n const { block } = props;\n const data = block.getData();\n const src = data.get('src');\n\n if (!src) return null;\n\n return (\n <Figure>\n <Video src={src} title={block.getText()} />\n <FigureCaption>\n <EditorBlock {...props} />\n </FigureCaption>\n </Figure>\n );\n};\n\nconst videoTypes = [\n /**\n * YouTube. Supported formats:\n * https://www.youtube.com/watch?v=FJIhWbUt600&ab_channel=IlyaOrdin\n * https://www.youtube.com/embed/FJIhWbUt600\n * https://youtu.be/FJIhWbUt600\n */\n {\n re: /^https:\\/\\/(?:www\\.youtube\\.com\\/(?:watch\\?v=|embed\\/)|youtu\\.be\\/)([A-z0-9-_]*).*$/,\n getUrl: (id: string) => `https://www.youtube.com/embed/${id}`,\n },\n /**\n * RuTube. Supported formats:\n * https://rutube.ru/video/d00526135b2b96d272f6d89b486036c1/\n * https://rutube.ru/play/embed/d00526135b2b96d272f6d89b486036c1\n */\n {\n re: /^https:\\/\\/rutube\\.ru\\/(?:video|play\\/embed)\\/([a-z0-9]*)\\/?$/,\n getUrl: (id: string) => `https://rutube.ru/play/embed/${id}`,\n },\n];\n\nconst detectVideo = (url: string) => {\n // eslint-disable-next-line no-restricted-syntax\n for (const { re, getUrl } of videoTypes) {\n const groups = url.match(re);\n if (groups && groups[1]) return getUrl(groups[1]);\n }\n return null;\n};\n\nexport const VIDEO_BLOCK = 'atomic:video';\n\nconst videoBlock: BlockToolbarItem = {\n type: VIDEO_BLOCK,\n component: VideoBlock,\n icon: <VideoIcon />,\n onClick: ({ value, onChange }) => {\n // eslint-disable-next-line no-alert\n const url = prompt('Insert a link to YouTube or RuTube');\n if (!url) return;\n\n const src = detectVideo(url);\n if (!src) return;\n\n const currentBlock = getCurrentBlock(value);\n const nextEditorState = changeBlock(value, currentBlock, VIDEO_BLOCK, {\n src,\n });\n\n onChange(nextEditorState);\n },\n};\n\nexport default videoBlock;\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;;;;;AAEA,IAAMA,UAAgC,GAAG,SAAnCA,UAAmC,CAACC,KAAD,EAAW;EAClD,IAAQC,KAAR,GAAkBD,KAAlB,CAAQC,KAAR;EACA,IAAMC,IAAI,GAAGD,KAAK,CAACE,OAAN,EAAb;EACA,IAAMC,GAAG,GAAGF,IAAI,CAACG,GAAL,CAAS,KAAT,CAAZ;EAEA,IAAI,CAACD,GAAL,EAAU,OAAO,IAAP;EAEV,oBACE,gCAAC,kBAAD,qBACE,gCAAC,WAAD;IAAO,GAAG,EAAEA,GAAZ;IAAiB,KAAK,EAAEH,KAAK,CAACK,OAAN;EAAxB,EADF,eAEE,gCAAC,yBAAD,qBACE,gCAAC,oBAAD,EAAiBN,KAAjB,CADF,CAFF,CADF;AAQD,CAfD;;AAiBA,IAAMO,UAAU,GAAG;AACjB;AACF;AACA;AACA;AACA;AACA;AACE;EACEC,EAAE,EAAE,qFADN;EAEEC,MAAM,EAAE,gBAACC,EAAD;IAAA,+CAAiDA,EAAjD;EAAA;AAFV,CAPiB;AAWjB;AACF;AACA;AACA;AACA;AACE;EACEF,EAAE,EAAE,+DADN;EAEEC,MAAM,EAAE,gBAACC,EAAD;IAAA,8CAAgDA,EAAhD;EAAA;AAFV,CAhBiB,CAAnB;;AAsBA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAACC,GAAD,EAAiB;EACnC;EADmC,2CAENL,UAFM;EAAA;;EAAA;IAEnC,oDAAyC;MAAA;MAAA,IAA5BC,EAA4B,eAA5BA,EAA4B;MAAA,IAAxBC,MAAwB,eAAxBA,MAAwB;MACvC,IAAMI,MAAM,GAAGD,GAAG,CAACE,KAAJ,CAAUN,EAAV,CAAf;MACA,IAAIK,MAAM,IAAIA,MAAM,CAAC,CAAD,CAApB,EAAyB,OAAOJ,MAAM,CAACI,MAAM,CAAC,CAAD,CAAP,CAAb;IAC1B;EALkC;IAAA;EAAA;IAAA;EAAA;;EAMnC,OAAO,IAAP;AACD,CAPD;;AASO,IAAME,WAAW,GAAG,cAApB;;AAEP,IAAMC,UAA4B,GAAG;EACnCC,IAAI,EAAEF,WAD6B;EAEnCG,SAAS,EAAEnB,UAFwB;EAGnCoB,IAAI,eAAE,gCAAC,YAAD,OAH6B;EAInCC,OAAO,EAAE,uBAAyB;IAAA,IAAtBC,KAAsB,QAAtBA,KAAsB;IAAA,IAAfC,QAAe,QAAfA,QAAe;IAChC;IACA,IAAMV,GAAG,GAAGW,MAAM,CAAC,oCAAD,CAAlB;IACA,IAAI,CAACX,GAAL,EAAU;IAEV,IAAMR,GAAG,GAAGO,WAAW,CAACC,GAAD,CAAvB;IACA,IAAI,CAACR,GAAL,EAAU;IAEV,IAAMoB,YAAY,GAAG,IAAAC,2BAAA,EAAgBJ,KAAhB,CAArB;IACA,IAAMK,eAAe,GAAG,IAAAC,uBAAA,EAAYN,KAAZ,EAAmBG,YAAnB,EAAiCT,WAAjC,EAA8C;MACpEX,GAAG,EAAHA;IADoE,CAA9C,CAAxB;IAIAkB,QAAQ,CAACI,eAAD,CAAR;EACD;AAlBkC,CAArC;eAqBeV,U"}
1
+ {"version":3,"file":"videoBlock.js","names":["VideoBlock","props","block","data","getData","src","get","getText","videoTypes","re","getUrl","id","detectVideo","url","groups","match","VIDEO_BLOCK","videoBlock","type","component","icon","onClick","value","onChange","prompt","currentBlock","getCurrentBlock","nextEditorState","changeBlock"],"sources":["../../../../src/Editor/blocks/videoBlock.tsx"],"sourcesContent":["import React from 'react';\nimport { EditorBlock } from 'draft-js';\nimport { Video } from '@os-design/core';\nimport { Video as VideoIcon } from '@os-design/icons';\nimport { BlockToolbarItem, BlockProps } from './types';\nimport FigureCaption from './FigureCaption';\nimport changeBlock from '../utils/changeBlock';\nimport getCurrentBlock from '../utils/getCurrentBlock';\nimport Figure from './Figure';\n\nconst VideoBlock: React.FC<BlockProps> = (props) => {\n const { block } = props;\n const data = block.getData();\n const src = data.get('src');\n\n if (!src) return null;\n\n return (\n <Figure>\n <Video src={src} title={block.getText()} />\n <FigureCaption>\n <EditorBlock {...props} />\n </FigureCaption>\n </Figure>\n );\n};\n\nconst videoTypes = [\n /**\n * YouTube. Supported formats:\n * https://www.youtube.com/watch?v=FJIhWbUt600&ab_channel=IlyaOrdin\n * https://www.youtube.com/embed/FJIhWbUt600\n * https://youtu.be/FJIhWbUt600\n */\n {\n re: /^https:\\/\\/(?:www\\.youtube\\.com\\/(?:watch\\?v=|embed\\/)|youtu\\.be\\/)([A-z0-9-_]*).*$/,\n getUrl: (id: string) => `https://www.youtube.com/embed/${id}`,\n },\n /**\n * RuTube. Supported formats:\n * https://rutube.ru/video/d00526135b2b96d272f6d89b486036c1/\n * https://rutube.ru/play/embed/d00526135b2b96d272f6d89b486036c1\n */\n {\n re: /^https:\\/\\/rutube\\.ru\\/(?:video|play\\/embed)\\/([a-z0-9]*)\\/?$/,\n getUrl: (id: string) => `https://rutube.ru/play/embed/${id}`,\n },\n];\n\nconst detectVideo = (url: string) => {\n // eslint-disable-next-line no-restricted-syntax\n for (const { re, getUrl } of videoTypes) {\n const groups = url.match(re);\n if (groups && groups[1]) return getUrl(groups[1]);\n }\n return null;\n};\n\nexport const VIDEO_BLOCK = 'atomic:video';\n\nconst videoBlock: BlockToolbarItem = {\n type: VIDEO_BLOCK,\n component: VideoBlock,\n icon: <VideoIcon />,\n onClick: ({ value, onChange }) => {\n // eslint-disable-next-line no-alert\n const url = prompt('Insert a link to YouTube or RuTube');\n if (!url) return;\n\n const src = detectVideo(url);\n if (!src) return;\n\n const currentBlock = getCurrentBlock(value);\n const nextEditorState = changeBlock(value, currentBlock, VIDEO_BLOCK, {\n src,\n });\n\n onChange(nextEditorState);\n },\n};\n\nexport default videoBlock;\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAA8B;AAAA;AAAA;AAAA;AAE9B,IAAMA,UAAgC,GAAG,SAAnCA,UAAgC,CAAIC,KAAK,EAAK;EAClD,IAAQC,KAAK,GAAKD,KAAK,CAAfC,KAAK;EACb,IAAMC,IAAI,GAAGD,KAAK,CAACE,OAAO,EAAE;EAC5B,IAAMC,GAAG,GAAGF,IAAI,CAACG,GAAG,CAAC,KAAK,CAAC;EAE3B,IAAI,CAACD,GAAG,EAAE,OAAO,IAAI;EAErB,oBACE,gCAAC,kBAAM,qBACL,gCAAC,WAAK;IAAC,GAAG,EAAEA,GAAI;IAAC,KAAK,EAAEH,KAAK,CAACK,OAAO;EAAG,EAAG,eAC3C,gCAAC,yBAAa,qBACZ,gCAAC,oBAAW,EAAKN,KAAK,CAAI,CACZ,CACT;AAEb,CAAC;AAED,IAAMO,UAAU,GAAG;AACjB;AACF;AACA;AACA;AACA;AACA;AACE;EACEC,EAAE,EAAE,qFAAqF;EACzFC,MAAM,EAAE,gBAACC,EAAU;IAAA,+CAAsCA,EAAE;EAAA;AAC7D,CAAC;AACD;AACF;AACA;AACA;AACA;AACE;EACEF,EAAE,EAAE,+DAA+D;EACnEC,MAAM,EAAE,gBAACC,EAAU;IAAA,8CAAqCA,EAAE;EAAA;AAC5D,CAAC,CACF;AAED,IAAMC,WAAW,GAAG,SAAdA,WAAW,CAAIC,GAAW,EAAK;EACnC;EAAA,2CAC6BL,UAAU;IAAA;EAAA;IAAvC,oDAAyC;MAAA;QAA5BC,EAAE,eAAFA,EAAE;QAAEC,MAAM,eAANA,MAAM;MACrB,IAAMI,MAAM,GAAGD,GAAG,CAACE,KAAK,CAACN,EAAE,CAAC;MAC5B,IAAIK,MAAM,IAAIA,MAAM,CAAC,CAAC,CAAC,EAAE,OAAOJ,MAAM,CAACI,MAAM,CAAC,CAAC,CAAC,CAAC;IACnD;EAAC;IAAA;EAAA;IAAA;EAAA;EACD,OAAO,IAAI;AACb,CAAC;AAEM,IAAME,WAAW,GAAG,cAAc;AAAC;AAE1C,IAAMC,UAA4B,GAAG;EACnCC,IAAI,EAAEF,WAAW;EACjBG,SAAS,EAAEnB,UAAU;EACrBoB,IAAI,eAAE,gCAAC,YAAS,OAAG;EACnBC,OAAO,EAAE,uBAAyB;IAAA,IAAtBC,KAAK,QAALA,KAAK;MAAEC,QAAQ,QAARA,QAAQ;IACzB;IACA,IAAMV,GAAG,GAAGW,MAAM,CAAC,oCAAoC,CAAC;IACxD,IAAI,CAACX,GAAG,EAAE;IAEV,IAAMR,GAAG,GAAGO,WAAW,CAACC,GAAG,CAAC;IAC5B,IAAI,CAACR,GAAG,EAAE;IAEV,IAAMoB,YAAY,GAAG,IAAAC,2BAAe,EAACJ,KAAK,CAAC;IAC3C,IAAMK,eAAe,GAAG,IAAAC,uBAAW,EAACN,KAAK,EAAEG,YAAY,EAAET,WAAW,EAAE;MACpEX,GAAG,EAAHA;IACF,CAAC,CAAC;IAEFkB,QAAQ,CAACI,eAAe,CAAC;EAC3B;AACF,CAAC;AAAC,eAEaV,UAAU;AAAA"}
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
-
8
7
  var _core = require("@os-design/core");
9
-
10
8
  var _react = _interopRequireDefault(require("react"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
-
14
10
  var linkDecorator = {
15
11
  strategy: function strategy(contentBlock, callback, contentState) {
16
12
  return contentBlock.findEntityRanges(function (character) {
@@ -20,12 +16,10 @@ var linkDecorator = {
20
16
  },
21
17
  component: function component(_ref) {
22
18
  var contentState = _ref.contentState,
23
- entityKey = _ref.entityKey,
24
- children = _ref.children;
25
-
19
+ entityKey = _ref.entityKey,
20
+ children = _ref.children;
26
21
  var _contentState$getEnti = contentState.getEntity(entityKey).getData(),
27
- url = _contentState$getEnti.url;
28
-
22
+ url = _contentState$getEnti.url;
29
23
  return /*#__PURE__*/_react["default"].createElement(_core.Link, {
30
24
  href: url
31
25
  }, children);
@@ -1 +1 @@
1
- {"version":3,"file":"linkDecorator.js","names":["linkDecorator","strategy","contentBlock","callback","contentState","findEntityRanges","character","entityKey","getEntity","getType","component","children","getData","url"],"sources":["../../../../src/Editor/decorators/linkDecorator.tsx"],"sourcesContent":["import { DraftDecorator } from 'draft-js';\nimport { Link } from '@os-design/core';\nimport React from 'react';\n\nconst linkDecorator: DraftDecorator = {\n strategy: (contentBlock, callback, contentState) =>\n contentBlock.findEntityRanges((character) => {\n const entityKey = character.getEntity();\n return (\n entityKey !== null &&\n contentState.getEntity(entityKey).getType() === 'LINK'\n );\n }, callback),\n\n component: ({ contentState, entityKey, children }) => {\n const { url } = contentState.getEntity(entityKey).getData();\n return <Link href={url}>{children}</Link>;\n },\n};\n\nexport default linkDecorator;\n"],"mappings":";;;;;;;AACA;;AACA;;;;AAEA,IAAMA,aAA6B,GAAG;EACpCC,QAAQ,EAAE,kBAACC,YAAD,EAAeC,QAAf,EAAyBC,YAAzB;IAAA,OACRF,YAAY,CAACG,gBAAb,CAA8B,UAACC,SAAD,EAAe;MAC3C,IAAMC,SAAS,GAAGD,SAAS,CAACE,SAAV,EAAlB;MACA,OACED,SAAS,KAAK,IAAd,IACAH,YAAY,CAACI,SAAb,CAAuBD,SAAvB,EAAkCE,OAAlC,OAAgD,MAFlD;IAID,CAND,EAMGN,QANH,CADQ;EAAA,CAD0B;EAUpCO,SAAS,EAAE,yBAA2C;IAAA,IAAxCN,YAAwC,QAAxCA,YAAwC;IAAA,IAA1BG,SAA0B,QAA1BA,SAA0B;IAAA,IAAfI,QAAe,QAAfA,QAAe;;IACpD,4BAAgBP,YAAY,CAACI,SAAb,CAAuBD,SAAvB,EAAkCK,OAAlC,EAAhB;IAAA,IAAQC,GAAR,yBAAQA,GAAR;;IACA,oBAAO,gCAAC,UAAD;MAAM,IAAI,EAAEA;IAAZ,GAAkBF,QAAlB,CAAP;EACD;AAbmC,CAAtC;eAgBeX,a"}
1
+ {"version":3,"file":"linkDecorator.js","names":["linkDecorator","strategy","contentBlock","callback","contentState","findEntityRanges","character","entityKey","getEntity","getType","component","children","getData","url"],"sources":["../../../../src/Editor/decorators/linkDecorator.tsx"],"sourcesContent":["import { DraftDecorator } from 'draft-js';\nimport { Link } from '@os-design/core';\nimport React from 'react';\n\nconst linkDecorator: DraftDecorator = {\n strategy: (contentBlock, callback, contentState) =>\n contentBlock.findEntityRanges((character) => {\n const entityKey = character.getEntity();\n return (\n entityKey !== null &&\n contentState.getEntity(entityKey).getType() === 'LINK'\n );\n }, callback),\n\n component: ({ contentState, entityKey, children }) => {\n const { url } = contentState.getEntity(entityKey).getData();\n return <Link href={url}>{children}</Link>;\n },\n};\n\nexport default linkDecorator;\n"],"mappings":";;;;;;AACA;AACA;AAA0B;AAE1B,IAAMA,aAA6B,GAAG;EACpCC,QAAQ,EAAE,kBAACC,YAAY,EAAEC,QAAQ,EAAEC,YAAY;IAAA,OAC7CF,YAAY,CAACG,gBAAgB,CAAC,UAACC,SAAS,EAAK;MAC3C,IAAMC,SAAS,GAAGD,SAAS,CAACE,SAAS,EAAE;MACvC,OACED,SAAS,KAAK,IAAI,IAClBH,YAAY,CAACI,SAAS,CAACD,SAAS,CAAC,CAACE,OAAO,EAAE,KAAK,MAAM;IAE1D,CAAC,EAAEN,QAAQ,CAAC;EAAA;EAEdO,SAAS,EAAE,yBAA2C;IAAA,IAAxCN,YAAY,QAAZA,YAAY;MAAEG,SAAS,QAATA,SAAS;MAAEI,QAAQ,QAARA,QAAQ;IAC7C,4BAAgBP,YAAY,CAACI,SAAS,CAACD,SAAS,CAAC,CAACK,OAAO,EAAE;MAAnDC,GAAG,yBAAHA,GAAG;IACX,oBAAO,gCAAC,UAAI;MAAC,IAAI,EAAEA;IAAI,GAAEF,QAAQ,CAAQ;EAC3C;AACF,CAAC;AAAC,eAEaX,aAAa;AAAA"}
@@ -4,53 +4,39 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
-
8
7
  var _react = require("react");
9
-
10
8
  var _getSelectedBlockElement = _interopRequireDefault(require("../utils/getSelectedBlockElement"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
-
14
10
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
15
-
16
11
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
17
-
18
12
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
19
-
20
13
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
21
-
22
14
  function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
23
-
24
15
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
25
-
26
16
  /**
27
17
  * Updates the visibility of the block toolbar.
28
18
  */
29
19
  var useBlockToolbarProps = function useBlockToolbarProps(value, show) {
30
20
  var _useState = (0, _react.useState)({
31
- top: 0,
32
- left: 0,
33
- width: 0,
34
- height: 0
35
- }),
36
- _useState2 = _slicedToArray(_useState, 2),
37
- trigger = _useState2[0],
38
- setTrigger = _useState2[1];
39
-
21
+ top: 0,
22
+ left: 0,
23
+ width: 0,
24
+ height: 0
25
+ }),
26
+ _useState2 = _slicedToArray(_useState, 2),
27
+ trigger = _useState2[0],
28
+ setTrigger = _useState2[1];
40
29
  var _useState3 = (0, _react.useState)(false),
41
- _useState4 = _slicedToArray(_useState3, 2),
42
- visible = _useState4[0],
43
- setVisible = _useState4[1];
44
-
30
+ _useState4 = _slicedToArray(_useState3, 2),
31
+ visible = _useState4[0],
32
+ setVisible = _useState4[1];
45
33
  (0, _react.useEffect)(function () {
46
34
  if (!show || !value) return;
47
35
  var selectedBlockElement = (0, _getSelectedBlockElement["default"])();
48
-
49
36
  if (!selectedBlockElement) {
50
37
  setVisible(false);
51
38
  return;
52
39
  }
53
-
54
40
  var selectionState = value.getSelection();
55
41
  var currentBlockKey = selectionState.getStartKey();
56
42
  var contentState = value.getCurrentContent();
@@ -58,17 +44,14 @@ var useBlockToolbarProps = function useBlockToolbarProps(value, show) {
58
44
  var lineNumber = contentState.getBlockMap().keySeq().findIndex(function (k) {
59
45
  return k === currentBlockKey;
60
46
  });
61
-
62
47
  if (currentBlock.getType() !== 'unstyled' || currentBlock.getLength() > 0 || lineNumber === 0) {
63
48
  setVisible(false);
64
49
  return;
65
50
  }
66
-
67
51
  var _selectedBlockElement = selectedBlockElement.getBoundingClientRect(),
68
- top = _selectedBlockElement.top,
69
- left = _selectedBlockElement.left,
70
- height = _selectedBlockElement.height;
71
-
52
+ top = _selectedBlockElement.top,
53
+ left = _selectedBlockElement.left,
54
+ height = _selectedBlockElement.height;
72
55
  setTrigger({
73
56
  top: top,
74
57
  left: left,
@@ -82,7 +65,6 @@ var useBlockToolbarProps = function useBlockToolbarProps(value, show) {
82
65
  visible: visible
83
66
  };
84
67
  };
85
-
86
68
  var _default = useBlockToolbarProps;
87
69
  exports["default"] = _default;
88
70
  //# sourceMappingURL=useBlockToolbarProps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBlockToolbarProps.js","names":["useBlockToolbarProps","value","show","useState","top","left","width","height","trigger","setTrigger","visible","setVisible","useEffect","selectedBlockElement","getSelectedBlockElement","selectionState","getSelection","currentBlockKey","getStartKey","contentState","getCurrentContent","currentBlock","getBlockForKey","lineNumber","getBlockMap","keySeq","findIndex","k","getType","getLength","getBoundingClientRect"],"sources":["../../../../src/Editor/hooks/useBlockToolbarProps.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { EditorState } from 'draft-js';\nimport getSelectedBlockElement from '../utils/getSelectedBlockElement';\n\ninterface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\ninterface UseBlockToolbarPropsRes {\n trigger: Rect;\n visible: boolean;\n}\n\n/**\n * Updates the visibility of the block toolbar.\n */\nconst useBlockToolbarProps = (\n value: EditorState,\n show: boolean\n): UseBlockToolbarPropsRes => {\n const [trigger, setTrigger] = useState({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n });\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (!show || !value) return;\n\n const selectedBlockElement = getSelectedBlockElement();\n if (!selectedBlockElement) {\n setVisible(false);\n return;\n }\n\n const selectionState = value.getSelection();\n const currentBlockKey = selectionState.getStartKey();\n const contentState = value.getCurrentContent();\n const currentBlock = contentState.getBlockForKey(currentBlockKey);\n const lineNumber = contentState\n .getBlockMap()\n .keySeq()\n .findIndex((k) => k === currentBlockKey);\n\n if (\n currentBlock.getType() !== 'unstyled' ||\n currentBlock.getLength() > 0 ||\n lineNumber === 0\n ) {\n setVisible(false);\n return;\n }\n\n const { top, left, height } = selectedBlockElement.getBoundingClientRect();\n setTrigger({\n top,\n left,\n width: 0,\n height,\n });\n setVisible(true);\n }, [show, value]);\n\n return { trigger, visible };\n};\n\nexport default useBlockToolbarProps;\n"],"mappings":";;;;;;;AAAA;;AAEA;;;;;;;;;;;;;;;;AAcA;AACA;AACA;AACA,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAuB,CAC3BC,KAD2B,EAE3BC,IAF2B,EAGC;EAC5B,gBAA8B,IAAAC,eAAA,EAAS;IACrCC,GAAG,EAAE,CADgC;IAErCC,IAAI,EAAE,CAF+B;IAGrCC,KAAK,EAAE,CAH8B;IAIrCC,MAAM,EAAE;EAJ6B,CAAT,CAA9B;EAAA;EAAA,IAAOC,OAAP;EAAA,IAAgBC,UAAhB;;EAMA,iBAA8B,IAAAN,eAAA,EAAS,KAAT,CAA9B;EAAA;EAAA,IAAOO,OAAP;EAAA,IAAgBC,UAAhB;;EAEA,IAAAC,gBAAA,EAAU,YAAM;IACd,IAAI,CAACV,IAAD,IAAS,CAACD,KAAd,EAAqB;IAErB,IAAMY,oBAAoB,GAAG,IAAAC,mCAAA,GAA7B;;IACA,IAAI,CAACD,oBAAL,EAA2B;MACzBF,UAAU,CAAC,KAAD,CAAV;MACA;IACD;;IAED,IAAMI,cAAc,GAAGd,KAAK,CAACe,YAAN,EAAvB;IACA,IAAMC,eAAe,GAAGF,cAAc,CAACG,WAAf,EAAxB;IACA,IAAMC,YAAY,GAAGlB,KAAK,CAACmB,iBAAN,EAArB;IACA,IAAMC,YAAY,GAAGF,YAAY,CAACG,cAAb,CAA4BL,eAA5B,CAArB;IACA,IAAMM,UAAU,GAAGJ,YAAY,CAC5BK,WADgB,GAEhBC,MAFgB,GAGhBC,SAHgB,CAGN,UAACC,CAAD;MAAA,OAAOA,CAAC,KAAKV,eAAb;IAAA,CAHM,CAAnB;;IAKA,IACEI,YAAY,CAACO,OAAb,OAA2B,UAA3B,IACAP,YAAY,CAACQ,SAAb,KAA2B,CAD3B,IAEAN,UAAU,KAAK,CAHjB,EAIE;MACAZ,UAAU,CAAC,KAAD,CAAV;MACA;IACD;;IAED,4BAA8BE,oBAAoB,CAACiB,qBAArB,EAA9B;IAAA,IAAQ1B,GAAR,yBAAQA,GAAR;IAAA,IAAaC,IAAb,yBAAaA,IAAb;IAAA,IAAmBE,MAAnB,yBAAmBA,MAAnB;;IACAE,UAAU,CAAC;MACTL,GAAG,EAAHA,GADS;MAETC,IAAI,EAAJA,IAFS;MAGTC,KAAK,EAAE,CAHE;MAITC,MAAM,EAANA;IAJS,CAAD,CAAV;IAMAI,UAAU,CAAC,IAAD,CAAV;EACD,CAnCD,EAmCG,CAACT,IAAD,EAAOD,KAAP,CAnCH;EAqCA,OAAO;IAAEO,OAAO,EAAPA,OAAF;IAAWE,OAAO,EAAPA;EAAX,CAAP;AACD,CAlDD;;eAoDeV,oB"}
1
+ {"version":3,"file":"useBlockToolbarProps.js","names":["useBlockToolbarProps","value","show","useState","top","left","width","height","trigger","setTrigger","visible","setVisible","useEffect","selectedBlockElement","getSelectedBlockElement","selectionState","getSelection","currentBlockKey","getStartKey","contentState","getCurrentContent","currentBlock","getBlockForKey","lineNumber","getBlockMap","keySeq","findIndex","k","getType","getLength","getBoundingClientRect"],"sources":["../../../../src/Editor/hooks/useBlockToolbarProps.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { EditorState } from 'draft-js';\nimport getSelectedBlockElement from '../utils/getSelectedBlockElement';\n\ninterface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\ninterface UseBlockToolbarPropsRes {\n trigger: Rect;\n visible: boolean;\n}\n\n/**\n * Updates the visibility of the block toolbar.\n */\nconst useBlockToolbarProps = (\n value: EditorState,\n show: boolean\n): UseBlockToolbarPropsRes => {\n const [trigger, setTrigger] = useState({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n });\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (!show || !value) return;\n\n const selectedBlockElement = getSelectedBlockElement();\n if (!selectedBlockElement) {\n setVisible(false);\n return;\n }\n\n const selectionState = value.getSelection();\n const currentBlockKey = selectionState.getStartKey();\n const contentState = value.getCurrentContent();\n const currentBlock = contentState.getBlockForKey(currentBlockKey);\n const lineNumber = contentState\n .getBlockMap()\n .keySeq()\n .findIndex((k) => k === currentBlockKey);\n\n if (\n currentBlock.getType() !== 'unstyled' ||\n currentBlock.getLength() > 0 ||\n lineNumber === 0\n ) {\n setVisible(false);\n return;\n }\n\n const { top, left, height } = selectedBlockElement.getBoundingClientRect();\n setTrigger({\n top,\n left,\n width: 0,\n height,\n });\n setVisible(true);\n }, [show, value]);\n\n return { trigger, visible };\n};\n\nexport default useBlockToolbarProps;\n"],"mappings":";;;;;;AAAA;AAEA;AAAuE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcvE;AACA;AACA;AACA,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAoB,CACxBC,KAAkB,EAClBC,IAAa,EACe;EAC5B,gBAA8B,IAAAC,eAAQ,EAAC;MACrCC,GAAG,EAAE,CAAC;MACNC,IAAI,EAAE,CAAC;MACPC,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE;IACV,CAAC,CAAC;IAAA;IALKC,OAAO;IAAEC,UAAU;EAM1B,iBAA8B,IAAAN,eAAQ,EAAC,KAAK,CAAC;IAAA;IAAtCO,OAAO;IAAEC,UAAU;EAE1B,IAAAC,gBAAS,EAAC,YAAM;IACd,IAAI,CAACV,IAAI,IAAI,CAACD,KAAK,EAAE;IAErB,IAAMY,oBAAoB,GAAG,IAAAC,mCAAuB,GAAE;IACtD,IAAI,CAACD,oBAAoB,EAAE;MACzBF,UAAU,CAAC,KAAK,CAAC;MACjB;IACF;IAEA,IAAMI,cAAc,GAAGd,KAAK,CAACe,YAAY,EAAE;IAC3C,IAAMC,eAAe,GAAGF,cAAc,CAACG,WAAW,EAAE;IACpD,IAAMC,YAAY,GAAGlB,KAAK,CAACmB,iBAAiB,EAAE;IAC9C,IAAMC,YAAY,GAAGF,YAAY,CAACG,cAAc,CAACL,eAAe,CAAC;IACjE,IAAMM,UAAU,GAAGJ,YAAY,CAC5BK,WAAW,EAAE,CACbC,MAAM,EAAE,CACRC,SAAS,CAAC,UAACC,CAAC;MAAA,OAAKA,CAAC,KAAKV,eAAe;IAAA,EAAC;IAE1C,IACEI,YAAY,CAACO,OAAO,EAAE,KAAK,UAAU,IACrCP,YAAY,CAACQ,SAAS,EAAE,GAAG,CAAC,IAC5BN,UAAU,KAAK,CAAC,EAChB;MACAZ,UAAU,CAAC,KAAK,CAAC;MACjB;IACF;IAEA,4BAA8BE,oBAAoB,CAACiB,qBAAqB,EAAE;MAAlE1B,GAAG,yBAAHA,GAAG;MAAEC,IAAI,yBAAJA,IAAI;MAAEE,MAAM,yBAANA,MAAM;IACzBE,UAAU,CAAC;MACTL,GAAG,EAAHA,GAAG;MACHC,IAAI,EAAJA,IAAI;MACJC,KAAK,EAAE,CAAC;MACRC,MAAM,EAANA;IACF,CAAC,CAAC;IACFI,UAAU,CAAC,IAAI,CAAC;EAClB,CAAC,EAAE,CAACT,IAAI,EAAED,KAAK,CAAC,CAAC;EAEjB,OAAO;IAAEO,OAAO,EAAPA,OAAO;IAAEE,OAAO,EAAPA;EAAQ,CAAC;AAC7B,CAAC;AAAC,eAEaV,oBAAoB;AAAA"}
@@ -4,33 +4,24 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
-
8
7
  var _react = require("react");
9
-
10
8
  var _draftJs = require("draft-js");
11
-
12
9
  /**
13
10
  * Pastes only text if the current block is atomic.
14
11
  */
15
12
  var usePastedTextHandler = function usePastedTextHandler(onChange, handler) {
16
13
  return (0, _react.useCallback)(function (text, html, editorState) {
17
14
  var currentBlockType = _draftJs.RichUtils.getCurrentBlockType(editorState);
18
-
19
15
  if (currentBlockType.startsWith('atomic')) {
20
16
  var contentState = editorState.getCurrentContent();
21
-
22
17
  var nextContentState = _draftJs.Modifier.insertText(contentState, editorState.getSelection(), text);
23
-
24
18
  var nextEditorState = _draftJs.EditorState.push(editorState, nextContentState, 'insert-characters');
25
-
26
19
  onChange(nextEditorState);
27
20
  return 'handled';
28
21
  }
29
-
30
22
  return handler(text, html, editorState);
31
23
  }, [onChange, handler]);
32
24
  };
33
-
34
25
  var _default = usePastedTextHandler;
35
26
  exports["default"] = _default;
36
27
  //# sourceMappingURL=usePastedTextHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePastedTextHandler.js","names":["usePastedTextHandler","onChange","handler","useCallback","text","html","editorState","currentBlockType","RichUtils","getCurrentBlockType","startsWith","contentState","getCurrentContent","nextContentState","Modifier","insertText","getSelection","nextEditorState","EditorState","push"],"sources":["../../../../src/Editor/hooks/usePastedTextHandler.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport {\n DraftHandleValue,\n EditorProps as DraftEditorProps,\n EditorState,\n Modifier,\n RichUtils,\n} from 'draft-js';\n\ntype UsePastedTextHandlerRes = Exclude<\n DraftEditorProps['handlePastedText'],\n undefined\n>;\n\n/**\n * Pastes only text if the current block is atomic.\n */\nconst usePastedTextHandler = (\n onChange: (value: EditorState) => void,\n handler: UsePastedTextHandlerRes\n): UsePastedTextHandlerRes =>\n useCallback<UsePastedTextHandlerRes>(\n (text, html, editorState): DraftHandleValue => {\n const currentBlockType = RichUtils.getCurrentBlockType(editorState);\n\n if (currentBlockType.startsWith('atomic')) {\n const contentState = editorState.getCurrentContent();\n const nextContentState = Modifier.insertText(\n contentState,\n editorState.getSelection(),\n text\n );\n const nextEditorState = EditorState.push(\n editorState,\n nextContentState,\n 'insert-characters'\n );\n onChange(nextEditorState);\n return 'handled';\n }\n\n return handler(text, html, editorState);\n },\n [onChange, handler]\n );\n\nexport default usePastedTextHandler;\n"],"mappings":";;;;;;;AAAA;;AACA;;AAaA;AACA;AACA;AACA,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAuB,CAC3BC,QAD2B,EAE3BC,OAF2B;EAAA,OAI3B,IAAAC,kBAAA,EACE,UAACC,IAAD,EAAOC,IAAP,EAAaC,WAAb,EAA+C;IAC7C,IAAMC,gBAAgB,GAAGC,kBAAA,CAAUC,mBAAV,CAA8BH,WAA9B,CAAzB;;IAEA,IAAIC,gBAAgB,CAACG,UAAjB,CAA4B,QAA5B,CAAJ,EAA2C;MACzC,IAAMC,YAAY,GAAGL,WAAW,CAACM,iBAAZ,EAArB;;MACA,IAAMC,gBAAgB,GAAGC,iBAAA,CAASC,UAAT,CACvBJ,YADuB,EAEvBL,WAAW,CAACU,YAAZ,EAFuB,EAGvBZ,IAHuB,CAAzB;;MAKA,IAAMa,eAAe,GAAGC,oBAAA,CAAYC,IAAZ,CACtBb,WADsB,EAEtBO,gBAFsB,EAGtB,mBAHsB,CAAxB;;MAKAZ,QAAQ,CAACgB,eAAD,CAAR;MACA,OAAO,SAAP;IACD;;IAED,OAAOf,OAAO,CAACE,IAAD,EAAOC,IAAP,EAAaC,WAAb,CAAd;EACD,CArBH,EAsBE,CAACL,QAAD,EAAWC,OAAX,CAtBF,CAJ2B;AAAA,CAA7B;;eA6BeF,oB"}
1
+ {"version":3,"file":"usePastedTextHandler.js","names":["usePastedTextHandler","onChange","handler","useCallback","text","html","editorState","currentBlockType","RichUtils","getCurrentBlockType","startsWith","contentState","getCurrentContent","nextContentState","Modifier","insertText","getSelection","nextEditorState","EditorState","push"],"sources":["../../../../src/Editor/hooks/usePastedTextHandler.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport {\n DraftHandleValue,\n EditorProps as DraftEditorProps,\n EditorState,\n Modifier,\n RichUtils,\n} from 'draft-js';\n\ntype UsePastedTextHandlerRes = Exclude<\n DraftEditorProps['handlePastedText'],\n undefined\n>;\n\n/**\n * Pastes only text if the current block is atomic.\n */\nconst usePastedTextHandler = (\n onChange: (value: EditorState) => void,\n handler: UsePastedTextHandlerRes\n): UsePastedTextHandlerRes =>\n useCallback<UsePastedTextHandlerRes>(\n (text, html, editorState): DraftHandleValue => {\n const currentBlockType = RichUtils.getCurrentBlockType(editorState);\n\n if (currentBlockType.startsWith('atomic')) {\n const contentState = editorState.getCurrentContent();\n const nextContentState = Modifier.insertText(\n contentState,\n editorState.getSelection(),\n text\n );\n const nextEditorState = EditorState.push(\n editorState,\n nextContentState,\n 'insert-characters'\n );\n onChange(nextEditorState);\n return 'handled';\n }\n\n return handler(text, html, editorState);\n },\n [onChange, handler]\n );\n\nexport default usePastedTextHandler;\n"],"mappings":";;;;;;AAAA;AACA;AAaA;AACA;AACA;AACA,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAoB,CACxBC,QAAsC,EACtCC,OAAgC;EAAA,OAEhC,IAAAC,kBAAW,EACT,UAACC,IAAI,EAAEC,IAAI,EAAEC,WAAW,EAAuB;IAC7C,IAAMC,gBAAgB,GAAGC,kBAAS,CAACC,mBAAmB,CAACH,WAAW,CAAC;IAEnE,IAAIC,gBAAgB,CAACG,UAAU,CAAC,QAAQ,CAAC,EAAE;MACzC,IAAMC,YAAY,GAAGL,WAAW,CAACM,iBAAiB,EAAE;MACpD,IAAMC,gBAAgB,GAAGC,iBAAQ,CAACC,UAAU,CAC1CJ,YAAY,EACZL,WAAW,CAACU,YAAY,EAAE,EAC1BZ,IAAI,CACL;MACD,IAAMa,eAAe,GAAGC,oBAAW,CAACC,IAAI,CACtCb,WAAW,EACXO,gBAAgB,EAChB,mBAAmB,CACpB;MACDZ,QAAQ,CAACgB,eAAe,CAAC;MACzB,OAAO,SAAS;IAClB;IAEA,OAAOf,OAAO,CAACE,IAAI,EAAEC,IAAI,EAAEC,WAAW,CAAC;EACzC,CAAC,EACD,CAACL,QAAQ,EAAEC,OAAO,CAAC,CACpB;AAAA;AAAC,eAEWF,oBAAoB;AAAA"}
@@ -4,15 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
-
8
7
  var _react = require("react");
9
-
10
8
  var _getCurrentBlock = _interopRequireDefault(require("../utils/getCurrentBlock"));
11
-
12
9
  var _addNewBlockAt = _interopRequireDefault(require("../utils/addNewBlockAt"));
13
-
14
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
-
16
11
  /**
17
12
  * Adds a new unstyled block if the user presses the return key.
18
13
  */
@@ -20,17 +15,14 @@ var useReturnHandler = function useReturnHandler(onChange, handler) {
20
15
  return (0, _react.useCallback)(function (e, editorState) {
21
16
  var currentBlock = (0, _getCurrentBlock["default"])(editorState);
22
17
  var currentBlockType = currentBlock.getType();
23
-
24
18
  if (currentBlockType.startsWith('atomic') || currentBlockType.startsWith('header')) {
25
19
  var nextEditorState = (0, _addNewBlockAt["default"])(editorState, currentBlock.getKey());
26
20
  onChange(nextEditorState);
27
21
  return 'handled';
28
22
  }
29
-
30
23
  return handler(e, editorState);
31
24
  }, [onChange, handler]);
32
25
  };
33
-
34
26
  var _default = useReturnHandler;
35
27
  exports["default"] = _default;
36
28
  //# sourceMappingURL=useReturnHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useReturnHandler.js","names":["useReturnHandler","onChange","handler","useCallback","e","editorState","currentBlock","getCurrentBlock","currentBlockType","getType","startsWith","nextEditorState","addNewBlockAt","getKey"],"sources":["../../../../src/Editor/hooks/useReturnHandler.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { EditorProps as DraftEditorProps, EditorState } from 'draft-js';\nimport getCurrentBlock from '../utils/getCurrentBlock';\nimport addNewBlockAt from '../utils/addNewBlockAt';\n\ntype UseReturnHandlerRes = Exclude<DraftEditorProps['handleReturn'], undefined>;\n\n/**\n * Adds a new unstyled block if the user presses the return key.\n */\nconst useReturnHandler = (\n onChange: (value: EditorState) => void,\n handler: UseReturnHandlerRes\n): UseReturnHandlerRes =>\n useCallback<UseReturnHandlerRes>(\n (e, editorState) => {\n const currentBlock = getCurrentBlock(editorState);\n const currentBlockType = currentBlock.getType();\n\n if (\n currentBlockType.startsWith('atomic') ||\n currentBlockType.startsWith('header')\n ) {\n const nextEditorState = addNewBlockAt(\n editorState,\n currentBlock.getKey()\n );\n onChange(nextEditorState);\n return 'handled';\n }\n\n return handler(e, editorState);\n },\n [onChange, handler]\n );\n\nexport default useReturnHandler;\n"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;;;AAIA;AACA;AACA;AACA,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAmB,CACvBC,QADuB,EAEvBC,OAFuB;EAAA,OAIvB,IAAAC,kBAAA,EACE,UAACC,CAAD,EAAIC,WAAJ,EAAoB;IAClB,IAAMC,YAAY,GAAG,IAAAC,2BAAA,EAAgBF,WAAhB,CAArB;IACA,IAAMG,gBAAgB,GAAGF,YAAY,CAACG,OAAb,EAAzB;;IAEA,IACED,gBAAgB,CAACE,UAAjB,CAA4B,QAA5B,KACAF,gBAAgB,CAACE,UAAjB,CAA4B,QAA5B,CAFF,EAGE;MACA,IAAMC,eAAe,GAAG,IAAAC,yBAAA,EACtBP,WADsB,EAEtBC,YAAY,CAACO,MAAb,EAFsB,CAAxB;MAIAZ,QAAQ,CAACU,eAAD,CAAR;MACA,OAAO,SAAP;IACD;;IAED,OAAOT,OAAO,CAACE,CAAD,EAAIC,WAAJ,CAAd;EACD,CAlBH,EAmBE,CAACJ,QAAD,EAAWC,OAAX,CAnBF,CAJuB;AAAA,CAAzB;;eA0BeF,gB"}
1
+ {"version":3,"file":"useReturnHandler.js","names":["useReturnHandler","onChange","handler","useCallback","e","editorState","currentBlock","getCurrentBlock","currentBlockType","getType","startsWith","nextEditorState","addNewBlockAt","getKey"],"sources":["../../../../src/Editor/hooks/useReturnHandler.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { EditorProps as DraftEditorProps, EditorState } from 'draft-js';\nimport getCurrentBlock from '../utils/getCurrentBlock';\nimport addNewBlockAt from '../utils/addNewBlockAt';\n\ntype UseReturnHandlerRes = Exclude<DraftEditorProps['handleReturn'], undefined>;\n\n/**\n * Adds a new unstyled block if the user presses the return key.\n */\nconst useReturnHandler = (\n onChange: (value: EditorState) => void,\n handler: UseReturnHandlerRes\n): UseReturnHandlerRes =>\n useCallback<UseReturnHandlerRes>(\n (e, editorState) => {\n const currentBlock = getCurrentBlock(editorState);\n const currentBlockType = currentBlock.getType();\n\n if (\n currentBlockType.startsWith('atomic') ||\n currentBlockType.startsWith('header')\n ) {\n const nextEditorState = addNewBlockAt(\n editorState,\n currentBlock.getKey()\n );\n onChange(nextEditorState);\n return 'handled';\n }\n\n return handler(e, editorState);\n },\n [onChange, handler]\n );\n\nexport default useReturnHandler;\n"],"mappings":";;;;;;AAAA;AAEA;AACA;AAAmD;AAInD;AACA;AACA;AACA,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAgB,CACpBC,QAAsC,EACtCC,OAA4B;EAAA,OAE5B,IAAAC,kBAAW,EACT,UAACC,CAAC,EAAEC,WAAW,EAAK;IAClB,IAAMC,YAAY,GAAG,IAAAC,2BAAe,EAACF,WAAW,CAAC;IACjD,IAAMG,gBAAgB,GAAGF,YAAY,CAACG,OAAO,EAAE;IAE/C,IACED,gBAAgB,CAACE,UAAU,CAAC,QAAQ,CAAC,IACrCF,gBAAgB,CAACE,UAAU,CAAC,QAAQ,CAAC,EACrC;MACA,IAAMC,eAAe,GAAG,IAAAC,yBAAa,EACnCP,WAAW,EACXC,YAAY,CAACO,MAAM,EAAE,CACtB;MACDZ,QAAQ,CAACU,eAAe,CAAC;MACzB,OAAO,SAAS;IAClB;IAEA,OAAOT,OAAO,CAACE,CAAC,EAAEC,WAAW,CAAC;EAChC,CAAC,EACD,CAACJ,QAAQ,EAAEC,OAAO,CAAC,CACpB;AAAA;AAAC,eAEWF,gBAAgB;AAAA"}
@@ -4,58 +4,46 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports["default"] = void 0;
7
-
8
7
  var _react = require("react");
9
-
10
8
  var _draftJs = require("draft-js");
11
-
12
9
  var _getSelectionRange = _interopRequireDefault(require("../utils/getSelectionRange"));
13
-
14
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
15
-
16
11
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
17
-
18
12
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
19
-
20
13
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
21
-
22
14
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
23
-
24
15
  function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
25
-
26
16
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
27
-
28
17
  /**
29
18
  * Updates the visibility of the style toolbar
30
19
  */
31
20
  var useStyleToolbarProps = function useStyleToolbarProps(value) {
32
21
  var _useState = (0, _react.useState)({
33
- top: 0,
34
- left: 0,
35
- width: 0,
36
- height: 0
37
- }),
38
- _useState2 = _slicedToArray(_useState, 2),
39
- trigger = _useState2[0],
40
- setTrigger = _useState2[1];
41
-
22
+ top: 0,
23
+ left: 0,
24
+ width: 0,
25
+ height: 0
26
+ }),
27
+ _useState2 = _slicedToArray(_useState, 2),
28
+ trigger = _useState2[0],
29
+ setTrigger = _useState2[1];
42
30
  var _useState3 = (0, _react.useState)(false),
43
- _useState4 = _slicedToArray(_useState3, 2),
44
- visible = _useState4[0],
45
- setVisible = _useState4[1];
46
-
31
+ _useState4 = _slicedToArray(_useState3, 2),
32
+ visible = _useState4[0],
33
+ setVisible = _useState4[1];
47
34
  (0, _react.useEffect)(function () {
48
35
  if (!value) return;
49
- var selectionRange = (0, _getSelectionRange["default"])(); // Do not show the panel if either there is no selected text,
36
+ var selectionRange = (0, _getSelectionRange["default"])();
37
+
38
+ // Do not show the panel if either there is no selected text,
50
39
  // or the selection range is collapsed,
51
40
  // or the selected text is in an atomic block.
52
-
53
41
  if (!selectionRange || value.getSelection().isCollapsed() || _draftJs.RichUtils.getCurrentBlockType(value).startsWith('atomic')) {
54
42
  setVisible(false);
55
43
  return;
56
- } // Otherwise, set the rect of the selection range
57
-
44
+ }
58
45
 
46
+ // Otherwise, set the rect of the selection range
59
47
  setTrigger(selectionRange.getBoundingClientRect());
60
48
  setVisible(true);
61
49
  }, [value]);
@@ -64,7 +52,6 @@ var useStyleToolbarProps = function useStyleToolbarProps(value) {
64
52
  visible: visible
65
53
  };
66
54
  };
67
-
68
55
  var _default = useStyleToolbarProps;
69
56
  exports["default"] = _default;
70
57
  //# sourceMappingURL=useStyleToolbarProps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useStyleToolbarProps.js","names":["useStyleToolbarProps","value","useState","top","left","width","height","trigger","setTrigger","visible","setVisible","useEffect","selectionRange","getSelectionRange","getSelection","isCollapsed","RichUtils","getCurrentBlockType","startsWith","getBoundingClientRect"],"sources":["../../../../src/Editor/hooks/useStyleToolbarProps.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { EditorState, RichUtils } from 'draft-js';\nimport getSelectionRange from '../utils/getSelectionRange';\n\ninterface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\ninterface UseStyleToolbarPropsRes {\n trigger: Rect;\n visible: boolean;\n}\n\n/**\n * Updates the visibility of the style toolbar\n */\nconst useStyleToolbarProps = (value: EditorState): UseStyleToolbarPropsRes => {\n const [trigger, setTrigger] = useState({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n });\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (!value) return;\n const selectionRange = getSelectionRange();\n\n // Do not show the panel if either there is no selected text,\n // or the selection range is collapsed,\n // or the selected text is in an atomic block.\n if (\n !selectionRange ||\n value.getSelection().isCollapsed() ||\n RichUtils.getCurrentBlockType(value).startsWith('atomic')\n ) {\n setVisible(false);\n return;\n }\n\n // Otherwise, set the rect of the selection range\n setTrigger(selectionRange.getBoundingClientRect());\n setVisible(true);\n }, [value]);\n\n return { trigger, visible };\n};\n\nexport default useStyleToolbarProps;\n"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;;;;;;;;;;;;;AAcA;AACA;AACA;AACA,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAuB,CAACC,KAAD,EAAiD;EAC5E,gBAA8B,IAAAC,eAAA,EAAS;IACrCC,GAAG,EAAE,CADgC;IAErCC,IAAI,EAAE,CAF+B;IAGrCC,KAAK,EAAE,CAH8B;IAIrCC,MAAM,EAAE;EAJ6B,CAAT,CAA9B;EAAA;EAAA,IAAOC,OAAP;EAAA,IAAgBC,UAAhB;;EAMA,iBAA8B,IAAAN,eAAA,EAAS,KAAT,CAA9B;EAAA;EAAA,IAAOO,OAAP;EAAA,IAAgBC,UAAhB;;EAEA,IAAAC,gBAAA,EAAU,YAAM;IACd,IAAI,CAACV,KAAL,EAAY;IACZ,IAAMW,cAAc,GAAG,IAAAC,6BAAA,GAAvB,CAFc,CAId;IACA;IACA;;IACA,IACE,CAACD,cAAD,IACAX,KAAK,CAACa,YAAN,GAAqBC,WAArB,EADA,IAEAC,kBAAA,CAAUC,mBAAV,CAA8BhB,KAA9B,EAAqCiB,UAArC,CAAgD,QAAhD,CAHF,EAIE;MACAR,UAAU,CAAC,KAAD,CAAV;MACA;IACD,CAda,CAgBd;;;IACAF,UAAU,CAACI,cAAc,CAACO,qBAAf,EAAD,CAAV;IACAT,UAAU,CAAC,IAAD,CAAV;EACD,CAnBD,EAmBG,CAACT,KAAD,CAnBH;EAqBA,OAAO;IAAEM,OAAO,EAAPA,OAAF;IAAWE,OAAO,EAAPA;EAAX,CAAP;AACD,CA/BD;;eAiCeT,oB"}
1
+ {"version":3,"file":"useStyleToolbarProps.js","names":["useStyleToolbarProps","value","useState","top","left","width","height","trigger","setTrigger","visible","setVisible","useEffect","selectionRange","getSelectionRange","getSelection","isCollapsed","RichUtils","getCurrentBlockType","startsWith","getBoundingClientRect"],"sources":["../../../../src/Editor/hooks/useStyleToolbarProps.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { EditorState, RichUtils } from 'draft-js';\nimport getSelectionRange from '../utils/getSelectionRange';\n\ninterface Rect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\ninterface UseStyleToolbarPropsRes {\n trigger: Rect;\n visible: boolean;\n}\n\n/**\n * Updates the visibility of the style toolbar\n */\nconst useStyleToolbarProps = (value: EditorState): UseStyleToolbarPropsRes => {\n const [trigger, setTrigger] = useState({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n });\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (!value) return;\n const selectionRange = getSelectionRange();\n\n // Do not show the panel if either there is no selected text,\n // or the selection range is collapsed,\n // or the selected text is in an atomic block.\n if (\n !selectionRange ||\n value.getSelection().isCollapsed() ||\n RichUtils.getCurrentBlockType(value).startsWith('atomic')\n ) {\n setVisible(false);\n return;\n }\n\n // Otherwise, set the rect of the selection range\n setTrigger(selectionRange.getBoundingClientRect());\n setVisible(true);\n }, [value]);\n\n return { trigger, visible };\n};\n\nexport default useStyleToolbarProps;\n"],"mappings":";;;;;;AAAA;AACA;AACA;AAA2D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAc3D;AACA;AACA;AACA,IAAMA,oBAAoB,GAAG,SAAvBA,oBAAoB,CAAIC,KAAkB,EAA8B;EAC5E,gBAA8B,IAAAC,eAAQ,EAAC;MACrCC,GAAG,EAAE,CAAC;MACNC,IAAI,EAAE,CAAC;MACPC,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE;IACV,CAAC,CAAC;IAAA;IALKC,OAAO;IAAEC,UAAU;EAM1B,iBAA8B,IAAAN,eAAQ,EAAC,KAAK,CAAC;IAAA;IAAtCO,OAAO;IAAEC,UAAU;EAE1B,IAAAC,gBAAS,EAAC,YAAM;IACd,IAAI,CAACV,KAAK,EAAE;IACZ,IAAMW,cAAc,GAAG,IAAAC,6BAAiB,GAAE;;IAE1C;IACA;IACA;IACA,IACE,CAACD,cAAc,IACfX,KAAK,CAACa,YAAY,EAAE,CAACC,WAAW,EAAE,IAClCC,kBAAS,CAACC,mBAAmB,CAAChB,KAAK,CAAC,CAACiB,UAAU,CAAC,QAAQ,CAAC,EACzD;MACAR,UAAU,CAAC,KAAK,CAAC;MACjB;IACF;;IAEA;IACAF,UAAU,CAACI,cAAc,CAACO,qBAAqB,EAAE,CAAC;IAClDT,UAAU,CAAC,IAAI,CAAC;EAClB,CAAC,EAAE,CAACT,KAAK,CAAC,CAAC;EAEX,OAAO;IAAEM,OAAO,EAAPA,OAAO;IAAEE,OAAO,EAAPA;EAAQ,CAAC;AAC7B,CAAC;AAAC,eAEaT,oBAAoB;AAAA"}