added files
diff --git a/Components/Texttools.js b/Components/Texttools.js
new file mode 100644
index 0000000..5f929bd
--- /dev/null
+++ b/Components/Texttools.js
@@ -0,0 +1,72 @@
+import react, { Component } from "react";
+import Styles from '../styles/Components/texttools.module.css';
+import { Popover } from 'react-tiny-popover';
+
+
+class List extends Component {
+ constructor(props) {
+ super(props);
+ }
+
+ render() {
+ return (
+ <div className={Styles.list}>
+ {
+ react.Children.toArray(this.props.children).map((item, index) => {
+ return <div key={index} className={Styles.listItem}>
+ <div className={Styles.square} style={{borderColor: `#${this.props.colour}`}} />
+ <div>{item}</div>
+ </div>
+ })
+ }
+ </div>
+ )
+ }
+}
+
+class ListItem extends Component {
+ render() {
+ return this.props.children
+ }
+}
+
+class Code extends Component {
+ constructor(props) {
+ super(props);
+ this.state = {
+ isPopoverOpen: false,
+ };
+ }
+
+ clicked() {
+ let content = this.props.children
+ navigator.clipboard.writeText(content)
+ this.setState({isPopoverOpen: true})
+ setTimeout(() => {
+ this.setState({isPopoverOpen: false})
+ }, 1000)
+ }
+
+ render() {
+ if ( this.props.clickable === false) {
+ return <pre
+ className={Styles.code}
+ style={{color: `#${this.props.colour}`, boxShadow: `0px -3px 10px 2px #000000`}}
+ >{this.props.children}</pre>
+ } else {
+ return <Popover
+ isOpen={this.state.isPopoverOpen}
+ positions={['top', 'bottom', 'left', 'right']} // preferred positions by priority
+ content={<Code colour={this.props.colour} clickable={false}>Copied!</Code>}
+ >
+ <pre
+ className={Styles.code}
+ style={{color: `#${this.props.colour}`}}
+ onClick={() => this.clicked()}
+ >{this.props.children}</pre>
+ </Popover>
+ }
+ }
+}
+
+export { List, ListItem, Code };
\ No newline at end of file