Overview
The Copy component displays a copy button and attempts to write code to a clipboard when the button is clicked.
type Props = {
  header: React.ReactNode;
  footer: React.ReactNode;
}
class Layout extends React.Component<Props> {
  render() {
    return (
      <div>
        { this.props.header }
        
        <main id="main">
          { this.props.children }
        </main>
        
        { this.props.footer }
      </div>
    )
  }
}
      The click button works only when the code is highlighted by the 
apply() method. If you use html(), you have to manually handle the click and copy.Usage
Register the Overlay and Copy components:
import { RyuseiLight, Overlay, Copy } from '@ryusei/light';
RyuseiLight.compose( { Overlay, Copy } );
      Or import the component files:
<script src="path-to-the-file/overlay.min.js"></script> <script src="path-to-the-file/copy.min.js"></script>
Then, set the copy option to true:
ryuseilight.apply( 'pre', { copy: true } );
      Options
The Copy component accepts some options by providing an object literal instead of true.
| Option | Description | 
|---|---|
| position | Determines a position where to display the button by topLeftortopRight. | 
| html | An HTML string for the button content. | 
| activeHtml | An HTML string for the button content displayed after the button is clicked. | 
| duration | Duration in milliseconds for displaying the activeHTML. | 
| ariaLabel | The value for aria-labelof the button. | 
For example, you can change the button text like this:
ryuseilight.apply( 'pre', { 
  copy: {
    html      : 'Copy code',
    activeHtml: 'Copied!',
  },
} );
      These values accept an HTML string so that you can set icons or whatever you want.
ryuseilight.apply( 'pre', { 
  copy: {
    html      : '<svg>...</svg>',
    activeHtml: '<svg>...</svg>',
  },
} );