@pie-lib/editable-html 7.19.1 → 7.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,42 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [7.20.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.19.3...@pie-lib/editable-html@7.20.0) (2022-04-12)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **editable-html:** Removed overflow property that prevent body content from scrolling after closing dialog PD-1659 ([da2dc24](https://github.com/pie-framework/pie-lib/commit/da2dc2421448fa56d83369a043d864a568b1f886))
12
+ * **list:** fixed list in list issues [PD-1229] ([46dcec0](https://github.com/pie-framework/pie-lib/commit/46dcec0e20fc2d09969c45fd75426f647931ec08))
13
+
14
+
15
+ ### Features
16
+
17
+ * **config-ui, editable-html:** add ui/ux validation for choices and editable html fields ([d40148f](https://github.com/pie-framework/pie-lib/commit/d40148f0f4b1232ce1506867a7424aa56e26c5ec))
18
+
19
+
20
+
21
+
22
+
23
+ ## [7.19.3](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.19.2...@pie-lib/editable-html@7.19.3) (2022-03-21)
24
+
25
+ **Note:** Version bump only for package @pie-lib/editable-html
26
+
27
+
28
+
29
+
30
+
31
+ ## [7.19.2](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.19.1...@pie-lib/editable-html@7.19.2) (2022-03-08)
32
+
33
+
34
+ ### Bug Fixes
35
+
36
+ * **editable-html:** Added default values for responseAreaProps ([b49a919](https://github.com/pie-framework/pie-lib/commit/b49a919b4d5e336cb2a82e4e7926d72372369d3c))
37
+
38
+
39
+
40
+
41
+
6
42
  ## [7.19.1](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.19.0...@pie-lib/editable-html@7.19.1) (2022-03-07)
7
43
 
8
44
 
package/lib/editor.js CHANGED
@@ -85,6 +85,11 @@ var defaultToolbarOpts = {
85
85
  showDone: true,
86
86
  doneOn: 'blur'
87
87
  };
88
+ var defaultResponseAreaProps = {
89
+ options: {},
90
+ respAreaToolbar: function respAreaToolbar() {},
91
+ onHandleAreaChange: function onHandleAreaChange() {}
92
+ };
88
93
 
89
94
  var createToolbarOpts = function createToolbarOpts(toolbarOpts) {
90
95
  return _objectSpread(_objectSpread({}, defaultToolbarOpts), toolbarOpts);
@@ -396,6 +401,8 @@ var Editor = /*#__PURE__*/function (_React$Component) {
396
401
  toolbarOpts: createToolbarOpts(props.toolbarOpts)
397
402
  };
398
403
 
404
+ var normalizedResponseAreaProps = _objectSpread(_objectSpread({}, defaultResponseAreaProps), props.responseAreaProps);
405
+
399
406
  _this.onResize = function () {
400
407
  props.onChange(_this.state.value, true);
401
408
  };
@@ -466,10 +473,10 @@ var Editor = /*#__PURE__*/function (_React$Component) {
466
473
  }
467
474
  },
468
475
  responseArea: {
469
- type: props.responseAreaProps && props.responseAreaProps.type,
470
- options: props.responseAreaProps && props.responseAreaProps.options,
471
- respAreaToolbar: props.responseAreaProps && props.responseAreaProps.respAreaToolbar,
472
- onHandleAreaChange: props.responseAreaProps && props.responseAreaProps.onHandleAreaChange,
476
+ type: normalizedResponseAreaProps.type,
477
+ options: normalizedResponseAreaProps.options,
478
+ respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,
479
+ onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,
473
480
  onFocus: function onFocus() {
474
481
  log('[table:onFocus]...');
475
482
 
@@ -699,8 +706,9 @@ _defineProperty(Editor, "defaultProps", {
699
706
  disableUnderline: true,
700
707
  onFocus: function onFocus() {},
701
708
  onBlur: function onBlur() {},
709
+ onKeyDown: function onKeyDown() {},
702
710
  toolbarOpts: defaultToolbarOpts,
703
- onKeyDown: function onKeyDown() {}
711
+ responseAreaProps: defaultResponseAreaProps
704
712
  });
705
713
 
706
714
  var styles = {
package/lib/editor.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/editor.jsx"],"names":["log","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","createToolbarOpts","toolbarOpts","Editor","props","e","relatedTarget","target","node","state","value","setState","focusedNode","resetValue","stashedValue","stashValue","editor","change","c","collapseToStartOf","selectedNode","onChange","resolve","nonEmpty","toolbarInFocus","blur","startText","text","length","then","onEditingDone","event","Promise","handleBlur","bind","onBlur","editorDOM","document","querySelector","key","setTimeout","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","onFocus","force","stopReset","plugins","reduce","s","p","isFocused","toObject","newValue","Value","fromJSON","toJSON","done","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","type","parent","getParent","Block","pos","focus","onResize","activePlugins","math","onClick","onMathClick","onPluginFocus","onPluginBlur","image","onDelete","imageSupport","src","insertImageRequested","getHandler","handler","add","toolbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","table","responseArea","responseAreaProps","options","respAreaToolbar","onHandleAreaChange","media","createChange","onRef","window","autoFocus","nextProps","newToolbarOpts","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","display","equals","width","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","placeholder","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","normalize","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","oneOfType","string","number","any","shape","oneOf","arrayOf","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAMA,GAAG,GAAG,uBAAM,sBAAN,CAAZ;AAEA,IAAMC,kBAAkB,GAAG;AACzBC,EAAAA,QAAQ,EAAE,QADe;AAEzBC,EAAAA,SAAS,EAAE,MAFc;AAGzBC,EAAAA,aAAa,EAAE,KAHU;AAIzBC,EAAAA,QAAQ,EAAE,IAJe;AAKzBC,EAAAA,MAAM,EAAE;AALiB,CAA3B;;AAQA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAAAC,WAAW,EAAI;AACvC,yCACKP,kBADL,GAEKO,WAFL;AAID,CALD;;IAOaC,M;;;;;AA6DX,kBAAYC,KAAZ,EAAmB;AAAA;;AAAA;;AACjB,8BAAMA,KAAN;;AADiB,mEA2IJ,UAAAC,CAAC,EAAI;AAClBX,MAAAA,GAAG,CAAC,gBAAD,EAAmBW,CAAC,IAAIA,CAAC,CAACC,aAA1B,CAAH;AACA,UAAMC,MAAM,GAAGF,CAAC,IAAIA,CAAC,CAACC,aAAtB;AAEA,UAAME,IAAI,GAAGD,MAAM,GAAG,0BAASA,MAAT,EAAiB,MAAKE,KAAL,CAAWC,KAA5B,CAAH,GAAwC,IAA3D;AACAhB,MAAAA,GAAG,CAAC,uBAAD,EAA0Bc,IAA1B,CAAH;;AACA,YAAKG,QAAL,CAAc;AAAEC,QAAAA,WAAW,EAAEJ;AAAf,OAAd,EAAqC,YAAM;AACzC,cAAKK,UAAL;AACD,OAFD;AAGD,KApJkB;;AAAA,oEAsJH,UAAAR,CAAC,EAAI;AACnBX,MAAAA,GAAG,CAAC,iBAAD,EAAoBW,CAAC,IAAIA,CAAC,CAACE,MAA3B,CAAH;AACA,UAAMA,MAAM,GAAGF,CAAC,IAAIA,CAAC,CAACE,MAAtB;;AACA,UAAIA,MAAJ,EAAY;AACV,YAAMC,IAAI,GAAG,0BAASD,MAAT,EAAiB,MAAKE,KAAL,CAAWC,KAA5B,CAAb;AACAhB,QAAAA,GAAG,CAAC,wBAAD,EAA2Bc,IAA3B,CAAH;AAEA,YAAMM,YAAY,GAAG,MAAKL,KAAL,CAAWK,YAAX,IAA2B,MAAKL,KAAL,CAAWC,KAA3D;;AACA,cAAKC,QAAL,CAAc;AAAEC,UAAAA,WAAW,EAAEJ,IAAf;AAAqBM,UAAAA,YAAY,EAAZA;AAArB,SAAd;AACD,OAND,MAMO;AACL,cAAKH,QAAL,CAAc;AAAEC,UAAAA,WAAW,EAAE;AAAf,SAAd;AACD;;AACD,YAAKG,UAAL;AACD,KAnKkB;;AAAA,kEAqKL,UAAAP,IAAI,EAAI;AACpB,YAAKQ,MAAL,CAAYC,MAAZ,CAAmB,UAAAC,CAAC;AAAA,eAAIA,CAAC,CAACC,iBAAF,CAAoBX,IAApB,CAAJ;AAAA,OAApB;;AACA,YAAKG,QAAL,CAAc;AAAES,QAAAA,YAAY,EAAEZ;AAAhB,OAAd;AACD,KAxKkB;;AAAA,oEA0KH,YAAM;AACpBd,MAAAA,GAAG,CAAC,iBAAD,CAAH;;AACA,YAAKiB,QAAL,CAAc;AAAEG,QAAAA,YAAY,EAAE,IAAhB;AAAsBF,QAAAA,WAAW,EAAE;AAAnC,OAAd;;AACAlB,MAAAA,GAAG,CAAC,yBAAD,EAA4B,MAAKe,KAAL,CAAWC,KAAvC,CAAH;;AACA,YAAKN,KAAL,CAAWiB,QAAX,CAAoB,MAAKZ,KAAL,CAAWC,KAA/B,EAAsC,IAAtC;AACD,KA/KkB;;AAAA,iEAyLN,UAAAY,OAAO,EAAI;AACtB,UAAQC,QAAR,GAAqB,MAAKnB,KAA1B,CAAQmB,QAAR;AACA,UACiBvB,MADjB,GAEI,MAAKS,KAFT,CACEP,WADF,CACiBF,MADjB;;AAIA,YAAKW,QAAL,CAAc;AAAEa,QAAAA,cAAc,EAAE,KAAlB;AAAyBZ,QAAAA,WAAW,EAAE;AAAtC,OAAd;;AAEA,UAAI,MAAKI,MAAT,EAAiB;AACf,cAAKA,MAAL,CAAYS,IAAZ;AACD;;AAED,UAAIzB,MAAM,KAAK,MAAf,EAAuB;AACrB,YAAIuB,QAAQ,IAAI,MAAKd,KAAL,CAAWC,KAAX,CAAiBgB,SAAjB,CAA2BC,IAA3B,CAAgCC,MAAhC,KAA2C,CAA3D,EAA8D;AAC5D,gBAAKf,UAAL,CAAgB,IAAhB,EAAsBgB,IAAtB,CAA2B,YAAM;AAC/B,kBAAKC,aAAL;;AACAR,YAAAA,OAAO;AACR,WAHD;AAID,SALD,MAKO;AACL,gBAAKQ,aAAL;;AACAR,UAAAA,OAAO;AACR;AACF;AACF,KAhNkB;;AAAA,6DAkNV,UAAAS,KAAK,EAAI;AAChBrC,MAAAA,GAAG,CAAC,UAAD,CAAH;AACA,UAAMa,MAAM,GAAGwB,KAAK,CAACzB,aAArB;AAEA,UAAME,IAAI,GAAGD,MAAM,GAAG,0BAASA,MAAT,EAAiB,MAAKE,KAAL,CAAWC,KAA5B,CAAH,GAAwC,IAA3D;AAEAhB,MAAAA,GAAG,CAAC,iBAAD,EAAoBc,IAApB,CAAH;AAEA,aAAO,IAAIwB,OAAJ,CAAY,UAAAV,OAAO,EAAI;AAC5B,cAAKX,QAAL,CAAc;AAAEC,UAAAA,WAAW,EAAEJ;AAAf,SAAd,EAAqC,MAAKyB,UAAL,CAAgBC,IAAhB,gCAA2BZ,OAA3B,CAArC;;AACA,cAAKlB,KAAL,CAAW+B,MAAX,CAAkBJ,KAAlB;AACD,OAHM,CAAP;AAID,KA9NkB;;AAAA,oEAgOH,UAAA1B,CAAC,EAAI;AACnB,UAAM+B,SAAS,GAAGC,QAAQ,CAACC,aAAT,uBAAqC,MAAK7B,KAAL,CAAWC,KAAX,CAAiB2B,QAAjB,CAA0BE,GAA/D,SAAlB;AAEAC,MAAAA,UAAU,CAAC,YAAM;AACf,YAAI,CAAC,MAAKC,UAAV,EAAsB;AACpB;AACD;;AAED,YAAMC,aAAa,GACjB,CAACN,SAAD,IAAcC,QAAQ,CAACM,aAAT,CAAuBC,OAAvB,qBAA2CR,SAAS,CAACS,SAArD,SADhB;AAEA,YAAMC,cAAc,GAClB,CAAC,MAAKC,UAAN,IACAV,QAAQ,CAACM,aAAT,CAAuBC,OAAvB,qBAA2C,MAAKG,UAAL,CAAgBF,SAA3D,SAFF;;AAGA,YAAMG,oBAAoB,GACxB,MAAKP,UAAL,CAAgBQ,QAAhB,CAAyBP,aAAzB,KAA2C,MAAKD,UAAL,CAAgBQ,QAAhB,CAAyBH,cAAzB,CAD7C;;AAGA,YAAI,CAACE,oBAAL,EAA2B;AACzBZ,UAAAA,SAAS,CAACc,mBAAV,CAA8B,MAA9B,EAAsC,MAAKC,aAA3C;;AACA,gBAAKhB,MAAL,CAAY9B,CAAZ;AACD;AACF,OAjBS,EAiBP,EAjBO,CAAV;AAkBD,KArPkB;;AAAA,8DA8PT;AAAA,aACR,IAAI2B,OAAJ,CAAY,UAAAV,OAAO,EAAI;AACrB,YAAMc,SAAS,GAAGC,QAAQ,CAACC,aAAT,uBAAqC,MAAK7B,KAAL,CAAWC,KAAX,CAAiB2B,QAAjB,CAA0BE,GAA/D,SAAlB;AAEA7C,QAAAA,GAAG,CAAC,WAAD,EAAc2C,QAAQ,CAACM,aAAvB,CAAH;AAEA;AACN;AACA;;AACM,YAAI,MAAKS,uBAAT,EAAkC;AAChC,sCAAsB,MAAKA,uBAA3B;AAAA,cAAQb,GAAR,yBAAQA,GAAR;AAAA,cAAac,IAAb,yBAAaA,IAAb;AACA,cAAMC,KAAK,GAAGjB,QAAQ,CAACC,aAAT,uBAAqCC,GAArC,SAAd;;AAEA,cAAIe,KAAJ,EAAW;AACT,gBAAIrC,MAAM,GAAG,MAAKR,KAAL,CAAWC,KAAX,CAAiBO,MAAjB,GAA0BsC,YAA1B,CAAuChB,GAAvC,EAA4C;AAAEc,cAAAA,IAAI,EAAJA;AAAF,aAA5C,CAAb;;AAEA,kBAAK1C,QAAL,CAAc;AAAED,cAAAA,KAAK,EAAEO,MAAM,CAACP;AAAhB,aAAd,EAAuC,YAAM;AAC3C,oBAAK0C,uBAAL,GAA+B,IAA/B;AACD,aAFD;AAGD;AACF;AAED;AACN;AACA;AACA;AACA;AACA;;;AACM,YAAIhB,SAAS,KAAKC,QAAQ,CAACM,aAA3B,EAA0C;AACxCP,UAAAA,SAAS,CAACc,mBAAV,CAA8B,MAA9B,EAAsC,MAAKC,aAA3C;AACAf,UAAAA,SAAS,CAACoB,gBAAV,CAA2B,MAA3B,EAAmC,MAAKL,aAAxC;AACD;;AAED,cAAKpC,UAAL;;AACA,cAAKX,KAAL,CAAWqD,OAAX;;AAEAnC,QAAAA,OAAO;AACR,OApCD,CADQ;AAAA,KA9PS;;AAAA,iEAqSN,YAAM;AACjB5B,MAAAA,GAAG,CAAC,cAAD,CAAH;;AACA,UAAI,CAAC,MAAKe,KAAL,CAAWK,YAAhB,EAA8B;AAC5B,cAAKH,QAAL,CAAc;AAAEG,UAAAA,YAAY,EAAE,MAAKL,KAAL,CAAWC;AAA3B,SAAd;AACD;AACF,KA1SkB;;AAAA,iEA+SN,UAAAgD,KAAK,EAAI;AACpB,wBAA+B,MAAKjD,KAApC;AAAA,UAAQC,KAAR,eAAQA,KAAR;AAAA,UAAeE,WAAf,eAAeA,WAAf;;AAEA,UAAM+C,SAAS,GAAG,MAAKC,OAAL,CAAaC,MAAb,CAAoB,UAACC,CAAD,EAAIC,CAAJ,EAAU;AAC9C,eAAOD,CAAC,IAAKC,CAAC,CAACJ,SAAF,IAAeI,CAAC,CAACJ,SAAF,CAAY,MAAKlD,KAAL,CAAWC,KAAvB,CAA5B;AACD,OAFiB,EAEf,KAFe,CAAlB;;AAIAhB,MAAAA,GAAG,CAAC,cAAD,EAAiBgB,KAAK,CAACsD,SAAvB,EAAkCpD,WAAlC,EAA+C,aAA/C,EAA8D+C,SAA9D,CAAH;;AACA,UAAK,MAAKlD,KAAL,CAAWK,YAAX,IAA2B,CAACJ,KAAK,CAACsD,SAAlC,IAA+C,CAACpD,WAAhD,IAA+D,CAAC+C,SAAjE,IAA+ED,KAAnF,EAA0F;AACxFhE,QAAAA,GAAG,CAAC,2BAAD,CAAH;AACAA,QAAAA,GAAG,CAAC,SAAD,EAAY,MAAKe,KAAL,CAAWK,YAAX,CAAwBuB,QAAxB,CAAiC4B,QAAjC,EAAZ,CAAH;AACAvE,QAAAA,GAAG,CAAC,SAAD,EAAY,MAAKe,KAAL,CAAWC,KAAX,CAAiB2B,QAAjB,CAA0B4B,QAA1B,EAAZ,CAAH;;AAEA,YAAMC,QAAQ,GAAGC,aAAMC,QAAN,CAAe,MAAK3D,KAAL,CAAWK,YAAX,CAAwBuD,MAAxB,EAAf,CAAjB;;AAEA3E,QAAAA,GAAG,CAAC,YAAD,EAAewE,QAAQ,CAAC7B,QAAxB,CAAH;AACA,eAAO,IAAIL,OAAJ,CAAY,UAAAV,OAAO,EAAI;AAC5BkB,UAAAA,UAAU,CAAC,YAAM;AACf,kBAAK7B,QAAL,CAAc;AAAED,cAAAA,KAAK,EAAEwD,QAAT;AAAmBpD,cAAAA,YAAY,EAAE;AAAjC,aAAd,EAAuD,YAAM;AAC3DpB,cAAAA,GAAG,CAAC,aAAD,EAAgB,MAAKe,KAAL,CAAWC,KAAX,CAAiB2B,QAAjB,CAA0BgC,MAA1B,EAAhB,CAAH;AACA/C,cAAAA,OAAO;AACR,aAHD;AAID,WALS,EAKP,EALO,CAAV;AAMD,SAPM,CAAP;AAQD,OAhBD,MAgBO;AACL,eAAOU,OAAO,CAACV,OAAR,CAAgB,EAAhB,CAAP;AACD;AACF,KA1UkB;;AAAA,+DA4UR,UAACL,MAAD,EAASqD,IAAT,EAAkB;AAC3B5E,MAAAA,GAAG,CAAC,YAAD,CAAH;;AACA,YAAKiB,QAAL,CAAc;AAAED,QAAAA,KAAK,EAAEO,MAAM,CAACP;AAAhB,OAAd,EAAuC,YAAM;AAC3ChB,QAAAA,GAAG,CAAC,yBAAD,CAAH;;AAEA,YAAI4E,IAAJ,EAAU;AACRA,UAAAA,IAAI;AACL;AACF,OAND;AAOD,KArVkB;;AAAA,kEAgWL,UAAAC,CAAC,EAAI;AACjB,UAAI,CAACA,CAAL,EAAQ;AACN;AACD;;AAED,UAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B;AACzB,YAAIA,CAAC,CAACC,QAAF,CAAW,GAAX,CAAJ,EAAqB;AACnB,iBAAOC,SAAP;AACD,SAFD,MAEO,IAAIF,CAAC,CAACC,QAAF,CAAW,IAAX,KAAoBD,CAAC,CAACC,QAAF,CAAW,IAAX,CAApB,IAAwCD,CAAC,CAACC,QAAF,CAAW,IAAX,CAA5C,EAA8D;AACnE,iBAAOD,CAAP;AACD,SAFM,MAEA;AACL,cAAM7D,KAAK,GAAGgE,QAAQ,CAACH,CAAD,EAAI,EAAJ,CAAtB;AACA,iBAAOI,KAAK,CAACjE,KAAD,CAAL,GAAeA,KAAf,aAA0BA,KAA1B,OAAP;AACD;AACF;;AACD,UAAI,OAAO6D,CAAP,KAAa,QAAjB,EAA2B;AACzB,yBAAUA,CAAV;AACD;;AAED;AACD,KApXkB;;AAAA,mEAiYJ,UAAA/D,IAAI,EAAI;AACrB,UAAIA,IAAI,CAACoE,MAAL,KAAgB,OAApB,EAA6B;AAE7B,UAAMC,IAAI,GAAGrE,IAAI,CAACsE,KAAL,CAAWD,IAAX,EAAb;AACA,UAAI,CAACA,IAAL,EAAW;AAEX,UAAIA,IAAI,CAACE,IAAL,KAAc,OAAlB,EAA2B;AAE3BrF,MAAAA,GAAG,CAAC,gCAAD,CAAH;AAEA,UAAMsF,MAAM,GAAGH,IAAI,CAACI,SAAL,CAAeJ,IAAI,CAACtC,GAApB,CAAf;;AACA,UAAMwB,CAAC,GAAGmB,aAAMD,SAAN,CAAgBJ,IAAI,CAACtC,GAArB,CAAV;;AACA7C,MAAAA,GAAG,CAAC,wBAAD,EAA2BsF,MAA3B,EAAmCjB,CAAnC,CAAH;AAEA,aAAOU,SAAP;AACD,KAhZkB;;AAAA,iEAkZN,UAAClC,GAAD,EAAMc,IAAN,EAAe;AAC1B3D,MAAAA,GAAG,CAAC,mBAAD,EAAsB6C,GAAtB,EAA2Bc,IAA3B,CAAH;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEI;AACA;;AAEA,YAAKD,uBAAL,GAA+B;AAAEb,QAAAA,GAAG,EAAHA,GAAF;AAAOc,QAAAA,IAAI,EAAJA;AAAP,OAA/B;AACD,KAnakB;;AAAA,4DAqaX,UAAC8B,GAAD,EAAM3E,IAAN,EAAe;AACrB,UAAMZ,QAAQ,GAAGuF,GAAG,IAAI,KAAxB;;AAEA,YAAK/E,KAAL,CAAWgF,KAAX,CAAiBxF,QAAjB,EAA2BY,IAA3B;AACD,KAzakB;;AAEjB,UAAKC,KAAL,GAAa;AACXC,MAAAA,KAAK,EAAEN,KAAK,CAACM,KADF;AAEXR,MAAAA,WAAW,EAAED,iBAAiB,CAACG,KAAK,CAACF,WAAP;AAFnB,KAAb;;AAKA,UAAKmF,QAAL,GAAgB,YAAM;AACpBjF,MAAAA,KAAK,CAACiB,QAAN,CAAe,MAAKZ,KAAL,CAAWC,KAA1B,EAAiC,IAAjC;AACD,KAFD;;AAIA,UAAKkD,OAAL,GAAe,2BAAaxD,KAAK,CAACkF,aAAnB,EAAkC;AAC/CC,MAAAA,IAAI,EAAE;AACJC,QAAAA,OAAO,EAAE,MAAKC,WADV;AAEJhC,QAAAA,OAAO,EAAE,MAAKiC,aAFV;AAGJvD,QAAAA,MAAM,EAAE,MAAKwD;AAHT,OADyC;AAM/CC,MAAAA,KAAK,EAAE;AACLC,QAAAA,QAAQ,EACN,MAAKzF,KAAL,CAAW0F,YAAX,IACA,MAAK1F,KAAL,CAAW0F,YAAX,UADA,IAEC,UAACC,GAAD,EAAMzB,IAAN,EAAe;AACd,gBAAKlE,KAAL,CAAW0F,YAAX,WAA+BC,GAA/B,EAAoC,UAAA1F,CAAC,EAAI;AACvCiE,YAAAA,IAAI,CAACjE,CAAD,EAAI,MAAKI,KAAL,CAAWC,KAAf,CAAJ;AACD,WAFD;AAGD,SARE;AASLsF,QAAAA,oBAAoB,EAClB,MAAK5F,KAAL,CAAW0F,YAAX,IACC,UAAAG,UAAU,EAAI;AACb;AACZ;AACA;AACA;AACY,cAAMC,OAAO,GAAGD,UAAU,CAAC;AAAA,mBAAM,MAAKxF,KAAL,CAAWC,KAAjB;AAAA,WAAD,CAA1B;;AACA,gBAAKN,KAAL,CAAW0F,YAAX,CAAwBK,GAAxB,CAA4BD,OAA5B;AACD,SAlBE;AAmBLzC,QAAAA,OAAO,EAAE,MAAKiC,aAnBT;AAoBLvD,QAAAA,MAAM,EAAE,MAAKwD;AApBR,OANwC;AA4B/CS,MAAAA,OAAO,EAAE;AACP;AACR;AACA;AACA;AACQC,QAAAA,gBAAgB,EAAEjG,KAAK,CAACiG,gBALjB;AAMPC,QAAAA,SAAS,EAAElG,KAAK,CAACmG,gBANV;AAOPC,QAAAA,MAAM,EAAE,kBAAM;AACZ,cAAQjF,QAAR,GAAqB,MAAKnB,KAA1B,CAAQmB,QAAR;AAEA7B,UAAAA,GAAG,CAAC,UAAD,CAAH;;AACA,gBAAKiB,QAAL,CAAc;AAAEa,YAAAA,cAAc,EAAE,KAAlB;AAAyBZ,YAAAA,WAAW,EAAE;AAAtC,WAAd;;AACA,gBAAKI,MAAL,CAAYS,IAAZ;;AAEA,cAAIF,QAAQ,IAAI,MAAKd,KAAL,CAAWC,KAAX,CAAiBgB,SAAjB,CAA2BC,IAA3B,CAAgCC,MAAhC,KAA2C,CAA3D,EAA8D;AAC5D,kBAAKf,UAAL,CAAgB,IAAhB,EAAsBgB,IAAtB,CAA2B,YAAM;AAC/B,oBAAKC,aAAL;AACD,aAFD;AAGD,WAJD,MAIO;AACL,kBAAKA,aAAL;AACD;AACF;AArBM,OA5BsC;AAmD/C2E,MAAAA,KAAK,EAAE;AACLhD,QAAAA,OAAO,EAAE,mBAAM;AACb/D,UAAAA,GAAG,CAAC,oBAAD,CAAH;;AACA,gBAAKgG,aAAL;AACD,SAJI;AAKLvD,QAAAA,MAAM,EAAE,kBAAM;AACZzC,UAAAA,GAAG,CAAC,mBAAD,CAAH;;AACA,gBAAKiG,YAAL;AACD;AARI,OAnDwC;AA6D/Ce,MAAAA,YAAY,EAAE;AACZ3B,QAAAA,IAAI,EAAE3E,KAAK,CAACuG,iBAAN,IAA2BvG,KAAK,CAACuG,iBAAN,CAAwB5B,IAD7C;AAEZ6B,QAAAA,OAAO,EAAExG,KAAK,CAACuG,iBAAN,IAA2BvG,KAAK,CAACuG,iBAAN,CAAwBC,OAFhD;AAGZC,QAAAA,eAAe,EAAEzG,KAAK,CAACuG,iBAAN,IAA2BvG,KAAK,CAACuG,iBAAN,CAAwBE,eAHxD;AAIZC,QAAAA,kBAAkB,EAAE1G,KAAK,CAACuG,iBAAN,IAA2BvG,KAAK,CAACuG,iBAAN,CAAwBG,kBAJ3D;AAKZrD,QAAAA,OAAO,EAAE,mBAAM;AACb/D,UAAAA,GAAG,CAAC,oBAAD,CAAH;;AACA,gBAAKgG,aAAL;AACD,SARW;AASZvD,QAAAA,MAAM,EAAE,kBAAM;AACZzC,UAAAA,GAAG,CAAC,mBAAD,CAAH;;AACA,gBAAKiG,YAAL;AACD;AAZW,OA7DiC;AA2E/CoB,MAAAA,KAAK,EAAE;AACL3B,QAAAA,KAAK,EAAE,MAAKA,KADP;AAEL4B,QAAAA,YAAY,EAAE;AAAA,iBAAM,MAAKvG,KAAL,CAAWC,KAAX,CAAiBO,MAAjB,EAAN;AAAA,SAFT;AAGLI,QAAAA,QAAQ,EAAE,MAAKA;AAHV;AA3EwC,KAAlC,CAAf;AAXiB;AA4FlB;;;;WAED,6BAAoB;AAAA;;AAClB;AACA,WAAKjB,KAAL,CAAW6G,KAAX,CAAiB,IAAjB;AAEAC,MAAAA,MAAM,CAAC1D,gBAAP,CAAwB,QAAxB,EAAkC,KAAK6B,QAAvC;;AAEA,UAAI,KAAKrE,MAAL,IAAe,KAAKZ,KAAL,CAAW+G,SAA9B,EAAyC;AACvCnF,QAAAA,OAAO,CAACV,OAAR,GAAkBO,IAAlB,CAAuB,YAAM;AAC3B,cAAI,MAAI,CAACb,MAAT,EAAiB;AACf,gBAAMoB,SAAS,GAAGC,QAAQ,CAACC,aAAT,uBACF,MAAI,CAACtB,MAAL,CAAYN,KAAZ,CAAkB2B,QAAlB,CAA2BE,GADzB,SAAlB;;AAIA,YAAA,MAAI,CAACvB,MAAL,CAAYoE,KAAZ;;AAEA,gBAAIhD,SAAJ,EAAe;AACbA,cAAAA,SAAS,CAACgD,KAAV;AACD;AACF;AACF,SAZD;AAaD;AACF;;;WAED,mCAA0BgC,SAA1B,EAAqC;AACnC,UAAQlH,WAAR,GAAwB,KAAKO,KAA7B,CAAQP,WAAR;AACA,UAAMmH,cAAc,GAAGpH,iBAAiB,CAACmH,SAAS,CAAClH,WAAX,CAAxC;;AAEA,UAAI,CAAC,yBAAQmH,cAAR,EAAwBnH,WAAxB,CAAL,EAA2C;AACzC,aAAKS,QAAL,CAAc;AACZT,UAAAA,WAAW,EAAEmH;AADD,SAAd;AAGD;AACF;;;WAED,8BAAqB;AACnB;AACA;AACA,UAAMC,YAAY,GAAGjF,QAAQ,CAACkF,gBAAT,CAA0B,6BAA1B,CAArB;AAEAC,MAAAA,KAAK,CAACC,IAAN,CAAWH,YAAX,EAAyBI,OAAzB,CAAiC,UAAAC,EAAE,EAAI;AACrCA,QAAAA,EAAE,CAACC,KAAH,CAASC,QAAT,GAAoB,KAApB;AACAF,QAAAA,EAAE,CAACC,KAAH,CAASE,OAAT,GAAmB,cAAnB;AACD,OAHD;AAID;;;;AAwCD;AACF;AACA;AACE,oCAAuB;AACrBZ,MAAAA,MAAM,CAAChE,mBAAP,CAA2B,QAA3B,EAAqC,KAAKmC,QAA1C;AACD,K,CAED;;;;WA+JA,0CAAiCjF,KAAjC,EAAwC;AACtC,UAAI,CAACA,KAAK,CAACM,KAAN,CAAY2B,QAAZ,CAAqB0F,MAArB,CAA4B,KAAK3H,KAAL,CAAWM,KAAX,CAAiB2B,QAA7C,CAAL,EAA6D;AAC3D,aAAK1B,QAAL,CAAc;AACZyE,UAAAA,KAAK,EAAE,KADK;AAEZ1E,UAAAA,KAAK,EAAEN,KAAK,CAACM;AAFD,SAAd;AAID;AACF;;;WAwBD,0BAAiB;AACf,wBAAgD,KAAKN,KAArD;AAAA,UAAQ4H,KAAR,eAAQA,KAAR;AAAA,UAAeC,SAAf,eAAeA,SAAf;AAAA,UAA0BC,MAA1B,eAA0BA,MAA1B;AAAA,UAAkCC,SAAlC,eAAkCA,SAAlC;AAEA,aAAO;AACLH,QAAAA,KAAK,EAAE,KAAKI,WAAL,CAAiBJ,KAAjB,CADF;AAELE,QAAAA,MAAM,EAAE,KAAKE,WAAL,CAAiBF,MAAjB,CAFH;AAGLD,QAAAA,SAAS,EAAE,KAAKG,WAAL,CAAiBH,SAAjB,CAHN;AAILE,QAAAA,SAAS,EAAE,KAAKC,WAAL,CAAiBD,SAAjB;AAJN,OAAP;AAMD;;;WA4CD,kBAAS;AAAA;AAAA;;AACP,yBASI,KAAK/H,KATT;AAAA,UACEiI,QADF,gBACEA,QADF;AAAA,UAEEC,UAFF,gBAEEA,UAFF;AAAA,UAGEC,cAHF,gBAGEA,cAHF;AAAA,UAIEC,OAJF,gBAIEA,OAJF;AAAA,UAKE3F,SALF,gBAKEA,SALF;AAAA,UAME4F,WANF,gBAMEA,WANF;AAAA,UAOEC,WAPF,gBAOEA,WAPF;AAAA,UAQEC,SARF,gBAQEA,SARF;AAWA,yBAA4C,KAAKlI,KAAjD;AAAA,UAAQC,KAAR,gBAAQA,KAAR;AAAA,UAAeE,WAAf,gBAAeA,WAAf;AAAA,UAA4BV,WAA5B,gBAA4BA,WAA5B;AAEAR,MAAAA,GAAG,CAAC,kBAAD,EAAqBgB,KAArB,CAAH;AACA,UAAMkI,SAAS,GAAG,KAAKC,cAAL,EAAlB;AACA,UAAMC,KAAK,GAAG,4EAETN,OAAO,CAACO,MAFC,EAEQR,cAFR,gCAGTC,OAAO,CAACQ,YAHC,EAGc9I,WAAW,CAACJ,aAAZ,IAA6BI,WAAW,CAACN,QAAZ,KAAyB,KAHpE,iBAKZiD,SALY,CAAd;AAQA,0BACE;AACE,QAAA,GAAG,EAAE,aAAAoG,IAAG;AAAA,iBAAK,MAAI,CAACxG,UAAL,GAAkBwG,IAAvB;AAAA,SADV;AAEE,QAAA,KAAK,EAAE;AAAEjB,UAAAA,KAAK,EAAEY,SAAS,CAACZ;AAAnB,SAFT;AAGE,QAAA,SAAS,EAAEc;AAHb,sBAKE,gCAAC,kBAAD;AACE,QAAA,OAAO,EAAE,KAAKlF,OADhB;AAEE,QAAA,QAAQ,EAAE,kBAAAsF,CAAC,EAAI;AACb,cAAIA,CAAJ,EAAO;AACL,YAAA,MAAI,CAACC,WAAL,GAAmBD,CAAnB;AACD;AACF,SANH;AAOE,QAAA,GAAG,EAAE,aAAAA,CAAC;AAAA,iBAAK,MAAI,CAAClI,MAAL,GAAckI,CAAC,IAAI,MAAI,CAAC9I,KAAL,CAAWgJ,SAAX,CAAqBF,CAArB,CAAxB;AAAA,SAPR;AAQE,QAAA,UAAU,EAAE,oBAAAA,CAAC,EAAI;AACf,cAAIA,CAAJ,EAAO;AACL,YAAA,MAAI,CAACnG,UAAL,GAAkBmG,CAAlB;AACD;AACF,SAZH;AAaE,QAAA,KAAK,EAAExI,KAbT;AAcE,QAAA,KAAK,EAAE,KAAK0E,KAdd;AAeE,QAAA,SAAS,EAAEuD,SAfb;AAgBE,QAAA,QAAQ,EAAE,KAAKtH,QAhBjB;AAiBE,QAAA,MAAM,EAAE,KAAKc,MAjBf;AAkBE,QAAA,OAAO,EAAE,KAAKsB,OAlBhB;AAmBE,QAAA,aAAa,EAAE,KAAK3B,aAnBtB;AAoBE,QAAA,WAAW,EAAElB,WApBf;AAqBE,QAAA,SAAS,EAAE,KAAKyI,SArBlB;AAsBE,QAAA,QAAQ,EAAEhB,QAtBZ;AAuBE,QAAA,UAAU,EAAEC,UAvBd;AAwBE,QAAA,SAAS,EAAEE,OAAO,CAACW,WAxBrB;AAyBE,QAAA,KAAK,EAAE;AACLlB,UAAAA,SAAS,EAAEW,SAAS,CAACX,SADhB;AAELC,UAAAA,MAAM,EAAEU,SAAS,CAACV,MAFb;AAGLC,UAAAA,SAAS,EAAES,SAAS,CAACT;AAHhB,SAzBT;AA8BE,QAAA,WAAW,EAAEO,WA9Bf;AA+BE,QAAA,WAAW,EAAExI,WA/Bf;AAgCE,QAAA,WAAW,EAAEuI,WAhCf;AAiCE,QAAA,YAAY,EAAE,KAAKa;AAjCrB,QALF,CADF;AA2CD;;;;EA3iByBC,kBAAMC,S,GA8iBlC;;;;;gBA9iBarJ,M,eACQ;AACjBgH,EAAAA,SAAS,EAAEsC,sBAAUC,IADJ;AAEjBN,EAAAA,SAAS,EAAEK,sBAAUE,IAAV,CAAeC,UAFT;AAGjB3C,EAAAA,KAAK,EAAEwC,sBAAUE,IAAV,CAAeC,UAHL;AAIjBvI,EAAAA,QAAQ,EAAEoI,sBAAUE,IAAV,CAAeC,UAJR;AAKjBnG,EAAAA,OAAO,EAAEgG,sBAAUE,IALF;AAMjBxH,EAAAA,MAAM,EAAEsH,sBAAUE,IAND;AAOjBhB,EAAAA,SAAS,EAAEc,sBAAUE,IAPJ;AAQjBvE,EAAAA,KAAK,EAAEqE,sBAAUE,IAAV,CAAeC,UARL;AASjBlJ,EAAAA,KAAK,EAAEmJ,2BAAWnJ,KAAX,CAAiBkJ,UATP;AAUjB9D,EAAAA,YAAY,EAAE2D,sBAAU7E,MAVP;AAWjBoD,EAAAA,KAAK,EAAEyB,sBAAUK,SAAV,CAAoB,CAACL,sBAAUM,MAAX,EAAmBN,sBAAUO,MAA7B,CAApB,CAXU;AAYjB9B,EAAAA,MAAM,EAAEuB,sBAAUK,SAAV,CAAoB,CAACL,sBAAUM,MAAX,EAAmBN,sBAAUO,MAA7B,CAApB,CAZS;AAajB/B,EAAAA,SAAS,EAAEwB,sBAAUK,SAAV,CAAoB,CAACL,sBAAUM,MAAX,EAAmBN,sBAAUO,MAA7B,CAApB,CAbM;AAcjB7B,EAAAA,SAAS,EAAEsB,sBAAUK,SAAV,CAAoB,CAACL,sBAAUM,MAAX,EAAmBN,sBAAUO,MAA7B,CAApB,CAdM;AAejBxB,EAAAA,OAAO,EAAEiB,sBAAU7E,MAAV,CAAiBgF,UAfT;AAgBjBrB,EAAAA,cAAc,EAAEkB,sBAAUC,IAhBT;AAiBjBrB,EAAAA,QAAQ,EAAEoB,sBAAUC,IAjBH;AAkBjBpB,EAAAA,UAAU,EAAEmB,sBAAUC,IAlBL;AAmBjBnI,EAAAA,QAAQ,EAAEkI,sBAAUC,IAnBH;AAoBjBrD,EAAAA,gBAAgB,EAAEoD,sBAAUC,IApBX;AAqBjBnD,EAAAA,gBAAgB,EAAEkD,sBAAUC,IArBX;AAsBjBhB,EAAAA,WAAW,EAAEe,sBAAUQ,GAtBN;AAuBjBxB,EAAAA,WAAW,EAAEgB,sBAAUM,MAvBN;AAwBjBpD,EAAAA,iBAAiB,EAAE8C,sBAAUS,KAAV,CAAgB;AACjCnF,IAAAA,IAAI,EAAE0E,sBAAUU,KAAV,CAAgB,CACpB,+BADoB,EAEpB,iBAFoB,EAGpB,mBAHoB,CAAhB,CAD2B;AAMjCvD,IAAAA,OAAO,EAAE6C,sBAAU7E,MANc;AAOjCiC,IAAAA,eAAe,EAAE4C,sBAAUE,IAPM;AAQjC7C,IAAAA,kBAAkB,EAAE2C,sBAAUE;AARG,GAAhB,CAxBF;AAkCjBzJ,EAAAA,WAAW,EAAEuJ,sBAAUS,KAAV,CAAgB;AAC3BtK,IAAAA,QAAQ,EAAE6J,sBAAUU,KAAV,CAAgB,CAAC,QAAD,EAAW,KAAX,CAAhB,CADiB;AAE3BtK,IAAAA,SAAS,EAAE4J,sBAAUU,KAAV,CAAgB,CAAC,MAAD,EAAS,OAAT,CAAhB,CAFgB;AAG3BrK,IAAAA,aAAa,EAAE2J,sBAAUC,IAHE;AAI3B3J,IAAAA,QAAQ,EAAE0J,sBAAUC,IAJO;AAK3B1J,IAAAA,MAAM,EAAEyJ,sBAAUM;AALS,GAAhB,CAlCI;AAyCjBzE,EAAAA,aAAa,EAAEmE,sBAAUW,OAAV,CAAkB,UAAAC,MAAM,EAAI;AACzC,QAAMC,QAAQ,GAAGD,MAAM,CAACE,KAAP,CAAa,UAAAhG,CAAC;AAAA,aAAIiG,qBAAYC,QAAZ,CAAqBlG,CAArB,CAAJ;AAAA,KAAd,CAAjB;AAEA,WACE,CAAC+F,QAAD,IACA,IAAII,KAAJ,2BAA6BL,MAA7B,sCAA+DG,qBAAYG,IAAZ,CAAiB,GAAjB,CAA/D,OAFF;AAID,GAPc,CAzCE;AAiDjB9H,EAAAA,SAAS,EAAE4G,sBAAUM;AAjDJ,C;;gBADR5J,M,kBAqDW;AACpBkG,EAAAA,gBAAgB,EAAE,IADE;AAEpB5C,EAAAA,OAAO,EAAE,mBAAM,CAAE,CAFG;AAGpBtB,EAAAA,MAAM,EAAE,kBAAM,CAAE,CAHI;AAIpBjC,EAAAA,WAAW,EAAEP,kBAJO;AAKpBgJ,EAAAA,SAAS,EAAE,qBAAM,CAAE;AALC,C;;AA0fxB,IAAMiC,MAAM,GAAG;AACb7B,EAAAA,MAAM,EAAE;AACN8B,IAAAA,eAAe,EAAE;AADX,GADK;AAIb1B,EAAAA,WAAW,EAAE;AACX2B,IAAAA,UAAU,EAAE,oBADD;AAGX,eAAW;AACTC,MAAAA,WAAW,EAAE,OADJ;AAET/C,MAAAA,KAAK,EAAE,MAFE;AAGTgD,MAAAA,cAAc,EAAE,UAHP;AAITC,MAAAA,KAAK,EAAEA,gBAAMtJ,IAAN,EAJE;AAKTkJ,MAAAA,eAAe,EAAEI,gBAAMC,UAAN;AALR,KAHA;AAUX,oCAAgC;AAC9BC,MAAAA,SAAS,EAAE,mBADmB,CAE9B;AACA;AACA;AACA;;AAL8B,KAVrB;AAiBX,gBAAY;AACVC,MAAAA,OAAO,EAAE,UADC;AAEVC,MAAAA,SAAS,EAAE;AAFD,KAjBD;AAqBX,wCAAoC;AAClCC,MAAAA,MAAM,EAAE;AAD0B;AArBzB,GAJA;AA6BbtC,EAAAA,YAAY,EAAE;AACZuC,IAAAA,SAAS,EAAE;AADC;AA7BD,CAAf;;eAkCe,wBAAWX,MAAX,EAAmBzK,MAAnB,C","sourcesContent":["import { Editor as SlateEditor, findNode } from 'slate-react';\nimport SlateTypes from 'slate-prop-types';\n\nimport isEqual from 'lodash/isEqual';\nimport * as serialization from './serialization';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Value, Block } from 'slate';\nimport { buildPlugins, ALL_PLUGINS, DEFAULT_PLUGINS } from './plugins';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\n\nexport { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };\n\nconst log = debug('editable-html:editor');\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur'\n};\n\nconst createToolbarOpts = toolbarOpts => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts\n };\n};\n\nexport class Editor extends React.Component {\n static propTypes = {\n autoFocus: PropTypes.bool,\n editorRef: PropTypes.func.isRequired,\n onRef: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n focus: PropTypes.func.isRequired,\n value: SlateTypes.value.isRequired,\n imageSupport: PropTypes.object,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classes: PropTypes.object.isRequired,\n highlightShape: PropTypes.bool,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n nonEmpty: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidthToolbar: PropTypes.bool,\n pluginProps: PropTypes.any,\n placeholder: PropTypes.string,\n responseAreaProps: PropTypes.shape({\n type: PropTypes.oneOf([\n 'explicit-constructed-response',\n 'inline-dropdown',\n 'drag-in-the-blank'\n ]),\n options: PropTypes.object,\n respAreaToolbar: PropTypes.func,\n onHandleAreaChange: PropTypes.func\n }),\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n showDone: PropTypes.bool,\n doneOn: PropTypes.string\n }),\n activePlugins: PropTypes.arrayOf(values => {\n const allValid = values.every(v => ALL_PLUGINS.includes(v));\n\n return (\n !allValid &&\n new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`)\n );\n }),\n className: PropTypes.string\n };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n toolbarOpts: defaultToolbarOpts,\n onKeyDown: () => {}\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts)\n };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.plugins = buildPlugins(props.activePlugins, {\n math: {\n onClick: this.onMathClick,\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n image: {\n onDelete:\n this.props.imageSupport &&\n this.props.imageSupport.delete &&\n ((src, done) => {\n this.props.imageSupport.delete(src, e => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n this.props.imageSupport &&\n (getHandler => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(() => this.state.value);\n this.props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = this.props;\n\n log('[onDone]');\n this.setState({ toolbarInFocus: false, focusedNode: null });\n this.editor.blur();\n\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n });\n } else {\n this.onEditingDone();\n }\n }\n },\n table: {\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n responseArea: {\n type: props.responseAreaProps && props.responseAreaProps.type,\n options: props.responseAreaProps && props.responseAreaProps.options,\n respAreaToolbar: props.responseAreaProps && props.responseAreaProps.respAreaToolbar,\n onHandleAreaChange: props.responseAreaProps && props.responseAreaProps.onHandleAreaChange,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange\n }\n });\n }\n\n componentDidMount() {\n // onRef is needed to get the ref of the component because we export it using withStyles\n this.props.onRef(this);\n\n window.addEventListener('resize', this.onResize);\n\n if (this.editor && this.props.autoFocus) {\n Promise.resolve().then(() => {\n if (this.editor) {\n const editorDOM = document.querySelector(\n `[data-key=\"${this.editor.value.document.key}\"]`\n );\n\n this.editor.focus();\n\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n });\n }\n }\n\n componentWillReceiveProps(nextProps) {\n const { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts\n });\n }\n }\n\n componentDidUpdate() {\n // The cursor is on a zero width element and when that is placed near void elements, it is not visible\n // so we increase the width to at least 2px in order for the user to see it\n const zeroWidthEls = document.querySelectorAll('[data-slate-zero-width=\"z\"]');\n\n Array.from(zeroWidthEls).forEach(el => {\n el.style.minWidth = '2px';\n el.style.display = 'inline-block';\n });\n }\n\n onPluginBlur = e => {\n log('[onPluginBlur]', e && e.relatedTarget);\n const target = e && e.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n log('[onPluginBlur] node: ', node);\n this.setState({ focusedNode: node }, () => {\n this.resetValue();\n });\n };\n\n onPluginFocus = e => {\n log('[onPluginFocus]', e && e.target);\n const target = e && e.target;\n if (target) {\n const node = findNode(target, this.state.value);\n log('[onPluginFocus] node: ', node);\n\n const stashedValue = this.state.stashedValue || this.state.value;\n this.setState({ focusedNode: node, stashedValue });\n } else {\n this.setState({ focusedNode: null });\n }\n this.stashValue();\n };\n\n onMathClick = node => {\n this.editor.change(c => c.collapseToStartOf(node));\n this.setState({ selectedNode: node });\n };\n\n onEditingDone = () => {\n log('[onEditingDone]');\n this.setState({ stashedValue: null, focusedNode: null });\n log('[onEditingDone] value: ', this.state.value);\n this.props.onChange(this.state.value, true);\n };\n\n /**\n * Remove onResize event listener\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n }\n\n // Allowing time for onChange to take effect if it is called\n handleBlur = resolve => {\n const { nonEmpty } = this.props;\n const {\n toolbarOpts: { doneOn }\n } = this.state;\n\n this.setState({ toolbarInFocus: false, focusedNode: null });\n\n if (this.editor) {\n this.editor.blur();\n }\n\n if (doneOn === 'blur') {\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n resolve();\n });\n } else {\n this.onEditingDone();\n resolve();\n }\n }\n };\n\n onBlur = event => {\n log('[onBlur]');\n const target = event.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n\n log('[onBlur] node: ', node);\n\n return new Promise(resolve => {\n this.setState({ focusedNode: node }, this.handleBlur.bind(this, resolve));\n this.props.onBlur(event);\n });\n };\n\n handleDomBlur = e => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n setTimeout(() => {\n if (!this.wrapperRef) {\n return;\n }\n\n const editorElement =\n !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef ||\n document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent =\n this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);\n\n if (!isInCurrentComponent) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n this.onBlur(e);\n }\n }, 50);\n };\n\n /*\n * Needs to be wrapped otherwise it causes issues because of race conditions\n * Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097\n * Using timeout I wasn't able to test this\n *\n * Note: The use of promises has been causing issues with MathQuill\n * */\n onFocus = () =>\n new Promise(resolve => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n log('[onFocus]', document.activeElement);\n\n /**\n * This is a temporary hack - @see changeData below for some more information.\n */\n if (this.__TEMPORARY_CHANGE_DATA) {\n const { key, data } = this.__TEMPORARY_CHANGE_DATA;\n const domEl = document.querySelector(`[data-key=\"${key}\"]`);\n\n if (domEl) {\n let change = this.state.value.change().setNodeByKey(key, { data });\n\n this.setState({ value: change.value }, () => {\n this.__TEMPORARY_CHANGE_DATA = null;\n });\n }\n }\n\n /**\n * This is needed just in case the browser decides to make the editor\n * lose focus without triggering the onBlur event (can happen in a few cases).\n * This will also trigger onBlur if the user clicks outside of the page when the editor\n * is focused.\n */\n if (editorDOM === document.activeElement) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n editorDOM.addEventListener('blur', this.handleDomBlur);\n }\n\n this.stashValue();\n this.props.onFocus();\n\n resolve();\n });\n\n stashValue = () => {\n log('[stashValue]');\n if (!this.state.stashedValue) {\n this.setState({ stashedValue: this.state.value });\n }\n };\n\n /**\n * Reset the value if the user didn't click done.\n */\n resetValue = force => {\n const { value, focusedNode } = this.state;\n\n const stopReset = this.plugins.reduce((s, p) => {\n return s || (p.stopReset && p.stopReset(this.state.value));\n }, false);\n\n log('[resetValue]', value.isFocused, focusedNode, 'stopReset: ', stopReset);\n if ((this.state.stashedValue && !value.isFocused && !focusedNode && !stopReset) || force) {\n log('[resetValue] resetting...');\n log('stashed', this.state.stashedValue.document.toObject());\n log('current', this.state.value.document.toObject());\n\n const newValue = Value.fromJSON(this.state.stashedValue.toJSON());\n\n log('newValue: ', newValue.document);\n return new Promise(resolve => {\n setTimeout(() => {\n this.setState({ value: newValue, stashedValue: null }, () => {\n log('value now: ', this.state.value.document.toJSON());\n resolve();\n });\n }, 50);\n });\n } else {\n return Promise.resolve({});\n }\n };\n\n onChange = (change, done) => {\n log('[onChange]');\n this.setState({ value: change.value }, () => {\n log('[onChange], call done()');\n\n if (done) {\n done();\n }\n });\n };\n\n UNSAFE_componentWillReceiveProps(props) {\n if (!props.value.document.equals(this.props.value.document)) {\n this.setState({\n focus: false,\n value: props.value\n });\n }\n }\n\n valueToSize = v => {\n if (!v) {\n return;\n }\n\n if (typeof v === 'string') {\n if (v.endsWith('%')) {\n return undefined;\n } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw')) {\n return v;\n } else {\n const value = parseInt(v, 10);\n return isNaN(value) ? value : `${value}px`;\n }\n }\n if (typeof v === 'number') {\n return `${v}px`;\n }\n\n return;\n };\n\n buildSizeStyle() {\n const { width, minHeight, height, maxHeight } = this.props;\n\n return {\n width: this.valueToSize(width),\n height: this.valueToSize(height),\n minHeight: this.valueToSize(minHeight),\n maxHeight: this.valueToSize(maxHeight)\n };\n }\n\n validateNode = node => {\n if (node.object !== 'block') return;\n\n const last = node.nodes.last();\n if (!last) return;\n\n if (last.type !== 'image') return;\n\n log('[validateNode] last is image..');\n\n const parent = last.getParent(last.key);\n const p = Block.getParent(last.key);\n log('[validateNode] parent:', parent, p);\n\n return undefined;\n };\n\n changeData = (key, data) => {\n log('[changeData]. .. ', key, data);\n\n /**\n * HACK ALERT: We should be calling setState here and storing the change data:\n *\n * <code>this.setState({changeData: { key, data}})</code>\n * However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no\n * more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these\n * brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle\n * on this hack rather than spend more time on this.\n */\n\n // Uncomment this line to see the bug described above.\n // this.setState({changeData: {key, data}})\n\n this.__TEMPORARY_CHANGE_DATA = { key, data };\n };\n\n focus = (pos, node) => {\n const position = pos || 'end';\n\n this.props.focus(position, node);\n };\n\n render() {\n const {\n disabled,\n spellCheck,\n highlightShape,\n classes,\n className,\n placeholder,\n pluginProps,\n onKeyDown\n } = this.props;\n\n const { value, focusedNode, toolbarOpts } = this.state;\n\n log('[render] value: ', value);\n const sizeStyle = this.buildSizeStyle();\n const names = classNames(\n {\n [classes.withBg]: highlightShape,\n [classes.toolbarOnTop]: toolbarOpts.alwaysVisible && toolbarOpts.position === 'top'\n },\n className\n );\n\n return (\n <div\n ref={ref => (this.wrapperRef = ref)}\n style={{ width: sizeStyle.width }}\n className={names}\n >\n <SlateEditor\n plugins={this.plugins}\n innerRef={r => {\n if (r) {\n this.slateEditor = r;\n }\n }}\n ref={r => (this.editor = r && this.props.editorRef(r))}\n toolbarRef={r => {\n if (r) {\n this.toolbarRef = r;\n }\n }}\n value={value}\n focus={this.focus}\n onKeyDown={onKeyDown}\n onChange={this.onChange}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onEditingDone={this.onEditingDone}\n focusedNode={focusedNode}\n normalize={this.normalize}\n readOnly={disabled}\n spellCheck={spellCheck}\n className={classes.slateEditor}\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight\n }}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n placeholder={placeholder}\n onDataChange={this.changeData}\n />\n </div>\n );\n }\n}\n\n// TODO color - hardcoded gray background and keypad colors will need to change too\nconst styles = {\n withBg: {\n backgroundColor: 'rgba(0,0,0,0.06)'\n },\n slateEditor: {\n fontFamily: 'Roboto, sans-serif',\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background()\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5'\n // TODO perhaps secondary color for background, for now disable\n // '&:nth-child(2n)': {\n // backgroundColor: '#f6f8fa'\n // }\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center'\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5'\n }\n },\n toolbarOnTop: {\n marginTop: '45px'\n }\n};\n\nexport default withStyles(styles)(Editor);\n"],"file":"editor.js"}
1
+ {"version":3,"sources":["../src/editor.jsx"],"names":["log","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","createToolbarOpts","toolbarOpts","Editor","props","e","relatedTarget","target","node","state","value","setState","focusedNode","resetValue","stashedValue","stashValue","editor","change","c","collapseToStartOf","selectedNode","onChange","resolve","nonEmpty","toolbarInFocus","blur","startText","text","length","then","onEditingDone","event","Promise","handleBlur","bind","onBlur","editorDOM","document","querySelector","key","setTimeout","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","onFocus","force","stopReset","plugins","reduce","s","p","isFocused","toObject","newValue","Value","fromJSON","toJSON","done","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","type","parent","getParent","Block","pos","focus","normalizedResponseAreaProps","responseAreaProps","onResize","activePlugins","math","onClick","onMathClick","onPluginFocus","onPluginBlur","image","onDelete","imageSupport","src","insertImageRequested","getHandler","handler","add","toolbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","table","responseArea","media","createChange","onRef","window","autoFocus","nextProps","newToolbarOpts","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","display","equals","width","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","placeholder","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","normalize","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","oneOfType","string","number","any","shape","oneOf","arrayOf","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop"],"mappings":"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","sourcesContent":["import { Editor as SlateEditor, findNode } from 'slate-react';\nimport SlateTypes from 'slate-prop-types';\n\nimport isEqual from 'lodash/isEqual';\nimport * as serialization from './serialization';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Value, Block } from 'slate';\nimport { buildPlugins, ALL_PLUGINS, DEFAULT_PLUGINS } from './plugins';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\n\nexport { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };\n\nconst log = debug('editable-html:editor');\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur'\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {}\n};\n\nconst createToolbarOpts = toolbarOpts => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts\n };\n};\n\nexport class Editor extends React.Component {\n static propTypes = {\n autoFocus: PropTypes.bool,\n editorRef: PropTypes.func.isRequired,\n onRef: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n focus: PropTypes.func.isRequired,\n value: SlateTypes.value.isRequired,\n imageSupport: PropTypes.object,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classes: PropTypes.object.isRequired,\n highlightShape: PropTypes.bool,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n nonEmpty: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidthToolbar: PropTypes.bool,\n pluginProps: PropTypes.any,\n placeholder: PropTypes.string,\n responseAreaProps: PropTypes.shape({\n type: PropTypes.oneOf([\n 'explicit-constructed-response',\n 'inline-dropdown',\n 'drag-in-the-blank'\n ]),\n options: PropTypes.object,\n respAreaToolbar: PropTypes.func,\n onHandleAreaChange: PropTypes.func\n }),\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n showDone: PropTypes.bool,\n doneOn: PropTypes.string\n }),\n activePlugins: PropTypes.arrayOf(values => {\n const allValid = values.every(v => ALL_PLUGINS.includes(v));\n\n return (\n !allValid &&\n new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`)\n );\n }),\n className: PropTypes.string\n };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n onKeyDown: () => {},\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts)\n };\n\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps\n };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.plugins = buildPlugins(props.activePlugins, {\n math: {\n onClick: this.onMathClick,\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n image: {\n onDelete:\n this.props.imageSupport &&\n this.props.imageSupport.delete &&\n ((src, done) => {\n this.props.imageSupport.delete(src, e => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n this.props.imageSupport &&\n (getHandler => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(() => this.state.value);\n this.props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = this.props;\n\n log('[onDone]');\n this.setState({ toolbarInFocus: false, focusedNode: null });\n this.editor.blur();\n\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n });\n } else {\n this.onEditingDone();\n }\n }\n },\n table: {\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n responseArea: {\n type: normalizedResponseAreaProps.type,\n options: normalizedResponseAreaProps.options,\n respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,\n onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange\n }\n });\n }\n\n componentDidMount() {\n // onRef is needed to get the ref of the component because we export it using withStyles\n this.props.onRef(this);\n\n window.addEventListener('resize', this.onResize);\n\n if (this.editor && this.props.autoFocus) {\n Promise.resolve().then(() => {\n if (this.editor) {\n const editorDOM = document.querySelector(\n `[data-key=\"${this.editor.value.document.key}\"]`\n );\n\n this.editor.focus();\n\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n });\n }\n }\n\n componentWillReceiveProps(nextProps) {\n const { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts\n });\n }\n }\n\n componentDidUpdate() {\n // The cursor is on a zero width element and when that is placed near void elements, it is not visible\n // so we increase the width to at least 2px in order for the user to see it\n const zeroWidthEls = document.querySelectorAll('[data-slate-zero-width=\"z\"]');\n\n Array.from(zeroWidthEls).forEach(el => {\n el.style.minWidth = '2px';\n el.style.display = 'inline-block';\n });\n }\n\n onPluginBlur = e => {\n log('[onPluginBlur]', e && e.relatedTarget);\n const target = e && e.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n log('[onPluginBlur] node: ', node);\n this.setState({ focusedNode: node }, () => {\n this.resetValue();\n });\n };\n\n onPluginFocus = e => {\n log('[onPluginFocus]', e && e.target);\n const target = e && e.target;\n if (target) {\n const node = findNode(target, this.state.value);\n log('[onPluginFocus] node: ', node);\n\n const stashedValue = this.state.stashedValue || this.state.value;\n this.setState({ focusedNode: node, stashedValue });\n } else {\n this.setState({ focusedNode: null });\n }\n this.stashValue();\n };\n\n onMathClick = node => {\n this.editor.change(c => c.collapseToStartOf(node));\n this.setState({ selectedNode: node });\n };\n\n onEditingDone = () => {\n log('[onEditingDone]');\n this.setState({ stashedValue: null, focusedNode: null });\n log('[onEditingDone] value: ', this.state.value);\n this.props.onChange(this.state.value, true);\n };\n\n /**\n * Remove onResize event listener\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n }\n\n // Allowing time for onChange to take effect if it is called\n handleBlur = resolve => {\n const { nonEmpty } = this.props;\n const {\n toolbarOpts: { doneOn }\n } = this.state;\n\n this.setState({ toolbarInFocus: false, focusedNode: null });\n\n if (this.editor) {\n this.editor.blur();\n }\n\n if (doneOn === 'blur') {\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n resolve();\n });\n } else {\n this.onEditingDone();\n resolve();\n }\n }\n };\n\n onBlur = event => {\n log('[onBlur]');\n const target = event.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n\n log('[onBlur] node: ', node);\n\n return new Promise(resolve => {\n this.setState({ focusedNode: node }, this.handleBlur.bind(this, resolve));\n this.props.onBlur(event);\n });\n };\n\n handleDomBlur = e => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n setTimeout(() => {\n if (!this.wrapperRef) {\n return;\n }\n\n const editorElement =\n !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef ||\n document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent =\n this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);\n\n if (!isInCurrentComponent) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n this.onBlur(e);\n }\n }, 50);\n };\n\n /*\n * Needs to be wrapped otherwise it causes issues because of race conditions\n * Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097\n * Using timeout I wasn't able to test this\n *\n * Note: The use of promises has been causing issues with MathQuill\n * */\n onFocus = () =>\n new Promise(resolve => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n log('[onFocus]', document.activeElement);\n\n /**\n * This is a temporary hack - @see changeData below for some more information.\n */\n if (this.__TEMPORARY_CHANGE_DATA) {\n const { key, data } = this.__TEMPORARY_CHANGE_DATA;\n const domEl = document.querySelector(`[data-key=\"${key}\"]`);\n\n if (domEl) {\n let change = this.state.value.change().setNodeByKey(key, { data });\n\n this.setState({ value: change.value }, () => {\n this.__TEMPORARY_CHANGE_DATA = null;\n });\n }\n }\n\n /**\n * This is needed just in case the browser decides to make the editor\n * lose focus without triggering the onBlur event (can happen in a few cases).\n * This will also trigger onBlur if the user clicks outside of the page when the editor\n * is focused.\n */\n if (editorDOM === document.activeElement) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n editorDOM.addEventListener('blur', this.handleDomBlur);\n }\n\n this.stashValue();\n this.props.onFocus();\n\n resolve();\n });\n\n stashValue = () => {\n log('[stashValue]');\n if (!this.state.stashedValue) {\n this.setState({ stashedValue: this.state.value });\n }\n };\n\n /**\n * Reset the value if the user didn't click done.\n */\n resetValue = force => {\n const { value, focusedNode } = this.state;\n\n const stopReset = this.plugins.reduce((s, p) => {\n return s || (p.stopReset && p.stopReset(this.state.value));\n }, false);\n\n log('[resetValue]', value.isFocused, focusedNode, 'stopReset: ', stopReset);\n if ((this.state.stashedValue && !value.isFocused && !focusedNode && !stopReset) || force) {\n log('[resetValue] resetting...');\n log('stashed', this.state.stashedValue.document.toObject());\n log('current', this.state.value.document.toObject());\n\n const newValue = Value.fromJSON(this.state.stashedValue.toJSON());\n\n log('newValue: ', newValue.document);\n return new Promise(resolve => {\n setTimeout(() => {\n this.setState({ value: newValue, stashedValue: null }, () => {\n log('value now: ', this.state.value.document.toJSON());\n resolve();\n });\n }, 50);\n });\n } else {\n return Promise.resolve({});\n }\n };\n\n onChange = (change, done) => {\n log('[onChange]');\n this.setState({ value: change.value }, () => {\n log('[onChange], call done()');\n\n if (done) {\n done();\n }\n });\n };\n\n UNSAFE_componentWillReceiveProps(props) {\n if (!props.value.document.equals(this.props.value.document)) {\n this.setState({\n focus: false,\n value: props.value\n });\n }\n }\n\n valueToSize = v => {\n if (!v) {\n return;\n }\n\n if (typeof v === 'string') {\n if (v.endsWith('%')) {\n return undefined;\n } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw')) {\n return v;\n } else {\n const value = parseInt(v, 10);\n return isNaN(value) ? value : `${value}px`;\n }\n }\n if (typeof v === 'number') {\n return `${v}px`;\n }\n\n return;\n };\n\n buildSizeStyle() {\n const { width, minHeight, height, maxHeight } = this.props;\n\n return {\n width: this.valueToSize(width),\n height: this.valueToSize(height),\n minHeight: this.valueToSize(minHeight),\n maxHeight: this.valueToSize(maxHeight)\n };\n }\n\n validateNode = node => {\n if (node.object !== 'block') return;\n\n const last = node.nodes.last();\n if (!last) return;\n\n if (last.type !== 'image') return;\n\n log('[validateNode] last is image..');\n\n const parent = last.getParent(last.key);\n const p = Block.getParent(last.key);\n log('[validateNode] parent:', parent, p);\n\n return undefined;\n };\n\n changeData = (key, data) => {\n log('[changeData]. .. ', key, data);\n\n /**\n * HACK ALERT: We should be calling setState here and storing the change data:\n *\n * <code>this.setState({changeData: { key, data}})</code>\n * However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no\n * more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these\n * brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle\n * on this hack rather than spend more time on this.\n */\n\n // Uncomment this line to see the bug described above.\n // this.setState({changeData: {key, data}})\n\n this.__TEMPORARY_CHANGE_DATA = { key, data };\n };\n\n focus = (pos, node) => {\n const position = pos || 'end';\n\n this.props.focus(position, node);\n };\n\n render() {\n const {\n disabled,\n spellCheck,\n highlightShape,\n classes,\n className,\n placeholder,\n pluginProps,\n onKeyDown\n } = this.props;\n\n const { value, focusedNode, toolbarOpts } = this.state;\n\n log('[render] value: ', value);\n const sizeStyle = this.buildSizeStyle();\n const names = classNames(\n {\n [classes.withBg]: highlightShape,\n [classes.toolbarOnTop]: toolbarOpts.alwaysVisible && toolbarOpts.position === 'top'\n },\n className\n );\n\n return (\n <div\n ref={ref => (this.wrapperRef = ref)}\n style={{ width: sizeStyle.width }}\n className={names}\n >\n <SlateEditor\n plugins={this.plugins}\n innerRef={r => {\n if (r) {\n this.slateEditor = r;\n }\n }}\n ref={r => (this.editor = r && this.props.editorRef(r))}\n toolbarRef={r => {\n if (r) {\n this.toolbarRef = r;\n }\n }}\n value={value}\n focus={this.focus}\n onKeyDown={onKeyDown}\n onChange={this.onChange}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onEditingDone={this.onEditingDone}\n focusedNode={focusedNode}\n normalize={this.normalize}\n readOnly={disabled}\n spellCheck={spellCheck}\n className={classes.slateEditor}\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight\n }}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n placeholder={placeholder}\n onDataChange={this.changeData}\n />\n </div>\n );\n }\n}\n\n// TODO color - hardcoded gray background and keypad colors will need to change too\nconst styles = {\n withBg: {\n backgroundColor: 'rgba(0,0,0,0.06)'\n },\n slateEditor: {\n fontFamily: 'Roboto, sans-serif',\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background()\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5'\n // TODO perhaps secondary color for background, for now disable\n // '&:nth-child(2n)': {\n // backgroundColor: '#f6f8fa'\n // }\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center'\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5'\n }\n },\n toolbarOnTop: {\n marginTop: '45px'\n }\n};\n\nexport default withStyles(styles)(Editor);\n"],"file":"editor.js"}
package/lib/index.js CHANGED
@@ -179,6 +179,13 @@ var EditableHtml = /*#__PURE__*/function (_React$Component) {
179
179
  var _this2 = this;
180
180
 
181
181
  var value = this.state.value;
182
+ var _this$props = this.props,
183
+ toolbarOpts = _this$props.toolbarOpts,
184
+ error = _this$props.error;
185
+
186
+ if (toolbarOpts) {
187
+ toolbarOpts.error = error;
188
+ }
182
189
 
183
190
  var props = _objectSpread(_objectSpread({}, this.props), {}, {
184
191
  markup: null,
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.jsx"],"names":["log","EditableHtml","props","value","done","html","htmlParsed","markup","onChange","onDone","position","node","editorRef","change","c","lastText","document","getNextText","key","getLastText","editorDOM","querySelector","activeElement","blur","focus","moveFocusTo","text","length","moveAnchorTo","onEditingDone","v","state","allowValidation","current","equals","setState","ref","rootRef","React","Component","PropTypes","func","isRequired","string","bool"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Editor, { DEFAULT_PLUGINS, ALL_PLUGINS } from './editor';\nimport { htmlToValue, valueToHtml } from './serialization';\nimport { parseDegrees } from './parse-html';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html');\n/**\n * Export lower level Editor and serialization functions.\n */\nexport { htmlToValue, valueToHtml, Editor, DEFAULT_PLUGINS, ALL_PLUGINS };\n\n/**\n * Wrapper around the editor that exposes a `markup` and `onChange(markup:string)` api.\n * Because of the mismatch between the markup and the `Value` we need to convert the incoming markup to a value and\n * compare it. TODO: This is an interim fix, we'll need to strip back `Editor` and look how best to maintain the\n * `markup` api whilst avoiding the serialization mismatch. We should be making better use of schemas w/ normalize.\n */\nexport default class EditableHtml extends React.Component {\n static propTypes = {\n onChange: PropTypes.func.isRequired,\n onDone: PropTypes.func,\n markup: PropTypes.string.isRequired,\n allowValidation: PropTypes.bool\n };\n\n static defaultProps = {\n onDone: () => {},\n allowValidation: false\n };\n\n constructor(props) {\n super(props);\n const v = htmlToValue(props.markup);\n this.state = {\n value: v\n };\n }\n\n // eslint-disable-next-line react/no-deprecated\n componentWillReceiveProps(props) {\n if (!props.allowValidation && props.markup === this.props.markup) {\n return;\n }\n\n const v = htmlToValue(props.markup);\n const current = htmlToValue(this.props.markup);\n\n if (!v.equals(current)) {\n this.setState({ value: v });\n }\n }\n\n onChange = (value, done) => {\n const html = valueToHtml(value);\n const htmlParsed = parseDegrees(html);\n\n log('value as html: ', html);\n\n if (html !== this.props.markup) {\n this.props.onChange(htmlParsed);\n }\n\n if (done) {\n this.props.onDone(htmlParsed);\n }\n };\n\n focus = (position, node) => {\n if (this.editorRef) {\n this.editorRef.change(c => {\n const lastText = node\n ? c.value.document.getNextText(node.key)\n : c.value.document.getLastText();\n const editorDOM = document.querySelector(\n `[data-key=\"${this.editorRef.value.document.key}\"]`\n );\n\n if (editorDOM !== document.activeElement) {\n document.activeElement.blur();\n }\n\n c.focus();\n\n if (position === 'end' && lastText) {\n c.moveFocusTo(lastText.key, lastText.text.length).moveAnchorTo(\n lastText.key,\n lastText.text.length\n );\n }\n\n if (position === 'beginning' && lastText) {\n c.moveFocusTo(lastText.key, 0).moveAnchorTo(lastText.key, 0);\n }\n });\n }\n };\n\n finishEditing = () => {\n if (this.editorRef) {\n this.editorRef.props.onEditingDone();\n }\n };\n\n render() {\n const { value } = this.state;\n const props = {\n ...this.props,\n markup: null,\n value,\n onChange: this.onChange,\n focus: this.focus\n };\n\n return (\n <Editor\n onRef={ref => {\n if (ref) {\n this.rootRef = ref;\n }\n }}\n editorRef={ref => ref && (this.editorRef = ref)}\n {...props}\n />\n );\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.jsx"],"names":["log","EditableHtml","props","value","done","html","htmlParsed","markup","onChange","onDone","position","node","editorRef","change","c","lastText","document","getNextText","key","getLastText","editorDOM","querySelector","activeElement","blur","focus","moveFocusTo","text","length","moveAnchorTo","onEditingDone","v","state","allowValidation","current","equals","setState","toolbarOpts","error","ref","rootRef","React","Component","PropTypes","func","isRequired","string","bool"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Editor, { DEFAULT_PLUGINS, ALL_PLUGINS } from './editor';\nimport { htmlToValue, valueToHtml } from './serialization';\nimport { parseDegrees } from './parse-html';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html');\n/**\n * Export lower level Editor and serialization functions.\n */\nexport { htmlToValue, valueToHtml, Editor, DEFAULT_PLUGINS, ALL_PLUGINS };\n\n/**\n * Wrapper around the editor that exposes a `markup` and `onChange(markup:string)` api.\n * Because of the mismatch between the markup and the `Value` we need to convert the incoming markup to a value and\n * compare it. TODO: This is an interim fix, we'll need to strip back `Editor` and look how best to maintain the\n * `markup` api whilst avoiding the serialization mismatch. We should be making better use of schemas w/ normalize.\n */\nexport default class EditableHtml extends React.Component {\n static propTypes = {\n onChange: PropTypes.func.isRequired,\n onDone: PropTypes.func,\n markup: PropTypes.string.isRequired,\n allowValidation: PropTypes.bool\n };\n\n static defaultProps = {\n onDone: () => {},\n allowValidation: false\n };\n\n constructor(props) {\n super(props);\n const v = htmlToValue(props.markup);\n this.state = {\n value: v\n };\n }\n\n // eslint-disable-next-line react/no-deprecated\n componentWillReceiveProps(props) {\n if (!props.allowValidation && props.markup === this.props.markup) {\n return;\n }\n\n const v = htmlToValue(props.markup);\n const current = htmlToValue(this.props.markup);\n\n if (!v.equals(current)) {\n this.setState({ value: v });\n }\n }\n\n onChange = (value, done) => {\n const html = valueToHtml(value);\n const htmlParsed = parseDegrees(html);\n\n log('value as html: ', html);\n\n if (html !== this.props.markup) {\n this.props.onChange(htmlParsed);\n }\n\n if (done) {\n this.props.onDone(htmlParsed);\n }\n };\n\n focus = (position, node) => {\n if (this.editorRef) {\n this.editorRef.change(c => {\n const lastText = node\n ? c.value.document.getNextText(node.key)\n : c.value.document.getLastText();\n const editorDOM = document.querySelector(\n `[data-key=\"${this.editorRef.value.document.key}\"]`\n );\n\n if (editorDOM !== document.activeElement) {\n document.activeElement.blur();\n }\n\n c.focus();\n\n if (position === 'end' && lastText) {\n c.moveFocusTo(lastText.key, lastText.text.length).moveAnchorTo(\n lastText.key,\n lastText.text.length\n );\n }\n\n if (position === 'beginning' && lastText) {\n c.moveFocusTo(lastText.key, 0).moveAnchorTo(lastText.key, 0);\n }\n });\n }\n };\n\n finishEditing = () => {\n if (this.editorRef) {\n this.editorRef.props.onEditingDone();\n }\n };\n\n render() {\n const { value } = this.state;\n const { toolbarOpts, error } = this.props;\n\n if (toolbarOpts) {\n toolbarOpts.error = error;\n }\n\n const props = {\n ...this.props,\n markup: null,\n value,\n onChange: this.onChange,\n focus: this.focus\n };\n\n return (\n <Editor\n onRef={ref => {\n if (ref) {\n this.rootRef = ref;\n }\n }}\n editorRef={ref => ref && (this.editorRef = ref)}\n {...props}\n />\n );\n }\n}\n"],"file":"index.js"}
@@ -126,7 +126,9 @@ var buildPlugins = function buildPlugins(activePlugins, opts) {
126
126
  key: 'n',
127
127
  type: 'ol_list',
128
128
  icon: /*#__PURE__*/_react["default"].createElement(_FormatListNumbered["default"], null)
129
- })), (0, _toolbar["default"])(opts.toolbar), (0, _slateSoftBreak["default"])(), addIf('responseArea', respAreaPlugin)]);
129
+ })), (0, _toolbar["default"])(opts.toolbar), (0, _slateSoftBreak["default"])({
130
+ shift: true
131
+ }), addIf('responseArea', respAreaPlugin)]);
130
132
  };
131
133
 
132
134
  exports.buildPlugins = buildPlugins;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/index.jsx"],"names":["log","MarkHotkey","options","type","key","icon","tag","toolbar","isMark","onToggle","change","toggleMark","renderMark","props","mark","K","children","onKeyDown","event","metaKey","preventDefault","ALL_PLUGINS","DEFAULT_PLUGINS","filter","plug","buildPlugins","activePlugins","opts","addIf","p","includes","imagePlugin","image","onDelete","mathPlugin","math","respAreaPlugin","responseArea","table","media"],"mappings":"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","sourcesContent":["import Bold from '@material-ui/icons/FormatBold';\n// import Code from '@material-ui/icons/Code';\nimport BulletedListIcon from '@material-ui/icons/FormatListBulleted';\nimport NumberedListIcon from '@material-ui/icons/FormatListNumbered';\nimport ImagePlugin from './image';\nimport MediaPlugin from './media';\nimport Italic from '@material-ui/icons/FormatItalic';\nimport MathPlugin from './math';\nimport React from 'react';\nimport Strikethrough from '@material-ui/icons/FormatStrikethrough';\nimport ToolbarPlugin from './toolbar';\nimport Underline from '@material-ui/icons/FormatUnderlined';\nimport compact from 'lodash/compact';\nimport SoftBreakPlugin from 'slate-soft-break';\nimport debug from 'debug';\nimport List from './list';\nimport TablePlugin from './table';\nimport RespAreaPlugin from './respArea';\n\nconst log = debug('@pie-lib:editable-html:plugins');\n\nfunction MarkHotkey(options) {\n const { type, key, icon, tag } = options;\n\n // Return our \"plugin\" object, containing the `onKeyDown` handler.\n return {\n toolbar: {\n isMark: true,\n type,\n icon,\n onToggle: change => {\n log('[onToggleMark] type: ', type);\n return change.toggleMark(type);\n }\n },\n renderMark(props) {\n if (props.mark.type === type) {\n const K = tag || type;\n return <K>{props.children}</K>;\n }\n },\n onKeyDown(event, change) {\n // Check that the key pressed matches our `key` option.\n if (!event.metaKey || event.key != key) return;\n\n // Prevent the default characters from being inserted.\n event.preventDefault();\n\n // Toggle the mark `type`.\n change.toggleMark(type);\n return true;\n }\n };\n}\n\nexport const ALL_PLUGINS = [\n 'bold',\n // 'code',\n 'italic',\n 'underline',\n 'strikethrough',\n 'bulleted-list',\n 'numbered-list',\n 'image',\n 'math',\n 'table',\n 'video',\n 'audio',\n 'responseArea'\n];\n\nexport const DEFAULT_PLUGINS = ALL_PLUGINS.filter(plug => plug !== 'responseArea');\n\nexport const buildPlugins = (activePlugins, opts) => {\n log('[buildPlugins] opts: ', opts);\n\n activePlugins = activePlugins || DEFAULT_PLUGINS;\n\n const addIf = (key, p) => activePlugins.includes(key) && p;\n const imagePlugin = opts.image && opts.image.onDelete && ImagePlugin(opts.image);\n const mathPlugin = MathPlugin(opts.math);\n const respAreaPlugin =\n opts.responseArea &&\n opts.responseArea.type &&\n RespAreaPlugin(opts.responseArea, compact([mathPlugin]));\n\n return compact([\n addIf('table', TablePlugin(opts.table, compact([imagePlugin, mathPlugin, respAreaPlugin]))),\n addIf('bold', MarkHotkey({ key: 'b', type: 'bold', icon: <Bold />, tag: 'strong' })),\n // addIf('code', MarkHotkey({ key: '`', type: 'code', icon: <Code /> })),\n addIf('italic', MarkHotkey({ key: 'i', type: 'italic', icon: <Italic />, tag: 'em' })),\n addIf(\n 'strikethrough',\n MarkHotkey({\n key: '~',\n type: 'strikethrough',\n icon: <Strikethrough />,\n tag: 'del'\n })\n ),\n addIf('underline', MarkHotkey({ key: 'u', type: 'underline', icon: <Underline />, tag: 'u' })),\n addIf('image', imagePlugin),\n addIf('video', MediaPlugin('video', opts.media)),\n addIf('audio', MediaPlugin('audio', opts.media)),\n addIf('math', mathPlugin),\n addIf('bulleted-list', List({ key: 'l', type: 'ul_list', icon: <BulletedListIcon /> })),\n addIf('numbered-list', List({ key: 'n', type: 'ol_list', icon: <NumberedListIcon /> })),\n ToolbarPlugin(opts.toolbar),\n SoftBreakPlugin(),\n addIf('responseArea', respAreaPlugin)\n ]);\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/plugins/index.jsx"],"names":["log","MarkHotkey","options","type","key","icon","tag","toolbar","isMark","onToggle","change","toggleMark","renderMark","props","mark","K","children","onKeyDown","event","metaKey","preventDefault","ALL_PLUGINS","DEFAULT_PLUGINS","filter","plug","buildPlugins","activePlugins","opts","addIf","p","includes","imagePlugin","image","onDelete","mathPlugin","math","respAreaPlugin","responseArea","table","media","shift"],"mappings":"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","sourcesContent":["import Bold from '@material-ui/icons/FormatBold';\n// import Code from '@material-ui/icons/Code';\nimport BulletedListIcon from '@material-ui/icons/FormatListBulleted';\nimport NumberedListIcon from '@material-ui/icons/FormatListNumbered';\nimport ImagePlugin from './image';\nimport MediaPlugin from './media';\nimport Italic from '@material-ui/icons/FormatItalic';\nimport MathPlugin from './math';\nimport React from 'react';\nimport Strikethrough from '@material-ui/icons/FormatStrikethrough';\nimport ToolbarPlugin from './toolbar';\nimport Underline from '@material-ui/icons/FormatUnderlined';\nimport compact from 'lodash/compact';\nimport SoftBreakPlugin from 'slate-soft-break';\nimport debug from 'debug';\nimport List from './list';\nimport TablePlugin from './table';\nimport RespAreaPlugin from './respArea';\n\nconst log = debug('@pie-lib:editable-html:plugins');\n\nfunction MarkHotkey(options) {\n const { type, key, icon, tag } = options;\n\n // Return our \"plugin\" object, containing the `onKeyDown` handler.\n return {\n toolbar: {\n isMark: true,\n type,\n icon,\n onToggle: change => {\n log('[onToggleMark] type: ', type);\n return change.toggleMark(type);\n }\n },\n renderMark(props) {\n if (props.mark.type === type) {\n const K = tag || type;\n return <K>{props.children}</K>;\n }\n },\n onKeyDown(event, change) {\n // Check that the key pressed matches our `key` option.\n if (!event.metaKey || event.key != key) return;\n\n // Prevent the default characters from being inserted.\n event.preventDefault();\n\n // Toggle the mark `type`.\n change.toggleMark(type);\n return true;\n }\n };\n}\n\nexport const ALL_PLUGINS = [\n 'bold',\n // 'code',\n 'italic',\n 'underline',\n 'strikethrough',\n 'bulleted-list',\n 'numbered-list',\n 'image',\n 'math',\n 'table',\n 'video',\n 'audio',\n 'responseArea'\n];\n\nexport const DEFAULT_PLUGINS = ALL_PLUGINS.filter(plug => plug !== 'responseArea');\n\nexport const buildPlugins = (activePlugins, opts) => {\n log('[buildPlugins] opts: ', opts);\n\n activePlugins = activePlugins || DEFAULT_PLUGINS;\n\n const addIf = (key, p) => activePlugins.includes(key) && p;\n const imagePlugin = opts.image && opts.image.onDelete && ImagePlugin(opts.image);\n const mathPlugin = MathPlugin(opts.math);\n const respAreaPlugin =\n opts.responseArea &&\n opts.responseArea.type &&\n RespAreaPlugin(opts.responseArea, compact([mathPlugin]));\n\n return compact([\n addIf('table', TablePlugin(opts.table, compact([imagePlugin, mathPlugin, respAreaPlugin]))),\n addIf('bold', MarkHotkey({ key: 'b', type: 'bold', icon: <Bold />, tag: 'strong' })),\n // addIf('code', MarkHotkey({ key: '`', type: 'code', icon: <Code /> })),\n addIf('italic', MarkHotkey({ key: 'i', type: 'italic', icon: <Italic />, tag: 'em' })),\n addIf(\n 'strikethrough',\n MarkHotkey({\n key: '~',\n type: 'strikethrough',\n icon: <Strikethrough />,\n tag: 'del'\n })\n ),\n addIf('underline', MarkHotkey({ key: 'u', type: 'underline', icon: <Underline />, tag: 'u' })),\n addIf('image', imagePlugin),\n addIf('video', MediaPlugin('video', opts.media)),\n addIf('audio', MediaPlugin('audio', opts.media)),\n addIf('math', mathPlugin),\n addIf('bulleted-list', List({ key: 'l', type: 'ul_list', icon: <BulletedListIcon /> })),\n addIf('numbered-list', List({ key: 'n', type: 'ol_list', icon: <NumberedListIcon /> })),\n ToolbarPlugin(opts.toolbar),\n SoftBreakPlugin({ shift: true }),\n addIf('responseArea', respAreaPlugin)\n ]);\n};\n"],"file":"index.js"}
@@ -7,6 +7,10 @@ exports.serialization = exports["default"] = void 0;
7
7
 
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
 
10
+ var _slate = require("slate");
11
+
12
+ var _immutable = _interopRequireDefault(require("immutable"));
13
+
10
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
15
 
12
16
  var _slateEditList = _interopRequireDefault(require("slate-edit-list"));
@@ -59,9 +63,7 @@ var serialization = {
59
63
  };
60
64
  exports.serialization = serialization;
61
65
 
62
- var _default = function _default(options) {
63
- var type = options.type,
64
- icon = options.icon;
66
+ var createEditList = function createEditList() {
65
67
  var core = (0, _slateEditList["default"])({
66
68
  typeDefault: 'span'
67
69
  }); // fix outdated schema
@@ -78,8 +80,74 @@ var _default = function _default(options) {
78
80
  type: block.nodes[0].types[0]
79
81
  };
80
82
  });
81
- } // eslint-disable-next-line react/display-name
83
+ }
84
+ /**
85
+ * This override of the core.changes.wrapInList is needed because the version
86
+ * of immutable that we have does not support getting the element at a specific
87
+ * index with a square bracket (list[0]). We have to use the list.get function instead
88
+ */
89
+
90
+ /**
91
+ * Returns the highest list of blocks that cover the current selection
92
+ */
93
+
94
+
95
+ var getHighestSelectedBlocks = function getHighestSelectedBlocks(value) {
96
+ var range = value.selection;
97
+ var document = value.document;
98
+ var startBlock = document.getClosestBlock(range.startKey);
99
+ var endBlock = document.getClosestBlock(range.endKey);
100
+
101
+ if (startBlock === endBlock) {
102
+ return _immutable["default"].List([startBlock]);
103
+ }
104
+
105
+ var ancestor = document.getCommonAncestor(startBlock.key, endBlock.key);
106
+ var startPath = ancestor.getPath(startBlock.key);
107
+ var endPath = ancestor.getPath(endBlock.key);
108
+ return ancestor.nodes.slice(startPath.get(0), endPath.get(0) + 1);
109
+ };
110
+ /**
111
+ * Wrap the blocks in the current selection in a new list. Selected
112
+ * lists are merged together.
113
+ */
114
+
115
+
116
+ core.changes.wrapInList = function (change, type, data) {
117
+ var selectedBlocks = getHighestSelectedBlocks(change.value); // Wrap in container
118
+
119
+ change.wrapBlock({
120
+ type: type,
121
+ data: _slate.Data.create(data)
122
+ }, {
123
+ normalize: false
124
+ }); // Wrap in list items
125
+
126
+ selectedBlocks.forEach(function (node) {
127
+ if (core.utils.isList(node)) {
128
+ // Merge its items with the created list
129
+ node.nodes.forEach(function (_ref) {
130
+ var key = _ref.key;
131
+ return change.unwrapNodeByKey(key, {
132
+ normalize: false
133
+ });
134
+ });
135
+ } else if (node.type !== 'list_item') {
136
+ change.wrapBlockByKey(node.key, 'list_item', {
137
+ normalize: false
138
+ });
139
+ }
140
+ });
141
+ return change.normalize();
142
+ };
82
143
 
144
+ return core;
145
+ };
146
+
147
+ var _default = function _default(options) {
148
+ var type = options.type,
149
+ icon = options.icon;
150
+ var core = createEditList(); // eslint-disable-next-line react/display-name
83
151
 
84
152
  core.renderNode = function (props) {
85
153
  var node = props.node,
@@ -108,7 +176,7 @@ var _default = function _default(options) {
108
176
  }
109
177
 
110
178
  var current = core.utils.getCurrentList(value);
111
- return current.type === type;
179
+ return current ? current.type === type : false;
112
180
  },
113
181
  onClick: function onClick(value, onChange) {
114
182
  log('[onClick]', value);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/list/index.jsx"],"names":["log","b","type","next","childNodes","object","nodes","serialization","deserialize","el","name","tagName","toLowerCase","children","length","Array","from","serialize","options","icon","core","typeDefault","schema","blocks","Object","keys","forEach","key","block","parent","types","renderNode","props","node","attributes","toolbar","isMark","isActive","value","utils","isSelectionInList","current","getCurrentList","onClick","onChange","inList","change","call","changes","unwrapList","wrapInList","propTypes","PropTypes","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport EditList from 'slate-edit-list';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:list');\n\nconst b = (type, next, childNodes) => ({\n object: 'block',\n type,\n nodes: next(childNodes)\n});\n\nexport const serialization = {\n deserialize(el, next) {\n const name = el.tagName.toLowerCase();\n\n if (name === 'li') {\n return b('list_item', next, el.childNodes);\n }\n\n if (name === 'ul') {\n return b('ul_list', next, el.children.length ? Array.from(el.children) : el.childNodes);\n }\n\n if (name === 'ol') {\n return b('ol_list', next, el.children.length ? Array.from(el.children) : el.childNodes);\n }\n },\n serialize(object, children) {\n if (object.object !== 'block') return;\n\n if (object.type === 'list_item') {\n return <li>{children}</li>;\n }\n\n if (object.type === 'ul_list') {\n return <ul>{children}</ul>;\n }\n\n if (object.type === 'ol_list') {\n return <ol>{children}</ol>;\n }\n }\n};\n\nexport default options => {\n const { type, icon } = options;\n\n const core = EditList({\n typeDefault: 'span'\n });\n\n // fix outdated schema\n\n if (core.schema && core.schema.blocks) {\n Object.keys(core.schema.blocks).forEach(key => {\n const block = core.schema.blocks[key];\n\n if (block.parent) {\n return;\n }\n\n block.nodes[0] = { type: block.nodes[0].types[0] };\n });\n }\n\n // eslint-disable-next-line react/display-name\n core.renderNode = props => {\n const { node, attributes, children } = props;\n\n switch (node.type) {\n case 'ul_list':\n return <ul {...attributes}>{children}</ul>;\n case 'ol_list':\n return <ol {...attributes}>{children}</ol>;\n case 'list_item':\n return <li {...attributes}>{children}</li>;\n }\n };\n\n core.toolbar = {\n isMark: false,\n type,\n icon,\n isActive: (value, type) => {\n if (!core.utils.isSelectionInList(value)) {\n return false;\n }\n const current = core.utils.getCurrentList(value);\n return current.type === type;\n },\n onClick: (value, onChange) => {\n log('[onClick]', value);\n const inList = core.utils.isSelectionInList(value);\n if (inList) {\n const change = value.change().call(core.changes.unwrapList);\n onChange(change);\n } else {\n const change = value.change().call(core.changes.wrapInList, type);\n onChange(change);\n }\n }\n };\n\n core.renderNode.propTypes = {\n node: PropTypes.object,\n attributes: PropTypes.object,\n children: PropTypes.func\n };\n\n return core;\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/plugins/list/index.jsx"],"names":["log","b","type","next","childNodes","object","nodes","serialization","deserialize","el","name","tagName","toLowerCase","children","length","Array","from","serialize","createEditList","core","typeDefault","schema","blocks","Object","keys","forEach","key","block","parent","types","getHighestSelectedBlocks","value","range","selection","document","startBlock","getClosestBlock","startKey","endBlock","endKey","Immutable","List","ancestor","getCommonAncestor","startPath","getPath","endPath","slice","get","changes","wrapInList","change","data","selectedBlocks","wrapBlock","Data","create","normalize","node","utils","isList","_ref","unwrapNodeByKey","wrapBlockByKey","options","icon","renderNode","props","attributes","toolbar","isMark","isActive","isSelectionInList","current","getCurrentList","onClick","onChange","inList","call","unwrapList","propTypes","PropTypes","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Data } from 'slate';\nimport Immutable from 'immutable';\nimport PropTypes from 'prop-types';\nimport EditList from 'slate-edit-list';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:list');\n\nconst b = (type, next, childNodes) => ({\n object: 'block',\n type,\n nodes: next(childNodes)\n});\n\nexport const serialization = {\n deserialize(el, next) {\n const name = el.tagName.toLowerCase();\n\n if (name === 'li') {\n return b('list_item', next, el.childNodes);\n }\n\n if (name === 'ul') {\n return b('ul_list', next, el.children.length ? Array.from(el.children) : el.childNodes);\n }\n\n if (name === 'ol') {\n return b('ol_list', next, el.children.length ? Array.from(el.children) : el.childNodes);\n }\n },\n serialize(object, children) {\n if (object.object !== 'block') return;\n\n if (object.type === 'list_item') {\n return <li>{children}</li>;\n }\n\n if (object.type === 'ul_list') {\n return <ul>{children}</ul>;\n }\n\n if (object.type === 'ol_list') {\n return <ol>{children}</ol>;\n }\n }\n};\n\nconst createEditList = () => {\n const core = EditList({\n typeDefault: 'span'\n });\n\n // fix outdated schema\n if (core.schema && core.schema.blocks) {\n Object.keys(core.schema.blocks).forEach(key => {\n const block = core.schema.blocks[key];\n\n if (block.parent) {\n return;\n }\n\n block.nodes[0] = { type: block.nodes[0].types[0] };\n });\n }\n\n /**\n * This override of the core.changes.wrapInList is needed because the version\n * of immutable that we have does not support getting the element at a specific\n * index with a square bracket (list[0]). We have to use the list.get function instead\n */\n\n /**\n * Returns the highest list of blocks that cover the current selection\n */\n const getHighestSelectedBlocks = value => {\n const range = value.selection;\n const document = value.document;\n\n const startBlock = document.getClosestBlock(range.startKey);\n const endBlock = document.getClosestBlock(range.endKey);\n\n if (startBlock === endBlock) {\n return Immutable.List([startBlock]);\n }\n\n const ancestor = document.getCommonAncestor(startBlock.key, endBlock.key);\n const startPath = ancestor.getPath(startBlock.key);\n const endPath = ancestor.getPath(endBlock.key);\n\n return ancestor.nodes.slice(startPath.get(0), endPath.get(0) + 1);\n };\n\n /**\n * Wrap the blocks in the current selection in a new list. Selected\n * lists are merged together.\n */\n core.changes.wrapInList = function(change, type, data) {\n const selectedBlocks = getHighestSelectedBlocks(change.value);\n\n // Wrap in container\n change.wrapBlock({ type: type, data: Data.create(data) }, { normalize: false });\n\n // Wrap in list items\n selectedBlocks.forEach(function(node) {\n if (core.utils.isList(node)) {\n // Merge its items with the created list\n node.nodes.forEach(function(_ref) {\n const key = _ref.key;\n return change.unwrapNodeByKey(key, { normalize: false });\n });\n } else if (node.type !== 'list_item') {\n change.wrapBlockByKey(node.key, 'list_item', {\n normalize: false\n });\n }\n });\n\n return change.normalize();\n };\n\n return core;\n};\n\nexport default options => {\n const { type, icon } = options;\n\n const core = createEditList();\n\n // eslint-disable-next-line react/display-name\n core.renderNode = props => {\n const { node, attributes, children } = props;\n\n switch (node.type) {\n case 'ul_list':\n return <ul {...attributes}>{children}</ul>;\n case 'ol_list':\n return <ol {...attributes}>{children}</ol>;\n case 'list_item':\n return <li {...attributes}>{children}</li>;\n }\n };\n\n core.toolbar = {\n isMark: false,\n type,\n icon,\n isActive: (value, type) => {\n if (!core.utils.isSelectionInList(value)) {\n return false;\n }\n const current = core.utils.getCurrentList(value);\n return current ? current.type === type : false;\n },\n onClick: (value, onChange) => {\n log('[onClick]', value);\n const inList = core.utils.isSelectionInList(value);\n if (inList) {\n const change = value.change().call(core.changes.unwrapList);\n onChange(change);\n } else {\n const change = value.change().call(core.changes.wrapInList, type);\n onChange(change);\n }\n }\n };\n\n core.renderNode.propTypes = {\n node: PropTypes.object,\n attributes: PropTypes.object,\n children: PropTypes.func\n };\n\n return core;\n};\n"],"file":"index.js"}
@@ -57,12 +57,15 @@ var insertDialog = function insertDialog(props) {
57
57
  callback = props.callback,
58
58
  rest = _objectWithoutProperties(props, _excluded);
59
59
 
60
+ var initialBodyOverflow = document.body.style.overflow;
60
61
  removeDialogs();
61
62
  newEl.className = 'insert-media-dialog';
63
+ document.body.style.overflow = 'hidden';
62
64
 
63
65
  var handleClose = function handleClose(val, data) {
64
66
  callback(val, data);
65
67
  newEl.remove();
68
+ document.body.style.overflow = initialBodyOverflow;
66
69
  };
67
70
 
68
71
  var el = /*#__PURE__*/_react["default"].createElement(_mediaDialog["default"], _extends({}, rest, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/media/index.jsx"],"names":["log","removeDialogs","prevDialogs","document","querySelectorAll","forEach","s","remove","insertDialog","props","newEl","createElement","type","callback","rest","className","handleClose","val","data","el","ReactDOM","render","body","appendChild","types","MediaPlugin","opts","toolbar","icon","onClick","value","onChange","inline","Inline","create","isVoid","editing","ends","undefined","height","title","starts","src","url","width","change","insertInline","nodeIsThere","findDescendant","d","key","c","removeNodeByKey","focus","setNodeByKey","supports","node","object","name","deleteNode","e","preventDefault","renderNode","jsonData","toJSON","handleEdit","createChange","edit","get","handleDelete","style","normalizeNode","textNodeMap","updateNodesArray","index","isMedia","indexOf","text","push","length","withoutNormalization","n","insertTextByKey","serialization","deserialize","dataset","typeIndex","parseInt","getAttribute","out","serialize","divProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Inline } from 'slate';\nimport TheatersIcon from '@material-ui/icons/Theaters';\nimport VolumeUpIcon from '@material-ui/icons/VolumeUp';\nimport debug from 'debug';\n\nimport MediaDialog from './media-dialog';\nimport MediaToolbar from './media-toolbar';\nimport MediaWrapper from './media-wrapper';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nconst removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-media-dialog');\n\n prevDialogs.forEach(s => s.remove());\n};\n\nexport const insertDialog = props => {\n const newEl = document.createElement('div');\n const { type, callback, ...rest } = props;\n\n removeDialogs();\n\n newEl.className = 'insert-media-dialog';\n\n const handleClose = (val, data) => {\n callback(val, data);\n newEl.remove();\n };\n\n const el = (\n <MediaDialog {...rest} type={type} disablePortal={true} open={true} handleClose={handleClose} />\n );\n\n ReactDOM.render(el, newEl);\n\n document.body.appendChild(newEl);\n};\n\nconst types = ['audio', 'video'];\n\nexport default function MediaPlugin(type, opts) {\n const toolbar = {\n icon: type === 'audio' ? <VolumeUpIcon /> : <TheatersIcon />,\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: type,\n isVoid: true,\n data: {\n editing: false,\n ends: undefined,\n height: undefined,\n title: undefined,\n starts: undefined,\n src: undefined,\n url: undefined,\n width: undefined\n }\n });\n\n const change = value.change().insertInline(inline);\n onChange(change);\n insertDialog({\n type,\n callback: (val, data) => {\n const nodeIsThere = change.value.document.findDescendant(d => d.key === inline.key);\n\n if (nodeIsThere) {\n if (!val) {\n const c = change.removeNodeByKey(inline.key);\n onChange(c, () => opts.focus());\n } else {\n const c = change.setNodeByKey(inline.key, { data });\n onChange(c, () => opts.focus('beginning', nodeIsThere));\n }\n } else {\n opts.focus();\n }\n }\n });\n },\n supports: node => node.object === 'inline' && node.type === type\n };\n\n return {\n name: type,\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n if (props.node.type === type) {\n const { node, key } = props;\n const { data } = node;\n const jsonData = data.toJSON();\n const { src, height, width, editing, ...rest } = jsonData;\n const handleEdit = () => {\n const change = opts.createChange();\n const c = change.setNodeByKey(key, {\n data: {\n ...jsonData,\n editing: true\n }\n });\n\n opts.onChange(c, () => {\n insertDialog({\n ...jsonData,\n edit: true,\n type,\n callback: (val, data) => {\n const { key } = node;\n\n const nodeIsThere = change.value.document.findDescendant(\n d => d.type === type && d.data.get('editing')\n );\n\n if (nodeIsThere && val) {\n const c = change.setNodeByKey(key, { data, editing: false });\n opts.onChange(c, () => opts.focus('beginning', nodeIsThere));\n } else {\n opts.focus();\n }\n }\n });\n });\n };\n const handleDelete = () => {\n const change = opts.createChange();\n const c = change.removeNodeByKey(node.key);\n\n opts.onChange(c);\n };\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <iframe\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n src={src}\n editing={editing ? 1 : 0}\n {...rest}\n {...style}\n />\n <MediaToolbar onEdit={handleEdit} onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n },\n normalizeNode: node => {\n const textNodeMap = {};\n const updateNodesArray = [];\n let index = 0;\n\n if (node.object !== 'document') return;\n\n node.findDescendant(d => {\n if (d.object === 'text') {\n textNodeMap[index] = d;\n }\n\n const isMedia = types.indexOf(d.type) >= 0;\n\n if (isMedia) {\n if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {\n updateNodesArray.push(textNodeMap[index - 1]);\n }\n }\n\n index++;\n });\n\n if (!updateNodesArray.length) return;\n\n return change => {\n change.withoutNormalization(() => {\n updateNodesArray.forEach(n => change.insertTextByKey(n.key, 0, ' '));\n });\n };\n }\n };\n}\n\nexport const serialization = {\n deserialize(el /*, next*/) {\n const type = el.dataset && el.dataset.type;\n const typeIndex = types.indexOf(type);\n\n if (typeIndex < 0) return;\n\n const { ends, starts, title, editing, url } = el.dataset || {};\n\n log('deserialize: ', name);\n const width = parseInt(el.getAttribute('width'), 10) || null;\n const height = parseInt(el.getAttribute('height'), 10) || null;\n\n const out = {\n object: 'inline',\n type: type,\n isVoid: true,\n data: {\n src: el.getAttribute('src'),\n editing,\n ends,\n height,\n starts,\n title,\n width,\n url\n }\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n const typeIndex = types.indexOf(object.type);\n\n if (typeIndex < 0) return;\n\n const type = types[typeIndex];\n\n const { data } = object;\n const editing = data.get('editing');\n const ends = data.get('ends');\n const src = data.get('src');\n const starts = data.get('starts');\n const title = data.get('title');\n const width = data.get('width');\n const height = data.get('height');\n const url = data.get('url');\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n const divProps = {\n 'data-editing': editing,\n 'data-ends': ends,\n 'data-starts': starts,\n 'data-title': title,\n 'data-url': url\n };\n const props = {\n ...style,\n src\n };\n\n return (\n <iframe\n data-type={type}\n src={src}\n {...divProps}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n {...props}\n />\n );\n }\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/plugins/media/index.jsx"],"names":["log","removeDialogs","prevDialogs","document","querySelectorAll","forEach","s","remove","insertDialog","props","newEl","createElement","type","callback","rest","initialBodyOverflow","body","style","overflow","className","handleClose","val","data","el","ReactDOM","render","appendChild","types","MediaPlugin","opts","toolbar","icon","onClick","value","onChange","inline","Inline","create","isVoid","editing","ends","undefined","height","title","starts","src","url","width","change","insertInline","nodeIsThere","findDescendant","d","key","c","removeNodeByKey","focus","setNodeByKey","supports","node","object","name","deleteNode","e","preventDefault","renderNode","jsonData","toJSON","handleEdit","createChange","edit","get","handleDelete","normalizeNode","textNodeMap","updateNodesArray","index","isMedia","indexOf","text","push","length","withoutNormalization","n","insertTextByKey","serialization","deserialize","dataset","typeIndex","parseInt","getAttribute","out","serialize","divProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Inline } from 'slate';\nimport TheatersIcon from '@material-ui/icons/Theaters';\nimport VolumeUpIcon from '@material-ui/icons/VolumeUp';\nimport debug from 'debug';\n\nimport MediaDialog from './media-dialog';\nimport MediaToolbar from './media-toolbar';\nimport MediaWrapper from './media-wrapper';\n\nconst log = debug('@pie-lib:editable-html:plugins:image');\n\nconst removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-media-dialog');\n\n prevDialogs.forEach(s => s.remove());\n};\n\nexport const insertDialog = props => {\n const newEl = document.createElement('div');\n const { type, callback, ...rest } = props;\n const initialBodyOverflow = document.body.style.overflow;\n\n removeDialogs();\n\n newEl.className = 'insert-media-dialog';\n document.body.style.overflow = 'hidden';\n\n const handleClose = (val, data) => {\n callback(val, data);\n newEl.remove();\n document.body.style.overflow = initialBodyOverflow;\n };\n\n const el = (\n <MediaDialog {...rest} type={type} disablePortal={true} open={true} handleClose={handleClose} />\n );\n\n ReactDOM.render(el, newEl);\n\n document.body.appendChild(newEl);\n};\n\nconst types = ['audio', 'video'];\n\nexport default function MediaPlugin(type, opts) {\n const toolbar = {\n icon: type === 'audio' ? <VolumeUpIcon /> : <TheatersIcon />,\n onClick: (value, onChange) => {\n log('[toolbar] onClick');\n const inline = Inline.create({\n type: type,\n isVoid: true,\n data: {\n editing: false,\n ends: undefined,\n height: undefined,\n title: undefined,\n starts: undefined,\n src: undefined,\n url: undefined,\n width: undefined\n }\n });\n\n const change = value.change().insertInline(inline);\n onChange(change);\n insertDialog({\n type,\n callback: (val, data) => {\n const nodeIsThere = change.value.document.findDescendant(d => d.key === inline.key);\n\n if (nodeIsThere) {\n if (!val) {\n const c = change.removeNodeByKey(inline.key);\n onChange(c, () => opts.focus());\n } else {\n const c = change.setNodeByKey(inline.key, { data });\n onChange(c, () => opts.focus('beginning', nodeIsThere));\n }\n } else {\n opts.focus();\n }\n }\n });\n },\n supports: node => node.object === 'inline' && node.type === type\n };\n\n return {\n name: type,\n toolbar,\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n renderNode(props) {\n if (props.node.type === type) {\n const { node, key } = props;\n const { data } = node;\n const jsonData = data.toJSON();\n const { src, height, width, editing, ...rest } = jsonData;\n const handleEdit = () => {\n const change = opts.createChange();\n const c = change.setNodeByKey(key, {\n data: {\n ...jsonData,\n editing: true\n }\n });\n\n opts.onChange(c, () => {\n insertDialog({\n ...jsonData,\n edit: true,\n type,\n callback: (val, data) => {\n const { key } = node;\n\n const nodeIsThere = change.value.document.findDescendant(\n d => d.type === type && d.data.get('editing')\n );\n\n if (nodeIsThere && val) {\n const c = change.setNodeByKey(key, { data, editing: false });\n opts.onChange(c, () => opts.focus('beginning', nodeIsThere));\n } else {\n opts.focus();\n }\n }\n });\n });\n };\n const handleDelete = () => {\n const change = opts.createChange();\n const c = change.removeNodeByKey(node.key);\n\n opts.onChange(c);\n };\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n return (\n <MediaWrapper editor data-type={type} width={style.width} {...rest}>\n <iframe\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n src={src}\n editing={editing ? 1 : 0}\n {...rest}\n {...style}\n />\n <MediaToolbar onEdit={handleEdit} onRemove={handleDelete} />\n </MediaWrapper>\n );\n }\n },\n normalizeNode: node => {\n const textNodeMap = {};\n const updateNodesArray = [];\n let index = 0;\n\n if (node.object !== 'document') return;\n\n node.findDescendant(d => {\n if (d.object === 'text') {\n textNodeMap[index] = d;\n }\n\n const isMedia = types.indexOf(d.type) >= 0;\n\n if (isMedia) {\n if (index > 0 && textNodeMap[index - 1] && textNodeMap[index - 1].text === '') {\n updateNodesArray.push(textNodeMap[index - 1]);\n }\n }\n\n index++;\n });\n\n if (!updateNodesArray.length) return;\n\n return change => {\n change.withoutNormalization(() => {\n updateNodesArray.forEach(n => change.insertTextByKey(n.key, 0, ' '));\n });\n };\n }\n };\n}\n\nexport const serialization = {\n deserialize(el /*, next*/) {\n const type = el.dataset && el.dataset.type;\n const typeIndex = types.indexOf(type);\n\n if (typeIndex < 0) return;\n\n const { ends, starts, title, editing, url } = el.dataset || {};\n\n log('deserialize: ', name);\n const width = parseInt(el.getAttribute('width'), 10) || null;\n const height = parseInt(el.getAttribute('height'), 10) || null;\n\n const out = {\n object: 'inline',\n type: type,\n isVoid: true,\n data: {\n src: el.getAttribute('src'),\n editing,\n ends,\n height,\n starts,\n title,\n width,\n url\n }\n };\n log('return object: ', out);\n return out;\n },\n serialize(object /*, children*/) {\n const typeIndex = types.indexOf(object.type);\n\n if (typeIndex < 0) return;\n\n const type = types[typeIndex];\n\n const { data } = object;\n const editing = data.get('editing');\n const ends = data.get('ends');\n const src = data.get('src');\n const starts = data.get('starts');\n const title = data.get('title');\n const width = data.get('width');\n const height = data.get('height');\n const url = data.get('url');\n const style = {};\n\n if (width) {\n style.width = `${width}px`;\n }\n\n if (height) {\n style.height = `${height}px`;\n }\n\n const divProps = {\n 'data-editing': editing,\n 'data-ends': ends,\n 'data-starts': starts,\n 'data-title': title,\n 'data-url': url\n };\n const props = {\n ...style,\n src\n };\n\n return (\n <iframe\n data-type={type}\n src={src}\n {...divProps}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n {...props}\n />\n );\n }\n};\n"],"file":"index.js"}
@@ -109,7 +109,7 @@ var EditorAndToolbar = /*#__PURE__*/function (_React$Component) {
109
109
 
110
110
  log('[render] inFocus: ', inFocus, 'value.isFocused:', value.isFocused, 'focused node: ', focusedNode);
111
111
  return /*#__PURE__*/_react["default"].createElement("div", {
112
- className: classes.root
112
+ className: (0, _classnames["default"])(classes.root, toolbarOpts && toolbarOpts.error && classes.error)
113
113
  }, /*#__PURE__*/_react["default"].createElement("div", {
114
114
  className: holderNames
115
115
  }, /*#__PURE__*/_react["default"].createElement("div", {
@@ -151,7 +151,8 @@ _defineProperty(EditorAndToolbar, "propTypes", {
151
151
  pluginProps: _propTypes["default"].object,
152
152
  toolbarOpts: _propTypes["default"].shape({
153
153
  position: _propTypes["default"].oneOf(['bottom', 'top']),
154
- alwaysVisible: _propTypes["default"].bool
154
+ alwaysVisible: _propTypes["default"].bool,
155
+ error: _propTypes["default"].string
155
156
  })
156
157
  });
157
158
 
@@ -262,6 +263,9 @@ var style = {
262
263
  backgroundColor: _theme.primary
263
264
  }
264
265
  }
266
+ },
267
+ error: {
268
+ border: '2px solid red'
265
269
  }
266
270
  };
267
271
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/toolbar/editor-and-toolbar.jsx"],"names":["log","EditorAndToolbar","IS_FIREFOX","editorRef","tmp","isUpdatingSelection","props","classes","children","value","plugins","onChange","onDone","focusedNode","autoWidth","readOnly","disableUnderline","pluginProps","toolbarOpts","onDataChange","toolbarRef","inFocus","isFocused","undefined","holderNames","editorHolder","editorInFocus","disabledUnderline","clonedChildren","React","cloneElement","ref","el","root","Component","PropTypes","oneOfType","arrayOf","node","isRequired","SlatePropTypes","array","func","bool","object","shape","position","oneOf","alwaysVisible","style","padding","border","borderRadius","cursor","wordBreak","overflow","maxHeight","overflowY","color","text","backgroundColor","background","left","right","bottom","height","content","transition","pointerEvents","transform","primary","display","backgroundSize","backgroundImage","backgroundRepeat","backgroundPosition"],"mappings":"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","sourcesContent":["import React from 'react';\nimport Toolbar from './toolbar';\nimport classNames from 'classnames';\nimport debug from 'debug';\nimport { primary } from '../../theme';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport SlatePropTypes from 'slate-prop-types';\nimport { IS_FIREFOX } from 'slate-dev-environment';\nimport { color } from '@pie-lib/render-ui';\n\nconst log = debug('@pie-lib:editable-html:plugins:toolbar:editor-and-toolbar');\n\nexport class EditorAndToolbar extends React.Component {\n static propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n value: SlatePropTypes.value.isRequired,\n plugins: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n onDone: PropTypes.func.isRequired,\n onDataChange: PropTypes.func,\n toolbarRef: PropTypes.func,\n focusedNode: SlatePropTypes.node,\n readOnly: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidth: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n pluginProps: PropTypes.object,\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alwaysVisible: PropTypes.bool\n })\n };\n\n /** This is an interim fix until this PR is merged in slate:\n * https://github.com/ianstormtaylor/slate/pull/2236\n */\n componentDidMount() {\n if (IS_FIREFOX) {\n this.editorRef.tmp.isUpdatingSelection = true;\n }\n }\n\n render() {\n const {\n classes,\n children,\n value,\n plugins,\n onChange,\n onDone,\n focusedNode,\n autoWidth,\n readOnly,\n disableUnderline,\n pluginProps,\n toolbarOpts,\n onDataChange,\n toolbarRef\n } = this.props;\n\n const inFocus = value.isFocused || (focusedNode !== null && focusedNode !== undefined);\n const holderNames = classNames(\n classes.editorHolder,\n inFocus && classes.editorInFocus,\n readOnly && classes.readOnly,\n disableUnderline && classes.disabledUnderline\n );\n let clonedChildren = children;\n\n if (typeof children !== 'string') {\n clonedChildren = React.cloneElement(children, {\n ref: el => (this.editorRef = el)\n });\n }\n\n log(\n '[render] inFocus: ',\n inFocus,\n 'value.isFocused:',\n value.isFocused,\n 'focused node: ',\n focusedNode\n );\n\n return (\n <div className={classes.root}>\n <div className={holderNames}>\n <div className={classes.children}>{clonedChildren}</div>\n </div>\n <Toolbar\n autoWidth={autoWidth}\n plugins={plugins}\n focusedNode={focusedNode}\n value={value}\n isFocused={inFocus}\n onChange={onChange}\n onDone={onDone}\n onDataChange={onDataChange}\n toolbarRef={toolbarRef}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n />\n </div>\n );\n }\n}\n\nconst style = {\n root: {\n position: 'relative',\n padding: '0px',\n border: '1px solid #ccc',\n borderRadius: '4px',\n cursor: 'text',\n '& [data-slate-editor=\"true\"]': {\n wordBreak: 'break-word',\n overflow: 'visible',\n maxHeight: '500px',\n // needed in order to be able to put the focus before a void element when it is the first one in the editor\n padding: '5px'\n }\n },\n children: {\n padding: '10px 16px'\n },\n editorHolder: {\n position: 'relative',\n padding: '0px',\n overflowY: 'scroll',\n color: color.text(),\n backgroundColor: color.background(),\n '&::before': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transition: 'background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n pointerEvents: 'none',\n backgroundColor: 'rgba(0, 0, 0, 0.42)'\n },\n '&::after': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transform: 'scaleX(0)',\n transition:\n 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 200ms linear',\n backgroundColor: 'rgba(0, 0, 0, 0.42)'\n },\n '&:focus': {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: primary,\n height: '2px'\n }\n },\n '&:hover': {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: 'black',\n height: '2px'\n }\n }\n },\n disabledUnderline: {\n '&::before': {\n display: 'none'\n },\n '&::after': {\n display: 'none'\n }\n },\n\n readOnly: {\n '&::before': {\n background: 'transparent',\n backgroundSize: '5px 1px',\n backgroundImage: 'linear-gradient(to right, rgba(0, 0, 0, 0.42) 33%, transparent 0%)',\n backgroundRepeat: 'repeat-x',\n backgroundPosition: 'left top'\n },\n '&::after': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transform: 'scaleX(0)',\n transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 0ms linear',\n backgroundColor: 'rgba(0, 0, 0, 0)'\n },\n '&:hover': {\n '&::after': {\n transform: 'scaleX(0)',\n backgroundColor: 'black',\n height: '2px'\n }\n }\n },\n editorInFocus: {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: primary,\n height: '2px'\n },\n '&:hover': {\n '&::after': {\n backgroundColor: primary\n }\n }\n }\n};\n\nexport default withStyles(style)(EditorAndToolbar);\n"],"file":"editor-and-toolbar.js"}
1
+ {"version":3,"sources":["../../../src/plugins/toolbar/editor-and-toolbar.jsx"],"names":["log","EditorAndToolbar","IS_FIREFOX","editorRef","tmp","isUpdatingSelection","props","classes","children","value","plugins","onChange","onDone","focusedNode","autoWidth","readOnly","disableUnderline","pluginProps","toolbarOpts","onDataChange","toolbarRef","inFocus","isFocused","undefined","holderNames","editorHolder","editorInFocus","disabledUnderline","clonedChildren","React","cloneElement","ref","el","root","error","Component","PropTypes","oneOfType","arrayOf","node","isRequired","SlatePropTypes","array","func","bool","object","shape","position","oneOf","alwaysVisible","string","style","padding","border","borderRadius","cursor","wordBreak","overflow","maxHeight","overflowY","color","text","backgroundColor","background","left","right","bottom","height","content","transition","pointerEvents","transform","primary","display","backgroundSize","backgroundImage","backgroundRepeat","backgroundPosition"],"mappings":"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","sourcesContent":["import React from 'react';\nimport Toolbar from './toolbar';\nimport classNames from 'classnames';\nimport debug from 'debug';\nimport { primary } from '../../theme';\nimport { withStyles } from '@material-ui/core/styles';\nimport PropTypes from 'prop-types';\nimport SlatePropTypes from 'slate-prop-types';\nimport { IS_FIREFOX } from 'slate-dev-environment';\nimport { color } from '@pie-lib/render-ui';\n\nconst log = debug('@pie-lib:editable-html:plugins:toolbar:editor-and-toolbar');\n\nexport class EditorAndToolbar extends React.Component {\n static propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n value: SlatePropTypes.value.isRequired,\n plugins: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n onDone: PropTypes.func.isRequired,\n onDataChange: PropTypes.func,\n toolbarRef: PropTypes.func,\n focusedNode: SlatePropTypes.node,\n readOnly: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidth: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n pluginProps: PropTypes.object,\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alwaysVisible: PropTypes.bool,\n error: PropTypes.string\n })\n };\n\n /** This is an interim fix until this PR is merged in slate:\n * https://github.com/ianstormtaylor/slate/pull/2236\n */\n componentDidMount() {\n if (IS_FIREFOX) {\n this.editorRef.tmp.isUpdatingSelection = true;\n }\n }\n\n render() {\n const {\n classes,\n children,\n value,\n plugins,\n onChange,\n onDone,\n focusedNode,\n autoWidth,\n readOnly,\n disableUnderline,\n pluginProps,\n toolbarOpts,\n onDataChange,\n toolbarRef\n } = this.props;\n\n const inFocus = value.isFocused || (focusedNode !== null && focusedNode !== undefined);\n const holderNames = classNames(\n classes.editorHolder,\n inFocus && classes.editorInFocus,\n readOnly && classes.readOnly,\n disableUnderline && classes.disabledUnderline\n );\n let clonedChildren = children;\n\n if (typeof children !== 'string') {\n clonedChildren = React.cloneElement(children, {\n ref: el => (this.editorRef = el)\n });\n }\n\n log(\n '[render] inFocus: ',\n inFocus,\n 'value.isFocused:',\n value.isFocused,\n 'focused node: ',\n focusedNode\n );\n\n return (\n <div className={classNames(classes.root, toolbarOpts && toolbarOpts.error && classes.error)}>\n <div className={holderNames}>\n <div className={classes.children}>{clonedChildren}</div>\n </div>\n <Toolbar\n autoWidth={autoWidth}\n plugins={plugins}\n focusedNode={focusedNode}\n value={value}\n isFocused={inFocus}\n onChange={onChange}\n onDone={onDone}\n onDataChange={onDataChange}\n toolbarRef={toolbarRef}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n />\n </div>\n );\n }\n}\n\nconst style = {\n root: {\n position: 'relative',\n padding: '0px',\n border: '1px solid #ccc',\n borderRadius: '4px',\n cursor: 'text',\n '& [data-slate-editor=\"true\"]': {\n wordBreak: 'break-word',\n overflow: 'visible',\n maxHeight: '500px',\n // needed in order to be able to put the focus before a void element when it is the first one in the editor\n padding: '5px'\n }\n },\n children: {\n padding: '10px 16px'\n },\n editorHolder: {\n position: 'relative',\n padding: '0px',\n overflowY: 'scroll',\n color: color.text(),\n backgroundColor: color.background(),\n '&::before': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transition: 'background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',\n pointerEvents: 'none',\n backgroundColor: 'rgba(0, 0, 0, 0.42)'\n },\n '&::after': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transform: 'scaleX(0)',\n transition:\n 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 200ms linear',\n backgroundColor: 'rgba(0, 0, 0, 0.42)'\n },\n '&:focus': {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: primary,\n height: '2px'\n }\n },\n '&:hover': {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: 'black',\n height: '2px'\n }\n }\n },\n disabledUnderline: {\n '&::before': {\n display: 'none'\n },\n '&::after': {\n display: 'none'\n }\n },\n\n readOnly: {\n '&::before': {\n background: 'transparent',\n backgroundSize: '5px 1px',\n backgroundImage: 'linear-gradient(to right, rgba(0, 0, 0, 0.42) 33%, transparent 0%)',\n backgroundRepeat: 'repeat-x',\n backgroundPosition: 'left top'\n },\n '&::after': {\n left: '0',\n right: '0',\n bottom: '0',\n height: '1px',\n content: '\"\"',\n position: 'absolute',\n transform: 'scaleX(0)',\n transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 0ms linear',\n backgroundColor: 'rgba(0, 0, 0, 0)'\n },\n '&:hover': {\n '&::after': {\n transform: 'scaleX(0)',\n backgroundColor: 'black',\n height: '2px'\n }\n }\n },\n editorInFocus: {\n '&::after': {\n transform: 'scaleX(1)',\n backgroundColor: primary,\n height: '2px'\n },\n '&:hover': {\n '&::after': {\n backgroundColor: primary\n }\n }\n },\n error: {\n border: '2px solid red'\n }\n};\n\nexport default withStyles(style)(EditorAndToolbar);\n"],"file":"editor-and-toolbar.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-lib/editable-html",
3
- "version": "7.19.1",
3
+ "version": "7.20.0",
4
4
  "description": "",
5
5
  "license": "ISC",
6
6
  "main": "lib/index.js",
@@ -11,9 +11,9 @@
11
11
  "@material-ui/icons": "^3.0.2",
12
12
  "@material-ui/styles": "^3.0.0-alpha.10",
13
13
  "@pie-lib/drag": "^1.1.52",
14
- "@pie-lib/math-rendering": "^2.3.12",
15
- "@pie-lib/math-toolbar": "^1.8.8",
16
- "@pie-lib/render-ui": "^4.12.4",
14
+ "@pie-lib/math-rendering": "^2.3.13",
15
+ "@pie-lib/math-toolbar": "^1.8.9",
16
+ "@pie-lib/render-ui": "^4.12.5",
17
17
  "change-case": "^3.0.2",
18
18
  "classnames": "^2.2.6",
19
19
  "debug": "^4.1.1",
@@ -46,6 +46,6 @@
46
46
  "publishConfig": {
47
47
  "access": "public"
48
48
  },
49
- "gitHead": "99f0486923e78ba9e9002cbe59dd41b6b1cdc6d7",
49
+ "gitHead": "c37429328de4f87b6a7095de6e671c2cc53dd7f5",
50
50
  "scripts": {}
51
51
  }
package/src/editor.jsx CHANGED
@@ -24,6 +24,12 @@ const defaultToolbarOpts = {
24
24
  doneOn: 'blur'
25
25
  };
26
26
 
27
+ const defaultResponseAreaProps = {
28
+ options: {},
29
+ respAreaToolbar: () => {},
30
+ onHandleAreaChange: () => {}
31
+ };
32
+
27
33
  const createToolbarOpts = toolbarOpts => {
28
34
  return {
29
35
  ...defaultToolbarOpts,
@@ -88,8 +94,9 @@ export class Editor extends React.Component {
88
94
  disableUnderline: true,
89
95
  onFocus: () => {},
90
96
  onBlur: () => {},
97
+ onKeyDown: () => {},
91
98
  toolbarOpts: defaultToolbarOpts,
92
- onKeyDown: () => {}
99
+ responseAreaProps: defaultResponseAreaProps
93
100
  };
94
101
 
95
102
  constructor(props) {
@@ -99,6 +106,11 @@ export class Editor extends React.Component {
99
106
  toolbarOpts: createToolbarOpts(props.toolbarOpts)
100
107
  };
101
108
 
109
+ const normalizedResponseAreaProps = {
110
+ ...defaultResponseAreaProps,
111
+ ...props.responseAreaProps
112
+ };
113
+
102
114
  this.onResize = () => {
103
115
  props.onChange(this.state.value, true);
104
116
  };
@@ -165,10 +177,10 @@ export class Editor extends React.Component {
165
177
  }
166
178
  },
167
179
  responseArea: {
168
- type: props.responseAreaProps && props.responseAreaProps.type,
169
- options: props.responseAreaProps && props.responseAreaProps.options,
170
- respAreaToolbar: props.responseAreaProps && props.responseAreaProps.respAreaToolbar,
171
- onHandleAreaChange: props.responseAreaProps && props.responseAreaProps.onHandleAreaChange,
180
+ type: normalizedResponseAreaProps.type,
181
+ options: normalizedResponseAreaProps.options,
182
+ respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,
183
+ onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,
172
184
  onFocus: () => {
173
185
  log('[table:onFocus]...');
174
186
  this.onPluginFocus();
package/src/index.jsx CHANGED
@@ -105,6 +105,12 @@ export default class EditableHtml extends React.Component {
105
105
 
106
106
  render() {
107
107
  const { value } = this.state;
108
+ const { toolbarOpts, error } = this.props;
109
+
110
+ if (toolbarOpts) {
111
+ toolbarOpts.error = error;
112
+ }
113
+
108
114
  const props = {
109
115
  ...this.props,
110
116
  markup: null,
@@ -106,7 +106,7 @@ export const buildPlugins = (activePlugins, opts) => {
106
106
  addIf('bulleted-list', List({ key: 'l', type: 'ul_list', icon: <BulletedListIcon /> })),
107
107
  addIf('numbered-list', List({ key: 'n', type: 'ol_list', icon: <NumberedListIcon /> })),
108
108
  ToolbarPlugin(opts.toolbar),
109
- SoftBreakPlugin(),
109
+ SoftBreakPlugin({ shift: true }),
110
110
  addIf('responseArea', respAreaPlugin)
111
111
  ]);
112
112
  };
@@ -1,4 +1,6 @@
1
1
  import React from 'react';
2
+ import { Data } from 'slate';
3
+ import Immutable from 'immutable';
2
4
  import PropTypes from 'prop-types';
3
5
  import EditList from 'slate-edit-list';
4
6
  import debug from 'debug';
@@ -44,15 +46,12 @@ export const serialization = {
44
46
  }
45
47
  };
46
48
 
47
- export default options => {
48
- const { type, icon } = options;
49
-
49
+ const createEditList = () => {
50
50
  const core = EditList({
51
51
  typeDefault: 'span'
52
52
  });
53
53
 
54
54
  // fix outdated schema
55
-
56
55
  if (core.schema && core.schema.blocks) {
57
56
  Object.keys(core.schema.blocks).forEach(key => {
58
57
  const block = core.schema.blocks[key];
@@ -65,6 +64,69 @@ export default options => {
65
64
  });
66
65
  }
67
66
 
67
+ /**
68
+ * This override of the core.changes.wrapInList is needed because the version
69
+ * of immutable that we have does not support getting the element at a specific
70
+ * index with a square bracket (list[0]). We have to use the list.get function instead
71
+ */
72
+
73
+ /**
74
+ * Returns the highest list of blocks that cover the current selection
75
+ */
76
+ const getHighestSelectedBlocks = value => {
77
+ const range = value.selection;
78
+ const document = value.document;
79
+
80
+ const startBlock = document.getClosestBlock(range.startKey);
81
+ const endBlock = document.getClosestBlock(range.endKey);
82
+
83
+ if (startBlock === endBlock) {
84
+ return Immutable.List([startBlock]);
85
+ }
86
+
87
+ const ancestor = document.getCommonAncestor(startBlock.key, endBlock.key);
88
+ const startPath = ancestor.getPath(startBlock.key);
89
+ const endPath = ancestor.getPath(endBlock.key);
90
+
91
+ return ancestor.nodes.slice(startPath.get(0), endPath.get(0) + 1);
92
+ };
93
+
94
+ /**
95
+ * Wrap the blocks in the current selection in a new list. Selected
96
+ * lists are merged together.
97
+ */
98
+ core.changes.wrapInList = function(change, type, data) {
99
+ const selectedBlocks = getHighestSelectedBlocks(change.value);
100
+
101
+ // Wrap in container
102
+ change.wrapBlock({ type: type, data: Data.create(data) }, { normalize: false });
103
+
104
+ // Wrap in list items
105
+ selectedBlocks.forEach(function(node) {
106
+ if (core.utils.isList(node)) {
107
+ // Merge its items with the created list
108
+ node.nodes.forEach(function(_ref) {
109
+ const key = _ref.key;
110
+ return change.unwrapNodeByKey(key, { normalize: false });
111
+ });
112
+ } else if (node.type !== 'list_item') {
113
+ change.wrapBlockByKey(node.key, 'list_item', {
114
+ normalize: false
115
+ });
116
+ }
117
+ });
118
+
119
+ return change.normalize();
120
+ };
121
+
122
+ return core;
123
+ };
124
+
125
+ export default options => {
126
+ const { type, icon } = options;
127
+
128
+ const core = createEditList();
129
+
68
130
  // eslint-disable-next-line react/display-name
69
131
  core.renderNode = props => {
70
132
  const { node, attributes, children } = props;
@@ -88,7 +150,7 @@ export default options => {
88
150
  return false;
89
151
  }
90
152
  const current = core.utils.getCurrentList(value);
91
- return current.type === type;
153
+ return current ? current.type === type : false;
92
154
  },
93
155
  onClick: (value, onChange) => {
94
156
  log('[onClick]', value);
@@ -20,14 +20,17 @@ const removeDialogs = () => {
20
20
  export const insertDialog = props => {
21
21
  const newEl = document.createElement('div');
22
22
  const { type, callback, ...rest } = props;
23
+ const initialBodyOverflow = document.body.style.overflow;
23
24
 
24
25
  removeDialogs();
25
26
 
26
27
  newEl.className = 'insert-media-dialog';
28
+ document.body.style.overflow = 'hidden';
27
29
 
28
30
  const handleClose = (val, data) => {
29
31
  callback(val, data);
30
32
  newEl.remove();
33
+ document.body.style.overflow = initialBodyOverflow;
31
34
  };
32
35
 
33
36
  const el = (
@@ -28,7 +28,8 @@ export class EditorAndToolbar extends React.Component {
28
28
  pluginProps: PropTypes.object,
29
29
  toolbarOpts: PropTypes.shape({
30
30
  position: PropTypes.oneOf(['bottom', 'top']),
31
- alwaysVisible: PropTypes.bool
31
+ alwaysVisible: PropTypes.bool,
32
+ error: PropTypes.string
32
33
  })
33
34
  };
34
35
 
@@ -84,7 +85,7 @@ export class EditorAndToolbar extends React.Component {
84
85
  );
85
86
 
86
87
  return (
87
- <div className={classes.root}>
88
+ <div className={classNames(classes.root, toolbarOpts && toolbarOpts.error && classes.error)}>
88
89
  <div className={holderNames}>
89
90
  <div className={classes.children}>{clonedChildren}</div>
90
91
  </div>
@@ -215,6 +216,9 @@ const style = {
215
216
  backgroundColor: primary
216
217
  }
217
218
  }
219
+ },
220
+ error: {
221
+ border: '2px solid red'
218
222
  }
219
223
  };
220
224