@jotforminc/dnd-builder 2.0.2 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,25 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [2.2.1](https://github.com/jotform/dnd-builder/compare/v2.0.2...v2.2.1) (2022-06-24)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * changed withclickoutside logic ([5b0cac3](https://github.com/jotform/dnd-builder/commit/5b0cac338e740ede76de9bfe04eebe13bfb135ef))
11
+ * **readme:** readme img height fix ([18cf8cb](https://github.com/jotform/dnd-builder/commit/18cf8cbf2c653caebc7d7a6f6a17e8a3b2c4dc20))
12
+ * **TextEditor:** fix for content ([f0a8327](https://github.com/jotform/dnd-builder/commit/f0a83275905ec98ff200c34237e6f88793cdde22))
13
+
14
+ ## [2.2.0](https://github.com/jotform/dnd-builder/compare/v2.0.3...v2.2.0) (2022-06-14)
15
+
16
+ ### [2.0.3](https://github.com/jotform/dnd-builder/compare/v2.0.2...v2.0.3) (2022-03-10)
17
+
18
+
19
+ ### Bug Fixes
20
+
21
+ * changed withclickoutside logic ([5b0cac3](https://github.com/jotform/dnd-builder/commit/5b0cac338e740ede76de9bfe04eebe13bfb135ef))
22
+ * **readme:** readme img height fix ([18cf8cb](https://github.com/jotform/dnd-builder/commit/18cf8cbf2c653caebc7d7a6f6a17e8a3b2c4dc20))
23
+
5
24
  ### [2.0.2](https://github.com/jotform/dnd-builder/compare/v2.0.0...v2.0.2) (2021-12-02)
6
25
 
7
26
 
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="https://cdn.jotfor.ms/assets/img/logo2021/jotform-logo-dnd.png" alt="Jotform DND Builder" style="max-height: 50px;" />
2
+ <img src="https://cdn.jotfor.ms/assets/img/logo2021/jotform-logo-dnd.png" alt="Jotform DND Builder" height="50px" />
3
3
  </p>
4
4
  <h1 align="center">Jotform - React Page Builder <small></small></h1>
5
5
 
@@ -4,7 +4,6 @@ require('core-js/modules/es.array.map.js');
4
4
  var React = require('react');
5
5
  var ReactQuill = require('react-quill');
6
6
  var PropTypes = require('prop-types');
7
- var withClickOutside = require('../withClickOutside.js');
8
7
  var textEditorConstants = require('./textEditorConstants.js');
9
8
  var fonts = require('../../constants/fonts.js');
10
9
  require('react-quill/dist/quill.snow.css');
@@ -12,58 +11,111 @@ var jsxRuntime = require('react/jsx-runtime');
12
11
 
13
12
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
13
 
14
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
15
15
  var ReactQuill__default = /*#__PURE__*/_interopDefaultLegacy(ReactQuill);
16
16
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
17
17
 
18
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
19
+
20
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
21
+
22
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
23
+
24
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
25
+
26
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
27
+
28
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
29
+
30
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
31
+
32
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
33
+
34
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
35
+
36
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
37
+
38
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
39
+
40
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
18
41
  var Size = ReactQuill__default['default'].Quill.import('attributors/style/size');
19
42
  Size.whitelist = fonts.fontSizes.map(function (s) {
20
43
  return "".concat(s, "px");
21
44
  });
22
45
  ReactQuill__default['default'].Quill.register(Size, true);
23
46
 
24
- var QuillEditor = function QuillEditor(_ref) {
25
- var content = _ref.content,
26
- handleSave = _ref.handleSave,
27
- placeholder = _ref.placeholder,
28
- setIsTextEditorOpen = _ref.setIsTextEditorOpen;
29
- var quill = React.useRef(null);
30
-
31
- var saveAndQuit = function saveAndQuit() {
32
- if (quill.current === null) return;
33
- var editor = quill.current.getEditor();
34
- var unprivilegedEditor = quill.current.makeUnprivilegedEditor(editor);
35
- handleSave(unprivilegedEditor.getHTML());
36
- setIsTextEditorOpen(false);
37
- };
38
-
39
- React.useEffect(function () {
40
- if (quill.current !== null) {
41
- var editor = quill.current.getEditor();
42
- editor.setSelection(0, content.length);
43
- }
47
+ var QuillEditor = /*#__PURE__*/function (_React$PureComponent) {
48
+ _inherits(QuillEditor, _React$PureComponent);
44
49
 
45
- return saveAndQuit;
46
- }, []);
47
- var handleKeyDown = React.useCallback(function (e) {
48
- e.stopPropagation();
50
+ var _super = _createSuper(QuillEditor);
49
51
 
50
- if (e.keyCode === 27) {
51
- saveAndQuit();
52
+ function QuillEditor(props) {
53
+ var _this;
54
+
55
+ _classCallCheck(this, QuillEditor);
56
+
57
+ _this = _super.call(this, props);
58
+
59
+ _defineProperty(_assertThisInitialized(_this), "saveAndQuit", function () {
60
+ var _this$props = _this.props,
61
+ content = _this$props.content,
62
+ handleSave = _this$props.handleSave,
63
+ setIsTextEditorOpen = _this$props.setIsTextEditorOpen;
64
+ setIsTextEditorOpen(false);
65
+ handleSave(content);
66
+ });
67
+
68
+ _defineProperty(_assertThisInitialized(_this), "handleKeyDown", function (e) {
69
+ e.stopPropagation();
70
+
71
+ if (e.keyCode === 27) {
72
+ _this.saveAndQuit();
73
+ }
74
+ });
75
+
76
+ _this.quill = /*#__PURE__*/React__default['default'].createRef();
77
+ return _this;
78
+ }
79
+
80
+ _createClass(QuillEditor, [{
81
+ key: "componentDidMount",
82
+ value: function componentDidMount() {
83
+ if (this.quill.current !== null) {
84
+ var content = this.props.content;
85
+ var editor = this.quill.current.getEditor();
86
+ editor.setSelection(0, content.length);
87
+ }
52
88
  }
53
- }, []);
54
- return /*#__PURE__*/jsxRuntime.jsx("div", {
55
- className: "f-all",
56
- onKeyDown: handleKeyDown,
57
- children: /*#__PURE__*/jsxRuntime.jsx(ReactQuill__default['default'], {
58
- ref: quill,
59
- defaultValue: content,
60
- formats: QuillEditor.formats,
61
- modules: QuillEditor.modules,
62
- placeholder: placeholder,
63
- preserveWhitespace: true
64
- })
65
- });
66
- };
89
+ }, {
90
+ key: "componentWillUnmount",
91
+ value: function componentWillUnmount() {
92
+ this.saveAndQuit();
93
+ }
94
+ }, {
95
+ key: "render",
96
+ value: function render() {
97
+ var _this$props2 = this.props,
98
+ content = _this$props2.content,
99
+ placeholder = _this$props2.placeholder,
100
+ setContent = _this$props2.setContent;
101
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
102
+ className: "f-all",
103
+ onKeyDown: this.handleKeyDown,
104
+ children: /*#__PURE__*/jsxRuntime.jsx(ReactQuill__default['default'], {
105
+ ref: this.quill,
106
+ formats: QuillEditor.formats,
107
+ modules: QuillEditor.modules,
108
+ onChange: setContent,
109
+ placeholder: placeholder,
110
+ preserveWhitespace: true,
111
+ value: content
112
+ })
113
+ });
114
+ }
115
+ }]);
116
+
117
+ return QuillEditor;
118
+ }(React__default['default'].PureComponent);
67
119
 
68
120
  QuillEditor.modules = textEditorConstants.modules;
69
121
  QuillEditor.formats = textEditorConstants.formats;
@@ -71,15 +123,16 @@ QuillEditor.propTypes = {
71
123
  content: PropTypes__default['default'].string,
72
124
  handleSave: PropTypes__default['default'].func,
73
125
  placeholder: PropTypes__default['default'].string,
126
+ setContent: PropTypes__default['default'].func,
74
127
  setIsTextEditorOpen: PropTypes__default['default'].func
75
128
  };
76
129
  QuillEditor.defaultProps = {
77
130
  content: '',
78
131
  handleSave: function handleSave() {},
79
132
  placeholder: 'Click to edit text',
80
- setIsTextEditorOpen: {}
133
+ setContent: function setContent() {},
134
+ setIsTextEditorOpen: function setIsTextEditorOpen() {}
81
135
  };
82
- var QuillEditor$1 = withClickOutside(QuillEditor);
83
136
 
84
- module.exports = QuillEditor$1;
137
+ module.exports = QuillEditor;
85
138
  //# sourceMappingURL=QuillEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QuillEditor.js","sources":["../../../../src/components/TextEditor/QuillEditor.js"],"sourcesContent":["import { useEffect, useRef, useCallback } from 'react';\nimport ReactQuill from 'react-quill';\nimport PropTypes from 'prop-types';\nimport withClickOutside from '../withClickOutside';\nimport { formats, modules } from './textEditorConstants';\nimport { fontSizes } from '../../constants/fonts';\nimport 'react-quill/dist/quill.snow.css';\n\nconst Size = ReactQuill.Quill.import('attributors/style/size');\nSize.whitelist = fontSizes.map(s => `${s}px`);\nReactQuill.Quill.register(Size, true);\n\nconst QuillEditor = ({\n content,\n handleSave,\n placeholder,\n setIsTextEditorOpen,\n}) => {\n const quill = useRef(null);\n const saveAndQuit = () => {\n if (quill.current === null) return;\n const editor = quill.current.getEditor();\n const unprivilegedEditor = quill.current.makeUnprivilegedEditor(editor);\n handleSave(unprivilegedEditor.getHTML());\n setIsTextEditorOpen(false);\n };\n\n useEffect(() => {\n if (quill.current !== null) {\n const editor = quill.current.getEditor();\n editor.setSelection(0, content.length);\n }\n return saveAndQuit;\n }, []);\n\n const handleKeyDown = useCallback(e => {\n e.stopPropagation();\n if (e.keyCode === 27) {\n saveAndQuit();\n }\n }, []);\n\n return (\n <div\n className=\"f-all\"\n onKeyDown={handleKeyDown}\n >\n <ReactQuill\n ref={quill}\n defaultValue={content}\n formats={QuillEditor.formats}\n modules={QuillEditor.modules}\n placeholder={placeholder}\n preserveWhitespace\n />\n </div>\n );\n};\n\nQuillEditor.modules = modules;\nQuillEditor.formats = formats;\n\nQuillEditor.propTypes = {\n content: PropTypes.string,\n handleSave: PropTypes.func,\n placeholder: PropTypes.string,\n setIsTextEditorOpen: PropTypes.func,\n};\n\nQuillEditor.defaultProps = {\n content: '',\n handleSave: () => {},\n placeholder: 'Click to edit text',\n setIsTextEditorOpen: {},\n};\n\nexport default withClickOutside(QuillEditor);\n"],"names":["Size","ReactQuill","Quill","import","whitelist","fontSizes","map","s","register","QuillEditor","content","handleSave","placeholder","setIsTextEditorOpen","quill","useRef","saveAndQuit","current","editor","getEditor","unprivilegedEditor","makeUnprivilegedEditor","getHTML","useEffect","setSelection","length","handleKeyDown","useCallback","e","stopPropagation","keyCode","_jsx","formats","modules","propTypes","PropTypes","string","func","defaultProps","withClickOutside"],"mappings":";;;;;;;;;;;;;;;;;AAQA,IAAMA,IAAI,GAAGC,8BAAU,CAACC,KAAX,CAAiBC,MAAjB,CAAwB,wBAAxB,CAAb;AACAH,IAAI,CAACI,SAAL,GAAiBC,eAAS,CAACC,GAAV,CAAc,UAAAC,CAAC;AAAA,mBAAOA,CAAP;AAAA,CAAf,CAAjB;AACAN,8BAAU,CAACC,KAAX,CAAiBM,QAAjB,CAA0BR,IAA1B,EAAgC,IAAhC;;AAEA,IAAMS,WAAW,GAAG,SAAdA,WAAc,OAKd;AAAA,MAJJC,OAII,QAJJA,OAII;AAAA,MAHJC,UAGI,QAHJA,UAGI;AAAA,MAFJC,WAEI,QAFJA,WAEI;AAAA,MADJC,mBACI,QADJA,mBACI;AACJ,MAAMC,KAAK,GAAGC,YAAM,CAAC,IAAD,CAApB;;AACA,MAAMC,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxB,QAAIF,KAAK,CAACG,OAAN,KAAkB,IAAtB,EAA4B;AAC5B,QAAMC,MAAM,GAAGJ,KAAK,CAACG,OAAN,CAAcE,SAAd,EAAf;AACA,QAAMC,kBAAkB,GAAGN,KAAK,CAACG,OAAN,CAAcI,sBAAd,CAAqCH,MAArC,CAA3B;AACAP,IAAAA,UAAU,CAACS,kBAAkB,CAACE,OAAnB,EAAD,CAAV;AACAT,IAAAA,mBAAmB,CAAC,KAAD,CAAnB;AACD,GAND;;AAQAU,EAAAA,eAAS,CAAC,YAAM;AACd,QAAIT,KAAK,CAACG,OAAN,KAAkB,IAAtB,EAA4B;AAC1B,UAAMC,MAAM,GAAGJ,KAAK,CAACG,OAAN,CAAcE,SAAd,EAAf;AACAD,MAAAA,MAAM,CAACM,YAAP,CAAoB,CAApB,EAAuBd,OAAO,CAACe,MAA/B;AACD;;AACD,WAAOT,WAAP;AACD,GANQ,EAMN,EANM,CAAT;AAQA,MAAMU,aAAa,GAAGC,iBAAW,CAAC,UAAAC,CAAC,EAAI;AACrCA,IAAAA,CAAC,CAACC,eAAF;;AACA,QAAID,CAAC,CAACE,OAAF,KAAc,EAAlB,EAAsB;AACpBd,MAAAA,WAAW;AACZ;AACF,GALgC,EAK9B,EAL8B,CAAjC;AAOA,sBACEe;AACE,IAAA,SAAS,EAAC,OADZ;AAEE,IAAA,SAAS,EAAEL,aAFb;AAAA,2BAIEK,eAAC9B,8BAAD;AACE,MAAA,GAAG,EAAEa,KADP;AAEE,MAAA,YAAY,EAAEJ,OAFhB;AAGE,MAAA,OAAO,EAAED,WAAW,CAACuB,OAHvB;AAIE,MAAA,OAAO,EAAEvB,WAAW,CAACwB,OAJvB;AAKE,MAAA,WAAW,EAAErB,WALf;AAME,MAAA,kBAAkB;AANpB;AAJF,IADF;AAeD,CA7CD;;AA+CAH,WAAW,CAACwB,OAAZ,GAAsBA,2BAAtB;AACAxB,WAAW,CAACuB,OAAZ,GAAsBA,2BAAtB;AAEAvB,WAAW,CAACyB,SAAZ,GAAwB;AACtBxB,EAAAA,OAAO,EAAEyB,6BAAS,CAACC,MADG;AAEtBzB,EAAAA,UAAU,EAAEwB,6BAAS,CAACE,IAFA;AAGtBzB,EAAAA,WAAW,EAAEuB,6BAAS,CAACC,MAHD;AAItBvB,EAAAA,mBAAmB,EAAEsB,6BAAS,CAACE;AAJT,CAAxB;AAOA5B,WAAW,CAAC6B,YAAZ,GAA2B;AACzB5B,EAAAA,OAAO,EAAE,EADgB;AAEzBC,EAAAA,UAAU,EAAE,sBAAM,EAFO;AAGzBC,EAAAA,WAAW,EAAE,oBAHY;AAIzBC,EAAAA,mBAAmB,EAAE;AAJI,CAA3B;AAOA,oBAAe0B,gBAAgB,CAAC9B,WAAD,CAA/B;;;;"}
1
+ {"version":3,"file":"QuillEditor.js","sources":["../../../../src/components/TextEditor/QuillEditor.js"],"sourcesContent":["import React from 'react';\nimport ReactQuill from 'react-quill';\nimport PropTypes from 'prop-types';\nimport { formats, modules } from './textEditorConstants';\nimport { fontSizes } from '../../constants/fonts';\nimport 'react-quill/dist/quill.snow.css';\n\nconst Size = ReactQuill.Quill.import('attributors/style/size');\nSize.whitelist = fontSizes.map(s => `${s}px`);\nReactQuill.Quill.register(Size, true);\n\nclass QuillEditor extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.quill = React.createRef();\n }\n\n componentDidMount() {\n if (this.quill.current !== null) {\n const { content } = this.props;\n const editor = this.quill.current.getEditor();\n editor.setSelection(0, content.length);\n }\n }\n\n componentWillUnmount() {\n this.saveAndQuit();\n }\n\n saveAndQuit = () => {\n const { content, handleSave, setIsTextEditorOpen } = this.props;\n setIsTextEditorOpen(false);\n handleSave(content);\n }\n\n handleKeyDown = e => {\n e.stopPropagation();\n if (e.keyCode === 27) {\n this.saveAndQuit();\n }\n }\n\n render() {\n const {\n content,\n placeholder,\n setContent,\n } = this.props;\n\n return (\n <div\n className=\"f-all\"\n onKeyDown={this.handleKeyDown}\n >\n <ReactQuill\n ref={this.quill}\n formats={QuillEditor.formats}\n modules={QuillEditor.modules}\n onChange={setContent}\n placeholder={placeholder}\n preserveWhitespace\n value={content}\n />\n </div>\n );\n }\n}\n\nQuillEditor.modules = modules;\nQuillEditor.formats = formats;\n\nQuillEditor.propTypes = {\n content: PropTypes.string,\n handleSave: PropTypes.func,\n placeholder: PropTypes.string,\n setContent: PropTypes.func,\n setIsTextEditorOpen: PropTypes.func,\n};\n\nQuillEditor.defaultProps = {\n content: '',\n handleSave: () => {},\n placeholder: 'Click to edit text',\n setContent: () => {},\n setIsTextEditorOpen: () => {},\n};\n\nexport default QuillEditor;\n"],"names":["Size","ReactQuill","Quill","import","whitelist","fontSizes","map","s","register","QuillEditor","props","content","handleSave","setIsTextEditorOpen","e","stopPropagation","keyCode","saveAndQuit","quill","React","createRef","current","editor","getEditor","setSelection","length","placeholder","setContent","_jsx","handleKeyDown","formats","modules","PureComponent","propTypes","PropTypes","string","func","defaultProps"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAMA,IAAI,GAAGC,8BAAU,CAACC,KAAX,CAAiBC,MAAjB,CAAwB,wBAAxB,CAAb;AACAH,IAAI,CAACI,SAAL,GAAiBC,eAAS,CAACC,GAAV,CAAc,UAAAC,CAAC;AAAA,mBAAOA,CAAP;AAAA,CAAf,CAAjB;AACAN,8BAAU,CAACC,KAAX,CAAiBM,QAAjB,CAA0BR,IAA1B,EAAgC,IAAhC;;IAEMS;;;;;AACJ,uBAAYC,KAAZ,EAAmB;AAAA;;AAAA;;AACjB,8BAAMA,KAAN;;AADiB,kEAkBL,YAAM;AAClB,wBAAqD,MAAKA,KAA1D;AAAA,UAAQC,OAAR,eAAQA,OAAR;AAAA,UAAiBC,UAAjB,eAAiBA,UAAjB;AAAA,UAA6BC,mBAA7B,eAA6BA,mBAA7B;AACAA,MAAAA,mBAAmB,CAAC,KAAD,CAAnB;AACAD,MAAAA,UAAU,CAACD,OAAD,CAAV;AACD,KAtBkB;;AAAA,oEAwBH,UAAAG,CAAC,EAAI;AACnBA,MAAAA,CAAC,CAACC,eAAF;;AACA,UAAID,CAAC,CAACE,OAAF,KAAc,EAAlB,EAAsB;AACpB,cAAKC,WAAL;AACD;AACF,KA7BkB;;AAGjB,UAAKC,KAAL,gBAAaC,yBAAK,CAACC,SAAN,EAAb;AAHiB;AAIlB;;;;WAED,6BAAoB;AAClB,UAAI,KAAKF,KAAL,CAAWG,OAAX,KAAuB,IAA3B,EAAiC;AAC/B,YAAQV,OAAR,GAAoB,KAAKD,KAAzB,CAAQC,OAAR;AACA,YAAMW,MAAM,GAAG,KAAKJ,KAAL,CAAWG,OAAX,CAAmBE,SAAnB,EAAf;AACAD,QAAAA,MAAM,CAACE,YAAP,CAAoB,CAApB,EAAuBb,OAAO,CAACc,MAA/B;AACD;AACF;;;WAED,gCAAuB;AACrB,WAAKR,WAAL;AACD;;;WAeD,kBAAS;AACP,yBAII,KAAKP,KAJT;AAAA,UACEC,OADF,gBACEA,OADF;AAAA,UAEEe,WAFF,gBAEEA,WAFF;AAAA,UAGEC,UAHF,gBAGEA,UAHF;AAMA,0BACEC;AACE,QAAA,SAAS,EAAC,OADZ;AAEE,QAAA,SAAS,EAAE,KAAKC,aAFlB;AAAA,+BAIED,eAAC3B,8BAAD;AACE,UAAA,GAAG,EAAE,KAAKiB,KADZ;AAEE,UAAA,OAAO,EAAET,WAAW,CAACqB,OAFvB;AAGE,UAAA,OAAO,EAAErB,WAAW,CAACsB,OAHvB;AAIE,UAAA,QAAQ,EAAEJ,UAJZ;AAKE,UAAA,WAAW,EAAED,WALf;AAME,UAAA,kBAAkB,MANpB;AAOE,UAAA,KAAK,EAAEf;AAPT;AAJF,QADF;AAgBD;;;;EAvDuBQ,yBAAK,CAACa;;AA0DhCvB,WAAW,CAACsB,OAAZ,GAAsBA,2BAAtB;AACAtB,WAAW,CAACqB,OAAZ,GAAsBA,2BAAtB;AAEArB,WAAW,CAACwB,SAAZ,GAAwB;AACtBtB,EAAAA,OAAO,EAAEuB,6BAAS,CAACC,MADG;AAEtBvB,EAAAA,UAAU,EAAEsB,6BAAS,CAACE,IAFA;AAGtBV,EAAAA,WAAW,EAAEQ,6BAAS,CAACC,MAHD;AAItBR,EAAAA,UAAU,EAAEO,6BAAS,CAACE,IAJA;AAKtBvB,EAAAA,mBAAmB,EAAEqB,6BAAS,CAACE;AALT,CAAxB;AAQA3B,WAAW,CAAC4B,YAAZ,GAA2B;AACzB1B,EAAAA,OAAO,EAAE,EADgB;AAEzBC,EAAAA,UAAU,EAAE,sBAAM,EAFO;AAGzBc,EAAAA,WAAW,EAAE,oBAHY;AAIzBC,EAAAA,UAAU,EAAE,sBAAM,EAJO;AAKzBd,EAAAA,mBAAmB,EAAE,+BAAM;AALF,CAA3B;;;;"}
@@ -2,6 +2,7 @@
2
2
 
3
3
  var React = require('react');
4
4
  var PropTypes = require('prop-types');
5
+ var domPurify = require('dompurify');
5
6
  var QuillEditor = require('./QuillEditor.js');
6
7
  var builderContext = require('../../utils/builderContext.js');
7
8
  var jsxRuntime = require('react/jsx-runtime');
@@ -9,6 +10,19 @@ var jsxRuntime = require('react/jsx-runtime');
9
10
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
11
 
11
12
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
13
+ var domPurify__default = /*#__PURE__*/_interopDefaultLegacy(domPurify);
14
+
15
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
16
+
17
+ 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."); }
18
+
19
+ 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); }
20
+
21
+ 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; }
22
+
23
+ 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; }
24
+
25
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
26
 
13
27
  var TextEditor = function TextEditor(_ref) {
14
28
  var content = _ref.content,
@@ -17,6 +31,11 @@ var TextEditor = function TextEditor(_ref) {
17
31
  isSelected = _ref.isSelected,
18
32
  placeholder = _ref.placeholder;
19
33
 
34
+ var _useState = React.useState(content),
35
+ _useState2 = _slicedToArray(_useState, 2),
36
+ _content = _useState2[0],
37
+ setContent = _useState2[1];
38
+
20
39
  var _useBuilderContext = builderContext.useBuilderContext(),
21
40
  isTextEditorOpen = _useBuilderContext.isTextEditorOpen,
22
41
  setIsTextEditorOpen = _useBuilderContext.setIsTextEditorOpen;
@@ -28,26 +47,19 @@ var TextEditor = function TextEditor(_ref) {
28
47
  }, [isSelected, isLocked]);
29
48
  var isNotEmpty = React.useMemo(function () {
30
49
  var el = document.createElement('div');
31
- el.innerHTML = content;
50
+ el.innerHTML = domPurify__default['default'].sanitize(_content);
32
51
  return !!el.innerText;
33
- }, [content]);
34
- var onClickOutside = React.useCallback(function () {
35
- setTimeout(function () {
36
- return setIsTextEditorOpen(false);
37
- }, 1000);
38
- }, [isTextEditorOpen]);
52
+ }, [_content]);
39
53
  return isSelected && isTextEditorOpen ? /*#__PURE__*/jsxRuntime.jsx(QuillEditor, {
40
- content: content,
41
- exceptionalClasses: ['ql-toolbar'],
54
+ content: _content,
42
55
  handleSave: handleSave,
43
- onClickOutside: onClickOutside,
44
56
  placeholder: placeholder,
45
- setIsTextEditorOpen: setIsTextEditorOpen,
46
- withClickOutsideWrapperClass: "textEditorWrapper f-all"
57
+ setContent: setContent,
58
+ setIsTextEditorOpen: setIsTextEditorOpen
47
59
  }) : /*#__PURE__*/jsxRuntime.jsx("div", {
48
60
  className: "f-all ql-editor".concat(isNotEmpty ? '' : ' isEmptyTextElement'),
49
61
  dangerouslySetInnerHTML: {
50
- __html: isNotEmpty ? content : placeholder
62
+ __html: isNotEmpty ? _content : placeholder
51
63
  },
52
64
  onClick: onClick,
53
65
  onKeyDown: function onKeyDown() {}
@@ -1 +1 @@
1
- {"version":3,"file":"TextEditor.js","sources":["../../../../src/components/TextEditor/TextEditor.js"],"sourcesContent":["import { useCallback, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport QuillEditor from './QuillEditor';\nimport { useBuilderContext } from '../../utils/builderContext';\n\nconst TextEditor = ({\n content,\n handleSave,\n isLocked,\n isSelected,\n placeholder,\n}) => {\n const { isTextEditorOpen, setIsTextEditorOpen } = useBuilderContext();\n\n const onClick = useCallback(() => {\n if (isSelected && !isLocked) {\n setIsTextEditorOpen(true);\n }\n }, [isSelected, isLocked]);\n\n const isNotEmpty = useMemo(() => {\n const el = document.createElement('div');\n el.innerHTML = content;\n return !!el.innerText;\n }, [content]);\n\n const onClickOutside = useCallback(() => {\n setTimeout(() => setIsTextEditorOpen(false), 1000);\n }, [isTextEditorOpen]);\n\n return isSelected && isTextEditorOpen ? (\n <QuillEditor\n content={content}\n exceptionalClasses={['ql-toolbar']}\n handleSave={handleSave}\n onClickOutside={onClickOutside}\n placeholder={placeholder}\n setIsTextEditorOpen={setIsTextEditorOpen}\n withClickOutsideWrapperClass=\"textEditorWrapper f-all\"\n />\n ) : (\n <div\n className={`f-all ql-editor${isNotEmpty ? '' : ' isEmptyTextElement'}`}\n dangerouslySetInnerHTML={{\n __html: isNotEmpty ? content : placeholder,\n }}\n onClick={onClick}\n onKeyDown={() => {}}\n />\n );\n};\n\nTextEditor.propTypes = {\n content: PropTypes.string,\n handleSave: PropTypes.func,\n isLocked: PropTypes.bool,\n isSelected: PropTypes.bool,\n placeholder: PropTypes.string,\n};\n\nTextEditor.defaultProps = {\n content: '',\n handleSave: () => {},\n isLocked: false,\n isSelected: false,\n placeholder: 'Click to edit text',\n};\n\nexport default TextEditor;\n"],"names":["TextEditor","content","handleSave","isLocked","isSelected","placeholder","useBuilderContext","isTextEditorOpen","setIsTextEditorOpen","onClick","useCallback","isNotEmpty","useMemo","el","document","createElement","innerHTML","innerText","onClickOutside","setTimeout","_jsx","__html","propTypes","PropTypes","string","func","bool","defaultProps"],"mappings":";;;;;;;;;;;;IAKMA,UAAU,GAAG,SAAbA,UAAa,OAMb;AAAA,MALJC,OAKI,QALJA,OAKI;AAAA,MAJJC,UAII,QAJJA,UAII;AAAA,MAHJC,QAGI,QAHJA,QAGI;AAAA,MAFJC,UAEI,QAFJA,UAEI;AAAA,MADJC,WACI,QADJA,WACI;;AACJ,2BAAkDC,gCAAiB,EAAnE;AAAA,MAAQC,gBAAR,sBAAQA,gBAAR;AAAA,MAA0BC,mBAA1B,sBAA0BA,mBAA1B;;AAEA,MAAMC,OAAO,GAAGC,iBAAW,CAAC,YAAM;AAChC,QAAIN,UAAU,IAAI,CAACD,QAAnB,EAA6B;AAC3BK,MAAAA,mBAAmB,CAAC,IAAD,CAAnB;AACD;AACF,GAJ0B,EAIxB,CAACJ,UAAD,EAAaD,QAAb,CAJwB,CAA3B;AAMA,MAAMQ,UAAU,GAAGC,aAAO,CAAC,YAAM;AAC/B,QAAMC,EAAE,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAX;AACAF,IAAAA,EAAE,CAACG,SAAH,GAAef,OAAf;AACA,WAAO,CAAC,CAACY,EAAE,CAACI,SAAZ;AACD,GAJyB,EAIvB,CAAChB,OAAD,CAJuB,CAA1B;AAMA,MAAMiB,cAAc,GAAGR,iBAAW,CAAC,YAAM;AACvCS,IAAAA,UAAU,CAAC;AAAA,aAAMX,mBAAmB,CAAC,KAAD,CAAzB;AAAA,KAAD,EAAmC,IAAnC,CAAV;AACD,GAFiC,EAE/B,CAACD,gBAAD,CAF+B,CAAlC;AAIA,SAAOH,UAAU,IAAIG,gBAAd,gBACLa,eAAC,WAAD;AACE,IAAA,OAAO,EAAEnB,OADX;AAEE,IAAA,kBAAkB,EAAE,CAAC,YAAD,CAFtB;AAGE,IAAA,UAAU,EAAEC,UAHd;AAIE,IAAA,cAAc,EAAEgB,cAJlB;AAKE,IAAA,WAAW,EAAEb,WALf;AAME,IAAA,mBAAmB,EAAEG,mBANvB;AAOE,IAAA,4BAA4B,EAAC;AAP/B,IADK,gBAWLY;AACE,IAAA,SAAS,2BAAoBT,UAAU,GAAG,EAAH,GAAQ,qBAAtC,CADX;AAEE,IAAA,uBAAuB,EAAE;AACvBU,MAAAA,MAAM,EAAEV,UAAU,GAAGV,OAAH,GAAaI;AADR,KAF3B;AAKE,IAAA,OAAO,EAAEI,OALX;AAME,IAAA,SAAS,EAAE,qBAAM;AANnB,IAXF;AAoBD;;AAEDT,UAAU,CAACsB,SAAX,GAAuB;AACrBrB,EAAAA,OAAO,EAAEsB,6BAAS,CAACC,MADE;AAErBtB,EAAAA,UAAU,EAAEqB,6BAAS,CAACE,IAFD;AAGrBtB,EAAAA,QAAQ,EAAEoB,6BAAS,CAACG,IAHC;AAIrBtB,EAAAA,UAAU,EAAEmB,6BAAS,CAACG,IAJD;AAKrBrB,EAAAA,WAAW,EAAEkB,6BAAS,CAACC;AALF,CAAvB;AAQAxB,UAAU,CAAC2B,YAAX,GAA0B;AACxB1B,EAAAA,OAAO,EAAE,EADe;AAExBC,EAAAA,UAAU,EAAE,sBAAM,EAFM;AAGxBC,EAAAA,QAAQ,EAAE,KAHc;AAIxBC,EAAAA,UAAU,EAAE,KAJY;AAKxBC,EAAAA,WAAW,EAAE;AALW,CAA1B;;;;"}
1
+ {"version":3,"file":"TextEditor.js","sources":["../../../../src/components/TextEditor/TextEditor.js"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport domPurify from 'dompurify';\nimport QuillEditor from './QuillEditor';\nimport { useBuilderContext } from '../../utils/builderContext';\n\nconst TextEditor = ({\n content,\n handleSave,\n isLocked,\n isSelected,\n placeholder,\n}) => {\n const [_content, setContent] = useState(content);\n\n const { isTextEditorOpen, setIsTextEditorOpen } = useBuilderContext();\n\n const onClick = useCallback(() => {\n if (isSelected && !isLocked) {\n setIsTextEditorOpen(true);\n }\n }, [isSelected, isLocked]);\n\n const isNotEmpty = useMemo(() => {\n const el = document.createElement('div');\n el.innerHTML = domPurify.sanitize(_content);\n return !!el.innerText;\n }, [_content]);\n\n return isSelected && isTextEditorOpen ? (\n <QuillEditor\n content={_content}\n handleSave={handleSave}\n placeholder={placeholder}\n setContent={setContent}\n setIsTextEditorOpen={setIsTextEditorOpen}\n />\n ) : (\n <div\n className={`f-all ql-editor${isNotEmpty ? '' : ' isEmptyTextElement'}`}\n dangerouslySetInnerHTML={{\n __html: isNotEmpty ? _content : placeholder,\n }}\n onClick={onClick}\n onKeyDown={() => {}}\n />\n );\n};\n\nTextEditor.propTypes = {\n content: PropTypes.string,\n handleSave: PropTypes.func,\n isLocked: PropTypes.bool,\n isSelected: PropTypes.bool,\n placeholder: PropTypes.string,\n};\n\nTextEditor.defaultProps = {\n content: '',\n handleSave: () => {},\n isLocked: false,\n isSelected: false,\n placeholder: 'Click to edit text',\n};\n\nexport default TextEditor;\n"],"names":["TextEditor","content","handleSave","isLocked","isSelected","placeholder","useState","_content","setContent","useBuilderContext","isTextEditorOpen","setIsTextEditorOpen","onClick","useCallback","isNotEmpty","useMemo","el","document","createElement","innerHTML","domPurify","sanitize","innerText","_jsx","__html","propTypes","PropTypes","string","func","bool","defaultProps"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;IAMMA,UAAU,GAAG,SAAbA,UAAa,OAMb;AAAA,MALJC,OAKI,QALJA,OAKI;AAAA,MAJJC,UAII,QAJJA,UAII;AAAA,MAHJC,QAGI,QAHJA,QAGI;AAAA,MAFJC,UAEI,QAFJA,UAEI;AAAA,MADJC,WACI,QADJA,WACI;;AACJ,kBAA+BC,cAAQ,CAACL,OAAD,CAAvC;AAAA;AAAA,MAAOM,QAAP;AAAA,MAAiBC,UAAjB;;AAEA,2BAAkDC,gCAAiB,EAAnE;AAAA,MAAQC,gBAAR,sBAAQA,gBAAR;AAAA,MAA0BC,mBAA1B,sBAA0BA,mBAA1B;;AAEA,MAAMC,OAAO,GAAGC,iBAAW,CAAC,YAAM;AAChC,QAAIT,UAAU,IAAI,CAACD,QAAnB,EAA6B;AAC3BQ,MAAAA,mBAAmB,CAAC,IAAD,CAAnB;AACD;AACF,GAJ0B,EAIxB,CAACP,UAAD,EAAaD,QAAb,CAJwB,CAA3B;AAMA,MAAMW,UAAU,GAAGC,aAAO,CAAC,YAAM;AAC/B,QAAMC,EAAE,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAX;AACAF,IAAAA,EAAE,CAACG,SAAH,GAAeC,6BAAS,CAACC,QAAV,CAAmBd,QAAnB,CAAf;AACA,WAAO,CAAC,CAACS,EAAE,CAACM,SAAZ;AACD,GAJyB,EAIvB,CAACf,QAAD,CAJuB,CAA1B;AAMA,SAAOH,UAAU,IAAIM,gBAAd,gBACLa,eAAC,WAAD;AACE,IAAA,OAAO,EAAEhB,QADX;AAEE,IAAA,UAAU,EAAEL,UAFd;AAGE,IAAA,WAAW,EAAEG,WAHf;AAIE,IAAA,UAAU,EAAEG,UAJd;AAKE,IAAA,mBAAmB,EAAEG;AALvB,IADK,gBASLY;AACE,IAAA,SAAS,2BAAoBT,UAAU,GAAG,EAAH,GAAQ,qBAAtC,CADX;AAEE,IAAA,uBAAuB,EAAE;AACvBU,MAAAA,MAAM,EAAEV,UAAU,GAAGP,QAAH,GAAcF;AADT,KAF3B;AAKE,IAAA,OAAO,EAAEO,OALX;AAME,IAAA,SAAS,EAAE,qBAAM;AANnB,IATF;AAkBD;;AAEDZ,UAAU,CAACyB,SAAX,GAAuB;AACrBxB,EAAAA,OAAO,EAAEyB,6BAAS,CAACC,MADE;AAErBzB,EAAAA,UAAU,EAAEwB,6BAAS,CAACE,IAFD;AAGrBzB,EAAAA,QAAQ,EAAEuB,6BAAS,CAACG,IAHC;AAIrBzB,EAAAA,UAAU,EAAEsB,6BAAS,CAACG,IAJD;AAKrBxB,EAAAA,WAAW,EAAEqB,6BAAS,CAACC;AALF,CAAvB;AAQA3B,UAAU,CAAC8B,YAAX,GAA0B;AACxB7B,EAAAA,OAAO,EAAE,EADe;AAExBC,EAAAA,UAAU,EAAE,sBAAM,EAFM;AAGxBC,EAAAA,QAAQ,EAAE,KAHc;AAIxBC,EAAAA,UAAU,EAAE,KAJY;AAKxBC,EAAAA,WAAW,EAAE;AALW,CAA1B;;;;"}
@@ -5,6 +5,8 @@
5
5
 
6
6
  // Mixins //
7
7
 
8
+ @use "sass:math";
9
+
8
10
  @mixin text-ellipsis {
9
11
  overflow: hidden;
10
12
  text-overflow: ellipsis;
@@ -35,7 +37,7 @@
35
37
  $base: $base * 1px;
36
38
  }
37
39
 
38
- @return $pxval / $base * 1em;
40
+ @return math.div($pxval, $base) * 1em;
39
41
  }
40
42
 
41
43
  // Functions //
@@ -1,62 +1,113 @@
1
1
  import 'core-js/modules/es.array.map.js';
2
- import { useRef, useEffect, useCallback } from 'react';
2
+ import React from 'react';
3
3
  import ReactQuill from 'react-quill';
4
4
  import PropTypes from 'prop-types';
5
- import withClickOutside from '../withClickOutside.js';
6
5
  import { modules, formats } from './textEditorConstants.js';
7
6
  import { fontSizes } from '../../constants/fonts.js';
8
7
  import 'react-quill/dist/quill.snow.css';
9
8
  import { jsx } from 'react/jsx-runtime';
10
9
 
10
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
11
+
12
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
13
+
14
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
15
+
16
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
17
+
18
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
19
+
20
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
21
+
22
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
23
+
24
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
25
+
26
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
27
+
28
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
29
+
30
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
31
+
32
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
33
  var Size = ReactQuill.Quill.import('attributors/style/size');
12
34
  Size.whitelist = fontSizes.map(function (s) {
13
35
  return "".concat(s, "px");
14
36
  });
15
37
  ReactQuill.Quill.register(Size, true);
16
38
 
17
- var QuillEditor = function QuillEditor(_ref) {
18
- var content = _ref.content,
19
- handleSave = _ref.handleSave,
20
- placeholder = _ref.placeholder,
21
- setIsTextEditorOpen = _ref.setIsTextEditorOpen;
22
- var quill = useRef(null);
23
-
24
- var saveAndQuit = function saveAndQuit() {
25
- if (quill.current === null) return;
26
- var editor = quill.current.getEditor();
27
- var unprivilegedEditor = quill.current.makeUnprivilegedEditor(editor);
28
- handleSave(unprivilegedEditor.getHTML());
29
- setIsTextEditorOpen(false);
30
- };
31
-
32
- useEffect(function () {
33
- if (quill.current !== null) {
34
- var editor = quill.current.getEditor();
35
- editor.setSelection(0, content.length);
36
- }
39
+ var QuillEditor = /*#__PURE__*/function (_React$PureComponent) {
40
+ _inherits(QuillEditor, _React$PureComponent);
37
41
 
38
- return saveAndQuit;
39
- }, []);
40
- var handleKeyDown = useCallback(function (e) {
41
- e.stopPropagation();
42
+ var _super = _createSuper(QuillEditor);
42
43
 
43
- if (e.keyCode === 27) {
44
- saveAndQuit();
44
+ function QuillEditor(props) {
45
+ var _this;
46
+
47
+ _classCallCheck(this, QuillEditor);
48
+
49
+ _this = _super.call(this, props);
50
+
51
+ _defineProperty(_assertThisInitialized(_this), "saveAndQuit", function () {
52
+ var _this$props = _this.props,
53
+ content = _this$props.content,
54
+ handleSave = _this$props.handleSave,
55
+ setIsTextEditorOpen = _this$props.setIsTextEditorOpen;
56
+ setIsTextEditorOpen(false);
57
+ handleSave(content);
58
+ });
59
+
60
+ _defineProperty(_assertThisInitialized(_this), "handleKeyDown", function (e) {
61
+ e.stopPropagation();
62
+
63
+ if (e.keyCode === 27) {
64
+ _this.saveAndQuit();
65
+ }
66
+ });
67
+
68
+ _this.quill = /*#__PURE__*/React.createRef();
69
+ return _this;
70
+ }
71
+
72
+ _createClass(QuillEditor, [{
73
+ key: "componentDidMount",
74
+ value: function componentDidMount() {
75
+ if (this.quill.current !== null) {
76
+ var content = this.props.content;
77
+ var editor = this.quill.current.getEditor();
78
+ editor.setSelection(0, content.length);
79
+ }
45
80
  }
46
- }, []);
47
- return /*#__PURE__*/jsx("div", {
48
- className: "f-all",
49
- onKeyDown: handleKeyDown,
50
- children: /*#__PURE__*/jsx(ReactQuill, {
51
- ref: quill,
52
- defaultValue: content,
53
- formats: QuillEditor.formats,
54
- modules: QuillEditor.modules,
55
- placeholder: placeholder,
56
- preserveWhitespace: true
57
- })
58
- });
59
- };
81
+ }, {
82
+ key: "componentWillUnmount",
83
+ value: function componentWillUnmount() {
84
+ this.saveAndQuit();
85
+ }
86
+ }, {
87
+ key: "render",
88
+ value: function render() {
89
+ var _this$props2 = this.props,
90
+ content = _this$props2.content,
91
+ placeholder = _this$props2.placeholder,
92
+ setContent = _this$props2.setContent;
93
+ return /*#__PURE__*/jsx("div", {
94
+ className: "f-all",
95
+ onKeyDown: this.handleKeyDown,
96
+ children: /*#__PURE__*/jsx(ReactQuill, {
97
+ ref: this.quill,
98
+ formats: QuillEditor.formats,
99
+ modules: QuillEditor.modules,
100
+ onChange: setContent,
101
+ placeholder: placeholder,
102
+ preserveWhitespace: true,
103
+ value: content
104
+ })
105
+ });
106
+ }
107
+ }]);
108
+
109
+ return QuillEditor;
110
+ }(React.PureComponent);
60
111
 
61
112
  QuillEditor.modules = modules;
62
113
  QuillEditor.formats = formats;
@@ -64,15 +115,16 @@ QuillEditor.propTypes = {
64
115
  content: PropTypes.string,
65
116
  handleSave: PropTypes.func,
66
117
  placeholder: PropTypes.string,
118
+ setContent: PropTypes.func,
67
119
  setIsTextEditorOpen: PropTypes.func
68
120
  };
69
121
  QuillEditor.defaultProps = {
70
122
  content: '',
71
123
  handleSave: function handleSave() {},
72
124
  placeholder: 'Click to edit text',
73
- setIsTextEditorOpen: {}
125
+ setContent: function setContent() {},
126
+ setIsTextEditorOpen: function setIsTextEditorOpen() {}
74
127
  };
75
- var QuillEditor$1 = withClickOutside(QuillEditor);
76
128
 
77
- export default QuillEditor$1;
129
+ export default QuillEditor;
78
130
  //# sourceMappingURL=QuillEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QuillEditor.js","sources":["../../../../src/components/TextEditor/QuillEditor.js"],"sourcesContent":["import { useEffect, useRef, useCallback } from 'react';\nimport ReactQuill from 'react-quill';\nimport PropTypes from 'prop-types';\nimport withClickOutside from '../withClickOutside';\nimport { formats, modules } from './textEditorConstants';\nimport { fontSizes } from '../../constants/fonts';\nimport 'react-quill/dist/quill.snow.css';\n\nconst Size = ReactQuill.Quill.import('attributors/style/size');\nSize.whitelist = fontSizes.map(s => `${s}px`);\nReactQuill.Quill.register(Size, true);\n\nconst QuillEditor = ({\n content,\n handleSave,\n placeholder,\n setIsTextEditorOpen,\n}) => {\n const quill = useRef(null);\n const saveAndQuit = () => {\n if (quill.current === null) return;\n const editor = quill.current.getEditor();\n const unprivilegedEditor = quill.current.makeUnprivilegedEditor(editor);\n handleSave(unprivilegedEditor.getHTML());\n setIsTextEditorOpen(false);\n };\n\n useEffect(() => {\n if (quill.current !== null) {\n const editor = quill.current.getEditor();\n editor.setSelection(0, content.length);\n }\n return saveAndQuit;\n }, []);\n\n const handleKeyDown = useCallback(e => {\n e.stopPropagation();\n if (e.keyCode === 27) {\n saveAndQuit();\n }\n }, []);\n\n return (\n <div\n className=\"f-all\"\n onKeyDown={handleKeyDown}\n >\n <ReactQuill\n ref={quill}\n defaultValue={content}\n formats={QuillEditor.formats}\n modules={QuillEditor.modules}\n placeholder={placeholder}\n preserveWhitespace\n />\n </div>\n );\n};\n\nQuillEditor.modules = modules;\nQuillEditor.formats = formats;\n\nQuillEditor.propTypes = {\n content: PropTypes.string,\n handleSave: PropTypes.func,\n placeholder: PropTypes.string,\n setIsTextEditorOpen: PropTypes.func,\n};\n\nQuillEditor.defaultProps = {\n content: '',\n handleSave: () => {},\n placeholder: 'Click to edit text',\n setIsTextEditorOpen: {},\n};\n\nexport default withClickOutside(QuillEditor);\n"],"names":["Size","ReactQuill","Quill","import","whitelist","fontSizes","map","s","register","QuillEditor","content","handleSave","placeholder","setIsTextEditorOpen","quill","useRef","saveAndQuit","current","editor","getEditor","unprivilegedEditor","makeUnprivilegedEditor","getHTML","useEffect","setSelection","length","handleKeyDown","useCallback","e","stopPropagation","keyCode","_jsx","formats","modules","propTypes","PropTypes","string","func","defaultProps","withClickOutside"],"mappings":";;;;;;;;;;AAQA,IAAMA,IAAI,GAAGC,UAAU,CAACC,KAAX,CAAiBC,MAAjB,CAAwB,wBAAxB,CAAb;AACAH,IAAI,CAACI,SAAL,GAAiBC,SAAS,CAACC,GAAV,CAAc,UAAAC,CAAC;AAAA,mBAAOA,CAAP;AAAA,CAAf,CAAjB;AACAN,UAAU,CAACC,KAAX,CAAiBM,QAAjB,CAA0BR,IAA1B,EAAgC,IAAhC;;AAEA,IAAMS,WAAW,GAAG,SAAdA,WAAc,OAKd;AAAA,MAJJC,OAII,QAJJA,OAII;AAAA,MAHJC,UAGI,QAHJA,UAGI;AAAA,MAFJC,WAEI,QAFJA,WAEI;AAAA,MADJC,mBACI,QADJA,mBACI;AACJ,MAAMC,KAAK,GAAGC,MAAM,CAAC,IAAD,CAApB;;AACA,MAAMC,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxB,QAAIF,KAAK,CAACG,OAAN,KAAkB,IAAtB,EAA4B;AAC5B,QAAMC,MAAM,GAAGJ,KAAK,CAACG,OAAN,CAAcE,SAAd,EAAf;AACA,QAAMC,kBAAkB,GAAGN,KAAK,CAACG,OAAN,CAAcI,sBAAd,CAAqCH,MAArC,CAA3B;AACAP,IAAAA,UAAU,CAACS,kBAAkB,CAACE,OAAnB,EAAD,CAAV;AACAT,IAAAA,mBAAmB,CAAC,KAAD,CAAnB;AACD,GAND;;AAQAU,EAAAA,SAAS,CAAC,YAAM;AACd,QAAIT,KAAK,CAACG,OAAN,KAAkB,IAAtB,EAA4B;AAC1B,UAAMC,MAAM,GAAGJ,KAAK,CAACG,OAAN,CAAcE,SAAd,EAAf;AACAD,MAAAA,MAAM,CAACM,YAAP,CAAoB,CAApB,EAAuBd,OAAO,CAACe,MAA/B;AACD;;AACD,WAAOT,WAAP;AACD,GANQ,EAMN,EANM,CAAT;AAQA,MAAMU,aAAa,GAAGC,WAAW,CAAC,UAAAC,CAAC,EAAI;AACrCA,IAAAA,CAAC,CAACC,eAAF;;AACA,QAAID,CAAC,CAACE,OAAF,KAAc,EAAlB,EAAsB;AACpBd,MAAAA,WAAW;AACZ;AACF,GALgC,EAK9B,EAL8B,CAAjC;AAOA,sBACEe;AACE,IAAA,SAAS,EAAC,OADZ;AAEE,IAAA,SAAS,EAAEL,aAFb;AAAA,2BAIEK,IAAC,UAAD;AACE,MAAA,GAAG,EAAEjB,KADP;AAEE,MAAA,YAAY,EAAEJ,OAFhB;AAGE,MAAA,OAAO,EAAED,WAAW,CAACuB,OAHvB;AAIE,MAAA,OAAO,EAAEvB,WAAW,CAACwB,OAJvB;AAKE,MAAA,WAAW,EAAErB,WALf;AAME,MAAA,kBAAkB;AANpB;AAJF,IADF;AAeD,CA7CD;;AA+CAH,WAAW,CAACwB,OAAZ,GAAsBA,OAAtB;AACAxB,WAAW,CAACuB,OAAZ,GAAsBA,OAAtB;AAEAvB,WAAW,CAACyB,SAAZ,GAAwB;AACtBxB,EAAAA,OAAO,EAAEyB,SAAS,CAACC,MADG;AAEtBzB,EAAAA,UAAU,EAAEwB,SAAS,CAACE,IAFA;AAGtBzB,EAAAA,WAAW,EAAEuB,SAAS,CAACC,MAHD;AAItBvB,EAAAA,mBAAmB,EAAEsB,SAAS,CAACE;AAJT,CAAxB;AAOA5B,WAAW,CAAC6B,YAAZ,GAA2B;AACzB5B,EAAAA,OAAO,EAAE,EADgB;AAEzBC,EAAAA,UAAU,EAAE,sBAAM,EAFO;AAGzBC,EAAAA,WAAW,EAAE,oBAHY;AAIzBC,EAAAA,mBAAmB,EAAE;AAJI,CAA3B;AAOA,oBAAe0B,gBAAgB,CAAC9B,WAAD,CAA/B;;;;"}
1
+ {"version":3,"file":"QuillEditor.js","sources":["../../../../src/components/TextEditor/QuillEditor.js"],"sourcesContent":["import React from 'react';\nimport ReactQuill from 'react-quill';\nimport PropTypes from 'prop-types';\nimport { formats, modules } from './textEditorConstants';\nimport { fontSizes } from '../../constants/fonts';\nimport 'react-quill/dist/quill.snow.css';\n\nconst Size = ReactQuill.Quill.import('attributors/style/size');\nSize.whitelist = fontSizes.map(s => `${s}px`);\nReactQuill.Quill.register(Size, true);\n\nclass QuillEditor extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.quill = React.createRef();\n }\n\n componentDidMount() {\n if (this.quill.current !== null) {\n const { content } = this.props;\n const editor = this.quill.current.getEditor();\n editor.setSelection(0, content.length);\n }\n }\n\n componentWillUnmount() {\n this.saveAndQuit();\n }\n\n saveAndQuit = () => {\n const { content, handleSave, setIsTextEditorOpen } = this.props;\n setIsTextEditorOpen(false);\n handleSave(content);\n }\n\n handleKeyDown = e => {\n e.stopPropagation();\n if (e.keyCode === 27) {\n this.saveAndQuit();\n }\n }\n\n render() {\n const {\n content,\n placeholder,\n setContent,\n } = this.props;\n\n return (\n <div\n className=\"f-all\"\n onKeyDown={this.handleKeyDown}\n >\n <ReactQuill\n ref={this.quill}\n formats={QuillEditor.formats}\n modules={QuillEditor.modules}\n onChange={setContent}\n placeholder={placeholder}\n preserveWhitespace\n value={content}\n />\n </div>\n );\n }\n}\n\nQuillEditor.modules = modules;\nQuillEditor.formats = formats;\n\nQuillEditor.propTypes = {\n content: PropTypes.string,\n handleSave: PropTypes.func,\n placeholder: PropTypes.string,\n setContent: PropTypes.func,\n setIsTextEditorOpen: PropTypes.func,\n};\n\nQuillEditor.defaultProps = {\n content: '',\n handleSave: () => {},\n placeholder: 'Click to edit text',\n setContent: () => {},\n setIsTextEditorOpen: () => {},\n};\n\nexport default QuillEditor;\n"],"names":["Size","ReactQuill","Quill","import","whitelist","fontSizes","map","s","register","QuillEditor","props","content","handleSave","setIsTextEditorOpen","e","stopPropagation","keyCode","saveAndQuit","quill","React","createRef","current","editor","getEditor","setSelection","length","placeholder","setContent","_jsx","handleKeyDown","formats","modules","PureComponent","propTypes","PropTypes","string","func","defaultProps"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAMA,IAAI,GAAGC,UAAU,CAACC,KAAX,CAAiBC,MAAjB,CAAwB,wBAAxB,CAAb;AACAH,IAAI,CAACI,SAAL,GAAiBC,SAAS,CAACC,GAAV,CAAc,UAAAC,CAAC;AAAA,mBAAOA,CAAP;AAAA,CAAf,CAAjB;AACAN,UAAU,CAACC,KAAX,CAAiBM,QAAjB,CAA0BR,IAA1B,EAAgC,IAAhC;;IAEMS;;;;;AACJ,uBAAYC,KAAZ,EAAmB;AAAA;;AAAA;;AACjB,8BAAMA,KAAN;;AADiB,kEAkBL,YAAM;AAClB,wBAAqD,MAAKA,KAA1D;AAAA,UAAQC,OAAR,eAAQA,OAAR;AAAA,UAAiBC,UAAjB,eAAiBA,UAAjB;AAAA,UAA6BC,mBAA7B,eAA6BA,mBAA7B;AACAA,MAAAA,mBAAmB,CAAC,KAAD,CAAnB;AACAD,MAAAA,UAAU,CAACD,OAAD,CAAV;AACD,KAtBkB;;AAAA,oEAwBH,UAAAG,CAAC,EAAI;AACnBA,MAAAA,CAAC,CAACC,eAAF;;AACA,UAAID,CAAC,CAACE,OAAF,KAAc,EAAlB,EAAsB;AACpB,cAAKC,WAAL;AACD;AACF,KA7BkB;;AAGjB,UAAKC,KAAL,gBAAaC,KAAK,CAACC,SAAN,EAAb;AAHiB;AAIlB;;;;WAED,6BAAoB;AAClB,UAAI,KAAKF,KAAL,CAAWG,OAAX,KAAuB,IAA3B,EAAiC;AAC/B,YAAQV,OAAR,GAAoB,KAAKD,KAAzB,CAAQC,OAAR;AACA,YAAMW,MAAM,GAAG,KAAKJ,KAAL,CAAWG,OAAX,CAAmBE,SAAnB,EAAf;AACAD,QAAAA,MAAM,CAACE,YAAP,CAAoB,CAApB,EAAuBb,OAAO,CAACc,MAA/B;AACD;AACF;;;WAED,gCAAuB;AACrB,WAAKR,WAAL;AACD;;;WAeD,kBAAS;AACP,yBAII,KAAKP,KAJT;AAAA,UACEC,OADF,gBACEA,OADF;AAAA,UAEEe,WAFF,gBAEEA,WAFF;AAAA,UAGEC,UAHF,gBAGEA,UAHF;AAMA,0BACEC;AACE,QAAA,SAAS,EAAC,OADZ;AAEE,QAAA,SAAS,EAAE,KAAKC,aAFlB;AAAA,+BAIED,IAAC,UAAD;AACE,UAAA,GAAG,EAAE,KAAKV,KADZ;AAEE,UAAA,OAAO,EAAET,WAAW,CAACqB,OAFvB;AAGE,UAAA,OAAO,EAAErB,WAAW,CAACsB,OAHvB;AAIE,UAAA,QAAQ,EAAEJ,UAJZ;AAKE,UAAA,WAAW,EAAED,WALf;AAME,UAAA,kBAAkB,MANpB;AAOE,UAAA,KAAK,EAAEf;AAPT;AAJF,QADF;AAgBD;;;;EAvDuBQ,KAAK,CAACa;;AA0DhCvB,WAAW,CAACsB,OAAZ,GAAsBA,OAAtB;AACAtB,WAAW,CAACqB,OAAZ,GAAsBA,OAAtB;AAEArB,WAAW,CAACwB,SAAZ,GAAwB;AACtBtB,EAAAA,OAAO,EAAEuB,SAAS,CAACC,MADG;AAEtBvB,EAAAA,UAAU,EAAEsB,SAAS,CAACE,IAFA;AAGtBV,EAAAA,WAAW,EAAEQ,SAAS,CAACC,MAHD;AAItBR,EAAAA,UAAU,EAAEO,SAAS,CAACE,IAJA;AAKtBvB,EAAAA,mBAAmB,EAAEqB,SAAS,CAACE;AALT,CAAxB;AAQA3B,WAAW,CAAC4B,YAAZ,GAA2B;AACzB1B,EAAAA,OAAO,EAAE,EADgB;AAEzBC,EAAAA,UAAU,EAAE,sBAAM,EAFO;AAGzBc,EAAAA,WAAW,EAAE,oBAHY;AAIzBC,EAAAA,UAAU,EAAE,sBAAM,EAJO;AAKzBd,EAAAA,mBAAmB,EAAE,+BAAM;AALF,CAA3B;;;;"}
@@ -1,9 +1,22 @@
1
- import { useCallback, useMemo } from 'react';
1
+ import { useState, useCallback, useMemo } from 'react';
2
2
  import PropTypes from 'prop-types';
3
+ import domPurify from 'dompurify';
3
4
  import QuillEditor from './QuillEditor.js';
4
5
  import { useBuilderContext } from '../../utils/builderContext.js';
5
6
  import { jsx } from 'react/jsx-runtime';
6
7
 
8
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
9
+
10
+ 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."); }
11
+
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); }
13
+
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; }
15
+
16
+ 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; }
17
+
18
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
19
+
7
20
  var TextEditor = function TextEditor(_ref) {
8
21
  var content = _ref.content,
9
22
  handleSave = _ref.handleSave,
@@ -11,6 +24,11 @@ var TextEditor = function TextEditor(_ref) {
11
24
  isSelected = _ref.isSelected,
12
25
  placeholder = _ref.placeholder;
13
26
 
27
+ var _useState = useState(content),
28
+ _useState2 = _slicedToArray(_useState, 2),
29
+ _content = _useState2[0],
30
+ setContent = _useState2[1];
31
+
14
32
  var _useBuilderContext = useBuilderContext(),
15
33
  isTextEditorOpen = _useBuilderContext.isTextEditorOpen,
16
34
  setIsTextEditorOpen = _useBuilderContext.setIsTextEditorOpen;
@@ -22,26 +40,19 @@ var TextEditor = function TextEditor(_ref) {
22
40
  }, [isSelected, isLocked]);
23
41
  var isNotEmpty = useMemo(function () {
24
42
  var el = document.createElement('div');
25
- el.innerHTML = content;
43
+ el.innerHTML = domPurify.sanitize(_content);
26
44
  return !!el.innerText;
27
- }, [content]);
28
- var onClickOutside = useCallback(function () {
29
- setTimeout(function () {
30
- return setIsTextEditorOpen(false);
31
- }, 1000);
32
- }, [isTextEditorOpen]);
45
+ }, [_content]);
33
46
  return isSelected && isTextEditorOpen ? /*#__PURE__*/jsx(QuillEditor, {
34
- content: content,
35
- exceptionalClasses: ['ql-toolbar'],
47
+ content: _content,
36
48
  handleSave: handleSave,
37
- onClickOutside: onClickOutside,
38
49
  placeholder: placeholder,
39
- setIsTextEditorOpen: setIsTextEditorOpen,
40
- withClickOutsideWrapperClass: "textEditorWrapper f-all"
50
+ setContent: setContent,
51
+ setIsTextEditorOpen: setIsTextEditorOpen
41
52
  }) : /*#__PURE__*/jsx("div", {
42
53
  className: "f-all ql-editor".concat(isNotEmpty ? '' : ' isEmptyTextElement'),
43
54
  dangerouslySetInnerHTML: {
44
- __html: isNotEmpty ? content : placeholder
55
+ __html: isNotEmpty ? _content : placeholder
45
56
  },
46
57
  onClick: onClick,
47
58
  onKeyDown: function onKeyDown() {}
@@ -1 +1 @@
1
- {"version":3,"file":"TextEditor.js","sources":["../../../../src/components/TextEditor/TextEditor.js"],"sourcesContent":["import { useCallback, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport QuillEditor from './QuillEditor';\nimport { useBuilderContext } from '../../utils/builderContext';\n\nconst TextEditor = ({\n content,\n handleSave,\n isLocked,\n isSelected,\n placeholder,\n}) => {\n const { isTextEditorOpen, setIsTextEditorOpen } = useBuilderContext();\n\n const onClick = useCallback(() => {\n if (isSelected && !isLocked) {\n setIsTextEditorOpen(true);\n }\n }, [isSelected, isLocked]);\n\n const isNotEmpty = useMemo(() => {\n const el = document.createElement('div');\n el.innerHTML = content;\n return !!el.innerText;\n }, [content]);\n\n const onClickOutside = useCallback(() => {\n setTimeout(() => setIsTextEditorOpen(false), 1000);\n }, [isTextEditorOpen]);\n\n return isSelected && isTextEditorOpen ? (\n <QuillEditor\n content={content}\n exceptionalClasses={['ql-toolbar']}\n handleSave={handleSave}\n onClickOutside={onClickOutside}\n placeholder={placeholder}\n setIsTextEditorOpen={setIsTextEditorOpen}\n withClickOutsideWrapperClass=\"textEditorWrapper f-all\"\n />\n ) : (\n <div\n className={`f-all ql-editor${isNotEmpty ? '' : ' isEmptyTextElement'}`}\n dangerouslySetInnerHTML={{\n __html: isNotEmpty ? content : placeholder,\n }}\n onClick={onClick}\n onKeyDown={() => {}}\n />\n );\n};\n\nTextEditor.propTypes = {\n content: PropTypes.string,\n handleSave: PropTypes.func,\n isLocked: PropTypes.bool,\n isSelected: PropTypes.bool,\n placeholder: PropTypes.string,\n};\n\nTextEditor.defaultProps = {\n content: '',\n handleSave: () => {},\n isLocked: false,\n isSelected: false,\n placeholder: 'Click to edit text',\n};\n\nexport default TextEditor;\n"],"names":["TextEditor","content","handleSave","isLocked","isSelected","placeholder","useBuilderContext","isTextEditorOpen","setIsTextEditorOpen","onClick","useCallback","isNotEmpty","useMemo","el","document","createElement","innerHTML","innerText","onClickOutside","setTimeout","_jsx","__html","propTypes","PropTypes","string","func","bool","defaultProps"],"mappings":";;;;;;IAKMA,UAAU,GAAG,SAAbA,UAAa,OAMb;AAAA,MALJC,OAKI,QALJA,OAKI;AAAA,MAJJC,UAII,QAJJA,UAII;AAAA,MAHJC,QAGI,QAHJA,QAGI;AAAA,MAFJC,UAEI,QAFJA,UAEI;AAAA,MADJC,WACI,QADJA,WACI;;AACJ,2BAAkDC,iBAAiB,EAAnE;AAAA,MAAQC,gBAAR,sBAAQA,gBAAR;AAAA,MAA0BC,mBAA1B,sBAA0BA,mBAA1B;;AAEA,MAAMC,OAAO,GAAGC,WAAW,CAAC,YAAM;AAChC,QAAIN,UAAU,IAAI,CAACD,QAAnB,EAA6B;AAC3BK,MAAAA,mBAAmB,CAAC,IAAD,CAAnB;AACD;AACF,GAJ0B,EAIxB,CAACJ,UAAD,EAAaD,QAAb,CAJwB,CAA3B;AAMA,MAAMQ,UAAU,GAAGC,OAAO,CAAC,YAAM;AAC/B,QAAMC,EAAE,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAX;AACAF,IAAAA,EAAE,CAACG,SAAH,GAAef,OAAf;AACA,WAAO,CAAC,CAACY,EAAE,CAACI,SAAZ;AACD,GAJyB,EAIvB,CAAChB,OAAD,CAJuB,CAA1B;AAMA,MAAMiB,cAAc,GAAGR,WAAW,CAAC,YAAM;AACvCS,IAAAA,UAAU,CAAC;AAAA,aAAMX,mBAAmB,CAAC,KAAD,CAAzB;AAAA,KAAD,EAAmC,IAAnC,CAAV;AACD,GAFiC,EAE/B,CAACD,gBAAD,CAF+B,CAAlC;AAIA,SAAOH,UAAU,IAAIG,gBAAd,gBACLa,IAAC,WAAD;AACE,IAAA,OAAO,EAAEnB,OADX;AAEE,IAAA,kBAAkB,EAAE,CAAC,YAAD,CAFtB;AAGE,IAAA,UAAU,EAAEC,UAHd;AAIE,IAAA,cAAc,EAAEgB,cAJlB;AAKE,IAAA,WAAW,EAAEb,WALf;AAME,IAAA,mBAAmB,EAAEG,mBANvB;AAOE,IAAA,4BAA4B,EAAC;AAP/B,IADK,gBAWLY;AACE,IAAA,SAAS,2BAAoBT,UAAU,GAAG,EAAH,GAAQ,qBAAtC,CADX;AAEE,IAAA,uBAAuB,EAAE;AACvBU,MAAAA,MAAM,EAAEV,UAAU,GAAGV,OAAH,GAAaI;AADR,KAF3B;AAKE,IAAA,OAAO,EAAEI,OALX;AAME,IAAA,SAAS,EAAE,qBAAM;AANnB,IAXF;AAoBD;;AAEDT,UAAU,CAACsB,SAAX,GAAuB;AACrBrB,EAAAA,OAAO,EAAEsB,SAAS,CAACC,MADE;AAErBtB,EAAAA,UAAU,EAAEqB,SAAS,CAACE,IAFD;AAGrBtB,EAAAA,QAAQ,EAAEoB,SAAS,CAACG,IAHC;AAIrBtB,EAAAA,UAAU,EAAEmB,SAAS,CAACG,IAJD;AAKrBrB,EAAAA,WAAW,EAAEkB,SAAS,CAACC;AALF,CAAvB;AAQAxB,UAAU,CAAC2B,YAAX,GAA0B;AACxB1B,EAAAA,OAAO,EAAE,EADe;AAExBC,EAAAA,UAAU,EAAE,sBAAM,EAFM;AAGxBC,EAAAA,QAAQ,EAAE,KAHc;AAIxBC,EAAAA,UAAU,EAAE,KAJY;AAKxBC,EAAAA,WAAW,EAAE;AALW,CAA1B;;;;"}
1
+ {"version":3,"file":"TextEditor.js","sources":["../../../../src/components/TextEditor/TextEditor.js"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport domPurify from 'dompurify';\nimport QuillEditor from './QuillEditor';\nimport { useBuilderContext } from '../../utils/builderContext';\n\nconst TextEditor = ({\n content,\n handleSave,\n isLocked,\n isSelected,\n placeholder,\n}) => {\n const [_content, setContent] = useState(content);\n\n const { isTextEditorOpen, setIsTextEditorOpen } = useBuilderContext();\n\n const onClick = useCallback(() => {\n if (isSelected && !isLocked) {\n setIsTextEditorOpen(true);\n }\n }, [isSelected, isLocked]);\n\n const isNotEmpty = useMemo(() => {\n const el = document.createElement('div');\n el.innerHTML = domPurify.sanitize(_content);\n return !!el.innerText;\n }, [_content]);\n\n return isSelected && isTextEditorOpen ? (\n <QuillEditor\n content={_content}\n handleSave={handleSave}\n placeholder={placeholder}\n setContent={setContent}\n setIsTextEditorOpen={setIsTextEditorOpen}\n />\n ) : (\n <div\n className={`f-all ql-editor${isNotEmpty ? '' : ' isEmptyTextElement'}`}\n dangerouslySetInnerHTML={{\n __html: isNotEmpty ? _content : placeholder,\n }}\n onClick={onClick}\n onKeyDown={() => {}}\n />\n );\n};\n\nTextEditor.propTypes = {\n content: PropTypes.string,\n handleSave: PropTypes.func,\n isLocked: PropTypes.bool,\n isSelected: PropTypes.bool,\n placeholder: PropTypes.string,\n};\n\nTextEditor.defaultProps = {\n content: '',\n handleSave: () => {},\n isLocked: false,\n isSelected: false,\n placeholder: 'Click to edit text',\n};\n\nexport default TextEditor;\n"],"names":["TextEditor","content","handleSave","isLocked","isSelected","placeholder","useState","_content","setContent","useBuilderContext","isTextEditorOpen","setIsTextEditorOpen","onClick","useCallback","isNotEmpty","useMemo","el","document","createElement","innerHTML","domPurify","sanitize","innerText","_jsx","__html","propTypes","PropTypes","string","func","bool","defaultProps"],"mappings":";;;;;;;;;;;;;;;;;;;IAMMA,UAAU,GAAG,SAAbA,UAAa,OAMb;AAAA,MALJC,OAKI,QALJA,OAKI;AAAA,MAJJC,UAII,QAJJA,UAII;AAAA,MAHJC,QAGI,QAHJA,QAGI;AAAA,MAFJC,UAEI,QAFJA,UAEI;AAAA,MADJC,WACI,QADJA,WACI;;AACJ,kBAA+BC,QAAQ,CAACL,OAAD,CAAvC;AAAA;AAAA,MAAOM,QAAP;AAAA,MAAiBC,UAAjB;;AAEA,2BAAkDC,iBAAiB,EAAnE;AAAA,MAAQC,gBAAR,sBAAQA,gBAAR;AAAA,MAA0BC,mBAA1B,sBAA0BA,mBAA1B;;AAEA,MAAMC,OAAO,GAAGC,WAAW,CAAC,YAAM;AAChC,QAAIT,UAAU,IAAI,CAACD,QAAnB,EAA6B;AAC3BQ,MAAAA,mBAAmB,CAAC,IAAD,CAAnB;AACD;AACF,GAJ0B,EAIxB,CAACP,UAAD,EAAaD,QAAb,CAJwB,CAA3B;AAMA,MAAMW,UAAU,GAAGC,OAAO,CAAC,YAAM;AAC/B,QAAMC,EAAE,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAX;AACAF,IAAAA,EAAE,CAACG,SAAH,GAAeC,SAAS,CAACC,QAAV,CAAmBd,QAAnB,CAAf;AACA,WAAO,CAAC,CAACS,EAAE,CAACM,SAAZ;AACD,GAJyB,EAIvB,CAACf,QAAD,CAJuB,CAA1B;AAMA,SAAOH,UAAU,IAAIM,gBAAd,gBACLa,IAAC,WAAD;AACE,IAAA,OAAO,EAAEhB,QADX;AAEE,IAAA,UAAU,EAAEL,UAFd;AAGE,IAAA,WAAW,EAAEG,WAHf;AAIE,IAAA,UAAU,EAAEG,UAJd;AAKE,IAAA,mBAAmB,EAAEG;AALvB,IADK,gBASLY;AACE,IAAA,SAAS,2BAAoBT,UAAU,GAAG,EAAH,GAAQ,qBAAtC,CADX;AAEE,IAAA,uBAAuB,EAAE;AACvBU,MAAAA,MAAM,EAAEV,UAAU,GAAGP,QAAH,GAAcF;AADT,KAF3B;AAKE,IAAA,OAAO,EAAEO,OALX;AAME,IAAA,SAAS,EAAE,qBAAM;AANnB,IATF;AAkBD;;AAEDZ,UAAU,CAACyB,SAAX,GAAuB;AACrBxB,EAAAA,OAAO,EAAEyB,SAAS,CAACC,MADE;AAErBzB,EAAAA,UAAU,EAAEwB,SAAS,CAACE,IAFD;AAGrBzB,EAAAA,QAAQ,EAAEuB,SAAS,CAACG,IAHC;AAIrBzB,EAAAA,UAAU,EAAEsB,SAAS,CAACG,IAJD;AAKrBxB,EAAAA,WAAW,EAAEqB,SAAS,CAACC;AALF,CAAvB;AAQA3B,UAAU,CAAC8B,YAAX,GAA0B;AACxB7B,EAAAA,OAAO,EAAE,EADe;AAExBC,EAAAA,UAAU,EAAE,sBAAM,EAFM;AAGxBC,EAAAA,QAAQ,EAAE,KAHc;AAIxBC,EAAAA,UAAU,EAAE,KAJY;AAKxBC,EAAAA,WAAW,EAAE;AALW,CAA1B;;;;"}
@@ -5,6 +5,8 @@
5
5
 
6
6
  // Mixins //
7
7
 
8
+ @use "sass:math";
9
+
8
10
  @mixin text-ellipsis {
9
11
  overflow: hidden;
10
12
  text-overflow: ellipsis;
@@ -35,7 +37,7 @@
35
37
  $base: $base * 1px;
36
38
  }
37
39
 
38
- @return $pxval / $base * 1em;
40
+ @return math.div($pxval, $base) * 1em;
39
41
  }
40
42
 
41
43
  // Functions //
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jotforminc/dnd-builder",
3
- "version": "2.0.2",
3
+ "version": "2.2.1",
4
4
  "files": [
5
5
  "lib"
6
6
  ],
@@ -83,11 +83,11 @@
83
83
  "jest": "26.6.3",
84
84
  "jest-canvas-mock": "2.3.1",
85
85
  "lint-staged": "10.5.4",
86
- "node-sass": "5.0.0",
87
86
  "rollup": "2.39.0",
88
87
  "rollup-plugin-delete": "2.0.0",
89
88
  "rollup-plugin-sourcemaps": "0.6.3",
90
89
  "rollup-plugin-static-import": "0.1.1",
90
+ "sass": "1.52.3",
91
91
  "sass-loader": "10.1.1",
92
92
  "standard-version": "9.3.0",
93
93
  "style-loader": "2.0.0",