@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,87 @@
1
+ "use strict";
2
+
3
+ import { memo } from 'react';
4
+ import { Text } from 'react-native';
5
+ import { INLINE_TAGS, isInlineContent } from "../../utils/index.js";
6
+ import { getAccessibilityProps } from "../../utils/accessibility.js";
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ /**
9
+ * Renders a text-block tag (`<p>`, `<h1>`-`<h6>`, `<pre>`, `<label>`, etc.)
10
+ * as a single `<Text>` component.
11
+ */
12
+ export const TextBlock = /*#__PURE__*/memo(function TextBlock({
13
+ node,
14
+ style,
15
+ children,
16
+ nodeKey,
17
+ ctx,
18
+ renderNodes
19
+ }) {
20
+ const content = isInlineContent(children) ? renderInlineNodes(children, ctx, nodeKey, renderNodes) : renderNodes(children, ctx, nodeKey);
21
+ const a11y = getAccessibilityProps(node);
22
+ const debugStyle = ctx.debug ? {
23
+ borderWidth: 1,
24
+ borderColor: 'red'
25
+ } : undefined;
26
+ return /*#__PURE__*/_jsx(Text, {
27
+ style: debugStyle ? [style, debugStyle] : style,
28
+ allowFontScaling: ctx.allowFontScaling,
29
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
30
+ ...a11y,
31
+ ...ctx.defaultTextProps,
32
+ children: content
33
+ }, nodeKey);
34
+ });
35
+
36
+ /**
37
+ * Renders inline content (text nodes + inline tags) as nested `<Text>` elements.
38
+ */
39
+ export function renderInlineNodes(nodes, ctx, keyPrefix, renderNodes) {
40
+ return nodes.map((node, i) => {
41
+ const key = `${keyPrefix}_${i}`;
42
+ if (node.type === 'text') {
43
+ return node.data;
44
+ }
45
+ if (node.type === 'element' && INLINE_TAGS.has(node.tag)) {
46
+ if (node.tag === 'br') {
47
+ return '\n';
48
+ }
49
+ if (node.tag === 'a') {
50
+ const href = node.attributes.href ?? '';
51
+ const linkStyle = {
52
+ color: '#1a73e8',
53
+ textDecorationLine: 'underline',
54
+ ...ctx.tagsStyles.a
55
+ };
56
+ return /*#__PURE__*/_jsx(Text, {
57
+ style: linkStyle,
58
+ onPress: () => ctx.onLinkPress?.(href, node.attributes),
59
+ accessibilityRole: "link",
60
+ accessibilityHint: `Opens ${href}`,
61
+ accessibilityLabel: node.attributes['aria-label'] ?? undefined,
62
+ allowFontScaling: ctx.allowFontScaling,
63
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
64
+ children: renderInlineNodes(node.children, ctx, key, renderNodes)
65
+ }, key);
66
+ }
67
+ const inlineStyle = {
68
+ ...ctx.tagsStyles[node.tag]
69
+ };
70
+
71
+ // Check aria-hidden
72
+ const ariaHidden = node.attributes['aria-hidden'] === 'true';
73
+ return /*#__PURE__*/_jsx(Text, {
74
+ style: inlineStyle,
75
+ accessible: ariaHidden ? false : undefined,
76
+ importantForAccessibility: ariaHidden ? 'no-hide-descendants' : undefined,
77
+ allowFontScaling: ctx.allowFontScaling,
78
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
79
+ children: renderInlineNodes(node.children, ctx, key, renderNodes)
80
+ }, key);
81
+ }
82
+
83
+ // Non-inline child — fall back
84
+ return renderNodes([node], ctx, key);
85
+ }).filter(n => n != null);
86
+ }
87
+ //# sourceMappingURL=TextTags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","Text","INLINE_TAGS","isInlineContent","getAccessibilityProps","jsx","_jsx","TextBlock","node","style","children","nodeKey","ctx","renderNodes","content","renderInlineNodes","a11y","debugStyle","debug","borderWidth","borderColor","undefined","allowFontScaling","maxFontSizeMultiplier","defaultTextProps","nodes","keyPrefix","map","i","key","type","data","has","tag","href","attributes","linkStyle","color","textDecorationLine","tagsStyles","a","onPress","onLinkPress","accessibilityRole","accessibilityHint","accessibilityLabel","inlineStyle","ariaHidden","accessible","importantForAccessibility","filter","n"],"sourceRoot":"../../../../src","sources":["renderer/tags/TextTags.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ export { TextBlock, renderInlineNodes } from "./TextTags.js";
4
+ export { ImageTag } from "./ImageTag.js";
5
+ export { LinkTag } from "./LinkTag.js";
6
+ export { ListTag } from "./ListTags.js";
7
+ export { TableTag } from "./TableTags.js";
8
+ export { BlockTag } from "./BlockTags.js";
9
+ export { InputTag, TextareaTag, ButtonTag, SelectTag } from "./FormTags.js";
10
+ export { VideoTag, AudioTag } from "./MediaTags.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TextBlock","renderInlineNodes","ImageTag","LinkTag","ListTag","TableTag","BlockTag","InputTag","TextareaTag","ButtonTag","SelectTag","VideoTag","AudioTag"],"sourceRoot":"../../../../src","sources":["renderer/tags/index.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,iBAAiB,QAAQ,eAAY;AACzD,SAASC,QAAQ,QAAQ,eAAY;AACrC,SAASC,OAAO,QAAQ,cAAW;AACnC,SAASC,OAAO,QAAQ,eAAY;AACpC,SAASC,QAAQ,QAAQ,gBAAa;AACtC,SAASC,QAAQ,QAAQ,gBAAa;AACtC,SAASC,QAAQ,EAAEC,WAAW,EAAEC,SAAS,EAAEC,SAAS,QAAQ,eAAY;AACxE,SAASC,QAAQ,EAAEC,QAAQ,QAAQ,gBAAa","ignoreList":[]}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ import transform from 'css-to-react-native';
4
+ /**
5
+ * Parse an inline CSS `style` attribute string into a React Native style object.
6
+ *
7
+ * @param styleString - The raw CSS string (e.g. `"color: red; font-size: 18px"`).
8
+ * @param ignoredStyles - CSS property names to exclude.
9
+ * @param allowedStyles - If provided, only these CSS property names are kept.
10
+ * @returns A React Native compatible style object.
11
+ */
12
+ export function parseInlineStyle(styleString, ignoredStyles, allowedStyles) {
13
+ if (!styleString) return {};
14
+ try {
15
+ const pairs = styleString.split(';').map(s => s.trim()).filter(Boolean).map(declaration => {
16
+ const colonIndex = declaration.indexOf(':');
17
+ if (colonIndex === -1) return null;
18
+ const prop = declaration.slice(0, colonIndex).trim();
19
+ const value = declaration.slice(colonIndex + 1).trim();
20
+ return [prop, value];
21
+ }).filter(pair => {
22
+ if (!pair) return false;
23
+ const [prop] = pair;
24
+ if (ignoredStyles?.has(prop)) return false;
25
+ if (allowedStyles && !allowedStyles.has(prop)) return false;
26
+ return true;
27
+ });
28
+ if (pairs.length === 0) return {};
29
+ return transform(pairs);
30
+ } catch {
31
+ return {};
32
+ }
33
+ }
34
+ //# sourceMappingURL=cssToRn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["transform","parseInlineStyle","styleString","ignoredStyles","allowedStyles","pairs","split","map","s","trim","filter","Boolean","declaration","colonIndex","indexOf","prop","slice","value","pair","has","length"],"sourceRoot":"../../../src","sources":["styles/cssToRn.ts"],"mappings":";;AAAA,OAAOA,SAAS,MAAM,qBAAqB;AAG3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,WAAmB,EACnBC,aAA2B,EAC3BC,aAAkC,EACzB;EACT,IAAI,CAACF,WAAW,EAAE,OAAO,CAAC,CAAC;EAE3B,IAAI;IACF,MAAMG,KAAyB,GAAGH,WAAW,CAC1CI,KAAK,CAAC,GAAG,CAAC,CACVC,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC,CACpBC,MAAM,CAACC,OAAO,CAAC,CACfJ,GAAG,CAAEK,WAAW,IAAK;MACpB,MAAMC,UAAU,GAAGD,WAAW,CAACE,OAAO,CAAC,GAAG,CAAC;MAC3C,IAAID,UAAU,KAAK,CAAC,CAAC,EAAE,OAAO,IAAI;MAClC,MAAME,IAAI,GAAGH,WAAW,CAACI,KAAK,CAAC,CAAC,EAAEH,UAAU,CAAC,CAACJ,IAAI,CAAC,CAAC;MACpD,MAAMQ,KAAK,GAAGL,WAAW,CAACI,KAAK,CAACH,UAAU,GAAG,CAAC,CAAC,CAACJ,IAAI,CAAC,CAAC;MACtD,OAAO,CAACM,IAAI,EAAEE,KAAK,CAAC;IACtB,CAAC,CAAC,CACDP,MAAM,CAAEQ,IAAI,IAA+B;MAC1C,IAAI,CAACA,IAAI,EAAE,OAAO,KAAK;MACvB,MAAM,CAACH,IAAI,CAAC,GAAGG,IAAI;MACnB,IAAIf,aAAa,EAAEgB,GAAG,CAACJ,IAAI,CAAC,EAAE,OAAO,KAAK;MAC1C,IAAIX,aAAa,IAAI,CAACA,aAAa,CAACe,GAAG,CAACJ,IAAI,CAAC,EAAE,OAAO,KAAK;MAC3D,OAAO,IAAI;IACb,CAAC,CAAC;IAEJ,IAAIV,KAAK,CAACe,MAAM,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IAEjC,OAAOpB,SAAS,CAACK,KAAK,CAAC;EACzB,CAAC,CAAC,MAAM;IACN,OAAO,CAAC,CAAC;EACX;AACF","ignoreList":[]}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Default dark mode style overrides. These are merged on top of the
5
+ * default light-mode tag styles when the system color scheme is 'dark'.
6
+ */
7
+ export function getDefaultDarkModeStyles() {
8
+ const textColor = {
9
+ color: '#e0e0e0'
10
+ };
11
+ return {
12
+ // Text elements — light text on dark background
13
+ p: textColor,
14
+ h1: textColor,
15
+ h2: textColor,
16
+ h3: textColor,
17
+ h4: textColor,
18
+ h5: textColor,
19
+ h6: textColor,
20
+ li: textColor,
21
+ dt: textColor,
22
+ dd: textColor,
23
+ label: textColor,
24
+ // Inline text
25
+ a: {
26
+ color: '#8ab4f8',
27
+ textDecorationLine: 'underline'
28
+ },
29
+ mark: {
30
+ backgroundColor: '#5c5c00',
31
+ color: '#e0e0e0'
32
+ },
33
+ code: {
34
+ backgroundColor: '#2d2d2d',
35
+ color: '#e0e0e0'
36
+ },
37
+ // Preformatted
38
+ pre: {
39
+ backgroundColor: '#1e1e1e',
40
+ color: '#e0e0e0'
41
+ },
42
+ // Blockquote
43
+ blockquote: {
44
+ borderLeftColor: '#555'
45
+ },
46
+ // Tables
47
+ th: {
48
+ ...textColor,
49
+ backgroundColor: '#2d2d2d',
50
+ borderColor: '#444'
51
+ },
52
+ td: {
53
+ ...textColor,
54
+ borderColor: '#444'
55
+ },
56
+ // Horizontal rule
57
+ hr: {
58
+ borderBottomColor: '#555'
59
+ },
60
+ // Forms (read-only)
61
+ input: {
62
+ ...textColor,
63
+ borderColor: '#555',
64
+ backgroundColor: '#2d2d2d'
65
+ },
66
+ textarea: {
67
+ ...textColor,
68
+ borderColor: '#555',
69
+ backgroundColor: '#2d2d2d'
70
+ },
71
+ button: {
72
+ backgroundColor: '#444'
73
+ },
74
+ select: {
75
+ ...textColor,
76
+ borderColor: '#555',
77
+ backgroundColor: '#2d2d2d'
78
+ }
79
+ };
80
+ }
81
+ //# sourceMappingURL=darkModeStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getDefaultDarkModeStyles","textColor","color","p","h1","h2","h3","h4","h5","h6","li","dt","dd","label","a","textDecorationLine","mark","backgroundColor","code","pre","blockquote","borderLeftColor","th","borderColor","td","hr","borderBottomColor","input","textarea","button","select"],"sourceRoot":"../../../src","sources":["styles/darkModeStyles.ts"],"mappings":";;AAGA;AACA;AACA;AACA;AACA,OAAO,SAASA,wBAAwBA,CAAA,EAAe;EACrD,MAAMC,SAAoB,GAAG;IAAEC,KAAK,EAAE;EAAU,CAAC;EAEjD,OAAO;IACL;IACAC,CAAC,EAAEF,SAAS;IACZG,EAAE,EAAEH,SAAS;IACbI,EAAE,EAAEJ,SAAS;IACbK,EAAE,EAAEL,SAAS;IACbM,EAAE,EAAEN,SAAS;IACbO,EAAE,EAAEP,SAAS;IACbQ,EAAE,EAAER,SAAS;IACbS,EAAE,EAAET,SAAS;IACbU,EAAE,EAAEV,SAAS;IACbW,EAAE,EAAEX,SAAS;IACbY,KAAK,EAAEZ,SAAS;IAEhB;IACAa,CAAC,EAAE;MAAEZ,KAAK,EAAE,SAAS;MAAEa,kBAAkB,EAAE;IAAY,CAAc;IACrEC,IAAI,EAAE;MAAEC,eAAe,EAAE,SAAS;MAAEf,KAAK,EAAE;IAAU,CAAc;IACnEgB,IAAI,EAAE;MACJD,eAAe,EAAE,SAAS;MAC1Bf,KAAK,EAAE;IACT,CAAc;IAEd;IACAiB,GAAG,EAAE;MACHF,eAAe,EAAE,SAAS;MAC1Bf,KAAK,EAAE;IACT,CAAc;IAEd;IACAkB,UAAU,EAAE;MACVC,eAAe,EAAE;IACnB,CAAc;IAEd;IACAC,EAAE,EAAE;MACF,GAAGrB,SAAS;MACZgB,eAAe,EAAE,SAAS;MAC1BM,WAAW,EAAE;IACf,CAAc;IACdC,EAAE,EAAE;MACF,GAAGvB,SAAS;MACZsB,WAAW,EAAE;IACf,CAAc;IAEd;IACAE,EAAE,EAAE;MACFC,iBAAiB,EAAE;IACrB,CAAc;IAEd;IACAC,KAAK,EAAE;MACL,GAAG1B,SAAS;MACZsB,WAAW,EAAE,MAAM;MACnBN,eAAe,EAAE;IACnB,CAAc;IACdW,QAAQ,EAAE;MACR,GAAG3B,SAAS;MACZsB,WAAW,EAAE,MAAM;MACnBN,eAAe,EAAE;IACnB,CAAc;IACdY,MAAM,EAAE;MACNZ,eAAe,EAAE;IACnB,CAAc;IACda,MAAM,EAAE;MACN,GAAG7B,SAAS;MACZsB,WAAW,EAAE,MAAM;MACnBN,eAAe,EAAE;IACnB;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Returns the default styles for all supported HTML tags.
5
+ *
6
+ * @param emSize - Base em unit in pixels (used for heading sizes etc.).
7
+ */
8
+ export function getDefaultTagStyles(emSize) {
9
+ const base = {
10
+ fontSize: emSize
11
+ };
12
+ return {
13
+ // Block text
14
+ p: {
15
+ ...base,
16
+ marginVertical: 4
17
+ },
18
+ h1: {
19
+ ...base,
20
+ fontSize: emSize * 2,
21
+ fontWeight: 'bold',
22
+ marginVertical: 10
23
+ },
24
+ h2: {
25
+ ...base,
26
+ fontSize: emSize * 1.5,
27
+ fontWeight: 'bold',
28
+ marginVertical: 9
29
+ },
30
+ h3: {
31
+ ...base,
32
+ fontSize: emSize * 1.17,
33
+ fontWeight: 'bold',
34
+ marginVertical: 8
35
+ },
36
+ h4: {
37
+ ...base,
38
+ fontWeight: 'bold',
39
+ marginVertical: 6
40
+ },
41
+ h5: {
42
+ ...base,
43
+ fontSize: emSize * 0.83,
44
+ fontWeight: 'bold',
45
+ marginVertical: 5
46
+ },
47
+ h6: {
48
+ ...base,
49
+ fontSize: emSize * 0.67,
50
+ fontWeight: 'bold',
51
+ marginVertical: 4
52
+ },
53
+ // Inline text
54
+ strong: {
55
+ fontWeight: 'bold'
56
+ },
57
+ b: {
58
+ fontWeight: 'bold'
59
+ },
60
+ em: {
61
+ fontStyle: 'italic'
62
+ },
63
+ i: {
64
+ fontStyle: 'italic'
65
+ },
66
+ u: {
67
+ textDecorationLine: 'underline'
68
+ },
69
+ s: {
70
+ textDecorationLine: 'line-through'
71
+ },
72
+ strike: {
73
+ textDecorationLine: 'line-through'
74
+ },
75
+ del: {
76
+ textDecorationLine: 'line-through'
77
+ },
78
+ ins: {
79
+ textDecorationLine: 'underline'
80
+ },
81
+ mark: {
82
+ backgroundColor: '#ff0'
83
+ },
84
+ small: {
85
+ fontSize: emSize * 0.8
86
+ },
87
+ sub: {
88
+ fontSize: emSize * 0.75
89
+ },
90
+ sup: {
91
+ fontSize: emSize * 0.75
92
+ },
93
+ code: {
94
+ fontFamily: 'monospace',
95
+ backgroundColor: '#f0f0f0',
96
+ paddingHorizontal: 3
97
+ },
98
+ // Links
99
+ a: {
100
+ color: '#1a73e8',
101
+ textDecorationLine: 'underline'
102
+ },
103
+ // Lists
104
+ ul: {
105
+ marginVertical: 4,
106
+ paddingLeft: 20
107
+ },
108
+ ol: {
109
+ marginVertical: 4,
110
+ paddingLeft: 20
111
+ },
112
+ li: {
113
+ ...base,
114
+ marginVertical: 2
115
+ },
116
+ // Separators
117
+ hr: {
118
+ marginVertical: 8
119
+ },
120
+ // Preformatted
121
+ pre: {
122
+ ...base,
123
+ fontFamily: 'monospace',
124
+ backgroundColor: '#f5f5f5',
125
+ padding: 10,
126
+ borderRadius: 4,
127
+ marginVertical: 6
128
+ },
129
+ // Blockquote
130
+ blockquote: {
131
+ borderLeftWidth: 3,
132
+ borderLeftColor: '#ccc',
133
+ paddingLeft: 12,
134
+ marginVertical: 6,
135
+ marginLeft: 0
136
+ },
137
+ // Tables
138
+ table: {
139
+ marginVertical: 6
140
+ },
141
+ th: {
142
+ ...base,
143
+ fontWeight: 'bold',
144
+ padding: 6,
145
+ borderWidth: 1,
146
+ borderColor: '#ddd',
147
+ backgroundColor: '#f9f9f9'
148
+ },
149
+ td: {
150
+ ...base,
151
+ padding: 6,
152
+ borderWidth: 1,
153
+ borderColor: '#ddd'
154
+ },
155
+ tr: {
156
+ flexDirection: 'row'
157
+ },
158
+ // Block containers
159
+ div: {},
160
+ section: {},
161
+ article: {},
162
+ header: {},
163
+ footer: {},
164
+ main: {},
165
+ nav: {},
166
+ aside: {},
167
+ // Images
168
+ img: {},
169
+ // Forms (read-only)
170
+ input: {
171
+ borderWidth: 1,
172
+ borderColor: '#ccc',
173
+ borderRadius: 4,
174
+ padding: 6,
175
+ marginVertical: 2,
176
+ ...base
177
+ },
178
+ textarea: {
179
+ borderWidth: 1,
180
+ borderColor: '#ccc',
181
+ borderRadius: 4,
182
+ padding: 6,
183
+ marginVertical: 2,
184
+ minHeight: 60,
185
+ ...base
186
+ },
187
+ button: {
188
+ backgroundColor: '#e0e0e0',
189
+ borderRadius: 4,
190
+ padding: 8,
191
+ marginVertical: 2,
192
+ alignItems: 'center'
193
+ },
194
+ select: {
195
+ borderWidth: 1,
196
+ borderColor: '#ccc',
197
+ borderRadius: 4,
198
+ padding: 6,
199
+ marginVertical: 2,
200
+ ...base
201
+ },
202
+ // Definition lists
203
+ dl: {
204
+ marginVertical: 4
205
+ },
206
+ dt: {
207
+ ...base,
208
+ fontWeight: 'bold',
209
+ marginVertical: 2
210
+ },
211
+ dd: {
212
+ ...base,
213
+ marginLeft: 20,
214
+ marginVertical: 2
215
+ }
216
+ };
217
+ }
218
+ //# sourceMappingURL=defaultStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getDefaultTagStyles","emSize","base","fontSize","p","marginVertical","h1","fontWeight","h2","h3","h4","h5","h6","strong","b","em","fontStyle","i","u","textDecorationLine","s","strike","del","ins","mark","backgroundColor","small","sub","sup","code","fontFamily","paddingHorizontal","a","color","ul","paddingLeft","ol","li","hr","pre","padding","borderRadius","blockquote","borderLeftWidth","borderLeftColor","marginLeft","table","th","borderWidth","borderColor","td","tr","flexDirection","div","section","article","header","footer","main","nav","aside","img","input","textarea","minHeight","button","alignItems","select","dl","dt","dd"],"sourceRoot":"../../../src","sources":["styles/defaultStyles.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ export { parseInlineStyle } from "./cssToRn.js";
4
+ export { getDefaultTagStyles } from "./defaultStyles.js";
5
+ export { getDefaultDarkModeStyles } from "./darkModeStyles.js";
6
+ export { mergeStylesForElement } from "./mergeStyles.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["parseInlineStyle","getDefaultTagStyles","getDefaultDarkModeStyles","mergeStylesForElement"],"sourceRoot":"../../../src","sources":["styles/index.ts"],"mappings":";;AAAA,SAASA,gBAAgB,QAAQ,cAAW;AAC5C,SAASC,mBAAmB,QAAQ,oBAAiB;AACrD,SAASC,wBAAwB,QAAQ,qBAAkB;AAC3D,SAASC,qBAAqB,QAAQ,kBAAe","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ import { parseInlineStyle } from "./cssToRn.js";
4
+
5
+ /**
6
+ * Merge all style layers for a given DOM element in the correct cascade order:
7
+ *
8
+ * defaultTagStyle → tagsStyles → classesStyles → idsStyles → inline style
9
+ *
10
+ * Later layers override earlier ones.
11
+ */
12
+ export function mergeStylesForElement(node, defaultStyles, tagsStyles, classesStyles, idsStyles, ignoredStyles, allowedStyles) {
13
+ // 1. Default tag style
14
+ const base = defaultStyles[node.tag] ?? {};
15
+
16
+ // 2. User tag override
17
+ const tagOverride = tagsStyles[node.tag] ?? {};
18
+
19
+ // 3. Class-based styles
20
+ let classStyle = {};
21
+ const className = node.attributes.class;
22
+ if (className) {
23
+ const classes = className.split(/\s+/).filter(Boolean);
24
+ for (const cls of classes) {
25
+ const s = classesStyles[cls];
26
+ if (s) classStyle = {
27
+ ...classStyle,
28
+ ...s
29
+ };
30
+ }
31
+ }
32
+
33
+ // 4. ID-based style
34
+ const id = node.attributes.id;
35
+ const idStyle = id ? idsStyles[id] ?? {} : {};
36
+
37
+ // 5. Inline style
38
+ const inlineStyle = node.attributes.style ? parseInlineStyle(node.attributes.style, ignoredStyles, allowedStyles) : {};
39
+ return {
40
+ ...base,
41
+ ...tagOverride,
42
+ ...classStyle,
43
+ ...idStyle,
44
+ ...inlineStyle
45
+ };
46
+ }
47
+ //# sourceMappingURL=mergeStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["parseInlineStyle","mergeStylesForElement","node","defaultStyles","tagsStyles","classesStyles","idsStyles","ignoredStyles","allowedStyles","base","tag","tagOverride","classStyle","className","attributes","class","classes","split","filter","Boolean","cls","s","id","idStyle","inlineStyle","style"],"sourceRoot":"../../../src","sources":["styles/mergeStyles.ts"],"mappings":";;AAOA,SAASA,gBAAgB,QAAQ,cAAW;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CACnCC,IAAgB,EAChBC,aAAyB,EACzBC,UAAsB,EACtBC,aAA4B,EAC5BC,SAAoB,EACpBC,aAA2B,EAC3BC,aAAkC,EACzB;EACT;EACA,MAAMC,IAAa,GAAIN,aAAa,CAACD,IAAI,CAACQ,GAAG,CAAC,IAAgB,CAAC,CAAC;;EAEhE;EACA,MAAMC,WAAoB,GAAIP,UAAU,CAACF,IAAI,CAACQ,GAAG,CAAC,IAAgB,CAAC,CAAC;;EAEpE;EACA,IAAIE,UAAmB,GAAG,CAAC,CAAC;EAC5B,MAAMC,SAAS,GAAGX,IAAI,CAACY,UAAU,CAACC,KAAK;EACvC,IAAIF,SAAS,EAAE;IACb,MAAMG,OAAO,GAAGH,SAAS,CAACI,KAAK,CAAC,KAAK,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC;IACtD,KAAK,MAAMC,GAAG,IAAIJ,OAAO,EAAE;MACzB,MAAMK,CAAC,GAAGhB,aAAa,CAACe,GAAG,CAAC;MAC5B,IAAIC,CAAC,EAAET,UAAU,GAAG;QAAE,GAAGA,UAAU;QAAE,GAAGS;MAAE,CAAY;IACxD;EACF;;EAEA;EACA,MAAMC,EAAE,GAAGpB,IAAI,CAACY,UAAU,CAACQ,EAAE;EAC7B,MAAMC,OAAgB,GAAGD,EAAE,GAAKhB,SAAS,CAACgB,EAAE,CAAC,IAAgB,CAAC,CAAC,GAAI,CAAC,CAAC;;EAErE;EACA,MAAME,WAAW,GAAGtB,IAAI,CAACY,UAAU,CAACW,KAAK,GACrCzB,gBAAgB,CAACE,IAAI,CAACY,UAAU,CAACW,KAAK,EAAElB,aAAa,EAAEC,aAAa,CAAC,GACrE,CAAC,CAAC;EAEN,OAAO;IACL,GAAGC,IAAI;IACP,GAAGE,WAAW;IACd,GAAGC,UAAU;IACb,GAAGW,OAAO;IACV,GAAGC;EACL,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/index.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ import { extractTextContent } from "./index.js";
4
+
5
+ /** Map HTML tags to React Native accessibility roles. */
6
+ const TAG_TO_ROLE = {
7
+ a: 'link',
8
+ button: 'button',
9
+ img: 'image',
10
+ h1: 'header',
11
+ h2: 'header',
12
+ h3: 'header',
13
+ h4: 'header',
14
+ h5: 'header',
15
+ h6: 'header',
16
+ input: 'none',
17
+ textarea: 'none',
18
+ nav: 'menu',
19
+ form: 'none',
20
+ summary: 'button'
21
+ };
22
+
23
+ /** Accessibility props derived from a DOM element's attributes. */
24
+
25
+ /**
26
+ * Extract accessibility props from a DOMElement's HTML attributes.
27
+ * Supports: aria-label, aria-hidden, aria-role, role, alt, title,
28
+ * aria-disabled, aria-selected, aria-checked, aria-busy, aria-expanded.
29
+ */
30
+ export function getAccessibilityProps(node) {
31
+ const attrs = node.attributes;
32
+ const props = {};
33
+
34
+ // Role: aria-role > role attribute > tag-based default
35
+ const ariaRole = attrs['aria-role'] ?? attrs.role;
36
+ if (ariaRole) {
37
+ props.accessibilityRole = ariaRole;
38
+ } else if (TAG_TO_ROLE[node.tag]) {
39
+ props.accessibilityRole = TAG_TO_ROLE[node.tag];
40
+ }
41
+
42
+ // Label: aria-label > alt > title > text content for certain tags
43
+ const ariaLabel = attrs['aria-label'];
44
+ if (ariaLabel) {
45
+ props.accessibilityLabel = ariaLabel;
46
+ } else if (attrs.alt) {
47
+ props.accessibilityLabel = attrs.alt;
48
+ } else if (attrs.title) {
49
+ props.accessibilityLabel = attrs.title;
50
+ }
51
+
52
+ // Hint: for links, use href as hint
53
+ if (node.tag === 'a' && attrs.href) {
54
+ props.accessibilityHint = `Opens ${attrs.href}`;
55
+ }
56
+
57
+ // Hidden: aria-hidden
58
+ if (attrs['aria-hidden'] === 'true') {
59
+ props.importantForAccessibility = 'no-hide-descendants';
60
+ props.accessible = false;
61
+ }
62
+
63
+ // Accessibility state
64
+ const state = {};
65
+ let hasState = false;
66
+ if (attrs['aria-disabled'] === 'true' || attrs.disabled != null) {
67
+ state.disabled = true;
68
+ hasState = true;
69
+ }
70
+ if (attrs['aria-selected'] === 'true') {
71
+ state.selected = true;
72
+ hasState = true;
73
+ }
74
+ if (attrs['aria-checked'] != null) {
75
+ state.checked = attrs['aria-checked'] === 'mixed' ? 'mixed' : attrs['aria-checked'] === 'true';
76
+ hasState = true;
77
+ }
78
+ if (attrs['aria-busy'] === 'true') {
79
+ state.busy = true;
80
+ hasState = true;
81
+ }
82
+ if (attrs['aria-expanded'] != null) {
83
+ state.expanded = attrs['aria-expanded'] === 'true';
84
+ hasState = true;
85
+ }
86
+ if (hasState) {
87
+ props.accessibilityState = state;
88
+ }
89
+ return props;
90
+ }
91
+
92
+ /**
93
+ * Build an accessibility label for an image from its attributes.
94
+ */
95
+ export function getImageA11yLabel(node) {
96
+ return node.attributes['aria-label'] ?? node.attributes.alt ?? node.attributes.title ?? undefined;
97
+ }
98
+
99
+ /**
100
+ * Build an accessibility label for a link from its children text.
101
+ */
102
+ export function getLinkA11yLabel(node) {
103
+ const ariaLabel = node.attributes['aria-label'];
104
+ if (ariaLabel) return ariaLabel;
105
+ const textContent = extractTextContent(node.children);
106
+ return textContent || undefined;
107
+ }
108
+ //# sourceMappingURL=accessibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["extractTextContent","TAG_TO_ROLE","a","button","img","h1","h2","h3","h4","h5","h6","input","textarea","nav","form","summary","getAccessibilityProps","node","attrs","attributes","props","ariaRole","role","accessibilityRole","tag","ariaLabel","accessibilityLabel","alt","title","href","accessibilityHint","importantForAccessibility","accessible","state","hasState","disabled","selected","checked","busy","expanded","accessibilityState","getImageA11yLabel","undefined","getLinkA11yLabel","textContent","children"],"sourceRoot":"../../../src","sources":["utils/accessibility.ts"],"mappings":"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","ignoreList":[]}