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.
- package/LICENSE +20 -0
- package/README.md +69 -0
- package/lib/commonjs/index.js +166 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/internal/rendering/components/Bold.js +23 -0
- package/lib/commonjs/internal/rendering/components/Bold.js.map +1 -0
- package/lib/commonjs/internal/rendering/components/BulletPoint.js +30 -0
- package/lib/commonjs/internal/rendering/components/BulletPoint.js.map +1 -0
- package/lib/commonjs/internal/rendering/components/Headline.js +37 -0
- package/lib/commonjs/internal/rendering/components/Headline.js.map +1 -0
- package/lib/commonjs/internal/rendering/components/Italic.js +23 -0
- package/lib/commonjs/internal/rendering/components/Italic.js.map +1 -0
- package/lib/commonjs/internal/rendering/components/Render.js +99 -0
- package/lib/commonjs/internal/rendering/components/Render.js.map +1 -0
- package/lib/commonjs/internal/rendering/utils.js +19 -0
- package/lib/commonjs/internal/rendering/utils.js.map +1 -0
- package/lib/commonjs/internal/text-formats/conversions.js +47 -0
- package/lib/commonjs/internal/text-formats/conversions.js.map +1 -0
- package/lib/commonjs/internal/text-formats/markdown-format.js +2 -0
- package/lib/commonjs/internal/text-formats/markdown-format.js.map +1 -0
- package/lib/commonjs/internal/text-formats/unicode-markers-format/constants.js +48 -0
- package/lib/commonjs/internal/text-formats/unicode-markers-format/constants.js.map +1 -0
- package/lib/commonjs/internal/text-formats/unicode-markers-format/encode-decode.js +65 -0
- package/lib/commonjs/internal/text-formats/unicode-markers-format/encode-decode.js.map +1 -0
- package/lib/commonjs/internal/text-formats/unicode-markers-format/markers.js +19 -0
- package/lib/commonjs/internal/text-formats/unicode-markers-format/markers.js.map +1 -0
- package/lib/commonjs/internal/text-formats/unicode-markers-format/text-manipulation.js +124 -0
- package/lib/commonjs/internal/text-formats/unicode-markers-format/text-manipulation.js.map +1 -0
- package/lib/module/index.js +162 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/internal/rendering/components/Bold.js +18 -0
- package/lib/module/internal/rendering/components/Bold.js.map +1 -0
- package/lib/module/internal/rendering/components/BulletPoint.js +25 -0
- package/lib/module/internal/rendering/components/BulletPoint.js.map +1 -0
- package/lib/module/internal/rendering/components/Headline.js +32 -0
- package/lib/module/internal/rendering/components/Headline.js.map +1 -0
- package/lib/module/internal/rendering/components/Italic.js +18 -0
- package/lib/module/internal/rendering/components/Italic.js.map +1 -0
- package/lib/module/internal/rendering/components/Render.js +94 -0
- package/lib/module/internal/rendering/components/Render.js.map +1 -0
- package/lib/module/internal/rendering/utils.js +16 -0
- package/lib/module/internal/rendering/utils.js.map +1 -0
- package/lib/module/internal/text-formats/conversions.js +43 -0
- package/lib/module/internal/text-formats/conversions.js.map +1 -0
- package/lib/module/internal/text-formats/markdown-format.js +2 -0
- package/lib/module/internal/text-formats/markdown-format.js.map +1 -0
- package/lib/module/internal/text-formats/unicode-markers-format/constants.js +45 -0
- package/lib/module/internal/text-formats/unicode-markers-format/constants.js.map +1 -0
- package/lib/module/internal/text-formats/unicode-markers-format/encode-decode.js +61 -0
- package/lib/module/internal/text-formats/unicode-markers-format/encode-decode.js.map +1 -0
- package/lib/module/internal/text-formats/unicode-markers-format/markers.js +15 -0
- package/lib/module/internal/text-formats/unicode-markers-format/markers.js.map +1 -0
- package/lib/module/internal/text-formats/unicode-markers-format/text-manipulation.js +117 -0
- package/lib/module/internal/text-formats/unicode-markers-format/text-manipulation.js.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +38 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/internal/rendering/components/Bold.d.ts +3 -0
- package/lib/typescript/commonjs/src/internal/rendering/components/Bold.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/internal/rendering/components/BulletPoint.d.ts +3 -0
- package/lib/typescript/commonjs/src/internal/rendering/components/BulletPoint.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/internal/rendering/components/Headline.d.ts +24 -0
- package/lib/typescript/commonjs/src/internal/rendering/components/Headline.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/internal/rendering/components/Italic.d.ts +3 -0
- package/lib/typescript/commonjs/src/internal/rendering/components/Italic.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/internal/rendering/components/Render.d.ts +4 -0
- package/lib/typescript/commonjs/src/internal/rendering/components/Render.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/internal/rendering/utils.d.ts +3 -0
- package/lib/typescript/commonjs/src/internal/rendering/utils.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/internal/text-formats/conversions.d.ts +9 -0
- package/lib/typescript/commonjs/src/internal/text-formats/conversions.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/internal/text-formats/markdown-format.d.ts +1 -0
- package/lib/typescript/commonjs/src/internal/text-formats/markdown-format.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/constants.d.ts +26 -0
- package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/constants.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/encode-decode.d.ts +15 -0
- package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/encode-decode.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/markers.d.ts +11 -0
- package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/markers.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/text-manipulation.d.ts +52 -0
- package/lib/typescript/commonjs/src/internal/text-formats/unicode-markers-format/text-manipulation.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/index.d.ts +38 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/lib/typescript/module/src/internal/rendering/components/Bold.d.ts +3 -0
- package/lib/typescript/module/src/internal/rendering/components/Bold.d.ts.map +1 -0
- package/lib/typescript/module/src/internal/rendering/components/BulletPoint.d.ts +3 -0
- package/lib/typescript/module/src/internal/rendering/components/BulletPoint.d.ts.map +1 -0
- package/lib/typescript/module/src/internal/rendering/components/Headline.d.ts +24 -0
- package/lib/typescript/module/src/internal/rendering/components/Headline.d.ts.map +1 -0
- package/lib/typescript/module/src/internal/rendering/components/Italic.d.ts +3 -0
- package/lib/typescript/module/src/internal/rendering/components/Italic.d.ts.map +1 -0
- package/lib/typescript/module/src/internal/rendering/components/Render.d.ts +4 -0
- package/lib/typescript/module/src/internal/rendering/components/Render.d.ts.map +1 -0
- package/lib/typescript/module/src/internal/rendering/utils.d.ts +3 -0
- package/lib/typescript/module/src/internal/rendering/utils.d.ts.map +1 -0
- package/lib/typescript/module/src/internal/text-formats/conversions.d.ts +9 -0
- package/lib/typescript/module/src/internal/text-formats/conversions.d.ts.map +1 -0
- package/lib/typescript/module/src/internal/text-formats/markdown-format.d.ts +1 -0
- package/lib/typescript/module/src/internal/text-formats/markdown-format.d.ts.map +1 -0
- package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/constants.d.ts +26 -0
- package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/constants.d.ts.map +1 -0
- package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/encode-decode.d.ts +15 -0
- package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/encode-decode.d.ts.map +1 -0
- package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/markers.d.ts +11 -0
- package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/markers.d.ts.map +1 -0
- package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/text-manipulation.d.ts +52 -0
- package/lib/typescript/module/src/internal/text-formats/unicode-markers-format/text-manipulation.d.ts.map +1 -0
- package/package.json +194 -0
- package/src/index.tsx +178 -0
- package/src/internal/rendering/components/Bold.tsx +12 -0
- package/src/internal/rendering/components/BulletPoint.tsx +19 -0
- package/src/internal/rendering/components/Headline.tsx +32 -0
- package/src/internal/rendering/components/Italic.tsx +12 -0
- package/src/internal/rendering/components/Render.tsx +105 -0
- package/src/internal/rendering/utils.ts +15 -0
- package/src/internal/text-formats/conversions.ts +62 -0
- package/src/internal/text-formats/markdown-format.ts +0 -0
- package/src/internal/text-formats/unicode-markers-format/constants.ts +64 -0
- package/src/internal/text-formats/unicode-markers-format/encode-decode.ts +60 -0
- package/src/internal/text-formats/unicode-markers-format/markers.ts +19 -0
- 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":"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","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":"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","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":[]}
|