react-copy-to-clipboard-ts
Version:
React 18, 19 compatible copy-to-clipboard component with TypeScript
2 lines (1 loc) • 3.08 kB
JavaScript
;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const E=require("react");function R(e){const a=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(a,o,n.get?n:{enumerable:!0,get:()=>e[o]})}}return a.default=e,Object.freeze(a)}const g=R(E);function S(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var b,v;function h(){return v||(v=1,b=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var a=document.activeElement,o=[],n=0;n<e.rangeCount;n++)o.push(e.getRangeAt(n));switch(a.tagName.toUpperCase()){case"INPUT":case"TEXTAREA":a.blur();break;default:a=null;break}return e.removeAllRanges(),function(){e.type==="Caret"&&e.removeAllRanges(),e.rangeCount||o.forEach(function(d){e.addRange(d)}),a&&a.focus()}}),b}var C,w;function k(){if(w)return C;w=1;var e=h(),a={"text/plain":"Text","text/html":"Url",default:"Text"},o="Copy to clipboard: #{key}, Enter";function n(l){var t=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return l.replace(/#{\s*key\s*}/g,t)}function d(l,t){var c,u,f,p,s,r,y=!1;t||(t={}),c=t.debug||!1;try{f=e(),p=document.createRange(),s=document.getSelection(),r=document.createElement("span"),r.textContent=l,r.ariaHidden="true",r.style.all="unset",r.style.position="fixed",r.style.top=0,r.style.clip="rect(0, 0, 0, 0)",r.style.whiteSpace="pre",r.style.webkitUserSelect="text",r.style.MozUserSelect="text",r.style.msUserSelect="text",r.style.userSelect="text",r.addEventListener("copy",function(i){if(i.stopPropagation(),t.format)if(i.preventDefault(),typeof i.clipboardData>"u"){c&&console.warn("unable to use e.clipboardData"),c&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var m=a[t.format]||a.default;window.clipboardData.setData(m,l)}else i.clipboardData.clearData(),i.clipboardData.setData(t.format,l);t.onCopy&&(i.preventDefault(),t.onCopy(i.clipboardData))}),document.body.appendChild(r),p.selectNodeContents(r),s.addRange(p);var T=document.execCommand("copy");if(!T)throw new Error("copy command was unsuccessful");y=!0}catch(i){c&&console.error("unable to copy using execCommand: ",i),c&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",l),t.onCopy&&t.onCopy(window.clipboardData),y=!0}catch(m){c&&console.error("unable to copy using clipboardData: ",m),c&&console.error("falling back to prompt"),u=n("message"in t?t.message:o),window.prompt(u,l)}}finally{s&&(typeof s.removeRange=="function"?s.removeRange(p):s.removeAllRanges()),r&&document.body.removeChild(r),f()}return y}return C=d,C}var O=k();const j=S(O),D=({text:e,onCopy:a,options:o,children:n,...d})=>{const l=g.useCallback(c=>{const u=g.Children.only(n),f=j(e,o);a&&a(e,f),u.props.onClick&&typeof u.props.onClick=="function"&&u.props.onClick(c)},[e,a,o,n]),t=g.Children.only(n);return g.cloneElement(t,{onClick:l,...d})};exports.CopyToClipboard=D;exports.default=D;