@neeleshyadav/react-native-html-renderer 1.1.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 (155) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +407 -0
  3. package/lib/module/HtmlRenderer.js +183 -0
  4. package/lib/module/HtmlRenderer.js.map +1 -0
  5. package/lib/module/context/index.js +32 -0
  6. package/lib/module/context/index.js.map +1 -0
  7. package/lib/module/hooks/index.js +6 -0
  8. package/lib/module/hooks/index.js.map +1 -0
  9. package/lib/module/hooks/useContentWidth.js +12 -0
  10. package/lib/module/hooks/useContentWidth.js.map +1 -0
  11. package/lib/module/hooks/useHtmlParser.js +16 -0
  12. package/lib/module/hooks/useHtmlParser.js.map +1 -0
  13. package/lib/module/hooks/useTagStyle.js +26 -0
  14. package/lib/module/hooks/useTagStyle.js.map +1 -0
  15. package/lib/module/index.js +23 -0
  16. package/lib/module/index.js.map +1 -0
  17. package/lib/module/package.json +1 -0
  18. package/lib/module/parser/index.js +62 -0
  19. package/lib/module/parser/index.js.map +1 -0
  20. package/lib/module/renderer/ErrorBoundary.js +66 -0
  21. package/lib/module/renderer/ErrorBoundary.js.map +1 -0
  22. package/lib/module/renderer/NodeRenderer.js +279 -0
  23. package/lib/module/renderer/NodeRenderer.js.map +1 -0
  24. package/lib/module/renderer/index.js +5 -0
  25. package/lib/module/renderer/index.js.map +1 -0
  26. package/lib/module/renderer/tags/BlockTags.js +28 -0
  27. package/lib/module/renderer/tags/BlockTags.js.map +1 -0
  28. package/lib/module/renderer/tags/FormTags.js +129 -0
  29. package/lib/module/renderer/tags/FormTags.js.map +1 -0
  30. package/lib/module/renderer/tags/ImageTag.js +163 -0
  31. package/lib/module/renderer/tags/ImageTag.js.map +1 -0
  32. package/lib/module/renderer/tags/LinkTag.js +50 -0
  33. package/lib/module/renderer/tags/LinkTag.js.map +1 -0
  34. package/lib/module/renderer/tags/ListTags.js +96 -0
  35. package/lib/module/renderer/tags/ListTags.js.map +1 -0
  36. package/lib/module/renderer/tags/MediaTags.js +69 -0
  37. package/lib/module/renderer/tags/MediaTags.js.map +1 -0
  38. package/lib/module/renderer/tags/TableTags.js +48 -0
  39. package/lib/module/renderer/tags/TableTags.js.map +1 -0
  40. package/lib/module/renderer/tags/TextTags.js +87 -0
  41. package/lib/module/renderer/tags/TextTags.js.map +1 -0
  42. package/lib/module/renderer/tags/index.js +11 -0
  43. package/lib/module/renderer/tags/index.js.map +1 -0
  44. package/lib/module/styles/cssToRn.js +34 -0
  45. package/lib/module/styles/cssToRn.js.map +1 -0
  46. package/lib/module/styles/darkModeStyles.js +81 -0
  47. package/lib/module/styles/darkModeStyles.js.map +1 -0
  48. package/lib/module/styles/defaultStyles.js +218 -0
  49. package/lib/module/styles/defaultStyles.js.map +1 -0
  50. package/lib/module/styles/index.js +7 -0
  51. package/lib/module/styles/index.js.map +1 -0
  52. package/lib/module/styles/mergeStyles.js +47 -0
  53. package/lib/module/styles/mergeStyles.js.map +1 -0
  54. package/lib/module/types/index.js +4 -0
  55. package/lib/module/types/index.js.map +1 -0
  56. package/lib/module/utils/accessibility.js +108 -0
  57. package/lib/module/utils/accessibility.js.map +1 -0
  58. package/lib/module/utils/cache.js +69 -0
  59. package/lib/module/utils/cache.js.map +1 -0
  60. package/lib/module/utils/index.js +95 -0
  61. package/lib/module/utils/index.js.map +1 -0
  62. package/lib/module/utils/sanitize.js +102 -0
  63. package/lib/module/utils/sanitize.js.map +1 -0
  64. package/lib/typescript/package.json +1 -0
  65. package/lib/typescript/src/HtmlRenderer.d.ts +15 -0
  66. package/lib/typescript/src/HtmlRenderer.d.ts.map +1 -0
  67. package/lib/typescript/src/context/index.d.ts +5 -0
  68. package/lib/typescript/src/context/index.d.ts.map +1 -0
  69. package/lib/typescript/src/hooks/index.d.ts +4 -0
  70. package/lib/typescript/src/hooks/index.d.ts.map +1 -0
  71. package/lib/typescript/src/hooks/useContentWidth.d.ts +6 -0
  72. package/lib/typescript/src/hooks/useContentWidth.d.ts.map +1 -0
  73. package/lib/typescript/src/hooks/useHtmlParser.d.ts +11 -0
  74. package/lib/typescript/src/hooks/useHtmlParser.d.ts.map +1 -0
  75. package/lib/typescript/src/hooks/useTagStyle.d.ts +11 -0
  76. package/lib/typescript/src/hooks/useTagStyle.d.ts.map +1 -0
  77. package/lib/typescript/src/index.d.ts +9 -0
  78. package/lib/typescript/src/index.d.ts.map +1 -0
  79. package/lib/typescript/src/parser/index.d.ts +10 -0
  80. package/lib/typescript/src/parser/index.d.ts.map +1 -0
  81. package/lib/typescript/src/renderer/ErrorBoundary.d.ts +22 -0
  82. package/lib/typescript/src/renderer/ErrorBoundary.d.ts.map +1 -0
  83. package/lib/typescript/src/renderer/NodeRenderer.d.ts +7 -0
  84. package/lib/typescript/src/renderer/NodeRenderer.d.ts.map +1 -0
  85. package/lib/typescript/src/renderer/index.d.ts +3 -0
  86. package/lib/typescript/src/renderer/index.d.ts.map +1 -0
  87. package/lib/typescript/src/renderer/tags/BlockTags.d.ts +18 -0
  88. package/lib/typescript/src/renderer/tags/BlockTags.d.ts.map +1 -0
  89. package/lib/typescript/src/renderer/tags/FormTags.d.ts +16 -0
  90. package/lib/typescript/src/renderer/tags/FormTags.d.ts.map +1 -0
  91. package/lib/typescript/src/renderer/tags/ImageTag.d.ts +18 -0
  92. package/lib/typescript/src/renderer/tags/ImageTag.d.ts.map +1 -0
  93. package/lib/typescript/src/renderer/tags/LinkTag.d.ts +19 -0
  94. package/lib/typescript/src/renderer/tags/LinkTag.d.ts.map +1 -0
  95. package/lib/typescript/src/renderer/tags/ListTags.d.ts +15 -0
  96. package/lib/typescript/src/renderer/tags/ListTags.d.ts.map +1 -0
  97. package/lib/typescript/src/renderer/tags/MediaTags.d.ts +14 -0
  98. package/lib/typescript/src/renderer/tags/MediaTags.d.ts.map +1 -0
  99. package/lib/typescript/src/renderer/tags/TableTags.d.ts +15 -0
  100. package/lib/typescript/src/renderer/tags/TableTags.d.ts.map +1 -0
  101. package/lib/typescript/src/renderer/tags/TextTags.d.ts +22 -0
  102. package/lib/typescript/src/renderer/tags/TextTags.d.ts.map +1 -0
  103. package/lib/typescript/src/renderer/tags/index.d.ts +9 -0
  104. package/lib/typescript/src/renderer/tags/index.d.ts.map +1 -0
  105. package/lib/typescript/src/styles/cssToRn.d.ts +11 -0
  106. package/lib/typescript/src/styles/cssToRn.d.ts.map +1 -0
  107. package/lib/typescript/src/styles/darkModeStyles.d.ts +7 -0
  108. package/lib/typescript/src/styles/darkModeStyles.d.ts.map +1 -0
  109. package/lib/typescript/src/styles/defaultStyles.d.ts +8 -0
  110. package/lib/typescript/src/styles/defaultStyles.d.ts.map +1 -0
  111. package/lib/typescript/src/styles/index.d.ts +5 -0
  112. package/lib/typescript/src/styles/index.d.ts.map +1 -0
  113. package/lib/typescript/src/styles/mergeStyles.d.ts +10 -0
  114. package/lib/typescript/src/styles/mergeStyles.d.ts.map +1 -0
  115. package/lib/typescript/src/types/index.d.ts +158 -0
  116. package/lib/typescript/src/types/index.d.ts.map +1 -0
  117. package/lib/typescript/src/utils/accessibility.d.ts +32 -0
  118. package/lib/typescript/src/utils/accessibility.d.ts.map +1 -0
  119. package/lib/typescript/src/utils/cache.d.ts +24 -0
  120. package/lib/typescript/src/utils/cache.d.ts.map +1 -0
  121. package/lib/typescript/src/utils/index.d.ts +33 -0
  122. package/lib/typescript/src/utils/index.d.ts.map +1 -0
  123. package/lib/typescript/src/utils/sanitize.d.ts +11 -0
  124. package/lib/typescript/src/utils/sanitize.d.ts.map +1 -0
  125. package/package.json +171 -0
  126. package/src/HtmlRenderer.tsx +216 -0
  127. package/src/context/index.tsx +30 -0
  128. package/src/hooks/index.ts +3 -0
  129. package/src/hooks/useContentWidth.ts +9 -0
  130. package/src/hooks/useHtmlParser.ts +18 -0
  131. package/src/hooks/useTagStyle.ts +23 -0
  132. package/src/index.tsx +39 -0
  133. package/src/parser/index.ts +80 -0
  134. package/src/renderer/ErrorBoundary.tsx +80 -0
  135. package/src/renderer/NodeRenderer.tsx +345 -0
  136. package/src/renderer/index.tsx +2 -0
  137. package/src/renderer/tags/BlockTags.tsx +49 -0
  138. package/src/renderer/tags/FormTags.tsx +169 -0
  139. package/src/renderer/tags/ImageTag.tsx +215 -0
  140. package/src/renderer/tags/LinkTag.tsx +76 -0
  141. package/src/renderer/tags/ListTags.tsx +148 -0
  142. package/src/renderer/tags/MediaTags.tsx +81 -0
  143. package/src/renderer/tags/TableTags.tsx +94 -0
  144. package/src/renderer/tags/TextTags.tsx +139 -0
  145. package/src/renderer/tags/index.ts +8 -0
  146. package/src/styles/cssToRn.ts +45 -0
  147. package/src/styles/darkModeStyles.ts +80 -0
  148. package/src/styles/defaultStyles.ts +176 -0
  149. package/src/styles/index.ts +4 -0
  150. package/src/styles/mergeStyles.ts +59 -0
  151. package/src/types/index.ts +229 -0
  152. package/src/utils/accessibility.ts +132 -0
  153. package/src/utils/cache.ts +83 -0
  154. package/src/utils/index.ts +151 -0
  155. package/src/utils/sanitize.ts +149 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useHtmlRendererContext","useContentWidth","contentWidth"],"sourceRoot":"../../../src","sources":["hooks/useContentWidth.ts"],"mappings":";;AAAA,SAASA,sBAAsB,QAAQ,qBAAY;;AAEnD;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAAA,EAAW;EACxC,OAAOD,sBAAsB,CAAC,CAAC,CAACE,YAAY;AAC9C","ignoreList":[]}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ import { useMemo } from 'react';
4
+ import { parseHTML } from "../parser/index.js";
5
+ /**
6
+ * Hook that parses an HTML string into a DOM tree.
7
+ * The result is memoized and only recomputed when `html` or `ignoredTags` change.
8
+ *
9
+ * @param html - Raw HTML string.
10
+ * @param ignoredTags - Optional set of tag names to skip.
11
+ * @returns Array of parsed DOMNode objects.
12
+ */
13
+ export function useHtmlParser(html, ignoredTags) {
14
+ return useMemo(() => parseHTML(html, ignoredTags), [html, ignoredTags]);
15
+ }
16
+ //# sourceMappingURL=useHtmlParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMemo","parseHTML","useHtmlParser","html","ignoredTags"],"sourceRoot":"../../../src","sources":["hooks/useHtmlParser.ts"],"mappings":";;AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,SAAS,QAAQ,oBAAW;AAGrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAC3BC,IAAY,EACZC,WAAyB,EACd;EACX,OAAOJ,OAAO,CAAC,MAAMC,SAAS,CAACE,IAAI,EAAEC,WAAW,CAAC,EAAE,CAACD,IAAI,EAAEC,WAAW,CAAC,CAAC;AACzE","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ import { useMemo } from 'react';
4
+ import { useHtmlRendererContext } from "../context/index.js";
5
+ import { getDefaultTagStyles } from "../styles/index.js";
6
+ /**
7
+ * Returns the fully merged style for a given HTML tag, combining:
8
+ * default tag styles → user `tagsStyles` override.
9
+ *
10
+ * Useful inside custom renderers that want access to the computed base style.
11
+ *
12
+ * @param tag - The HTML tag name (e.g. `'p'`, `'h1'`).
13
+ */
14
+ export function useTagStyle(tag) {
15
+ const ctx = useHtmlRendererContext();
16
+ return useMemo(() => {
17
+ const defaults = getDefaultTagStyles(ctx.emSize);
18
+ const base = defaults[tag] ?? {};
19
+ const override = ctx.tagsStyles[tag] ?? {};
20
+ return {
21
+ ...base,
22
+ ...override
23
+ };
24
+ }, [tag, ctx.emSize, ctx.tagsStyles]);
25
+ }
26
+ //# sourceMappingURL=useTagStyle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMemo","useHtmlRendererContext","getDefaultTagStyles","useTagStyle","tag","ctx","defaults","emSize","base","override","tagsStyles"],"sourceRoot":"../../../src","sources":["hooks/useTagStyle.ts"],"mappings":";;AAAA,SAASA,OAAO,QAAQ,OAAO;AAC/B,SAASC,sBAAsB,QAAQ,qBAAY;AACnD,SAASC,mBAAmB,QAAQ,oBAAW;AAG/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAWA,CAACC,GAAW,EAAW;EAChD,MAAMC,GAAG,GAAGJ,sBAAsB,CAAC,CAAC;EAEpC,OAAOD,OAAO,CAAC,MAAM;IACnB,MAAMM,QAAQ,GAAGJ,mBAAmB,CAACG,GAAG,CAACE,MAAM,CAAC;IAChD,MAAMC,IAAI,GAAGF,QAAQ,CAACF,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,MAAMK,QAAQ,GAAGJ,GAAG,CAACK,UAAU,CAACN,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO;MAAE,GAAGI,IAAI;MAAE,GAAGC;IAAS,CAAC;EACjC,CAAC,EAAE,CAACL,GAAG,EAAEC,GAAG,CAACE,MAAM,EAAEF,GAAG,CAACK,UAAU,CAAC,CAAC;AACvC","ignoreList":[]}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ // Main component
4
+ export { HtmlRenderer } from "./HtmlRenderer.js";
5
+
6
+ // Parser
7
+ export { parseHTML } from "./parser/index.js";
8
+
9
+ // Styles
10
+ export { parseInlineStyle, getDefaultTagStyles, getDefaultDarkModeStyles } from "./styles/index.js";
11
+
12
+ // Hooks
13
+ export { useHtmlParser, useContentWidth, useTagStyle } from "./hooks/index.js";
14
+
15
+ // Context (for advanced use inside custom renderers)
16
+ export { useHtmlRendererContext } from "./context/index.js";
17
+
18
+ // Utilities
19
+ export { sanitizeDOM } from "./utils/sanitize.js";
20
+ export { clearImageDimensionCache, clearDOMCache } from "./utils/cache.js";
21
+
22
+ // Types
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["HtmlRenderer","parseHTML","parseInlineStyle","getDefaultTagStyles","getDefaultDarkModeStyles","useHtmlParser","useContentWidth","useTagStyle","useHtmlRendererContext","sanitizeDOM","clearImageDimensionCache","clearDOMCache"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA,SAASA,YAAY,QAAQ,mBAAgB;;AAE7C;AACA,SAASC,SAAS,QAAQ,mBAAU;;AAEpC;AACA,SACEC,gBAAgB,EAChBC,mBAAmB,EACnBC,wBAAwB,QACnB,mBAAU;;AAEjB;AACA,SAASC,aAAa,EAAEC,eAAe,EAAEC,WAAW,QAAQ,kBAAS;;AAErE;AACA,SAASC,sBAAsB,QAAQ,oBAAW;;AAElD;AACA,SAASC,WAAW,QAAQ,qBAAkB;AAC9C,SAASC,wBAAwB,EAAEC,aAAa,QAAQ,kBAAe;;AAEvE","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+
3
+ import { parseDocument } from 'htmlparser2';
4
+
5
+ // ---------------------------------------------------------------------------
6
+ // Internal htmlparser2 node shape (loosely typed to avoid coupling)
7
+ // ---------------------------------------------------------------------------
8
+
9
+ // Tags whose content should never appear in the rendered output.
10
+ const IGNORED_TAGS = new Set(['script', 'style', 'head', 'meta', 'link']);
11
+
12
+ /** Max depth to prevent stack overflow from deeply nested HTML. */
13
+ const MAX_DEPTH = 100;
14
+ function convertNode(node, ignoredTags, depth) {
15
+ if (depth > MAX_DEPTH) return null;
16
+ if (node.type === 'text') {
17
+ const data = node.data ?? '';
18
+ if (data.trim().length === 0) return null;
19
+ return {
20
+ type: 'text',
21
+ data
22
+ };
23
+ }
24
+ if (node.type === 'tag' || node.type === 'script' || node.type === 'style') {
25
+ const tag = (node.name ?? '').toLowerCase();
26
+
27
+ // Skip built-in ignored tags AND user-supplied ignored tags
28
+ if (IGNORED_TAGS.has(tag) || ignoredTags.has(tag)) {
29
+ return null;
30
+ }
31
+ const children = [];
32
+ for (const child of node.children ?? []) {
33
+ const converted = convertNode(child, ignoredTags, depth + 1);
34
+ if (converted) children.push(converted);
35
+ }
36
+ return {
37
+ type: 'element',
38
+ tag,
39
+ attributes: node.attribs ?? {},
40
+ children
41
+ };
42
+ }
43
+ return null;
44
+ }
45
+
46
+ /**
47
+ * Parse an HTML string into an array of `DOMNode` objects.
48
+ *
49
+ * @param html - Raw HTML string.
50
+ * @param ignoredTags - Optional set of tag names to skip entirely.
51
+ * @returns Array of parsed DOM nodes.
52
+ */
53
+ export function parseHTML(html, ignoredTags = new Set()) {
54
+ const doc = parseDocument(html);
55
+ const nodes = [];
56
+ for (const child of doc.children ?? []) {
57
+ const converted = convertNode(child, ignoredTags, 0);
58
+ if (converted) nodes.push(converted);
59
+ }
60
+ return nodes;
61
+ }
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["parseDocument","IGNORED_TAGS","Set","MAX_DEPTH","convertNode","node","ignoredTags","depth","type","data","trim","length","tag","name","toLowerCase","has","children","child","converted","push","attributes","attribs","parseHTML","html","doc","nodes"],"sourceRoot":"../../../src","sources":["parser/index.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,aAAa;;AAG3C;AACA;AACA;;AAUA;AACA,MAAMC,YAAY,GAAG,IAAIC,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;;AAEzE;AACA,MAAMC,SAAS,GAAG,GAAG;AAErB,SAASC,WAAWA,CAClBC,IAAa,EACbC,WAAwB,EACxBC,KAAa,EACG;EAChB,IAAIA,KAAK,GAAGJ,SAAS,EAAE,OAAO,IAAI;EAElC,IAAIE,IAAI,CAACG,IAAI,KAAK,MAAM,EAAE;IACxB,MAAMC,IAAI,GAAGJ,IAAI,CAACI,IAAI,IAAI,EAAE;IAC5B,IAAIA,IAAI,CAACC,IAAI,CAAC,CAAC,CAACC,MAAM,KAAK,CAAC,EAAE,OAAO,IAAI;IACzC,OAAO;MAAEH,IAAI,EAAE,MAAM;MAAEC;IAAK,CAAC;EAC/B;EAEA,IAAIJ,IAAI,CAACG,IAAI,KAAK,KAAK,IAAIH,IAAI,CAACG,IAAI,KAAK,QAAQ,IAAIH,IAAI,CAACG,IAAI,KAAK,OAAO,EAAE;IAC1E,MAAMI,GAAG,GAAG,CAACP,IAAI,CAACQ,IAAI,IAAI,EAAE,EAAEC,WAAW,CAAC,CAAC;;IAE3C;IACA,IAAIb,YAAY,CAACc,GAAG,CAACH,GAAG,CAAC,IAAIN,WAAW,CAACS,GAAG,CAACH,GAAG,CAAC,EAAE;MACjD,OAAO,IAAI;IACb;IAEA,MAAMI,QAAmB,GAAG,EAAE;IAC9B,KAAK,MAAMC,KAAK,IAAIZ,IAAI,CAACW,QAAQ,IAAI,EAAE,EAAE;MACvC,MAAME,SAAS,GAAGd,WAAW,CAACa,KAAK,EAAEX,WAAW,EAAEC,KAAK,GAAG,CAAC,CAAC;MAC5D,IAAIW,SAAS,EAAEF,QAAQ,CAACG,IAAI,CAACD,SAAS,CAAC;IACzC;IAEA,OAAO;MACLV,IAAI,EAAE,SAAS;MACfI,GAAG;MACHQ,UAAU,EAAEf,IAAI,CAACgB,OAAO,IAAI,CAAC,CAAC;MAC9BL;IACF,CAAC;EACH;EAEA,OAAO,IAAI;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASM,SAASA,CACvBC,IAAY,EACZjB,WAAwB,GAAG,IAAIJ,GAAG,CAAC,CAAC,EACzB;EACX,MAAMsB,GAAG,GAAGxB,aAAa,CAACuB,IAAI,CAAC;EAC/B,MAAME,KAAgB,GAAG,EAAE;EAE3B,KAAK,MAAMR,KAAK,IAAKO,GAAG,CAACR,QAAQ,IAAI,EAAE,EAAgB;IACrD,MAAME,SAAS,GAAGd,WAAW,CAACa,KAAK,EAAEX,WAAW,EAAE,CAAC,CAAC;IACpD,IAAIY,SAAS,EAAEO,KAAK,CAACN,IAAI,CAACD,SAAS,CAAC;EACtC;EAEA,OAAOO,KAAK;AACd","ignoreList":[]}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ import { Component } from 'react';
4
+ import { View, Text } from 'react-native';
5
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ /**
7
+ * Catches rendering errors in the HTML renderer tree and
8
+ * displays a fallback UI instead of crashing the host app.
9
+ */
10
+ export class ErrorBoundary extends Component {
11
+ constructor(props) {
12
+ super(props);
13
+ this.state = {
14
+ hasError: false,
15
+ error: null
16
+ };
17
+ }
18
+ static getDerivedStateFromError(error) {
19
+ return {
20
+ hasError: true,
21
+ error
22
+ };
23
+ }
24
+ componentDidCatch(error, info) {
25
+ if (__DEV__) {
26
+ console.error('[HtmlRenderer] Render error caught by ErrorBoundary:', error, info.componentStack);
27
+ }
28
+ this.props.onError?.(error);
29
+ }
30
+ render() {
31
+ if (this.state.hasError) {
32
+ if (this.props.fallback !== undefined) {
33
+ return this.props.fallback;
34
+ }
35
+ return /*#__PURE__*/_jsxs(View, {
36
+ style: fallbackContainer,
37
+ children: [/*#__PURE__*/_jsx(Text, {
38
+ style: fallbackTitle,
39
+ children: "Unable to render HTML content"
40
+ }), __DEV__ && this.state.error && /*#__PURE__*/_jsx(Text, {
41
+ style: fallbackDetail,
42
+ children: this.state.error.message
43
+ })]
44
+ });
45
+ }
46
+ return this.props.children;
47
+ }
48
+ }
49
+ const fallbackContainer = {
50
+ padding: 16,
51
+ backgroundColor: '#fef2f2',
52
+ borderRadius: 8,
53
+ borderWidth: 1,
54
+ borderColor: '#fecaca'
55
+ };
56
+ const fallbackTitle = {
57
+ color: '#991b1b',
58
+ fontSize: 14,
59
+ fontWeight: '600'
60
+ };
61
+ const fallbackDetail = {
62
+ color: '#b91c1c',
63
+ fontSize: 12,
64
+ marginTop: 4
65
+ };
66
+ //# sourceMappingURL=ErrorBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Component","View","Text","jsx","_jsx","jsxs","_jsxs","ErrorBoundary","constructor","props","state","hasError","error","getDerivedStateFromError","componentDidCatch","info","__DEV__","console","componentStack","onError","render","fallback","undefined","style","fallbackContainer","children","fallbackTitle","fallbackDetail","message","padding","backgroundColor","borderRadius","borderWidth","borderColor","color","fontSize","fontWeight","marginTop"],"sourceRoot":"../../../src","sources":["renderer/ErrorBoundary.tsx"],"mappings":";;AAAA,SAASA,SAAS,QAAwC,OAAO;AACjE,SAASC,IAAI,EAAEC,IAAI,QAAwC,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAa1E;AACA;AACA;AACA;AACA,OAAO,MAAMC,aAAa,SAASP,SAAS,CAG1C;EACAQ,WAAWA,CAACC,KAAyB,EAAE;IACrC,KAAK,CAACA,KAAK,CAAC;IACZ,IAAI,CAACC,KAAK,GAAG;MAAEC,QAAQ,EAAE,KAAK;MAAEC,KAAK,EAAE;IAAK,CAAC;EAC/C;EAEA,OAAOC,wBAAwBA,CAACD,KAAY,EAAsB;IAChE,OAAO;MAAED,QAAQ,EAAE,IAAI;MAAEC;IAAM,CAAC;EAClC;EAESE,iBAAiBA,CAACF,KAAY,EAAEG,IAAe,EAAQ;IAC9D,IAAIC,OAAO,EAAE;MACXC,OAAO,CAACL,KAAK,CACX,sDAAsD,EACtDA,KAAK,EACLG,IAAI,CAACG,cACP,CAAC;IACH;IACA,IAAI,CAACT,KAAK,CAACU,OAAO,GAAGP,KAAK,CAAC;EAC7B;EAESQ,MAAMA,CAAA,EAAc;IAC3B,IAAI,IAAI,CAACV,KAAK,CAACC,QAAQ,EAAE;MACvB,IAAI,IAAI,CAACF,KAAK,CAACY,QAAQ,KAAKC,SAAS,EAAE;QACrC,OAAO,IAAI,CAACb,KAAK,CAACY,QAAQ;MAC5B;MAEA,oBACEf,KAAA,CAACL,IAAI;QAACsB,KAAK,EAAEC,iBAAkB;QAAAC,QAAA,gBAC7BrB,IAAA,CAACF,IAAI;UAACqB,KAAK,EAAEG,aAAc;UAAAD,QAAA,EAAC;QAA6B,CAAM,CAAC,EAC/DT,OAAO,IAAI,IAAI,CAACN,KAAK,CAACE,KAAK,iBAC1BR,IAAA,CAACF,IAAI;UAACqB,KAAK,EAAEI,cAAe;UAAAF,QAAA,EAAE,IAAI,CAACf,KAAK,CAACE,KAAK,CAACgB;QAAO,CAAO,CAC9D;MAAA,CACG,CAAC;IAEX;IACA,OAAO,IAAI,CAACnB,KAAK,CAACgB,QAAQ;EAC5B;AACF;AAEA,MAAMD,iBAA4B,GAAG;EACnCK,OAAO,EAAE,EAAE;EACXC,eAAe,EAAE,SAAS;EAC1BC,YAAY,EAAE,CAAC;EACfC,WAAW,EAAE,CAAC;EACdC,WAAW,EAAE;AACf,CAAC;AAED,MAAMP,aAAwB,GAAG;EAC/BQ,KAAK,EAAE,SAAS;EAChBC,QAAQ,EAAE,EAAE;EACZC,UAAU,EAAE;AACd,CAAC;AAED,MAAMT,cAAyB,GAAG;EAChCO,KAAK,EAAE,SAAS;EAChBC,QAAQ,EAAE,EAAE;EACZE,SAAS,EAAE;AACb,CAAC","ignoreList":[]}
@@ -0,0 +1,279 @@
1
+ "use strict";
2
+
3
+ import { Fragment } from 'react';
4
+ import { StyleSheet, View, Text } from 'react-native';
5
+ import { getDefaultTagStyles, mergeStylesForElement } from "../styles/index.js";
6
+ import { INLINE_TAGS, TEXT_BLOCK_TAGS, isInlineContent } from "../utils/index.js";
7
+ import { getAccessibilityProps } from "../utils/accessibility.js";
8
+ import { TextBlock, renderInlineNodes, ImageTag, LinkTag, ListTag, TableTag, BlockTag, InputTag, TextareaTag, ButtonTag, SelectTag, VideoTag, AudioTag } from "./tags/index.js";
9
+
10
+ /**
11
+ * Recursively render an array of DOMNodes into React Native components.
12
+ */
13
+ import { jsx as _jsx } from "react/jsx-runtime";
14
+ export function renderNodes(nodes, ctx, keyPrefix) {
15
+ const defaults = getDefaultTagStyles(ctx.emSize);
16
+ return nodes.map((node, index) => {
17
+ const key = `${keyPrefix}_${index}`;
18
+
19
+ // --- Text node ---
20
+ if (node.type === 'text') {
21
+ return /*#__PURE__*/_jsx(Text, {
22
+ allowFontScaling: ctx.allowFontScaling,
23
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
24
+ ...ctx.defaultTextProps,
25
+ children: node.data
26
+ }, key);
27
+ }
28
+ if (node.type !== 'element') return null;
29
+
30
+ // --- Ignored tags ---
31
+ if (ctx.ignoredTags.has(node.tag)) return null;
32
+
33
+ // --- Compute merged style ---
34
+ const style = mergeStylesForElement(node, defaults, ctx.tagsStyles, ctx.classesStyles, ctx.idsStyles, ctx.ignoredStyles.size > 0 ? ctx.ignoredStyles : undefined, ctx.allowedStyles);
35
+
36
+ // --- Debug logging ---
37
+ if (ctx.debug) {
38
+ console.log(`[HtmlRenderer] <${node.tag}>`, {
39
+ attributes: node.attributes,
40
+ style
41
+ });
42
+ }
43
+
44
+ // --- Custom renderer ---
45
+ const customRenderer = ctx.customRenderers[node.tag];
46
+ if (customRenderer) {
47
+ try {
48
+ const passProps = ctx.renderersProps[node.tag] ?? {};
49
+ const result = customRenderer({
50
+ node,
51
+ children: renderNodes(node.children, ctx, key),
52
+ style,
53
+ attributes: node.attributes,
54
+ passProps,
55
+ renderChildren: childNodes => renderNodes(childNodes, ctx, key),
56
+ contentWidth: ctx.contentWidth
57
+ });
58
+ return /*#__PURE__*/_jsx(Fragment, {
59
+ children: result
60
+ }, key);
61
+ } catch (e) {
62
+ if (ctx.debug) {
63
+ console.error(`[HtmlRenderer] Custom renderer for <${node.tag}> threw:`, e);
64
+ }
65
+ return null;
66
+ }
67
+ }
68
+
69
+ // --- Built-in tag handling ---
70
+ try {
71
+ return renderElement(node, style, key, ctx);
72
+ } catch (e) {
73
+ if (ctx.debug) {
74
+ console.error(`[HtmlRenderer] Error rendering <${node.tag}>:`, e);
75
+ }
76
+ return null;
77
+ }
78
+ }).filter(n => n != null);
79
+ }
80
+ function renderElement(node, style, key, ctx) {
81
+ const {
82
+ tag
83
+ } = node;
84
+ const a11y = getAccessibilityProps(node);
85
+
86
+ // Debug: red border around every node
87
+ const debugStyle = ctx.debug ? {
88
+ borderWidth: 1,
89
+ borderColor: 'red'
90
+ } : undefined;
91
+
92
+ // Self-closing tags
93
+ if (tag === 'br') {
94
+ return /*#__PURE__*/_jsx(Text, {
95
+ allowFontScaling: ctx.allowFontScaling,
96
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
97
+ ...ctx.defaultTextProps,
98
+ children: '\n'
99
+ }, key);
100
+ }
101
+ if (tag === 'hr') {
102
+ return /*#__PURE__*/_jsx(View, {
103
+ style: [hrBaseStyle, style, debugStyle],
104
+ ...a11y
105
+ }, key);
106
+ }
107
+
108
+ // Image
109
+ if (tag === 'img') {
110
+ return /*#__PURE__*/_jsx(ImageTag, {
111
+ node: node,
112
+ style: style,
113
+ nodeKey: key,
114
+ ctx: ctx
115
+ }, key);
116
+ }
117
+
118
+ // Link (block-level — inline links handled in renderInlineNodes)
119
+ if (tag === 'a') {
120
+ return /*#__PURE__*/_jsx(LinkTag, {
121
+ node: node,
122
+ style: style,
123
+ nodeKey: key,
124
+ ctx: ctx,
125
+ renderNodes: renderNodes
126
+ }, key);
127
+ }
128
+
129
+ // Lists
130
+ if (tag === 'ul' || tag === 'ol') {
131
+ return /*#__PURE__*/_jsx(ListTag, {
132
+ node: node,
133
+ style: style,
134
+ nodeKey: key,
135
+ ctx: ctx,
136
+ renderNodes: renderNodes
137
+ }, key);
138
+ }
139
+
140
+ // Table
141
+ if (tag === 'table') {
142
+ return /*#__PURE__*/_jsx(TableTag, {
143
+ node: node,
144
+ style: style,
145
+ nodeKey: key,
146
+ ctx: ctx,
147
+ renderNodes: renderNodes
148
+ }, key);
149
+ }
150
+
151
+ // Table row
152
+ if (tag === 'tr') {
153
+ return /*#__PURE__*/_jsx(View, {
154
+ style: [style, {
155
+ flexDirection: 'row'
156
+ }],
157
+ ...a11y,
158
+ children: renderNodes(node.children, ctx, key)
159
+ }, key);
160
+ }
161
+
162
+ // Form elements (read-only)
163
+ if (tag === 'input') {
164
+ return /*#__PURE__*/_jsx(InputTag, {
165
+ node: node,
166
+ style: style,
167
+ nodeKey: key,
168
+ ctx: ctx
169
+ }, key);
170
+ }
171
+ if (tag === 'textarea') {
172
+ return /*#__PURE__*/_jsx(TextareaTag, {
173
+ node: node,
174
+ style: style,
175
+ nodeKey: key,
176
+ ctx: ctx
177
+ }, key);
178
+ }
179
+ if (tag === 'button') {
180
+ return /*#__PURE__*/_jsx(ButtonTag, {
181
+ node: node,
182
+ style: style,
183
+ nodeKey: key,
184
+ ctx: ctx
185
+ }, key);
186
+ }
187
+ if (tag === 'select') {
188
+ return /*#__PURE__*/_jsx(SelectTag, {
189
+ node: node,
190
+ style: style,
191
+ nodeKey: key,
192
+ ctx: ctx
193
+ }, key);
194
+ }
195
+
196
+ // Media placeholders
197
+ if (tag === 'video') {
198
+ return /*#__PURE__*/_jsx(VideoTag, {
199
+ node: node,
200
+ style: style,
201
+ nodeKey: key,
202
+ ctx: ctx
203
+ }, key);
204
+ }
205
+ if (tag === 'audio') {
206
+ return /*#__PURE__*/_jsx(AudioTag, {
207
+ node: node,
208
+ style: style,
209
+ nodeKey: key,
210
+ ctx: ctx
211
+ }, key);
212
+ }
213
+
214
+ // Inline tags at top level — wrap in Text
215
+ if (INLINE_TAGS.has(tag)) {
216
+ return /*#__PURE__*/_jsx(Text, {
217
+ style: debugStyle ? [style, debugStyle] : style,
218
+ allowFontScaling: ctx.allowFontScaling,
219
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
220
+ ...a11y,
221
+ ...ctx.defaultTextProps,
222
+ children: renderInlineNodes(node.children, ctx, key, renderNodes)
223
+ }, key);
224
+ }
225
+
226
+ // Text-block tags (p, h1-h6, li, td, th, pre, label)
227
+ if (TEXT_BLOCK_TAGS.has(tag)) {
228
+ return /*#__PURE__*/_jsx(TextBlock, {
229
+ tag: tag,
230
+ node: node,
231
+ style: style,
232
+ children: node.children,
233
+ nodeKey: key,
234
+ ctx: ctx,
235
+ renderNodes: renderNodes
236
+ }, key);
237
+ }
238
+
239
+ // Unknown tag — log warning in debug mode
240
+ if (ctx.debug) {
241
+ console.warn(`[HtmlRenderer] Unknown tag <${tag}>, rendering children.`);
242
+ }
243
+
244
+ // Unknown / generic block elements — render children, never crash
245
+ if (node.children.length === 0) {
246
+ return null;
247
+ }
248
+
249
+ // If all children are inline, render as text
250
+ if (isInlineContent(node.children)) {
251
+ return /*#__PURE__*/_jsx(Text, {
252
+ style: debugStyle ? [style, debugStyle] : style,
253
+ allowFontScaling: ctx.allowFontScaling,
254
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
255
+ ...a11y,
256
+ ...ctx.defaultTextProps,
257
+ children: renderInlineNodes(node.children, ctx, key, renderNodes)
258
+ }, key);
259
+ }
260
+
261
+ // Otherwise render as a block container
262
+ return /*#__PURE__*/_jsx(BlockTag, {
263
+ node: node,
264
+ style: debugStyle ? {
265
+ ...style,
266
+ ...debugStyle
267
+ } : style,
268
+ children: node.children,
269
+ nodeKey: key,
270
+ ctx: ctx,
271
+ renderNodes: renderNodes
272
+ }, key);
273
+ }
274
+ const hrBaseStyle = {
275
+ width: '100%',
276
+ height: StyleSheet.hairlineWidth,
277
+ backgroundColor: '#ccc'
278
+ };
279
+ //# sourceMappingURL=NodeRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Fragment","StyleSheet","View","Text","getDefaultTagStyles","mergeStylesForElement","INLINE_TAGS","TEXT_BLOCK_TAGS","isInlineContent","getAccessibilityProps","TextBlock","renderInlineNodes","ImageTag","LinkTag","ListTag","TableTag","BlockTag","InputTag","TextareaTag","ButtonTag","SelectTag","VideoTag","AudioTag","jsx","_jsx","renderNodes","nodes","ctx","keyPrefix","defaults","emSize","map","node","index","key","type","allowFontScaling","maxFontSizeMultiplier","defaultTextProps","children","data","ignoredTags","has","tag","style","tagsStyles","classesStyles","idsStyles","ignoredStyles","size","undefined","allowedStyles","debug","console","log","attributes","customRenderer","customRenderers","passProps","renderersProps","result","renderChildren","childNodes","contentWidth","e","error","renderElement","filter","n","a11y","debugStyle","borderWidth","borderColor","hrBaseStyle","nodeKey","flexDirection","warn","length","width","height","hairlineWidth","backgroundColor"],"sourceRoot":"../../../src","sources":["renderer/NodeRenderer.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ export { renderNodes } from "./NodeRenderer.js";
4
+ export { ErrorBoundary } from "./ErrorBoundary.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["renderNodes","ErrorBoundary"],"sourceRoot":"../../../src","sources":["renderer/index.tsx"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,mBAAgB;AAC5C,SAASC,aAAa,QAAQ,oBAAiB","ignoreList":[]}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ import { memo } from 'react';
4
+ import { View } from 'react-native';
5
+ import { getAccessibilityProps } from "../../utils/accessibility.js";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ /**
8
+ * Generic block-level tag renderer.
9
+ * Used for `<div>`, `<section>`, `<article>`, `<header>`, `<footer>`,
10
+ * `<main>`, `<nav>`, `<aside>`, `<blockquote>`, `<figure>`, etc.
11
+ */
12
+ export const BlockTag = /*#__PURE__*/memo(function BlockTag({
13
+ node,
14
+ style,
15
+ children,
16
+ nodeKey,
17
+ ctx,
18
+ renderNodes
19
+ }) {
20
+ const a11y = getAccessibilityProps(node);
21
+ return /*#__PURE__*/_jsx(View, {
22
+ style: style,
23
+ ...a11y,
24
+ ...ctx.defaultViewProps,
25
+ children: renderNodes(children, ctx, nodeKey)
26
+ }, nodeKey);
27
+ });
28
+ //# sourceMappingURL=BlockTags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","View","getAccessibilityProps","jsx","_jsx","BlockTag","node","style","children","nodeKey","ctx","renderNodes","a11y","defaultViewProps"],"sourceRoot":"../../../../src","sources":["renderer/tags/BlockTags.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAwB,OAAO;AAC5C,SAASC,IAAI,QAAwB,cAAc;AAOnD,SAASC,qBAAqB,QAAQ,8BAA2B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAelE;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,gBAAGL,IAAI,CAAC,SAASK,QAAQA,CAAC;EAC7CC,IAAI;EACJC,KAAK;EACLC,QAAQ;EACRC,OAAO;EACPC,GAAG;EACHC;AACa,CAAC,EAAE;EAChB,MAAMC,IAAI,GAAGV,qBAAqB,CAACI,IAAI,CAAC;EAExC,oBACEF,IAAA,CAACH,IAAI;IAEHM,KAAK,EAAEA,KAAmB;IAAA,GACtBK,IAAI;IAAA,GACJF,GAAG,CAACG,gBAAgB;IAAAL,QAAA,EAEvBG,WAAW,CAACH,QAAQ,EAAEE,GAAG,EAAED,OAAO;EAAC,GAL/BA,OAMD,CAAC;AAEX,CAAC,CAAC","ignoreList":[]}