@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,129 @@
1
+ "use strict";
2
+
3
+ import { memo } from 'react';
4
+ import { View, Text } from 'react-native';
5
+ import { extractTextContent } from "../../utils/index.js";
6
+ import { getAccessibilityProps } from "../../utils/accessibility.js";
7
+ import { jsx as _jsx } from "react/jsx-runtime";
8
+ /**
9
+ * Read-only renderers for form elements.
10
+ */
11
+ export const InputTag = /*#__PURE__*/memo(function InputTag({
12
+ node,
13
+ style,
14
+ nodeKey,
15
+ ctx
16
+ }) {
17
+ const type = node.attributes.type ?? 'text';
18
+ const value = node.attributes.value ?? node.attributes.placeholder ?? '';
19
+ const a11y = getAccessibilityProps(node);
20
+ if (type === 'hidden') return null;
21
+ if (type === 'checkbox' || type === 'radio') {
22
+ const checked = 'checked' in node.attributes;
23
+ return /*#__PURE__*/_jsx(Text, {
24
+ style: style,
25
+ accessibilityRole: type === 'checkbox' ? 'checkbox' : 'radio',
26
+ accessibilityState: {
27
+ checked
28
+ },
29
+ allowFontScaling: ctx.allowFontScaling,
30
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
31
+ ...ctx.defaultTextProps,
32
+ children: type === 'checkbox' ? checked ? '\u2611 ' : '\u2610 ' : checked ? '\u25C9 ' : '\u25CB '
33
+ }, nodeKey);
34
+ }
35
+ return /*#__PURE__*/_jsx(View, {
36
+ style: style,
37
+ ...a11y,
38
+ children: /*#__PURE__*/_jsx(Text, {
39
+ style: inputText,
40
+ allowFontScaling: ctx.allowFontScaling,
41
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
42
+ ...ctx.defaultTextProps,
43
+ children: value
44
+ })
45
+ }, nodeKey);
46
+ });
47
+ export const TextareaTag = /*#__PURE__*/memo(function TextareaTag({
48
+ node,
49
+ style,
50
+ nodeKey,
51
+ ctx
52
+ }) {
53
+ const text = extractTextContent(node.children) || node.attributes.placeholder || '';
54
+ const a11y = getAccessibilityProps(node);
55
+ return /*#__PURE__*/_jsx(View, {
56
+ style: style,
57
+ ...a11y,
58
+ children: /*#__PURE__*/_jsx(Text, {
59
+ style: inputText,
60
+ allowFontScaling: ctx.allowFontScaling,
61
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
62
+ ...ctx.defaultTextProps,
63
+ children: text
64
+ })
65
+ }, nodeKey);
66
+ });
67
+ export const ButtonTag = /*#__PURE__*/memo(function ButtonTag({
68
+ node,
69
+ style,
70
+ nodeKey,
71
+ ctx
72
+ }) {
73
+ const label = extractTextContent(node.children) || node.attributes.value || 'Button';
74
+ return /*#__PURE__*/_jsx(View, {
75
+ style: style,
76
+ accessibilityRole: "button",
77
+ accessibilityLabel: node.attributes['aria-label'] ?? label,
78
+ children: /*#__PURE__*/_jsx(Text, {
79
+ style: buttonText,
80
+ allowFontScaling: ctx.allowFontScaling,
81
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
82
+ ...ctx.defaultTextProps,
83
+ children: label
84
+ })
85
+ }, nodeKey);
86
+ });
87
+ export const SelectTag = /*#__PURE__*/memo(function SelectTag({
88
+ node,
89
+ style,
90
+ nodeKey,
91
+ ctx
92
+ }) {
93
+ const options = node.children.filter(c => c.type === 'element' && c.tag === 'option');
94
+ let label = '';
95
+ for (const opt of options) {
96
+ if (opt.type === 'element') {
97
+ if ('selected' in opt.attributes) {
98
+ label = extractTextContent(opt.children);
99
+ break;
100
+ }
101
+ if (!label) {
102
+ label = extractTextContent(opt.children);
103
+ }
104
+ }
105
+ }
106
+ const a11y = getAccessibilityProps(node);
107
+ return /*#__PURE__*/_jsx(View, {
108
+ style: style,
109
+ ...a11y,
110
+ children: /*#__PURE__*/_jsx(Text, {
111
+ style: inputText,
112
+ allowFontScaling: ctx.allowFontScaling,
113
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
114
+ ...ctx.defaultTextProps,
115
+ children: label || '\u2014'
116
+ })
117
+ }, nodeKey);
118
+ });
119
+ const inputText = {
120
+ fontSize: 14,
121
+ color: '#333'
122
+ };
123
+ const buttonText = {
124
+ fontSize: 14,
125
+ color: '#fff',
126
+ fontWeight: '600',
127
+ textAlign: 'center'
128
+ };
129
+ //# sourceMappingURL=FormTags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","View","Text","extractTextContent","getAccessibilityProps","jsx","_jsx","InputTag","node","style","nodeKey","ctx","type","attributes","value","placeholder","a11y","checked","accessibilityRole","accessibilityState","allowFontScaling","maxFontSizeMultiplier","defaultTextProps","children","inputText","TextareaTag","text","ButtonTag","label","accessibilityLabel","buttonText","SelectTag","options","filter","c","tag","opt","fontSize","color","fontWeight","textAlign"],"sourceRoot":"../../../../src","sources":["renderer/tags/FormTags.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+
3
+ import { memo, useState, useEffect, useCallback } from 'react';
4
+ import { View, Text, Image, TouchableOpacity, ActivityIndicator } from 'react-native';
5
+ import { getCachedImageDimensions, setCachedImageDimensions } from "../../utils/cache.js";
6
+ import { getImageA11yLabel } from "../../utils/accessibility.js";
7
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ /**
9
+ * Renders an `<img>` tag with:
10
+ * - Cached dimension fetching via `Image.getSize()`
11
+ * - Proportional scaling to fit `contentWidth` / `maxImagesWidth`
12
+ * - Loading placeholder and error fallback
13
+ * - Optional `onImagePress` callback
14
+ * - Accessibility labels from `alt`, `aria-label`, `title`
15
+ */
16
+ export const ImageTag = /*#__PURE__*/memo(function ImageTag({
17
+ node,
18
+ style,
19
+ nodeKey,
20
+ ctx
21
+ }) {
22
+ const src = node.attributes.src;
23
+ if (!src) return null;
24
+
25
+ // aria-hidden check
26
+ if (node.attributes['aria-hidden'] === 'true') return null;
27
+ return /*#__PURE__*/_jsx(ImageInner, {
28
+ src: src,
29
+ node: node,
30
+ style: style,
31
+ nodeKey: nodeKey,
32
+ ctx: ctx
33
+ });
34
+ });
35
+ const ImageInner = /*#__PURE__*/memo(function ImageInner({
36
+ src,
37
+ node,
38
+ style,
39
+ nodeKey,
40
+ ctx
41
+ }) {
42
+ const attrWidth = parseInt(node.attributes.width ?? '0', 10) || 0;
43
+ const attrHeight = parseInt(node.attributes.height ?? '0', 10) || 0;
44
+
45
+ // Check cache first
46
+ const cached = getCachedImageDimensions(src);
47
+ const initialDims = attrWidth && attrHeight ? {
48
+ width: attrWidth,
49
+ height: attrHeight
50
+ } : cached ?? null;
51
+ const [dimensions, setDimensions] = useState(initialDims);
52
+ const [loading, setLoading] = useState(!initialDims);
53
+ const [errored, setErrored] = useState(false);
54
+ useEffect(() => {
55
+ if (dimensions) return;
56
+ let cancelled = false;
57
+ Image.getSize(src, (w, h) => {
58
+ if (!cancelled) {
59
+ const dims = {
60
+ width: w,
61
+ height: h
62
+ };
63
+ setDimensions(dims);
64
+ setCachedImageDimensions(src, dims);
65
+ setLoading(false);
66
+ }
67
+ }, () => {
68
+ if (!cancelled) {
69
+ setErrored(true);
70
+ setLoading(false);
71
+ }
72
+ });
73
+ return () => {
74
+ cancelled = true;
75
+ };
76
+ }, [src, dimensions]);
77
+ const handlePress = useCallback(() => {
78
+ ctx.onImagePress?.(src, node.attributes);
79
+ }, [ctx, src, node.attributes]);
80
+
81
+ // Calculate scaled dimensions
82
+ const maxWidth = Math.min(ctx.contentWidth, ctx.maxImagesWidth ?? ctx.contentWidth);
83
+ const placeholder = ctx.imagesInitialDimensions;
84
+ let displayWidth;
85
+ let displayHeight;
86
+ if (dimensions) {
87
+ const ratio = dimensions.height / dimensions.width;
88
+ displayWidth = Math.min(dimensions.width, maxWidth);
89
+ displayHeight = displayWidth * ratio;
90
+ } else {
91
+ displayWidth = Math.min(placeholder.width, maxWidth);
92
+ displayHeight = placeholder.height;
93
+ }
94
+ const a11yLabel = getImageA11yLabel(node);
95
+ if (errored) {
96
+ return /*#__PURE__*/_jsx(View, {
97
+ style: [errorContainer, {
98
+ width: displayWidth,
99
+ height: displayHeight
100
+ }],
101
+ accessibilityRole: "image",
102
+ accessibilityLabel: a11yLabel ?? 'Image failed to load',
103
+ children: /*#__PURE__*/_jsx(Text, {
104
+ style: errorText,
105
+ children: "Image failed to load"
106
+ })
107
+ }, nodeKey);
108
+ }
109
+ const imageElement = /*#__PURE__*/_jsxs(View, {
110
+ children: [loading && /*#__PURE__*/_jsx(View, {
111
+ style: [loadingContainer, {
112
+ width: displayWidth,
113
+ height: displayHeight
114
+ }],
115
+ children: /*#__PURE__*/_jsx(ActivityIndicator, {
116
+ size: "small"
117
+ })
118
+ }), /*#__PURE__*/_jsx(Image, {
119
+ source: {
120
+ uri: src
121
+ },
122
+ style: [{
123
+ width: displayWidth,
124
+ height: displayHeight
125
+ }, style],
126
+ accessibilityRole: "image",
127
+ accessibilityLabel: a11yLabel,
128
+ resizeMode: "contain",
129
+ onLoad: () => setLoading(false),
130
+ onError: () => {
131
+ setErrored(true);
132
+ setLoading(false);
133
+ }
134
+ })]
135
+ }, nodeKey);
136
+ if (ctx.onImagePress) {
137
+ return /*#__PURE__*/_jsx(TouchableOpacity, {
138
+ onPress: handlePress,
139
+ activeOpacity: 0.8,
140
+ children: imageElement
141
+ }, nodeKey);
142
+ }
143
+ return imageElement;
144
+ });
145
+ const loadingContainer = {
146
+ justifyContent: 'center',
147
+ alignItems: 'center',
148
+ backgroundColor: '#f5f5f5',
149
+ borderRadius: 4
150
+ };
151
+ const errorContainer = {
152
+ justifyContent: 'center',
153
+ alignItems: 'center',
154
+ backgroundColor: '#f5f5f5',
155
+ borderRadius: 4,
156
+ borderWidth: 1,
157
+ borderColor: '#ddd'
158
+ };
159
+ const errorText = {
160
+ color: '#999',
161
+ fontSize: 12
162
+ };
163
+ //# sourceMappingURL=ImageTag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useState","useEffect","useCallback","View","Text","Image","TouchableOpacity","ActivityIndicator","getCachedImageDimensions","setCachedImageDimensions","getImageA11yLabel","jsx","_jsx","jsxs","_jsxs","ImageTag","node","style","nodeKey","ctx","src","attributes","ImageInner","attrWidth","parseInt","width","attrHeight","height","cached","initialDims","dimensions","setDimensions","loading","setLoading","errored","setErrored","cancelled","getSize","w","h","dims","handlePress","onImagePress","maxWidth","Math","min","contentWidth","maxImagesWidth","placeholder","imagesInitialDimensions","displayWidth","displayHeight","ratio","a11yLabel","errorContainer","accessibilityRole","accessibilityLabel","children","errorText","imageElement","loadingContainer","size","source","uri","resizeMode","onLoad","onError","onPress","activeOpacity","justifyContent","alignItems","backgroundColor","borderRadius","borderWidth","borderColor","color","fontSize"],"sourceRoot":"../../../../src","sources":["renderer/tags/ImageTag.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ import { memo, useCallback } from 'react';
4
+ import { Text, TouchableOpacity, Linking } from 'react-native';
5
+ import { isInlineContent } from "../../utils/index.js";
6
+ import { getLinkA11yLabel } from "../../utils/accessibility.js";
7
+ import { renderInlineNodes } from "./TextTags.js";
8
+
9
+ /** Only allow these URL schemes in the default Linking.openURL handler. */
10
+ import { jsx as _jsx } from "react/jsx-runtime";
11
+ const SAFE_LINK_SCHEMES = /^(https?:|mailto:|tel:|sms:)/i;
12
+ /**
13
+ * Renders a block-level `<a>` tag as a TouchableOpacity wrapping a Text.
14
+ * Includes accessibility role, label, and hint.
15
+ */
16
+ export const LinkTag = /*#__PURE__*/memo(function LinkTag({
17
+ node,
18
+ style,
19
+ nodeKey,
20
+ ctx,
21
+ renderNodes
22
+ }) {
23
+ const href = node.attributes.href ?? '';
24
+ const handlePress = useCallback(() => {
25
+ if (ctx.onLinkPress) {
26
+ ctx.onLinkPress(href, node.attributes);
27
+ } else if (SAFE_LINK_SCHEMES.test(href)) {
28
+ Linking.openURL(href).catch(() => {
29
+ // silently ignore if URL can't be opened
30
+ });
31
+ }
32
+ }, [ctx, href, node.attributes]);
33
+ const children = isInlineContent(node.children) ? renderInlineNodes(node.children, ctx, nodeKey, renderNodes) : renderNodes(node.children, ctx, nodeKey);
34
+ const a11yLabel = node.attributes['aria-label'] ?? getLinkA11yLabel(node);
35
+ return /*#__PURE__*/_jsx(TouchableOpacity, {
36
+ onPress: handlePress,
37
+ accessibilityRole: "link",
38
+ accessibilityLabel: a11yLabel,
39
+ accessibilityHint: href ? `Opens ${href}` : undefined,
40
+ activeOpacity: 0.7,
41
+ children: /*#__PURE__*/_jsx(Text, {
42
+ style: style,
43
+ allowFontScaling: ctx.allowFontScaling,
44
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
45
+ ...ctx.defaultTextProps,
46
+ children: children
47
+ })
48
+ }, nodeKey);
49
+ });
50
+ //# sourceMappingURL=LinkTag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useCallback","Text","TouchableOpacity","Linking","isInlineContent","getLinkA11yLabel","renderInlineNodes","jsx","_jsx","SAFE_LINK_SCHEMES","LinkTag","node","style","nodeKey","ctx","renderNodes","href","attributes","handlePress","onLinkPress","test","openURL","catch","children","a11yLabel","onPress","accessibilityRole","accessibilityLabel","accessibilityHint","undefined","activeOpacity","allowFontScaling","maxFontSizeMultiplier","defaultTextProps"],"sourceRoot":"../../../../src","sources":["renderer/tags/LinkTag.tsx"],"mappings":";;AAAA,SAASA,IAAI,EAAEC,WAAW,QAAwB,OAAO;AACzD,SAASC,IAAI,EAAEC,gBAAgB,EAAEC,OAAO,QAAwB,cAAc;AAE9E,SAASC,eAAe,QAAQ,sBAAa;AAC7C,SAASC,gBAAgB,QAAQ,8BAA2B;AAC5D,SAASC,iBAAiB,QAAQ,eAAY;;AAE9C;AAAA,SAAAC,GAAA,IAAAC,IAAA;AACA,MAAMC,iBAAiB,GAAG,+BAA+B;AAiBzD;AACA;AACA;AACA;AACA,OAAO,MAAMC,OAAO,gBAAGX,IAAI,CAAC,SAASW,OAAOA,CAAC;EAC3CC,IAAI;EACJC,KAAK;EACLC,OAAO;EACPC,GAAG;EACHC;AACY,CAAC,EAAE;EACf,MAAMC,IAAI,GAAGL,IAAI,CAACM,UAAU,CAACD,IAAI,IAAI,EAAE;EAEvC,MAAME,WAAW,GAAGlB,WAAW,CAAC,MAAM;IACpC,IAAIc,GAAG,CAACK,WAAW,EAAE;MACnBL,GAAG,CAACK,WAAW,CAACH,IAAI,EAAEL,IAAI,CAACM,UAAU,CAAC;IACxC,CAAC,MAAM,IAAIR,iBAAiB,CAACW,IAAI,CAACJ,IAAI,CAAC,EAAE;MACvCb,OAAO,CAACkB,OAAO,CAACL,IAAI,CAAC,CAACM,KAAK,CAAC,MAAM;QAChC;MAAA,CACD,CAAC;IACJ;EACF,CAAC,EAAE,CAACR,GAAG,EAAEE,IAAI,EAAEL,IAAI,CAACM,UAAU,CAAC,CAAC;EAEhC,MAAMM,QAAQ,GAAGnB,eAAe,CAACO,IAAI,CAACY,QAAQ,CAAC,GAC3CjB,iBAAiB,CAACK,IAAI,CAACY,QAAQ,EAAET,GAAG,EAAED,OAAO,EAAEE,WAAW,CAAC,GAC3DA,WAAW,CAACJ,IAAI,CAACY,QAAQ,EAAET,GAAG,EAAED,OAAO,CAAC;EAE5C,MAAMW,SAAS,GACbb,IAAI,CAACM,UAAU,CAAC,YAAY,CAAC,IAC7BZ,gBAAgB,CAACM,IAA8C,CAAC;EAElE,oBACEH,IAAA,CAACN,gBAAgB;IAEfuB,OAAO,EAAEP,WAAY;IACrBQ,iBAAiB,EAAC,MAAM;IACxBC,kBAAkB,EAAEH,SAAU;IAC9BI,iBAAiB,EAAEZ,IAAI,GAAG,SAASA,IAAI,EAAE,GAAGa,SAAU;IACtDC,aAAa,EAAE,GAAI;IAAAP,QAAA,eAEnBf,IAAA,CAACP,IAAI;MACHW,KAAK,EAAEA,KAAmB;MAC1BmB,gBAAgB,EAAEjB,GAAG,CAACiB,gBAAiB;MACvCC,qBAAqB,EAAElB,GAAG,CAACkB,qBAAsB;MAAA,GAC7ClB,GAAG,CAACmB,gBAAgB;MAAAV,QAAA,EAEvBA;IAAQ,CACL;EAAC,GAdFV,OAeW,CAAC;AAEvB,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ import { memo } from 'react';
4
+ import { View, Text } from 'react-native';
5
+ import { isInlineContent, isDOMElement } from "../../utils/index.js";
6
+ import { mergeStylesForElement } from "../../styles/index.js";
7
+ import { getDefaultTagStyles } from "../../styles/defaultStyles.js";
8
+ import { getAccessibilityProps } from "../../utils/accessibility.js";
9
+ import { renderInlineNodes } from "./TextTags.js";
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ /**
12
+ * Renders `<ul>` and `<ol>` lists with proper bullets/numbers and nesting.
13
+ */
14
+ export const ListTag = /*#__PURE__*/memo(function ListTag({
15
+ node,
16
+ style,
17
+ nodeKey,
18
+ ctx,
19
+ renderNodes
20
+ }) {
21
+ const isOrdered = node.tag === 'ol';
22
+ const defaults = getDefaultTagStyles(ctx.emSize);
23
+ const nestedCtx = {
24
+ ...ctx,
25
+ nestLevel: ctx.nestLevel + 1
26
+ };
27
+ const a11y = getAccessibilityProps(node);
28
+ const listItems = node.children.filter(child => isDOMElement(child) && child.tag === 'li');
29
+ return /*#__PURE__*/_jsx(View, {
30
+ style: style,
31
+ accessibilityRole: "list",
32
+ ...a11y,
33
+ ...ctx.defaultViewProps,
34
+ children: listItems.map((li, liIndex) => {
35
+ const liKey = `${nodeKey}_li_${liIndex}`;
36
+ const liStyle = mergeStylesForElement(li, defaults, ctx.tagsStyles, ctx.classesStyles, ctx.idsStyles, ctx.ignoredStyles.size > 0 ? ctx.ignoredStyles : undefined, ctx.allowedStyles);
37
+ const prefixRenderer = isOrdered ? ctx.listsPrefixesRenderers?.ol : ctx.listsPrefixesRenderers?.ul;
38
+ const prefix = prefixRenderer ? prefixRenderer({
39
+ index: liIndex,
40
+ nestLevel: ctx.nestLevel
41
+ }) : /*#__PURE__*/_jsx(Text, {
42
+ style: bulletStyle,
43
+ children: isOrdered ? `${liIndex + 1}. ` : '\u2022 '
44
+ });
45
+ const hasNestedList = li.children.some(c => isDOMElement(c) && (c.tag === 'ul' || c.tag === 'ol'));
46
+ if (hasNestedList) {
47
+ const inlineChildren = [];
48
+ const blockChildren = [];
49
+ for (const child of li.children) {
50
+ if (isDOMElement(child) && (child.tag === 'ul' || child.tag === 'ol')) {
51
+ blockChildren.push(child);
52
+ } else {
53
+ inlineChildren.push(child);
54
+ }
55
+ }
56
+ return /*#__PURE__*/_jsxs(View, {
57
+ children: [/*#__PURE__*/_jsxs(View, {
58
+ style: liRowStyle,
59
+ children: [prefix, /*#__PURE__*/_jsx(Text, {
60
+ style: [liStyle, {
61
+ flex: 1
62
+ }],
63
+ allowFontScaling: ctx.allowFontScaling,
64
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
65
+ ...ctx.defaultTextProps,
66
+ children: isInlineContent(inlineChildren) ? renderInlineNodes(inlineChildren, ctx, liKey, renderNodes) : renderNodes(inlineChildren, ctx, liKey)
67
+ })]
68
+ }), renderNodes(blockChildren, nestedCtx, `${liKey}_nested`)]
69
+ }, liKey);
70
+ }
71
+ const liChildren = isInlineContent(li.children) ? renderInlineNodes(li.children, ctx, liKey, renderNodes) : renderNodes(li.children, ctx, liKey);
72
+ return /*#__PURE__*/_jsxs(View, {
73
+ style: liRowStyle,
74
+ children: [prefix, /*#__PURE__*/_jsx(Text, {
75
+ style: [liStyle, {
76
+ flex: 1
77
+ }],
78
+ allowFontScaling: ctx.allowFontScaling,
79
+ maxFontSizeMultiplier: ctx.maxFontSizeMultiplier,
80
+ ...ctx.defaultTextProps,
81
+ children: liChildren
82
+ })]
83
+ }, liKey);
84
+ })
85
+ }, nodeKey);
86
+ });
87
+ const liRowStyle = {
88
+ flexDirection: 'row',
89
+ alignItems: 'flex-start'
90
+ };
91
+ const bulletStyle = {
92
+ width: 20,
93
+ textAlign: 'right',
94
+ marginRight: 4
95
+ };
96
+ //# sourceMappingURL=ListTags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","View","Text","isInlineContent","isDOMElement","mergeStylesForElement","getDefaultTagStyles","getAccessibilityProps","renderInlineNodes","jsx","_jsx","jsxs","_jsxs","ListTag","node","style","nodeKey","ctx","renderNodes","isOrdered","tag","defaults","emSize","nestedCtx","nestLevel","a11y","listItems","children","filter","child","accessibilityRole","defaultViewProps","map","li","liIndex","liKey","liStyle","tagsStyles","classesStyles","idsStyles","ignoredStyles","size","undefined","allowedStyles","prefixRenderer","listsPrefixesRenderers","ol","ul","prefix","index","bulletStyle","hasNestedList","some","c","inlineChildren","blockChildren","push","liRowStyle","flex","allowFontScaling","maxFontSizeMultiplier","defaultTextProps","liChildren","flexDirection","alignItems","width","textAlign","marginRight"],"sourceRoot":"../../../../src","sources":["renderer/tags/ListTags.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAwB,OAAO;AAC5C,SAASC,IAAI,EAAEC,IAAI,QAAwC,cAAc;AAOzE,SAASC,eAAe,EAAEC,YAAY,QAAQ,sBAAa;AAC3D,SAASC,qBAAqB,QAAQ,uBAAc;AACpD,SAASC,mBAAmB,QAAQ,+BAA4B;AAChE,SAASC,qBAAqB,QAAQ,8BAA2B;AACjE,SAASC,iBAAiB,QAAQ,eAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAc/C;AACA;AACA;AACA,OAAO,MAAMC,OAAO,gBAAGb,IAAI,CAAC,SAASa,OAAOA,CAAC;EAC3CC,IAAI;EACJC,KAAK;EACLC,OAAO;EACPC,GAAG;EACHC;AACY,CAAC,EAAE;EACf,MAAMC,SAAS,GAAGL,IAAI,CAACM,GAAG,KAAK,IAAI;EACnC,MAAMC,QAAQ,GAAGf,mBAAmB,CAACW,GAAG,CAACK,MAAM,CAAC;EAChD,MAAMC,SAAS,GAAG;IAAE,GAAGN,GAAG;IAAEO,SAAS,EAAEP,GAAG,CAACO,SAAS,GAAG;EAAE,CAAC;EAC1D,MAAMC,IAAI,GAAGlB,qBAAqB,CAACO,IAAI,CAAC;EAExC,MAAMY,SAAS,GAAGZ,IAAI,CAACa,QAAQ,CAACC,MAAM,CACnCC,KAAK,IAA0BzB,YAAY,CAACyB,KAAK,CAAC,IAAIA,KAAK,CAACT,GAAG,KAAK,IACvE,CAAC;EAED,oBACEV,IAAA,CAACT,IAAI;IAEHc,KAAK,EAAEA,KAAmB;IAC1Be,iBAAiB,EAAC,MAAM;IAAA,GACpBL,IAAI;IAAA,GACJR,GAAG,CAACc,gBAAgB;IAAAJ,QAAA,EAEvBD,SAAS,CAACM,GAAG,CAAC,CAACC,EAAE,EAAEC,OAAO,KAAK;MAC9B,MAAMC,KAAK,GAAG,GAAGnB,OAAO,OAAOkB,OAAO,EAAE;MACxC,MAAME,OAAO,GAAG/B,qBAAqB,CACnC4B,EAAE,EACFZ,QAAQ,EACRJ,GAAG,CAACoB,UAAU,EACdpB,GAAG,CAACqB,aAAa,EACjBrB,GAAG,CAACsB,SAAS,EACbtB,GAAG,CAACuB,aAAa,CAACC,IAAI,GAAG,CAAC,GAAGxB,GAAG,CAACuB,aAAa,GAAGE,SAAS,EAC1DzB,GAAG,CAAC0B,aACN,CAAC;MAED,MAAMC,cAAc,GAAGzB,SAAS,GAC5BF,GAAG,CAAC4B,sBAAsB,EAAEC,EAAE,GAC9B7B,GAAG,CAAC4B,sBAAsB,EAAEE,EAAE;MAElC,MAAMC,MAAM,GAAGJ,cAAc,GAC3BA,cAAc,CAAC;QAAEK,KAAK,EAAEf,OAAO;QAAEV,SAAS,EAAEP,GAAG,CAACO;MAAU,CAAC,CAAC,gBAE5Dd,IAAA,CAACR,IAAI;QAACa,KAAK,EAAEmC,WAAY;QAAAvB,QAAA,EACtBR,SAAS,GAAG,GAAGe,OAAO,GAAG,CAAC,IAAI,GAAG;MAAS,CACvC,CACP;MAED,MAAMiB,aAAa,GAAGlB,EAAE,CAACN,QAAQ,CAACyB,IAAI,CACnCC,CAAC,IAAKjD,YAAY,CAACiD,CAAC,CAAC,KAAKA,CAAC,CAACjC,GAAG,KAAK,IAAI,IAAIiC,CAAC,CAACjC,GAAG,KAAK,IAAI,CAC7D,CAAC;MAED,IAAI+B,aAAa,EAAE;QACjB,MAAMG,cAAyB,GAAG,EAAE;QACpC,MAAMC,aAAwB,GAAG,EAAE;QAEnC,KAAK,MAAM1B,KAAK,IAAII,EAAE,CAACN,QAAQ,EAAE;UAC/B,IACEvB,YAAY,CAACyB,KAAK,CAAC,KAClBA,KAAK,CAACT,GAAG,KAAK,IAAI,IAAIS,KAAK,CAACT,GAAG,KAAK,IAAI,CAAC,EAC1C;YACAmC,aAAa,CAACC,IAAI,CAAC3B,KAAK,CAAC;UAC3B,CAAC,MAAM;YACLyB,cAAc,CAACE,IAAI,CAAC3B,KAAK,CAAC;UAC5B;QACF;QAEA,oBACEjB,KAAA,CAACX,IAAI;UAAA0B,QAAA,gBACHf,KAAA,CAACX,IAAI;YAACc,KAAK,EAAE0C,UAAW;YAAA9B,QAAA,GACrBqB,MAAM,eACPtC,IAAA,CAACR,IAAI;cACHa,KAAK,EAAE,CAACqB,OAAO,EAAe;gBAAEsB,IAAI,EAAE;cAAE,CAAC,CAAE;cAC3CC,gBAAgB,EAAE1C,GAAG,CAAC0C,gBAAiB;cACvCC,qBAAqB,EAAE3C,GAAG,CAAC2C,qBAAsB;cAAA,GAC7C3C,GAAG,CAAC4C,gBAAgB;cAAAlC,QAAA,EAEvBxB,eAAe,CAACmD,cAAc,CAAC,GAC5B9C,iBAAiB,CAAC8C,cAAc,EAAErC,GAAG,EAAEkB,KAAK,EAAEjB,WAAW,CAAC,GAC1DA,WAAW,CAACoC,cAAc,EAAErC,GAAG,EAAEkB,KAAK;YAAC,CACvC,CAAC;UAAA,CACH,CAAC,EACNjB,WAAW,CAACqC,aAAa,EAAEhC,SAAS,EAAE,GAAGY,KAAK,SAAS,CAAC;QAAA,GAdhDA,KAeL,CAAC;MAEX;MAEA,MAAM2B,UAAU,GAAG3D,eAAe,CAAC8B,EAAE,CAACN,QAAQ,CAAC,GAC3CnB,iBAAiB,CAACyB,EAAE,CAACN,QAAQ,EAAEV,GAAG,EAAEkB,KAAK,EAAEjB,WAAW,CAAC,GACvDA,WAAW,CAACe,EAAE,CAACN,QAAQ,EAAEV,GAAG,EAAEkB,KAAK,CAAC;MAExC,oBACEvB,KAAA,CAACX,IAAI;QAAac,KAAK,EAAE0C,UAAW;QAAA9B,QAAA,GACjCqB,MAAM,eACPtC,IAAA,CAACR,IAAI;UACHa,KAAK,EAAE,CAACqB,OAAO,EAAe;YAAEsB,IAAI,EAAE;UAAE,CAAC,CAAE;UAC3CC,gBAAgB,EAAE1C,GAAG,CAAC0C,gBAAiB;UACvCC,qBAAqB,EAAE3C,GAAG,CAAC2C,qBAAsB;UAAA,GAC7C3C,GAAG,CAAC4C,gBAAgB;UAAAlC,QAAA,EAEvBmC;QAAU,CACP,CAAC;MAAA,GATE3B,KAUL,CAAC;IAEX,CAAC;EAAC,GAtFGnB,OAuFD,CAAC;AAEX,CAAC,CAAC;AAEF,MAAMyC,UAAqB,GAAG;EAC5BM,aAAa,EAAE,KAAK;EACpBC,UAAU,EAAE;AACd,CAAC;AAED,MAAMd,WAAsB,GAAG;EAC7Be,KAAK,EAAE,EAAE;EACTC,SAAS,EAAE,OAAO;EAClBC,WAAW,EAAE;AACf,CAAC","ignoreList":[]}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ import { memo } from 'react';
4
+ import { View, Text } from 'react-native';
5
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
+ /**
7
+ * Placeholder renderers for `<video>` and `<audio>` tags.
8
+ */
9
+ export const VideoTag = /*#__PURE__*/memo(function VideoTag({
10
+ node,
11
+ style,
12
+ nodeKey,
13
+ ctx
14
+ }) {
15
+ const width = Math.min(ctx.contentWidth, 320);
16
+ const label = node.attributes['aria-label'] ?? 'Video content';
17
+ return /*#__PURE__*/_jsxs(View, {
18
+ style: [placeholderStyle, style, {
19
+ width,
20
+ height: width * 0.5625
21
+ }],
22
+ accessibilityLabel: label,
23
+ children: [/*#__PURE__*/_jsx(Text, {
24
+ style: iconStyle,
25
+ children: '\u25B6'
26
+ }), /*#__PURE__*/_jsx(Text, {
27
+ style: labelStyle,
28
+ children: "Video"
29
+ })]
30
+ }, nodeKey);
31
+ });
32
+ export const AudioTag = /*#__PURE__*/memo(function AudioTag({
33
+ node,
34
+ style,
35
+ nodeKey
36
+ }) {
37
+ const label = node.attributes['aria-label'] ?? 'Audio content';
38
+ return /*#__PURE__*/_jsxs(View, {
39
+ style: [placeholderStyle, style, {
40
+ height: 48
41
+ }],
42
+ accessibilityLabel: label,
43
+ children: [/*#__PURE__*/_jsx(Text, {
44
+ style: iconStyle,
45
+ children: '\u266B'
46
+ }), /*#__PURE__*/_jsx(Text, {
47
+ style: labelStyle,
48
+ children: "Audio"
49
+ })]
50
+ }, nodeKey);
51
+ });
52
+ const placeholderStyle = {
53
+ backgroundColor: '#f0f0f0',
54
+ borderRadius: 6,
55
+ justifyContent: 'center',
56
+ alignItems: 'center',
57
+ marginVertical: 4,
58
+ flexDirection: 'row',
59
+ gap: 6
60
+ };
61
+ const iconStyle = {
62
+ fontSize: 20,
63
+ color: '#999'
64
+ };
65
+ const labelStyle = {
66
+ fontSize: 13,
67
+ color: '#999'
68
+ };
69
+ //# sourceMappingURL=MediaTags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","View","Text","jsx","_jsx","jsxs","_jsxs","VideoTag","node","style","nodeKey","ctx","width","Math","min","contentWidth","label","attributes","placeholderStyle","height","accessibilityLabel","children","iconStyle","labelStyle","AudioTag","backgroundColor","borderRadius","justifyContent","alignItems","marginVertical","flexDirection","gap","fontSize","color"],"sourceRoot":"../../../../src","sources":["renderer/tags/MediaTags.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,OAAO;AAC5B,SAASC,IAAI,EAAEC,IAAI,QAAwC,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAc1E;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,gBAAGP,IAAI,CAAC,SAASO,QAAQA,CAAC;EAC7CC,IAAI;EACJC,KAAK;EACLC,OAAO;EACPC;AACa,CAAC,EAAE;EAChB,MAAMC,KAAK,GAAGC,IAAI,CAACC,GAAG,CAACH,GAAG,CAACI,YAAY,EAAE,GAAG,CAAC;EAC7C,MAAMC,KAAK,GAAGR,IAAI,CAACS,UAAU,CAAC,YAAY,CAAC,IAAI,eAAe;EAE9D,oBACEX,KAAA,CAACL,IAAI;IAEHQ,KAAK,EAAE,CACLS,gBAAgB,EAChBT,KAAK,EACL;MAAEG,KAAK;MAAEO,MAAM,EAAEP,KAAK,GAAG;IAAO,CAAC,CACjC;IACFQ,kBAAkB,EAAEJ,KAAM;IAAAK,QAAA,gBAE1BjB,IAAA,CAACF,IAAI;MAACO,KAAK,EAAEa,SAAU;MAAAD,QAAA,EAAE;IAAQ,CAAO,CAAC,eACzCjB,IAAA,CAACF,IAAI;MAACO,KAAK,EAAEc,UAAW;MAAAF,QAAA,EAAC;IAAK,CAAM,CAAC;EAAA,GAThCX,OAUD,CAAC;AAEX,CAAC,CAAC;AAEF,OAAO,MAAMc,QAAQ,gBAAGxB,IAAI,CAAC,SAASwB,QAAQA,CAAC;EAC7ChB,IAAI;EACJC,KAAK;EACLC;AACa,CAAC,EAAE;EAChB,MAAMM,KAAK,GAAGR,IAAI,CAACS,UAAU,CAAC,YAAY,CAAC,IAAI,eAAe;EAE9D,oBACEX,KAAA,CAACL,IAAI;IAEHQ,KAAK,EAAE,CAACS,gBAAgB,EAAET,KAAK,EAAe;MAAEU,MAAM,EAAE;IAAG,CAAC,CAAE;IAC9DC,kBAAkB,EAAEJ,KAAM;IAAAK,QAAA,gBAE1BjB,IAAA,CAACF,IAAI;MAACO,KAAK,EAAEa,SAAU;MAAAD,QAAA,EAAE;IAAQ,CAAO,CAAC,eACzCjB,IAAA,CAACF,IAAI;MAACO,KAAK,EAAEc,UAAW;MAAAF,QAAA,EAAC;IAAK,CAAM,CAAC;EAAA,GALhCX,OAMD,CAAC;AAEX,CAAC,CAAC;AAEF,MAAMQ,gBAA2B,GAAG;EAClCO,eAAe,EAAE,SAAS;EAC1BC,YAAY,EAAE,CAAC;EACfC,cAAc,EAAE,QAAQ;EACxBC,UAAU,EAAE,QAAQ;EACpBC,cAAc,EAAE,CAAC;EACjBC,aAAa,EAAE,KAAK;EACpBC,GAAG,EAAE;AACP,CAAC;AAED,MAAMT,SAAoB,GAAG;EAC3BU,QAAQ,EAAE,EAAE;EACZC,KAAK,EAAE;AACT,CAAC;AAED,MAAMV,UAAqB,GAAG;EAC5BS,QAAQ,EAAE,EAAE;EACZC,KAAK,EAAE;AACT,CAAC","ignoreList":[]}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ import { memo } from 'react';
4
+ import { View, ScrollView } from 'react-native';
5
+ import { isDOMElement } from "../../utils/index.js";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ /**
8
+ * Renders a `<table>` wrapped in a horizontal ScrollView for overflow.
9
+ */
10
+ export const TableTag = /*#__PURE__*/memo(function TableTag({
11
+ node,
12
+ style,
13
+ nodeKey,
14
+ ctx,
15
+ renderNodes
16
+ }) {
17
+ return /*#__PURE__*/_jsx(ScrollView, {
18
+ horizontal: true,
19
+ showsHorizontalScrollIndicator: false,
20
+ style: style,
21
+ children: /*#__PURE__*/_jsx(View, {
22
+ children: renderTableContent(node.children, ctx, keyPrefix(nodeKey), renderNodes)
23
+ })
24
+ }, nodeKey);
25
+ });
26
+ function keyPrefix(k) {
27
+ return `${k}_tbl`;
28
+ }
29
+ function renderTableContent(nodes, ctx, prefix, renderNodes) {
30
+ const results = [];
31
+ for (const [i, node] of nodes.entries()) {
32
+ if (!isDOMElement(node)) continue;
33
+ const key = `${prefix}_${i}`;
34
+ if (node.tag === 'thead' || node.tag === 'tbody' || node.tag === 'tfoot' || node.tag === 'colgroup' || node.tag === 'caption') {
35
+ results.push(...renderTableContent(node.children, ctx, key, renderNodes));
36
+ } else if (node.tag === 'tr') {
37
+ results.push(/*#__PURE__*/_jsx(View, {
38
+ style: trStyle,
39
+ children: renderNodes(node.children, ctx, key)
40
+ }, key));
41
+ }
42
+ }
43
+ return results;
44
+ }
45
+ const trStyle = {
46
+ flexDirection: 'row'
47
+ };
48
+ //# sourceMappingURL=TableTags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","View","ScrollView","isDOMElement","jsx","_jsx","TableTag","node","style","nodeKey","ctx","renderNodes","horizontal","showsHorizontalScrollIndicator","children","renderTableContent","keyPrefix","k","nodes","prefix","results","i","entries","key","tag","push","trStyle","flexDirection"],"sourceRoot":"../../../../src","sources":["renderer/tags/TableTags.tsx"],"mappings":";;AAAA,SAASA,IAAI,QAAwB,OAAO;AAC5C,SAASC,IAAI,EAAEC,UAAU,QAAwB,cAAc;AAO/D,SAASC,YAAY,QAAQ,sBAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAc3C;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,gBAAGN,IAAI,CAAC,SAASM,QAAQA,CAAC;EAC7CC,IAAI;EACJC,KAAK;EACLC,OAAO;EACPC,GAAG;EACHC;AACa,CAAC,EAAE;EAChB,oBACEN,IAAA,CAACH,UAAU;IAETU,UAAU;IACVC,8BAA8B,EAAE,KAAM;IACtCL,KAAK,EAAEA,KAAmB;IAAAM,QAAA,eAE1BT,IAAA,CAACJ,IAAI;MAAAa,QAAA,EACFC,kBAAkB,CACjBR,IAAI,CAACO,QAAQ,EACbJ,GAAG,EACHM,SAAS,CAACP,OAAO,CAAC,EAClBE,WACF;IAAC,CACG;EAAC,GAZFF,OAaK,CAAC;AAEjB,CAAC,CAAC;AAEF,SAASO,SAASA,CAACC,CAAS,EAAU;EACpC,OAAO,GAAGA,CAAC,MAAM;AACnB;AAEA,SAASF,kBAAkBA,CACzBG,KAAgB,EAChBR,GAA6B,EAC7BS,MAAc,EACdR,WAIgB,EACH;EACb,MAAMS,OAAoB,GAAG,EAAE;EAE/B,KAAK,MAAM,CAACC,CAAC,EAAEd,IAAI,CAAC,IAAIW,KAAK,CAACI,OAAO,CAAC,CAAC,EAAE;IACvC,IAAI,CAACnB,YAAY,CAACI,IAAI,CAAC,EAAE;IACzB,MAAMgB,GAAG,GAAG,GAAGJ,MAAM,IAAIE,CAAC,EAAE;IAE5B,IACEd,IAAI,CAACiB,GAAG,KAAK,OAAO,IACpBjB,IAAI,CAACiB,GAAG,KAAK,OAAO,IACpBjB,IAAI,CAACiB,GAAG,KAAK,OAAO,IACpBjB,IAAI,CAACiB,GAAG,KAAK,UAAU,IACvBjB,IAAI,CAACiB,GAAG,KAAK,SAAS,EACtB;MACAJ,OAAO,CAACK,IAAI,CAAC,GAAGV,kBAAkB,CAACR,IAAI,CAACO,QAAQ,EAAEJ,GAAG,EAAEa,GAAG,EAAEZ,WAAW,CAAC,CAAC;IAC3E,CAAC,MAAM,IAAIJ,IAAI,CAACiB,GAAG,KAAK,IAAI,EAAE;MAC5BJ,OAAO,CAACK,IAAI,cACVpB,IAAA,CAACJ,IAAI;QAAWO,KAAK,EAAEkB,OAAQ;QAAAZ,QAAA,EAC5BH,WAAW,CAACJ,IAAI,CAACO,QAAQ,EAAEJ,GAAG,EAAEa,GAAG;MAAC,GAD5BA,GAEL,CACR,CAAC;IACH;EACF;EAEA,OAAOH,OAAO;AAChB;AAEA,MAAMM,OAAkB,GAAG;EACzBC,aAAa,EAAE;AACjB,CAAC","ignoreList":[]}