UNPKG

@nguyenviet3057/react-native-code-highlighter

Version:
84 lines (83 loc) 3.93 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 _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } const CodeHighlighter = ({ children, textStyle, hljsStyle, viewProps, 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), _reactNative.StyleSheet.create(node.properties?.style) // This style uses width unit by `em`, so not work ]); if (node.children.every(node => node.type === "text") && node.children.filter(node => node.value !== "").length === 0) { return acc; } acc.push(node.children.every(node => node.type === "text") ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, { style: [styles], children: (0, _trimNewlines.trimNewlines)(node.children.map(node => node.value).join("")) }, keyPrefixWithIndex) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, { style: [{ display: "flex", flexDirection: "row", flexWrap: "wrap", alignItems: "center" }, styles], children: renderNode(node.children, `${keyPrefixWithIndex}_child`) }, keyPrefixWithIndex)); } if (node.value) { acc.push(/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, { children: (0, _trimNewlines.trimNewlines)(String(node.value)) }, keyPrefixWithIndex)); } return acc; }, []); const renderer = props => { const { rows } = props; return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, { ...viewProps, style: [stylesheet.hljs, viewProps?.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