@hazem3500/komo 0.9.32 → 0.9.34
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.
- package/README.md +1 -1
- package/dist/chunk-GC5MILHC.js +1 -0
- package/dist/chunk-ZJWJEB5S.js +1 -0
- package/dist/design-comment-NXUBOTV3.js +1 -0
- package/dist/design-mode.js +1 -1
- package/dist/index.js +1 -1
- package/dist/{inline-text-editor-VIICPLUY.js → inline-text-editor-WCVLLHZQ.js} +1 -1
- package/dist/node.mjs +1 -1
- package/dist/react.js +1 -1
- package/dist/server.js +1 -1
- package/dist/setup.js +1 -1
- package/dist/types.d.ts +4 -3
- package/package.json +1 -1
- package/server/setup-client.txt +49 -45
- package/src/types.ts +4 -3
- package/dist/chunk-LDZL6B65.js +0 -1
- package/dist/chunk-MU3NFN44.js +0 -1
- package/dist/design-comment-SBTYFBOV.js +0 -1
package/dist/design-mode.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,b as t,e as n,f as i,h as o}from"./chunk-5BPQP3VG.js";import{a as s,b as a}from"./chunk-RPY7OOOR.js";import{a as d}from"./chunk-53M6AOAX.js";import{j as r,k as l}from"./chunk-PLSWBSSX.js";var c=(e,t)=>Object.assign(r("button",e,t),{type:"button"}),p=e=>"function"==typeof matchMedia&&matchMedia(e).matches,g=()=>p("(prefers-reduced-motion: reduce)");function u(u){let h=r("style");h.textContent='.design-outline{position:fixed;z-index:1;pointer-events:none;box-sizing:border-box;outline:2px solid var(--accent,#bda6ef);outline-offset:2px;transition:opacity 80ms ease}.design-outline[data-kind=hover]{outline-style:dashed;opacity:.8}.design-outline--prospective[data-kind=hover]{opacity:.55}.design-inspector{position:absolute;inset:0;z-index:9;display:flex;flex-direction:column;overflow:hidden;color:#e9e6e1;background:#0d0d0d;border-radius:inherit;font:12px/1.4 -apple-system,BlinkMacSystemFont,Inter,Segoe UI,sans-serif;color-scheme:dark;opacity:0;translate:0 6px;pointer-events:none;transition:opacity .15s var(--ease-smooth-out),translate .25s var(--ease-smooth-out)}.design-inspector[hidden]{display:none}:host([data-sidebar="background"]) .design-inspector{position:fixed;inset:0 0 0 auto;width:380px;border-radius:0}:host([data-sidebar="edge"]) .design-inspector__heading{cursor:grab;touch-action:none;padding-top:22px}:host(.design-active[data-sidebar="edge"]) .edge-sidebar .edge-sidebar-grip{z-index:10;opacity:1!important}.design-inspector[data-state=active]{opacity:1;translate:0 0;pointer-events:auto}.design-inspector[data-state=closing]{opacity:0;translate:0 4px}.design-inspector button{cursor:pointer}.design-inspector__heading{flex:none;display:flex;align-items:center;gap:4px;min-height:54px;padding:0 8px 0 12px}.design-inspector__identity{min-width:0;flex:1;display:flex;align-items:baseline;gap:6px;white-space:nowrap}.design-inspector__parent{flex:none;max-width:35%;overflow:hidden;text-overflow:ellipsis;margin-left:-6px;padding:2px 6px;border-radius:7px;color:#909090;font-size:15px;font-weight:500}.design-inspector__parent:after{content:"/";margin-left:6px;color:#555}.design-inspector__target{flex:none;max-width:60%;overflow:hidden;text-overflow:ellipsis;color:#fff;font-weight:600;font-size:15px}.design-inspector__heading small{min-width:0;overflow:hidden;text-overflow:ellipsis;color:#909090;font-size:13px}.design-inspector__back,.design-inspector__close,.design-inspector__fold,.design-inspector__actions button{display:grid;place-items:center;min-width:28px;height:28px;border-radius:7px;color:#909090}.design-inspector__back,.design-inspector__close,.design-inspector__fold{flex:none}.design-inspector__back svg,.design-inspector__close svg,.design-inspector__fold svg,.design-inspector__actions svg{width:16px;height:16px}.design-inspector__back svg{rotate:90deg}.design-inspector__back[hidden]{display:none}.design-inspector__back:hover,.design-inspector__parent:hover,.design-inspector__close:hover,.design-inspector__fold:hover,.design-inspector__actions button:hover:not(:disabled){background:#161616;color:#eee}.design-inspector__fold{display:none}.design-inspector__fold svg{transition:rotate .25s var(--ease-smooth-out)}.design-inspector[data-folded] .design-inspector__fold svg{rotate:180deg}.design-inspector[data-folded]>:not(.design-inspector__heading){display:none}.design-inspector__controls{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin}:host([data-sidebar="edge"]) .edge-sidebar[data-design-empty]:not([data-morphing]){height:auto!important}:host([data-sidebar="edge"]) [data-design-empty]>.design-inspector{position:relative;inset:auto}:host([data-sidebar="edge"]) [data-design-empty]:not([data-morphing])>.toolbar{position:absolute}.design-inspector[data-empty] .design-inspector__identity{visibility:hidden}.design-inspector[data-empty] .design-inspector__controls{display:grid;place-items:center}.design-inspector[data-empty] .design-inspector__bar:not([data-changes],[data-message]){display:none}.design-inspector__bar{flex:none;display:flex;align-items:center;gap:8px;min-height:56px;padding:0 12px;border-top:1px solid #ffffff0d;color:#909090;font-size:12px}.design-inspector__actions{display:flex;align-items:center;gap:2px;margin-left:auto}.design-inspector__actions button:disabled{cursor:default;opacity:.35}.design-inspector__actions button:last-child{min-height:34px;margin-left:6px;padding:0 14px;border-radius:8px;background:var(--accent,#bda6ef);color:#211b2d;font-size:12px;font-weight:500}.design-inspector__actions button:last-child:hover:not(:disabled){background:var(--accent,#bda6ef);color:#211b2d;filter:brightness(1.08)}.design-inspector :focus-visible{outline:2px solid var(--accent,#bda6ef);outline-offset:2px}@media(max-width:520px){.design-inspector{position:fixed;inset:auto 12px calc(12px + env(safe-area-inset-bottom,0px));max-height:min(58dvh,560px);border-radius:24px;box-shadow:0 -1px #ffffff24,0 16px 48px #0005;transition:translate .32s cubic-bezier(.22,1,.36,1),scale .32s cubic-bezier(.22,1,.36,1),opacity .15s ease;transform-origin:bottom center}.design-inspector__heading{height:52px;padding-left:18px}.design-inspector__fold{display:grid}.design-inspector[data-empty] .design-inspector__identity{visibility:visible}.design-inspector .design-field{height:34px}}@media(prefers-reduced-motion:reduce){.design-outline,.design-inspector,.design-inspector__fold svg,.design-inspector__status{transition:none;animation:none}}\n';let m=null,f=import("./design-panel-ISV2MKNX.js").then(e=>{h.textContent+=e.designPanelStyles,m=e},()=>{D.textContent="Design controls unavailable · try again"}),b=r("aside","design-inspector");b.setAttribute("role","dialog"),b.setAttribute("aria-label","Design mode inspector"),b.setAttribute("aria-hidden","true"),b.hidden=!0;let v=r("div","design-outline");v.setAttribute("aria-hidden","true");let x=r("div","design-outline design-outline--prospective");x.setAttribute("aria-hidden","true"),x.dataset.kind="hover",x.hidden=!0;let y=r("div","design-inspector__heading"),_=null,w=c("design-inspector__back");w.hidden=!0,w.append(l("chevron")),w.addEventListener("click",()=>_?.run());let E=c("design-inspector__parent");E.hidden=!0;let k=r("span","design-inspector__target"),C=r("small"),L=c("design-inspector__close");L.setAttribute("aria-label","Exit design mode"),L.append(l("close"));let A=c("design-inspector__fold");A.append(l("chevron"));let P=r("div","design-inspector__identity");P.append(E,k,C),y.append(w,P,A,L);let T=r("div","design-inspector__controls"),M=r("div","design-inspector__bar"),S=r("span","design-inspector__count");S.title="Runtime preview · Undo, Reset or reload to restore";let D=r("p","design-inspector__status");D.setAttribute("role","status");let R=r("div","design-inspector__actions"),z=e=>{let t=c("design-inspector__tool");return t.dataset.tip=e,t.setAttribute("aria-label",e),t},H=z("Undo"),B=z("Reset"),I=z("Copy CSS");I.append(l("copy"));let K=c("","Comment"),j=c("design-text-edit","Edit text");j.title="Edit text",j.setAttribute("aria-label","Edit selected text inline"),R.append(H,B,I,K);let O=r("div","design-inspector__compare");O.setAttribute("role","group"),O.setAttribute("aria-label","Compare with the page");let F=["Before","After"].map((e,t)=>{let n=c("",e);return n.dataset.tip=`${e} · ${t?"→":"←"} or B`,n.setAttribute("aria-pressed",String(!!t)),n.addEventListener("click",()=>xe(!t)),O.append(n),n});M.append(S,O,D,R);let $,U=r("div");U.hidden=!0,b.append(y,U,T,M),u.root.append(h,v,x),(u.panelRoot??u.root).append(b);let V,X=!1,Y=0,q=null,W=null,N=()=>u.page?.()??location.pathname,G=N(),Q=new Map,J=null,Z=0,ee=0,te=null,ne="",ie=null,oe=null,se=new Map,ae=new WeakSet,de=new Map,re=new AbortController,le=()=>import("./design-export-44WHYCLI.js"),ce=e=>{V??=le().then(({footerTips:t})=>t(M,u.root,re.signal,e),()=>{V=void 0})};M.addEventListener("pointerover",ce),M.addEventListener("focusin",ce);let pe=new Set,ge=[],ue=e(ge);function he(e,t,i=e.style.getPropertyValue(t),o=e.style.getPropertyPriority(t)){let s=se.get(e);s||(se.set(e,s=new Map),e.hasAttribute("style")||ae.add(e)),s.has(t)||s.set(t,ie?.originalDesignTokenStyle(e,t)??{...n(e,t),value:i,priority:o})}function me(e,t){let n=de.get(e);n||de.set(e,n=new Map);let i=e.style.getPropertyValue(t);i===(se.get(e)?.get(t)?.value??"")?n.delete(t):n.set(t,i),n.size||de.delete(e),Ae(q,"selected")}let fe=0;new MutationObserver(()=>{let e=D.textContent??"";D.title=e,M.toggleAttribute("data-message",!!e),clearTimeout(fe),e&&(fe=window.setTimeout(function e(){J?.element?fe=window.setTimeout(e,2600):D.textContent=""},2600))}).observe(D,{childList:!0,characterData:!0,subtree:!0});let be,ve=!1;function xe(e,t=!0){if(e===ve)return;e&&J?.element&&Be(),ve=e,e&&ie?.showDesignBefore(!0);let n=t&&!g();for(let[t,i]of se){let s=de.get(t);o(t,i.keys(),()=>{for(let n of i.keys()){let i=se.get(t)?.get(n);e?ye(t,n,i):s?.has(n)&&t.style.setProperty(n,s.get(n),i?.priority)}},n,ae.has(t))}J?.showBefore(e,t),e||ie?.showDesignBefore(!1),F.forEach((t,n)=>t.setAttribute("aria-pressed",String(!n===e))),b.toggleAttribute("data-before",e),He()}function ye(e,n,o){t(e,n,o),ae.has(e)&&i(e)}function _e(e,t,n){if(!q||(e.setAttribute("aria-invalid",String(null===n)),null===n))return;he(q,t);let i=ie?.noteDesignTokenOverride(q,t,n);ue.override(e,i?.undo),q.style.setProperty(t,n,i?.priority??se.get(q)?.get(t)?.priority),me(q,t),He()}function we(e,t,n=!0){q&&(ue.commit(e,q,t,n),He())}function Ee(){if(Oe(),T.replaceChildren(),ke(),!q)return $&&T.append($.empty),k.textContent="Select an element",C.textContent="",void(E.hidden=!0);let e=`${q.tagName.toLowerCase()}${q.id?`#${q.id}`:""}`;k.textContent=e,C.textContent=q instanceof HTMLIFrameElement?"Frame only · contents are isolated":q.classList.length?`.${[...q.classList].slice(0,2).join(".")}`:"";let t=q.parentElement;E.hidden=!t||t===document.body||t===document.documentElement,E.textContent=t?.tagName.toLowerCase()??"",E.setAttribute("aria-label",`Select parent ${E.textContent}`);let i=q,o=m;o?(o.renderPanel(T,{element:i,changed:de.get(i),collapsed:pe,editText:j,begin:(e,t)=>ue.begin(e,n(i,t)),apply:_e,commit:we,cancel(e,t){ue.cancel(e,i,t),me(i,t),He()},rerender:Ee}),(u.design||i.closest("[data-komo-inspectable], [data-komo-design-tokens]"))&&(oe??=import("./react-props-panel-ME6XCEVP.js").then(e=>ie=e).catch(e=>{throw oe=null,e}),oe.then(e=>{if(!X||q!==i||T.querySelector(".design-react-group, .design-theme-group"))return;let t=u.root;e.attachThemeSwitcher(T,u.design,()=>Se(i),t);let n=e=>{let t=()=>{for(let e of se.get(i)?.keys()??[])me(i,e)};e&&ge.push({element:i,undo:()=>{e(),t()}}),t(),He()},s=e.createReactPropsPanel(i,n,t,Se,u.design,Ee);s&&T.prepend(s),e.attachStyleTokenControls(i,o.fields,T,(e,t,n)=>{he(i,e.property,n),me(i,e.property),ue.begin(t,{value:n,priority:i.style.getPropertyPriority(e.property)}),we(t,e.property)},t,o.valueFor,o.toHex,u.design,n);let a=e.createDesignThemePanel(i,o,He,t);a&&T.append(a)}).catch(()=>{}))):f.then(()=>{X&&q===i&&Ee()})}function ke(){b.toggleAttribute("data-empty",K.hidden=!q),$&&($.hint.hidden=!q),b.parentElement?.toggleAttribute("data-design-empty",X&&!q);let e=[...Q.keys()].filter(Ce);U.hidden=!!q||!e.length,$&&($.pending.hidden=U.hidden),$?.update(e.length,e.some(e=>e.isConnected&&Q.get(e)===N()))}function Ce(e){return!!(de.get(e)?.size||e instanceof HTMLElement&&J?.hasChanges(e)||ie?.hasReactPropChanges(e)||ie?.hasDesignTokenEdit(e))}function Le(){Be(),Me?.disconnect(),q=null,W=null,v.hidden=x.hidden=!0,Ee(),He()}function Ae(e,t,n=!1,i=v){if(!X||!e?.isConnected)return void(i.hidden=!0);let o=e.getBoundingClientRect();if(o.width&&o.height){if(i.hidden=!1,i.dataset.kind=t,n&&(e!==te||t!==ne)){te=e,ne=t,clearTimeout(ee);let n=b.getBoundingClientRect(),i=e=>o.left<e+n.width&&o.right>e&&o.top<n.bottom&&o.bottom>n.top;u.flip&&n.width&&i(n.left)&&!i(document.documentElement.clientWidth-n.right)&&(ee=window.setTimeout(u.flip,"hover"===t?350:0))}i.hidden=!d(i,o,e,u.bounds?.(e))}else i.hidden=!0}function Pe(e=!1){Ae(q??W,q?"selected":"hover",e),Ae(q&&W!==q?W:null,"hover",!1,x)}function Te(){Z||(Z=requestAnimationFrame(()=>{Z=0,q&&(!q.isConnected||G!==N())&&Le(),Pe()}))}let Me="function"==typeof ResizeObserver?new ResizeObserver(Te):null;function Se(e){!s(e)||!e.isConnected||u.host.contains(e)||(J?.element&&J.element!==e&&Be(),Me?.disconnect(),Me?.observe(e),q=e,W=e,G=N(),Q.set(e,G),Ee(),Ae(e,"selected",!0),x.hidden=!0,He())}let De=()=>p("(max-width:520px)");function Re(e){b.toggleAttribute("data-folded",e&&De()),A.setAttribute("aria-expanded",String(!b.hasAttribute("data-folded"))),A.setAttribute("aria-label",b.hasAttribute("data-folded")?"Expand inspector":"Collapse inspector")}function ze(e){Re(!1),De()&&requestAnimationFrame(()=>{let t=e.getBoundingClientRect(),n=b.getBoundingClientRect().top-12;t.top>=12&&t.bottom<=n||window.scrollBy({top:t.top-Math.max(12,(n-t.height)/2),behavior:g()?"auto":"smooth"})})}function He(){Te(),H.disabled=!ge.length&&!ie?.canUndoReactProp(q)&&!ie?.canUndoDesignTokenEdit(q),B.disabled=!function(){let e=q,t=e?(de.get(e)?.size??0)+ +(e instanceof HTMLElement&&!!J?.hasChanges(e))+ +!!ie?.hasReactPropChanges(e)||+!!ie?.hasDesignTokenEdit(e):0;return S.textContent=t?`${t} change${t>1?"s":""}`:"",M.toggleAttribute("data-changes",t>0||!H.disabled),O.hidden=!t&&!ve,t}(),I.disabled=!q||!de.get(q)?.size,K.disabled=!q,j.disabled=!(!J?.busy&&q?.isConnected&&q instanceof HTMLElement),j.textContent=J?.isEditing(q instanceof HTMLElement?q:null)?"Done editing":"Edit text",j.setAttribute("aria-label",J?.isEditing(q instanceof HTMLElement?q:null)?"Finish inline text editing":"Edit selected text inline"),ke()}function Be(e=!1){J?.finish(e),He()}function Ie(e){!X||"Escape"!==e.key||e.defaultPrevented&&!e.composedPath().includes(u.host)||(e.preventDefault(),e.stopImmediatePropagation(),Le(),Ke(!1),u.onExit())}function Ke(e){if(e||(Oe(),J?.finish(),X&&(be=ve,xe(!0,!1)),ie?.restoreThemes(b)),e&&!X&&void 0!==be){let e=be;be=void 0,xe(e,!1)}e&&q&&(!q.isConnected||G!==N())&&Le(),clearTimeout(Y),Y=0,X=e,ke(),e?(b.hidden=!1,b.setAttribute("aria-hidden","false"),requestAnimationFrame(()=>{X&&(b.dataset.state="active")}),v.hidden=!q,Ee(),Re(!q),Ae(q,"selected"),L.focus({preventScroll:!0})):(W=null,v.hidden=x.hidden=!0,b.setAttribute("aria-hidden","true"),b.dataset.state="closing",g()?(b.hidden=!0,delete b.dataset.state):Y=window.setTimeout(()=>{Y=0,X||(b.hidden=!0,delete b.dataset.state)},250))}function je(){Oe(),xe(!1,!1),ie?.resetPreviews();for(let[e,t]of se)o(e,t.keys(),()=>{for(let[n,i]of t)ye(e,n,i)},!1,ae.has(e)),ae.delete(e);se.clear(),de.clear(),ge.length=0,J?.restoreAll(),Q.clear(),He()}function Oe(){u.root.dispatchEvent(new Event("komo-preview-cancel"))}function Fe(e,t){return t(e,de.get(e),t=>se.get(e)?.get(t)?.computed,ie?.tokenBoundProperties(e),[e instanceof HTMLElement?J?.proposal(e):void 0,ie?.proposedDesignChanges(e)],ie?.designContext(e,u.design))}function $e(e){J?.isEditing(e instanceof HTMLElement?e:null)&&Be(!0);let t=de.get(e),n=(e instanceof HTMLElement&&J?.hasChanges(e))??!1,i=ie?.hasReactPropChanges(e)??!1,s=ie?.hasDesignTokenEdit(e)??!1;if(t?.size||n||i||s){n&&e instanceof HTMLElement&&J?.reset(e),s&&ie?.resetDesignTokenEdits(e),o(e,t?.keys()??[],()=>{for(let n of t?.keys()??[])ye(e,n,se.get(e)?.get(n))},!1,ae.has(e)),de.delete(e),se.delete(e),ae.delete(e),Q.delete(e),i&&ie?.resetReactProps(e);for(let t=ge.length-1;t>=0;t--)ge[t].element===e&&ge.splice(t,1)}}j.addEventListener("click",e=>{J||q&&(D.textContent="Loading inline text editor…",import("./inline-text-editor-VIICPLUY.js").then(t=>{J||!q||!X||(J=t.bindInlineTextTools({button:j,status:D,selected:()=>q instanceof HTMLElement?q:null,active:()=>X,onChange:He,onCommit(e){ge.push({kind:"text",element:e})}}),J.toggle(e))}).catch(()=>{D.textContent="Inline text editing is unavailable."}))}),A.addEventListener("click",()=>Re(!b.hasAttribute("data-folded"))),E.addEventListener("click",()=>Se(q?.parentElement??null)),L.addEventListener("click",()=>{J?.element&&Be(),Le(),Ke(!1),u.onExit()}),H.addEventListener("click",()=>{let e=ge.pop();e?e.kind?"text"===e.kind?q===(J?.undo()??e.element)&&Ee():(ye(e.element,e.property,e.before),e.before.bindingUndo?.(),ie?.syncDesignTokenBinding(e.element,e.property),me(e.element,e.property),q===e.element&&Ee(),Ae(q??W,q?"selected":"hover")):(e.undo(),Ee()):(q&&(ie?.undoDesignTokenEdit(q),ie?.undoReactProp(q),Ee()),D.textContent="Runtime preview · Undo, Reset or reload to restore"),He(),(H.disabled?L:H).focus({preventScroll:!0})}),B.addEventListener("click",()=>{q&&($e(q),Ee(),Ae(q,"selected"),He(),L.focus({preventScroll:!0}))}),I.addEventListener("click",()=>{let e=q,t=e?de.get(e):void 0;!e||!t?.size||le().then(async({cssText:n})=>{let i=n(e,t);try{await navigator.clipboard.writeText(i),D.textContent="CSS copied"}catch{D.textContent=i}})}),K.addEventListener("click",()=>{let e=q;e&&(J?.isEditing(e instanceof HTMLElement?e:null)&&Be(),le().then(({designProposal:t})=>{if(!X||q!==e||!e.isConnected)return;let n=Fe(e,t);$e(e),He(),u.onComment(e,n)},()=>{D.textContent="Comment unavailable · try again"}))});let Ue=()=>xe(!1);for(let e of[T,R,j])for(let t of["pointerdown","focusin","click"])e.addEventListener(t,Ue,!0);document.addEventListener("pointermove",function(e){if(!X)return;if(e.composedPath().includes(u.host))return W=null,void Pe();let t=a(u.targetAt(e.clientX,e.clientY),e.metaKey||e.ctrlKey);W=t&&!u.host.contains(t)?t:null,Pe(!q)},{capture:!0,signal:re.signal}),document.addEventListener("pointerdown",function(e){if(!X||0!==e.button||e.composedPath().includes(u.host))return;let t=a(u.targetAt(e.clientX,e.clientY),e.metaKey||e.ctrlKey);!t||u.host.contains(t)||J?.element&&(t===J.element||J.element.contains(t))||(J?.element&&Be(),e.preventDefault(),e.stopImmediatePropagation(),Se(t))},{capture:!0,signal:re.signal}),document.addEventListener("click",function(e){!X||e.composedPath().includes(u.host)||(e.preventDefault(),e.stopImmediatePropagation(),q&&ze(q),2===e.detail&&q?.contains(e.target)&&!j.disabled&&!J?.element&&j.dispatchEvent(new MouseEvent("click",e)))},{capture:!0,signal:re.signal}),document.addEventListener("keydown",function(e){if(J?.handleKey(e))return void j.focus({preventScroll:!0});let t=e.key.toLowerCase(),n=e.composedPath()[0],i=n instanceof HTMLElement&&(n.isContentEditable||n.matches("input,textarea,select"));if(!i||"Escape"!==e.key||!n.closest("[data-field-property]")){if(X&&q&&e.altKey&&!e.ctrlKey&&!e.metaKey&&!i&&("arrowup"===t||"arrowdown"===t)){let n=("arrowup"===t?q.parentElement:[...q.children].find(e=>s(e)&&!e.matches("script,style,defs,title,desc,metadata")))??null;return void(s(n)&&n!==document.body&&n!==document.documentElement&&!u.host.contains(n)&&(e.preventDefault(),e.stopImmediatePropagation(),Se(n),ze(n)))}if(X&&!O.hidden&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&("b"===t||"arrowleft"===t||"arrowright"===t)&&!i)return e.preventDefault(),e.stopImmediatePropagation(),void xe("b"===t?!ve:"arrowleft"===t);if(X&&!J?.element&&("Enter"===e.key||" "===e.key)&&!e.composedPath().includes(u.host)){let t=document.activeElement;if(s(t)&&t!==document.body&&t!==document.documentElement)return e.preventDefault(),e.stopImmediatePropagation(),Se(t),void ze(t)}e.composedPath().includes(u.host)&&Ie(e)}},{capture:!0,signal:re.signal}),window.addEventListener("keydown",Ie,{signal:re.signal}),window.addEventListener("scroll",Te,{capture:!0,passive:!0,signal:re.signal}),window.addEventListener("resize",Te,{passive:!0,signal:re.signal});let Ve=new MutationObserver(()=>{X&&q&&!q.isConnected&&Le(),W&&!W.isConnected&&(W=null,Pe())});Ve.observe(document.body,{childList:!0,subtree:!0});let Xe=le().then(e=>{re.signal.aborted||($=e.selectionViews({exitKey:u.exitKey,review(){let e=[...Q.keys()].reverse().find(e=>e.isConnected&&Q.get(e)===N()&&Ce(e));e&&Se(e)},reset:je,proposals:()=>[...Q.keys()].filter(Ce).map(t=>Fe(t,e.designProposal)),message:e=>{D.textContent=e}}),h.textContent+=$.styles,H.innerHTML=$.icons.undo,B.innerHTML=$.icons.reset,b.insertBefore($.hint,U),U.append($.pending),X?Ee():ke())},()=>{D.textContent="Selection tools unavailable · try again"});return{setActive:Ke,select:Se,clearSelection:Le,setReturnAction(e){_=e,w.hidden=!e,e&&(w.setAttribute("aria-label",e.label),w.title=e.label)},mountPanel(e){b.parentElement!==e&&(b.parentElement?.removeAttribute("data-design-empty"),e.append(b),ke())},get active(){return X},ready:Promise.all([f,Xe]),destroy(){J?.finish(!0),Ke(!1),je(),clearTimeout(Y),clearTimeout(fe),clearTimeout(ee),Me?.disconnect(),Ve.disconnect(),re.abort(),cancelAnimationFrame(Z),b.remove(),v.remove(),x.remove(),h.remove()}}}export{u as createDesignMode};
|
|
1
|
+
import{a as e,b as t,e as n,f as i,h as o}from"./chunk-5BPQP3VG.js";import{a as s,b as a}from"./chunk-RPY7OOOR.js";import{a as d}from"./chunk-53M6AOAX.js";import{j as r,k as l}from"./chunk-PLSWBSSX.js";var c=(e,t)=>Object.assign(r("button",e,t),{type:"button"}),p=e=>"function"==typeof matchMedia&&matchMedia(e).matches,g=()=>p("(prefers-reduced-motion: reduce)");function u(u){let h=r("style");h.textContent='.design-outline{position:fixed;z-index:1;pointer-events:none;box-sizing:border-box;outline:2px solid var(--accent,#bda6ef);outline-offset:2px;transition:opacity 80ms ease}.design-outline[data-kind=hover]{outline-style:dashed;opacity:.8}.design-outline--prospective[data-kind=hover]{opacity:.55}.design-inspector{position:absolute;inset:0;z-index:9;display:flex;flex-direction:column;overflow:hidden;color:#e9e6e1;background:#0d0d0d;border-radius:inherit;font:12px/1.4 -apple-system,BlinkMacSystemFont,Inter,Segoe UI,sans-serif;color-scheme:dark;opacity:0;translate:0 6px;pointer-events:none;transition:opacity .15s var(--ease-smooth-out),translate .25s var(--ease-smooth-out)}.design-inspector[hidden]{display:none}:host([data-sidebar="background"]) .design-inspector{position:fixed;inset:0 0 0 auto;width:380px;border-radius:0}:host([data-sidebar="edge"]) .design-inspector__heading{cursor:grab;touch-action:none;padding-top:22px}:host(.design-active[data-sidebar="edge"]) .edge-sidebar .edge-sidebar-grip{z-index:10;opacity:1!important}.design-inspector[data-state=active]{opacity:1;translate:0 0;pointer-events:auto}.design-inspector[data-state=closing]{opacity:0;translate:0 4px}.design-inspector button{cursor:pointer}.design-inspector__heading{flex:none;display:flex;align-items:center;gap:4px;min-height:54px;padding:0 8px 0 12px}.design-inspector__identity{min-width:0;flex:1;display:flex;align-items:baseline;gap:6px;white-space:nowrap}.design-inspector__parent{flex:none;max-width:35%;overflow:hidden;text-overflow:ellipsis;margin-left:-6px;padding:2px 6px;border-radius:7px;color:#909090;font-size:15px;font-weight:500}.design-inspector__parent:after{content:"/";margin-left:6px;color:#555}.design-inspector__target{flex:none;max-width:60%;overflow:hidden;text-overflow:ellipsis;color:#fff;font-weight:600;font-size:15px}.design-inspector__heading small{min-width:0;overflow:hidden;text-overflow:ellipsis;color:#909090;font-size:13px}.design-inspector__back,.design-inspector__close,.design-inspector__fold,.design-inspector__actions button{display:grid;place-items:center;min-width:28px;height:28px;border-radius:7px;color:#909090}.design-inspector__back,.design-inspector__close,.design-inspector__fold{flex:none}.design-inspector__back svg,.design-inspector__close svg,.design-inspector__fold svg,.design-inspector__actions svg{width:16px;height:16px}.design-inspector__back svg{rotate:90deg}.design-inspector__back[hidden]{display:none}.design-inspector__back:hover,.design-inspector__parent:hover,.design-inspector__close:hover,.design-inspector__fold:hover,.design-inspector__actions button:hover:not(:disabled){background:#161616;color:#eee}.design-inspector__fold{display:none}.design-inspector__fold svg{transition:rotate .25s var(--ease-smooth-out)}.design-inspector[data-folded] .design-inspector__fold svg{rotate:180deg}.design-inspector[data-folded]>:not(.design-inspector__heading){display:none}.design-inspector__controls{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin}:host([data-sidebar="edge"]) .edge-sidebar[data-design-empty]:not([data-morphing]){height:auto!important}:host([data-sidebar="edge"]) [data-design-empty]>.design-inspector{position:relative;inset:auto}:host([data-sidebar="edge"]) [data-design-empty]:not([data-morphing])>.toolbar{position:absolute}.design-inspector[data-empty] .design-inspector__identity{visibility:hidden}.design-inspector[data-empty] .design-inspector__controls{display:grid;place-items:center}.design-inspector[data-empty] .design-inspector__bar:not([data-changes],[data-message]){display:none}.design-inspector__bar{flex:none;display:flex;align-items:center;gap:8px;min-height:56px;padding:0 12px;border-top:1px solid #ffffff0d;color:#909090;font-size:12px}.design-inspector__actions{display:flex;align-items:center;gap:2px;margin-left:auto}.design-inspector__actions button:disabled{cursor:default;opacity:.35}.design-inspector__actions button:last-child{min-height:34px;margin-left:6px;padding:0 14px;border-radius:8px;background:var(--accent,#bda6ef);color:#211b2d;font-size:12px;font-weight:500}.design-inspector__actions button:last-child:hover:not(:disabled){background:var(--accent,#bda6ef);color:#211b2d;filter:brightness(1.08)}.design-inspector :focus-visible{outline:2px solid var(--accent,#bda6ef);outline-offset:2px}@media(max-width:520px){.design-inspector{position:fixed;inset:auto 12px calc(12px + env(safe-area-inset-bottom,0px));max-height:min(58dvh,560px);border-radius:24px;box-shadow:0 -1px #ffffff24,0 16px 48px #0005;transition:translate .32s cubic-bezier(.22,1,.36,1),scale .32s cubic-bezier(.22,1,.36,1),opacity .15s ease;transform-origin:bottom center}.design-inspector__heading{height:52px;padding-left:18px}.design-inspector__fold{display:grid}.design-inspector[data-empty] .design-inspector__identity{visibility:visible}.design-inspector .design-field{height:34px}}@media(prefers-reduced-motion:reduce){.design-outline,.design-inspector,.design-inspector__fold svg,.design-inspector__status{transition:none;animation:none}}\n';let m=null,f=import("./design-panel-ISV2MKNX.js").then(e=>{h.textContent+=e.designPanelStyles,m=e},()=>{D.textContent="Design controls unavailable · try again"}),b=r("aside","design-inspector");b.setAttribute("role","dialog"),b.setAttribute("aria-label","Design mode inspector"),b.setAttribute("aria-hidden","true"),b.hidden=!0;let v=r("div","design-outline");v.setAttribute("aria-hidden","true");let x=r("div","design-outline design-outline--prospective");x.setAttribute("aria-hidden","true"),x.dataset.kind="hover",x.hidden=!0;let y=r("div","design-inspector__heading"),_=null,w=c("design-inspector__back");w.hidden=!0,w.append(l("chevron")),w.addEventListener("click",()=>_?.run());let E=c("design-inspector__parent");E.hidden=!0;let k=r("span","design-inspector__target"),C=r("small"),L=c("design-inspector__close");L.setAttribute("aria-label","Exit design mode"),L.append(l("close"));let A=c("design-inspector__fold");A.append(l("chevron"));let P=r("div","design-inspector__identity");P.append(E,k,C),y.append(w,P,A,L);let T=r("div","design-inspector__controls"),M=r("div","design-inspector__bar"),S=r("span","design-inspector__count");S.title="Runtime preview · Undo, Reset or reload to restore";let D=r("p","design-inspector__status");D.setAttribute("role","status");let R=r("div","design-inspector__actions"),z=e=>{let t=c("design-inspector__tool");return t.dataset.tip=e,t.setAttribute("aria-label",e),t},H=z("Undo"),B=z("Reset"),K=z("Copy CSS");K.append(l("copy"));let I=c("","Comment"),j=c("design-text-edit","Edit text");j.title="Edit text",j.setAttribute("aria-label","Edit selected text inline"),R.append(H,B,K,I);let O=r("div","design-inspector__compare");O.setAttribute("role","group"),O.setAttribute("aria-label","Compare with the page");let F=["Before","After"].map((e,t)=>{let n=c("",e);return n.dataset.tip=`${e} · ${t?"→":"←"} or B`,n.setAttribute("aria-pressed",String(!!t)),n.addEventListener("click",()=>xe(!t)),O.append(n),n});M.append(S,O,D,R);let $,U=r("div");U.hidden=!0,b.append(y,U,T,M),u.root.append(h,v,x),(u.panelRoot??u.root).append(b);let V,X=!1,W=0,q=null,Y=null,N=()=>u.page?.()??location.pathname,Q=N(),G=new Map,Z=null,J=0,ee=0,te=null,ne="",ie=null,oe=null,se=new Map,ae=new WeakSet,de=new Map,re=new AbortController,le=()=>import("./design-export-44WHYCLI.js"),ce=e=>{V??=le().then(({footerTips:t})=>t(M,u.root,re.signal,e),()=>{V=void 0})};M.addEventListener("pointerover",ce),M.addEventListener("focusin",ce);let pe=new Set,ge=[],ue=e(ge);function he(e,t,i=e.style.getPropertyValue(t),o=e.style.getPropertyPriority(t)){let s=se.get(e);s||(se.set(e,s=new Map),e.hasAttribute("style")||ae.add(e)),s.has(t)||s.set(t,ie?.originalDesignTokenStyle(e,t)??{...n(e,t),value:i,priority:o})}function me(e,t){let n=de.get(e);n||de.set(e,n=new Map);let i=e.style.getPropertyValue(t);i===(se.get(e)?.get(t)?.value??"")?n.delete(t):n.set(t,i),n.size||de.delete(e),Ae(q,"selected")}let fe=0;new MutationObserver(()=>{let e=D.textContent??"";D.title=e,M.toggleAttribute("data-message",!!e),clearTimeout(fe),e&&(fe=window.setTimeout(function e(){Z?.element?fe=window.setTimeout(e,2600):D.textContent=""},2600))}).observe(D,{childList:!0,characterData:!0,subtree:!0});let be,ve=!1;function xe(e,t=!0){if(e===ve)return;e&&Z?.element&&Be(),ve=e,e&&ie?.showDesignBefore(!0);let n=t&&!g();for(let[t,i]of se){let s=de.get(t);o(t,i.keys(),()=>{for(let n of i.keys()){let i=se.get(t)?.get(n);e?ye(t,n,i):s?.has(n)&&t.style.setProperty(n,s.get(n),i?.priority)}},n,ae.has(t))}Z?.showBefore(e,t),e||ie?.showDesignBefore(!1),F.forEach((t,n)=>t.setAttribute("aria-pressed",String(!n===e))),b.toggleAttribute("data-before",e),He()}function ye(e,n,o){t(e,n,o),ae.has(e)&&i(e)}function _e(e,t,n){if(!q||(e.setAttribute("aria-invalid",String(null===n)),null===n))return;he(q,t);let i=ie?.noteDesignTokenOverride(q,t,n);ue.override(e,i?.undo),q.style.setProperty(t,n,i?.priority??se.get(q)?.get(t)?.priority),me(q,t),He()}function we(e,t,n=!0){q&&(ue.commit(e,q,t,n),He())}function Ee(){if(Oe(),T.replaceChildren(),ke(),!q)return $&&T.append($.empty),k.textContent="Select an element",C.textContent="",void(E.hidden=!0);let e=`${q.tagName.toLowerCase()}${q.id?`#${q.id}`:""}`;k.textContent=e,C.textContent=q instanceof HTMLIFrameElement?"Frame only · contents are isolated":q.classList.length?`.${[...q.classList].slice(0,2).join(".")}`:"";let t=q.parentElement;E.hidden=!t||t===document.body||t===document.documentElement,E.textContent=t?.tagName.toLowerCase()??"",E.setAttribute("aria-label",`Select parent ${E.textContent}`);let i=q,o=m;o?(o.renderPanel(T,{element:i,changed:de.get(i),collapsed:pe,editText:j,begin:(e,t)=>ue.begin(e,n(i,t)),apply:_e,commit:we,cancel(e,t){ue.cancel(e,i,t),me(i,t),He()},rerender:Ee}),(u.design||i.closest("[data-komo-inspectable], [data-komo-design-tokens]"))&&(oe??=import("./react-props-panel-ME6XCEVP.js").then(e=>ie=e).catch(e=>{throw oe=null,e}),oe.then(e=>{if(!X||q!==i||T.querySelector(".design-react-group, .design-theme-group"))return;let t=u.root;e.attachThemeSwitcher(T,u.design,()=>Se(i),t);let n=e=>{let t=()=>{for(let e of se.get(i)?.keys()??[])me(i,e)};e&&ge.push({element:i,undo:()=>{e(),t()}}),t(),He()},s=e.createReactPropsPanel(i,n,t,Se,u.design,Ee);s&&T.prepend(s),e.attachStyleTokenControls(i,o.fields,T,(e,t,n)=>{he(i,e.property,n),me(i,e.property),ue.begin(t,{value:n,priority:i.style.getPropertyPriority(e.property)}),we(t,e.property)},t,o.valueFor,o.toHex,u.design,n);let a=e.createDesignThemePanel(i,o,He,t);a&&T.append(a)}).catch(()=>{}))):f.then(()=>{X&&q===i&&Ee()})}function ke(){b.toggleAttribute("data-empty",I.hidden=!q),$&&($.hint.hidden=!q),b.parentElement?.toggleAttribute("data-design-empty",X&&!q);let e=[...G.keys()].filter(Ce);U.hidden=!!q||!e.length,$&&($.pending.hidden=U.hidden),$?.update(e.length,e.some(e=>e.isConnected&&G.get(e)===N()))}function Ce(e){return!!(de.get(e)?.size||e instanceof HTMLElement&&Z?.hasChanges(e)||ie?.hasReactPropChanges(e)||ie?.hasDesignTokenEdit(e))}function Le(){Be(),Me?.disconnect(),q=null,Y=null,v.hidden=x.hidden=!0,Ee(),He()}function Ae(e,t,n=!1,i=v){if(!X||!e?.isConnected)return void(i.hidden=!0);let o=e.getBoundingClientRect();if(o.width&&o.height){if(i.hidden=!1,i.dataset.kind=t,n&&(e!==te||t!==ne)){te=e,ne=t,clearTimeout(ee);let n=b.getBoundingClientRect(),i=e=>o.left<e+n.width&&o.right>e&&o.top<n.bottom&&o.bottom>n.top;u.flip&&n.width&&i(n.left)&&!i(document.documentElement.clientWidth-n.right)&&(ee=window.setTimeout(u.flip,"hover"===t?350:0))}i.hidden=!d(i,o,e,u.bounds?.(e))}else i.hidden=!0}function Pe(e=!1){Ae(q??Y,q?"selected":"hover",e),Ae(q&&Y!==q?Y:null,"hover",!1,x)}function Te(){J||(J=requestAnimationFrame(()=>{J=0,q&&(!q.isConnected||Q!==N())&&Le(),Pe()}))}let Me="function"==typeof ResizeObserver?new ResizeObserver(Te):null;function Se(e){!s(e)||!e.isConnected||u.host.contains(e)||(Z?.element&&Z.element!==e&&Be(),Me?.disconnect(),Me?.observe(e),q=e,Y=e,Q=N(),G.set(e,Q),Ee(),Ae(e,"selected",!0),x.hidden=!0,He())}let De=()=>p("(max-width:520px)");function Re(e){b.toggleAttribute("data-folded",e&&De()),A.setAttribute("aria-expanded",String(!b.hasAttribute("data-folded"))),A.setAttribute("aria-label",b.hasAttribute("data-folded")?"Expand inspector":"Collapse inspector")}function ze(e){Re(!1),De()&&requestAnimationFrame(()=>{let t=e.getBoundingClientRect(),n=b.getBoundingClientRect().top-12;t.top>=12&&t.bottom<=n||window.scrollBy({top:t.top-Math.max(12,(n-t.height)/2),behavior:g()?"auto":"smooth"})})}function He(){Te(),H.disabled=!ge.length&&!ie?.canUndoReactProp(q)&&!ie?.canUndoDesignTokenEdit(q),B.disabled=!function(){let e=q,t=e?(de.get(e)?.size??0)+ +(e instanceof HTMLElement&&!!Z?.hasChanges(e))+ +!!ie?.hasReactPropChanges(e)||+!!ie?.hasDesignTokenEdit(e):0;return S.textContent=t?`${t} change${t>1?"s":""}`:"",M.toggleAttribute("data-changes",t>0||!H.disabled),O.hidden=!t&&!ve,t}(),K.disabled=!q||!de.get(q)?.size,I.disabled=!q,j.disabled=!(!Z?.busy&&q?.isConnected&&q instanceof HTMLElement),j.textContent=Z?.isEditing(q instanceof HTMLElement?q:null)?"Done editing":"Edit text",j.setAttribute("aria-label",Z?.isEditing(q instanceof HTMLElement?q:null)?"Finish inline text editing":"Edit selected text inline"),ke()}function Be(e=!1){Z?.finish(e),He()}function Ke(e){!X||"Escape"!==e.key||e.defaultPrevented&&!e.composedPath().includes(u.host)||(e.preventDefault(),e.stopImmediatePropagation(),Le(),Ie(!1),u.onExit())}function Ie(e){if(e||(Oe(),Z?.finish(),X&&(be=ve,xe(!0,!1)),ie?.restoreThemes(b)),e&&!X&&void 0!==be){let e=be;be=void 0,xe(e,!1)}e&&q&&(!q.isConnected||Q!==N())&&Le(),clearTimeout(W),W=0,X=e,ke(),e?(b.hidden=!1,b.setAttribute("aria-hidden","false"),requestAnimationFrame(()=>{X&&(b.dataset.state="active")}),v.hidden=!q,Ee(),Re(!q),Ae(q,"selected"),L.focus({preventScroll:!0})):(Y=null,v.hidden=x.hidden=!0,b.setAttribute("aria-hidden","true"),b.dataset.state="closing",g()?(b.hidden=!0,delete b.dataset.state):W=window.setTimeout(()=>{W=0,X||(b.hidden=!0,delete b.dataset.state)},250))}function je(){Oe(),xe(!1,!1),ie?.resetPreviews();for(let[e,t]of se)o(e,t.keys(),()=>{for(let[n,i]of t)ye(e,n,i)},!1,ae.has(e)),ae.delete(e);se.clear(),de.clear(),ge.length=0,Z?.restoreAll(),G.clear(),He()}function Oe(){u.root.dispatchEvent(new Event("komo-preview-cancel"))}function Fe(e,t){return t(e,de.get(e),t=>se.get(e)?.get(t)?.computed,ie?.tokenBoundProperties(e),[e instanceof HTMLElement?Z?.proposal(e):void 0,ie?.proposedDesignChanges(e)],ie?.designContext(e,u.design))}function $e(e){Z?.isEditing(e instanceof HTMLElement?e:null)&&Be(!0);let t=de.get(e),n=(e instanceof HTMLElement&&Z?.hasChanges(e))??!1,i=ie?.hasReactPropChanges(e)??!1,s=ie?.hasDesignTokenEdit(e)??!1;if(t?.size||n||i||s){n&&e instanceof HTMLElement&&Z?.reset(e),s&&ie?.resetDesignTokenEdits(e),o(e,t?.keys()??[],()=>{for(let n of t?.keys()??[])ye(e,n,se.get(e)?.get(n))},!1,ae.has(e)),de.delete(e),se.delete(e),ae.delete(e),G.delete(e),i&&ie?.resetReactProps(e);for(let t=ge.length-1;t>=0;t--)ge[t].element===e&&ge.splice(t,1)}}j.addEventListener("click",e=>{Z||q&&(D.textContent="Loading inline text editor…",import("./inline-text-editor-WCVLLHZQ.js").then(t=>{Z||!q||!X||(Z=t.bindInlineTextTools({button:j,status:D,selected:()=>q instanceof HTMLElement?q:null,active:()=>X,onChange:He,onCommit(e){ge.push({kind:"text",element:e})}}),Z.toggle(e))}).catch(()=>{D.textContent="Inline text editing is unavailable."}))}),A.addEventListener("click",()=>Re(!b.hasAttribute("data-folded"))),E.addEventListener("click",()=>Se(q?.parentElement??null)),L.addEventListener("click",()=>{Z?.element&&Be(),Le(),Ie(!1),u.onExit()}),H.addEventListener("click",()=>{let e=ge.pop();e?e.kind?"text"===e.kind?q===(Z?.undo()??e.element)&&Ee():(ye(e.element,e.property,e.before),e.before.bindingUndo?.(),ie?.syncDesignTokenBinding(e.element,e.property),me(e.element,e.property),q===e.element&&Ee(),Ae(q??Y,q?"selected":"hover")):(e.undo(),Ee()):(q&&(ie?.undoDesignTokenEdit(q),ie?.undoReactProp(q),Ee()),D.textContent="Runtime preview · Undo, Reset or reload to restore"),He(),(H.disabled?L:H).focus({preventScroll:!0})}),B.addEventListener("click",()=>{q&&($e(q),Ee(),Ae(q,"selected"),He(),L.focus({preventScroll:!0}))}),K.addEventListener("click",()=>{let e=q,t=e?de.get(e):void 0;!e||!t?.size||le().then(async({cssText:n})=>{let i=n(e,t);try{await navigator.clipboard.writeText(i),D.textContent="CSS copied"}catch{D.textContent=i}})}),I.addEventListener("click",()=>{let e=q;e&&(Z?.isEditing(e instanceof HTMLElement?e:null)&&Be(),le().then(({designProposal:t})=>{if(!X||q!==e||!e.isConnected)return;let n=Fe(e,t);$e(e),He(),u.onComment(e,n)},()=>{D.textContent="Comment unavailable · try again"}))});let Ue=()=>xe(!1);for(let e of[T,R,j])for(let t of["pointerdown","focusin","click"])e.addEventListener(t,Ue,!0);document.addEventListener("pointermove",function(e){if(!X)return;if(e.composedPath().includes(u.host))return Y=null,void Pe();let t=a(u.targetAt(e.clientX,e.clientY),e.metaKey||e.ctrlKey);Y=t&&!u.host.contains(t)?t:null,Pe(!q)},{capture:!0,signal:re.signal}),document.addEventListener("pointerdown",function(e){if(!X||0!==e.button||e.composedPath().includes(u.host))return;let t=a(u.targetAt(e.clientX,e.clientY),e.metaKey||e.ctrlKey);!t||u.host.contains(t)||Z?.element&&(t===Z.element||Z.element.contains(t))||(Z?.element&&Be(),e.preventDefault(),e.stopImmediatePropagation(),Se(t))},{capture:!0,signal:re.signal}),document.addEventListener("click",function(e){!X||e.composedPath().includes(u.host)||(e.preventDefault(),e.stopImmediatePropagation(),q&&ze(q),2===e.detail&&q?.contains(e.target)&&!j.disabled&&!Z?.element&&j.dispatchEvent(new MouseEvent("click",e)))},{capture:!0,signal:re.signal}),document.addEventListener("keydown",function(e){if(Z?.handleKey(e))return void j.focus({preventScroll:!0});let t=e.key.toLowerCase(),n=e.composedPath()[0],i=n instanceof HTMLElement&&(n.isContentEditable||n.matches("input,textarea,select"));if(!i||"Escape"!==e.key||!n.closest("[data-field-property]")){if(X&&q&&e.altKey&&!e.ctrlKey&&!e.metaKey&&!i&&("arrowup"===t||"arrowdown"===t)){let n=("arrowup"===t?q.parentElement:[...q.children].find(e=>s(e)&&!e.matches("script,style,defs,title,desc,metadata")))??null;return void(s(n)&&n!==document.body&&n!==document.documentElement&&!u.host.contains(n)&&(e.preventDefault(),e.stopImmediatePropagation(),Se(n),ze(n)))}if(X&&!O.hidden&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&("b"===t||"arrowleft"===t||"arrowright"===t)&&!i)return e.preventDefault(),e.stopImmediatePropagation(),void xe("b"===t?!ve:"arrowleft"===t);if(X&&!Z?.element&&("Enter"===e.key||" "===e.key)&&!e.composedPath().includes(u.host)){let t=document.activeElement;if(s(t)&&t!==document.body&&t!==document.documentElement)return e.preventDefault(),e.stopImmediatePropagation(),Se(t),void ze(t)}e.composedPath().includes(u.host)&&Ke(e)}},{capture:!0,signal:re.signal}),window.addEventListener("keydown",Ke,{signal:re.signal}),window.addEventListener("scroll",Te,{capture:!0,passive:!0,signal:re.signal}),window.addEventListener("resize",Te,{passive:!0,signal:re.signal});let Ve=new MutationObserver(()=>{X&&q&&!q.isConnected&&Le(),Y&&!Y.isConnected&&(Y=null,Pe())});Ve.observe(document.body,{childList:!0,subtree:!0});let Xe=le().then(e=>{re.signal.aborted||($=e.selectionViews({exitKey:u.exitKey,review(){let e=[...G.keys()].reverse().find(e=>e.isConnected&&G.get(e)===N()&&Ce(e));e&&Se(e)},reset:je,proposals:()=>[...G.keys()].filter(Ce).map(t=>Fe(t,e.designProposal)),message:e=>{D.textContent=e}}),h.textContent+=$.styles,H.innerHTML=$.icons.undo,B.innerHTML=$.icons.reset,b.insertBefore($.hint,U),U.append($.pending),X?Ee():ke())},()=>{D.textContent="Selection tools unavailable · try again"});return{setActive:Ie,select:Se,clearSelection:Le,setReturnAction(e){_=e,w.hidden=!e,e&&(w.setAttribute("aria-label",e.label),w.title=e.label)},mountPanel(e){b.parentElement!==e&&(b.parentElement?.removeAttribute("data-design-empty"),e.append(b),ke())},get active(){return X},ready:Promise.all([f,Xe]),destroy(){Z?.finish(!0),Ie(!1),je(),clearTimeout(W),clearTimeout(fe),clearTimeout(ee),Me?.disconnect(),Ve.disconnect(),re.abort(),cancelAnimationFrame(J),b.remove(),v.remove(),x.remove(),h.remove()}}}export{u as createDesignMode};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as o,c as s}from"./chunk-
|
|
1
|
+
import{b as o,c as s}from"./chunk-GC5MILHC.js";import"./chunk-ILX63XAJ.js";import"./chunk-DH22G2S5.js";import"./chunk-53M6AOAX.js";import"./chunk-WGISPOJV.js";import"./chunk-PLSWBSSX.js";export{s as initComments,o as initKomo};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e,b as t,c as n,d as a,f as r}from"./chunk-
|
|
1
|
+
import{a as e,b as t,c as n,d as a,f as r}from"./chunk-ZJWJEB5S.js";import{e as i}from"./chunk-5BPQP3VG.js";import"./chunk-RPY7OOOR.js";function o(e,t,a){a?n(a,e):e.firstChild instanceof Text&&!e.childElementCount&&(e.firstChild.data=t)}function l(e){let t=r(),n=null,a=!1;function i(a=!1){let r=n;r&&(n=null,r.finish(a),t.resume(r.element),e.onChange())}return{get element(){return n?.element??null},get busy(){return a},isEditing:e=>!!n&&n.element===e,toggle:async function(r){let o=e.selected();if(n&&n.element===o)return void i();if(!o||!e.active()||a||n)return;let l=c(o);if(l)e.status.textContent=l;else{a=!0,t.pause(o),e.status.textContent="Loading inline text editor…",e.onChange();try{let a=await f(o,{accent:getComputedStyle(e.button).getPropertyValue("--accent").trim()||"#bda6ef",loadReactBridge:async()=>await import("./react-props-panel-ME6XCEVP.js"),onFinish(n,a){a||n.reactProp||n.before===n.after?n.reactProp&&(e.status.textContent="React state preview · resets on exit"):(t.record(n),e.onCommit(o),e.status.textContent="Text preview · resets on exit")}});a?e.active()&&e.selected()===o?(n=a,r&&function(e,t,n){let a=document.caretPositionFromPoint?.(t,n),r=a?document.createRange():document.caretRangeFromPoint?.(t,n);if(a&&r&&r.setStart(a.offsetNode,a.offset),!r||!e.contains(r.startContainer))return;r.collapse(!0);let i=document.getSelection();i?.removeAllRanges(),i?.addRange(r)}(o,r.clientX,r.clientY),e.status.textContent=o.hasAttribute("data-komo-text-prop")?"React state preview · resets on exit":"Editing text · preview only"):a.finish(!0):e.status.textContent="This text couldn't be connected to its component prop."}catch{e.status.textContent="Inline text editing is unavailable."}finally{a=!1,n||t.resume(o),e.onChange()}}},finish:i,handleKey(e){if(!n||!e.composedPath().includes(n.element)||!n.handleKey(e))return!1;let t=n.element;return i("Escape"===e.key),t.blur(),!0},hasChanges:e=>void 0!==t.original(e),undo(){let n=t.undo();return e.onChange(),n},reset(n){t.reset(n),e.onChange()},reconcile(n,a){t.reconcile(n,a),e.onChange()},proposal:e=>t.proposal(e),restoreAll(){t.restoreAll()},showBefore:t.showBefore}}function s(e){let t=l(e);return e.button.addEventListener("click",e=>{t.toggle(e)}),t}function c(n){return n.matches("input,textarea,select")?"Form fields can't be edited as text.":n.matches("script,style,svg,canvas,video,audio,iframe")?"Graphics, media, and frames can't be edited.":n.closest("[data-private],[data-sensitive]")?"This text is marked private, so it stays read-only.":n.closest("[contenteditable]")?"This text is already editable on the page.":t(n).some(([t])=>t.data.trim()&&!t.parentElement?.closest(e))?null:"No text here. Double-click the text itself."}function d(e){return!c(e)}function u(e){let t=e.textContent??"",n=document.getSelection(),a=n?.rangeCount?n.getRangeAt(0):null;return a&&e.contains(a.commonAncestorContainer)?a.startContainer===e?Math.min([...e.childNodes].slice(0,a.startOffset).reduce((e,t)=>e+(t.textContent?.length??0),0),t.length):a.startContainer.nodeType===Node.TEXT_NODE?Math.min(a.startOffset,t.length):t.length:-1}function p(e,t){let n=e.firstChild,a=document.getSelection();if(!n||!a)return;let r=document.createRange();r.setStart(n,Math.min(t,n.textContent?.length??0)),r.collapse(!0),a.removeAllRanges(),a.addRange(r)}async function f(n,r){if(!d(n))return null;let l=null,s=null;if(n.dataset.komoTextProp&&(l=await r.loadReactBridge(),s=l.beginReactTextEdit(n),!s))return null;let c=s?.before??(n.textContent??"").slice(0,500),f=!s&&n.childElementCount>0,m=s?void 0:t(n),g=m?.map(([e,t])=>[e,t]),h=()=>{for(let e of g??[])e[1]=e[0].data},x=g?a(n,g):()=>{},b=["outline","outline-offset","box-shadow","white-space"].map(e=>i(n,e)),C=n.getAttribute("role"),v=n.getAttribute("aria-label"),y=n.getAttribute("aria-multiline"),E=n.getAttribute("spellcheck"),T=new AbortController,R=!1;let A=-1,w=new MutationObserver(()=>{A>=0&&p(n,A)}),P=()=>{h(),!f&&((n.textContent??"").length>500&&o(n,(n.textContent??"").slice(0,500)),s&&l&&(A=u(n),l.previewReactTextEdit(n,s.propName,n.textContent??"")||o(n,c)))},k=(t,a)=>{let r=t.startContainer;if(r!==t.endContainer||!(r instanceof Text)||!n.contains(r)||r.parentElement?.closest(e))return;let i=t.endOffset-t.startOffset,o=a.replace(/[\r\n]+/g," ").slice(0,Math.max(0,500-(n.textContent??"").length+i));r.replaceData(t.startOffset,i,o),h();let l=document.createRange();l.setStart(r,t.startOffset+o.length);let s=document.getSelection();s?.removeAllRanges(),s?.addRange(l)};n.addEventListener("beforeinput",e=>{if(A=-1,s||"insertCompositionText"===e.inputType)return;e.preventDefault();let t=e.getTargetRanges()[0],n=e.inputType;t&&(n.startsWith("delete")||"insertText"===n||"insertReplacementText"===n)&&k(t,n.startsWith("delete")?"":e.data??e.dataTransfer?.getData("text/plain")??"")},{signal:T.signal}),n.addEventListener("input",P,{signal:T.signal}),s&&w.observe(n,{childList:!0,characterData:!0,subtree:!0}),n.addEventListener("paste",e=>{e.preventDefault();let t=e.clipboardData?.getData("text/plain")??"",a=document.getSelection();f?a?.rangeCount&&k(a.getRangeAt(0),t):(function(e,t){let n=u(e);if(n<0)return;let a=e.textContent??"",r=t.slice(0,Math.max(0,500-a.length));o(e,a.slice(0,n)+r+a.slice(n)),p(e,n+r.length)}(n,t.replace(/[\r\n]+/g," ").slice(0,500)),P())},{signal:T.signal}),n.addEventListener("drop",e=>e.preventDefault(),{signal:T.signal}),n.setAttribute("contenteditable","true"),n.setAttribute("role","textbox"),n.setAttribute("aria-label","Inline text preview"),n.setAttribute("aria-multiline","false"),n.dataset.komoInlineEditing="true",n.spellcheck=!1,n.style.setProperty("outline",`2px solid ${r.accent??"#bda6ef"}`,"important"),n.style.setProperty("outline-offset","2px","important"),n.style.setProperty("box-shadow","none","important"),n.style.setProperty("white-space","pre-wrap","important"),n.focus({preventScroll:!0});let S=document.getSelection(),D=document.createRange(),O=t(n).reverse().find(([t])=>!t.parentElement?.closest(e))?.[0];return O?D.setStart(O,O.length):D.selectNodeContents(n),D.collapse(!0),S?.removeAllRanges(),S?.addRange(D),{element:n,finish(e=!1){if(R)return;R=!0,T.abort(),w.disconnect(),x();for(let e of b.reverse())e.restore();let t=(n.textContent??"").slice(0,500);(function(){n.removeAttribute("contenteditable"),n.removeAttribute("data-komo-inline-editing");for(let[e,t]of[["role",C],["aria-label",v],["aria-multiline",y],["spellcheck",E]])null===t?n.removeAttribute(e):n.setAttribute(e,t)})(),e?(s&&l&&l.cancelReactTextEdit(n,s.propName,c),o(n,c,m)):s&&l&&l.finishReactTextEdit(n,s.propName,c,t),r.onFinish({element:n,before:c,after:t,nodes:m,...s?{reactProp:s.propName}:{}},e)},handleKey:e=>!e.isComposing&&(("Enter"===e.key||"Escape"===e.key)&&(e.preventDefault(),e.stopImmediatePropagation(),!0))}}export{s as bindInlineTextTools,d as canEditText,l as createInlineTextTools,r as createTextPreviewHistory,f as startInlineTextEditor,c as textEditBlocker};
|