Source: clipboard.mjs

/**
 * Provides access to the system clipboard
 *
 * @module clipboard
 *
 * @example
 *   import clipboard from 'clipboard'
 *
 */

/* global Java */
const clipboard = {}
export default clipboard

/**
 * Set or get the clipboard content as text
 *
 * <dl>
 *   <dt><code class="signature">get</code></dt>
 *   <dd class="param-desc">Replies the clipboard content as text or <code>undefined</code>,
 *   if no clipboard content is available or if it can't be converted to a
 *   string.</dd>
 *
 *   <dt><code class="signature">set</code></dt>
 *   <dd class="param-desc">Sets the clipboard content</dd>
 * </dl>
 *
 * @example
 * import clipboard from 'clipboard'
 * // set the clipboard content
 * clipboard.text = 'Hello World!'
 *
 * @property {string} text clipboard content as text
 * @name text
 * @summary Set or get the clipboard content as text
 * @static
 */
Object.defineProperty(clipboard, 'text', {
  enumerable: true,
  get: function () {
    const Toolkit = Java.type('java.awt.Toolkit')
    const DataFlavor = Java.type('java.awt.datatransfer.DataFlavor')
    const transferable = Toolkit.getDefaultToolkit()
      .getSystemClipboard().getContents(null)
    try {
      if (transferable && transferable.isDataFlavorSupported(DataFlavor.stringFlavor)) {
        return transferable.getTransferData(DataFlavor.stringFlavor)
      }
    } catch (e) {
    }
    return undefined
  },

  set: function (value) {
    const StringSelection = Java.type('java.awt.datatransfer.StringSelection')
    const Toolkit = Java.type('java.awt.Toolkit')
    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(
      new StringSelection(String(value || '')),
      null
    )
  }
})