@bigbinary/neeto-editor 1.40.0 → 1.40.2

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 (44) hide show
  1. package/dist/Attachments.js +17 -5
  2. package/dist/Attachments.js.map +1 -1
  3. package/dist/Editor.js +629 -508
  4. package/dist/Editor.js.map +1 -1
  5. package/dist/EditorContent.js +50 -41
  6. package/dist/EditorContent.js.map +1 -1
  7. package/dist/FormikEditor.js +91 -30
  8. package/dist/FormikEditor.js.map +1 -1
  9. package/dist/Menu.js +45 -5
  10. package/dist/Menu.js.map +1 -1
  11. package/dist/{chunk-b39dfdd8.js → chunk-1ac4a222.js} +832 -709
  12. package/dist/{chunk-b39dfdd8.js.map → chunk-1ac4a222.js.map} +1 -1
  13. package/dist/{chunk-6dabc0b1.js → chunk-54bb591c.js} +66 -43
  14. package/dist/{chunk-6dabc0b1.js.map → chunk-54bb591c.js.map} +1 -1
  15. package/dist/{chunk-52091cdb.js → chunk-91e5e60f.js} +186 -152
  16. package/dist/chunk-91e5e60f.js.map +1 -0
  17. package/dist/{chunk-c1e6a992.js → chunk-eafe8fe4.js} +24 -18
  18. package/dist/{chunk-c1e6a992.js.map → chunk-eafe8fe4.js.map} +1 -1
  19. package/dist/cjs/Attachments.cjs.js +17 -5
  20. package/dist/cjs/Attachments.cjs.js.map +1 -1
  21. package/dist/cjs/Editor.cjs.js +705 -548
  22. package/dist/cjs/Editor.cjs.js.map +1 -1
  23. package/dist/cjs/EditorContent.cjs.js +61 -50
  24. package/dist/cjs/EditorContent.cjs.js.map +1 -1
  25. package/dist/cjs/FormikEditor.cjs.js +94 -33
  26. package/dist/cjs/FormikEditor.cjs.js.map +1 -1
  27. package/dist/cjs/Menu.cjs.js +45 -5
  28. package/dist/cjs/Menu.cjs.js.map +1 -1
  29. package/dist/cjs/{chunk-d0720eac.cjs.js → chunk-391e4970.cjs.js} +214 -170
  30. package/dist/cjs/chunk-391e4970.cjs.js.map +1 -0
  31. package/dist/cjs/{chunk-3777ae13.cjs.js → chunk-969db227.cjs.js} +88 -60
  32. package/dist/cjs/{chunk-3777ae13.cjs.js.map → chunk-969db227.cjs.js.map} +1 -1
  33. package/dist/cjs/{chunk-76a5f21a.cjs.js → chunk-ae47a2a1.cjs.js} +41 -31
  34. package/dist/cjs/{chunk-76a5f21a.cjs.js.map → chunk-ae47a2a1.cjs.js.map} +1 -1
  35. package/dist/cjs/{chunk-d12e89fd.cjs.js → chunk-f5848160.cjs.js} +1034 -875
  36. package/dist/cjs/{chunk-d12e89fd.cjs.js.map → chunk-f5848160.cjs.js.map} +1 -1
  37. package/dist/cjs/index.cjs.js +66 -8
  38. package/dist/cjs/index.cjs.js.map +1 -1
  39. package/dist/editor-stats.html +1 -1
  40. package/dist/index.js +66 -8
  41. package/dist/index.js.map +1 -1
  42. package/package.json +4 -3
  43. package/dist/chunk-52091cdb.js.map +0 -1
  44. package/dist/cjs/chunk-d0720eac.cjs.js.map +0 -1
@@ -1,4 +1,3 @@
1
- import _extends from '@babel/runtime/helpers/extends';
2
1
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
3
2
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
4
3
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
@@ -11,10 +10,12 @@ import { createRoot } from 'react-dom/client';
11
10
  import { n } from './chunk-15c449f1.js';
12
11
  import { s as substituteVariables, h as highlightCode, E as EDITOR_CONTENT_CLASSNAME, S as SANITIZE_OPTIONS } from './chunk-e712f06d.js';
13
12
  import { useOnClickOutside } from '@bigbinary/neeto-commons-frontend/react-utils';
14
- import { Close } from '@bigbinary/neeto-icons';
15
- import { Spinner, Button } from '@bigbinary/neetoui';
13
+ import Close from '@bigbinary/neeto-icons/Close';
14
+ import Button from '@bigbinary/neetoui/Button';
15
+ import Spinner from '@bigbinary/neetoui/Spinner';
16
16
  import { createPortal } from 'react-dom';
17
17
  import { useTranslation } from 'react-i18next';
18
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
18
19
  import './chunk-65f73e5a.js';
19
20
  import './chunk-ade4c9e3.js';
20
21
  import '@bigbinary/neeto-cist';
@@ -49,35 +50,41 @@ var ImagePreview = function ImagePreview(_ref) {
49
50
  });
50
51
  };
51
52
  }, []);
52
- return /*#__PURE__*/createPortal( /*#__PURE__*/React.createElement("div", {
53
- className: "ne-image-preview-wrapper"
54
- }, isLoading && /*#__PURE__*/React.createElement(Spinner, {
55
- className: "ne-image-preview-wrapper__spinner"
56
- }), !isLoading && /*#__PURE__*/React.createElement("div", {
57
- className: "close-button"
58
- }, /*#__PURE__*/React.createElement(Button, {
59
- icon: Close,
60
- style: "secondary",
61
- onClick: function onClick() {
62
- return setImagePreviewDetails(null);
63
- }
64
- })), /*#__PURE__*/React.createElement("div", {
65
- className: classnames("ne-image-preview", {
66
- "image-loaded": !isLoading
67
- })
68
- }, /*#__PURE__*/React.createElement("img", {
69
- alt: t("neetoEditor.editorContent.imagePreviewAltText"),
70
- ref: imagePreviewRef,
71
- src: imagePreviewDetails.src,
72
- onLoad: function onLoad() {
73
- return setIsLoading(false);
74
- }
75
- }), imagePreviewDetails && /*#__PURE__*/React.createElement("p", {
76
- className: "ne-image-preview__caption"
77
- }, imagePreviewDetails.caption))), document.body);
53
+ return /*#__PURE__*/createPortal( /*#__PURE__*/jsxs("div", {
54
+ className: "ne-image-preview-wrapper",
55
+ children: [isLoading && /*#__PURE__*/jsx(Spinner, {
56
+ className: "ne-image-preview-wrapper__spinner"
57
+ }), !isLoading && /*#__PURE__*/jsx("div", {
58
+ className: "close-button",
59
+ children: /*#__PURE__*/jsx(Button, {
60
+ icon: Close,
61
+ style: "secondary",
62
+ onClick: function onClick() {
63
+ return setImagePreviewDetails(null);
64
+ }
65
+ })
66
+ }), /*#__PURE__*/jsxs("div", {
67
+ className: classnames("ne-image-preview", {
68
+ "image-loaded": !isLoading
69
+ }),
70
+ children: [/*#__PURE__*/jsx("img", {
71
+ alt: t("neetoEditor.editorContent.imagePreviewAltText"),
72
+ ref: imagePreviewRef,
73
+ src: imagePreviewDetails.src,
74
+ onLoad: function onLoad() {
75
+ return setIsLoading(false);
76
+ }
77
+ }), imagePreviewDetails && /*#__PURE__*/jsx("p", {
78
+ className: "ne-image-preview__caption",
79
+ children: imagePreviewDetails.caption
80
+ })]
81
+ })]
82
+ }), document.body);
78
83
  };
79
84
 
80
85
  var _excluded = ["content", "variables", "className"];
86
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
87
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
81
88
  var EditorContent = function EditorContent(_ref) {
82
89
  var _ref$content = _ref.content,
83
90
  content = _ref$content === void 0 ? "" : _ref$content,
@@ -99,7 +106,7 @@ var EditorContent = function EditorContent(_ref) {
99
106
  var button = document.createElement("div");
100
107
  button.className = "neeto-editor-codeblock-options";
101
108
  var root = createRoot(button);
102
- root.render( /*#__PURE__*/React.createElement(CopyToClipboardButton, {
109
+ root.render( /*#__PURE__*/jsx(CopyToClipboardButton, {
103
110
  size: "small",
104
111
  style: "text",
105
112
  value: preTag.textContent
@@ -128,17 +135,19 @@ var EditorContent = function EditorContent(_ref) {
128
135
  injectCopyButtonToCodeBlocks();
129
136
  bindImageClickListener();
130
137
  }, [content]);
131
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", _extends({
132
- "data-cy": "neeto-editor-content",
133
- ref: editorContentRef,
134
- className: classnames(EDITOR_CONTENT_CLASSNAME, _defineProperty({}, className, className)),
135
- dangerouslySetInnerHTML: {
136
- __html: sanitize(htmlContent, SANITIZE_OPTIONS)
137
- }
138
- }, otherProps)), imagePreviewDetails && /*#__PURE__*/React.createElement(ImagePreview, {
139
- imagePreviewDetails: imagePreviewDetails,
140
- setImagePreviewDetails: setImagePreviewDetails
141
- }));
138
+ return /*#__PURE__*/jsxs(Fragment, {
139
+ children: [/*#__PURE__*/jsx("div", _objectSpread({
140
+ "data-cy": "neeto-editor-content",
141
+ ref: editorContentRef,
142
+ className: classnames(EDITOR_CONTENT_CLASSNAME, _defineProperty({}, className, className)),
143
+ dangerouslySetInnerHTML: {
144
+ __html: sanitize(htmlContent, SANITIZE_OPTIONS)
145
+ }
146
+ }, otherProps)), imagePreviewDetails && /*#__PURE__*/jsx(ImagePreview, {
147
+ imagePreviewDetails: imagePreviewDetails,
148
+ setImagePreviewDetails: setImagePreviewDetails
149
+ })]
150
+ });
142
151
  };
143
152
  var index = /*#__PURE__*/memo(EditorContent);
144
153
 
@@ -1 +1 @@
1
- {"version":3,"file":"EditorContent.js","sources":["../src/components/EditorContent/ImagePreview.jsx","../src/components/EditorContent/index.jsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport classnames from \"classnames\";\nimport { useOnClickOutside } from \"neetocommons/react-utils\";\nimport { Close } from \"neetoicons\";\nimport { Button, Spinner } from \"neetoui\";\nimport { createPortal } from \"react-dom\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ImagePreview = ({ imagePreviewDetails, setImagePreviewDetails }) => {\n const [isLoading, setIsLoading] = useState(true);\n\n const { t } = useTranslation();\n\n const imagePreviewRef = useRef(null);\n\n useOnClickOutside(imagePreviewRef, () => setImagePreviewDetails(null), {\n enabled: true,\n });\n\n useEffect(() => {\n document.addEventListener(\n \"keydown\",\n e => e.key === \"Escape\" && setImagePreviewDetails(null)\n );\n\n return () =>\n document.removeEventListener(\n \"keydown\",\n e => e.key === \"Escape\" && setImagePreviewDetails(null)\n );\n }, []);\n\n return createPortal(\n <div className=\"ne-image-preview-wrapper\">\n {isLoading && <Spinner className=\"ne-image-preview-wrapper__spinner\" />}\n {!isLoading && (\n <div className=\"close-button\">\n <Button\n icon={Close}\n style=\"secondary\"\n onClick={() => setImagePreviewDetails(null)}\n />\n </div>\n )}\n <div\n className={classnames(\"ne-image-preview\", {\n \"image-loaded\": !isLoading,\n })}\n >\n <img\n alt={t(\"neetoEditor.editorContent.imagePreviewAltText\")}\n ref={imagePreviewRef}\n src={imagePreviewDetails.src}\n onLoad={() => setIsLoading(false)}\n />\n {imagePreviewDetails && (\n <p className=\"ne-image-preview__caption\">\n {imagePreviewDetails.caption}\n </p>\n )}\n </div>\n </div>,\n document.body\n );\n};\n\nexport default ImagePreview;\n","import { memo, useEffect, useRef, useState } from \"react\";\n\nimport classnames from \"classnames\";\nimport DOMPurify from \"dompurify\";\nimport CopyToClipboardButton from \"neetomolecules/CopyToClipboardButton\";\nimport { isNil } from \"ramda\";\nimport { createRoot } from \"react-dom/client\";\n\nimport \"src/styles/editor/editor-content.scss\";\n\nimport { EDITOR_CONTENT_CLASSNAME, SANITIZE_OPTIONS } from \"./constants\";\nimport ImagePreview from \"./ImagePreview\";\nimport { highlightCode, substituteVariables } from \"./utils\";\n\nconst EditorContent = ({\n content = \"\",\n variables = [],\n className,\n ...otherProps\n}) => {\n const [imagePreviewDetails, setImagePreviewDetails] = useState(null);\n const editorContentRef = useRef(null);\n\n const htmlContent = substituteVariables(highlightCode(content), variables);\n const sanitize = DOMPurify.sanitize;\n\n const injectCopyButtonToCodeBlocks = () => {\n const preTags = editorContentRef.current?.querySelectorAll(\n `.${EDITOR_CONTENT_CLASSNAME} pre`\n );\n\n preTags.forEach(preTag => {\n const button = document.createElement(\"div\");\n button.className = \"neeto-editor-codeblock-options\";\n const root = createRoot(button);\n root.render(\n <CopyToClipboardButton\n size=\"small\"\n style=\"text\"\n value={preTag.textContent}\n />\n );\n preTag.appendChild(button);\n });\n };\n\n const bindImageClickListener = () => {\n const figureTags = editorContentRef.current?.querySelectorAll(\n `.${EDITOR_CONTENT_CLASSNAME} figure`\n );\n\n figureTags.forEach(figureTag => {\n const image = figureTag.querySelector(\"img\");\n const link = figureTag.querySelector(\"a\");\n if (isNil(image) || isNil(link)) return;\n\n figureTag.addEventListener(\"click\", event => {\n event.preventDefault();\n const caption = figureTag.querySelector(\"figcaption\").innerText;\n setImagePreviewDetails({ src: image.src, caption });\n });\n });\n };\n\n useEffect(() => {\n injectCopyButtonToCodeBlocks();\n bindImageClickListener();\n }, [content]);\n\n return (\n <>\n <div\n data-cy=\"neeto-editor-content\"\n ref={editorContentRef}\n className={classnames(EDITOR_CONTENT_CLASSNAME, {\n [className]: className,\n })}\n dangerouslySetInnerHTML={{\n __html: sanitize(htmlContent, SANITIZE_OPTIONS),\n }}\n {...otherProps}\n />\n {imagePreviewDetails && (\n <ImagePreview {...{ imagePreviewDetails, setImagePreviewDetails }} />\n )}\n </>\n );\n};\n\nexport default memo(EditorContent);\n"],"names":["ImagePreview","_ref","imagePreviewDetails","setImagePreviewDetails","_useState","useState","_useState2","_slicedToArray","isLoading","setIsLoading","_useTranslation","useTranslation","t","imagePreviewRef","useRef","useOnClickOutside","enabled","useEffect","document","addEventListener","e","key","removeEventListener","createPortal","React","createElement","className","Spinner","Button","icon","Close","style","onClick","classnames","alt","ref","src","onLoad","caption","body","EditorContent","_ref$content","content","_ref$variables","variables","otherProps","_objectWithoutProperties","_excluded","editorContentRef","htmlContent","substituteVariables","highlightCode","sanitize","DOMPurify","injectCopyButtonToCodeBlocks","_editorContentRef$cur","preTags","current","querySelectorAll","concat","EDITOR_CONTENT_CLASSNAME","forEach","preTag","button","root","createRoot","render","CopyToClipboardButton","size","value","textContent","appendChild","bindImageClickListener","_editorContentRef$cur2","figureTags","figureTag","image","querySelector","link","isNil","event","preventDefault","innerText","Fragment","_extends","_defineProperty","dangerouslySetInnerHTML","__html","SANITIZE_OPTIONS","memo"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AASA,IAAMA,YAAY,GAAG,SAAfA,YAAYA,CAAAC,IAAA,EAAwD;AAAA,EAAA,IAAlDC,mBAAmB,GAAAD,IAAA,CAAnBC,mBAAmB;IAAEC,sBAAsB,GAAAF,IAAA,CAAtBE,sBAAsB,CAAA;AACjE,EAAA,IAAAC,SAAA,GAAkCC,QAAQ,CAAC,IAAI,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAAzCI,IAAAA,SAAS,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,YAAY,GAAAH,UAAA,CAAA,CAAA,CAAA,CAAA;AAE9B,EAAA,IAAAI,eAAA,GAAcC,cAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC,CAAA;AAET,EAAA,IAAMC,eAAe,GAAGC,MAAM,CAAC,IAAI,CAAC,CAAA;EAEpCC,iBAAiB,CAACF,eAAe,EAAE,YAAA;IAAA,OAAMV,sBAAsB,CAAC,IAAI,CAAC,CAAA;GAAE,EAAA;AACrEa,IAAAA,OAAO,EAAE,IAAA;AACX,GAAC,CAAC,CAAA;AAEFC,EAAAA,SAAS,CAAC,YAAM;AACdC,IAAAA,QAAQ,CAACC,gBAAgB,CACvB,SAAS,EACT,UAAAC,CAAC,EAAA;MAAA,OAAIA,CAAC,CAACC,GAAG,KAAK,QAAQ,IAAIlB,sBAAsB,CAAC,IAAI,CAAC,CAAA;AAAA,KACzD,CAAC,CAAA;IAED,OAAO,YAAA;AAAA,MAAA,OACLe,QAAQ,CAACI,mBAAmB,CAC1B,SAAS,EACT,UAAAF,CAAC,EAAA;QAAA,OAAIA,CAAC,CAACC,GAAG,KAAK,QAAQ,IAAIlB,sBAAsB,CAAC,IAAI,CAAC,CAAA;AAAA,OACzD,CAAC,CAAA;AAAA,KAAA,CAAA;GACJ,EAAE,EAAE,CAAC,CAAA;AAEN,EAAA,oBAAOoB,YAAY,eACjBC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,0BAAA;AAA0B,GAAA,EACtClB,SAAS,iBAAIgB,KAAA,CAAAC,aAAA,CAACE,OAAO,EAAA;AAACD,IAAAA,SAAS,EAAC,mCAAA;AAAmC,GAAE,CAAC,EACtE,CAAClB,SAAS,iBACTgB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,cAAA;AAAc,GAAA,eAC3BF,KAAA,CAAAC,aAAA,CAACG,MAAM,EAAA;AACLC,IAAAA,IAAI,EAAEC,KAAM;AACZC,IAAAA,KAAK,EAAC,WAAW;IACjBC,OAAO,EAAE,SAAAA,OAAA,GAAA;MAAA,OAAM7B,sBAAsB,CAAC,IAAI,CAAC,CAAA;AAAA,KAAA;AAAC,GAC7C,CACE,CACN,eACDqB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACEC,IAAAA,SAAS,EAAEO,UAAU,CAAC,kBAAkB,EAAE;AACxC,MAAA,cAAc,EAAE,CAACzB,SAAAA;KAClB,CAAA;GAEDgB,eAAAA,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AACES,IAAAA,GAAG,EAAEtB,CAAC,CAAC,+CAA+C,CAAE;AACxDuB,IAAAA,GAAG,EAAEtB,eAAgB;IACrBuB,GAAG,EAAElC,mBAAmB,CAACkC,GAAI;IAC7BC,MAAM,EAAE,SAAAA,MAAA,GAAA;MAAA,OAAM5B,YAAY,CAAC,KAAK,CAAC,CAAA;AAAA,KAAA;AAAC,GACnC,CAAC,EACDP,mBAAmB,iBAClBsB,KAAA,CAAAC,aAAA,CAAA,GAAA,EAAA;AAAGC,IAAAA,SAAS,EAAC,2BAAA;GACVxB,EAAAA,mBAAmB,CAACoC,OACpB,CAEF,CACF,CAAC,EACNpB,QAAQ,CAACqB,IACX,CAAC,CAAA;AACH,CAAC;;;ACnDD,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAAvC,IAAA,EAKb;AAAA,EAAA,IAAAwC,YAAA,GAAAxC,IAAA,CAJJyC,OAAO;AAAPA,IAAAA,OAAO,GAAAD,YAAA,KAAG,KAAA,CAAA,GAAA,EAAE,GAAAA,YAAA;IAAAE,cAAA,GAAA1C,IAAA,CACZ2C,SAAS;AAATA,IAAAA,SAAS,GAAAD,cAAA,KAAG,KAAA,CAAA,GAAA,EAAE,GAAAA,cAAA;IACdjB,SAAS,GAAAzB,IAAA,CAATyB,SAAS;AACNmB,IAAAA,UAAU,GAAAC,wBAAA,CAAA7C,IAAA,EAAA8C,SAAA,CAAA,CAAA;AAEb,EAAA,IAAA3C,SAAA,GAAsDC,QAAQ,CAAC,IAAI,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAA7DF,IAAAA,mBAAmB,GAAAI,UAAA,CAAA,CAAA,CAAA;AAAEH,IAAAA,sBAAsB,GAAAG,UAAA,CAAA,CAAA,CAAA,CAAA;AAClD,EAAA,IAAM0C,gBAAgB,GAAGlC,MAAM,CAAC,IAAI,CAAC,CAAA;EAErC,IAAMmC,WAAW,GAAGC,mBAAmB,CAACC,aAAa,CAACT,OAAO,CAAC,EAAEE,SAAS,CAAC,CAAA;AAC1E,EAAA,IAAMQ,QAAQ,GAAGC,SAAS,CAACD,QAAQ,CAAA;AAEnC,EAAA,IAAME,4BAA4B,GAAG,SAA/BA,4BAA4BA,GAAS;AAAA,IAAA,IAAAC,qBAAA,CAAA;AACzC,IAAA,IAAMC,OAAO,GAAAD,CAAAA,qBAAA,GAAGP,gBAAgB,CAACS,OAAO,MAAAF,IAAAA,IAAAA,qBAAA,KAAxBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAA,CAA0BG,gBAAgB,CAAA,GAAA,CAAAC,MAAA,CACpDC,wBAAwB,SAC9B,CAAC,CAAA;AAEDJ,IAAAA,OAAO,CAACK,OAAO,CAAC,UAAAC,MAAM,EAAI;AACxB,MAAA,IAAMC,MAAM,GAAG7C,QAAQ,CAACO,aAAa,CAAC,KAAK,CAAC,CAAA;MAC5CsC,MAAM,CAACrC,SAAS,GAAG,gCAAgC,CAAA;AACnD,MAAA,IAAMsC,IAAI,GAAGC,UAAU,CAACF,MAAM,CAAC,CAAA;AAC/BC,MAAAA,IAAI,CAACE,MAAM,eACT1C,KAAA,CAAAC,aAAA,CAAC0C,qBAAqB,EAAA;AACpBC,QAAAA,IAAI,EAAC,OAAO;AACZrC,QAAAA,KAAK,EAAC,MAAM;QACZsC,KAAK,EAAEP,MAAM,CAACQ,WAAAA;AAAY,OAC3B,CACH,CAAC,CAAA;AACDR,MAAAA,MAAM,CAACS,WAAW,CAACR,MAAM,CAAC,CAAA;AAC5B,KAAC,CAAC,CAAA;GACH,CAAA;AAED,EAAA,IAAMS,sBAAsB,GAAG,SAAzBA,sBAAsBA,GAAS;AAAA,IAAA,IAAAC,sBAAA,CAAA;AACnC,IAAA,IAAMC,UAAU,GAAAD,CAAAA,sBAAA,GAAGzB,gBAAgB,CAACS,OAAO,MAAAgB,IAAAA,IAAAA,sBAAA,KAAxBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,sBAAA,CAA0Bf,gBAAgB,CAAA,GAAA,CAAAC,MAAA,CACvDC,wBAAwB,YAC9B,CAAC,CAAA;AAEDc,IAAAA,UAAU,CAACb,OAAO,CAAC,UAAAc,SAAS,EAAI;AAC9B,MAAA,IAAMC,KAAK,GAAGD,SAAS,CAACE,aAAa,CAAC,KAAK,CAAC,CAAA;AAC5C,MAAA,IAAMC,IAAI,GAAGH,SAAS,CAACE,aAAa,CAAC,GAAG,CAAC,CAAA;MACzC,IAAIE,KAAK,CAACH,KAAK,CAAC,IAAIG,KAAK,CAACD,IAAI,CAAC,EAAE,OAAA;AAEjCH,MAAAA,SAAS,CAACxD,gBAAgB,CAAC,OAAO,EAAE,UAAA6D,KAAK,EAAI;QAC3CA,KAAK,CAACC,cAAc,EAAE,CAAA;QACtB,IAAM3C,OAAO,GAAGqC,SAAS,CAACE,aAAa,CAAC,YAAY,CAAC,CAACK,SAAS,CAAA;AAC/D/E,QAAAA,sBAAsB,CAAC;UAAEiC,GAAG,EAAEwC,KAAK,CAACxC,GAAG;AAAEE,UAAAA,OAAO,EAAPA,OAAAA;AAAQ,SAAC,CAAC,CAAA;AACrD,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;GACH,CAAA;AAEDrB,EAAAA,SAAS,CAAC,YAAM;AACdqC,IAAAA,4BAA4B,EAAE,CAAA;AAC9BkB,IAAAA,sBAAsB,EAAE,CAAA;AAC1B,GAAC,EAAE,CAAC9B,OAAO,CAAC,CAAC,CAAA;AAEb,EAAA,oBACElB,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAA2D,QAAA,EAAA,IAAA,eACE3D,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA2D,QAAA,CAAA;AACE,IAAA,SAAA,EAAQ,sBAAsB;AAC9BjD,IAAAA,GAAG,EAAEa,gBAAiB;IACtBtB,SAAS,EAAEO,UAAU,CAAC2B,wBAAwB,EAAAyB,eAAA,CAAA,EAAA,EAC3C3D,SAAS,EAAGA,SAAS,CACvB,CAAE;AACH4D,IAAAA,uBAAuB,EAAE;AACvBC,MAAAA,MAAM,EAAEnC,QAAQ,CAACH,WAAW,EAAEuC,gBAAgB,CAAA;AAChD,KAAA;GACI3C,EAAAA,UAAU,CACf,CAAC,EACD3C,mBAAmB,iBAClBsB,KAAA,CAAAC,aAAA,CAACzB,YAAY,EAAA;AAAOE,IAAAA,mBAAmB,EAAnBA,mBAAmB;AAAEC,IAAAA,sBAAsB,EAAtBA,sBAAAA;AAAsB,GAAK,CAEtE,CAAC,CAAA;AAEP,CAAC,CAAA;AAED,YAAesF,aAAAA,IAAI,CAACjD,aAAa,CAAC;;;;"}
1
+ {"version":3,"file":"EditorContent.js","sources":["../src/components/EditorContent/ImagePreview.jsx","../src/components/EditorContent/index.jsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nimport classnames from \"classnames\";\nimport { useOnClickOutside } from \"neetocommons/react-utils\";\nimport { Close } from \"neetoicons\";\nimport { Button, Spinner } from \"neetoui\";\nimport { createPortal } from \"react-dom\";\nimport { useTranslation } from \"react-i18next\";\n\nconst ImagePreview = ({ imagePreviewDetails, setImagePreviewDetails }) => {\n const [isLoading, setIsLoading] = useState(true);\n\n const { t } = useTranslation();\n\n const imagePreviewRef = useRef(null);\n\n useOnClickOutside(imagePreviewRef, () => setImagePreviewDetails(null), {\n enabled: true,\n });\n\n useEffect(() => {\n document.addEventListener(\n \"keydown\",\n e => e.key === \"Escape\" && setImagePreviewDetails(null)\n );\n\n return () =>\n document.removeEventListener(\n \"keydown\",\n e => e.key === \"Escape\" && setImagePreviewDetails(null)\n );\n }, []);\n\n return createPortal(\n <div className=\"ne-image-preview-wrapper\">\n {isLoading && <Spinner className=\"ne-image-preview-wrapper__spinner\" />}\n {!isLoading && (\n <div className=\"close-button\">\n <Button\n icon={Close}\n style=\"secondary\"\n onClick={() => setImagePreviewDetails(null)}\n />\n </div>\n )}\n <div\n className={classnames(\"ne-image-preview\", {\n \"image-loaded\": !isLoading,\n })}\n >\n <img\n alt={t(\"neetoEditor.editorContent.imagePreviewAltText\")}\n ref={imagePreviewRef}\n src={imagePreviewDetails.src}\n onLoad={() => setIsLoading(false)}\n />\n {imagePreviewDetails && (\n <p className=\"ne-image-preview__caption\">\n {imagePreviewDetails.caption}\n </p>\n )}\n </div>\n </div>,\n document.body\n );\n};\n\nexport default ImagePreview;\n","import { memo, useEffect, useRef, useState } from \"react\";\n\nimport classnames from \"classnames\";\nimport DOMPurify from \"dompurify\";\nimport CopyToClipboardButton from \"neetomolecules/CopyToClipboardButton\";\nimport { isNil } from \"ramda\";\nimport { createRoot } from \"react-dom/client\";\n\nimport \"src/styles/editor/editor-content.scss\";\n\nimport { EDITOR_CONTENT_CLASSNAME, SANITIZE_OPTIONS } from \"./constants\";\nimport ImagePreview from \"./ImagePreview\";\nimport { highlightCode, substituteVariables } from \"./utils\";\n\nconst EditorContent = ({\n content = \"\",\n variables = [],\n className,\n ...otherProps\n}) => {\n const [imagePreviewDetails, setImagePreviewDetails] = useState(null);\n const editorContentRef = useRef(null);\n\n const htmlContent = substituteVariables(highlightCode(content), variables);\n const sanitize = DOMPurify.sanitize;\n\n const injectCopyButtonToCodeBlocks = () => {\n const preTags = editorContentRef.current?.querySelectorAll(\n `.${EDITOR_CONTENT_CLASSNAME} pre`\n );\n\n preTags.forEach(preTag => {\n const button = document.createElement(\"div\");\n button.className = \"neeto-editor-codeblock-options\";\n const root = createRoot(button);\n root.render(\n <CopyToClipboardButton\n size=\"small\"\n style=\"text\"\n value={preTag.textContent}\n />\n );\n preTag.appendChild(button);\n });\n };\n\n const bindImageClickListener = () => {\n const figureTags = editorContentRef.current?.querySelectorAll(\n `.${EDITOR_CONTENT_CLASSNAME} figure`\n );\n\n figureTags.forEach(figureTag => {\n const image = figureTag.querySelector(\"img\");\n const link = figureTag.querySelector(\"a\");\n if (isNil(image) || isNil(link)) return;\n\n figureTag.addEventListener(\"click\", event => {\n event.preventDefault();\n const caption = figureTag.querySelector(\"figcaption\").innerText;\n setImagePreviewDetails({ src: image.src, caption });\n });\n });\n };\n\n useEffect(() => {\n injectCopyButtonToCodeBlocks();\n bindImageClickListener();\n }, [content]);\n\n return (\n <>\n <div\n data-cy=\"neeto-editor-content\"\n ref={editorContentRef}\n className={classnames(EDITOR_CONTENT_CLASSNAME, {\n [className]: className,\n })}\n dangerouslySetInnerHTML={{\n __html: sanitize(htmlContent, SANITIZE_OPTIONS),\n }}\n {...otherProps}\n />\n {imagePreviewDetails && (\n <ImagePreview {...{ imagePreviewDetails, setImagePreviewDetails }} />\n )}\n </>\n );\n};\n\nexport default memo(EditorContent);\n"],"names":["ImagePreview","_ref","imagePreviewDetails","setImagePreviewDetails","_useState","useState","_useState2","_slicedToArray","isLoading","setIsLoading","_useTranslation","useTranslation","t","imagePreviewRef","useRef","useOnClickOutside","enabled","useEffect","document","addEventListener","e","key","removeEventListener","createPortal","_jsxs","className","children","_jsx","Spinner","Button","icon","Close","style","onClick","classnames","alt","ref","src","onLoad","caption","body","EditorContent","_ref$content","content","_ref$variables","variables","otherProps","_objectWithoutProperties","_excluded","editorContentRef","htmlContent","substituteVariables","highlightCode","sanitize","DOMPurify","injectCopyButtonToCodeBlocks","_editorContentRef$cur","preTags","current","querySelectorAll","concat","EDITOR_CONTENT_CLASSNAME","forEach","preTag","button","createElement","root","createRoot","render","CopyToClipboardButton","size","value","textContent","appendChild","bindImageClickListener","_editorContentRef$cur2","figureTags","figureTag","image","querySelector","link","isNil","event","preventDefault","innerText","_Fragment","_objectSpread","_defineProperty","dangerouslySetInnerHTML","__html","SANITIZE_OPTIONS","memo"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
- import _extends from '@babel/runtime/helpers/extends';
1
+ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
3
3
  import { memo, forwardRef } from 'react';
4
4
  import { FastField } from 'formik';
5
5
  import { noop } from '@bigbinary/neeto-cist';
6
6
  import Editor from './Editor.js';
7
- import '@babel/runtime/helpers/defineProperty';
7
+ import { jsx } from 'react/jsx-runtime';
8
8
  import '@babel/runtime/helpers/toConsumableArray';
9
9
  import '@babel/runtime/helpers/slicedToArray';
10
- import './chunk-b39dfdd8.js';
10
+ import './chunk-1ac4a222.js';
11
11
  import 'ramda';
12
12
  import './chunk-15c449f1.js';
13
13
  import 'i18next';
@@ -18,10 +18,35 @@ import 'tippy.js';
18
18
  import 'react-dom';
19
19
  import 'classnames';
20
20
  import 'tippy.js/dist/svg-arrow.css';
21
- import '@bigbinary/neeto-icons';
22
- import '@bigbinary/neetoui';
21
+ import '@bigbinary/neeto-icons/Link';
22
+ import '@bigbinary/neeto-icons/Column';
23
+ import '@bigbinary/neetoui/Dropdown';
23
24
  import 'react-i18next';
25
+ import '@bigbinary/neeto-icons/Close';
26
+ import '@bigbinary/neetoui/Button';
24
27
  import '@bigbinary/neeto-commons-frontend/utils';
28
+ import '@bigbinary/neeto-icons/Check';
29
+ import '@bigbinary/neetoui/Label';
30
+ import '@bigbinary/neeto-icons/Quote';
31
+ import '@bigbinary/neeto-icons/Attachment';
32
+ import '@bigbinary/neeto-icons/CodeBlock';
33
+ import '@bigbinary/neeto-icons/Code';
34
+ import '@bigbinary/neeto-icons/Highlight';
35
+ import '@bigbinary/neeto-icons/TextBold';
36
+ import '@bigbinary/neeto-icons/TextCross';
37
+ import '@bigbinary/neeto-icons/TextItalic';
38
+ import '@bigbinary/neeto-icons/Underline';
39
+ import '@bigbinary/neeto-icons/ListDot';
40
+ import '@bigbinary/neeto-icons/ListNumber';
41
+ import '@bigbinary/neeto-icons/ImageUpload';
42
+ import '@bigbinary/neeto-icons/Video';
43
+ import '@bigbinary/neeto-icons/MediaVideo';
44
+ import '@bigbinary/neeto-icons/Undo';
45
+ import '@bigbinary/neeto-icons/Redo';
46
+ import '@bigbinary/neeto-icons/Email';
47
+ import '@bigbinary/neetoui/Avatar';
48
+ import '@bigbinary/neetoui/Typography';
49
+ import '@bigbinary/neeto-icons/Smiley';
25
50
  import '@babel/runtime/helpers/asyncToGenerator';
26
51
  import '@babel/runtime/helpers/classCallCheck';
27
52
  import '@babel/runtime/helpers/createClass';
@@ -32,21 +57,56 @@ import '@babel/runtime/regenerator';
32
57
  import 'emoji-mart';
33
58
  import 'axios';
34
59
  import '@bigbinary/neeto-commons-frontend/react-utils';
60
+ import '@bigbinary/neeto-icons/Customize';
61
+ import '@bigbinary/neeto-icons/Refresh';
62
+ import '@bigbinary/neetoui/Input';
35
63
  import 'react-colorful';
36
64
  import '@bigbinary/neeto-molecules/DynamicVariables';
37
- import './chunk-c1e6a992.js';
65
+ import '@bigbinary/neetoui/Modal';
66
+ import '@bigbinary/neetoui/Tab';
67
+ import './chunk-eafe8fe4.js';
38
68
  import 'zustand/shallow';
69
+ import '@bigbinary/neetoui/Toastr';
39
70
  import 'zustand';
40
71
  import './chunk-65f73e5a.js';
72
+ import '@bigbinary/neeto-icons/LeftAlign';
73
+ import '@bigbinary/neeto-icons/CenterAlign';
74
+ import '@bigbinary/neeto-icons/RightAlign';
75
+ import '@bigbinary/neeto-icons/Delete';
41
76
  import '@bigbinary/neeto-commons-frontend/initializers';
77
+ import '@bigbinary/neetoui/Tooltip';
78
+ import '@bigbinary/neetoui/Spinner';
79
+ import '@bigbinary/neetoui/Checkbox';
80
+ import '@bigbinary/neeto-icons/MenuHorizontal';
42
81
  import '@tippyjs/react';
82
+ import '@bigbinary/neeto-icons/File';
83
+ import '@bigbinary/neeto-icons/Down';
43
84
  import '@bigbinary/neeto-molecules/CopyToClipboardButton';
44
85
  import './chunk-ade4c9e3.js';
45
86
  import './chunk-5bc5e361.js';
46
- import '@bigbinary/neetoui/formik';
47
- import './chunk-52091cdb.js';
87
+ import '@bigbinary/neeto-icons/Paragraph';
88
+ import '@bigbinary/neeto-icons/TextH1';
89
+ import '@bigbinary/neeto-icons/TextH2';
90
+ import '@bigbinary/neeto-icons/Blockquote';
91
+ import '@bigbinary/neeto-icons/Minus';
92
+ import '@bigbinary/neeto-icons/Text';
93
+ import '@bigbinary/neeto-icons/Notes';
94
+ import '@bigbinary/neeto-icons/DeleteRow';
95
+ import '@bigbinary/neeto-icons/DeleteColumn';
96
+ import '@bigbinary/neeto-icons/DeleteTable';
97
+ import '@bigbinary/neeto-icons/InsertRow';
98
+ import '@bigbinary/neeto-icons/InsertColumn';
99
+ import '@bigbinary/neeto-icons/MergeSplit';
100
+ import '@bigbinary/neeto-icons/ToggleHeaderRow';
101
+ import '@bigbinary/neetoui/formik/Form';
102
+ import '@bigbinary/neetoui/formik/Input';
103
+ import './chunk-91e5e60f.js';
104
+ import '@bigbinary/neeto-icons/MenuVertical';
105
+ import '@bigbinary/neetoui/Alert';
48
106
 
49
107
  var _excluded = ["name", "onChange", "shouldUpdate", "attachments", "mentions", "variables"];
108
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
109
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
50
110
  var FormikEditor = function FormikEditor(_ref, ref) {
51
111
  var name = _ref.name,
52
112
  _ref$onChange = _ref.onChange,
@@ -59,32 +119,33 @@ var FormikEditor = function FormikEditor(_ref, ref) {
59
119
  _ref$variables = _ref.variables,
60
120
  variables = _ref$variables === void 0 ? [] : _ref$variables,
61
121
  otherProps = _objectWithoutProperties(_ref, _excluded);
62
- return /*#__PURE__*/React.createElement(FastField, {
122
+ return /*#__PURE__*/jsx(FastField, {
63
123
  attachments: attachments,
64
124
  mentions: mentions,
65
125
  name: name,
66
126
  shouldUpdate: shouldUpdate,
67
- variables: variables
68
- }, function (_ref2) {
69
- var field = _ref2.field,
70
- form = _ref2.form,
71
- meta = _ref2.meta;
72
- return /*#__PURE__*/React.createElement(Editor, _extends({
73
- attachments: attachments,
74
- mentions: mentions,
75
- name: name,
76
- ref: ref,
77
- variables: variables,
78
- error: meta.touched ? meta.error : "",
79
- initialValue: field.value,
80
- onBlur: function onBlur() {
81
- return form.setFieldTouched(name, true);
82
- },
83
- onChange: function onChange(value) {
84
- form.setFieldValue(name, value);
85
- _onChange === null || _onChange === void 0 || _onChange(value);
86
- }
87
- }, otherProps));
127
+ variables: variables,
128
+ children: function children(_ref2) {
129
+ var field = _ref2.field,
130
+ form = _ref2.form,
131
+ meta = _ref2.meta;
132
+ return /*#__PURE__*/jsx(Editor, _objectSpread({
133
+ attachments: attachments,
134
+ mentions: mentions,
135
+ name: name,
136
+ ref: ref,
137
+ variables: variables,
138
+ error: meta.touched ? meta.error : "",
139
+ initialValue: field.value,
140
+ onBlur: function onBlur() {
141
+ return form.setFieldTouched(name, true);
142
+ },
143
+ onChange: function onChange(value) {
144
+ form.setFieldValue(name, value);
145
+ _onChange === null || _onChange === void 0 || _onChange(value);
146
+ }
147
+ }, otherProps));
148
+ }
88
149
  });
89
150
  };
90
151
  FormikEditor.displayName = "FormikNeetoEditor";
@@ -1 +1 @@
1
- {"version":3,"file":"FormikEditor.js","sources":["../src/components/Editor/FormikEditor.jsx"],"sourcesContent":["import { forwardRef, memo } from \"react\";\n\nimport { FastField } from \"formik\";\nimport { noop } from \"neetocist\";\n\nimport Editor from \".\";\n\nconst FormikEditor = (\n {\n name,\n onChange = noop,\n shouldUpdate,\n attachments = [],\n mentions = [],\n variables = [],\n ...otherProps\n },\n ref\n) => (\n <FastField {...{ attachments, mentions, name, shouldUpdate, variables }}>\n {({ field, form, meta }) => (\n <Editor\n {...{ attachments, mentions, name, ref, variables }}\n error={meta.touched ? meta.error : \"\"}\n initialValue={field.value}\n onBlur={() => form.setFieldTouched(name, true)}\n onChange={value => {\n form.setFieldValue(name, value);\n onChange?.(value);\n }}\n {...otherProps}\n />\n )}\n </FastField>\n);\n\nFormikEditor.displayName = \"FormikNeetoEditor\";\n\nexport default memo(forwardRef(FormikEditor));\n"],"names":["FormikEditor","_ref","ref","name","_ref$onChange","onChange","noop","shouldUpdate","_ref$attachments","attachments","_ref$mentions","mentions","_ref$variables","variables","otherProps","_objectWithoutProperties","_excluded","React","createElement","FastField","_ref2","field","form","meta","Editor","_extends","error","touched","initialValue","value","onBlur","setFieldTouched","setFieldValue","displayName","memo","forwardRef"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAMA,YAAY,GAAG,SAAfA,YAAYA,CAAAC,IAAA,EAUhBC,GAAG,EAAA;AAAA,EAAA,IARDC,IAAI,GAAAF,IAAA,CAAJE,IAAI;IAAAC,aAAA,GAAAH,IAAA,CACJI,QAAQ;AAARA,IAAAA,SAAQ,GAAAD,aAAA,KAAGE,KAAAA,CAAAA,GAAAA,IAAI,GAAAF,aAAA;IACfG,YAAY,GAAAN,IAAA,CAAZM,YAAY;IAAAC,gBAAA,GAAAP,IAAA,CACZQ,WAAW;AAAXA,IAAAA,WAAW,GAAAD,gBAAA,KAAG,KAAA,CAAA,GAAA,EAAE,GAAAA,gBAAA;IAAAE,aAAA,GAAAT,IAAA,CAChBU,QAAQ;AAARA,IAAAA,QAAQ,GAAAD,aAAA,KAAG,KAAA,CAAA,GAAA,EAAE,GAAAA,aAAA;IAAAE,cAAA,GAAAX,IAAA,CACbY,SAAS;AAATA,IAAAA,SAAS,GAAAD,cAAA,KAAG,KAAA,CAAA,GAAA,EAAE,GAAAA,cAAA;AACXE,IAAAA,UAAU,GAAAC,wBAAA,CAAAd,IAAA,EAAAe,SAAA,CAAA,CAAA;AAAA,EAAA,oBAIfC,KAAA,CAAAC,aAAA,CAACC,SAAS,EAAA;AAAOV,IAAAA,WAAW,EAAXA,WAAW;AAAEE,IAAAA,QAAQ,EAARA,QAAQ;AAAER,IAAAA,IAAI,EAAJA,IAAI;AAAEI,IAAAA,YAAY,EAAZA,YAAY;AAAEM,IAAAA,SAAS,EAATA,SAAAA;AAAS,GAAA,EAClE,UAAAO,KAAA,EAAA;AAAA,IAAA,IAAGC,KAAK,GAAAD,KAAA,CAALC,KAAK;MAAEC,IAAI,GAAAF,KAAA,CAAJE,IAAI;MAAEC,IAAI,GAAAH,KAAA,CAAJG,IAAI,CAAA;AAAA,IAAA,oBACnBN,KAAA,CAAAC,aAAA,CAACM,MAAM,EAAAC,QAAA,CAAA;AACChB,MAAAA,WAAW,EAAXA,WAAW;AAAEE,MAAAA,QAAQ,EAARA,QAAQ;AAAER,MAAAA,IAAI,EAAJA,IAAI;AAAED,MAAAA,GAAG,EAAHA,GAAG;AAAEW,MAAAA,SAAS,EAATA,SAAS;MACjDa,KAAK,EAAEH,IAAI,CAACI,OAAO,GAAGJ,IAAI,CAACG,KAAK,GAAG,EAAG;MACtCE,YAAY,EAAEP,KAAK,CAACQ,KAAM;MAC1BC,MAAM,EAAE,SAAAA,MAAA,GAAA;AAAA,QAAA,OAAMR,IAAI,CAACS,eAAe,CAAC5B,IAAI,EAAE,IAAI,CAAC,CAAA;OAAC;AAC/CE,MAAAA,QAAQ,EAAE,SAAAA,QAAAwB,CAAAA,KAAK,EAAI;AACjBP,QAAAA,IAAI,CAACU,aAAa,CAAC7B,IAAI,EAAE0B,KAAK,CAAC,CAAA;AAC/BxB,QAAAA,SAAQ,aAARA,SAAQ,KAAA,KAAA,CAAA,IAARA,SAAQ,CAAGwB,KAAK,CAAC,CAAA;AACnB,OAAA;KACIf,EAAAA,UAAU,CACf,CAAC,CAAA;AAAA,GAEK,CAAC,CAAA;AAAA,CACb,CAAA;AAEDd,YAAY,CAACiC,WAAW,GAAG,mBAAmB,CAAA;AAE9C,qBAAA,aAAeC,IAAI,eAACC,UAAU,CAACnC,YAAY,CAAC,CAAC;;;;"}
1
+ {"version":3,"file":"FormikEditor.js","sources":["../src/components/Editor/FormikEditor.jsx"],"sourcesContent":["import { forwardRef, memo } from \"react\";\n\nimport { FastField } from \"formik\";\nimport { noop } from \"neetocist\";\n\nimport Editor from \".\";\n\nconst FormikEditor = (\n {\n name,\n onChange = noop,\n shouldUpdate,\n attachments = [],\n mentions = [],\n variables = [],\n ...otherProps\n },\n ref\n) => (\n <FastField {...{ attachments, mentions, name, shouldUpdate, variables }}>\n {({ field, form, meta }) => (\n <Editor\n {...{ attachments, mentions, name, ref, variables }}\n error={meta.touched ? meta.error : \"\"}\n initialValue={field.value}\n onBlur={() => form.setFieldTouched(name, true)}\n onChange={value => {\n form.setFieldValue(name, value);\n onChange?.(value);\n }}\n {...otherProps}\n />\n )}\n </FastField>\n);\n\nFormikEditor.displayName = \"FormikNeetoEditor\";\n\nexport default memo(forwardRef(FormikEditor));\n"],"names":["FormikEditor","_ref","ref","name","_ref$onChange","onChange","noop","shouldUpdate","_ref$attachments","attachments","_ref$mentions","mentions","_ref$variables","variables","otherProps","_objectWithoutProperties","_excluded","_jsx","FastField","children","_ref2","field","form","meta","Editor","_objectSpread","error","touched","initialValue","value","onBlur","setFieldTouched","setFieldValue","displayName","memo","forwardRef"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAMA,YAAY,GAAG,SAAfA,YAAYA,CAAAC,IAAA,EAUhBC,GAAG,EAAA;AAAA,EAAA,IARDC,IAAI,GAAAF,IAAA,CAAJE,IAAI;IAAAC,aAAA,GAAAH,IAAA,CACJI,QAAQ;AAARA,IAAAA,SAAQ,GAAAD,aAAA,KAAGE,KAAAA,CAAAA,GAAAA,IAAI,GAAAF,aAAA;IACfG,YAAY,GAAAN,IAAA,CAAZM,YAAY;IAAAC,gBAAA,GAAAP,IAAA,CACZQ,WAAW;AAAXA,IAAAA,WAAW,GAAAD,gBAAA,KAAG,KAAA,CAAA,GAAA,EAAE,GAAAA,gBAAA;IAAAE,aAAA,GAAAT,IAAA,CAChBU,QAAQ;AAARA,IAAAA,QAAQ,GAAAD,aAAA,KAAG,KAAA,CAAA,GAAA,EAAE,GAAAA,aAAA;IAAAE,cAAA,GAAAX,IAAA,CACbY,SAAS;AAATA,IAAAA,SAAS,GAAAD,cAAA,KAAG,KAAA,CAAA,GAAA,EAAE,GAAAA,cAAA;AACXE,IAAAA,UAAU,GAAAC,wBAAA,CAAAd,IAAA,EAAAe,SAAA,CAAA,CAAA;EAAA,oBAIfC,GAAA,CAACC,SAAS,EAAA;AAAOT,IAAAA,WAAW,EAAXA,WAAW;AAAEE,IAAAA,QAAQ,EAARA,QAAQ;AAAER,IAAAA,IAAI,EAAJA,IAAI;AAAEI,IAAAA,YAAY,EAAZA,YAAY;AAAEM,IAAAA,SAAS,EAATA,SAAS;IAAAM,QAAA,EAClE,SAAAA,QAAAA,CAAAC,KAAA,EAAA;AAAA,MAAA,IAAGC,KAAK,GAAAD,KAAA,CAALC,KAAK;QAAEC,IAAI,GAAAF,KAAA,CAAJE,IAAI;QAAEC,IAAI,GAAAH,KAAA,CAAJG,IAAI,CAAA;AAAA,MAAA,oBACnBN,GAAA,CAACO,MAAM,EAAAC,aAAA,CAAA;AACChB,QAAAA,WAAW,EAAXA,WAAW;AAAEE,QAAAA,QAAQ,EAARA,QAAQ;AAAER,QAAAA,IAAI,EAAJA,IAAI;AAAED,QAAAA,GAAG,EAAHA,GAAG;AAAEW,QAAAA,SAAS,EAATA,SAAS;QACjDa,KAAK,EAAEH,IAAI,CAACI,OAAO,GAAGJ,IAAI,CAACG,KAAK,GAAG,EAAG;QACtCE,YAAY,EAAEP,KAAK,CAACQ,KAAM;QAC1BC,MAAM,EAAE,SAAAA,MAAA,GAAA;AAAA,UAAA,OAAMR,IAAI,CAACS,eAAe,CAAC5B,IAAI,EAAE,IAAI,CAAC,CAAA;SAAC;AAC/CE,QAAAA,QAAQ,EAAE,SAAAA,QAAAwB,CAAAA,KAAK,EAAI;AACjBP,UAAAA,IAAI,CAACU,aAAa,CAAC7B,IAAI,EAAE0B,KAAK,CAAC,CAAA;AAC/BxB,UAAAA,SAAQ,aAARA,SAAQ,KAAA,KAAA,CAAA,IAARA,SAAQ,CAAGwB,KAAK,CAAC,CAAA;AACnB,SAAA;OACIf,EAAAA,UAAU,CACf,CAAC,CAAA;AAAA,KAAA;AACH,GACQ,CAAC,CAAA;AAAA,CACb,CAAA;AAEDd,YAAY,CAACiC,WAAW,GAAG,mBAAmB,CAAA;AAE9C,qBAAA,aAAeC,IAAI,eAACC,UAAU,CAACnC,YAAY,CAAC,CAAC;;;;"}
package/dist/Menu.js CHANGED
@@ -1,11 +1,11 @@
1
- import '@babel/runtime/helpers/extends';
2
1
  import '@babel/runtime/helpers/defineProperty';
3
2
  import '@babel/runtime/helpers/toConsumableArray';
4
3
  import '@babel/runtime/helpers/slicedToArray';
5
4
  import 'react';
6
5
  import 'ramda';
7
- export { M as default } from './chunk-b39dfdd8.js';
6
+ export { M as default } from './chunk-1ac4a222.js';
8
7
  import './chunk-d17f73d0.js';
8
+ import 'react/jsx-runtime';
9
9
  import './chunk-15c449f1.js';
10
10
  import 'i18next';
11
11
  import 'tippy.js';
@@ -14,10 +14,35 @@ import 'classnames';
14
14
  import './chunk-edd8b9fe.js';
15
15
  import '@bigbinary/neeto-cist';
16
16
  import 'tippy.js/dist/svg-arrow.css';
17
- import '@bigbinary/neeto-icons';
18
- import '@bigbinary/neetoui';
17
+ import '@bigbinary/neeto-icons/Link';
18
+ import '@bigbinary/neeto-icons/Column';
19
+ import '@bigbinary/neetoui/Dropdown';
19
20
  import 'react-i18next';
21
+ import '@bigbinary/neeto-icons/Close';
22
+ import '@bigbinary/neetoui/Button';
20
23
  import '@bigbinary/neeto-commons-frontend/utils';
24
+ import '@bigbinary/neeto-icons/Check';
25
+ import '@bigbinary/neetoui/Label';
26
+ import '@bigbinary/neeto-icons/Quote';
27
+ import '@bigbinary/neeto-icons/Attachment';
28
+ import '@bigbinary/neeto-icons/CodeBlock';
29
+ import '@bigbinary/neeto-icons/Code';
30
+ import '@bigbinary/neeto-icons/Highlight';
31
+ import '@bigbinary/neeto-icons/TextBold';
32
+ import '@bigbinary/neeto-icons/TextCross';
33
+ import '@bigbinary/neeto-icons/TextItalic';
34
+ import '@bigbinary/neeto-icons/Underline';
35
+ import '@bigbinary/neeto-icons/ListDot';
36
+ import '@bigbinary/neeto-icons/ListNumber';
37
+ import '@bigbinary/neeto-icons/ImageUpload';
38
+ import '@bigbinary/neeto-icons/Video';
39
+ import '@bigbinary/neeto-icons/MediaVideo';
40
+ import '@bigbinary/neeto-icons/Undo';
41
+ import '@bigbinary/neeto-icons/Redo';
42
+ import '@bigbinary/neeto-icons/Email';
43
+ import '@bigbinary/neetoui/Avatar';
44
+ import '@bigbinary/neetoui/Typography';
45
+ import '@bigbinary/neeto-icons/Smiley';
21
46
  import '@babel/runtime/helpers/asyncToGenerator';
22
47
  import '@babel/runtime/helpers/classCallCheck';
23
48
  import '@babel/runtime/helpers/createClass';
@@ -28,14 +53,29 @@ import '@babel/runtime/regenerator';
28
53
  import 'emoji-mart';
29
54
  import 'axios';
30
55
  import '@bigbinary/neeto-commons-frontend/react-utils';
56
+ import '@bigbinary/neeto-icons/Customize';
57
+ import '@bigbinary/neeto-icons/Refresh';
58
+ import '@bigbinary/neetoui/Input';
31
59
  import 'react-colorful';
32
60
  import '@babel/runtime/helpers/objectWithoutProperties';
33
61
  import '@bigbinary/neeto-molecules/DynamicVariables';
34
- import './chunk-c1e6a992.js';
62
+ import '@bigbinary/neetoui/Modal';
63
+ import '@bigbinary/neetoui/Tab';
64
+ import './chunk-eafe8fe4.js';
35
65
  import 'zustand/shallow';
66
+ import '@bigbinary/neetoui/Toastr';
36
67
  import 'zustand';
37
68
  import './chunk-65f73e5a.js';
69
+ import '@bigbinary/neeto-icons/LeftAlign';
70
+ import '@bigbinary/neeto-icons/CenterAlign';
71
+ import '@bigbinary/neeto-icons/RightAlign';
72
+ import '@bigbinary/neeto-icons/Delete';
38
73
  import '@bigbinary/neeto-commons-frontend/initializers';
74
+ import '@bigbinary/neetoui/Tooltip';
75
+ import '@bigbinary/neetoui/Spinner';
76
+ import '@bigbinary/neetoui/Checkbox';
77
+ import '@bigbinary/neeto-icons/MenuHorizontal';
39
78
  import '@tippyjs/react';
79
+ import '@bigbinary/neeto-icons/File';
40
80
  import 'yup';
41
81
  //# sourceMappingURL=Menu.js.map
package/dist/Menu.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Menu.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}