@arche-mc2/arche-controls
Version:
We know that there are a ton of react UI library projects to choose from. Our hope with this one is to provide the next generation of react components that you can use to bootstrap your next project, or as a reference for building a UIKit. Read on to get
79 lines • 4.23 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var React = require("react");
var classnames = require("classnames");
var typestyle_1 = require("typestyle");
var prism_react_renderer_1 = require("prism-react-renderer");
var Paragraph_1 = require("../Paragraph");
var Box_1 = require("../../Containers/Box");
var ButtonGroup_1 = require("../../Containers/ButtonGroup");
var UpButton_1 = require("../../Inputs/Button/UpButton");
var Heading_1 = require("../../Display/Heading");
var UpCodeViewer = function (_a) {
var _b = _a.language, language = _b === void 0 ? 'jsx' : _b, code = _a.code, theme = _a.theme, divProps = tslib_1.__rest(_a, ["language", "code", "theme"]);
var _c = React.useState(''), copySuccess = _c[0], setCopySuccess = _c[1];
var textAreaRef = React.useRef(null);
var copyToClipboard = function (e) {
textAreaRef.current.select();
document.execCommand('copy');
e.target.focus();
setCopySuccess('Copied!');
};
var toolBarStyle = typestyle_1.style({
$nest: {}
});
return React.createElement(Paragraph_1.default, { className: classnames('up-code-viewer', typestyle_1.style({
maxWidth: '100%',
$nest: {
'.prism-code': {
maxWidth: '100%',
overflowX: 'auto',
borderBottomLeftRadius: '6px',
borderBottomRightRadius: '6px',
borderTopLeftRadius: '0px',
borderTopRightRadius: '0px',
padding: '8px',
marginTop: '0px'
},
'.prism-code span': {
textAlign: 'left'
},
'.prism-code div': {
textAlign: 'left',
},
'.up-codeviewer-toolbar': {
paddingRight: '8px',
marginTop: '0px',
backgroundColor: 'whitesmoke',
padding: '4px',
borderTopLeftRadius: '6px',
borderTopRightRadius: '6px',
borderBottomLeftRadius: '0px',
borderBottomRightRadius: '0px',
},
'.up-codeviewer-toolbar .up-btn-wrapper:first-child': {
marginRight: '0px',
width: '24px',
},
'.up-codeviewer-toolbar-title': {
margin: '0px',
textAlign: 'left',
fontSize: '14px',
flex: 1
}
}
})) },
React.createElement(Box_1.default, { flexDirection: 'row', justifyContent: 'flex-end', alignItems: 'flex-end', className: 'up-codeviewer-toolbar' },
React.createElement(Heading_1.default, { className: 'up-codeviewer-toolbar-title', tag: 'h3' }, "Code"),
React.createElement(ButtonGroup_1.default, null,
React.createElement(UpButton_1.default, { intent: 'primary', onClick: copyToClipboard, width: 'icon', actionType: 'copy' }))),
React.createElement(prism_react_renderer_1.default, tslib_1.__assign({}, prism_react_renderer_1.defaultProps, { language: language, code: code }), function (_a) {
var className = _a.className, style = _a.style, tokens = _a.tokens, getLineProps = _a.getLineProps, getTokenProps = _a.getTokenProps;
return (React.createElement("pre", { className: className, style: style }, tokens.map(function (line, i) { return (React.createElement("div", tslib_1.__assign({}, getLineProps({ line: line, key: i })), line.map(function (token, key) { return (React.createElement("span", tslib_1.__assign({}, getTokenProps({ token: token, key: key })))); }))); })));
}),
React.createElement("form", { style: { position: 'absolute', left: '-9999px' } },
React.createElement("textarea", { ref: textAreaRef, value: code, onChange: function (e) { return null; } })));
};
exports.default = UpCodeViewer;
//# sourceMappingURL=UpCodeViewer.js.map