react-native-simple-rich-text-editor 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +69 -0
  3. package/lib/commonjs/index.js +166 -0
  4. package/lib/commonjs/index.js.map +1 -0
  5. package/lib/commonjs/internal/rendering/components/Bold.js +23 -0
  6. package/lib/commonjs/internal/rendering/components/Bold.js.map +1 -0
  7. package/lib/commonjs/internal/rendering/components/BulletPoint.js +30 -0
  8. package/lib/commonjs/internal/rendering/components/BulletPoint.js.map +1 -0
  9. package/lib/commonjs/internal/rendering/components/Headline.js +37 -0
  10. package/lib/commonjs/internal/rendering/components/Headline.js.map +1 -0
  11. package/lib/commonjs/internal/rendering/components/Italic.js +23 -0
  12. package/lib/commonjs/internal/rendering/components/Italic.js.map +1 -0
  13. package/lib/commonjs/internal/rendering/components/Render.js +99 -0
  14. package/lib/commonjs/internal/rendering/components/Render.js.map +1 -0
  15. package/lib/commonjs/internal/rendering/utils.js +19 -0
  16. package/lib/commonjs/internal/rendering/utils.js.map +1 -0
  17. package/lib/commonjs/internal/text-formats/conversions.js +47 -0
  18. package/lib/commonjs/internal/text-formats/conversions.js.map +1 -0
  19. package/lib/commonjs/internal/text-formats/markdown-format.js +2 -0
  20. package/lib/commonjs/internal/text-formats/markdown-format.js.map +1 -0
  21. package/lib/commonjs/internal/text-formats/unicode-markers-format/constants.js +48 -0
  22. package/lib/commonjs/internal/text-formats/unicode-markers-format/constants.js.map +1 -0
  23. package/lib/commonjs/internal/text-formats/unicode-markers-format/encode-decode.js +65 -0
  24. package/lib/commonjs/internal/text-formats/unicode-markers-format/encode-decode.js.map +1 -0
  25. package/lib/commonjs/internal/text-formats/unicode-markers-format/markers.js +19 -0
  26. package/lib/commonjs/internal/text-formats/unicode-markers-format/markers.js.map +1 -0
  27. package/lib/commonjs/internal/text-formats/unicode-markers-format/text-manipulation.js +124 -0
  28. package/lib/commonjs/internal/text-formats/unicode-markers-format/text-manipulation.js.map +1 -0
  29. package/lib/module/index.js +162 -0
  30. package/lib/module/index.js.map +1 -0
  31. package/lib/module/internal/rendering/components/Bold.js +18 -0
  32. package/lib/module/internal/rendering/components/Bold.js.map +1 -0
  33. package/lib/module/internal/rendering/components/BulletPoint.js +25 -0
  34. package/lib/module/internal/rendering/components/BulletPoint.js.map +1 -0
  35. package/lib/module/internal/rendering/components/Headline.js +32 -0
  36. package/lib/module/internal/rendering/components/Headline.js.map +1 -0
  37. package/lib/module/internal/rendering/components/Italic.js +18 -0
  38. package/lib/module/internal/rendering/components/Italic.js.map +1 -0
  39. package/lib/module/internal/rendering/components/Render.js +94 -0
  40. package/lib/module/internal/rendering/components/Render.js.map +1 -0
  41. package/lib/module/internal/rendering/utils.js +16 -0
  42. package/lib/module/internal/rendering/utils.js.map +1 -0
  43. package/lib/module/internal/text-formats/conversions.js +43 -0
  44. package/lib/module/internal/text-formats/conversions.js.map +1 -0
  45. package/lib/module/internal/text-formats/markdown-format.js +2 -0
  46. package/lib/module/internal/text-formats/markdown-format.js.map +1 -0
  47. package/lib/module/internal/text-formats/unicode-markers-format/constants.js +45 -0
  48. package/lib/module/internal/text-formats/unicode-markers-format/constants.js.map +1 -0
  49. package/lib/module/internal/text-formats/unicode-markers-format/encode-decode.js +61 -0
  50. package/lib/module/internal/text-formats/unicode-markers-format/encode-decode.js.map +1 -0
  51. package/lib/module/internal/text-formats/unicode-markers-format/markers.js +15 -0
  52. package/lib/module/internal/text-formats/unicode-markers-format/markers.js.map +1 -0
  53. package/lib/module/internal/text-formats/unicode-markers-format/text-manipulation.js +117 -0
  54. package/lib/module/internal/text-formats/unicode-markers-format/text-manipulation.js.map +1 -0
  55. package/lib/typescript/commonjs/package.json +1 -0
  56. package/lib/typescript/commonjs/src/index.d.ts +38 -0
  57. package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
  58. package/lib/typescript/commonjs/src/internal/rendering/components/Bold.d.ts +3 -0
  59. package/lib/typescript/commonjs/src/internal/rendering/components/Bold.d.ts.map +1 -0
  60. package/lib/typescript/commonjs/src/internal/rendering/components/BulletPoint.d.ts +3 -0
  61. package/lib/typescript/commonjs/src/internal/rendering/components/BulletPoint.d.ts.map +1 -0
  62. package/lib/typescript/commonjs/src/internal/rendering/components/Headline.d.ts +24 -0
  63. package/lib/typescript/commonjs/src/internal/rendering/components/Headline.d.ts.map +1 -0
  64. package/lib/typescript/commonjs/src/internal/rendering/components/Italic.d.ts +3 -0
  65. package/lib/typescript/commonjs/src/internal/rendering/components/Italic.d.ts.map +1 -0
  66. package/lib/typescript/commonjs/src/internal/rendering/components/Render.d.ts +4 -0
  67. package/lib/typescript/commonjs/src/internal/rendering/components/Render.d.ts.map +1 -0
  68. package/lib/typescript/commonjs/src/internal/rendering/utils.d.ts +3 -0
  69. package/lib/typescript/commonjs/src/internal/rendering/utils.d.ts.map +1 -0
  70. package/lib/typescript/commonjs/src/internal/text-formats/conversions.d.ts +9 -0
  71. package/lib/typescript/commonjs/src/internal/text-formats/conversions.d.ts.map +1 -0
  72. package/lib/typescript/commonjs/src/internal/text-formats/markdown-format.d.ts +1 -0
  73. package/lib/typescript/commonjs/src/internal/text-formats/markdown-format.d.ts.map +1 -0
  74. package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/constants.d.ts +26 -0
  75. package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/constants.d.ts.map +1 -0
  76. package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/encode-decode.d.ts +15 -0
  77. package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/encode-decode.d.ts.map +1 -0
  78. package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/markers.d.ts +11 -0
  79. package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/markers.d.ts.map +1 -0
  80. package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/text-manipulation.d.ts +52 -0
  81. package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/text-manipulation.d.ts.map +1 -0
  82. package/lib/typescript/module/package.json +1 -0
  83. package/lib/typescript/module/src/index.d.ts +38 -0
  84. package/lib/typescript/module/src/index.d.ts.map +1 -0
  85. package/lib/typescript/module/src/internal/rendering/components/Bold.d.ts +3 -0
  86. package/lib/typescript/module/src/internal/rendering/components/Bold.d.ts.map +1 -0
  87. package/lib/typescript/module/src/internal/rendering/components/BulletPoint.d.ts +3 -0
  88. package/lib/typescript/module/src/internal/rendering/components/BulletPoint.d.ts.map +1 -0
  89. package/lib/typescript/module/src/internal/rendering/components/Headline.d.ts +24 -0
  90. package/lib/typescript/module/src/internal/rendering/components/Headline.d.ts.map +1 -0
  91. package/lib/typescript/module/src/internal/rendering/components/Italic.d.ts +3 -0
  92. package/lib/typescript/module/src/internal/rendering/components/Italic.d.ts.map +1 -0
  93. package/lib/typescript/module/src/internal/rendering/components/Render.d.ts +4 -0
  94. package/lib/typescript/module/src/internal/rendering/components/Render.d.ts.map +1 -0
  95. package/lib/typescript/module/src/internal/rendering/utils.d.ts +3 -0
  96. package/lib/typescript/module/src/internal/rendering/utils.d.ts.map +1 -0
  97. package/lib/typescript/module/src/internal/text-formats/conversions.d.ts +9 -0
  98. package/lib/typescript/module/src/internal/text-formats/conversions.d.ts.map +1 -0
  99. package/lib/typescript/module/src/internal/text-formats/markdown-format.d.ts +1 -0
  100. package/lib/typescript/module/src/internal/text-formats/markdown-format.d.ts.map +1 -0
  101. package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/constants.d.ts +26 -0
  102. package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/constants.d.ts.map +1 -0
  103. package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/encode-decode.d.ts +15 -0
  104. package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/encode-decode.d.ts.map +1 -0
  105. package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/markers.d.ts +11 -0
  106. package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/markers.d.ts.map +1 -0
  107. package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/text-manipulation.d.ts +52 -0
  108. package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/text-manipulation.d.ts.map +1 -0
  109. package/package.json +194 -0
  110. package/src/index.tsx +178 -0
  111. package/src/internal/rendering/components/Bold.tsx +12 -0
  112. package/src/internal/rendering/components/BulletPoint.tsx +19 -0
  113. package/src/internal/rendering/components/Headline.tsx +32 -0
  114. package/src/internal/rendering/components/Italic.tsx +12 -0
  115. package/src/internal/rendering/components/Render.tsx +105 -0
  116. package/src/internal/rendering/utils.ts +15 -0
  117. package/src/internal/text-formats/conversions.ts +62 -0
  118. package/src/internal/text-formats/markdown-format.ts +0 -0
  119. package/src/internal/text-formats/unicode-markers-format/constants.ts +64 -0
  120. package/src/internal/text-formats/unicode-markers-format/encode-decode.ts +60 -0
  121. package/src/internal/text-formats/unicode-markers-format/markers.ts +19 -0
  122. package/src/internal/text-formats/unicode-markers-format/text-manipulation.ts +135 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ZWS","exports","MARKER_BYTE_LENGTH","MARKER_STRING_LENGTH","HEADLINE_MARKER_TYPE","HEADLINE_LEVELS","H1","H2","H3","HEADLINE_MARKERS","createMarker","BOLD_MARKER_TYPE","BOLD_MARKER_START","BOLD_MARKER_END","BOLD_MARKERS","START","END","ITALIC_MARKER_TYPE","ITALIC_MARKER_START","ITALIC_MARKER_END","ITALIC_MARKERS","BULLET_POINT_MARKER_TYPE","BULLET_POINT_UNORDERED","BULLET_POINT_UL_MARKER","BULLET_POINT_STRING_REPRESENTATION","data","length","array","Uint8Array","set"],"sourceRoot":"../../../../../src","sources":["internal/text-formats/unicode-markers-format/constants.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA,MAAMA,GAAG,GAAAC,OAAA,CAAAD,GAAA,GAAG,QAAQ,CAAC,CAAC;AACtB,MAAME,kBAAkB,GAAAD,OAAA,CAAAC,kBAAA,GAAG,CAAC,CAAC,CAAC;AAC9B,MAAMC,oBAAoB,GAAAF,OAAA,CAAAE,oBAAA,GAAGD,kBAAkB,GAAG,CAAC,CAAC,CAAC;AACrD,MAAME,oBAAoB,GAAAH,OAAA,CAAAG,oBAAA,GAAG,IAAI,CAAC,CAAC;AACnC;AACA,MAAMC,eAAe,GAAAJ,OAAA,CAAAI,eAAA,GAAG;EACtBC,EAAE,EAAE,CAAC;EACLC,EAAE,EAAE,CAAC;EACLC,EAAE,EAAE;AACN,CAAU;AACV,MAAMC,gBAAkE,GAAAR,OAAA,CAAAQ,gBAAA,GAAG;EACzEH,EAAE,EAAEI,YAAY,CAAC,CAACN,oBAAoB,EAAEC,eAAe,CAACC,EAAE,CAAC,CAAC;EAC5DC,EAAE,EAAEG,YAAY,CAAC,CAACN,oBAAoB,EAAEC,eAAe,CAACE,EAAE,CAAC,CAAC;EAC5DC,EAAE,EAAEE,YAAY,CAAC,CAACN,oBAAoB,EAAEC,eAAe,CAACG,EAAE,CAAC;AAC7D,CAAU;AAEV,MAAMG,gBAAgB,GAAAV,OAAA,CAAAU,gBAAA,GAAG,IAAI;AAC7B,MAAMC,iBAAiB,GAAG,CAAC;AAC3B,MAAMC,eAAe,GAAG,CAAC;AAEzB,MAAMC,YAAY,GAAAb,OAAA,CAAAa,YAAA,GAAG;EACnBC,KAAK,EAAEL,YAAY,CAAC,CAACC,gBAAgB,EAAEC,iBAAiB,CAAC,CAAC;EAC1DI,GAAG,EAAEN,YAAY,CAAC,CAACC,gBAAgB,EAAEE,eAAe,CAAC;AACvD,CAAU;AAEV,MAAMI,kBAAkB,GAAG,IAAI;AAC/B,MAAMC,mBAAmB,GAAG,CAAC;AAC7B,MAAMC,iBAAiB,GAAG,CAAC;AAE3B,MAAMC,cAAc,GAAAnB,OAAA,CAAAmB,cAAA,GAAG;EACrBL,KAAK,EAAEL,YAAY,CAAC,CAACO,kBAAkB,EAAEC,mBAAmB,CAAC,CAAC;EAC9DF,GAAG,EAAEN,YAAY,CAAC,CAACO,kBAAkB,EAAEE,iBAAiB,CAAC;AAC3D,CAAU;AAEV,MAAME,wBAAwB,GAAG,IAAI;AACrC,MAAMC,sBAAsB,GAAG,CAAC;AAChC,MAAMC,sBAAsB,GAAAtB,OAAA,CAAAsB,sBAAA,GAAGb,YAAY,CAAC,CAC1CW,wBAAwB,EACxBC,sBAAsB,CACvB,CAAC;AACF,MAAME,kCAAkC,GAAAvB,OAAA,CAAAuB,kCAAA,GAAG,IAAI;AAE/C,SAASd,YAAYA,CAACe,IAAc,EAAEC,MAAM,GAAGxB,kBAAkB,EAAE;EACjE,MAAMyB,KAAK,GAAG,IAAIC,UAAU,CAACF,MAAM,CAAC;EACpCC,KAAK,CAACE,GAAG,CAACJ,IAAI,CAAC;EACf,OAAOE,KAAK;AACd","ignoreList":[]}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.decode = decode;
7
+ exports.encode = encode;
8
+ /**
9
+ * The encode function leverages a concept from the Unicode spec - Variant Selectors - which enables arbitrary bytes to be appended invisibly to a unicode char.
10
+ * @param base string, usually a single char, to which bytes are appended. These bytes remain invisible when base is rendered
11
+ * @param bytes to added to the base string/char.
12
+ * @returns string
13
+ */
14
+ function encode(base, bytes) {
15
+ let result = base;
16
+ for (const byte of bytes) {
17
+ result += byteToVariationSelector(byte);
18
+ }
19
+ return result;
20
+ }
21
+
22
+ /**
23
+ * The decode function extracts data hidden inside a string masquerading as variation selectors.
24
+ * @param variationSelectors string that may contain bytes hidden as variation selectors
25
+ * @returns a list of numbers/bytes
26
+ */
27
+ function decode(variationSelectors) {
28
+ const result = [];
29
+ let started = false;
30
+ for (const char of variationSelectors) {
31
+ const byte = variationSelectorToByte(char);
32
+ if (byte !== null) {
33
+ result.push(byte);
34
+ started = true;
35
+ } else if (started) {
36
+ break;
37
+ }
38
+ }
39
+ return result;
40
+ }
41
+
42
+ // Utility function to transform a byte into a variation selector, for appending it to a unicode char.
43
+ function byteToVariationSelector(byte) {
44
+ if (byte < 16) {
45
+ return String.fromCodePoint(0xfe00 + byte);
46
+ } else {
47
+ return String.fromCodePoint(0xe0100 + (byte - 16));
48
+ }
49
+ }
50
+
51
+ // Utility function to extract hidden data from a unicode char's variation selectors.
52
+ function variationSelectorToByte(variationSelector) {
53
+ const codePoint = variationSelector.codePointAt(0);
54
+ if (codePoint === undefined) return null;
55
+ if (codePoint >= 0xfe00 && codePoint <= 0xfe0f) {
56
+ return codePoint - 0xfe00;
57
+ } else if (codePoint >= 0xe0100 && codePoint <= 0xe01ef) {
58
+ return codePoint - 0xe0100 + 16;
59
+ } else {
60
+ return null;
61
+ }
62
+ }
63
+
64
+ // Source of encode, decode and variation selector utilities is https://paulbutler.org/2025/smuggling-arbitrary-data-through-an-emoji/ originally written in Rust
65
+ //# sourceMappingURL=encode-decode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["encode","base","bytes","result","byte","byteToVariationSelector","decode","variationSelectors","started","char","variationSelectorToByte","push","String","fromCodePoint","variationSelector","codePoint","codePointAt","undefined"],"sourceRoot":"../../../../../src","sources":["internal/text-formats/unicode-markers-format/encode-decode.ts"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,MAAMA,CAACC,IAAY,EAAEC,KAAiB,EAAU;EACvD,IAAIC,MAAM,GAAGF,IAAI;EACjB,KAAK,MAAMG,IAAI,IAAIF,KAAK,EAAE;IACxBC,MAAM,IAAIE,uBAAuB,CAACD,IAAI,CAAC;EACzC;EACA,OAAOD,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASG,MAAMA,CAACC,kBAA0B,EAAY;EACpD,MAAMJ,MAAgB,GAAG,EAAE;EAC3B,IAAIK,OAAO,GAAG,KAAK;EAEnB,KAAK,MAAMC,IAAI,IAAIF,kBAAkB,EAAE;IACrC,MAAMH,IAAI,GAAGM,uBAAuB,CAACD,IAAI,CAAC;IAC1C,IAAIL,IAAI,KAAK,IAAI,EAAE;MACjBD,MAAM,CAACQ,IAAI,CAACP,IAAI,CAAC;MACjBI,OAAO,GAAG,IAAI;IAChB,CAAC,MAAM,IAAIA,OAAO,EAAE;MAClB;IACF;EACF;EAEA,OAAOL,MAAM;AACf;;AAEA;AACA,SAASE,uBAAuBA,CAACD,IAAY,EAAU;EACrD,IAAIA,IAAI,GAAG,EAAE,EAAE;IACb,OAAOQ,MAAM,CAACC,aAAa,CAAC,MAAM,GAAGT,IAAI,CAAC;EAC5C,CAAC,MAAM;IACL,OAAOQ,MAAM,CAACC,aAAa,CAAC,OAAO,IAAIT,IAAI,GAAG,EAAE,CAAC,CAAC;EACpD;AACF;;AAEA;AACA,SAASM,uBAAuBA,CAACI,iBAAyB,EAAiB;EACzE,MAAMC,SAAS,GAAGD,iBAAiB,CAACE,WAAW,CAAC,CAAC,CAAC;EAClD,IAAID,SAAS,KAAKE,SAAS,EAAE,OAAO,IAAI;EACxC,IAAIF,SAAS,IAAI,MAAM,IAAIA,SAAS,IAAI,MAAM,EAAE;IAC9C,OAAOA,SAAS,GAAG,MAAM;EAC3B,CAAC,MAAM,IAAIA,SAAS,IAAI,OAAO,IAAIA,SAAS,IAAI,OAAO,EAAE;IACvD,OAAOA,SAAS,GAAG,OAAO,GAAG,EAAE;EACjC,CAAC,MAAM;IACL,OAAO,IAAI;EACb;AACF;;AAEA","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Markers = void 0;
7
+ var _encodeDecode = require("./encode-decode.js");
8
+ var _constants = require("./constants.js");
9
+ const Markers = exports.Markers = {
10
+ H1: (0, _encodeDecode.encode)(_constants.ZWS, _constants.HEADLINE_MARKERS.H1),
11
+ H2: (0, _encodeDecode.encode)(_constants.ZWS, _constants.HEADLINE_MARKERS.H2),
12
+ H3: (0, _encodeDecode.encode)(_constants.ZWS, _constants.HEADLINE_MARKERS.H3),
13
+ BOLD_START: (0, _encodeDecode.encode)(_constants.ZWS, _constants.BOLD_MARKERS.START),
14
+ BOLD_END: (0, _encodeDecode.encode)(_constants.ZWS, _constants.BOLD_MARKERS.END),
15
+ ITALIC_START: (0, _encodeDecode.encode)(_constants.ZWS, _constants.ITALIC_MARKERS.START),
16
+ ITALIC_END: (0, _encodeDecode.encode)(_constants.ZWS, _constants.ITALIC_MARKERS.END),
17
+ UL: (0, _encodeDecode.encode)(_constants.ZWS, _constants.BULLET_POINT_UL_MARKER)
18
+ };
19
+ //# sourceMappingURL=markers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_encodeDecode","require","_constants","Markers","exports","H1","encode","ZWS","HEADLINE_MARKERS","H2","H3","BOLD_START","BOLD_MARKERS","START","BOLD_END","END","ITALIC_START","ITALIC_MARKERS","ITALIC_END","UL","BULLET_POINT_UL_MARKER"],"sourceRoot":"../../../../../src","sources":["internal/text-formats/unicode-markers-format/markers.ts"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAQO,MAAME,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAG;EACrBE,EAAE,EAAE,IAAAC,oBAAM,EAACC,cAAG,EAAEC,2BAAgB,CAACH,EAAE,CAAC;EACpCI,EAAE,EAAE,IAAAH,oBAAM,EAACC,cAAG,EAAEC,2BAAgB,CAACC,EAAE,CAAC;EACpCC,EAAE,EAAE,IAAAJ,oBAAM,EAACC,cAAG,EAAEC,2BAAgB,CAACE,EAAE,CAAC;EACpCC,UAAU,EAAE,IAAAL,oBAAM,EAACC,cAAG,EAAEK,uBAAY,CAACC,KAAK,CAAC;EAC3CC,QAAQ,EAAE,IAAAR,oBAAM,EAACC,cAAG,EAAEK,uBAAY,CAACG,GAAG,CAAC;EACvCC,YAAY,EAAE,IAAAV,oBAAM,EAACC,cAAG,EAAEU,yBAAc,CAACJ,KAAK,CAAC;EAC/CK,UAAU,EAAE,IAAAZ,oBAAM,EAACC,cAAG,EAAEU,yBAAc,CAACF,GAAG,CAAC;EAC3CI,EAAE,EAAE,IAAAb,oBAAM,EAACC,cAAG,EAAEa,iCAAsB;AACxC,CAAU","ignoreList":[]}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.addHeadlineMarker = exports.addFontStyleMarkers = exports.addFontStyleEndMarker = exports.addBulletPointMarker = void 0;
7
+ exports.splitBySelection = splitBySelection;
8
+ var _markers = require("./markers.js");
9
+ /**
10
+ * Adds a bullet point marker to the text at the current cursor position.
11
+ * If the cursor is not at the beginning of a line, a newline is added before the marker.
12
+ * If the cursor is at the beginning of a line, the marker is added directly.
13
+ */
14
+ const addBulletPointMarker = (text, selection) => {
15
+ if (!text) {
16
+ return _markers.Markers.UL;
17
+ }
18
+
19
+ // Split text at the current selection.
20
+ const {
21
+ before,
22
+ selected,
23
+ after
24
+ } = splitBySelection(text, selection);
25
+
26
+ // Ensure that the marker begins on a new line.
27
+ let prefix = '';
28
+ if (before.length > 0 && !before.endsWith('\n')) {
29
+ prefix = '\n';
30
+ }
31
+
32
+ // Append the marker
33
+ const insertion = prefix + _markers.Markers.UL;
34
+ return before + insertion + selected + after;
35
+ };
36
+
37
+ /**
38
+ * Inserts a headline start marker into the text at the current cursor position.
39
+ * The marker encodes two bytes:
40
+ * - Byte 0: marker type (0x10 for headline)
41
+ * - Byte 1: headline level (here: 1)
42
+ *
43
+ * The marker is inserted so that it starts on a new line.
44
+ */
45
+ exports.addBulletPointMarker = addBulletPointMarker;
46
+ const addHeadlineMarker = (marker, text, selection) => {
47
+ if (!text) {
48
+ return marker;
49
+ }
50
+ // Split text at the current selection.
51
+ const {
52
+ before,
53
+ after
54
+ } = splitBySelection(text, selection);
55
+
56
+ // Do not add multiple consecutive markers, ZWS is the basis of each marker
57
+ // if (before.endsWith(ZWS) || after.startsWith(ZWS)) {
58
+ // return before + after;
59
+ // }
60
+
61
+ // Ensure that the marker begins on a new line.
62
+ let prefix = '';
63
+ if (!before.endsWith('\n')) {
64
+ prefix = '\n';
65
+ }
66
+ // Append the marker followed by a newline so that following text starts on a new line.
67
+ const insertion = prefix + marker;
68
+ return before + insertion + after;
69
+ };
70
+ exports.addHeadlineMarker = addHeadlineMarker;
71
+ const FontStyleMarkers = {
72
+ bold: {
73
+ START: _markers.Markers.BOLD_START,
74
+ END: _markers.Markers.BOLD_END
75
+ },
76
+ italic: {
77
+ START: _markers.Markers.ITALIC_START,
78
+ END: _markers.Markers.ITALIC_END
79
+ }
80
+ };
81
+ const addFontStyleEndMarker = (text, selection, style) => {
82
+ const {
83
+ before,
84
+ selected,
85
+ after
86
+ } = splitBySelection(text, selection);
87
+ return {
88
+ text: before + selected + FontStyleMarkers[style].END + after,
89
+ selection
90
+ };
91
+ };
92
+ exports.addFontStyleEndMarker = addFontStyleEndMarker;
93
+ const addFontStyleMarkers = (text, selection, style) => {
94
+ const {
95
+ before,
96
+ selected,
97
+ after
98
+ } = splitBySelection(text, selection);
99
+
100
+ // effectively no selection
101
+ if (selection.end - selection.start === 0) {
102
+ let prefix = '';
103
+ if (!before.endsWith('\n') && !before.endsWith(' ')) {
104
+ prefix += ' ';
105
+ }
106
+ return {
107
+ text: before + prefix + FontStyleMarkers[style].START,
108
+ selection
109
+ };
110
+ }
111
+ return {
112
+ text: before + FontStyleMarkers[style].START + selected + FontStyleMarkers[style].END + after,
113
+ selection
114
+ };
115
+ };
116
+ exports.addFontStyleMarkers = addFontStyleMarkers;
117
+ function splitBySelection(text, selection) {
118
+ return {
119
+ before: text.substring(0, selection.start),
120
+ selected: text.substring(selection.start, selection.end),
121
+ after: text.substring(selection.end)
122
+ };
123
+ }
124
+ //# sourceMappingURL=text-manipulation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_markers","require","addBulletPointMarker","text","selection","Markers","UL","before","selected","after","splitBySelection","prefix","length","endsWith","insertion","exports","addHeadlineMarker","marker","FontStyleMarkers","bold","START","BOLD_START","END","BOLD_END","italic","ITALIC_START","ITALIC_END","addFontStyleEndMarker","style","addFontStyleMarkers","end","start","substring"],"sourceRoot":"../../../../../src","sources":["internal/text-formats/unicode-markers-format/text-manipulation.ts"],"mappings":";;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA,MAAMC,oBAAoB,GAAGA,CAC3BC,IAAY,EACZC,SAAyC,KACtC;EACH,IAAI,CAACD,IAAI,EAAE;IACT,OAAOE,gBAAO,CAACC,EAAE;EACnB;;EAEA;EACA,MAAM;IAAEC,MAAM;IAAEC,QAAQ;IAAEC;EAAM,CAAC,GAAGC,gBAAgB,CAACP,IAAI,EAAEC,SAAS,CAAC;;EAErE;EACA,IAAIO,MAAM,GAAG,EAAE;EACf,IAAIJ,MAAM,CAACK,MAAM,GAAG,CAAC,IAAI,CAACL,MAAM,CAACM,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC/CF,MAAM,GAAG,IAAI;EACf;;EAEA;EACA,MAAMG,SAAS,GAAGH,MAAM,GAAGN,gBAAO,CAACC,EAAE;EACrC,OAAOC,MAAM,GAAGO,SAAS,GAAGN,QAAQ,GAAGC,KAAK;AAC9C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAPAM,OAAA,CAAAb,oBAAA,GAAAA,oBAAA;AAQA,MAAMc,iBAAiB,GAAGA,CACxBC,MAAc,EACdd,IAAY,EACZC,SAAyC,KACtC;EACH,IAAI,CAACD,IAAI,EAAE;IACT,OAAOc,MAAM;EACf;EACA;EACA,MAAM;IAAEV,MAAM;IAAEE;EAAM,CAAC,GAAGC,gBAAgB,CAACP,IAAI,EAAEC,SAAS,CAAC;;EAE3D;EACA;EACA;EACA;;EAEA;EACA,IAAIO,MAAM,GAAG,EAAE;EACf,IAAI,CAACJ,MAAM,CAACM,QAAQ,CAAC,IAAI,CAAC,EAAE;IAC1BF,MAAM,GAAG,IAAI;EACf;EACA;EACA,MAAMG,SAAS,GAAGH,MAAM,GAAGM,MAAM;EACjC,OAAOV,MAAM,GAAGO,SAAS,GAAGL,KAAK;AACnC,CAAC;AAACM,OAAA,CAAAC,iBAAA,GAAAA,iBAAA;AAEF,MAAME,gBAGL,GAAG;EACFC,IAAI,EAAE;IACJC,KAAK,EAAEf,gBAAO,CAACgB,UAAU;IACzBC,GAAG,EAAEjB,gBAAO,CAACkB;EACf,CAAC;EACDC,MAAM,EAAE;IAAEJ,KAAK,EAAEf,gBAAO,CAACoB,YAAY;IAAEH,GAAG,EAAEjB,gBAAO,CAACqB;EAAW;AACjE,CAAC;AAED,MAAMC,qBAAqB,GAAGA,CAC5BxB,IAAY,EACZC,SAAyC,EACzCwB,KAAwB,KACrB;EACH,MAAM;IAAErB,MAAM;IAAEC,QAAQ;IAAEC;EAAM,CAAC,GAAGC,gBAAgB,CAACP,IAAI,EAAEC,SAAS,CAAC;EACrE,OAAO;IACLD,IAAI,EAAEI,MAAM,GAAGC,QAAQ,GAAGU,gBAAgB,CAACU,KAAK,CAAC,CAACN,GAAG,GAAGb,KAAK;IAC7DL;EACF,CAAC;AACH,CAAC;AAACW,OAAA,CAAAY,qBAAA,GAAAA,qBAAA;AAEF,MAAME,mBAAmB,GAAGA,CAC1B1B,IAAY,EACZC,SAAyC,EACzCwB,KAAwB,KACrB;EACH,MAAM;IAAErB,MAAM;IAAEC,QAAQ;IAAEC;EAAM,CAAC,GAAGC,gBAAgB,CAACP,IAAI,EAAEC,SAAS,CAAC;;EAErE;EACA,IAAIA,SAAS,CAAC0B,GAAG,GAAG1B,SAAS,CAAC2B,KAAK,KAAK,CAAC,EAAE;IACzC,IAAIpB,MAAM,GAAG,EAAE;IACf,IAAI,CAACJ,MAAM,CAACM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAACN,MAAM,CAACM,QAAQ,CAAC,GAAG,CAAC,EAAE;MACnDF,MAAM,IAAI,GAAG;IACf;IAEA,OAAO;MACLR,IAAI,EAAEI,MAAM,GAAGI,MAAM,GAAGO,gBAAgB,CAACU,KAAK,CAAC,CAACR,KAAK;MACrDhB;IACF,CAAC;EACH;EAEA,OAAO;IACLD,IAAI,EACFI,MAAM,GACNW,gBAAgB,CAACU,KAAK,CAAC,CAACR,KAAK,GAC7BZ,QAAQ,GACRU,gBAAgB,CAACU,KAAK,CAAC,CAACN,GAAG,GAC3Bb,KAAK;IACPL;EACF,CAAC;AACH,CAAC;AAACW,OAAA,CAAAc,mBAAA,GAAAA,mBAAA;AAEF,SAASnB,gBAAgBA,CACvBP,IAAY,EACZC,SAAyC,EACY;EACrD,OAAO;IACLG,MAAM,EAAEJ,IAAI,CAAC6B,SAAS,CAAC,CAAC,EAAE5B,SAAS,CAAC2B,KAAK,CAAC;IAC1CvB,QAAQ,EAAEL,IAAI,CAAC6B,SAAS,CAAC5B,SAAS,CAAC2B,KAAK,EAAE3B,SAAS,CAAC0B,GAAG,CAAC;IACxDrB,KAAK,EAAEN,IAAI,CAAC6B,SAAS,CAAC5B,SAAS,CAAC0B,GAAG;EACrC,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * React Native Simple Rich Text Editor
5
+ *
6
+ * Documentation of the public API:
7
+ * - SimpleRichTextEditor Component
8
+ * -> let user specifiy when to emit (e.g. on keyboard dismiss)
9
+ * -> let user pass custom H1, H2, Bold, Italic, List buttons
10
+ *
11
+ * Internals:
12
+ * - RichTextEditor is a controlled component. The user provides `state` and `setState` to receive markdown output.
13
+ * - Only a subset of markdown will be supported. Unsupported markdown like images will be rendered as plain markdown text.
14
+ * - Receive text prop -> convert markdown to internal representation -> render
15
+ * - onEmitText: convert internal representation to markdown -> setState(markdown)
16
+ *
17
+ * Usage Example:
18
+ *
19
+ * ```typescript
20
+ * import RichTextEditor from "react-native-simple-rich-text-editor";
21
+ * import { useState } from "react";
22
+ *
23
+ *
24
+ * const Screen = () => {
25
+ * const [markdownText, setMarkdownText] = useState("# Hello World\nA paragraph."); // or with backticks ``
26
+ *
27
+ * return (
28
+ * <RichTextEditor text={markdownText} onEmitText={setMarkdownText} style={styles.editor} />
29
+ * );
30
+ * };
31
+ * ```
32
+ */
33
+
34
+ import { useState } from 'react';
35
+ import { StyleSheet, TextInput, TouchableOpacity, View, Text } from 'react-native';
36
+ import { Render } from "./internal/rendering/components/Render.js";
37
+ import { addFontStyleMarkers, addFontStyleEndMarker, addHeadlineMarker, addBulletPointMarker } from "./internal/text-formats/unicode-markers-format/text-manipulation.js";
38
+ import { Markers } from "./internal/text-formats/unicode-markers-format/markers.js";
39
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
40
+ const RichTextEditor = ({
41
+ text,
42
+ onEmitText
43
+ }) => {
44
+ // Track the current selection (cursor position) in the TextInput.
45
+ const [selection, setSelection] = useState({
46
+ start: 0,
47
+ end: 0
48
+ });
49
+ const [needsBoldEndMarker, setNeedsBoldEndMarker] = useState(false); // we must count the BOLD_START and BOLD_END markers in text prop => inital state
50
+ const [needsItalicEndMarker, setNeedsItalicEndMarker] = useState(false);
51
+ const handleFontStyleMarkerInsertion = style => () => {
52
+ const isBold = style === 'bold';
53
+ if (isBold ? needsBoldEndMarker : needsItalicEndMarker) {
54
+ const {
55
+ text: newText
56
+ } = addFontStyleEndMarker(text, selection, style);
57
+ isBold ? setNeedsBoldEndMarker(false) : setNeedsItalicEndMarker(false);
58
+ onEmitText(newText);
59
+ } else {
60
+ const {
61
+ text: newText
62
+ } = addFontStyleMarkers(text, selection, style);
63
+ // this is a reaction to an implementation detail of addBoldMarkers - TODO: solve it cleanly
64
+ if (selection.start - selection.end === 0) isBold ? setNeedsBoldEndMarker(true) : setNeedsItalicEndMarker(true);
65
+ onEmitText(newText);
66
+ }
67
+ };
68
+ return /*#__PURE__*/_jsxs(View, {
69
+ style: styles.container,
70
+ children: [/*#__PURE__*/_jsxs(View, {
71
+ style: styles.row,
72
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
73
+ style: styles.button,
74
+ onPress: () => onEmitText(addHeadlineMarker(Markers.H1, text, selection)),
75
+ children: /*#__PURE__*/_jsx(Text, {
76
+ style: styles.buttonText,
77
+ children: "H1"
78
+ })
79
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
80
+ style: styles.button,
81
+ onPress: () => onEmitText(addHeadlineMarker(Markers.H2, text, selection)),
82
+ children: /*#__PURE__*/_jsx(Text, {
83
+ style: styles.buttonText,
84
+ children: "H2"
85
+ })
86
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
87
+ style: styles.button,
88
+ onPress: () => onEmitText(addHeadlineMarker(Markers.H3, text, selection)),
89
+ children: /*#__PURE__*/_jsx(Text, {
90
+ style: styles.buttonText,
91
+ children: "H3"
92
+ })
93
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
94
+ style: styles.button,
95
+ onPress: () => onEmitText(addBulletPointMarker(text, selection)),
96
+ children: /*#__PURE__*/_jsx(Text, {
97
+ style: styles.buttonText,
98
+ children: "List"
99
+ })
100
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
101
+ style: [styles.button, styles.fixedWidth],
102
+ onPress: handleFontStyleMarkerInsertion('bold'),
103
+ children: /*#__PURE__*/_jsx(Text, {
104
+ style: styles.buttonText,
105
+ children: needsBoldEndMarker ? 'Bold ✖' : 'Bold'
106
+ })
107
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
108
+ style: [styles.button, styles.fixedWidth],
109
+ onPress: handleFontStyleMarkerInsertion('italic'),
110
+ children: /*#__PURE__*/_jsx(Text, {
111
+ style: styles.buttonText,
112
+ children: needsItalicEndMarker ? 'Italic ✖' : 'Italic'
113
+ })
114
+ })]
115
+ }), /*#__PURE__*/_jsx(TextInput, {
116
+ multiline: true,
117
+ autoFocus: true,
118
+ autoCorrect: false,
119
+ style: styles.input,
120
+ onSelectionChange: e => setSelection(e.nativeEvent.selection),
121
+ onChangeText: onEmitText,
122
+ children: /*#__PURE__*/_jsx(Render, {
123
+ encodedText: text
124
+ })
125
+ })]
126
+ });
127
+ };
128
+ const electricBlueHex = '#009DDC';
129
+ const styles = StyleSheet.create({
130
+ container: {
131
+ flex: 1
132
+ },
133
+ row: {
134
+ margin: 8,
135
+ flexDirection: 'row',
136
+ justifyContent: 'space-between',
137
+ flexWrap: 'nowrap'
138
+ },
139
+ input: {
140
+ flex: 1,
141
+ textAlignVertical: 'top'
142
+ },
143
+ button: {
144
+ paddingVertical: 6,
145
+ paddingHorizontal: 8,
146
+ borderRadius: 4,
147
+ borderWidth: 1,
148
+ borderColor: electricBlueHex,
149
+ backgroundColor: 'white',
150
+ flexShrink: 1
151
+ },
152
+ buttonText: {
153
+ textAlign: 'center',
154
+ color: electricBlueHex
155
+ },
156
+ fixedWidth: {
157
+ width: 70
158
+ }
159
+ });
160
+ export default RichTextEditor;
161
+ export { RichTextEditor };
162
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","StyleSheet","TextInput","TouchableOpacity","View","Text","Render","addFontStyleMarkers","addFontStyleEndMarker","addHeadlineMarker","addBulletPointMarker","Markers","jsx","_jsx","jsxs","_jsxs","RichTextEditor","text","onEmitText","selection","setSelection","start","end","needsBoldEndMarker","setNeedsBoldEndMarker","needsItalicEndMarker","setNeedsItalicEndMarker","handleFontStyleMarkerInsertion","style","isBold","newText","styles","container","children","row","button","onPress","H1","buttonText","H2","H3","fixedWidth","multiline","autoFocus","autoCorrect","input","onSelectionChange","e","nativeEvent","onChangeText","encodedText","electricBlueHex","create","flex","margin","flexDirection","justifyContent","flexWrap","textAlignVertical","paddingVertical","paddingHorizontal","borderRadius","borderWidth","borderColor","backgroundColor","flexShrink","textAlign","color","width"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SACEC,UAAU,EACVC,SAAS,EACTC,gBAAgB,EAChBC,IAAI,EACJC,IAAI,QAGC,cAAc;AACrB,SAASC,MAAM,QAAQ,2CAA4C;AACnE,SACEC,mBAAmB,EACnBC,qBAAqB,EACrBC,iBAAiB,EACjBC,oBAAoB,QACf,qEAAqE;AAC5E,SAASC,OAAO,QAAQ,2DAA2D;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEpF,MAAMC,cAAc,GAAGA,CAAC;EACtBC,IAAI;EACJC;AAIF,CAAC,KAAK;EACJ;EACA,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAGpB,QAAQ,CAAiC;IACzEqB,KAAK,EAAE,CAAC;IACRC,GAAG,EAAE;EACP,CAAC,CAAC;EACF,MAAM,CAACC,kBAAkB,EAAEC,qBAAqB,CAAC,GAAGxB,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;EACrE,MAAM,CAACyB,oBAAoB,EAAEC,uBAAuB,CAAC,GAAG1B,QAAQ,CAAC,KAAK,CAAC;EAEvE,MAAM2B,8BAA8B,GAAIC,KAAwB,IAAK,MAAM;IACzE,MAAMC,MAAM,GAAGD,KAAK,KAAK,MAAM;IAC/B,IAAIC,MAAM,GAAGN,kBAAkB,GAAGE,oBAAoB,EAAE;MACtD,MAAM;QAAER,IAAI,EAAEa;MAAQ,CAAC,GAAGtB,qBAAqB,CAACS,IAAI,EAAEE,SAAS,EAAES,KAAK,CAAC;MACvEC,MAAM,GAAGL,qBAAqB,CAAC,KAAK,CAAC,GAAGE,uBAAuB,CAAC,KAAK,CAAC;MACtER,UAAU,CAACY,OAAO,CAAC;IACrB,CAAC,MAAM;MACL,MAAM;QAAEb,IAAI,EAAEa;MAAQ,CAAC,GAAGvB,mBAAmB,CAACU,IAAI,EAAEE,SAAS,EAAES,KAAK,CAAC;MACrE;MACA,IAAIT,SAAS,CAACE,KAAK,GAAGF,SAAS,CAACG,GAAG,KAAK,CAAC,EACvCO,MAAM,GAAGL,qBAAqB,CAAC,IAAI,CAAC,GAAGE,uBAAuB,CAAC,IAAI,CAAC;MACtER,UAAU,CAACY,OAAO,CAAC;IACrB;EACF,CAAC;EAED,oBACEf,KAAA,CAACX,IAAI;IAACwB,KAAK,EAAEG,MAAM,CAACC,SAAU;IAAAC,QAAA,gBAC5BlB,KAAA,CAACX,IAAI;MAACwB,KAAK,EAAEG,MAAM,CAACG,GAAI;MAAAD,QAAA,gBACtBpB,IAAA,CAACV,gBAAgB;QACfyB,KAAK,EAAEG,MAAM,CAACI,MAAO;QACrBC,OAAO,EAAEA,CAAA,KACPlB,UAAU,CAACT,iBAAiB,CAACE,OAAO,CAAC0B,EAAE,EAAEpB,IAAI,EAAEE,SAAS,CAAC,CAC1D;QAAAc,QAAA,eAEDpB,IAAA,CAACR,IAAI;UAACuB,KAAK,EAAEG,MAAM,CAACO,UAAW;UAAAL,QAAA,EAAC;QAAE,CAAM;MAAC,CACzB,CAAC,eACnBpB,IAAA,CAACV,gBAAgB;QACfyB,KAAK,EAAEG,MAAM,CAACI,MAAO;QACrBC,OAAO,EAAEA,CAAA,KACPlB,UAAU,CAACT,iBAAiB,CAACE,OAAO,CAAC4B,EAAE,EAAEtB,IAAI,EAAEE,SAAS,CAAC,CAC1D;QAAAc,QAAA,eAEDpB,IAAA,CAACR,IAAI;UAACuB,KAAK,EAAEG,MAAM,CAACO,UAAW;UAAAL,QAAA,EAAC;QAAE,CAAM;MAAC,CACzB,CAAC,eACnBpB,IAAA,CAACV,gBAAgB;QACfyB,KAAK,EAAEG,MAAM,CAACI,MAAO;QACrBC,OAAO,EAAEA,CAAA,KACPlB,UAAU,CAACT,iBAAiB,CAACE,OAAO,CAAC6B,EAAE,EAAEvB,IAAI,EAAEE,SAAS,CAAC,CAC1D;QAAAc,QAAA,eAEDpB,IAAA,CAACR,IAAI;UAACuB,KAAK,EAAEG,MAAM,CAACO,UAAW;UAAAL,QAAA,EAAC;QAAE,CAAM;MAAC,CACzB,CAAC,eACnBpB,IAAA,CAACV,gBAAgB;QACfyB,KAAK,EAAEG,MAAM,CAACI,MAAO;QACrBC,OAAO,EAAEA,CAAA,KAAMlB,UAAU,CAACR,oBAAoB,CAACO,IAAI,EAAEE,SAAS,CAAC,CAAE;QAAAc,QAAA,eAEjEpB,IAAA,CAACR,IAAI;UAACuB,KAAK,EAAEG,MAAM,CAACO,UAAW;UAAAL,QAAA,EAAC;QAAI,CAAM;MAAC,CAC3B,CAAC,eACnBpB,IAAA,CAACV,gBAAgB;QACfyB,KAAK,EAAE,CAACG,MAAM,CAACI,MAAM,EAAEJ,MAAM,CAACU,UAAU,CAAE;QAC1CL,OAAO,EAAET,8BAA8B,CAAC,MAAM,CAAE;QAAAM,QAAA,eAEhDpB,IAAA,CAACR,IAAI;UAACuB,KAAK,EAAEG,MAAM,CAACO,UAAW;UAAAL,QAAA,EAC5BV,kBAAkB,GAAG,QAAQ,GAAG;QAAM,CACnC;MAAC,CACS,CAAC,eACnBV,IAAA,CAACV,gBAAgB;QACfyB,KAAK,EAAE,CAACG,MAAM,CAACI,MAAM,EAAEJ,MAAM,CAACU,UAAU,CAAE;QAC1CL,OAAO,EAAET,8BAA8B,CAAC,QAAQ,CAAE;QAAAM,QAAA,eAElDpB,IAAA,CAACR,IAAI;UAACuB,KAAK,EAAEG,MAAM,CAACO,UAAW;UAAAL,QAAA,EAC5BR,oBAAoB,GAAG,UAAU,GAAG;QAAQ,CACzC;MAAC,CACS,CAAC;IAAA,CACf,CAAC,eACPZ,IAAA,CAACX,SAAS;MACRwC,SAAS;MACTC,SAAS;MACTC,WAAW,EAAE,KAAM;MACnBhB,KAAK,EAAEG,MAAM,CAACc,KAAM;MACpBC,iBAAiB,EACfC,CAA0D,IACvD3B,YAAY,CAAC2B,CAAC,CAACC,WAAW,CAAC7B,SAAS,CAAE;MAC3C8B,YAAY,EAAE/B,UAAW;MAAAe,QAAA,eAEzBpB,IAAA,CAACP,MAAM;QAAC4C,WAAW,EAAEjC;MAAK,CAAE;IAAC,CACpB,CAAC;EAAA,CACR,CAAC;AAEX,CAAC;AAED,MAAMkC,eAAe,GAAG,SAAS;AACjC,MAAMpB,MAAM,GAAG9B,UAAU,CAACmD,MAAM,CAAC;EAC/BpB,SAAS,EAAE;IACTqB,IAAI,EAAE;EACR,CAAC;EACDnB,GAAG,EAAE;IACHoB,MAAM,EAAE,CAAC;IACTC,aAAa,EAAE,KAAK;IACpBC,cAAc,EAAE,eAAe;IAC/BC,QAAQ,EAAE;EACZ,CAAC;EACDZ,KAAK,EAAE;IAAEQ,IAAI,EAAE,CAAC;IAAEK,iBAAiB,EAAE;EAAM,CAAC;EAC5CvB,MAAM,EAAE;IACNwB,eAAe,EAAE,CAAC;IAClBC,iBAAiB,EAAE,CAAC;IACpBC,YAAY,EAAE,CAAC;IACfC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAEZ,eAAe;IAC5Ba,eAAe,EAAE,OAAO;IACxBC,UAAU,EAAE;EACd,CAAC;EACD3B,UAAU,EAAE;IACV4B,SAAS,EAAE,QAAQ;IACnBC,KAAK,EAAEhB;EACT,CAAC;EACDV,UAAU,EAAE;IACV2B,KAAK,EAAE;EACT;AACF,CAAC,CAAC;AAEF,eAAepD,cAAc;AAC7B,SAASA,cAAc","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ import { Text, StyleSheet } from 'react-native';
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ export const Bold = ({
6
+ children
7
+ }) => {
8
+ return /*#__PURE__*/_jsx(Text, {
9
+ style: styles.bold,
10
+ children: children
11
+ });
12
+ };
13
+ const styles = StyleSheet.create({
14
+ bold: {
15
+ fontWeight: 700
16
+ }
17
+ });
18
+ //# sourceMappingURL=Bold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Text","StyleSheet","jsx","_jsx","Bold","children","style","styles","bold","create","fontWeight"],"sourceRoot":"../../../../../src","sources":["internal/rendering/components/Bold.tsx"],"mappings":";;AACA,SAASA,IAAI,EAAEC,UAAU,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEhD,OAAO,MAAMC,IAAI,GAAGA,CAAC;EAAEC;AAA4B,CAAC,KAAK;EACvD,oBAAOF,IAAA,CAACH,IAAI;IAACM,KAAK,EAAEC,MAAM,CAACC,IAAK;IAAAH,QAAA,EAAEA;EAAQ,CAAO,CAAC;AACpD,CAAC;AAED,MAAME,MAAM,GAAGN,UAAU,CAACQ,MAAM,CAAC;EAC/BD,IAAI,EAAE;IACJE,UAAU,EAAE;EACd;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ import { Fragment } from 'react';
4
+ import { Text, StyleSheet } from 'react-native';
5
+ import { BULLET_POINT_STRING_REPRESENTATION } from "../../text-formats/unicode-markers-format/constants.js";
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ export const BulletPoint = ({
8
+ children
9
+ }) => {
10
+ return /*#__PURE__*/_jsxs(Fragment, {
11
+ children: [/*#__PURE__*/_jsx(Text, {
12
+ style: styles.bullet,
13
+ children: BULLET_POINT_STRING_REPRESENTATION
14
+ }), /*#__PURE__*/_jsx(Text, {
15
+ children: children
16
+ })]
17
+ });
18
+ };
19
+ const styles = StyleSheet.create({
20
+ bullet: {
21
+ marginRight: 8,
22
+ fontSize: 16
23
+ }
24
+ });
25
+ //# sourceMappingURL=BulletPoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Fragment","Text","StyleSheet","BULLET_POINT_STRING_REPRESENTATION","jsx","_jsx","jsxs","_jsxs","BulletPoint","children","style","styles","bullet","create","marginRight","fontSize"],"sourceRoot":"../../../../../src","sources":["internal/rendering/components/BulletPoint.tsx"],"mappings":";;AAAA,SAAiCA,QAAQ,QAAQ,OAAO;AACxD,SAASC,IAAI,EAAEC,UAAU,QAAQ,cAAc;AAC/C,SAASC,kCAAkC,QAAQ,wDAAqD;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAEzG,OAAO,MAAMC,WAAW,GAAGA,CAAC;EAAEC;AAA4B,CAAC,KAAK;EAC9D,oBACEF,KAAA,CAACP,QAAQ;IAAAS,QAAA,gBACPJ,IAAA,CAACJ,IAAI;MAACS,KAAK,EAAEC,MAAM,CAACC,MAAO;MAAAH,QAAA,EAAEN;IAAkC,CAAO,CAAC,eACvEE,IAAA,CAACJ,IAAI;MAAAQ,QAAA,EAAEA;IAAQ,CAAO,CAAC;EAAA,CACf,CAAC;AAEf,CAAC;AAED,MAAME,MAAM,GAAGT,UAAU,CAACW,MAAM,CAAC;EAC/BD,MAAM,EAAE;IACNE,WAAW,EAAE,CAAC;IACdC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+
3
+ import { Text, StyleSheet } from 'react-native';
4
+ import { Markers } from "../../text-formats/unicode-markers-format/markers.js";
5
+ import { jsx as _jsx } from "react/jsx-runtime";
6
+ export const Headline = ({
7
+ level,
8
+ children
9
+ }) => {
10
+ return /*#__PURE__*/_jsx(Text, {
11
+ style: styles[level] ?? styles[3],
12
+ children: children
13
+ });
14
+ };
15
+ const styles = StyleSheet.create({
16
+ [Markers.H1]: {
17
+ fontSize: 32,
18
+ fontWeight: 'bold',
19
+ marginVertical: 4
20
+ },
21
+ [Markers.H2]: {
22
+ fontSize: 24,
23
+ fontWeight: 'bold',
24
+ marginVertical: 4
25
+ },
26
+ [Markers.H3]: {
27
+ fontSize: 18,
28
+ fontWeight: 'bold',
29
+ marginVertical: 4
30
+ }
31
+ });
32
+ //# sourceMappingURL=Headline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Text","StyleSheet","Markers","jsx","_jsx","Headline","level","children","style","styles","create","H1","fontSize","fontWeight","marginVertical","H2","H3"],"sourceRoot":"../../../../../src","sources":["internal/rendering/components/Headline.tsx"],"mappings":";;AACA,SAAyBA,IAAI,EAAEC,UAAU,QAAQ,cAAc;AAC/D,SAASC,OAAO,QAAQ,sDAAsD;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE/E,OAAO,MAAMC,QAAQ,GAAGA,CAAC;EACvBC,KAAK;EACLC;AAGD,CAAC,KAAK;EACL,oBACEH,IAAA,CAACJ,IAAI;IAACQ,KAAK,EAAGC,MAAM,CAACH,KAAK,CAAC,IAAkBG,MAAM,CAAC,CAAC,CAAE;IAAAF,QAAA,EAAEA;EAAQ,CAAO,CAAC;AAE7E,CAAC;AAED,MAAME,MAAM,GAAGR,UAAU,CAACS,MAAM,CAAC;EAC/B,CAACR,OAAO,CAACS,EAAE,GAAG;IACZC,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,MAAM;IAClBC,cAAc,EAAE;EAClB,CAAC;EACD,CAACZ,OAAO,CAACa,EAAE,GAAG;IACZH,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,MAAM;IAClBC,cAAc,EAAE;EAClB,CAAC;EACD,CAACZ,OAAO,CAACc,EAAE,GAAG;IACZJ,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAE,MAAM;IAClBC,cAAc,EAAE;EAClB;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ import { Text, StyleSheet } from 'react-native';
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ export const Italic = ({
6
+ children
7
+ }) => {
8
+ return /*#__PURE__*/_jsx(Text, {
9
+ style: styles.italic,
10
+ children: children
11
+ });
12
+ };
13
+ const styles = StyleSheet.create({
14
+ italic: {
15
+ fontStyle: 'italic'
16
+ }
17
+ });
18
+ //# sourceMappingURL=Italic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Text","StyleSheet","jsx","_jsx","Italic","children","style","styles","italic","create","fontStyle"],"sourceRoot":"../../../../../src","sources":["internal/rendering/components/Italic.tsx"],"mappings":";;AACA,SAASA,IAAI,EAAEC,UAAU,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEhD,OAAO,MAAMC,MAAM,GAAGA,CAAC;EAAEC;AAA4B,CAAC,KAAK;EACzD,oBAAOF,IAAA,CAACH,IAAI;IAACM,KAAK,EAAEC,MAAM,CAACC,MAAO;IAAAH,QAAA,EAAEA;EAAQ,CAAO,CAAC;AACtD,CAAC;AAED,MAAME,MAAM,GAAGN,UAAU,CAACQ,MAAM,CAAC;EAC/BD,MAAM,EAAE;IACNE,SAAS,EAAE;EACb;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ import { Text } from 'react-native';
4
+ import { ZWS, MARKER_STRING_LENGTH, BULLET_POINT_STRING_REPRESENTATION } from "../../text-formats/unicode-markers-format/constants.js";
5
+ import { Headline } from "./Headline.js";
6
+ import { Bold } from "./Bold.js";
7
+ import { Markers } from "../../text-formats/unicode-markers-format/markers.js";
8
+ import { Fragment, jsx as _jsx, jsxs as _jsxs } from 'react/jsx-runtime';
9
+ import { Italic } from "./Italic.js";
10
+ import { BulletPoint } from "./BulletPoint.js";
11
+ import { intersperse } from "../utils.js";
12
+ export const Render = ({
13
+ encodedText
14
+ }) => {
15
+ const lines = splitPreservingSeparator(encodedText.replaceAll(BULLET_POINT_STRING_REPRESENTATION, ''), ZWS); // each BulletPoint.tsx instance adds a BULLET_POINT_STRING_REPRESENTATION, we need to remove them to avoid adding extra chars on each render
16
+
17
+ return lines.map((line, i) => {
18
+ const marker = line.substring(0, MARKER_STRING_LENGTH);
19
+ switch (marker) {
20
+ case Markers.H1:
21
+ case Markers.H2:
22
+ case Markers.H3:
23
+ const [headline, ...restOfLineWithoutMarkers] = splitPreservingSeparator(line, '\n');
24
+ return /*#__PURE__*/_jsxs(Fragment, {
25
+ children: [/*#__PURE__*/_jsx(Headline, {
26
+ level: marker,
27
+ children: headline
28
+ }), restOfLineWithoutMarkers.join('')]
29
+ }, i + line);
30
+ case Markers.UL:
31
+ // NOTE: no other markers are allowed in a bullet point list for now..
32
+ // if there are other markers they will lead to a break out of the the list -> will make the list terminate early
33
+ const [bulletPoints, ...paragraphs] = splitPreservingSeparator(line, '\n\n');
34
+ return /*#__PURE__*/_jsxs(Fragment, {
35
+ children: [intersperse(
36
+ // adds newlines after split() operation
37
+ (bulletPoints ?? '').split('\n') // erases newlines
38
+ .map((bulletPointLine, j) => /*#__PURE__*/_jsx(BulletPoint, {
39
+ children: bulletPointLine
40
+ }, j + bulletPointLine)), '\n'), paragraphs.map(p => /*#__PURE__*/_jsx(Text, {
41
+ children: p
42
+ }, p))]
43
+ }, i + line);
44
+ case Markers.BOLD_START:
45
+ // NOTE: We could check if lines[i+1] starts with a BOLD_END marker
46
+ // but for now I opt for this simpler solution.
47
+ // Because of the above: There must not be any other markers between Markers.BOLD_START and Markers.BOLD_END!
48
+ return /*#__PURE__*/_jsx(Bold, {
49
+ children: line
50
+ }, i + line);
51
+ case Markers.BOLD_END:
52
+ break;
53
+ case Markers.ITALIC_START:
54
+ return /*#__PURE__*/_jsx(Italic, {
55
+ children: line
56
+ }, i + line);
57
+ case Markers.ITALIC_END:
58
+ break;
59
+ default:
60
+ // remove any broken markers
61
+ // markers can be broken by erasing text via backspace key in the editor
62
+ // first line always has no marker at the start
63
+ if (i !== 0) {
64
+ // detect broken marker
65
+ if (line.length < MARKER_STRING_LENGTH) {
66
+ return '';
67
+ }
68
+ }
69
+ break;
70
+ }
71
+ return /*#__PURE__*/_jsx(Text, {
72
+ children: line
73
+ }, i + line);
74
+ });
75
+ };
76
+
77
+ /**
78
+ * Splits a string by the specified separator but preserves the separator
79
+ * in the resulting array.
80
+ *
81
+ * @param str - The string to split
82
+ * @param separator - The separator to split by (string or RegExp)
83
+ * @returns An array of strings split by the separator with special handling
84
+ */
85
+ function splitPreservingSeparator(str, separator) {
86
+ return str.split(separator).map((s, i) => {
87
+ if (i === 0) {
88
+ return s;
89
+ } else {
90
+ return separator + s;
91
+ }
92
+ });
93
+ }
94
+ //# sourceMappingURL=Render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Text","ZWS","MARKER_STRING_LENGTH","BULLET_POINT_STRING_REPRESENTATION","Headline","Bold","Markers","Fragment","jsx","_jsx","jsxs","_jsxs","Italic","BulletPoint","intersperse","Render","encodedText","lines","splitPreservingSeparator","replaceAll","map","line","i","marker","substring","H1","H2","H3","headline","restOfLineWithoutMarkers","children","level","join","UL","bulletPoints","paragraphs","split","bulletPointLine","j","p","BOLD_START","BOLD_END","ITALIC_START","ITALIC_END","length","str","separator","s"],"sourceRoot":"../../../../../src","sources":["internal/rendering/components/Render.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ // add the separator after each element of arr, except for the last element
4
+ function intersperse(arr, separator) {
5
+ if (arr.length === 0) return [];
6
+ const output = new Array(arr.length * 2 - 1);
7
+ for (let i = 0, j = 0; i < arr.length; i++, j += 2) {
8
+ output[j] = arr[i];
9
+ if (j + 1 < output.length) {
10
+ output[j + 1] = separator;
11
+ }
12
+ }
13
+ return output;
14
+ }
15
+ export { intersperse };
16
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["intersperse","arr","separator","length","output","Array","i","j"],"sourceRoot":"../../../../src","sources":["internal/rendering/utils.ts"],"mappings":";;AAAA;AACA,SAASA,WAAWA,CAAIC,GAAQ,EAAEC,SAAqB,EAAkB;EACvE,IAAID,GAAG,CAACE,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE;EAE/B,MAAMC,MAAM,GAAG,IAAIC,KAAK,CAACJ,GAAG,CAACE,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;EAC5C,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAG,CAAC,EAAED,CAAC,GAAGL,GAAG,CAACE,MAAM,EAAEG,CAAC,EAAE,EAAEC,CAAC,IAAI,CAAC,EAAE;IAClDH,MAAM,CAACG,CAAC,CAAC,GAAGN,GAAG,CAACK,CAAC,CAAC;IAClB,IAAIC,CAAC,GAAG,CAAC,GAAGH,MAAM,CAACD,MAAM,EAAE;MACzBC,MAAM,CAACG,CAAC,GAAG,CAAC,CAAC,GAAGL,SAAS;IAC3B;EACF;EACA,OAAOE,MAAM;AACf;AAEA,SAASJ,WAAW","ignoreList":[]}