UNPKG

react-native-code-highlighter

Version:
70 lines (69 loc) 3.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.CodeHighlighter = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _reactSyntaxHighlighter = _interopRequireDefault(require("react-syntax-highlighter")); var _trimNewlines = require("trim-newlines"); var _styles = require("./../utils/styles"); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } const CodeHighlighter = ({ children, textStyle, hljsStyle, scrollViewProps, containerStyle, ...rest }) => { const stylesheet = (0, _react.useMemo)(() => (0, _styles.getRNStylesFromHljsStyle)(hljsStyle), [hljsStyle]); const getStylesForNode = node => { const classes = node.properties?.className ?? []; return classes.map(c => stylesheet[c]).filter(c => !!c); }; const renderNode = (nodes, keyPrefix = "row") => nodes.reduce((acc, node, index) => { const keyPrefixWithIndex = `${keyPrefix}_${index}`; if (node.children) { const styles = _reactNative.StyleSheet.flatten([textStyle, { color: stylesheet.hljs?.color }, getStylesForNode(node)]); acc.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, { style: styles, children: renderNode(node.children, `${keyPrefixWithIndex}_child`) }, keyPrefixWithIndex)); } if (node.value) { acc.push((0, _trimNewlines.trimNewlines)(String(node.value))); } return acc; }, []); const renderer = props => { const { rows } = props; return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, { ...scrollViewProps, horizontal: true, contentContainerStyle: [stylesheet.hljs, scrollViewProps?.contentContainerStyle, containerStyle], children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, { onStartShouldSetResponder: () => true, children: renderNode(rows) }) }); }; return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactSyntaxHighlighter.default, { ...rest, renderer: renderer, CodeTag: _reactNative.View, PreTag: _reactNative.View, style: {}, testID: "react-native-code-highlighter", children: children }); }; exports.CodeHighlighter = CodeHighlighter; var _default = exports.default = CodeHighlighter; //# sourceMappingURL=CodeHighlighter.js.map