1 | import _extends from "@babel/runtime/helpers/extends";
|
---|
2 | import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
---|
3 |
|
---|
4 | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
---|
5 |
|
---|
6 | function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
---|
7 |
|
---|
8 | import React from 'react'; // Get all possible permutations of all power sets
|
---|
9 | //
|
---|
10 | // Super simple, non-algorithmic solution since the
|
---|
11 | // number of class names will not be greater than 4
|
---|
12 |
|
---|
13 | function powerSetPermutations(arr) {
|
---|
14 | var arrLength = arr.length;
|
---|
15 | if (arrLength === 0 || arrLength === 1) return arr;
|
---|
16 |
|
---|
17 | if (arrLength === 2) {
|
---|
18 | // prettier-ignore
|
---|
19 | return [arr[0], arr[1], "".concat(arr[0], ".").concat(arr[1]), "".concat(arr[1], ".").concat(arr[0])];
|
---|
20 | }
|
---|
21 |
|
---|
22 | if (arrLength === 3) {
|
---|
23 | return [arr[0], arr[1], arr[2], "".concat(arr[0], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[2]), "".concat(arr[2], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[0])];
|
---|
24 | }
|
---|
25 |
|
---|
26 | if (arrLength >= 4) {
|
---|
27 | // Currently does not support more than 4 extra
|
---|
28 | // class names (after `.token` has been removed)
|
---|
29 | return [arr[0], arr[1], arr[2], arr[3], "".concat(arr[0], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[3]), "".concat(arr[3], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[3]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[3]), "".concat(arr[0], ".").concat(arr[3], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[3], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[3], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[3], ".").concat(arr[2]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[3], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[3], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[3], ".").concat(arr[1], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[3], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[2], ".").concat(arr[3]), "".concat(arr[0], ".").concat(arr[1], ".").concat(arr[3], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[1], ".").concat(arr[3]), "".concat(arr[0], ".").concat(arr[2], ".").concat(arr[3], ".").concat(arr[1]), "".concat(arr[0], ".").concat(arr[3], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[0], ".").concat(arr[3], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[2], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[0], ".").concat(arr[3], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[0], ".").concat(arr[3]), "".concat(arr[1], ".").concat(arr[2], ".").concat(arr[3], ".").concat(arr[0]), "".concat(arr[1], ".").concat(arr[3], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[1], ".").concat(arr[3], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[1], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[0], ".").concat(arr[3], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[0], ".").concat(arr[3]), "".concat(arr[2], ".").concat(arr[1], ".").concat(arr[3], ".").concat(arr[0]), "".concat(arr[2], ".").concat(arr[3], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[2], ".").concat(arr[3], ".").concat(arr[1], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[0], ".").concat(arr[1], ".").concat(arr[2]), "".concat(arr[3], ".").concat(arr[0], ".").concat(arr[2], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[1], ".").concat(arr[0], ".").concat(arr[2]), "".concat(arr[3], ".").concat(arr[1], ".").concat(arr[2], ".").concat(arr[0]), "".concat(arr[3], ".").concat(arr[2], ".").concat(arr[0], ".").concat(arr[1]), "".concat(arr[3], ".").concat(arr[2], ".").concat(arr[1], ".").concat(arr[0])];
|
---|
30 | }
|
---|
31 | }
|
---|
32 |
|
---|
33 | var classNameCombinations = {};
|
---|
34 |
|
---|
35 | function getClassNameCombinations(classNames) {
|
---|
36 | if (classNames.length === 0 || classNames.length === 1) return classNames;
|
---|
37 | var key = classNames.join('.');
|
---|
38 |
|
---|
39 | if (!classNameCombinations[key]) {
|
---|
40 | classNameCombinations[key] = powerSetPermutations(classNames);
|
---|
41 | }
|
---|
42 |
|
---|
43 | return classNameCombinations[key];
|
---|
44 | }
|
---|
45 |
|
---|
46 | export function createStyleObject(classNames) {
|
---|
47 | var elementStyle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
---|
48 | var stylesheet = arguments.length > 2 ? arguments[2] : undefined;
|
---|
49 | var nonTokenClassNames = classNames.filter(function (className) {
|
---|
50 | return className !== 'token';
|
---|
51 | });
|
---|
52 | var classNamesCombinations = getClassNameCombinations(nonTokenClassNames);
|
---|
53 | return classNamesCombinations.reduce(function (styleObject, className) {
|
---|
54 | return _objectSpread(_objectSpread({}, styleObject), stylesheet[className]);
|
---|
55 | }, elementStyle);
|
---|
56 | }
|
---|
57 | export function createClassNameString(classNames) {
|
---|
58 | return classNames.join(' ');
|
---|
59 | }
|
---|
60 | export function createChildren(stylesheet, useInlineStyles) {
|
---|
61 | var childrenCount = 0;
|
---|
62 | return function (children) {
|
---|
63 | childrenCount += 1;
|
---|
64 | return children.map(function (child, i) {
|
---|
65 | return createElement({
|
---|
66 | node: child,
|
---|
67 | stylesheet: stylesheet,
|
---|
68 | useInlineStyles: useInlineStyles,
|
---|
69 | key: "code-segment-".concat(childrenCount, "-").concat(i)
|
---|
70 | });
|
---|
71 | });
|
---|
72 | };
|
---|
73 | }
|
---|
74 | export default function createElement(_ref) {
|
---|
75 | var node = _ref.node,
|
---|
76 | stylesheet = _ref.stylesheet,
|
---|
77 | _ref$style = _ref.style,
|
---|
78 | style = _ref$style === void 0 ? {} : _ref$style,
|
---|
79 | useInlineStyles = _ref.useInlineStyles,
|
---|
80 | key = _ref.key;
|
---|
81 | var properties = node.properties,
|
---|
82 | type = node.type,
|
---|
83 | TagName = node.tagName,
|
---|
84 | value = node.value;
|
---|
85 |
|
---|
86 | if (type === 'text') {
|
---|
87 | return value;
|
---|
88 | } else if (TagName) {
|
---|
89 | var childrenCreator = createChildren(stylesheet, useInlineStyles);
|
---|
90 | var props;
|
---|
91 |
|
---|
92 | if (!useInlineStyles) {
|
---|
93 | props = _objectSpread(_objectSpread({}, properties), {}, {
|
---|
94 | className: createClassNameString(properties.className)
|
---|
95 | });
|
---|
96 | } else {
|
---|
97 | var allStylesheetSelectors = Object.keys(stylesheet).reduce(function (classes, selector) {
|
---|
98 | selector.split('.').forEach(function (className) {
|
---|
99 | if (!classes.includes(className)) classes.push(className);
|
---|
100 | });
|
---|
101 | return classes;
|
---|
102 | }, []); // For compatibility with older versions of react-syntax-highlighter
|
---|
103 |
|
---|
104 | var startingClassName = properties.className && properties.className.includes('token') ? ['token'] : [];
|
---|
105 | var className = properties.className && startingClassName.concat(properties.className.filter(function (className) {
|
---|
106 | return !allStylesheetSelectors.includes(className);
|
---|
107 | }));
|
---|
108 | props = _objectSpread(_objectSpread({}, properties), {}, {
|
---|
109 | className: createClassNameString(className) || undefined,
|
---|
110 | style: createStyleObject(properties.className, Object.assign({}, properties.style, style), stylesheet)
|
---|
111 | });
|
---|
112 | }
|
---|
113 |
|
---|
114 | var children = childrenCreator(node.children);
|
---|
115 | return /*#__PURE__*/React.createElement(TagName, _extends({
|
---|
116 | key: key
|
---|
117 | }, props), children);
|
---|
118 | }
|
---|
119 | } |
---|