@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.
- package/LICENSE +20 -0
- package/README.md +407 -0
- package/lib/module/HtmlRenderer.js +183 -0
- package/lib/module/HtmlRenderer.js.map +1 -0
- package/lib/module/context/index.js +32 -0
- package/lib/module/context/index.js.map +1 -0
- package/lib/module/hooks/index.js +6 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/useContentWidth.js +12 -0
- package/lib/module/hooks/useContentWidth.js.map +1 -0
- package/lib/module/hooks/useHtmlParser.js +16 -0
- package/lib/module/hooks/useHtmlParser.js.map +1 -0
- package/lib/module/hooks/useTagStyle.js +26 -0
- package/lib/module/hooks/useTagStyle.js.map +1 -0
- package/lib/module/index.js +23 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/parser/index.js +62 -0
- package/lib/module/parser/index.js.map +1 -0
- package/lib/module/renderer/ErrorBoundary.js +66 -0
- package/lib/module/renderer/ErrorBoundary.js.map +1 -0
- package/lib/module/renderer/NodeRenderer.js +279 -0
- package/lib/module/renderer/NodeRenderer.js.map +1 -0
- package/lib/module/renderer/index.js +5 -0
- package/lib/module/renderer/index.js.map +1 -0
- package/lib/module/renderer/tags/BlockTags.js +28 -0
- package/lib/module/renderer/tags/BlockTags.js.map +1 -0
- package/lib/module/renderer/tags/FormTags.js +129 -0
- package/lib/module/renderer/tags/FormTags.js.map +1 -0
- package/lib/module/renderer/tags/ImageTag.js +163 -0
- package/lib/module/renderer/tags/ImageTag.js.map +1 -0
- package/lib/module/renderer/tags/LinkTag.js +50 -0
- package/lib/module/renderer/tags/LinkTag.js.map +1 -0
- package/lib/module/renderer/tags/ListTags.js +96 -0
- package/lib/module/renderer/tags/ListTags.js.map +1 -0
- package/lib/module/renderer/tags/MediaTags.js +69 -0
- package/lib/module/renderer/tags/MediaTags.js.map +1 -0
- package/lib/module/renderer/tags/TableTags.js +48 -0
- package/lib/module/renderer/tags/TableTags.js.map +1 -0
- package/lib/module/renderer/tags/TextTags.js +87 -0
- package/lib/module/renderer/tags/TextTags.js.map +1 -0
- package/lib/module/renderer/tags/index.js +11 -0
- package/lib/module/renderer/tags/index.js.map +1 -0
- package/lib/module/styles/cssToRn.js +34 -0
- package/lib/module/styles/cssToRn.js.map +1 -0
- package/lib/module/styles/darkModeStyles.js +81 -0
- package/lib/module/styles/darkModeStyles.js.map +1 -0
- package/lib/module/styles/defaultStyles.js +218 -0
- package/lib/module/styles/defaultStyles.js.map +1 -0
- package/lib/module/styles/index.js +7 -0
- package/lib/module/styles/index.js.map +1 -0
- package/lib/module/styles/mergeStyles.js +47 -0
- package/lib/module/styles/mergeStyles.js.map +1 -0
- package/lib/module/types/index.js +4 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/module/utils/accessibility.js +108 -0
- package/lib/module/utils/accessibility.js.map +1 -0
- package/lib/module/utils/cache.js +69 -0
- package/lib/module/utils/cache.js.map +1 -0
- package/lib/module/utils/index.js +95 -0
- package/lib/module/utils/index.js.map +1 -0
- package/lib/module/utils/sanitize.js +102 -0
- package/lib/module/utils/sanitize.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/HtmlRenderer.d.ts +15 -0
- package/lib/typescript/src/HtmlRenderer.d.ts.map +1 -0
- package/lib/typescript/src/context/index.d.ts +5 -0
- package/lib/typescript/src/context/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/index.d.ts +4 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useContentWidth.d.ts +6 -0
- package/lib/typescript/src/hooks/useContentWidth.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useHtmlParser.d.ts +11 -0
- package/lib/typescript/src/hooks/useHtmlParser.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useTagStyle.d.ts +11 -0
- package/lib/typescript/src/hooks/useTagStyle.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +9 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/parser/index.d.ts +10 -0
- package/lib/typescript/src/parser/index.d.ts.map +1 -0
- package/lib/typescript/src/renderer/ErrorBoundary.d.ts +22 -0
- package/lib/typescript/src/renderer/ErrorBoundary.d.ts.map +1 -0
- package/lib/typescript/src/renderer/NodeRenderer.d.ts +7 -0
- package/lib/typescript/src/renderer/NodeRenderer.d.ts.map +1 -0
- package/lib/typescript/src/renderer/index.d.ts +3 -0
- package/lib/typescript/src/renderer/index.d.ts.map +1 -0
- package/lib/typescript/src/renderer/tags/BlockTags.d.ts +18 -0
- package/lib/typescript/src/renderer/tags/BlockTags.d.ts.map +1 -0
- package/lib/typescript/src/renderer/tags/FormTags.d.ts +16 -0
- package/lib/typescript/src/renderer/tags/FormTags.d.ts.map +1 -0
- package/lib/typescript/src/renderer/tags/ImageTag.d.ts +18 -0
- package/lib/typescript/src/renderer/tags/ImageTag.d.ts.map +1 -0
- package/lib/typescript/src/renderer/tags/LinkTag.d.ts +19 -0
- package/lib/typescript/src/renderer/tags/LinkTag.d.ts.map +1 -0
- package/lib/typescript/src/renderer/tags/ListTags.d.ts +15 -0
- package/lib/typescript/src/renderer/tags/ListTags.d.ts.map +1 -0
- package/lib/typescript/src/renderer/tags/MediaTags.d.ts +14 -0
- package/lib/typescript/src/renderer/tags/MediaTags.d.ts.map +1 -0
- package/lib/typescript/src/renderer/tags/TableTags.d.ts +15 -0
- package/lib/typescript/src/renderer/tags/TableTags.d.ts.map +1 -0
- package/lib/typescript/src/renderer/tags/TextTags.d.ts +22 -0
- package/lib/typescript/src/renderer/tags/TextTags.d.ts.map +1 -0
- package/lib/typescript/src/renderer/tags/index.d.ts +9 -0
- package/lib/typescript/src/renderer/tags/index.d.ts.map +1 -0
- package/lib/typescript/src/styles/cssToRn.d.ts +11 -0
- package/lib/typescript/src/styles/cssToRn.d.ts.map +1 -0
- package/lib/typescript/src/styles/darkModeStyles.d.ts +7 -0
- package/lib/typescript/src/styles/darkModeStyles.d.ts.map +1 -0
- package/lib/typescript/src/styles/defaultStyles.d.ts +8 -0
- package/lib/typescript/src/styles/defaultStyles.d.ts.map +1 -0
- package/lib/typescript/src/styles/index.d.ts +5 -0
- package/lib/typescript/src/styles/index.d.ts.map +1 -0
- package/lib/typescript/src/styles/mergeStyles.d.ts +10 -0
- package/lib/typescript/src/styles/mergeStyles.d.ts.map +1 -0
- package/lib/typescript/src/types/index.d.ts +158 -0
- package/lib/typescript/src/types/index.d.ts.map +1 -0
- package/lib/typescript/src/utils/accessibility.d.ts +32 -0
- package/lib/typescript/src/utils/accessibility.d.ts.map +1 -0
- package/lib/typescript/src/utils/cache.d.ts +24 -0
- package/lib/typescript/src/utils/cache.d.ts.map +1 -0
- package/lib/typescript/src/utils/index.d.ts +33 -0
- package/lib/typescript/src/utils/index.d.ts.map +1 -0
- package/lib/typescript/src/utils/sanitize.d.ts +11 -0
- package/lib/typescript/src/utils/sanitize.d.ts.map +1 -0
- package/package.json +171 -0
- package/src/HtmlRenderer.tsx +216 -0
- package/src/context/index.tsx +30 -0
- package/src/hooks/index.ts +3 -0
- package/src/hooks/useContentWidth.ts +9 -0
- package/src/hooks/useHtmlParser.ts +18 -0
- package/src/hooks/useTagStyle.ts +23 -0
- package/src/index.tsx +39 -0
- package/src/parser/index.ts +80 -0
- package/src/renderer/ErrorBoundary.tsx +80 -0
- package/src/renderer/NodeRenderer.tsx +345 -0
- package/src/renderer/index.tsx +2 -0
- package/src/renderer/tags/BlockTags.tsx +49 -0
- package/src/renderer/tags/FormTags.tsx +169 -0
- package/src/renderer/tags/ImageTag.tsx +215 -0
- package/src/renderer/tags/LinkTag.tsx +76 -0
- package/src/renderer/tags/ListTags.tsx +148 -0
- package/src/renderer/tags/MediaTags.tsx +81 -0
- package/src/renderer/tags/TableTags.tsx +94 -0
- package/src/renderer/tags/TextTags.tsx +139 -0
- package/src/renderer/tags/index.ts +8 -0
- package/src/styles/cssToRn.ts +45 -0
- package/src/styles/darkModeStyles.ts +80 -0
- package/src/styles/defaultStyles.ts +176 -0
- package/src/styles/index.ts +4 -0
- package/src/styles/mergeStyles.ts +59 -0
- package/src/types/index.ts +229 -0
- package/src/utils/accessibility.ts +132 -0
- package/src/utils/cache.ts +83 -0
- package/src/utils/index.ts +151 -0
- 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":";;AAAA,SAASA,IAAI,QAAQ,OAAO;AAC5B,SAASC,IAAI,EAAEC,IAAI,QAAwC,cAAc;AAMzE,SAASC,kBAAkB,QAAQ,sBAAa;AAChD,SAASC,qBAAqB,QAAQ,8BAA2B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AASlE;AACA;AACA;AACA,OAAO,MAAMC,QAAQ,gBAAGP,IAAI,CAAC,SAASO,QAAQA,CAAC;EAC7CC,IAAI;EACJC,KAAK;EACLC,OAAO;EACPC;AACY,CAAC,EAAE;EACf,MAAMC,IAAI,GAAGJ,IAAI,CAACK,UAAU,CAACD,IAAI,IAAI,MAAM;EAC3C,MAAME,KAAK,GAAGN,IAAI,CAACK,UAAU,CAACC,KAAK,IAAIN,IAAI,CAACK,UAAU,CAACE,WAAW,IAAI,EAAE;EACxE,MAAMC,IAAI,GAAGZ,qBAAqB,CAACI,IAAI,CAAC;EAExC,IAAII,IAAI,KAAK,QAAQ,EAAE,OAAO,IAAI;EAElC,IAAIA,IAAI,KAAK,UAAU,IAAIA,IAAI,KAAK,OAAO,EAAE;IAC3C,MAAMK,OAAO,GAAG,SAAS,IAAIT,IAAI,CAACK,UAAU;IAC5C,oBACEP,IAAA,CAACJ,IAAI;MAEHO,KAAK,EAAEA,KAAmB;MAC1BS,iBAAiB,EAAEN,IAAI,KAAK,UAAU,GAAG,UAAU,GAAG,OAAQ;MAC9DO,kBAAkB,EAAE;QAAEF;MAAQ,CAAE;MAChCG,gBAAgB,EAAET,GAAG,CAACS,gBAAiB;MACvCC,qBAAqB,EAAEV,GAAG,CAACU,qBAAsB;MAAA,GAC7CV,GAAG,CAACW,gBAAgB;MAAAC,QAAA,EAEvBX,IAAI,KAAK,UAAU,GAChBK,OAAO,GACL,SAAS,GACT,SAAS,GACXA,OAAO,GACL,SAAS,GACT;IAAS,GAdVP,OAeD,CAAC;EAEX;EAEA,oBACEJ,IAAA,CAACL,IAAI;IAAeQ,KAAK,EAAEA,KAAmB;IAAA,GAAKO,IAAI;IAAAO,QAAA,eACrDjB,IAAA,CAACJ,IAAI;MACHO,KAAK,EAAEe,SAAU;MACjBJ,gBAAgB,EAAET,GAAG,CAACS,gBAAiB;MACvCC,qBAAqB,EAAEV,GAAG,CAACU,qBAAsB;MAAA,GAC7CV,GAAG,CAACW,gBAAgB;MAAAC,QAAA,EAEvBT;IAAK,CACF;EAAC,GAREJ,OASL,CAAC;AAEX,CAAC,CAAC;AAEF,OAAO,MAAMe,WAAW,gBAAGzB,IAAI,CAAC,SAASyB,WAAWA,CAAC;EACnDjB,IAAI;EACJC,KAAK;EACLC,OAAO;EACPC;AACY,CAAC,EAAE;EACf,MAAMe,IAAI,GACRvB,kBAAkB,CAACK,IAAI,CAACe,QAAQ,CAAC,IAAIf,IAAI,CAACK,UAAU,CAACE,WAAW,IAAI,EAAE;EACxE,MAAMC,IAAI,GAAGZ,qBAAqB,CAACI,IAAI,CAAC;EAExC,oBACEF,IAAA,CAACL,IAAI;IAAeQ,KAAK,EAAEA,KAAmB;IAAA,GAAKO,IAAI;IAAAO,QAAA,eACrDjB,IAAA,CAACJ,IAAI;MACHO,KAAK,EAAEe,SAAU;MACjBJ,gBAAgB,EAAET,GAAG,CAACS,gBAAiB;MACvCC,qBAAqB,EAAEV,GAAG,CAACU,qBAAsB;MAAA,GAC7CV,GAAG,CAACW,gBAAgB;MAAAC,QAAA,EAEvBG;IAAI,CACD;EAAC,GAREhB,OASL,CAAC;AAEX,CAAC,CAAC;AAEF,OAAO,MAAMiB,SAAS,gBAAG3B,IAAI,CAAC,SAAS2B,SAASA,CAAC;EAC/CnB,IAAI;EACJC,KAAK;EACLC,OAAO;EACPC;AACY,CAAC,EAAE;EACf,MAAMiB,KAAK,GACTzB,kBAAkB,CAACK,IAAI,CAACe,QAAQ,CAAC,IAAIf,IAAI,CAACK,UAAU,CAACC,KAAK,IAAI,QAAQ;EAExE,oBACER,IAAA,CAACL,IAAI;IAEHQ,KAAK,EAAEA,KAAmB;IAC1BS,iBAAiB,EAAC,QAAQ;IAC1BW,kBAAkB,EAAErB,IAAI,CAACK,UAAU,CAAC,YAAY,CAAC,IAAIe,KAAM;IAAAL,QAAA,eAE3DjB,IAAA,CAACJ,IAAI;MACHO,KAAK,EAAEqB,UAAW;MAClBV,gBAAgB,EAAET,GAAG,CAACS,gBAAiB;MACvCC,qBAAqB,EAAEV,GAAG,CAACU,qBAAsB;MAAA,GAC7CV,GAAG,CAACW,gBAAgB;MAAAC,QAAA,EAEvBK;IAAK,CACF;EAAC,GAZFlB,OAaD,CAAC;AAEX,CAAC,CAAC;AAEF,OAAO,MAAMqB,SAAS,gBAAG/B,IAAI,CAAC,SAAS+B,SAASA,CAAC;EAC/CvB,IAAI;EACJC,KAAK;EACLC,OAAO;EACPC;AACY,CAAC,EAAE;EACf,MAAMqB,OAAO,GAAGxB,IAAI,CAACe,QAAQ,CAACU,MAAM,CACjCC,CAAC,IAAKA,CAAC,CAACtB,IAAI,KAAK,SAAS,IAAIsB,CAAC,CAACC,GAAG,KAAK,QAC3C,CAAC;EACD,IAAIP,KAAK,GAAG,EAAE;EACd,KAAK,MAAMQ,GAAG,IAAIJ,OAAO,EAAE;IACzB,IAAII,GAAG,CAACxB,IAAI,KAAK,SAAS,EAAE;MAC1B,IAAI,UAAU,IAAIwB,GAAG,CAACvB,UAAU,EAAE;QAChCe,KAAK,GAAGzB,kBAAkB,CAACiC,GAAG,CAACb,QAAQ,CAAC;QACxC;MACF;MACA,IAAI,CAACK,KAAK,EAAE;QACVA,KAAK,GAAGzB,kBAAkB,CAACiC,GAAG,CAACb,QAAQ,CAAC;MAC1C;IACF;EACF;EACA,MAAMP,IAAI,GAAGZ,qBAAqB,CAACI,IAAI,CAAC;EAExC,oBACEF,IAAA,CAACL,IAAI;IAAeQ,KAAK,EAAEA,KAAmB;IAAA,GAAKO,IAAI;IAAAO,QAAA,eACrDjB,IAAA,CAACJ,IAAI;MACHO,KAAK,EAAEe,SAAU;MACjBJ,gBAAgB,EAAET,GAAG,CAACS,gBAAiB;MACvCC,qBAAqB,EAAEV,GAAG,CAACU,qBAAsB;MAAA,GAC7CV,GAAG,CAACW,gBAAgB;MAAAC,QAAA,EAEvBK,KAAK,IAAI;IAAQ,CACd;EAAC,GARElB,OASL,CAAC;AAEX,CAAC,CAAC;AAEF,MAAMc,SAAoB,GAAG;EAC3Ba,QAAQ,EAAE,EAAE;EACZC,KAAK,EAAE;AACT,CAAC;AAED,MAAMR,UAAqB,GAAG;EAC5BO,QAAQ,EAAE,EAAE;EACZC,KAAK,EAAE,MAAM;EACbC,UAAU,EAAE,KAAK;EACjBC,SAAS,EAAE;AACb,CAAC","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":[]}
|