@bothub-chat/ui
Version:
Bothub UI Components
2 lines (1 loc) • 2 kB
JavaScript
import{useEffect as t}from"react";import{getTgMarkdown as e}from"./getTgMarkdown.js";const o=["color","background","background-color","font-size"],r=t=>function(r){var n;if(!r.clipboardData)return;const a=window.getSelection();if(!a||!a.rangeCount)return;const l=a.getRangeAt(0);let s=null;l.commonAncestorContainer.getElementsByTagName&&(s=l.commonAncestorContainer.getElementsByTagName("*"));const c=document.createElement("div");c.appendChild(l.cloneContents());const i=c.getElementsByTagName("*");Array.from(i).forEach(((t,e)=>{if((t=>"style"in t)(t)){const r=s?s[e]:null;if(r){const e=window.getComputedStyle(r),n={};for(const t of e)if(!o.includes(t)){const o=e.getPropertyValue(t);o&&(n[t]=o)}for(const[e,o]of Object.entries(n))t.style.setProperty(e,o)}t.style.removeProperty("color"),t.style.removeProperty("background"),t.style.removeProperty("background-color"),t.removeAttribute("class"),"TABLE"===t.tagName&&(t.style.setProperty("border-collapse","collapse"),t.style.setProperty("border","1px solid black")),"TD"!==t.tagName&&"TH"!==t.tagName||(t.style.setProperty("border","1px solid black"),t.style.setProperty("padding","4px")),"HR"===t.tagName&&(t.style.setProperty("width","100%"),t.style.setProperty("height","1px"),t.style.setProperty("background-color","black")),"LI"===t.tagName&&(t.style.textAlign="start",t.style.textIndent="-24pt",t.style.paddingLeft="24pt")}}));const p=!!(null===(n=r.target)||void 0===n?void 0:n.closest('[data-codeblock="true"]'));if(r.clipboardData.setData("text/html",c.innerHTML),t&&!p){const t=e(c.innerText);r.clipboardData.setData("text/plain",t)}else r.clipboardData.setData("text/plain",c.innerText);r.preventDefault(),r.stopImmediatePropagation(),r.stopPropagation()},n=(e,o=!0)=>{t((()=>{var t;const n=r(o);return null===(t=e.current)||void 0===t||t.addEventListener("copy",n,{capture:!1}),()=>{var t;null===(t=e.current)||void 0===t||t.removeEventListener("copy",n,{capture:!1})}}),[o])};export{r as buildOnCopy,n as useMessageCopyHandler};