phoenix_duskmoon 9.7.1 → 9.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- const e=[`dm-click`,`dm-change`,`dm-input`,`dm-focus`,`dm-blur`,`dm-submit`,`dm-select`,`dm-close`,`dm-open`,`dm-toggle`],t={mounted(){this._sendListeners=[],this._setupEventBridging(),this._setupAutomaticForwarding()},updated(){this._setupAutomaticForwarding()},destroyed(){this._sendListeners&&(this._sendListeners.forEach(({event:e,listener:t})=>{this.el.removeEventListener(e,t)}),this._sendListeners=null),e.forEach(e=>{let t=`_dm_listener_${e}`;this[t]&&(this.el.removeEventListener(e,this[t]),this[t]=null)})},_setupEventBridging(){let e=this.el.attributes,t=this.el.getAttribute(`phx-target`),n=(e,n,r)=>{t?this.pushEventTo(t,e,n,r):this.pushEvent(e,n,r)};for(let t=0;t<e.length;t++){let r=e[t];if(/^duskmoon-send-/.test(r.name)){let e=r.name.replace(/^duskmoon-send-/,``),[t,i]=r.value.split(`;`),a=({detail:r})=>{n(t,r||{},t=>{i&&typeof this[i]==`function`&&this[i](t,r,e)})};this.el.addEventListener(e,a),this._sendListeners.push({event:e,listener:a})}if(/^duskmoon-receive-/.test(r.name)){let e=r.name.replace(/^duskmoon-receive-/,``),t=r.value;this.handleEvent(e,n=>{t&&typeof this.el[t]==`function`?this.el[t](n):this.el.dispatchEvent(new CustomEvent(e,{detail:n,bubbles:!0,composed:!0}))})}if(r.name===`duskmoon-receive`){let[e,t]=r.value.split(`;`);this.handleEvent(e,e=>{typeof this.el[t]==`function`&&this.el[t](e)})}}},_setupAutomaticForwarding(){let t=this.el.getAttribute(`phx-target`);e.forEach(e=>{let n=`phx-`+e.replace(`dm-`,``),r=this.el.getAttribute(n);if(r){let n=`_dm_listener_${e}`;this[n]&&this.el.removeEventListener(e,this[n]),this[n]=e=>{let n={...e.detail||{},value:this.el.value,name:this.el.name,checked:this.el.checked};t?this.pushEventTo(t,r,n):this.pushEvent(r,n)},this.el.addEventListener(e,this[n])}})}},n={...t,mounted(){t.mounted.call(this),this._setupFormIntegration()},_setupFormIntegration(){let e=this.el.getAttribute(`name`),t=this.el.getAttribute(`phx-feedback-for`)||e;t&&this._setupFeedbackObserver(t)},destroyed(){t.destroyed.call(this),this._feedbackObserver&&(this._feedbackObserver.disconnect(),this._feedbackObserver=null)},_setupFeedbackObserver(e){let t=this.el.closest(`form`);t&&(this._feedbackObserver=new MutationObserver(n=>{n.forEach(n=>{if(n.attributeName===`class`){let n=t.classList.contains(`phx-no-feedback`);this.el.dispatchEvent(new CustomEvent(`dm-feedback-change`,{detail:{showFeedback:!n,field:e}}))}})}),this._feedbackObserver.observe(t,{attributes:!0,attributeFilter:[`class`]}))}};typeof window<`u`&&(window.__WebComponentHook__=t,window.__FormElementHook__=n);export{n as FormElementHook,t as WebComponentHook};
1
+ const e=[`dm-click`,`dm-change`,`dm-input`,`dm-focus`,`dm-blur`,`dm-submit`,`dm-select`,`dm-close`,`dm-open`,`dm-toggle`],t=Symbol.for(`phoenix-duskmoon.copy-listener`),n=new WeakMap,r={mounted(){this._sendListeners=[],this._setupEventBridging(),this._setupAutomaticForwarding()},updated(){this._setupAutomaticForwarding()},destroyed(){this._sendListeners&&(this._sendListeners.forEach(({event:e,listener:t})=>{this.el.removeEventListener(e,t)}),this._sendListeners=null),e.forEach(e=>{let t=`_dm_listener_${e}`;this[t]&&(this.el.removeEventListener(e,this[t]),this[t]=null)})},_setupEventBridging(){let e=this.el.attributes,t=this.el.getAttribute(`phx-target`),n=(e,n,r)=>{t?this.pushEventTo(t,e,n,r):this.pushEvent(e,n,r)};for(let t=0;t<e.length;t++){let r=e[t];if(/^duskmoon-send-/.test(r.name)){let e=r.name.replace(/^duskmoon-send-/,``),[t,i]=r.value.split(`;`),a=({detail:r})=>{n(t,r||{},t=>{i&&typeof this[i]==`function`&&this[i](t,r,e)})};this.el.addEventListener(e,a),this._sendListeners.push({event:e,listener:a})}if(/^duskmoon-receive-/.test(r.name)){let e=r.name.replace(/^duskmoon-receive-/,``),t=r.value;this.handleEvent(e,n=>{t&&typeof this.el[t]==`function`?this.el[t](n):this.el.dispatchEvent(new CustomEvent(e,{detail:n,bubbles:!0,composed:!0}))})}if(r.name===`duskmoon-receive`){let[e,t]=r.value.split(`;`);this.handleEvent(e,e=>{typeof this.el[t]==`function`&&this.el[t](e)})}}},_setupAutomaticForwarding(){let t=this.el.getAttribute(`phx-target`);e.forEach(e=>{let n=`phx-`+e.replace(`dm-`,``),r=this.el.getAttribute(n);if(r){let n=`_dm_listener_${e}`;this[n]&&this.el.removeEventListener(e,this[n]),this[n]=e=>{let n={...e.detail||{},value:this.el.value,name:this.el.name,checked:this.el.checked};t?this.pushEventTo(t,r,n):this.pushEvent(r,n)},this.el.addEventListener(e,this[n])}})}},i={...r,mounted(){r.mounted.call(this),this._setupFormIntegration()},_setupFormIntegration(){let e=this.el.getAttribute(`name`),t=this.el.getAttribute(`phx-feedback-for`)||e;t&&this._setupFeedbackObserver(t)},destroyed(){r.destroyed.call(this),this._feedbackObserver&&(this._feedbackObserver.disconnect(),this._feedbackObserver=null)},_setupFeedbackObserver(e){let t=this.el.closest(`form`);t&&(this._feedbackObserver=new MutationObserver(n=>{n.forEach(n=>{if(n.attributeName===`class`){let n=t.classList.contains(`phx-no-feedback`);this.el.dispatchEvent(new CustomEvent(`dm-feedback-change`,{detail:{showFeedback:!n,field:e}}))}})}),this._feedbackObserver.observe(t,{attributes:!0,attributeFilter:[`class`]}))}};async function a(e,t=globalThis){let n=t.navigator?.clipboard;if(typeof n?.writeText==`function`){await n.writeText(e);return}let r=t.document;if(!r?.body||typeof r.execCommand!=`function`)throw Error(`Clipboard API is unavailable`);let i=r.createElement(`textarea`),a=r.activeElement;i.value=e,i.setAttribute(`readonly`,``),i.style.position=`fixed`,i.style.opacity=`0`,r.body.appendChild(i);try{if(i.focus(),i.select(),!r.execCommand(`copy`))throw Error(`Clipboard copy command failed`)}finally{r.body.removeChild(i),a?.focus?.()}}function o(e){let t=e.nextElementSibling;return t?.matches?.(`[data-copy-status]`)?t:e.parentElement?.querySelector?.(`[data-copy-status]`)??null}function s(e,t,r,i){let a=e.querySelector?.(`[data-copy-label]`),s=o(e),c=n.get(e),l=i.cancelReset??globalThis.clearTimeout,u=i.scheduleReset??globalThis.setTimeout;c?.timer!==void 0&&l(c.timer);let d=c?.originalLabel??a?.textContent??`Copy`;a&&(a.textContent=t),s&&(s.textContent=t),e.dataset.copyState=r;let f=u(()=>{a&&(a.textContent=d),s&&(s.textContent=``),delete e.dataset.copyState,n.delete(e)},2e3);n.set(e,{originalLabel:d,timer:f})}async function c(e,t={}){let n=e.target?.closest?.(`[data-copy-value]`);if(!n||n.disabled||n.getAttribute?.(`aria-disabled`)===`true`)return;let r=t.copy??a;try{await r(n.dataset.copyValue),s(n,n.dataset.copySuccess??`Copied`,`success`,t)}catch{s(n,n.dataset.copyFailure??`Copy failed`,`error`,t)}}function l(e=globalThis.document,n={}){if(!e?.addEventListener||e[t])return;let r=e=>c(e,n);e.addEventListener(`click`,r),e[t]=r}l(),typeof window<`u`&&(window.__WebComponentHook__=r,window.__FormElementHook__=i);export{i as FormElementHook,r as WebComponentHook,a as copyTextToClipboard,c as handleClipboardClick,l as installClipboardBehavior};