@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,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 @@
|
|
|
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":[]}
|