@plannotator/opencode 0.17.2 → 0.17.3

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/plannotator.html CHANGED
@@ -457,7 +457,7 @@ ${e.themeCSS}`),e.fontFamily!==void 0&&(t+=`
457
457
  ${DKA}
458
458
  </iframe>`},"putIntoIFrame"),JV=v((e,A,t,i,r)=>{const n=e.append("div");n.attr("id",t),i&&n.attr("style",i);const a=n.append("svg").attr("id",A).attr("width","100%").attr("xmlns",BKA);return r&&a.attr("xmlns:xlink",r),a.append("g"),e},"appendDivSvgG");function RO(e,A){return e.append("iframe").attr("id",A).attr("style","width: 100%; height: 100%;").attr("sandbox","")}v(RO,"sandboxedIframe");var MKA=v((e,A,t,i)=>{e.getElementById(A)?.remove(),e.getElementById(t)?.remove(),e.getElementById(i)?.remove()},"removeExistingElements"),kKA=v(async function(e,A,t){mb();const i=s5(A);A=i.code;const r=Ri();pA.debug(r),A.length>(r?.maxTextSize??IKA)&&(A=CKA);const n="#"+e,a="i"+e,s="#"+a,o="d"+e,g="#"+o,l=v(()=>{const H=He(C?s:g).node();H&&"remove"in H&&H.remove()},"removeTempElements");let I=He("body");const C=r.securityLevel===EKA,E=r.securityLevel===uKA,u=r.fontFamily;if(t!==void 0){if(t&&(t.innerHTML=""),C){const K=RO(He(t),a);I=He(K.nodes()[0].contentDocument.body),I.node().style.margin=0}else I=He(t);JV(I,e,o,`font-family: ${u}`,dKA)}else{if(MKA(document,e,o,a),C){const K=RO(He("body"),a);I=He(K.nodes()[0].contentDocument.body),I.node().style.margin=0}else I=He("body");JV(I,e,o)}let d,Q;try{d=await bO.fromText(A,{title:i.title})}catch(K){if(r.suppressErrorRendering)throw l(),K;d=await bO.fromText("error"),Q=K}const f=I.select(g).node(),p=d.type,y=f.firstChild,w=y.firstChild,S=d.renderer.getClasses?.(A,d),k=bKA(r,p,S,n),R=document.createElement("style");R.innerHTML=k,y.insertBefore(R,w);try{await d.renderer.draw(A,e,y3.version,d)}catch(K){throw r.suppressErrorRendering?l():Q4A.draw(A,e,y3.version),K}const b=I.select(`${g} svg`),N=d.db.getAccTitle?.(),T=d.db.getAccDescription?.();xlA(p,b,N,T),I.select(`[id="${e}"]`).selectAll("foreignobject > *").attr("xmlns",hKA);let L=I.select(g).node().innerHTML;if(pA.debug("config.arrowMarkerAbsolute",r.arrowMarkerAbsolute),L=RKA(L,C,tr(r.arrowMarkerAbsolute)),C){const K=I.select(g+" svg").node();L=NKA(L,K)}else E||(L=Rd.sanitize(L,{ADD_TAGS:wKA,ADD_ATTR:vKA,HTML_INTEGRATION_POINTS:{foreignobject:!0}}));if(sKA(),Q)throw Q;return l(),{diagramType:p,svg:L,bindFunctions:d.db.bindFunctions}},"render");function MlA(e={}){const A=on({},e);A?.fontFamily&&!A.themeVariables?.fontFamily&&(A.themeVariables||(A.themeVariables={}),A.themeVariables.fontFamily=A.fontFamily),R1A(A),A?.theme&&A.theme in mc?A.themeVariables=mc[A.theme].getThemeVariables(A.themeVariables):A&&(A.themeVariables=mc.default.getThemeVariables(A.themeVariables));const t=typeof A=="object"?b1A(A):XiA();AK(t.logLevel),mb()}v(MlA,"initialize");var klA=v((e,A={})=>{const{code:t}=a5(e);return bO.fromText(t,A)},"getDiagramFromText");function xlA(e,A,t,i){wlA(A,e),vlA(A,t,i,A.attr("id"))}v(xlA,"addA11yInfo");var Au=Object.freeze({render:kKA,parse:NlA,getDiagramFromText:klA,initialize:MlA,getConfig:Ri,setConfig:$iA,getSiteConfig:XiA,updateSiteConfig:N1A,reset:v(()=>{bv()},"reset"),globalReset:v(()=>{bv(Nd)},"globalReset"),defaultConfig:Nd});AK(Ri().logLevel);bv(Ri());var xKA=v((e,A,t)=>{pA.warn(e),YK(e)?(t&&t(e.str,e.hash),A.push({...e,message:e.str,error:e})):(t&&t(e),e instanceof Error&&A.push({str:e.message,message:e.message,hash:e.name,error:e}))},"handleError"),LlA=v(async function(e={querySelector:".mermaid"}){try{await LKA(e)}catch(A){if(YK(A)&&pA.error(A.str),Mc.parseError&&Mc.parseError(A),!e.suppressErrors)throw pA.error("Use the suppressErrors option to suppress these errors"),A}},"run"),LKA=v(async function({postRenderCallback:e,querySelector:A,nodes:t}={querySelector:".mermaid"}){const i=Au.getConfig();pA.debug(`${e?"":"No "}Callback function found`);let r;if(t)r=t;else if(A)r=document.querySelectorAll(A);else throw new Error("Nodes and querySelector are both undefined");pA.debug(`Found ${r.length} diagrams`),i?.startOnLoad!==void 0&&(pA.debug("Start On Load: "+i?.startOnLoad),Au.updateSiteConfig({startOnLoad:i?.startOnLoad}));const n=new ei.InitIDGenerator(i.deterministicIds,i.deterministicIDSeed);let a;const s=[];for(const o of Array.from(r)){if(pA.info("Rendering diagram: "+o.id),o.getAttribute("data-processed"))continue;o.setAttribute("data-processed","true");const g=`mermaid-${n.next()}`;a=o.innerHTML,a=WsA(ei.entityDecode(a)).trim().replace(/<br\s*\/?>/gi,"<br/>");const l=ei.detectInit(a);l&&pA.debug("Detected early reinit: ",l);try{const{svg:I,bindFunctions:C}=await OlA(g,a,o);o.innerHTML=I,e&&await e(g),C&&C(o)}catch(I){xKA(I,s,Mc.parseError)}}if(s.length>0)throw s[0]},"runThrowsErrors"),TlA=v(function(e){Au.initialize(e)},"initialize"),TKA=v(async function(e,A,t){pA.warn("mermaid.init is deprecated. Please use run instead."),e&&TlA(e);const i={postRenderCallback:t,querySelector:".mermaid"};typeof A=="string"?i.querySelector=A:A&&(A instanceof HTMLElement?i.nodes=[A]:i.nodes=A),await LlA(i)},"init"),FKA=v(async(e,{lazyLoad:A=!0}={})=>{mb(),S3(...e),A===!1&&await nKA()},"registerExternalDiagrams"),FlA=v(function(){if(Mc.startOnLoad){const{startOnLoad:e}=Au.getConfig();e&&Mc.run().catch(A=>pA.error("Mermaid failed to initialize",A))}},"contentLoaded");typeof document<"u"&&window.addEventListener("load",FlA,!1);var GKA=v(function(e){Mc.parseError=e},"setParseErrorHandler"),dS=[],uT=!1,GlA=v(async()=>{if(!uT){for(uT=!0;dS.length>0;){const e=dS.shift();if(e)try{await e()}catch(A){pA.error("Error executing queue",A)}}uT=!1}},"executeQueue"),OKA=v(async(e,A)=>new Promise((t,i)=>{const r=v(()=>new Promise((n,a)=>{Au.parse(e,A).then(s=>{n(s),t(s)},s=>{pA.error("Error parsing",s),Mc.parseError?.(s),a(s),i(s)})}),"performCall");dS.push(r),GlA().catch(i)}),"parse"),OlA=v((e,A,t)=>new Promise((i,r)=>{const n=v(()=>new Promise((a,s)=>{Au.render(e,A,t).then(o=>{a(o),i(o)},o=>{pA.error("Error parsing",o),Mc.parseError?.(o),s(o),r(o)})}),"performCall");dS.push(n),GlA().catch(r)}),"render"),UKA=v(()=>Object.keys(JE).map(e=>({id:e})),"getRegisteredDiagramsMetadata"),Mc={startOnLoad:!0,mermaidAPI:Au,parse:OKA,render:OlA,init:TKA,run:LlA,registerExternalDiagrams:FKA,registerLayoutLoaders:PgA,initialize:TlA,parseError:void 0,contentLoaded:FlA,setParseErrorHandler:GKA,detectType:tK,registerIconPacks:jsA,getRegisteredDiagramsMetadata:UKA},UlA=Mc;/*! Check if previously processed *//*!
459
459
  * Wait for document loaded before starting the execution
460
- */UlA.initialize({startOnLoad:!1,securityLevel:"strict",theme:"dark",themeVariables:{primaryColor:"#3b82f6",primaryTextColor:"#f8fafc",primaryBorderColor:"#475569",lineColor:"#64748b",secondaryColor:"#1e293b",tertiaryColor:"#0f172a",background:"#1e293b",mainBkg:"#1e293b",nodeBorder:"#475569",clusterBkg:"#1e293b",clusterBorder:"#475569",titleColor:"#f8fafc",edgeLabelBackground:"#1e293b"},flowchart:{htmlLabels:!0,curve:"basis"}});const jy=.25,BT=.25,dT=8;function KKA(e){const A=e.getAttribute("viewBox");if(!A)return null;const t=A.trim().split(/[\s,]+/).map(s=>Number.parseFloat(s));if(t.length!==4||t.some(s=>Number.isNaN(s)))return null;const[i,r,n,a]=t;return n<=0||a<=0?null:{x:i,y:r,width:n,height:a}}function YKA(e){const A=e.match(/viewBox\s*=\s*"([^"]+)"/i);if(A?.[1]){const a=A[1].trim().split(/[\s,]+/).map(s=>Number.parseFloat(s));if(a.length===4&&a.every(s=>Number.isFinite(s))){const[s,o,g,l]=a;if(g>0&&l>0)return{x:s,y:o,width:g,height:l}}}const t=e.match(/\bwidth\s*=\s*"([0-9.]+)(?:px)?"/i),i=e.match(/\bheight\s*=\s*"([0-9.]+)(?:px)?"/i),r=t?.[1]?Number.parseFloat(t[1]):NaN,n=i?.[1]?Number.parseFloat(i[1]):NaN;return Number.isFinite(r)&&Number.isFinite(n)&&r>0&&n>0?{x:0,y:0,width:r,height:n}:null}function hT(e,A,t,i){const r=A.width/t,n=A.height/t,a=A.x+A.width/2,s=A.y+A.height/2,o=a-r/2+i.x,g=s-n/2+i.y;e.setAttribute("viewBox",`${o} ${g} ${r} ${n}`)}function HKA(e,A){const t=Math.max(A.width,1),i=Math.max(A.height,1),r=e.width/e.height,n=t/i;if(r>n){const o=e.width/n,g=(o-e.height)/2;return{x:e.x,y:e.y-g,width:e.width,height:o}}const a=e.height*n,s=(a-e.width)/2;return{x:e.x-s,y:e.y,width:a,height:e.height}}const PKA=({block:e})=>{const A=nA.useRef(null),t=nA.useRef(null),[i,r]=nA.useState(""),[n,a]=nA.useState(null),[s,o]=nA.useState(!1),[g,l]=nA.useState(!1),I=nA.useRef(1),C=nA.useRef(!1),E=nA.useRef(null),u=nA.useRef(null),d=nA.useRef({x:0,y:0}),Q=nA.useRef({x:0,y:0}),f=nA.useRef({x:0,y:0}),p=nA.useRef(null),y=nA.useRef(null),w=nA.useRef(null),S=nA.useCallback(F=>{if(I.current=F,A.current&&u.current){const O=A.current.querySelector("svg");O instanceof SVGSVGElement&&hT(O,u.current,F,d.current)}if(p.current&&(p.current.disabled=F>=dT),y.current&&(y.current.disabled=F<=BT),w.current){const O=Math.abs(F-1)>.001;w.current.textContent=O?`${Math.round(F*100)}%`:"",w.current.hidden=!O}},[]),k=nA.useCallback(()=>{if(!A.current||!E.current)return;const F=A.current.querySelector("svg");if(!(F instanceof SVGSVGElement))return;const O=HKA(E.current,A.current.getBoundingClientRect());u.current=O,d.current={x:0,y:0},S(1),hT(F,O,1,{x:0,y:0})},[S]);nA.useEffect(()=>{let F=!1;return(async()=>{try{const P=`mermaid-${e.id}`,{svg:q}=await UlA.render(P,e.content);F||(E.current=YKA(q),r(q),a(null))}catch(P){F||(a(P instanceof Error?P.message:"Failed to render diagram"),r(""))}})(),()=>{F=!0}},[e.content,e.id]),nA.useEffect(()=>{I.current=1,E.current=null,u.current=null,d.current={x:0,y:0},l(!1)},[e.content]),nA.useEffect(()=>{if(s){l(!1);return}I.current=1,d.current={x:0,y:0},u.current=null},[s]),nA.useEffect(()=>{if(!g)return;const F=document.body.style.overflow;document.body.style.overflow="hidden";const O=P=>{P.key==="Escape"&&l(!1)};return window.addEventListener("keydown",O),()=>{document.body.style.overflow=F,window.removeEventListener("keydown",O)}},[g]),nA.useEffect(()=>{if(!i||s||!A.current)return;const F=A.current.querySelector("svg");if(!(F instanceof SVGSVGElement))return;F.style.maxWidth="none",F.style.width="100%",F.style.height="100%",F.style.display="block",F.style.filter="none",F.style.willChange="auto",F.setAttribute("width","100%"),F.setAttribute("height","100%"),F.setAttribute("preserveAspectRatio","xMidYMid meet");let O=!1;const P=()=>{if(!O)try{const z=E.current??KKA(F);if(!z)return;E.current=z,k()}catch{a("Failed to measure diagram bounds"),r("")}},q=requestAnimationFrame(()=>requestAnimationFrame(P)),Y=window.setTimeout(P,120);return()=>{O=!0,cancelAnimationFrame(q),window.clearTimeout(Y)}},[k,g,s,i]);const R=nA.useCallback(F=>{if(Math.abs(F)<.1)return;const O=F>0?-jy:jy,P=Math.max(BT,Math.min(dT,I.current+O));S(P)},[S]);nA.useEffect(()=>{if(s||!A.current)return;const F=A.current,O=P=>{Math.abs(P.deltaY)<.1||(P.preventDefault(),R(P.deltaY))};return F.addEventListener("wheel",O,{passive:!1}),()=>{F.removeEventListener("wheel",O)}},[R,s]),nA.useEffect(()=>{if(s||!g)return;const F=O=>{if(!O.ctrlKey&&!O.metaKey||!t.current)return;const P=O.target;!(P instanceof Node)||!t.current.contains(P)||(O.preventDefault(),O.stopPropagation(),R(O.deltaY))};return window.addEventListener("wheel",F,{passive:!1,capture:!0}),()=>{window.removeEventListener("wheel",F,{capture:!0})}},[R,g,s]);const b=nA.useCallback(()=>{S(Math.min(I.current+jy,dT))},[S]),N=nA.useCallback(()=>{S(Math.max(I.current-jy,BT))},[S]),T=nA.useCallback(()=>{k()},[k]);nA.useEffect(()=>{if(s||!A.current||!E.current||typeof ResizeObserver>"u")return;const F=new ResizeObserver(()=>{Math.abs(I.current-1)>.001||k()});return F.observe(A.current),()=>F.disconnect()},[k,g,s,i]);const L=nA.useCallback(F=>{F.button===0&&(F.preventDefault(),C.current=!0,Q.current={x:F.clientX,y:F.clientY},f.current={...d.current},A.current&&(A.current.style.cursor="grabbing"))},[]),K=nA.useCallback(F=>{if(!C.current||!A.current||!u.current)return;const O=A.current.querySelector("svg");if(!(O instanceof SVGSVGElement))return;const P=O.getBoundingClientRect(),q=u.current,Y=I.current,z=q.width/Y/P.width,j=q.height/Y/P.height,X=F.clientX-Q.current.x,_=F.clientY-Q.current.y;d.current={x:f.current.x-X*z,y:f.current.y-_*j},hT(O,q,Y,d.current)},[]),H=nA.useCallback(()=>{C.current&&(C.current=!1,A.current&&(A.current.style.cursor="grab"))},[]);if(n)return D.jsxs("div",{className:"my-5 rounded-lg border border-destructive/30 bg-destructive/5 overflow-hidden",children:[D.jsxs("div",{className:"px-3 py-2 bg-destructive/10 border-b border-destructive/20 flex items-center gap-2",children:[D.jsx("svg",{className:"w-4 h-4 text-destructive",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"})}),D.jsx("span",{className:"text-xs text-destructive font-medium",children:"Mermaid Error"})]}),D.jsx("pre",{className:"p-3 text-xs text-destructive/80 overflow-x-auto",children:n}),D.jsx("pre",{className:"p-3 text-xs text-muted-foreground bg-muted/30 border-t border-border/30 overflow-x-auto",children:D.jsx("code",{children:e.content})})]});const x=D.jsxs("div",{className:`absolute top-2 right-2 flex flex-col gap-1 items-center z-10 ${g?"opacity-100":"opacity-0 group-hover:opacity-100 transition-opacity"}`,children:[D.jsx("button",{onClick:()=>o(!s),className:"p-1.5 rounded-md bg-muted/85 hover:bg-muted text-muted-foreground hover:text-foreground",title:s?"Show diagram":"Show source",children:s?D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"})}):D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"})})}),!s&&i&&D.jsxs(D.Fragment,{children:[D.jsxs("div",{className:"flex w-10 flex-col items-center gap-0.5 bg-muted/85 rounded-md p-0.5",children:[D.jsx("button",{onClick:()=>l(!g),className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground",title:g?"Exit expanded view":"Expand diagram","aria-label":g?"Exit expanded view":"Expand diagram",children:g?D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 10h4V6M18 10h-4V6M6 14h4v4M18 14h-4v4"})}):D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5"})})}),D.jsx("button",{ref:p,onClick:b,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground disabled:opacity-30 disabled:cursor-not-allowed",title:"Zoom in","aria-label":"Zoom in",children:D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 5v14M5 12h14"})})}),D.jsx("button",{onClick:T,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground",title:"Fit to view","aria-label":"Fit to view",children:D.jsxs("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:[D.jsx("circle",{cx:"12",cy:"12",r:"4",strokeLinecap:"round",strokeLinejoin:"round"}),D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 2v4M12 18v4M2 12h4M18 12h4"})]})}),D.jsx("button",{ref:y,onClick:N,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground disabled:opacity-30 disabled:cursor-not-allowed",title:"Zoom out","aria-label":"Zoom out",children:D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 12h14"})})})]}),D.jsx("span",{ref:w,hidden:!0,className:"min-w-10 rounded bg-muted/85 px-1 py-0.5 text-[10px] text-center text-muted-foreground tabular-nums leading-tight"})]})]}),U=D.jsx("pre",{className:"rounded-lg text-[13px] overflow-x-auto bg-muted/50 border border-border/30 p-4",children:D.jsx("code",{className:"hljs font-mono language-mermaid",children:e.content})}),G=D.jsx("div",{ref:A,className:`rounded-xl bg-muted/30 border border-border/30 overflow-hidden select-none cursor-grab ${g?"h-full min-h-0":"h-[min(65vh,36rem)] min-h-[20rem]"}`,dangerouslySetInnerHTML:{__html:i},onMouseDown:L,onMouseMove:K,onMouseUp:H,onMouseLeave:H});return D.jsxs(D.Fragment,{children:[D.jsxs("div",{className:"my-5 group relative","data-block-id":e.id,children:[!g&&x,s||!i?U:g?D.jsx("div",{className:"rounded-xl border border-border/30 bg-muted/10 h-[min(65vh,36rem)] min-h-[20rem]"}):G]}),!s&&i&&g&&typeof document<"u"&&Dg.createPortal(D.jsx("div",{ref:t,className:"fixed inset-0 z-[9999] bg-background/90 backdrop-blur-sm p-4 md:p-6",children:D.jsxs("div",{className:"mx-auto flex h-full max-w-[min(96vw,110rem)] flex-col gap-3",children:[D.jsxs("div",{className:"flex items-center justify-between gap-4 text-xs text-muted-foreground",children:[D.jsx("span",{className:"truncate",children:"Mermaid diagram"}),D.jsx("button",{onClick:()=>l(!1),className:"rounded-md border border-border/60 bg-card/70 px-2.5 py-1.5 text-foreground hover:bg-card",children:"Close"})]}),D.jsxs("div",{className:"group relative flex-1 min-h-0",children:[x,G]})]})}),document.body)]})},JKA=new Set(["dot","graphviz","gv"]);function KlA(e){return e?.trim().split(/\s+/,1)[0]?.toLowerCase()}function zKA(e){return KlA(e)==="mermaid"}function qKA(e){const A=KlA(e);return A?JKA.has(A):!1}var rE={},nE={},_y={},zV;function WKA(){return zV||(zV=1,Object.defineProperty(_y,"__esModule",{value:!0}),_y.default=["abashed","abbreviated","abdominal","abiding","abject","ablaze","able","able-bodied","abnormal","abominable","aboriginal","above","abrasive","abreast","abrupt","absent","absolute","absorbed","absorbing","abstract","abundant","academic","accelerated","accelerating","acceptable","accepted","accessible","accidental","accompanying","accomplished","accountable","accumulated","accurate","accursed","accused","accustomed","aching","acknowledged","acoustic","acquired","acquisitive","acrid","acrimonious","across-the-board","acting","active","actual","acute","adamant","adaptable","adaptive","added","addictive","additional","additive","adept","adequate","adhesive","adjacent","adjoining","adjustable","administrative","admirable","admiring","admitting","adolescent","adopted","adorable","adoring","adrenal","adrift","adroit","adult","advanced","advancing","advantageous","adventurous","adverse","advisable","advisory","aesthetic","affable","affected","affectionate","affiliated","affirmative","afflicted","affluent","affordable","afire","afloat","afraid","aft","after","afterward","aged","ageless","aggravated","aggregate","aghast","agile","aging","agitated","agonized","agonizing","agrarian","agreeable","agreed","agricultural","ailing","aimless","air-conditioned","air-conditioning","airborne","airless","airtight","airy","ajar","akin","alarmed","alarming","alert","alien","alienated","alike","alive","all-american","all-important","all-night","all-out","all-powerful","all-purpose","all-time","all-white","alleged","allegorical","allergic","allied","allowable","alluring","almighty","alone","aloof","alright","altered","alternate","alternating","alternative","amateur","amateurish","amazed","amazing","amber","ambiguous","ambitious","ambivalent","amenable","amiable","amorous","amorphous","ample","amused","amusing","anachronistic","anal","analogous","analytic","analytical","anarchic","anatomical","ancestral","ancient","anemic","anesthetic","angelic","angry","anguished","angular","animated","announced","annoying","annual","anonymous","answering","antagonistic","anterior","anthropological","anti","anti-american","anti-inflation","anti-soviet","anticipated","antinuclear","antiquated","antique","antiseptic","antitank","anxious","apathetic","apocalyptic","apolitical","appalled","appalling","apparent","appealing","appellate","applicable","applied","appointed","appreciable","appreciative","apprehensive","approaching","appropriate","approved","approximate","apt","aquatic","arbitrary","arcane","arch","archaeological","archaic","arched","archetypal","architectural","arctic","ardent","arduous","arid","aristocratic","armed","armored","arms-control","aromatic","arresting","arterial","artful","articulate","articulated","artificial","artistic","ascending","ascetic","ascorbic","ashamed","ashen","askew","asleep","aspiring","assembled","assertive","assigned","assistant","associate","associated","assorted","assumed","assured","astonished","astonishing","astounded","astounding","astronomical","astute","athletic","atmospheric","atomic","atrocious","attached","attacking","attainable","attempted","attendant","attentive","attracting","attractive","attributable","auburn","audacious","audible","audio","auditory","august","auspicious","austere","authentic","authoritarian","authoritative","authorized","autobiographical","autocratic","automated","automatic","automotive","autonomous","autumnal","auxiliary","available","avant-garde","avenging","average","averse","avid","avowed","awake","aware","awash","away","awed","awesome","back","backhand","backstage","backward","bacterial","baffled","baffling","baggy","baked","balanced","bald","balding","baleful","ballistic","balmy","banal","bankrupt","banned","barbarous","barbed","bare","barefoot","barefooted","barred","barren","basic","bass","bathing","battered","beaded","beaming","bearable","bearded","beastly","beautiful","bedraggled","beefy","befuddled","beguiling","behavioral","behind-the-scenes","beige","belated","beleaguered","believable","belligerent","beloved","bemused","beneficent","beneficial","benign","bent","bereaved","bereft","bespectacled","best-known","best-selling","bestselling","bewildered","bewildering","big","big-city","big-time","bilateral","bilingual","binary","binding","biochemical","biographical","biological","bipartisan","biting","bitter","bittersweet","bizarre","black","black-and-white","black-haired","blackened","bland","blank","blasted","blatant","blazing","bleached","bleak","bleary","bleeding","blessed","blind","blinding","blinking","blissful","blistering","bloated","blocking","blond","blonde","bloodied","bloodshot","bloodstained","bloody","blooming","blue","blue-and-white","blue-black","blue-chip","blue-collar","blue-eyed","blue-gray","blue-green","bluish","blunt","blurred","bodily","bogus","boiled","boiling","boisterous","bold","bony","booming","bored","boring","born","born-again","borrowed","botanical","bottled","bottom","bottomless","bouncing","bound","boundless","bountiful","bourgeois","bowed","box-office","boyish","bracing","braided","branching","brand-new","brash","brassy","brave","brawny","brazen","breathless","breathtaking","breezy","bridal","brief","bright","bright-eyed","brilliant","brisk","brittle","broad","broad-shouldered","broke","broken","bronchial","brooding","brotherly","brown","brownish","bruised","brusque","brutal","bubbling","bubbly","budding","budgetary","bulbous","bulging","bulky","bulletproof","bumper","bumpy","buoyant","burdensome","bureaucratic","burgeoning","buried","burly","burned","burned-out","burning","burnished","burnt","bushy","businesslike","busing","busted","bustling","busy","button-down","buxom","buzzing","bygone","caged","calculated","called","callous","calm","cancerous","candid","canned","canny","cantankerous","capable","capital","capitalist","capitalistic","capricious","captive","cardboard","cardiac","cardinal","cardiovascular","carefree","careful","careless","caring","carnival","carpeted","carved","cast","cast-iron","casual","catastrophic","causal","caustic","cautionary","cautious","cavernous","ceaseless","celebrated","celestial","cellular","centennial","central","centralized","centre-fire","centrifugal","centrist","ceramic","cerebral","ceremonial","certain","certified","challenging","change-minimizing","changed","changing","chaotic","characteristic","charged","charging","charismatic","charitable","charming","charred","chartered","chaste","chastened","cheap","checked","checkered","cheerful","cheering","cheery","chemical","cherished","chief","childlike","chilled","chilling","chilly","chipped","chopped","choppy","choral","chosen","chronic","chronological","chunky","cinematic","circular","circulating","circulatory","circumstantial","citywide","civic","civil","civilian","civilized","clammy","clandestine","classic","classical","classified","classy","clean","clean-cut","clear","clear-cut","cleared","clearing","clenched","clerical","clever","climactic","climatic","clinging","clinical","clipped","close","closed","closed-circuit","closing","cloudless","cloudy","clumsy","cluttered","coarse","coastal","cobbled","coded","coed","coercive","cognitive","coherent","cohesive","coiled","coincidental","cold","cold-blooded","collaborative","collapsing","collected","collective","collegiate","colonial","colored","colorful","colorless","colossal","coloured","comatose","combative","combined","comely","comfortable","comforting","comic","comical","coming","commanding","commendable","commensurate","commercial","committed","common","commonplace","communal","compact","comparable","comparative","compassionate","compatible","compelling","compensatory","competent","competing","competitive","complacent","complementary","complete","completed","complex","compliant","complicated","complimentary","composite","compositional","comprehensible","comprehensive","compressed","compulsory","computerized","concave","concealed","conceivable","concentrated","concentric","conceptual","concerned","concerted","conciliatory","concise","concluding","conclusive","concomitant","concrete","concurrent","condemned","condescending","conditional","conditioned","conducive","confident","confidential","confined","confirmed","conflicting","confused","confusing","congenial","congenital","congested","congressional","conic","conical","connected","connecting","connective","conquered","conquering","conscientious","conscious","consecutive","consequent","conservation","conservative","considerable","considerate","consistent","consoling","conspicuous","conspiratorial","constant","constitutional","constructive","consular","consulting","consuming","consummate","contagious","contaminated","contemplative","contemporary","contemptible","contemptuous","contending","content","contented","contentious","contested","continental","contingent","continual","continued","continuing","continuous","contraceptive","contracting","contractual","contradictory","contrary","contrasting","contributing","contrite","contrived","controlled","controlling","controversial","convenient","conventional","conversational","converted","convertible","convicted","convinced","convincing","convulsive","cooked","cool","cooling","cooperative","coordinated","copious","cordial","corned","corny","coronary","corporate","correct","correctional","corrective","corresponding","corrosive","corrugated","cosmetic","cosmic","cosmopolitan","costly","counterfeit","counterproductive","countless","courageous","court-ordered","courteous","courtly","covered","covert","coveted","coy","cozy","cracked","cracking","crackling","crafty","craggy","cramped","cranky","crashing","crass","crawling","crazed","crazy","creaking","cream-colored","creamy","creased","created","creative","credible","creeping","crimson","crippled","crisp","critical","cross-country","cross-legged","crossed","crowded","crucial","crumbling","crummy","crumpled","crushed","crushing","crusty","cryptic","crystalline","cubic","culinary","cultivated","cultural","cultured","cumbersome","cumulative","cunning","cupped","curious","curled","curly","current","cursory","curt","curtained","curved","curving","customary","cut-rate","cute","cutting","cyclical","cylindrical","daily","dainty","damaged","damn","damned","damp","dangerous","dank","dapper","daring","dark","dark-blue","dark-eyed","dark-haired","darkened","darkening","darling","darting","dashing","dated","daunting","day-care","day-to-day","dazed","dazzling","deaf","deafening","dear","deathly","debatable","debilitating","decadent","decaying","deceased","decent","decentralized","decided","decision-making","decisive","declared","declining","decorated","decorative","decorous","decreased","decreasing","decrepit","dedicated","deductible","deep","deep-seated","deepening","defeated","defenseless","defensible","defensive","deferential","deferred","defiant","deficient","definite","definitive","deformed","deft","defunct","degenerate","degenerative","dejected","delayed","delectable","deliberate","delicate","delicious","delighted","delightful","delinquent","delirious","demanding","demeaning","demented","democratic","demographic","demonic","demure","dense","dental","departed","departing","departmental","dependable","dependent","depleted","deplorable","deposed","depressed","derelict","derisive","descending","descriptive","deserted","deserving","designated","desirable","desired","desolate","despairing","desperate","despicable","despised","despondent","destitute","destructive","desultory","detached","detailed","detectable","deteriorating","determined","determining","detrimental","devastating","developed","developing","developmental","deviant","devious","devoid","devoted","devout","diagnostic","diagonal","dialectical","dictatorial","dietary","different","differential","differing","diffident","diffuse","digestive","digging","digital","dignified","dilapidated","diligent","dim","diminished","diminishing","diminutive","dingy","diplomatic","dire","direct","disabled","disappearing","disappointing","disapproving","disastrous","discarded","discernible","discerning","disciplinary","disciplined","disconcerting","discontented","discordant","discouraging","discredited","discreet","discrete","discretionary","discriminatory","disembodied","disenchanted","disguised","disjointed","dismayed","disorderly","disorganized","disoriented","disparate","displaced","displeased","disposable","disproportionate","disputed","disquieting","disreputable","disruptive","dissenting","dissident","dissimilar","distant","distinct","distinctive","distinguishable","distinguished","distinguishing","distorted","distraught","distressed","distressing","disturbed","disturbing","divergent","diverse","diversified","divided","dividing","divine","diving","divisional","divisive","dizzy","dizzying","do-it-yourself","docile","doctoral","doctrinaire","doctrinal","dogged","dogmatic","domed","domestic","doomed","door-to-door","dormant","double","double-action","double-breasted","double-digit","doubtful","dour","down","down-to-earth","downcast","downhill","downright","downtown","downward","drab","drained","dramatic","drastic","dreaded","dreamlike","dreamy","dreary","dried","driven","driving","droll","drooping","drowning","drowsy","drugged","drunken","dry","dual","dubious","due","dull","duplicate","durable","dusky","dusty","dutiful","dwindling","dyed","dying","dynamic","dynastic","eager","early","early-morning","earned","earnest","earthen","earthly","earthy","eastern","easy","easygoing","ebullient","eccentric","ecclesiastical","echoing","eclectic","ecological","economic","economical","ecstatic","ecumenical","edgy","edible","editorial","educated","educational","eerie","effective","efficient","effortless","egalitarian","eight-hour","eight-year","eighteenth-century","elaborate","elastic","elated","elderly","elected","elective","electoral","electric","electrical","electromagnetic","electronic","electrostatic","elegant","elemental","elementary","elevated","eligible","elitist","elongated","eloquent","elusive","embarrassed","embarrassing","embattled","emblematic","embroidered","embryonic","emerging","emeritus","eminent","emotional","emphatic","empirical","empty","empty-handed","enchanted","enchanting","enclosed","encouraging","endangered","endearing","endemic","endless","enduring","energetic","enforced","engaged","engaging","engraved","enhanced","enigmatic","enjoyable","enlarged","enlightened","enormous","enraged","enriched","ensconced","ensuing","enterprising","entertaining","enthusiastic","enticing","entire","entrenched","entrepreneurial","enviable","envious","environmental","ephemeral","epic","equal","equatorial","equestrian","equitable","equivalent","eroding","errant","erratic","erroneous","ersatz","erstwhile","escalating","escaping","esoteric","essential","established","esteemed","esthetic","estimated","estranged","eternal","ethereal","ethical","eucalyptus","euphoric","evangelical","evasive","even","eventual","ever-increasing","ever-present","everlasting","everyday","evident","evocative","evolutionary","exact","exacting","exaggerated","exalted","excellent","exceptional","excess","excessive","excited","exciting","exclusive","excruciating","executive","exemplary","exempt","exhausted","exhausting","exhaustive","exhilarated","exhilarating","exiled","existential","existing","exorbitant","exotic","expanded","expanding","expansive","expectant","expected","expedient","expendable","expensive","experienced","experimental","expert","explanatory","explicit","exploratory","explosive","exposed","express","expressed","expressionless","expressive","exquisite","extant","extended","extensive","exterior","external","extinct","extra","extracurricular","extraneous","extraordinary","extravagant","extreme","extremist","extrinsic","exuberant","exultant","fabled","fabulous","face-to-face","faceless","facial","facile","factional","factual","faded","fading","failed","failing","faint","fair","faithful","fallen","falling","fallow","false","faltering","famed","familial","familiar","famished","famous","fanatical","fanciful","fancy","fantastic","far-flung","far-off","far-reaching","farcical","farfetched","fascinated","fascinating","fascist","fashionable","fast","fast-food","fast-growing","fast-moving","fastidious","fatal","fated","fateful","fatherly","fatty","fatuous","faulty","favorable","favored","favorite","favourable","favourite","feal","fearful","fearless","fearsome","feasible","feathered","feathery","featureless","federal","feeble","feeding","feisty","fellow","feminine","ferocious","fervent","festive","fetal","fetid","feudal","feverish","fickle","fictional","fictitious","fierce","fiery","figurative","filmy","final","financial","fine","finished","finishing","finite","firm","first-aid","first-class","first-quarter","first-rate","first-time","first-year","firsthand","fiscal","fishy","fit","fitful","fitting","five-day","five-minute","five-year","fixed","flabbergasted","flabby","flagrant","flailing","flaky","flamboyant","flaming","flash","flashing","flashy","flat","flattened","flattered","flattering","flawless","fledgling","fleeing","fleeting","fleshy","flexible","flickering","flimsy","flipping","floating","floppy","floral","florid","flourishing","flowered","flowering","flowery","flowing","fluent","fluffy","fluorescent","flushed","flustered","fluted","fluttering","flying","foaming","focal","foggy","folded","folding","follow-up","following","fond","foolhardy","foolish","forbidding","forced","forceful","foregoing","foreign","foreign-policy","forensic","foreseeable","forested","forged","forgiving","forgotten","forlorn","formal","formative","formidable","formless","forthcoming","forthright","fortified","fortuitous","fortunate","forward","foster","foul","founding","four-day","four-hour","four-year","fourth-quarter","fractured","fragmentary","fragmented","fragrant","frail","framed","frank","frantic","fraternal","fraudulent","fraught","frayed","freak","freckled","free","free-lance","freezing","french","frenetic","frenzied","frequent","fresh","freshwater","fretful","friendly","frightened","frightening","frightful","frigid","fringed","frivolous","front","front-line","front-page","frontal","frosted","frosty","frozen","fruitful","fruitless","frustrated","frustrating","full","full-blown","full-fledged","full-length","full-page","full-scale","full-size","full-time","fun","functional","functioning","fund-raising","fundamental","fundamentalist","funded","funky","funny","furious","furnished","furry","furtive","fussy","futile","future","futuristic","fuzzy","galactic","gallant","galloping","galvanized","gaping","garbled","gargantuan","garish","garrulous","gaseous","gastrointestinal","gathered","gaudy","gaunt","gebling","general","generalized","generating","generative","generic","generous","genetic","genital","genteel","gentle","gentlemanly","genuine","geographic","geographical","geological","geometric","geopolitical","ghastly","ghostly","giant","gibberish","giddy","gifted","gigantic","gilded","ginger","girlish","given","glacial","glad","glamorous","glaring","glassy","glazed","gleaming","gleeful","glib","glistening","glittering","global","gloomy","glorious","glossy","gloved","glowing","glum","gnarled","goddam","goddamn","goddamned","going","gold","golden","good","good-by","good-looking","good-natured","good-sized","goodly","gorgeous","gory","governing","governmental","graceful","gracious","gradual","grainy","grammatical","grand","grandiose","graphic","grassy","grateful","gratifying","grating","gratuitous","grave","gravitational","gray","gray-haired","graying","grayish","grazing","greasy","great","greedy","green","greenish","gregarious","grey","grieving","grievous","grilled","grim","grimy","grinding","grinning","gripping","grisly","gritty","grizzled","grizzly","groggy","grotesque","ground","ground-floor","growing","grown-up","grubby","grudging","grueling","gruesome","gruff","guaranteed","guarded","gubernatorial","guided","guiding","gullible","guttural","habitual","haggard","hairless","hairy","half-empty","halfway","hallowed","halting","hand-held","hand-to-hand","handicapped","handmade","handsome","handwritten","handy","hanging","haphazard","hapless","happy","hard","hard-boiled","hard-core","hard-line","hard-nosed","hard-pressed","hard-working","hardened","hardworking","hardy","harmless","harmonious","harried","harrowing","harsh","hashish","hasty","hated","hateful","haughty","haunted","haunting","hawkish","hazardous","hazel","hazy","head","headlong","heady","healing","healthful","healthy","heart-shaped","heartbreaking","heartening","heartfelt","heartless","hearty","heated","heathen","heavenly","heavy","heavy-duty","hectic","heedless","hefty","heightened","helmeted","helpful","hereditary","heretical","heroic","hesitant","heterogeneous","hidden","hierarchical","high","high-ceilinged","high-fiber","high-heeled","high-level","high-pitched","high-powered","high-pressure","high-priced","high-quality","high-ranking","high-rise","high-risk","high-school","high-speed","high-tech","high-technology","hilarious","hilly","hind","hired","historic","historical","hit-and-run","hoarse","holding","hollow","holy","homeless","homemade","homesick","honest","honorable","honorary","honored","hooded","hopeful","hopeless","horizontal","hormonal","horn-rimmed","horrendous","horrible","horrid","horrified","horse-drawn","hospitable","hot","hour-long","hourly","howling","huge","hulking","human","humane","humanistic","humanitarian","humble","humid","humiliating","humorless","humorous","hunched","hungry","hunted","hurried","hurt","hurtful","hushed","husky","hybrid","hydraulic","hydroelectric","hypnotic","hypodermic","hypothetical","hysterical","ice-cold","iced","icy","ideal","idealistic","identical","identifiable","ideological","idiosyncratic","idiotic","idle","idyllic","ignorant","ill","ill-advised","ill-fated","ill-fitting","illegitimate","illicit","illiterate","illogical","illuminated","illuminating","illusory","illustrated","illustrious","imaginable","imaginary","imaginative","imagined","immaculate","immediate","immense","imminent","immobile","immortal","immune","immutable","impartial","impassable","impassioned","impassive","impatient","impeccable","impending","impenetrable","imperative","imperceptible","imperial","imperialist","imperious","impersonal","impertinent","impervious","impetuous","implacable","implausible","implicit","implied","important","imported","imposing","impossible","impoverished","impractical","imprecise","impressed","impressive","imprisoned","improbable","impromptu","improper","improved","improving","improvised","impulsive","impure","in-depth","in-house","inaccessible","inactive","inane","inanimate","inarticulate","inaudible","incalculable","incandescent","incapable","incendiary","incessant","incidental","incipient","incisive","inclined","inclusive","incoherent","income-tax","incoming","incomparable","incompatible","incompetent","incomplete","incomprehensible","inconceivable","inconclusive","incongruous","inconsequential","inconsistent","inconspicuous","incorrect","increased","increasing","incredible","incredulous","incremental","incriminating","incumbent","incurable","indebted","indefatigable","indefinite","indelible","independent","indestructible","indeterminate","indicative","indifferent","indigenous","indigent","indignant","indirect","indiscriminate","indispensable","indistinct","indistinguishable","individual","individualistic","indomitable","indoor","indulgent","industrial","industrialized","industrious","ineffable","ineffective","ineffectual","inept","inert","inescapable","inevitable","inexhaustible","inexorable","inexpensive","inexperienced","inexplicable","infallible","infamous","infantile","infatuated","infected","infectious","infernal","infinite","infirm","inflamed","inflammatory","inflated","inflationary","inflexible","influential","informal","informative","informed","infrared","infrequent","ingenious","ingratiating","inherent","inherited","inhospitable","inimical","initial","injured","inlaid","inland","innate","inner","inner-city","innermost","innocent","innocuous","innovative","innumerable","inordinate","inorganic","inquisitive","insane","inscrutable","insensitive","inside","insignificant","insistent","insoluble","inspirational","inspired","inspiring","instant","instantaneous","instinctive","institutional","institutionalized","instructional","instructive","instrumental","insufferable","insulated","insurgent","insurmountable","intact","intangible","integral","integrated","intellectual","intelligent","intelligible","intended","intense","intensified","intensive","intent","intentional","inter","interchangeable","intercontinental","interdependent","interested","interesting","interim","interior","interlocking","intermediate","intermediate-range","interminable","intermittent","internal","international","interpersonal","interrelated","interstate","interstellar","intervening","intimidating","intolerable","intolerant","intractable","intransigent","intravenous","intrepid","intricate","intriguing","intrinsic","introductory","intrusive","intuitive","invading","invalid","invaluable","inventive","inverted","investigative","investing","invigorating","invincible","invisible","inviting","involuntary","involved","invulnerable","inward","irate","iridescent","ironic","irrational","irregular","irrelevant","irreparable","irreplaceable","irrepressible","irresistible","irresponsible","irreverent","irreversible","irrevocable","irritable","irritated","irritating","isolated","issuing","itinerant","jaded","jagged","jaunty","jerky","jeweled","jittery","joint","jolly","journalistic","jovial","joyful","joyous","jubilant","judicial","judicious","juicy","jumbo","jumping","jumpy","junior","just","justifiable","justified","keen","khaki","kind","kindly","kindred","kinetic","kinky","knitted","knotted","knowing","knowledgeable","known","kosher","labored","laborious","laconic","lacy","lame","land-based","landed","landless","languid","lanky","large","large-scale","lascivious","last-minute","lasting","late","late-night","latent","lateral","latter-day","laughable","laughing","lavish","law-abiding","law-enforcement","lawful","lawless","lax","lay","lazy","leaded","leaden","leading","leafless","leafy","leaky","lean","learned","leathery","leery","left","left-hand","left-handed","left-wing","leftover","legal","legendary","legislative","legitimate","leisurely","lengthy","lenient","lesser","lethal","level","leveraged","lexical","liable","liberal","liberated","liberating","licensed","life-size","lifeless","lifelong","light","lighted","lightweight","likable","like","likely","limited","limiting","limitless","limp","linear","lined","lingering","linguistic","linked","liquid","listed","listening","listless","literal","literary","literate","lithe","little","little-known","liturgical","live","lively","livid","living","living-room","loaded","loathsome","local","locked","lofty","logical","logistical","lone","lonely","lonesome","long","long-awaited","long-distance","long-haired","long-legged","long-lost","long-range","long-running","long-standing","long-term","long-time","longstanding","longterm","longtime","looking","looming","loose","lopsided","lordly","losing","loud","lousy","lovable","loved","lovely","loving","low","low-cost","low-income","low-key","low-level","lower-class","lowered","lowly","loyal","lucid","lucky","lucrative","ludicrous","lukewarm","lumbering","luminous","lunar","lunatic","lurid","lurking","luscious","lush","luxuriant","luxurious","luxury","lyric","lyrical","macabre","machine-gun","macho","mad","magic","magical","magnetic","magnificent","maiden","maimed","main","mainstream","majestic","major","makeshift","malevolent","malignant","mammoth","man-made","manageable","managerial","managing","mandatory","maniacal","manic","manicured","manifest","manifold","manipulative","manly","manned","manual","manufactured","marching","marginal","marine","maritime","marked","marketable","maroon","married","marshy","martial","marvellous","marvelous","masculine","mashed","masked","mass","mass-produced","massed","massive","masterful","masterly","matched","matching","material","materialistic","maternal","mathematical","mating","matter-of-fact","mature","maudlin","mauve","maximum","mayoral","meager","meaningful","meaningless","measurable","measured","measuring","meaty","mechanical","mechanized","median","medical","medicinal","medieval","mediocre","meditative","medium","medium-size","medium-sized","meek","melancholy","mellow","melodic","melodramatic","melted","memorable","menacing","menial","mental","mercantile","merciful","merciless","mercurial","mere","merry","messy","metabolic","metallic","metaphoric","metaphorical","metaphysical","methodical","methodological","meticulous","metric","metropolitan","microscopic","middle","middle-aged","middle-class","middle-income","midwestern","mighty","migratory","mild","mild-mannered","militant","military","military-industrial","milky","million-dollar","mindful","mindless","mingled","miniature","minimal","minimum","ministerial","mint","minuscule","minute","miraculous","mirrored","miscellaneous","mischievous","misguided","misleading","misplaced","missed","misshapen","missing","mistaken","misty","mixed","mobile","mock","mocking","moderate","modern","modern-day","modernist","modest","modified","moist","molecular","molten","momentary","momentous","monastic","monetary","monogrammed","monolithic","monotonous","monstrous","monthly","monumental","moody","moonlit","moot","moral","morbid","morose","mortal","mossy","motionless","motivated","motley","mottled","mountainous","mounted","mounting","mournful","movable","moving","muddled","muddy","muffled","multicolored","multilateral","multinational","multiple","mundane","municipal","murdered","murderous","murky","muscular","mushy","musical","musty","mute","muted","mutilated","mutual","mysterious","mystic","mystical","mystified","mythic","mythical","mythological","nagging","naive","named","nameless","narrative","narrow","nasal","national","nationalist","nationalistic","nationalized","nationwide","native","natural","naturalistic","nauseous","nautical","naval","near","nearby","neat","nebulous","necessary","needful","needless","needy","negative","negligent","negligible","negotiable","negotiated","neighboring","nervous","neural","neurological","neurotic","neutral","never-ending","new","new-found","newborn","newfound","newsworthy","next-door","nice","nightly","nightmarish","nimble","nineteenth-century","no-fault","no-nonsense","noble","nocturnal","noisy","nomadic","nominal","non-communist","nonaligned","nondescript","nonexistent","nonpartisan","nonpolitical","nonprofit","nonstop","normal","normative","northeastern","northern","northwestern","nostalgic","notable","noted","noteworthy","noticeable","notorious","novel","noxious","nuclear","numb","numbered","numerical","numerous","nursing","nutritional","nutritious","nuts","nutty","obedient","obese","objectionable","objective","obligatory","obliging","oblique","oblivious","obnoxious","obscure","observable","observant","observed","obsessive","obsolete","obstinate","obvious","occasional","occupational","occupied","octagonal","odd","odious","off","off-duty","offbeat","offending","offhand","official","offshore","oil-producing","oil-rich","oily","old","old-fashioned","old-line","old-time","olive","ominous","omnipotent","omnipresent","oncoming","one-day","one-man","one-party","one-room","one-sided","one-story","one-time","one-way","one-year","onerous","onetime","ongoing","only","onstage","opaque","open","open-air","open-ended","opened","operatic","operational","operative","opposing","opposite","oppressed","optical","optimal","optimistic","optimum","optional","opulent","orange","orbital","orchestral","ordered","orderly","ordinary","organic","organizational","organized","organizing","oriental","original","ornamental","ornate","orphaned","orthodox","orthopedic","ostensible","ostentatious","other","out-of-town","outdated","outdoor","outer","outgoing","outlandish","outlawed","outlying","outmoded","outraged","outrageous","outright","outside","outspoken","outstanding","outstretched","outward","oval","over-all","over-the-counter","overall","overcast","overcome","overcrowded","overdue","overgrown","overhanging","overhead","overheated","overjoyed","overlapping","overnight","overpowering","overriding","overseas","oversized","overstuffed","overt","overturned","overweight","overwhelming","overworked","packaged","packed","padded","paid","pained","painful","painless","painstaking","painted","palatable","palatial","pale","pallid","palpable","paltry","panicky","papal","paradoxical","parallel","paralyzed","paramilitary","paramount","paranoid","parasitic","parched","parental","parked","parliamentary","parochial","part-time","partial","participating","participatory","particular","partisan","passable","passing","passionate","passive","past","pastel","pastoral","paternal","patient","patriarchal","patriotic","patterned","paved","payable","paying","peace-keeping","peaceable","peaceful","pearly","peculiar","pedagogical","penal","pending","penetrating","penniless","pensive","pent-up","perceived","perceptible","perceptive","perceptual","peremptory","perennial","perfect","perfumed","perfunctory","periodic","peripheral","permanent","permissible","permissive","pernicious","perpetual","perplexed","perplexing","persistent","personal","persuasive","pert","pertinent","pervasive","pessimistic","petite","petrified","petty","petulant","phantom","pharmaceutical","phenomenal","philosophic","philosophical","phonetic","phony","photographic","physical","physiological","pictorial","picturesque","piercing","pinched","pink","pinkish","pioneering","pious","pissed","pitched","pitiful","pitiless","pivotal","placid","plain","plaintive","planetary","planned","planted","plausible","playful","playing","pleasant","pleased","pleasing","pleasurable","pleated","plentiful","pliable","plump","plush","poetic","poignant","pointed","pointless","poisonous","polar","polished","polite","political","polluted","pompous","ponderous","poorly","popular","populist","populous","porous","portable","portentous","portly","posh","positive","possible","post-world","postal","postwar","potent","potential","potted","pouring","powdered","powerful","powerless","practicable","practical","practiced","practicing","pragmatic","precarious","preceding","precious","precipitous","precise","precocious","predatory","predictable","predicted","predominant","preferable","preferential","preferred","prehistoric","prejudiced","preliminary","premier","premium","prenatal","preoccupied","prep","preparatory","prepared","preposterous","prescribed","present","present-day","presentable","preserving","presidential","presiding","pressing","prestigious","presumed","presumptuous","pretentious","pretrial","pretty","prevailing","prevalent","preventive","previous","prewar","priceless","prickly","priestly","prim","primal","primary","prime","primeval","primitive","primordial","princely","principal","printed","prior","pristine","private","privileged","privy","prized","pro","probable","probing","procedural","processed","prodigious","producing","productive","profane","professional","proficient","profitable","profound","progressive","projected","projecting","projective","proletarian","prolific","prolonged","prominent","promiscuous","promised","promising","promotional","prompt","prone","pronounced","proper","prophetic","proportional","proportionate","proposed","proprietary","prosaic","prospective","prosperous","prostrate","protected","protectionist","protective","protracted","protruding","proud","proven","proverbial","provincial","provisional","provocative","prudent","psychedelic","psychic","psychological","pubic","public","public-relations","publicized","published","pudgy","puffing","puffy","pulmonary","pungent","punishable","punishing","punitive","pure","puritanical","purple","purplish","purported","purposeful","pushy","putative","puzzled","puzzling","quaint","qualified","qualifying","qualitative","quantitative","quarterly","queasy","queer","questioning","quick","quiet","quilted","quintessential","quirky","quivering","quixotic","quizzical","rabid","racial","racing","radiant","radical","radioactive","ragged","raging","rainy","raised","rambling","rampant","ramshackle","rancid","random","rapacious","rapid","rapt","rare","rash","rasping","rational","raucous","ravaged","ravenous","raw","reactionary","readable","ready","ready-made","real","real-estate","real-life","realistic","rear","rear-view","rearing","reasonable","reasoned","reassuring","recalcitrant","receding","received","receiving","recent","receptive","reciprocal","reckless","recognizable","recognized","recommended","recorded","recreational","rectangular","recurrent","recurring","red","red-faced","red-haired","red-hot","reddish","reduced","redundant","refined","reflected","reflective","reflex","reformed","reformist","refreshing","regal","regimental","regional","registered","regressive","regular","regulated","regulatory","reigning","related","relative","relaxed","relaxing","released","relentless","relevant","reliable","relieved","religious","reluctant","remaining","remarkable","remedial","remembered","reminiscent","remote","renewed","renowned","rented","repeated","repeating","repetitious","repetitive","replete","reported","reprehensible","representative","repressed","repressive","reproductive","republican","repugnant","reputable","reputed","required","requisite","resentful","reserve","reserved","resident","residential","residual","resigned","resilient","resistant","resolute","resonant","resounding","resourceful","respectable","respected","respectful","respective","respiratory","resplendent","responsible","responsive","restful","restive","restless","restored","restoring","restrained","restraining","restricted","restrictive","resultant","resulting","retail","retaliatory","reticent","retired","retiring","retreating","retroactive","retrospective","returning","revealing","revered","reverent","reverse","revised","revived","revolting","revolutionary","revolving","rewarding","rhetorical","rheumatic","rheumatoid","rhythmic","ribbed","rich","rickety","rife","right","right-hand","right-wing","righteous","rightful","rigid","rigorous","riotous","ripe","ripped","rippling","rising","risky","ritual","rival","roaring","roast","roasted","roasting","robust","rock-and-roll","rocking","rocky","rolled","rolling","romantic","rosy","rotating","rotting","rough","round","round-trip","rounded","rousing","routine","roving","rowdy","royal","rubber","rubbery","ruddy","rudimentary","rueful","ruffled","rugged","ruined","ruinous","ruling","rumpled","run-down","runaway","running","rural","rushing","rusted","rustic","rusty","ruthless","rutted","sacred","sacrificial","sacrosanct","sad","safe","said","saintly","salaried","salient","sallow","salted","salty","salutary","sandy","sane","sanguine","sanitary","sardonic","satiric","satirical","satisfactory","satisfied","satisfying","saturated","saucy","savage","savvy","scaly","scant","scanty","scarce","scared","scarlet","scarred","scary","scathing","scattered","scenic","scented","scheduled","scholarly","scholastic","science-fiction","scientific","scorched","scornful","scrambled","scraping","scrawny","screaming","scriptural","scruffy","scrupulous","sealed","searching","searing","seasonal","seasoned","seated","secluded","second-class","second-floor","second-hand","second-rate","secondary","secondhand","secret","secretarial","secretive","sectarian","sectional","secular","secure","sedate","sedentary","seedy","seeming","segregated","seismic","select","selected","selective","self-appointed","self-assured","self-centered","self-confident","self-conscious","self-contained","self-effacing","self-evident","self-fulfilling","self-help","self-imposed","self-indulgent","self-made","self-proclaimed","self-righteous","self-satisfied","self-serving","self-styled","self-sufficient","self-supporting","selfless","semantic","semifinal","senatorial","senior","sensational","senseless","sensible","sensitive","sensory","sensuous","sentencing","sentimental","separate","separated","separatist","serene","serial","serious","settled","seven-year","seventeenth-century","severe","severed","shabby","shaded","shadowed","shadowy","shady","shaggy","shaken","shaky","shallow","shaped","shapeless","shapely","shared","sharp","sharpened","shattered","shattering","shaven","shaving","sheepish","sheer","sheltered","shifting","shimmering","shining","shiny","shocked","shocking","shoddy","short","short-lived","short-range","short-sleeved","short-term","shortsighted","shouting","showy","shredded","shrewd","shrill","shrinking","shrunken","shuddering","shut","shuttered","shy","sick","sidelong","signed","significant","silent","silken","silky","silly","silver","silver-haired","silvery","similar","simmering","simple","simplified","simplistic","simulated","simultaneous","sincere","sinewy","sinful","single","singular","sinister","sinuous","six-day","six-foot","six-month","six-year","sizable","sizzling","skeletal","skeptical","sketchy","skilled","skillful","skimpy","skinny","skittish","slack","slain","slanted","slatted","sleazy","sled","sleek","sleeping","sleepless","sleepy","sleeveless","slender","sliced","slick","sliding","slight","slim","slimy","slippery","sloping","sloppy","slow","slow-moving","sluggish","sly","small","small-scale","small-time","small-town","smart","smashed","smashing","smiling","smoked","smokeless","smoking","smoky","smoldering","smooth","smug","snap","snappy","snarling","sneaky","snow-covered","snowy","snug","so-called","soaked","soaring","sober","sobering","socalled","sociable","social","socialist","societal","socioeconomic","sociological","sodden","soft","soft-spoken","soggy","soiled","solar","sole","solemn","solicitous","solid","solitary","soluble","somber","sometime","sonic","soothing","sooty","sophisticated","sordid","sore","sorrowful","sorry","sortal","sound","soundless","sour","southeastern","southern","southwestern","sovereign","soybean","spacious","spare","sparkling","sparse","spatial","speaking","special","special-interest","specialized","specific","specified","speckled","spectacular","spectral","speculative","speechless","speeding","speedy","spellbound","spent","spherical","spicy","spiky","spilled","spinal","spindly","spinning","spiral","spirited","spiritual","spiteful","splendid","splintered","split","spoiled","spoken","spongy","sponsored","spontaneous","spooky","sporadic","sporting","sporty","spotless","spotted","spotty","sprawling","spreading","springy","spurious","square","squat","squeaky","stable","stacked","staggering","staid","stained","stained-glass","stainless","stale","stalled","stalwart","stamped","stand-up","standard","standardized","standby","starched","stark","starry","startled","startling","starved","starving","state-owned","state-run","stated","stately","statewide","static","stationary","statistical","statutory","staunch","steadfast","steady","steamed","steaming","steamy","steely","steep","stellar","step-by-step","stepped-up","stereotyped","sticking","sticky","stiff","still","stimulating","stinging","stingy","stinking","stirring","stocky","stolen","stolid","stoned","stony","stopped","stored","stormy","stout","straight","straight-backed","straightforward","strained","stranded","strange","strangled","strapping","strategic","stray","streamlined","strenuous","stressful","stricken","strict","strident","striking","stringent","stringy","striped","strong","strong-willed","structural","structured","struggling","stubby","stuck","studied","studious","stuffed","stuffy","stunned","stunning","stunted","sturdy","stylish","stylistic","stylized","suave","subatomic","subconscious","subdued","subjective","sublime","subliminal","submerged","subordinate","subsequent","subservient","subsidiary","subsidized","substandard","substantial","substantive","substitute","subterranean","subtle","suburban","subversive","succeeding","successful","successive","sudden","suffering","sufficient","suffocating","suggested","suggestive","suicidal","suitable","sullen","sultry","sumptuous","sundry","sunken","sunlit","sunny","super","superb","superficial","superfluous","superhuman","superior","supernatural","supersonic","superstitious","supervisory","supple","supplemental","supplementary","supporting","supportive","supposed","suppressed","supreme","sure","surface-to-air","surgical","surging","surly","surplus","surprised","surprising","surreal","surrounding","surviving","susceptible","suspect","suspected","suspended","suspicious","sustained","swarthy","swaying","sweating","sweeping","sweet","swell","swelling","swift","swinging","swirling","switching","swollen","sworn","symbolic","symmetrical","sympathetic","symptomatic","syndicated","synonymous","syntactic","synthetic","systematic","systemic","tacit","tacky","tactful","tactical","tailored","talented","talkative","tall","tame","tan","tangible","tangled","tanned","tantalizing","tantamount","taped","tart","tasteful","tasteless","tasty","tattered","taut","tawny","tax-exempt","tax-free","taxable","taxing","tearful","teasing","technical","technological","tedious","teeming","teen-age","teenage","telescopic","televised","telling","temperate","temporal","temporary","tempting","ten-year","tenacious","tender","tense","tentative","tenuous","tepid","terminal","terraced","terrestrial","terrible","terrific","terrifying","territorial","terrorist","terse","textured","thankful","thatched","theatrical","thematic","then","theological","theoretical","therapeutic","thermal","thermonuclear","thick","thin","third-floor","thirsty","thorny","thorough","thoughtful","thoughtless","threadbare","threatened","three-day","three-dimensional","three-hour","three-month","three-piece","three-story","three-way","three-week","three-year","thrilled","thrilling","thriving","throaty","throbbing","through","thunderous","thyroid","tidal","tidy","tight","tight-lipped","tiled","time-consuming","time-honored","timeless","timely","timid","tinkling","tinny","tinted","tiny","tional","tired","tireless","tiresome","tiring","tive","token","tolerable","tolerant","toothless","top","top-level","top-secret","topical","topless","tormented","torn","tortuous","tortured","total","touching","touchy","tough","towering","traceable","tracking","traditional","trailing","trained","trampled","tranquil","transatlantic","transcendent","transcendental","transient","transitional","transitory","translucent","transparent","trapped","traumatic","traveling","treacherous","treasured","tree-lined","trembling","tremendous","tremulous","trendy","triangular","tribal","tricky","tried","trifling","trim","triple","trite","triumphal","triumphant","trivial","tropical","troubled","troublesome","troubling","trucking","true","trusted","trusting","trustworthy","truthful","trying","tufted","tumbling","tumultuous","turbulent","turn-of-the-century","turning","turquoise","tutoring","twelve-year-old","twentieth-century","twin","twisting","two-bit","two-day","two-dimensional","two-hour","two-man","two-month","two-room","two-story","two-way","two-week","two-year","typed","typical","tyrannical","ubiquitous","ultimate","ultraviolet","umbilical","unabashed","unable","unaccountable","unaccustomed","unadorned","unaffected","unanimous","unannounced","unanswered","unanticipated","unarmed","unassuming","unattended","unauthorized","unavailable","unavoidable","unaware","unbalanced","unbearable","unbelievable","unborn","unbridled","unbroken","uncanny","uncertain","unchallenged","unchanged","unchanging","uncharacteristic","unchecked","unclean","unclear","uncomfortable","uncommon","uncomplicated","uncomprehending","uncompromising","unconcerned","unconditional","unconscionable","unconscious","unconstitutional","uncontrollable","unconventional","unconvinced","unconvincing","uncritical","uncut","undecided","undefeated","undefined","undeniable","undercover","underdeveloped","underground","underlying","understandable","underwater","undetected","undeveloped","undifferentiated","undisciplined","undisclosed","undiscovered","undisputed","undistinguished","undisturbed","undue","undulating","unearned","unearthly","uneasy","uneducated","unencumbered","unending","unequal","unequivocal","unethical","uneven","uneventful","unexpected","unexplained","unfair","unfamiliar","unfashionable","unfathomable","unfavorable","unfettered","unfinished","unfit","unfocused","unforeseen","unforgettable","unfortunate","unfounded","unfriendly","unfulfilled","ungainly","unguarded","unharmed","unheard","unhurried","unidentified","unified","uniform","uniformed","unifying","unilateral","unimaginable","unimpressed","uninformed","uninhabited","uninhibited","unintelligible","unintended","uninterested","uninteresting","uninterrupted","unionized","unique","unitary","united","universal","unjust","unjustified","unkempt","unknown","unlike","unlikely","unlimited","unlit","unmanageable","unmanned","unmarked","unmatched","unmistakable","unmoved","unmoving","unnamed","unnatural","unnoticed","unobserved","unobtrusive","unoccupied","unofficial","unopened","unorthodox","unpaid","unpainted","unparalleled","unperturbed","unpopular","unprecedented","unpredictable","unprepared","unpretentious","unproductive","unprofitable","unprotected","unpublished","unqualified","unquestioned","unreadable","unreal","unrealistic","unreasonable","unrecognizable","unrecognized","unrelated","unrelenting","unreliable","unresolved","unresponsive","unrestricted","unruffled","unruly","unsafe","unsatisfactory","unsatisfied","unsavory","unscathed","unscrupulous","unseemly","unseen","unsettled","unsettling","unskilled","unsmiling","unsold","unsolved","unsophisticated","unsound","unspecified","unspoiled","unspoken","unstable","unsteady","unsuitable","unsupported","unsure","unsuspecting","untapped","untenable","untested","unthinkable","unthinking","untidy","untimely","untold","untouchable","untouched","untoward","untrained","untreated","untroubled","untrue","unused","unusual","unwanted","unwarranted","unwary","unwashed","unwavering","unwelcome","unwieldy","unwise","unwitting","unwrapped","unwritten","unyielding","up-to-date","upbeat","upcoming","updated","uphill","upper","upper-class","upper-middle-class","uppermost","upright","uprooted","upsetting","upstate","uptight","uptown","upturned","upward","urban","urbane","urgent","usable","used","useful","useless","usual","utilitarian","utmost","utopian","utter","vacant","vague","vain","valiant","valid","valuable","valued","vanished","vanishing","vanquished","variable","varied","various","varying","vascular","vast","vaudeville","vaulted","vaunted","vegetarian","vehement","veiled","velvety","venerable","venereal","venomous","verbal","verifiable","veritable","versatile","vertical","very","vested","veteran","veterinary","viable","vibrant","vice","vice-presidential","vicious","victorious","vigilant","vigorous","vile","vindictive","violet","viral","virile","virtual","virtuous","virulent","visible","visionary","visiting","visual","vital","vivacious","vivid","vocal","vocational","volatile","volcanic","voluble","voluminous","voluntary","voracious","vulnerable","wage-price","waiting","walled","wan","wandering","waning","wanted","wanting","wanton","warlike","warm","warped","warring","wary","washed","wasted","wasteful","watchful","waterproof","watery","waving","wavy","waxed","wayward","weakening","wealthy","weary","weathered","wee","weekly","weeping","weightless","weighty","weird","welcome","welcoming","well","well-defined","well-dressed","well-educated","well-established","well-heeled","well-intentioned","well-known","well-meaning","well-organized","well-placed","well-publicized","well-to-do","well-trained","well-worn","western","whimsical","whipped","whirling","whispered","white","white-collar","white-haired","whitewashed","whitish","whole","wholesale","wholesome","wicked","wide","wide-eyed","wide-open","wide-ranging","widening","widespread","widowed","wild","wild-eyed","willful","willing","wily","winding","windy","winged","winning","winsome","wintry","wiry","wise","wishful","wispy","wistful","withered","withering","withholding","witty","wobbly","wonderful","wondrous","wont","wooded","wooden","woody","woolen","woolly","wordless","workable","working","working-class","world-class","world-wide","worldly","worldwide","worn","worn-out","worrisome","worrying","worsening","worthless","worthwhile","worthy","wounded","woven","wrecked","wretched","wrinkled","written","wrought","wrought-iron","wry","yawning","year-end","year-old","year-round","yearly","yellow","yellowed","yellowing","yellowish","yielding","young","youthful","zealous"]),_y}var Xy={},qV;function VKA(){return qV||(qV=1,Object.defineProperty(Xy,"__esModule",{value:!0}),Xy.default=["abatement","abbey","abbot","abbreviation","abdication","abdomen","abductor","ability","abode","abolition","abolitionist","about-face","abrasion","absolutism","absolutist","absorber","absorption","abstention","abstract","abstraction","absurdist","absurdity","abundance","abutment","abyss","acacia","academic","academician","academy","acceleration","accelerator","accent","acceptance","accession","accessory","acclaim","acclamation","accolade","accommodation","accompaniment","accompanist","accomplice","accomplishment","accord","accordion","account","accountant","accounting","accreditation","accretion","accumulation","accuracy","accuser","ace","acetate","achievement","acknowledgement","acolyte","acorn","acquaintance","acquaintanceship","acquisition","acquit","acquittal","acreage","acrobat","acronym","acrylic","act","action","activist","activity","actor","actuality","actualization","actuary","acuity","ad","ad-lib","adage","adaptation","adapter","adder","addition","address","adequacy","adherent","adhesive","adjective","adjournment","adjudication","adjunct","adjuster","adjustment","adjutant","administration","administrator","admiral","admiration","admirer","admission","admixture","admonition","adobe","adolescent","adornment","adulation","adult","advance","advancement","advantage","adventure","adventurer","adverb","adversity","advertisement","advertiser","advisement","adviser","advisor","advocate","aerial","aerie","aeroplane","aerosol","aesthete","affect","affection","affidavit","affiliate","affiliation","affinity","affirmation","affront","afterburner","aftermath","afterthought","agate","agency","agenda","agent","agglomeration","aggrandizement","aggregate","aggregation","agitation","agitator","agreement","agribusiness","agronomist","aide","air","air-conditioner","airfield","airfoil","airframe","airing","airlift","airline","airliner","airlock","airman","airplane","airport","airship","airstrip","airway","aisle","alarm","alarmist","albatross","album","alchemist","alcove","alder","alderman","ale","alert","algorithm","alibi","alien","alignment","alkali","allegiance","allegory","alleviation","alley","alleyway","alliance","alligator","alliteration","allocation","allotment","allowance","alloy","allure","allusion","ally","almanac","almond","alpha","alphabet","also-ran","altar","altarpiece","alteration","altercation","alternation","alternative","altitude","alto","ama","amalgam","amalgamation","amateur","ambassador","ambassadorship","amber","ambiguity","ambition","ambivalence","ambulance","amelioration","amendment","amenity","amethyst","amity","ammunition","amnesty","amoeba","amount","amour","amphetamine","amphitheater","amphitheatre","amplifier","amplitude","ampule","amputee","amulet","amusement","anachronism","analgesic","analog","analogue","analogy","analysis","analyst","anarchist","anatomist","anatomy","ance","ancestor","ancestry","anchor","anchorage","anchorman","anchovy","ancient","android","anecdote","anemia","anesthesiologist","anesthetic","anesthetist","aneurysm","angel","angiogram","angle","angler","angora","animal","animation","ankle","annex","annexation","anniversary","announcement","announcer","annoyance","annual","annuity","annulment","anode","anonymity","answer","ant","antagonist","antechamber","antelope","antenna","anteroom","anthem","anthill","anthology","anthropoid","anthropologist","antibiotic","antibody","anticipation","anticommunist","antidote","antigen","antihero","antiquarian","antique","antiquity","antithesis","antler","anvil","aorta","apartment","ape","aperture","apex","aphasia","aphorism","aphrodisiac","apologia","apostle","apothecary","apparition","appeal","appearance","appellation","appendage","appendectomy","appendix","appetite","appetizer","apple","appliance","applicant","application","appointee","appointment","apportionment","appraisal","appraiser","appreciation","apprehension","apprentice","apprenticeship","approach","appropriation","approval","approximation","apricot","apron","aptitude","aquarium","aqueduct","arbiter","arbitration","arbitrator","arbor","arcade","arch","archaeologist","archangel","archbishop","archdiocese","archeologist","archer","archetype","archipelago","architect","archive","archivist","archway","ardor","arena","argument","argyle","aria","aristocracy","aristocrat","arithmetic","ark","arm","armada","armadillo","armament","armature","armband","armchair","armful","armload","armoire","armor","armory","army","aroma","arraignment","arrangement","arranger","array","arrival","arrow","arrowhead","arse","arsenal","arson","arsonist","art","artery","artichoke","article","articulation","artifact","artifice","artificiality","artisan","artist","artiste","artwork","ascendant","ascension","ascent","ascot","ash","ashtray","asking","aspect","aspen","aspirant","aspiration","assailant","assay","assemblage","assembly","assemblyman","assent","assertion","assessment","assessor","asset","assignation","assignment","assimilation","assist","assistant","associate","association","assortment","assumption","assurance","asterisk","asteroid","astonishment","astrologer","astronaut","astronomer","astrophysicist","asylum","asymmetry","atelier","atheist","athlete","ation","atmosphere","atoll","atom","atrium","attachment","attainment","attempt","attendant","attention","attic","attitude","attorney","attraction","attribute","attribution","attrition","auction","auctioneer","audience","audit","audition","auditor","auditorium","auger","augury","aura","aureole","austerity","auteur","author","authority","authorization","autobiography","autocracy","autocrat","autograph","automaker","automatic","automaton","automobile","autopsy","auxiliary","availability","avant-garde","avatar","avenger","avenue","aviary","aviator","avocation","avowal","awakening","award","awareness","awl","awning","ax","axe","axiom","axis","axle","ayatollah","azure","ba","babble","baby-sitter","babysitter","bachelor","back-up","backache","backboard","backbone","backdoor","backdrop","backer","backfield","background","backlog","backpack","backroom","backseat","backside","backstop","backup","backwash","backwater","backyard","bacon","bacterium","badge","badger","bag","bagel","baggage","bagpipe","bail","bailiff","bailiwick","baiting","baker","bakery","baking","balance","balcony","bale","ball","ballad","ballast","ballcarrier","ballerina","ballet","ballgame","balloon","ballot","ballpark","ballplayer","ballpoint","ballroom","balm","balustrade","bamboo","ban","banality","banana","band","bandage","bandana","bandanna","banding","bandit","bandleader","bandstand","bang","banister","bank","bankbook","banker","bankroll","bankruptcy","banner","banning","bannister","banquet","banquette","banshee","bantam","bantamweight","baptism","bar","barb","barbecue","barbell","barber","barbershop","bard","bargain","bargaining","barge","baritone","bark","barkeep","barker","barmaid","barman","barn","barnyard","barometer","baron","baroness","baronet","barony","barracuda","barrage","barrel","barrette","barricade","barrier","barrister","barroom","barrow","barstool","bartender","barter","bas-relief","basalt","baseball","baseboard","baseline","baseman","basement","bash","basilica","basilisk","basin","basis","basket","basketball","bassinet","bassist","bastion","bat","batch","bath","bathhouse","bathrobe","bathroom","bathtub","battalion","battering","battery","battle","battlefield","battlefront","battleground","battlement","battleship","bauble","bayonet","bazaar","beach","beachhead","beacon","bead","beagle","beak","beaker","beam","beamer","bean","bear","beard","bearer","bearing","bearskin","beastie","beater","beating","beau","beautician","beauty","beaver","beck","bed","bedchamber","bedding","bedpan","bedpost","bedroll","bedroom","bedsheet","bedside","bedspread","bedstead","bee","beech","beef","beefsteak","beehive","beep","beeper","beet","beetle","begat","beginner","beginning","behavior","behaviorist","behaviour","behemoth","behind","beholder","being","belch","belfry","belief","believer","bell","belle","bellhop","bellow","bellowing","belly","bellyache","beloved","belt","bench","benchmark","bender","bending","benediction","benefactor","beneficiary","benefit","bequest","ber","bereavement","beret","berry","berserker","berth","best-seller","bestseller","beta","betrothal","better","betterment","bettor","bevel","beverage","bevy","bib","bicep","bickering","bicycle","bid","bidder","bidet","biennial","bier","biggie","bike","biker","bilge","bility","bill","billboard","billiard","billing","billionaire","billow","billy","bin","binary","bind","binder","binding","binge","bio","biochemist","biographer","biography","biologist","biology","biopsy","biplane","birch","bird","birdbath","birdcage","birder","birdie","birdsong","birth","birthday","birthmark","birthplace","birthrate","birthright","biscuit","bishop","bit","bivouac","black","blackberry","blackbird","blackboard","blackguard","blackjack","blacklist","blackness","blackout","blacksmith","bladder","blade","blanc","blank","blanket","blare","blast","blaster","blastocyst","blaze","blazer","ble","bleach","bleacher","bleat","blemish","blend","blender","blessing","blimp","blind","blink","blinker","blinking","blip","blister","blizzard","bloak","blob","block","blockade","blockage","blockbuster","blocker","blockhouse","bloke","blond","blonde","blood","bloodhound","bloodletting","bloodline","bloodstream","bloom","blooper","blossom","blot","blotch","blotter","blow-up","blower","blowgun","blowing","blowout","blowpipe","blowtorch","blowup","blubber","bludgeon","blue","blueberry","blueprint","bluff","blur","blurb","blush","blusher","bo","boa","boar","board","boarder","boarding","boardinghouse","boardroom","boardwalk","boast","boasting","boat","boater","boathouse","boatload","boatman","boatyard","bobby","bobcat","bodice","body","bodyguard","bog","bogey","boiler","bolster","bolt","bomb","bombard","bombardment","bomber","bombing","bombshell","bon","bonanza","bond","bonding","bondsman","bone","bonfire","bonnet","book","bookcase","bookie","booking","bookkeeper","booklet","bookmaker","bookseller","bookshelf","bookshop","bookstore","boom","booming","boomlet","boon","boondoggle","boor","boost","booster","boot","booth","bootlegger","bootstrap","booty","booze","border","borderline","bore","borough","borrower","borrowing","bosom","boss","botanist","bottle","bottleneck","bottler","bottling","bottom","bottomland","boudoir","bougainvillea","bough","bouillabaisse","boulder","boulevard","bounce","bouncer","bound","boundary","bounty","bouquet","bourbon","bourgeoisie","bout","boutique","bow","bowel","bowhead","bowl","bowler","bowsprit","bowstring","box","boxcar","boxer","boxwood","brace","bracelet","bracket","braggart","braid","brain","brainstorm","brake","brakeman","bramble","branch","brand","brandy","brass","brassiere","brat","brave","bravery","brawl","brawler","brawling","brazier","breach","breadth","breadwinner","break","break-up","breakaway","breakdown","breaker","breakfast","breakfront","breakin","breaking","breakout","breakthrough","breakup","breakwater","breath","breather","breathing","breech","breed","breeder","breeding","breeze","brew","brewer","brewery","briar","bribe","brick","bricklayer","brickwork","bride","bridegroom","bridge","bridgehead","bridle","brief","briefcase","briefing","brig","brigade","brigadier","brigand","brightness","brilliance","brim","brioche","brisket","bristle","broad","broadcast","broadcaster","broadcasting","broadcloth","broadsheet","broadside","broadsword","brocade","brochure","brogue","broil","broiler","broker","brokerage","bromide","bronc","bronze","brooch","brood","brook","broom","broomstick","broth","brouhaha","brown","brownstone","bruise","brunch","brunette","brush","brushfire","brushing","brute","bubble","buccaneer","buckboard","bucket","bucketful","buckle","buckskin","bud","buddy","budget","buff","buffalo","buffer","buffet","buffoon","bug","bugger","bugging","buggy","bugle","build-up","builder","building","buildup","bulb","bulge","bulkhead","bull","bulldog","bulldozer","bullet","bulletin","bullfight","bullfighter","bullfrog","bullhorn","bullock","bully","bulwark","bum","bumblebee","bummer","bump","bumper","bumpkin","bun","bunch","bundle","bungalow","bunk","bunker","bunkhouse","bunny","bunt","bunting","buoy","burden","bureau","bureaucracy","bureaucrat","burger","burgher","burglar","burglary","burial","burlap","burlesque","burn","burner","burnout","burp","burrow","burst","bursting","busboy","bush","bushel","business","businessman","businesswoman","busload","bust","buster","bustle","busybody","butchery","butler","butt","butte","butterfly","butternut","buttock","button","buttonhole","buttress","buy","buyer","buying","buyout","buzzard","buzzer","by-election","by-product","bypass","byproduct","bystander","byword","cab","cabal","cabana","cabaret","cabbage","cabbie","cabby","cabdriver","cabin","cabinet","cabinetmaker","cable","caboose","cache","cachet","cackle","cacophony","cad","cadaver","caddie","caddy","cadence","cadet","cadre","caf","cafe","cafeteria","caftan","cage","cairn","cajole","cake","calabash","calculation","calculator","caldron","calendar","calf","calfskin","caliber","calibre","calico","caller","calling","calumny","calyx","cam","camcorder","camel","cameo","camera","cameraman","camisole","camp","campaign","campaigner","camper","campfire","campground","campsite","can","canal","canard","canary","cancellation","cancer","candelabra","candidacy","candidate","candle","candlestick","candy","cane","canine","canister","cannery","cannibal","cannonball","canoe","canon","canopy","cant","cantaloupe","canteen","canter","cantina","canton","cantor","canvass","canyon","cap","capability","capacity","cape","caper","capital","capitalist","capitalization","capitol","capitulation","capon","caprice","capstone","capsule","captain","caption","captive","captivity","captor","capture","car","carafe","caramel","carapace","carat","caravan","carbide","carbine","carbohydrate","carbon","carbonate","carburetor","carcass","carcinogen","card","cardboard","cardigan","cardinal","cardiologist","career","careerist","carelessness","caress","caretaker","cargo","caricature","carillon","carload","carnation","carnival","carnivore","carol","carotene","carousel","carpenter","carpet","carport","carriage","carrier","carrot","carryall","carrying","cart","cartel","carter","cartilage","carton","cartoon","cartoonist","cartridge","cartwheel","carver","carving","cascade","caseload","casement","cashier","cashmere","casing","cask","casket","cassava","casserole","cassette","cassock","cast","castaway","caste","casting","castle","castor","casualty","cat","cataclysm","catalog","catalogue","catalyst","catamaran","catapult","cataract","catch","catcher","catechism","categorization","category","caterer","caterpillar","cathedral","catheter","cathode","cathouse","cation","cattleman","catwalk","cauldron","cauliflower","causality","causation","cause","causeway","caution","cavalcade","cavalier","cavalryman","cave","caveat","caveman","cavern","cavity","ce","cease-fire","cedar","ceiling","celebration","celebrity","cell","cellar","cellblock","cellist","cellmate","cement","cemetery","censor","censure","centaur","centenary","center","centerpiece","centimeter","centre","centrifuge","centurion","cer","ceramic","cereal","cerebrum","ceremonial","ceremony","certainty","certificate","certification","certitude","cess","cession","cesspool","chador","chain","chair","chairman","chairmanship","chaise","chalet","chalice","chalk","chalkboard","challenge","challenger","chamber","chamberlain","chambermaid","chameleon","champ","champagne","champion","championship","chance","chancellery","chancellor","chancre","chandelier","change","changeling","changeover","changer","channel","chant","chanting","chap","chapel","chaperone","chaplain","chapter","char","character","characteristic","characterization","charcoal","chard","charge","charger","chariot","charioteer","charity","charlatan","charm","charmer","chart","charter","chartreuse","chase","chaser","chasm","chat","chateau","chattel","chatter","chatty","chauffeur","check","checkbook","checker","checkerboard","checklist","checkout","checkpoint","checkup","cheek","cheekbone","cheer","cheering","cheerleader","cheeseburger","cheesecake","cheetah","chef","chemical","chemise","chemist","chemistry","chenille","cheque","cheroot","cherry","cherub","chessboard","chestnut","chicanery","chick","chicken","chief","chieftain","chiffon","child","childhood","chile","chili","chill","chillun","chime","chimera","chimney","chimp","chimpanzee","chin","chine","chip","chipmunk","chiropractor","chisel","chiton","chloride","chlorophyll","chocolate","choice","choir","choirboy","choke","choker","cholera","chop","chopper","chopping","chord","chore","choreographer","chowder","chrissake","christening","chrome","chromosome","chronicle","chronicler","chronology","chrysanthemum","chuck","chuckle","chum","chump","chunk","church","churchman","churchyard","churn","chute","cider","cigar","cigaret","cigarette","cinch","cinder","cinema","cinematographer","cipher","circel","circle","circlet","circuit","circular","circulation","circumference","circumstance","cistern","citadel","citation","citizen","citizenship","citron","city","city-state","cityscape","civilian","civilisation","civility","civilization","claim","claimant","clam","clamor","clamp","clampdown","clan","clang","clank","clanking","clap","clapboard","clapper","claque","claret","clarification","clarinet","clarinetist","clarity","clash","clasp","class","classic","classicist","classification","classmate","classroom","clatter","clause","clavicle","claw","clay","claymore","clean","cleaner","cleanser","cleansing","cleanup","clearance","clearing","clearinghouse","cleat","cleaver","cleft","clemency","clergyman","cleric","clerk","clich","cliche","click","clicking","client","clientele","cliff","cliffside","climate","climax","climber","clime","clinch","clinic","clinician","clink","clip","clipboard","clipper","clipping","clique","cloak","cloakroom","clock","clod","clog","cloister","clone","close-up","closet","closeup","closing","closure","clot","cloth","clothesline","cloud","clout","clove","clover","clown","club","clubhouse","clump","cluster","clustering","clutch","co-author","co-chairman","co-conspirator","co-defendant","co-director","co-founder","co-op","co-operation","co-ordination","co-owner","co-pilot","co-star","co-worker","coach","coachman","coal","coalition","coast","coaster","coastline","coat","coating","coauthor","cob","cobbler","cobblestone","cobra","cobweb","cochairman","cockpit","cockroach","cocktail","coconut","cocoon","coda","code","codger","coding","coed","coefficient","coenzyme","coffee","coffeehouse","coffeepot","coffin","coffle","cofounder","cog","cognac","cognition","cohabitation","coherence","cohesion","cohort","coif","coiffure","coil","coin","coinage","coincidence","coke","col","cola","colander","coliseum","collaboration","collaborator","collage","collapse","collar","collarbone","collateral","colleague","collect","collection","collective","collectivist","collectivity","collector","colleen","college","collie","collier","collision","cologne","colon","colonel","colonist","colonization","colonnade","colony","color","coloration","coloring","colour","colouring","colt","column","columnist","com","coma","comb","combination","combustion","comeback","comedian","comedienne","comedy","comer","comet","comfort","comforter","comic","coming","comma","command","commandant","commander","commander-in-chief","commandment","commando","commemoration","commencement","commendation","comment","commentary","commentator","commercial","commie","commissar","commission","commissioner","commitment","committee","committeeman","commode","commodity","commodore","commonality","commoner","commonplace","commonwealth","commotion","commune","communication","communicator","communion","communique","community","commuter","companion","companionway","company","comparison","compartment","compass","compatriot","compendium","compensation","competence","competency","competition","competitor","compilation","complacency","complaint","completion","complex","complexion","complexity","compliance","complication","compliment","component","composer","composite","composition","compost","compound","comprehension","compress","compression","compressor","compromise","comptroller","compunction","computation","computer","comrade","concatenation","concealment","conceit","concentrate","concentration","concept","conception","conceptualization","concern","concert","concertina","concession","conch","concierge","conciliation","conciliator","conclave","conclusion","concoction","concourse","concubine","concurrence","concussion","condemnation","condensation","condenser","condition","conditioner","condolence","condominium","condor","conduct","conductor","conduit","cone","confection","confederate","confederation","conference","confession","confessional","confessor","confidant","confidante","configuration","confinement","confirmation","confiscation","conflagration","conflict","confluence","conformation","conformist","confrontation","confusion","conga","congestion","conglomerate","conglomeration","congregation","congress","congressman","conjecture","conjunction","conjurer","connection","connector","connexion","connoisseur","connotation","conqueror","conquest","conscience","consciousness","conscript","conscription","consent","consequence","conservation","conservationist","conservative","conservator","conservatory","consideration","consignment","consistency","consolation","console","consolidation","consonant","consort","consortium","conspiracy","conspirator","constable","constancy","constant","constellation","constituency","constituent","constitution","constraint","constriction","constrictor","construct","construction","constructionist","constructivist","consul","consulate","consultant","consultation","consumer","consumption","contact","container","contaminant","contamination","contemplation","contemporary","contempt","contender","content","contention","contentment","contest","contestant","context","continent","contingency","contingent","continuance","continuation","continuity","continuum","contour","contra","contraband","contraceptive","contract","contraction","contractor","contradiction","contraption","contrary","contrast","contravention","contribution","contributor","contrivance","control","controller","controversy","conundrum","convenience","convent","convention","conventionalist","convergence","conversation","conversationalist","converse","conversion","convert","converter","convertible","conveyance","conveyor","conviviality","convocation","convoy","convulsion","cook","cookbook","cooker","cookie","cookstove","coolant","cooler","coolie","coon","coop","cooperative","coordination","coordinator","cop","copier","copper","coproduction","copse","copter","copulation","copyright","copywriter","coral","cord","cordiality","cordon","corduroy","core","cork","corkscrew","corn","corncob","cornea","corner","cornerback","cornerstone","cornet","cornfield","cornice","cornucopia","corollary","coronation","coroner","corporal","corporation","corpse","corpsman","corpus","corral","correction","corrective","correlation","correspondence","correspondent","corridor","corsage","corsair","corset","cortex","cosmology","cosmopolitan","costume","cot","coterie","cottage","cotton","cottonwood","couch","cough","council","councilman","councilor","counsel","counsellor","counselor","count","countdown","countenance","counter","counterattack","counterfeit","counterforce","counterman","counterpart","counterpoint","counterproposal","counterrevolution","countertop","counterweight","countess","country","countryman","countryside","county","couple","couplet","coupling","coupon","courier","course","court","court-martial","courtesan","courtesy","courthouse","courtier","courtroom","courtship","courtyard","cousin","couturier","cove","coven","covenant","cover","cover-up","coverage","coverall","covering","coverlet","covey","cowbell","cowboy","cowgirl","cowhide","cowl","coyote","crab","crack","crackdown","cracker","crackle","crackling","crackpot","cradle","craft","craftsman","cramp","cranberry","crane","crank","cranny","crap","crash","crate","crater","cravat","craving","crayon","craze","creak","cream","crease","creation","creator","creature","creche","credit","creditor","creed","creek","creel","cremation","crematorium","creole","crepe","crescent","crest","crevasse","crevice","crew","crewcut","crewman","crib","crick","cricket","crier","crimp","crimson","cripple","crisis","crisp","crissake","crisscross","criterion","critic","criticism","critique","critter","croak","crochet","crock","crocodile","croissant","crone","crony","crook","crooner","crop","cropland","cropper","cropping","cross","cross-examination","cross-section","crossbar","crossbow","crossfire","crossing","crossover","crossword","crotch","croupier","crow","crowbar","crowd","crown","crucible","crucifix","crucifixion","crude","crudeness","crudity","cruise","cruiser","crumb","crumbling","crunch","crusade","crusader","crush","crusher","crust","crutch","crypt","cryptographer","crystal","crystallization","cub","cubble","cubbyhole","cube","cubicle","cubist","cuckoo","cucumber","cud","cudgel","cuff","cuisine","cul-de-sac","cultivator","culture","culvert","cummerbund","cup","cupboard","cupola","cur","curate","curator","curb","curd","cure","curfew","curio","curiosity","curmudgeon","curragh","currant","currency","current","curriculum","curry","curtailment","curtain","curtsy","curvature","curve","cushion","custard","custodian","custody","custom","customer","cut","cutaway","cutback","cuticle","cutie","cutoff","cutout","cutter","cutthroat","cutting","cy","cyanide","cyclamate","cycle","cyclist","cyclone","cylinder","cymbal","cynic","cynicism","cypress","cyst","czar","da","dab","dacha","dachshund","dagger","dairy","daisy","dalliance","dam","damage","damask","dame","damn","damnation","damp","damper","damsel","dance","dancer","dancing","dandelion","dandy","daredevil","darkroom","darky","darlin","darling","dart","dash","dashboard","database","date","davenport","daybed","daydream","daylight","dazzle","deacon","dead-end","deadbeat","deadline","deadlock","deadpan","deal","dealer","dealership","dealing","dear","dearie","debacle","debasement","debate","debater","debauchery","debility","debit","debriefing","debt","debtor","debut","debutante","decadent","decal","decanter","decency","decision","deck","declaration","declivity","decoder","decor","decoration","decorator","decree","dedication","deductible","deduction","deed","deejay","deerskin","default","defector","defence","defendant","defender","defense","defenseman","deference","deferment","deferral","defiance","deficit","defile","definition","deflation","deflection","defoliant","deformation","deformity","degree","deity","delay","delegate","delegation","deletion","deli","deliberation","delicacy","delicatessen","delight","delineation","delinquency","delinquent","deliverance","deliverer","delivery","dell","delta","deluge","demagogue","demand","demarcation","demeanor","dementia","demesne","demitasse","democracy","democrat","demographer","demolition","demon","demonstration","demonstrator","demotion","den","dence","denial","denigration","denim","denomination","denominator","denouement","density","dent","dentist","denunciation","deodorant","department","departure","dependence","dependency","dependent","depiction","depletion","deployment","deportation","deposit","deposition","depot","depravity","depth","deputation","deputy","derailment","derangement","derby","dereliction","derivation","derivative","dermatologist","derriere","dervish","descendant","descent","description","desert","deserter","desertion","design","designation","designer","desire","desk","desktop","desperado","desperation","despot","despotism","dessert","destination","destiny","detachment","detail","detective","detector","detergent","deterioration","determinant","determination","determinism","deterrent","detonation","detonator","detour","detriment","deuce","devaluation","developer","development","deviation","device","devotee","devotion","dew","dharma","diabetic","diadem","diagnosis","diagnostician","diagram","dial","dialect","dialectic","dialog","dialogue","diameter","diamond","diaper","diaphragm","diary","diatribe","dichotomy","dictation","dictator","dictatorship","dictionary","dictum","die","diesel","diet","dietician","difference","differential","differentiation","difficulty","diffuser","diffusion","dig","digestion","digger","digging","digit","dignitary","dignity","digression","dike","dilemma","dilettante","dilution","dime","dimension","diminution","diminutive","dimmer","dimple","diner","dinette","dinghy","dinner","dinosaur","dint","diocese","diorama","dioxide","dioxin","dip","diplomacy","diplomat","dipper","dipping","direction","directive","director","directorate","directorship","directory","dirge","disc","discard","discharge","disciple","disciplinarian","discipline","disclaimer","disclosure","discoloration","discomfiture","discomfort","discontent","discord","discotheque","discount","discouragement","discourse","discourtesy","discoverer","discovery","discrepancy","discrimination","discussion","disdain","disequilibrium","disgrace","disguise","dish","disharmony","dishonesty","dishonor","dishpan","dishtowel","dishwasher","disillusionment","disinfectant","disintegration","disjunction","disk","disparity","dispatch","dispatcher","dispensary","dispensation","dispenser","dispersion","displacement","display","disposal","disposition","disproportion","dispute","disquisition","disruption","dissection","dissector","dissension","dissent","dissenter","dissertation","disservice","dissident","dissipation","dissolution","dissonance","distance","distemper","distillate","distillation","distillery","distinction","distortion","distraction","distribution","distributor","distributorship","district","disturbance","dition","ditty","divan","dive","diver","divergence","diversion","diversity","divestiture","divide","dividend","divider","divination","divine","divinity","division","do-gooder","doc","dock","docket","docking","dockside","doctor","doctorate","doctrine","docudrama","document","documentary","documentation","dodge","doe","dogmatism","dogwood","dollop","dolphin","dom","domain","dome","domestic","domicile","domination","dominion","domino","donation","donkey","donor","donut","doom","door","doorbell","doorjamb","doorkeeper","doorknob","doorman","doormat","doorsill","doorstep","doorway","dope","dorm","dormer","dormitory","dosage","dose","dossier","dot","dotage","double","double-dealing","double-take","doubleheader","doubler","doublet","doubling","doubt","douche","dough","doughnut","dove","dovetail","dowager","dowel","down","downfall","downhill","downpour","downturn","dowry","doze","drab","draft","draftee","draftsman","dragon","dragonet","dragonfly","drain","drainage","draining","dramatist","dramatization","drape","drapery","draught","draw","drawback","drawbridge","drawer","drawing","drawing-room","drawl","drawstring","dread","dream","dreamer","dredge","dredging","dress","dresser","dressing","dressing-room","dressmaker","dribble","drier","drift","drill","drilling","drink","drinker","drip","dripping","drive","driver","driveway","drone","droop","drop","droplet","dropout","dropping","drove","drowning","drubbing","drudge","drudgery","drug","druggist","drugstore","druid","drum","drumbeat","drummer","drumming","drumstick","drunk","drunkard","dryad","drybone","dryer","dualism","duality","duchy","duckling","duct","duction","duel","duffel","dugout","duke","dukedom","dumbbell","dummy","dump","dumping","dumpling","dumpster","dun","dunce","dune","dung","dungeon","duo","duocorn","duplicate","duplication","duration","dust","duster","dusting","dustpan","dwarf","dweller","dwelling","dy","dye","dynamo","dynasty","dysentery","dystrophy","eagle","ear","earl","earlobe","earner","earphone","earpiece","earplug","earring","earth","earthenware","earthling","earthquake","easel","eater","eatery","eating","eavesdropper","ebb","eccentricity","echelon","echo","eclipse","ecologist","ecology","economist","economy","ecosystem","ecstasy","edging","edict","edifice","edition","editor","editorial","education","educator","effect","efficacy","efficiency","effigy","effluent","effort","effrontery","effusion","egalitarian","egg","eggplant","eggshell","egomaniac","egotist","eighteen-wheeler","el","elaboration","elasticity","elbow","elder","elect","election","elector","electorate","electrician","electricity","electrocardiogram","electrocution","electrode","electrolyte","electron","elegance","elegy","element","elephant","elevation","elevator","elf","elimination","elite","elixir","ell","ellipse","elm","elongation","emanation","emancipation","embankment","embargo","embassy","embellishment","ember","embezzlement","embezzler","emblem","embodiment","embolden","embolism","embrace","embrasure","embroidery","emcee","emerald","emergency","emigration","emigre","eminence","emissary","emission","emotion","emperor","emphasis","empire","empiricist","emplacement","employe","employee","employer","employment","emporium","empress","emptiness","emulsion","enactment","enamel","encampment","ence","enchantment","enclave","enclosure","encore","encounter","encouragement","encroachment","encumbrance","encyclopedia","endearment","endeavor","endeavour","endgame","ending","endorsement","endowment","endurance","energy","enforcement","enforcer","engagement","engine","engineer","engraving","enhancement","enjoyment","enlargement","enlistment","enmity","enormity","enquiry","enrichment","enrollment","ensemble","ensign","ent","entanglement","enterprise","entertainer","entertainment","enthusiasm","enthusiast","enticement","entitlement","entity","entomologist","entourage","entrance","entranceway","entrant","entreaty","entree","entrepreneur","entry","entryway","enumeration","envelope","environ","environment","environmentalist","envoy","enzyme","ephor","epic","epidemic","epidemiologist","epigraph","epileptic","epilogue","epiphany","episode","epistemology","epitaph","epithet","epitome","equality","equation","equator","equerry","equinox","equity","equivalence","equivalency","equivalent","equivocation","eral","eraser","erasure","eration","ern","ernment","errand","error","eruption","escalation","escalator","escapade","escape","escapist","escarpment","esplanade","essay","essayist","esse","essence","establishment","estate","esteem","estimate","estimation","estrangement","estrogen","estuary","etching","eternity","ether","ethnicity","eulogy","euphemism","evacuation","evaluation","evangelist","evasion","event","eventuality","evergreen","eviction","evidence","evocation","evolution","ewe","exaggeration","exaltation","exam","examination","examiner","example","exasperation","excavation","excellence","exception","excerpt","excess","exchange","exchanger","excise","excision","excitement","exclamation","exclusion","excommunication","excrement","excretion","excursion","excuse","execution","executioner","executive","executor","exegesis","exemption","exercise","exertion","exhalation","exhaust","exhibit","exhibition","exhibitionist","exhibitor","exhilaration","exhortation","existence","exorcism","expanse","expansion","expatriate","expectancy","expectant","expectation","expediency","expedient","expediter","expedition","expenditure","expense","experience","experiment","experimentation","experimenter","expert","expiration","explanation","expletive","exploit","exploitation","exploration","explorer","exploring","explosion","explosive","exponent","export","exporter","exposition","exposure","expression","expressionist","expressway","expropriation","expulsion","extension","extent","exterior","extermination","exterminator","extinction","extinguisher","extortion","extract","extraction","extrapolation","extravagance","extravaganza","extreme","extremity","extrovert","exuberance","exultation","eye","eyeball","eyebrow","eyedropper","eyeglass","eyelash","eyelet","eyelid","eyepiece","eyeshade","eyesore","eyewitness","fa","fable","fabric","fabrication","facade","face","face-lift","faceplate","facet","facility","facing","facsimile","fact","faction","factor","factory","factotum","faculty","fad","faint","fairground","fairway","fairy","fairy-tale","fairyland","fairytale","faith","falcon","fallacy","fallibility","familiarity","family","fan","fanaticism","fancier","fancy","fanfare","fang","fantasy","farce","farewell","farm","farmboy","farmer","farmhouse","farmland","farmstead","farmyard","fascination","fashion","fastball","fastening","fasting","fastness","fate","fatigue","faucet","favor","favorite","favour","favourite","fawn","fax","feat","feather","feature","federation","fedora","fee","feed","feedback","feeder","feeding","feedlot","feeling","feint","felicity","fell","fella","feller","fellow","fellowship","felt","femme","fence","fencer","fender","fense","fer","ference","ferment","fern","ferret","ferry","ferryboat","ferryman","fertilizer","fervor","fester","festival","festivity","feud","fever","fiber","fibre","fibrillation","fiction","fief","fiefdom","field","fielder","fiend","fiesta","fife","fig","figger","fight","fighter","fighting","figment","figure","figurehead","figurine","figuring","filament","file","filet","filibuster","filigree","filing","filler","fillet","filling","fillip","filly","film","filmmaker","filter","fin","final","finale","finalist","finality","finance","financier","financing","finder","finding","finery","finesse","finger","fingernail","fingerprint","fingertip","finish","finisher","fink","fir","fire","firearm","fireball","firebox","firebrand","firecracker","firefight","firefighter","firehouse","fireman","fireplace","fireside","firestorm","firm","firmament","fishbowl","fisher","fisherman","fishery","fishhook","fishnet","fission","fissure","fist","fistfight","fistful","fit","fitness","fitter","fitting","fiver","fiveyear","fix","fixation","fixer","fixing","fixity","fixture","fjord","flag","flagon","flagpole","flagship","flagstone","flail","flake","flame","flamethrower","flange","flank","flannel","flap","flapper","flare","flare-up","flash","flashback","flasher","flashlight","flask","flat","flatboat","flatcar","flatland","flatness","flavor","flavour","flaw","flea","fleck","fledgling","fleece","fleet","flesh","flex","flick","flicker","flier","flight","flimsy","flinch","flint","flip","flip-flop","flippancy","flipper","flirt","flirtation","flirting","flitter","float","floater","flock","flogging","flood","flooding","floodlight","floor","floorboard","flooring","flop","flophouse","florist","flotilla","flounce","flour","flourish","flow","flower","flowering","flowerpot","flu","fluctuation","flue","fluff","fluid","fluoride","flurry","flush","flushing","flute","fluting","flutist","flutter","fly","flyer","flyleaf","flywheel","fo","foal","foam","focus","fodder","fog","foghorn","foil","foist","fold","folder","foliage","folio","folklore","foller","follicle","follow-up","follower","following","folly","font","food","football","footbridge","footfall","foothill","foothold","footing","footlocker","footman","footnote","footpath","footprint","footrest","footstep","footstool","fop","forage","foray","force","ford","forearm","foreboding","forecast","forecaster","foreclosure","forefinger","foreground","forehead","foreigner","foreleg","forelock","foreman","forepaw","forerunner","foresight","foreskin","forest","forester","foreword","forfeiture","fork","forklift","form","formalism","formality","formance","format","formation","formula","formulation","fort","fortress","fortune","fortune-teller","forum","forward","fossil","foul","foul-up","foundation","founder","foundry","fount","fountain","fox","foxhole","foyer","fraction","fracture","fragility","fragment","fragmentation","fragrance","frailty","frame","frame-up","framework","franchise","frat","fraternity","fray","freak","free-fall","freedman","freedom","freelancer","freeway","freeze","freezer","freight","freighter","frenzy","frequency","fresco","freshman","fret","friar","friction","fridge","friend","friendly","friendship","frieze","frigate","fright","frill","fringe","frisbee","frisson","frivolity","frock","frolic","frond","front","front-runner","frontage","frontier","frontiersman","frontline","frontrunner","frost","frostbite","frosting","froth","frown","fruitcake","frustration","fuchsia","fudge","fuel","fugue","fulcrum","fulfillment","fulfilment","fullback","fumble","fumbling","function","functionalist","functionary","functioning","fund","fund-raiser","fundamentalist","funeral","fungus","funk","funnel","fur","furcot","furlough","furnace","furnishing","furor","furrow","fuse","fuselage","fusillade","fusion","future","futurist","gabardine","gable","gadfly","gadget","gaff","gaffe","gage","gaggle","gaiety","gain","gainer","gait","gal","gala","galaxy","gall","gallantry","galleon","gallery","galley","gallop","gambit","gamble","gambler","gambling","game","gamete","gametophyte","gamma","gantry","gap","garage","garden","gardener","gardenia","gargoyle","garland","garlic","garment","garner","garnet","garret","garrison","garter","gash","gasket","gaslight","gasoline","gasp","gate","gatehouse","gatekeeper","gateway","gathering","gation","gauge","gauntlet","gauze","gavel","gaze","gazelle","gear","gearbox","gebling","geezer","geisha","gel","gelatin","gelding","gem","gen","gence","gender","gene","genealogy","general","generalist","generality","generalization","generation","generator","generosity","geneticist","genie","genius","genre","gent","gentleman","gentlewoman","genus","geographer","geography","geologist","geometry","geosector","ger","germ","gestation","gesture","getaway","getup","geyser","ghetto","ghost","ghoul","giant","giantess","gift","gig","giggle","gill","gilt","gimmick","gin","gingham","giraffe","girder","girdle","girth","gist","giveaway","giver","giving","gizzard","glacier","glade","gladiator","glamour","glance","gland","glare","glass","glassful","glassware","glaze","gleam","glen","glide","glider","gliding","glimmer","glimmering","glimpse","glint","glitch","glitter","glob","globe","gloom","glory","gloss","glove","glow","glower","glue","glutton","glycogen","gnat","gnawing","gnome","goal","goalie","goaltender","goat","goatee","goatskin","goblet","goblin","going","goiter","gold","golem","golfer","gondola","goner","gong","good","good-bye","good-night","goodbye","goodie","goodnight","goof","goon","goose","gopher","gore","gorge","gorilla","gospel","gossip","gouge","gourd","gourmet","gout","governess","government","governor","governorship","gown","grab","grabber","grace","grad","grade","grader","gradient","grading","graduate","graduation","graft","grail","grailstone","grain","grammar","gramophone","granary","grandeur","grandmaster","grandstand","grange","granite","granny","grant","grape","grapevine","graph","grass","grasshopper","grassland","grate","gratification","gratuity","grave","gravestone","graveyard","gravity","gravy","gray","grazer","grease","green","greenback","greengrocer","greenhorn","greenhouse","greeter","greeting","grenade","grendel","greyhound","grid","gridiron","grievance","grill","grille","grimace","grin","grind","grinder","grinding","grindstone","grip","gripe","grit","grizzly","groan","groaning","grocer","grocery","groom","groove","groping","grotesque","grotto","ground","groundcar","grounder","grounding","groundswell","group","grouper","groupie","grouping","grove","grower","growl","grown-up","grownup","growth","grub","grudge","gruel","grunt","grunting","guarantee","guarantor","guard","guardhouse","guardian","guardianship","guardrail","guardsman","guerrilla","guess","guessing","guest","guesthouse","guffaw","guide","guidebook","guideline","guild","guillotine","guilt","guinea","guise","guitar","guitarist","gulch","gulf","gull","gullet","gully","gum","gun","gunboat","gunfighter","gunman","gunner","gunnysack","gunshot","gunsight","gunwale","gurdwara","gurgle","gurney","gush","gust","gut","gutter","guy","gym","gymnast","gypsy","habit","habitat","habitation","hacienda","hack","hacker","hacking","hacksaw","hag","hail","hailstorm","hair","hairbrush","haircut","hairdresser","hairline","hairpiece","hairpin","hairstyle","half-circle","half-life","halfback","halftime","hall","hallmark","halloo","hallway","halo","halter","ham","hamadryad","hamburger","hamlet","hammer","hammering","hammock","hamper","hamster","hamstring","han","hand","handbag","handball","handbook","handcuff","handful","handgun","handhold","handicap","handicraft","handkerchief","handle","handlebar","handler","handmaiden","handout","handrail","handshake","handwriting","handyman","hang-up","hangar","hanger","hanging","hangman","hangout","hangover","hank","hanker","hankie","hanky","hap","happening","harangue","harbinger","harbor","harbour","hard-liner","hardback","hardness","hardtop","hardwood","hare","harlot","harm","harmonica","harmony","harness","harp","harpist","harpoon","harpooner","harpsichord","harpy","harridan","harrier","harrow","hart","harvest","harvester","has-been","hash","hassle","hassock","hat","hatbox","hatch","hatchery","hatchet","hatching","hatchway","hatter","haul","haunch","haunt","haunting","haven","hawk","hay","hayloft","haymaker","hayseed","haystack","hazard","headache","headband","headboard","headdress","heading","headland","headlight","headline","headman","headmaster","headpiece","headset","headsman","headstone","headwaiter","headway","headwrap","healer","healing","heap","hearer","hearing","hearse","heart","heartache","heartbeat","heartbreak","hearth","hearthstone","heartland","hearty","heater","heath","heathen","heather","heave","heaven","heaving","heavyweight","hedge","hedgehog","hedonist","heed","heel","heft","hegemony","heifer","height","heir","heiress","heirloom","heist","helicopter","helix","hellhole","helm","helmet","helmsman","help","helper","helping","hem","hemisphere","hemline","hemlock","hemorrhage","hen","henchman","henhouse","herald","herb","herbicide","herd","herder","herdsman","heresy","heretic","heritage","hermaphrodite","hermit","hernia","hero","heroine","herringbone","hesitancy","hesitation","hex","heyday","hiccup","hick","hickory","hideaway","hierarchy","high","highball","highboy","highland","highlander","highlight","highschool","highway","hike","hiker","hilarity","hill","hillock","hillside","hilltop","hilt","hint","hinterland","hip","hire","hiring","historian","historiography","history","hitch","hitchhiker","hitter","hive","hoard","hoarding","hoax","hobble","hobby","hock","hog","hogan","hoist","holder","holding","holdout","holdover","holdup","hole","holiday","holler","hollow","holly","hologram","holothete","holster","homage","hombre","home","homebody","homecoming","homeland","homemaker","homeowner","homer","homeroom","homestead","homesteader","hometown","homily","hone","honey","honeybee","honeycomb","honeymoon","honkie","honky-tonk","honor","honour","hood","hoodlum","hoof","hook","hoop","hoot","hootch","hooting","hop","hope","hopper","horde","horizon","hornet","horoscope","horse","horseback","horseman","horsepower","horseshoe","hose","hospice","hospital","hospitalization","host","hostel","hostess","hotel","hound","hourglass","house","houseboat","houseboy","housecoat","housedress","household","householder","housekeeper","housing","hovel","howitzer","howler","hubcap","huckleberry","huddle","hue","hug","hulk","hull","hum","humanity","humbug","humidity","humility","hummingbird","hummock","humor","humorist","humour","hump","humpback","hunch","hunchback","hunger","hunt","hunter","hurdle","hurricane","hush","husk","hussy","hustle","hustler","hut","hutch","hybrid","hydrant","hydrocarbon","hydrolysis","hyena","hype","hypnotist","hypochondriac","hypocrite","hypothesis","hysterectomy","hysteria","ice","ice-cream","iceberg","icebox","icehouse","icicle","icing","icon","iconoclast","idea","ideal","idealism","idealist","idealization","ident","identification","identity","ideologist","ideologue","ideology","idiom","idiosyncrasy","idjit","idyll","ignition","ignominy","ignorance","iguana","illumination","illusion","illustration","image","imagery","imagination","imbalance","imbroglio","imitation","immediacy","immensity","immersion","imp","impact","impairment","impala","impasse","impeachment","impediment","imperative","imperfection","imperialism","impersonation","impersonator","impertinence","impiety","implant","implantation","implement","implication","import","importation","importer","imposition","impossibility","imposter","impostor","impoundment","impresario","impression","imprint","impropriety","improvement","improvisation","impulse","in-law","inauguration","inbound","incantation","incapacity","incarceration","incarnation","incidence","incident","incinerator","incline","inclusion","incoherence","income","incompatibility","incongruity","inconsistency","inconvenience","increase","increment","incumbency","incumbent","incursion","indemnity","indentation","independence","independent","index","indication","indicator","indictment","indirection","indiscretion","individual","individualist","individuality","individuation","inducement","induction","inductivist","indulgence","industrialist","industry","ineptitude","inequality","inequity","inertia","inevitability","infamy","infantryman","infarct","infarction","infatuation","infection","inference","inferno","infestation","infield","infielder","infinity","infirmary","infirmity","inflammation","inflation","inflection","inflow","influence","informality","informant","information","informer","infraction","infrastructure","infringement","infusion","ingenue","ingenuity","ingot","ingredient","inhabitant","inhalation","inhaler","inheritance","inheritor","inhibition","inhibitor","inhumanity","iniquity","initial","initiation","initiative","initiator","injection","injunction","injury","injustice","ink","inkling","inkwell","inlay","inlet","inmate","inn","innkeeper","innocence","innocent","innovation","innovator","innuendo","inoculation","inpatient","input","inquest","inquiry","inquisition","inscription","insecurity","insemination","insensitivity","insert","insertion","inset","inside","insider","insight","insignia","insincerity","insinuation","insistence","inspection","inspector","inspiration","instability","installation","installment","instance","instep","instigation","instigator","instinct","institute","institution","instruction","instructor","instrument","instrumentality","insulator","insurer","insurgency","insurrection","intake","integration","integrator","intellect","intellectual","intellectualist","intelligence","intensification","intensity","intent","intention","interaction","interception","interceptor","interchange","intercom","interconnection","interest","interface","interference","interferon","interior","interlocutor","interloper","interlude","intermediary","intermission","intern","internationalist","internist","internship","interplay","interpretation","interpreter","interrelationship","interrogation","interruption","intersection","interval","intervention","interview","interviewee","interviewer","interweaving","intestine","intonation","intricacy","intrigue","introduction","introspection","intrusion","intuition","invalid","invariance","invective","invention","inventor","inventory","inversion","investigation","investigator","investment","investor","invisibility","invitation","invocation","invoice","involvement","iodide","iridescence","iron","ironclad","ironist","ironwork","ironworker","irony","irrationality","irregularity","irrelevance","irrelevancy","irrigation","irritant","irritation","island","isle","islet","isolation","isolationist","isotope","issue","item","itinerary","ity","ivory","ivy","jab","jabber","jacaranda","jack","jacket","jackhammer","jackknife","jackpot","jackrabbit","jade","jaguar","jailbird","jam","jamb","jangle","jar","jargon","jasmine","jaunt","javelin","jaw","jawbone","jawline","jay","jean","jector","jeep","jelly","jeopardy","jerk","jerkin","jersey","jest","jester","jet","jetliner","jetport","jetty","jewel","jeweler","jib","jig","jigsaw","jimmy","jingle","job","jobber","jock","jockey","jog","jogger","joiner","joining","joint","jolt","jot","journal","journalist","journey","journeyman","jowl","jubilation","jubilee","judge","judgement","judgeship","judging","judgment","jug","juggernaut","juggler","juice","juicer","juke","jukebox","jumbo","jumper","jumpsuit","junction","juncture","jungle","junior","juniper","junk","junket","junkie","junkyard","junta","jurisdiction","jurist","juror","jury","justice","justification","juxtaposition","kaleidoscope","kangaroo","karma","katun","kebele","keel","keep","keeper","keeping","keepsake","kelp","ken","kennel","kerchief","kernel","kettle","key","keyboard","keyhole","keynote","keystone","khaki","kick","kickback","kicker","kicking","kickoff","kid","kiddie","kidnaping","kidnapper","kidnapping","kidney","kill","killer","killing","kiln","kilt","kindergarten","kindness","king","kingdom","kingmaker","kingpin","kinship","kinsman","kiosk","kit","kitchen","kitchenette","kite","kitten","kitty","klaxon","knack","knapsack","knave","knee","kneecap","knife","knight","knighthood","knit","knock","knockdown","knocker","knocking","knockout","knoll","knot","knuckle","kook","kraken","kynd","lab","label","labor","laboratory","laborer","labour","labourer","labyrinth","lace","lackey","lacquer","lad","ladder","laddie","ladle","laggard","lagoon","lair","laird","lake","lakeshore","lamb","lament","lamentation","laminate","lamp","lamppost","lampshade","lance","lanch","land","landau","lander","landfall","landfill","landing","landmark","landmass","landowner","landscape","landslide","lane","language","languor","lantern","lanyard","lap","lapel","lapse","larceny","lard","larder","lark","laser","lash","lass","latch","latecomer","lateness","lath","lathe","lation","latitude","latrine","lattice","laugh","laughter","launch","launcher","launching","laundering","laundromat","laundry","laureate","laurel","lavender","law","lawgiver","lawmaker","lawman","lawn","lawnmower","lawsuit","lawyer","layer","laying","layman","layoff","layout","layover","layup","lead","leader","leadership","leaf","leaflet","league","leak","leakage","leap","learner","learning","lease","leash","leather","leave","leave-taking","leaving","lectern","lecture","lecturer","ledge","ledger","lee","leer","left-hander","lefty","leg","legacy","legality","legation","legend","legion","legislation","legislator","legislature","legitimation","legume","lem","lemon","lender","length","leopard","leotard","leper","lesion","lesson","letdown","lethargy","letter","letterhead","lettuce","levee","level","lever","leviathan","levity","levy","lexicon","ley","liability","liaison","liana","libation","libel","liberal","liberation","liberationist","liberator","libertarian","liberty","librarian","library","licence","license","licensee","lichen","lick","licking","lid","liege","lien","lieutenant","lieve","life-cycle","life-span","life-style","lifeboat","lifeguard","lifeline","lifer","lifespan","lifestyle","lift","lifter","lifting","ligament","light","lighter","lighthouse","lightning","lightweight","likeness","liking","lilac","lily","lima","limb","lime","limerick","limestone","limit","limitation","limousine","linchpin","linden","line-up","lineage","linebacker","lineman","linen","liner","lineup","ling","lingo","linguist","liniment","lining","link","linkage","linker","linkup","lintel","lion","lioness","lip","lipstick","liqueur","liquid","liquidation","liquor","list","listener","listing","litany","lite","liter","literature","lithograph","litigation","litter","liturgy","livelihood","liver","livery","living","living-room","lizard","loader","loading","loaf","loafer","loan","loathing","lob","lobby","lobbyist","lobe","lobotomy","lobster","lobsterman","locale","locality","location","locator","lock","lock-mechanism","locker","locket","lockout","locksmith","lockup","locomotive","locust","lode","lodge","lodger","lodging","loft","log","loggia","logic","logician","logjam","loiter","lollipop","longing","longitude","longshoreman","loo","look-alike","looker","lookout","loom","loon","loony","loophole","loot","looter","lord","lordship","lorry","lotion","lottery","loudspeaker","lounge","louse","lout","lover","loveseat","low","lowland","loyalty","lubricant","lug","lullaby","lumber","lumberjack","lumberyard","luminary","luminosity","lump","lumpectomy","lunacy","lunatic","lunch","luncheon","luncheonette","lunchroom","lung","lunge","lurch","lurcher","lure","luster","lute","luxury","lynching","lyre","lyric","lyricist","m'lord","macaw","mace","machete","machine","machinist","mackinaw","madcap","mademoiselle","madhouse","maelstrom","magazine","mage","magenta","magic","magician","magistrate","magnate","magnet","magnetism","magnification","magnificence","magnitude","magnolia","magnum","magpie","mahogany","mahout","mail","mailbox","mailing","mailman","mainframe","mainland","mainsail","mainspring","mainstay","majesty","major","majority","make","make-up","maker","makeup","making","malady","malaise","malcontent","malfunction","malignancy","mall","mallard","mallet","malpractice","malt","mammal","mammogram","mammography","mammoth","management","manager","mance","mandarin","mandate","mandolin","mane","maneuver","maneuvering","manger","mango","mangrove","manhole","manhunt","manicure","manifestation","manifesto","manifold","mannequin","manner","mannerism","mannerist","manoeuvre","manor","manse","manservant","mansion","mantel","mantelpiece","mantle","mantra","manual","manufacturer","manure","manuscript","map","maple","mapping","marathon","marble","march","marching","mare","margarine","margarita","margin","marina","marine","mariner","marionette","marker","market","marketer","marketing","marketplace","marking","marksman","markup","marlin","marmalade","marquee","marrow","marsh","marshal","marshland","marshmallow","mart","martinet","martini","martyr","martyrdom","marvel","mascot","mash","mask","mason","masque","mass","massage","masseur","mast","mastectomy","master","master-mason","mastermind","masterpiece","masterwork","masthead","mat","matador","match","matchbook","matchbox","matchmaker","matchstick","matchup","material","materialist","mathematician","matinee","mating","matrix","matron","matte","matter","mattress","maturity","mauling","mausoleum","maverick","maw","maxim","maximum","mayor","maze","mead","meadow","meal","mean","meaning","meanness","measure","measurement","meatball","mecca","mechanic","mechanism","medal","medalist","medallion","median","mediation","mediator","medic","medication","medicine","meditation","medley","meet","meeting","megaphone","melancholy","melanoma","melodrama","melody","melon","meltdown","member","membership","membrane","memento","memoir","memorandum","memorial","memory","menace","mention","mentor","menu","mercenary","merchandise","merchant","merchantman","mercy","merger","meridian","meringue","meristem","merit","mermaid","merry-go-round","mesa","mesh","meson","mesquite","mess","message","messenger","messiah","metabolism","metal","metamorphosis","metaphor","meteor","meteorite","meteoroid","meteorologist","meter","method","methodology","metier","metronome","microbe","microbiologist","microchip","microcomputer","microcosm","microfilm","microphone","microprocessor","microscope","microwave","middle","middleman","midpoint","midriff","midst","midterm","might","mignon","migraine","migrant","migration","mike","mil","mileage","miler","milestone","militant","military","militiaman","milk","milking","milkmaid","milkman","milkshake","mill","miller","millet","millimeter","millionaire","millionth","millstone","mime","mimeograph","mimic","minaret","mind","mind-set","mindstone","minefield","miner","mineral","mini","miniature","minicomputer","minim","minimalist","minimum","mining","minion","miniskirt","minister","ministration","ministry","minnow","minor","minority","minstrel","mint","minuet","miracle","mirage","mire","mirror","misadventure","misapprehension","miscalculation","miscarriage","miscellany","mischance","mischief","misdemeanor","miser","misery","misfit","misfortune","misgiving","mishap","misinterpretation","mismatch","misnomer","misrepresentation","missal","missile","mission","missive","misstatement","misstep","mist","mistake","mister","mite","miter","mitigation","mitt","mittee","mitten","mix","mix-up","mixer","mixture","mixup","moat","mob","mobile","mobilization","mobster","moccasin","mock-up","mockery","mod","model","modem","moderator","modernism","modernization","modification","modifier","modulation","module","mogul","mohole","moire","moisture","molar","mold","molding","mole","molecule","mom","moment","monarchy","monastery","monetarist","money","moneymaker","monitor","monk","monocle","monogram","monograph","monolith","monologue","monopoly","monorail","monosaccharide","monotone","monotony","monsoon","monster","monstrosity","montage","monthly","monument","moo","moon","moonlight","moonshiner","moor","mooring","moorland","mop","moral","moralist","morality","morass","moratorium","moray","morbidity","morgue","morn","moron","morsel","mortal","mortality","mortar","mortgage","mortician","mortification","mortise","mortuary","mosaic","mosque","mosquito","moss","mote","motel","motif","motion","motivation","motivator","motive","motor","motorbike","motorboat","motorcade","motorcar","motorcycle","motorist","motorman","motto","mouf","mould","mound","mount","mountain","mountaineer","mountainside","mountaintop","mounting","mousse","moustache","mouth","mouth-harp","mouthful","mouthpiece","movement","mover","movie","moviegoer","moviemaker","mower","mu","muddle","muffin","muffler","mug","mugger","mugging","mulatto","mulberry","mulch","mule","mullah","mullet","multimillionaire","multiple","multiplication","multiplier","multitude","mum","mumble","municipality","mural","murder","murderer","murderess","murmur","murmuring","muscle","muse","museum","mushroom","musical","musician","musicologist","musket","muskrat","muslin","mussel","must","mustache","mustang","muster","mutant","mutiny","mutter","muttering","mutton","muzzle","myosin","myriad","myrtle","mystery","mystic","mysticism","mystification","myth","mythology","nail","naivete","nameplate","namesake","nap","napkin","narration","narrative","narrator","nation","nation-state","nationalism","nationalist","nationality","nationalization","native","nativist","naturalist","nature","nave","navigation","navigator","navy","nay","ne'er-do-well","nebula","necessity","neck","neckerchief","necklace","necktie","nectar","needle","needlepoint","needler","negation","negative","negligee","negotiation","negotiator","neigh","neighbor","neighborhood","neighbour","neomort","neon","neophyte","nephew","nerd","nerve","nest","net","netting","nettle","network","neurologist","neurosis","neurosurgeon","neutralist","neutrality","neutron","newcomer","newel","newlywed","newness","newscast","newscaster","newsletter","newsmagazine","newsman","newspaper","newspaperman","newsreel","newsroom","newsstand","nicety","niche","nick","nickel","nickname","nightcap","nightclub","nightingale","nightshirt","nightstand","nightstick","nightwatch","nimbus","ninny","nip","nite","nitrate","nitrite","nitrogen","no","no-hitter","nobility","noble","nobleman","nod","node","nodule","noggin","noise","nomad","nomination","nominee","noncom","nonentity","nonsmoker","nonwhite","noodle","nook","noose","norm","normalcy","normality","nose","nostalgia","nostril","notary","notation","notch","note","notebook","notepad","notice","notification","notion","noun","nouveau","nouvelle","nova","novel","novelist","novella","novelty","novice","nozzle","nuance","nub","nude","nudge","nugget","nuisance","nullity","number","numeral","nun","nunnery","nurse","nursemaid","nursery","nurture","nut","nutmeg","nutrient","nutritionist","nutshell","nylon","nymph","oaf","oak","oar","oasis","oath","obeisance","obelisk","obfuscation","obituary","object","objection","objective","objectivist","objector","obligation","oblivion","oblong","oboe","obscenity","obscurity","observance","observation","observatory","observer","obsession","obsidian","obstacle","obstetrician","obstinacy","obstruction","obstructionist","occasion","occupancy","occupant","occupation","occurrence","ocean","oceanographer","ochre","octave","octogenarian","oddball","oddity","odometer","odor","odour","odyssey","oeuvre","ofa","offence","offender","offense","offensive","offer","offering","office","officeholder","officer","official","offshoot","ogre","oil","oiler","oilfield","oilman","oilskin","ointment","oldster","oligarchy","olive","ombudsman","omelet","omelette","omen","omission","one-liner","onion","onlooker","onslaught","ontology","onyx","ooze","op","opacity","opal","opener","opening","opera","operation","operative","operator","operetta","ophthalmologist","opiate","opinion","opment","opportunist","opportunity","opposite","opposition","oppression","oppressor","optimism","optimist","option","oracle","oral","orange","oration","orator","oratorio","oratory","orb","orbit","orbiter","orchard","orchestra","orchestration","orchid","ordeal","order","ordering","orderly","ordinance","ordination","ore","organ","organisation","organist","organization","organizer","orientation","orifice","origin","original","originator","ornament","ornamentation","orthodontist","orthodoxy","oscillation","oscillator","oscilloscope","ostrich","other","otter","ouster","outboard","outbreak","outburst","outcast","outcome","outcrop","outcropping","outcry","outdistance","outdoorsman","outfield","outfielder","outfit","outflow","outgrowth","outhouse","outing","outlaw","outlay","outlet","outline","outlook","outpatient","outpost","outpouring","output","outrage","outside","outsider","oval","ovary","ovation","oven","over","overall","overcoat","overdose","overdraft","overflow","overhang","overhaul","overhead","overlap","overlay","overload","overlord","overpass","override","overrun","overseer","oversight","oversimplification","overstatement","overtone","overture","overview","oviduct","ovum","owl","owner","ownership","ox","oxford","oxidation","oxide","oyster","pacemaker","pacer","pacifier","pacifist","pack","package","packer","packet","packing","pact","pad","paddle","paddock","paddy","padlock","paean","pagan","page","pageant","pagoda","paign","pail","pain","painkiller","paint","paintbrush","painter","painting","pairing","paisley","pal","palace","palate","palette","palisade","pall","palladium","pallbearer","pallet","pallor","palm","palsy","pamphlet","pan","panacea","pancake","panda","pane","panel","panelling","panhandle","panic","panoply","panorama","pansy","pant","panther","panting","pantomime","pantry","pantsuit","pap","papaya","paper","paperback","paperweight","paprika","para","parable","parachute","parade","paradigm","paradise","paradox","paraffin","parafoil","paragon","paragraph","parakeet","parallel","parallelism","parameter","paramour","paranoia","parapet","paraphrase","parasite","parasol","paratroop","paratrooper","parcel","parchment","pardner","pardon","parent","parenthesis","pariah","parish","parishioner","parity","park","parka","parkland","parkway","parley","parliament","parlor","parlour","parody","parole","paroxysm","parrot","parry","parson","partake","participant","participation","particle","particular","particularity","particulate","parting","partisan","partition","partment","partner","partnership","party","parvenu","pasha","pass","passage","passageway","passenger","passer","passer-by","passing","passion","passport","password","pasta","paste","pastel","pastiche","pastime","pastor","pastry","pasture","pasty","pat","patch","pate","patent","patentee","path","pathologist","pathology","pathway","patient","patina","patio","patrician","patriot","patriotism","patrol","patrolman","patron","patsy","patter","pattern","paunch","pauper","pause","pavement","pavilion","paw","pawl","pawn","pawnshop","paycheck","payday","payload","paymaster","payment","payoff","payout","payroll","pea","peace","peacemaker","peach","peacock","peak","peal","peanut","pear","pearl","peasant","peasantry","peat","pebble","pecan","peck","pecker","pecking","pectin","pectoral","peculiarity","pedal","pedant","peddler","pedestal","pedestrian","pediatrician","pedigree","pediment","pee","peek","peel","peeling","peep","peephole","peerage","peg","pegboard","pellet","pelt","pen","penance","pencil","pendant","pendulum","penguin","penicillin","peninsula","penitence","penitent","penitentiary","penknife","pennant","pension","pensione","pensioner","penthouse","penumbra","pepper","peppermint","pepperoni","percentage","perception","percussion","percussionist","peregrine","perennial","perfection","perfectionist","perfidy","perforation","performance","performer","perfume","perience","peril","perimeter","period","periodical","periphery","periscope","permission","permit","peroration","perpetrator","perplexity","persimmon","persona","personage","personality","personification","perspective","perspiration","persuasion","pertinence","perusal","pessimist","pest","pesticide","pestilence","pet","petal","petit","petition","petitioner","petticoat","pettiness","pew","phaeton","phalanx","phantasy","phantom","pharaoh","pharmacist","pharmacy","phase","pheasant","phenomenon","philanthropist","philanthropy","philistine","philosopher","philosophy","phobia","phone","phoneme","phonograph","phony","phosphate","phosphor","photo","photocell","photocopy","photograph","photographer","photon","phrase","phrasing","physician","physicist","physiologist","physiology","physique","pi","pianist","piazza","pic","pick","pick-up","pickax","picker","picket","picking","pickle","pickpocket","pickup","picnic","picture","pidgin","pie","piece","pier","piety","pig","pigeon","pigeonhole","piggy","piggyback","piglet","pigment","pigsty","pigtail","pile","pilgrim","pilgrimage","piling","pill","pillar","pillbox","pillow","pillowcase","pilot","pin","pinafore","pinball","pincer","pinch","pine","pineapple","ping","pinhead","pink","pinkie","pinky","pinnace","pinnacle","pinstripe","pinwheel","pioneer","pipe","pipeline","piper","piracy","pirate","pistachio","pistol","piston","pit","pitch","pitcher","pitchfork","pitchman","pittance","pituitary","pivot","pixie","pizza","placard","place","placement","placenta","placer","placing","plagiarism","plague","plaid","plain","plainclothesman","plaint","plaintiff","plait","plan","plane","planer","planet","planetoid","plank","planner","planning","plant","plantain","plantation","planter","planting","plaque","plasma","plaster","plastic","plate","plateau","platelet","platform","platitude","platoon","platter","play","playback","player","playground","playgroup","playhouse","playing","playmate","playoff","playpen","playroom","plaything","playwright","plaza","pleading","pleasantry","pleasure","plebiscite","pledge","plight","plot","plotting","plough","plow","ploy","plug","plum","plumage","plumber","plume","plunge","plural","plurality","plywood","pneumonia","pocket","pocketbook","pocketful","pod","podesta","podium","poem","poet","poetry","pogrom","poignancy","point","point-of-view","pointer","poise","poison","poisoning","polariser","polarity","polarization","polder","pole","polemic","policy","policymaker","polish","polishing","politician","polity","polka","poll","pollen","pollination","polling","pollster","pollutant","polluter","pollution","polyester","polygraph","polymer","polyp","pomegranate","pomp","pompadour","pomposity","pond","poniard","pony","ponytail","poodle","pool","poolhall","poorhouse","pop-up","popcorn","pope","poplar","poppy","popsicle","popularization","population","populist","porcelain","porch","porcupine","pore","porpoise","porridge","port","portal","portent","porter","portfolio","porthole","portico","portiere","portion","portrait","portraitist","portraiture","portrayal","posing","position","posse","possession","possessor","possibility","possum","post","post-mortem","postcard","poster","posterior","postgraduate","posting","postman","postmark","postmaster","postponement","postscript","postulate","posture","posturing","pot","potato","potency","potentate","potential","potentiality","pothole","potion","potpourri","potter","pottery","pouch","poultice","pound","pounding","pout","powder","power","powerboat","powerhouse","practicality","practice","practitioner","pragmatist","prairie","praise","pram","prance","prayer","preacher","preaching","preamble","precaution","precedent","precept","precinct","precipice","precipitate","precision","precondition","precursor","predicament","predicate","prediction","predilection","predisposition","prefab","preface","prefect","prefecture","preference","preferment","prejudice","prelate","prelude","premier","premiere","premise","premium","premonition","preoccupation","prep","preparation","preppie","prerequisite","prerogative","presbytery","prescription","presence","present","presentation","presenter","presentiment","preservation","preservative","preserve","preserver","presidency","president","press","pression","pressure","presumption","pretence","pretender","pretense","pretension","pretext","pretzel","prevalence","prevention","preview","prey","price","pricing","prick","prickle","pride","priest","priestess","priesthood","prig","prima","primary","primate","primer","primitive","principal","principality","principle","print","printer","printing","printout","priority","prise","prism","privacy","private","privation","privilege","prize","prizefighter","prizewinner","pro","proach","probability","probation","probe","problem","procedure","proceeding","process","procession","processor","proclamation","proclivity","procurement","prod","prodding","prodigality","prodigy","produce","producer","product","production","productivist","productivity","profession","professional","professor","professorship","proficiency","profile","profit","profligacy","profundity","progenitor","progeny","prognosis","program","programme","programmer","progression","progressive","prohibition","project","projectile","projection","projectionist","projector","proletariat","prologue","prolongation","promenade","prominence","promise","promontory","promoter","promotion","prompt","prompting","prong","pronghorn","pronoun","pronouncement","pronunciation","proof","prop","propellant","propeller","propensity","property","proponent","proportion","proposal","proposition","proprietor","propriety","proscription","prosecution","prosecutor","prospect","prospector","prosthesis","protagonist","protection","protector","protectorate","protege","protein","protest","protester","protocol","proton","prototype","protrusion","provenance","proverb","providence","provider","province","provincialism","provision","provocateur","provocation","prow","prowl","prowler","proximity","proxy","prude","prune","pruning","psalm","pseudonym","pseudopatient","psi","psion","psych","psyche","psychoanalyst","pub","public","publican","publication","publicist","publisher","puck","pudding","puddle","puff","puke","pullback","pulley","pullover","pulp","pulpit","pulsar","pulsation","pulse","pump","pumper","pumpkin","pun","punch","puncher","puncture","pundit","punt","punter","pupil","purchase","purchaser","puree","purge","purification","purist","puritan","purity","purple","purpose","purr","purse","purser","pursuer","pursuit","purveyance","purveyor","push","pushbutton","pushcart","pusher","pushover","put-down","putdown","puter","putt","putter","puzzle","puzzlement","pylon","pyramid","pyre","python","quack","quadrangle","quadrant","quagmire","quake","qualification","qualifier","quality","qualm","quandary","quantity","quark","quarrel","quarry","quarter","quarterback","quarterly","quartermaster","quartet","quasar","quaver","quay","queen","query","quest","question","questioner","questioning","questionnaire","queue","quiche","quickie","quicksand","quiet","quill","quilt","quince","quintet","quip","quirk","quitter","quiver","quota","quotation","quote","quotient","ra","rabbi","rabbit","raccoon","race","racehorse","racer","racetrack","racist","rack","racket","raconteur","racquet","rad","radar","radiation","radiator","radical","radicalism","radio","radioisotope","radiologist","radioman","radish","radius","raffle","raft","rafter","rag","ragtag","raid","raider","rail","railing","railroad","railway","raiment","rain","rainbow","raincoat","raindrop","rainfall","rainstorm","raise","raiser","raisin","raising","rake","rally","ram","rambling","ramp","rampart","ramrod","ranch","rancher","rancor","range","rangeland","ranger","rank","ranking","ransom","rant","rap","rapacity","rapier","rapping","rapport","rapture","rarity","rascal","rash","rashness","rasp","raspberry","ratchet","rathorn","ratification","rating","ratio","ration","rationale","rationalist","rationality","rationalization","rattle","rattler","rattlesnake","rave","raven","ravine","ray","rayon","razor","re-creation","re-election","re-enactment","re-evaluation","rea","reach","reaction","reactor","read","reader","reading","readjustment","readout","reaffirmation","realignment","realist","reality","realization","reallocation","realm","realtor","realty","ream","reanimation","reaper","reappearance","reappointment","reappraisal","rear","rearrangement","reason","reasoning","reassessment","reassignment","reassurance","rebate","rebbe","rebound","rebuff","rebuke","rebuttal","rec","recapitulation","receipt","receiver","receivership","receptacle","reception","receptionist","receptor","recess","recession","recipe","recipient","reciprocity","recital","recitation","recitative","reckoning","reclamation","recliner","recluse","recognition","recognizance","recollection","recommendation","reconciliation","reconnoiter","reconsideration","reconstruction","record","recorder","recording","recount","recourse","recovery","recreation","recrimination","recruit","recruiter","recruitment","rectangle","rector","rectory","recuperation","recurrence","redefinition","redemption","redeployment","redesign","redhead","rediscovery","redistribution","redneck","redoubt","redskin","reduction","redundancy","redwood","reed","reef","reefer","reek","reel","reentry","refectory","referee","reference","referendum","referent","referral","refill","refinement","refiner","refinery","reflection","reflector","reflex","reform","reformation","reformer","reformulation","refraction","refractor","refrain","refresher","refreshment","refrigerator","refuge","refugee","refund","refusal","refuse","refusenik","refutation","regeneration","regent","regime","regimen","regiment","region","register","registrar","registration","registry","regression","regret","regularity","regulation","regulator","regurgitation","rehabilitation","rehash","rehearsal","reign","reimbursement","reincarnation","reinforcement","reinstatement","reinterpretation","reinvestment","reissue","reiteration","reject","rejection","rejoinder","relapse","relative","relativist","relativity","relaxation","relay","release","reliance","relic","relief","religion","relish","relocation","reluctance","remainder","remake","remark","remedy","remembering","remembrance","reminder","reminiscence","remission","remnant","removal","remove","remover","remuneration","rendering","rendition","renegade","renewal","renovation","rent","rental","renter","renunciation","reopening","reorganization","rep","repair","repairman","reparation","repast","repatriation","repayment","repeat","repeater","repellent","repertoire","repertory","repetition","replacement","replay","replenishment","replica","reply","report","reporter","reporting","repose","repository","repre","representation","representative","repression","reprieve","reprimand","reprint","reprisal","reprise","reproach","reproof","reptile","republic","republican","repudiation","repulsion","repurchase","reputation","request","requiem","requirement","requisite","requisition","rerun","resale","rescue","rescuer","researcher","resemblance","resentment","reservation","reserve","reservist","reservoir","residence","residency","resident","residue","resignation","resin","resistance","resolution","resonance","resort","resource","respect","respiration","respirator","respite","respondent","response","responsibility","restatement","restaurant","restaurateur","restitution","restoration","restorer","restraint","restriction","restroom","restructuring","result","resume","retailer","retainer","retaliation","retardant","retardation","retary","retch","retelling","reticence","retina","retinue","retiree","retirement","retort","retraction","retreat","retrenchment","retrial","retriever","return","reunion","revaluation","revelation","revelry","revenge","revenue","reverberation","reverie","reversal","reverse","reversion","review","reviewer","revision","revisionist","revitalization","revival","revocation","revolt","revolution","revolver","revue","revulsion","reward","rhetoric","rhinestone","rhizome","rhododendron","rhyme","rhythm","riage","rib","ribbon","rickshaw","ricochet","riddle","ride","rider","ridge","ridgeline","ridicule","riding","riff","riffle","rifle","rifleman","rift","rig","rigging","right","right-hander","right-of-way","rightist","rigidity","rigor","rim","rime","rind","ring","ringer","ringing","ringleader","ringmaster","rink","rinse","rip","ripoff","riposte","ripple","riser","rising","rite","ritual","rival","rivalry","river","riverbank","riverbed","riverboat","rivet","rivulet","ro","roach","road","roadbed","roadblock","roadhouse","roadside","roadster","roadway","roaring","roast","robber","robbery","robe","robin","robot","rock","rocker","rocket","rod","rodent","rodeo","rogue","role","roll","rollback","rollcall","roller","rolling","romp","roof","rooftop","rook","rookery","rookie","room","roommate","roost","rooster","root","rope","rosary","rose","rosebud","rosette","roster","rotation","rote","rotor","rotunda","rouge","roughage","roughhouse","roughneck","round","roundabout","roundness","roundup","roustabout","rout","route","router","routine","routing","rover","row","rowboat","rower","royalist","royalty","rub","rubber","rubber-stamp","rubbing","rube","rubric","ruby","ruck","rucksack","rudder","rue","ruffle","rug","ruin","rule","ruler","ruling","rum","rumble","rumbling","rumination","rummy","rumor","rumour","rump","run-up","runaway","rune","rung","runner","running","runoff","runt","runway","rupture","ruse","rusher","rust","rustle","rustling","rut","rye","sabbatical","saber","sable","sabra","sabre","sac","sack","sacking","sacrament","sacrifice","sacrificer","sacrilege","saddle","saddlebag","sadist","sadness","safari","safe","safeguard","safety","saga","sage","sail","sailboat","sailer","sailing","sailor","sake","salad","salamander","salami","salary","salon","saloon","salsa","salt","salutation","salute","salvage","salvation","salve","salver","samba","samovar","sample","sampler","sampling","sanatorium","sanction","sanctuary","sanctum","sandal","sandbag","sandbar","sandbox","sander","sandstone","sandwich","sanitarium","sapling","sapper","sapphire","sarcasm","sardine","sari","sash","satchel","satellite","satin","satire","satirist","satisfaction","satrap","satyr","sauce","saucepan","saucer","sauna","sausage","savanna","savannah","savant","save","saver","saving","savior","savor","saw","sawhorse","sawmill","sax","saxophone","saxophonist","saying","scab","scabbard","scaffold","scaffolding","scale","scallop","scalp","scalpel","scam","scamp","scan","scandal","scanner","scare","scarf","scarlet","scat","scattering","scavenger","scenario","scenarist","scene","scent","scepter","schedule","schema","scheme","schemer","schism","scholar","scholarship","school","schoolhouse","schoolmarm","schoolroom","schoolteacher","schoolyard","schooner","science","scientist","scimitar","scion","scolding","scoop","scooter","scope","score","scoreboard","scorecard","scorer","scoring","scorn","scotch","scoundrel","scourge","scouring","scout","scowl","scrambler","scrap","scrapbook","scrape","scraper","scratch","scratching","scrawl","scream","screamer","screaming","scree","screech","screen","screening","screenplay","screenwriter","screw","screwball","screwdriver","scribbling","scribe","scrim","scrimmage","script","scripture","scriptwriter","scrivener","scroll","scrub","scrubber","scrubbing","scruple","scuffle","scuffling","scullery","sculptor","sculpture","scythe","sea","seabed","seafood","seagull","seal","sealer","sealskin","seam","seaman","seamstress","seance","seaplane","seaport","search","searcher","searchlight","seascape","seashell","seashore","seasoning","seat","seating","seaway","seaweed","secession","secondary","secrecy","secret","secretion","sect","section","sector","security","sedan","sedge","sediment","sedition","seed","seedbed","seeding","seedling","seedship","seeker","seer","seesaw","segment","segmentation","segregationist","seine","seismometer","seizure","selection","selector","self","self-congratulation","self-criticism","self-deception","self-delusion","self-denial","self-doubt","self-examination","self-image","self-indulgence","self-interest","self-justification","self-portrait","self-sacrifice","self-satisfaction","seller","sellout","semaphore","semblance","semester","semi","semi-circle","semicircle","semiconductor","seminar","seminarian","seminary","sen","senate","senator","sender","sending","senior","senor","sensation","sense","sensibility","sensitivity","sensor","sensuality","sentence","sentiment","sentimentalist","sentimentality","sentinel","sentry","separation","separator","sepulcher","sequel","sequence","serenade","serf","sergeant","serial","sermon","serpent","serum","servant","serve","server","service","serving","sesame","set-up","setback","settee","setter","setting","settlement","settler","settling","setup","sewer","shack","shade","shading","shadow","shaft","shake","shake-up","shakedown","shaker","shakeup","shale","sham","shaman","shame","shampoo","shank","shanty","shantytown","shape","shaping","shard","share","sharecropper","shareholder","shark","sharpener","sharpness","sharpshooter","shave","shaver","shaving","shawl","sheaf","sheath","shed","sheen","sheepherder","sheepskin","sheet","sheik","shelf","shell","shellac","shelling","shelter","shepherd","sherbet","sheriff","sherry","shield","shift","shifting","shiksa","shill","shimmer","shimmy","shin","shindig","shingle","ship","shipload","shipment","shipwreck","shipwright","shipyard","shire","shirt","shirtmaker","shirttail","shirtwaist","shiver","shivering","sho","shoal","shock","shocker","shoe","shoestring","shoot","shooter","shooting","shootout","shop","shopkeeper","shopper","shore","shoreline","short","shortage","shortcoming","shortcut","shortening","shortfall","shortstop","shot","shotgun","shoulder","shout","shouting","shove","shovel","show","showcase","showdown","shower","showing","showman","showpiece","showplace","showroom","shred","shrew","shriek","shrimp","shrine","shrink","shroud","shrub","shrubbery","shrug","shtetl","shudder","shuffle","shuffling","shunt","shutdown","shutout","shutter","shuttle","sibling","sickle","sidearm","sideboard","sidecar","sidekick","sideline","sideshow","sidewalk","sidewinder","siding","siege","siesta","sieve","sigh","sight","sighting","sign","signal","signalman","signature","signer","significance","signification","signifier","signing","signora","signpost","silage","silence","silencer","silhouette","silicone","silk","sill","silver","similarity","simile","simpleton","simplicity","simplification","simulation","simulator","sinecure","sinew","singer","single","singsong","singularity","sink","sinker","sinkhole","sire","siren","sirloin","sit","sitcom","site","siting","sitter","sitting","sitting-room","situation","six-pack","sizzle","skate","skater","skein","skeleton","skeptic","skepticism","sketch","sketchbook","skewer","ski","skid","skier","skiff","skill","skillet","skim","skimmer","skin","skip","skipper","skirmish","skirmishing","skirt","skit","skull","skullcap","skunk","sky","skylight","skyline","skyrocket","skyscraper","slab","slack","slag","slalom","slamming","slander","slant","slash","slat","slate","slaver","slayer","slaying","sledge","sledgehammer","sleeper","sleeping","sleepwalker","sleet","sleeve","sleigh","sleight","sleuth","slice","slick","slicker","slide","slider","slime","sling","slingshot","slip","slippage","slipper","slit","sliver","slob","slobber","slogan","sloop","slop","slope","slot","sloth","slouch","slough","slowdown","sluice","slum","slumber","slump","slur","slurry","smack","small","smash","smattering","smear","smell","smelter","smidgen","smile","smirk","smith","smithy","smock","smoke","smoker","smokescreen","smokestack","smudge","smut","snack","snail","snake","snakebite","snap","snapper","snapshot","snare","snarl","snatch","sneak","sneaker","sneer","sneeze","snicker","sniff","sniffer","snifter","snip","sniper","snitch","snob","snobbery","snooper","snooze","snore","snorkel","snort","snot","snout","snow","snowball","snowbank","snowdrift","snowfall","snowfield","snowflake","snowman","snowmobile","snowplow","snowshoe","snowstorm","snub","snuffler","soap","soapbox","sobbing","sobriquet","socialism","socialist","socialite","society","sociology","sock","socket","sod","soda","sofa","softball","softener","softening","softness","soil","sojourn","solace","solder","soldier","sole","solemnity","solicitation","solicitor","solicitude","solid","solidarity","soliloquy","solitude","solo","soloist","solstice","solution","solvent","somersault","son","sonar","sonarman","sonata","song","songwriter","sonnet","sonobuoy","soot","sophistication","sophistry","sophomore","sor","sorbet","sorcerer","sorcery","sore","sorghum","sorority","sorrow","sortie","sorting","souffle","soul","sound","sounding","soundtrack","soup","source","sourdough","southerner","southpaw","souvenir","sovereign","sovereignty","soviet","sow","soybean","spa","space","spaceman","spaceport","spacer","spaceship","spacesuit","spacing","spade","span","spaniel","spanking","spar","spark","sparkle","sparrow","spasm","spat","spate","spatter","spatula","speakeasy","speaker","speaking","spear","specialist","speciality","specialization","specialty","specification","specimen","speck","spectacle","spectator","specter","spectre","spectrum","speculation","speculator","speech","speechwriter","speed","speedboat","speedometer","speedster","spell","spelling","spend","spender","spendthrift","sphere","spice","spider","spiderweb","spiel","spigot","spike","spill","spillway","spin","spindle","spine","spinnaker","spinner","spinoff","spinster","spiral","spire","spirit","spiritualist","spirituality","spirochete","spit","spitball","spite","splash","splashing","splat","spleen","splendor","splendour","splint","splinter","split","splitting","splotch","spoil","spoiler","spoke","sponge","sponsor","sponsorship","spoof","spook","spool","spoon","spoonful","spoor","spore","sporophyte","sport","sportscaster","sportsman","sportswriter","spot","spotlight","spotter","spouse","spout","sprawl","spray","spraying","spread","spree","sprig","spring","springboard","sprinkler","sprinkling","sprint","sprinter","sprite","spruce","spume","spur","spurt","spy","squab","squabble","squad","squadron","squall","square","squash","squat","squatter","squaw","squawk","squeak","squeal","squeeze","squint","squire","squirm","squirrel","squirt","stability","stabilizer","stable","stack","stadium","staffer","stag","stage","stagecoach","stagger","staging","stain","stair","staircase","stairway","stairwell","stake","stakeout","stalemate","stalk","stall","stamp","stampede","stance","stanchion","stand","standard","standard-bearer","standing","standoff","standout","standpoint","standstill","stanza","staple","star","starburst","starch","stare","starlet","starling","starship","start","start-up","starter","stash","state","statehouse","statement","stateroom","statesman","static","station","stationmaster","statistician","statue","statuette","stature","statute","stave","stead","steak","steam","steamboat","steamer","steamship","steed","steel","steelworker","steeple","steer","stein","stele","stem","stench","stenographer","stepladder","steppe","stepping-stone","stepson","stereo","stereotype","stern","stethoscope","stevedore","stew","steward","stewardess","stick","sticker","stickler","stickup","stiff","stigma","still","stilt","stimulant","stimulation","sting","stinger","stink","stinker","stint","stipend","stipulation","stir","stirrup","stitch","stoan","stock","stockade","stockbroker","stockholder","stocking","stockpile","stockroom","stockyard","stoic","stole","stone","stoneware","stooge","stool","stoop","stopgap","stoplight","stopover","stoppage","stopper","stopwatch","store","storefront","storehouse","storekeeper","storeroom","stork","storm","story","storyboard","storybook","storyteller","stout","stove","stovepipe","strain","strait","straitjacket","strand","stranger","strangle","strangler","strangulation","strap","stratagem","strategist","strategy","stratum","straw","strawberry","streak","stream","streamer","street","streetcar","streetlamp","streetlight","strength","stress","stretch","stretcher","stricture","stride","stridency","strike","strikeout","striker","string","stringency","stringer","strip","stripe","striving","strobe","stroke","stroll","stroller","strongbox","stronghold","strongman","strop","struction","structure","strudel","struggle","strumpet","strut","stub","stubble","stud","student","studio","study","stuff","stuffing","stumble","stumbling","stump","stunner","stunt","stupor","sturgeon","stutter","sty","style","styling","stylist","stylus","suasion","sub","subcommittee","subcompact","subcontractor","subculture","subdivision","subgroup","subject","subjectivist","subjugation","sublet","sublimation","submarine","submission","subordination","subpena","subpoena","subscriber","subscription","subset","subsidiary","subsidy","substage","substance","substation","substitute","substitution","substrate","substructure","subterfuge","subtext","subtitle","subtlety","subtraction","suburb","suburbanite","subversion","subway","success","succession","successor","succor","suede","suffix","suffocation","sugar","suggestion","suit","suitcase","suite","suitor","sulfate","sulfide","sulfite","sulfur","sulphate","sultan","summary","summation","summit","sun","sunbeam","sunburn","sunburst","sundae","sundial","sunflower","sunlight","sunrise","sunset","suntan","super","supercomputer","superficiality","supergiant","superhighway","superintendent","superior","superiority","superman","supermarket","supernova","superpower","superstar","superstructure","supervisor","supper","supplement","supplicant","supplication","supplier","supply","support","supporter","supposition","suppression","surcharge","surcoat","surety","surface","surfboard","surfeit","surfer","surge","surgeon","surgery","surmise","surname","surprise","surrender","surrogate","surround","surtax","surveillance","survey","surveyor","survival","survivor","susceptibility","suspect","suspension","suspicion","suture","swagger","swallow","swami","swamp","swampland","swan","swarm","swastika","swatch","swath","swathe","sweat","sweatband","sweater","sweating","sweatshirt","sweatshop","sweatsuit","sweet","sweetener","sweetheart","sweetie","sweetness","swell","swig","swim","swimmer","swimsuit","swindle","swindler","swing","swinger","swipe","swirl","swish","switch","switchback","switchblade","switchboard","switching","swivel","swoon","swoop","sword","swordsman","sycamore","sycophant","syllable","syllogism","symbol","symbolism","symmetry","sympathizer","sympathy","symphony","symposium","symptom","synagogue","synapse","syndicate","syndication","syndrome","synod","synonym","synopsis","synthesis","synthesizer","syringe","syrup","system","tab","tabby","tabernacle","table","tableau","tablecloth","tablespoon","tablet","tabletop","tableware","tabloid","taboo","tabulation","tack","tactic","tactician","taffeta","tag","tai-pan","tail","tailback","tailcoat","tailgate","taillight","tailor","tailspin","taint","take","takeoff","takeover","taker","taking","talc","tale","talent","talker","tally","talon","tamale","tambourine","tamer","taming","tampering","tan","tance","tang","tangent","tangle","tank","tankard","tanker","tanner","tannin","tantrum","tap","tape","taper","tapestry","taping","tapping","tar","tarantula","target","tariff","tarp","tarpaulin","tart","tary","taskmaster","tassel","taste","tasting","tat","tation","tattoo","taunt","tautology","tavern","tavern-keeper","taverna","tax","taxation","taxi","taxicab","taxiway","taxpayer","tea","teacher","teaching","teacup","teahouse","teak","teakettle","team","teammate","teamster","teapot","teardrop","teaspoon","teat","technicality","technician","technique","technocrat","technology","teddy","tedium","tee","teetotaler","teevee","tektite","tel","telecast","telegram","telegraph","telephone","telescope","telethon","teletype","television","telex","teller","telling","telltale","temper","temperament","temperature","tempest","template","temple","tempo","temptation","temptress","tenancy","tenant","tendency","tender","tenderness","tendon","tendril","tenement","tenet","tenon","tenor","tense","tension","tent","tentacle","tention","tenure","tepee","tequila","terminal","termination","terminology","tern","terrace","terracotta","terrain","terrarium","terrier","territory","terror","terrorist","testament","tester","testimonial","testimony","tetracycline","text","textbook","textile","texture","thang","thanksgiving","thatch","thaw","the","theater","theatre","theft","theme","theologian","theology","theorem","theoretician","theorist","theorizing","theory","ther","therapist","therapy","thermometer","thermostat","these","thesis","thickening","thicket","thickness","thief","thievery","thigh","thimble","thing","thinker","thinking","thinning","thistle","thorax","thorn","thornbush","thoroughbred","thoroughfare","thought","thrall","thrashing","thread","threat","three-star","threesome","threshing","threshold","thrift","thrill","thriller","throat","throb","throbbing","throne","throng","throttle","throw","throwaway","throwback","thrower","thrum","thrush","thrust","thud","thug","thumb","thumbnail","thump","thumping","thunder","thunderbolt","thunderclap","thunderstorm","thwack","thyme","thyroid","tiara","tibia","tic","tick","ticker","ticket","ticking","tickle","tidbit","tide","tie","tie-up","tiger","tile","till","tiller","tilt","timber","timberland","timbre","timeline","timepiece","timer","timetable","timidity","timing","tin","tincture","tine","ting","tinge","tingle","tingling","tinker","tint","tinting","tip","tipper","tiptoe","tirade","tissue","titan","tithe","tithing","titillation","title","toad","toast","toaster","tobacconist","toboggan","toddler","toddy","toe","toehold","toenail","toffee","toga","toil","toilet","toke","token","tolerance","toll","tom","tomahawk","tomato","tomb","tomboy","tombstone","tomcat","tome","tonality","tong","tongue","tonic","tonnage","tonsillectomy","tonsure","tool","toolbox","tooth","toothache","toothbrush","toothpaste","toothpick","topcoat","topic","topping","topside","torch","torchlight","torment","tormentor","tornado","torpedo","torpor","torque","torrent","tort","torte","tortilla","tortoise","torture","torturer","toss","tossing","tot","total","totalitarianism","totality","tote","totem","touch","touchdown","touchstone","tough","toupee","tour","tourist","tournament","tourney","tourniquet","tow","towel","tower","town","townhouse","township","townsman","toy","trace","tracer","tracery","tracing","track","tracker","tract","tractor","trade","trademark","trader","tradesman","tradition","traditionalist","traffic","trafficker","tragedy","trail","trailer","train","trainee","trainer","training","trainload","trajectory","tram","tramp","trampoline","trance","tranquilizer","transaction","transceiver","transcript","transcription","transfer","transference","transformation","transformer","transfusion","transgression","transistor","transit","transition","translation","translator","transmission","transmitter","transmutation","transom","transparency","transplant","transplantation","transport","transportation","transvestite","trap","trapdoor","trapeze","trapper","trapping","tration","travail","travel","traveler","traveller","travelogue","traverse","travesty","trawler","tray","treachery","treacle","tread","treadmill","treason","treasure","treasurer","treasury","treat","treatise","treatment","treaty","treble","tree","treetop","trembling","tremor","trench","trenchcoat","trend","trepidation","trespass","trespasser","tress","trestle","triad","trial","triangle","tribe","tribesman","tribulation","tribunal","tribune","tributary","tribute","trick","trickle","trickster","tricolor","tricycle","trifle","trigger","trill","trilogy","trinket","trip","tripe","triple","triplicate","tripod","triumph","triviality","troika","troll","trolley","trombone","trombonist","troop","trooper","trophy","trot","troubadour","trouble","troublemaker","troubleshooter","trough","troupe","trouper","trouser","trove","trowel","truancy","truce","truck","trucker","truckload","truffle","truism","trump","trumpet","trumpeter","truncheon","trunk","truss","trust","trustee","trusteeship","truth","tryout","tryst","tsar","tub","tuba","tube","tuber","tuft","tug","tug-of-war","tugboat","tuition","tulip","tulle","tumble","tumbler","tumbleweed","tummy","tumor","tumult","tundra","tune","tune-up","tuner","tunic","tuning","tunnel","turban","turbine","turbocharger","turbulence","turd","ture","tureen","turkey","turmoil","turnabout","turnaround","turncoat","turning","turnip","turnkey","turnout","turnover","turnpike","turnstile","turntable","turquoise","turret","turtle","turtleneck","tusk","tussle","tutor","tutorial","tutu","tux","tuxedo","twang","tweed","tween","twick","twig","twilight","twill","twin","twine","twinge","twinkle","twirl","twist","twister","twit","twitch","twitching","ty","tycoon","tyke","typer","typescript","typewriter","typhoid","typhoon","typist","typology","tyranny","tyrant","udder","umber","umbrella","umpire","unbutton","uncertainty","underclass","undercurrent","underdog","undergarment","undergraduate","underground","underling","underpass","undersecretary","underside","understatement","understudy","undertaker","undertaking","undertone","undertow","underwriter","underwriting","undoing","undulation","unfairness","unicorn","unification","uniform","uniformity","union","unity","universe","university","unreality","upbringing","update","updraft","upheaval","upland","uplift","uprising","upstart","upsurge","upswing","urchin","ureter","urgency","urging","urn","usage","user","usher","usurpation","usurper","utility","utopia","utterance","vacancy","vacation","vaccination","vaccine","vacillation","vagabond","vagrant","valedictorian","valentine","valet","validation","valise","valley","valuation","value","valve","van","vandal","vane","vanity","vantage","vapor","variability","variable","variance","variant","variation","variety","varnish","vase","vassal","vastness","vat","vault","vaulting","veal","vector","vegetable","vegetarian","vegetation","vehicle","veil","vein","velocity","velour","velvet","vendetta","vendor","veneer","veneration","vent","ventilator","ventricle","venture","venue","ver","veranda","verb","verdict","verge","verification","verity","vermouth","vernacular","verse","version","versity","vertebra","vertical","vessel","vest","vestibule","vestige","vet","veteran","veterinarian","veto","vexation","vial","vibration","vibrator","vicar","vice","vice-chairman","vice-president","viceroy","victor","victory","video","videocassette","videodisc","videotape","viewer","viewing","viewpoint","viewscreen","vigil","vigilante","vignette","villa","village","villager","vindication","vine","vinegar","vineyard","vintage","vinyl","violet","violin","violinist","viper","virologist","virtue","visa","visage","vise","vision","visit","visitation","visitor","visor","vista","visualization","vitamin","vivacity","vocabulary","vocalist","vocalization","vocation","vodka","vogue","voice","void","volatility","volcano","volition","volley","volleyball","voltage","volume","volunteer","vomit","vortex","voter","voucher","vow","vowel","voyage","voyce","voyeur","vulnerability","waddle","wafer","waffle","wag","wage","wager","wagon","waif","wail","wailing","waist","waistband","waistcoat","waistline","wait","waiver","waking","walk","walk-up","walker","walkie-talkie","walkout","walkway","wall","wallet","walleye","wallflower","wallop","wallow","wallpaper","walnut","wand","wanderer","wane","want","war","war-horse","warbler","warden","wardrobe","wardroom","ware","warehouse","warhead","warhorse","warlord","warm-up","warmth","warmup","warning","warp","warrant","warranty","warren","warrior","warship","wart","wartime","wash","washbasin","washboard","washcloth","washer","washing","washout","washroom","washstand","washtub","wasp","waste","wastebasket","wasteland","wastrel","watch","watchdog","watcher","watching","watchman","watchtower","watchword","water","watercolor","waterfall","waterfront","watering","waterman","watermelon","watershed","waterway","wattle","wave","wavelength","wax","wayfarer","weal","weapon","wear","wearer","wearing","weasel","weather","weatherman","weave","weaver","weaving","web","wedding","wedge","weed","weekly","weighing","weight","welcome","welder","well","wellspring","welt","welterweight","wench","werewolf","werowance","whack","whale","whalebone","whaler","whammy","wharf","whatnot","wheat","wheel","wheelbarrow","wheelchair","wheelhouse","wheeling","wheeze","whelp","which","whiff","whim","whimper","whimpering","whimsy","whine","whining","whinny","whip","whiplash","whipping","whir","whirl","whirlpool","whirlwind","whirr","whirring","whisk","whisker","whiskey","whisky","whisper","whispering","whistle","whistling","white","whitey","whodunit","whole","wholesaler","whoosh","whopper","whorl","wick","wickedness","wicket","width","wig","wiggle","wigwam","wil","wildcat","wilderness","wildfire","will","willow","wimp","wince","winch","wind","windbreaker","windfall","windmill","window","windowpane","windowsill","windpipe","windshield","wine","wineglass","winery","wingman","wingspan","wink","winner","winning","wipe","wire","wiretap","wisdom","wisecrack","wish","wishbone","wisp","wit","witch","withdrawal","withholding","witness","witticism","wizard","wizardry","wobble","woe","wok","wolf","wonder","wondering","wonderland","wonderment","wood","woodchuck","woodcutter","woodland","woodpecker","woodpile","woodshed","woodsman","woodworker","wool","word","wording","workbench","workday","worker","workhorse","workhouse","working","workingman","workload","workman","workout","workplace","workroom","workshirt","workshop","workstation","worktable","workweek","world","world-system","world-view","worldview","worm","worrier","worry","worsted","worthy","wound","wounding","wraith","wrangle","wrangling","wrap","wrapper","wrapping","wreath","wreck","wrecker","wren","wrench","wrestler","wrestling","wretch","wrinkle","wrist","wristwatch","writ","writer","writhing","writing","wrong","wrongdoing","wyrm","x-ray","yacht","yachtsman","yam","yard","yardstick","yarmulke","yarn","yawn","yearbook","yearling","yearning","yeast","yell","yelling","yellow","yellow-green","yeoman","yew","yield","yogurt","yoke","yolk","youngster","youth","yucca","yuppie","zation","zealot","zebra","zero","zigzag","zipper","zombie","zone","zoo","zoologist","zoom","zygote"]),Xy}var WV;function VV(){if(WV)return nE;WV=1,Object.defineProperty(nE,"__esModule",{value:!0}),nE.nouns=nE.adjectives=void 0;const e=WKA();nE.adjectives=e.default;const A=VKA();return nE.nouns=A.default,nE}var aE={},ZV;function ZKA(){if(ZV)return aE;ZV=1,Object.defineProperty(aE,"__esModule",{value:!0}),aE.createSeededRandomInt=aE.getRandomInt=void 0;function e(){const o=typeof globalThis<"u"?globalThis:void 0;return o&&o.crypto?o.crypto:void 0}let A=(Date.now()^2654435769)>>>0;function t(){return A^=A<<13,A>>>=0,A^=A>>>17,A>>>=0,A^=A<<5,A>>>=0,A>>>0}function i(o){const g=e();if(g&&typeof g.getRandomValues=="function"){const I=new Uint32Array(o);return g.getRandomValues(I),I}const l=new Uint32Array(o);for(let I=0;I<o;I++)l[I]=t();return l}const r=(o,g)=>{if(!Number.isFinite(o)||!Number.isFinite(g))throw new Error("Invalid bounds for getRandomInt");if(g<o)throw new Error("maxInclusive must be >= minInclusive");if(o===g)return o;const[l]=i(1),I=g-o+1;return o+l%I};aE.getRandomInt=r;function n(o){let g=1779033703^o.length;for(let l=0;l<o.length;l++)g=Math.imul(g^o.charCodeAt(l),3432918353),g=g<<13|g>>>19;return function(){return g=Math.imul(g^g>>>16,2246822507),g=Math.imul(g^g>>>13,3266489909),(g^=g>>>16)>>>0}}function a(o){return function(){o|=0,o=o+1831565813|0;let g=Math.imul(o^o>>>15,1|o);return g=g+Math.imul(g^g>>>7,61|g)^g,((g^g>>>14)>>>0)/4294967296}}function s(o){const g=String(o),I=n(g)(),C=a(I);return(E,u)=>{if(!Number.isFinite(E)||!Number.isFinite(u))throw new Error("Invalid bounds for getRandomInt");if(u<E)throw new Error("maxInclusive must be >= minInclusive");if(E===u)return E;const d=C(),Q=u-E+1;return E+Math.floor(d*Q)}}return aE.createSeededRandomInt=s,aE}var sE={},jV;function _V(){if(jV)return sE;jV=1,Object.defineProperty(sE,"__esModule",{value:!0}),sE.buildProfanityFilter=sE.DEFAULT_PROFANITY=void 0,sE.DEFAULT_PROFANITY=["ass","asses","asshole","bastard","bitch","bloody","bollocks","bugger","cock","cocks","cocksucker","crap","cunt","damn","dick","douche","dumb","dumber","dumbest","fag","faggot","fuck","fucked","fucker","fucking","goddam","goddamn","goddamned","hell","jerk","moron","nazi","nuts","piss","pisser","pissing","prick","retard","shit","shitty","slut","tits","twat","wanker"];function e(A,t){var i;const r=A.filter(Boolean).map(g=>g.trim().toLowerCase()).filter(g=>g.length>0),n=Array.from(new Set(r)),a=t?.matchSubstrings===!0,s=(i=t?.wordBoundary)!==null&&i!==void 0?i:"(?:^|[^a-z0-9])(?:%s)(?:$|[^a-z0-9])",o=n.map(g=>{const l=g.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(a)return new RegExp(l,"i");const I=s.replace("%s",l);return new RegExp(I,"i")});return g=>{if(!g)return!1;const l=String(g).toLowerCase();return o.some(I=>I.test(l))}}return sE.buildProfanityFilter=e,sE}var XV;function jKA(){return XV||(XV=1,(function(e){var A=rE&&rE.__awaiter||function(b,N,T,L){function K(H){return H instanceof T?H:new T(function(x){x(H)})}return new(T||(T=Promise))(function(H,x){function U(O){try{F(L.next(O))}catch(P){x(P)}}function G(O){try{F(L.throw(O))}catch(P){x(P)}}function F(O){O.done?H(O.value):K(O.value).then(U,G)}F((L=L.apply(b,N||[])).next())})},t=rE&&rE.__rest||function(b,N){var T={};for(var L in b)Object.prototype.hasOwnProperty.call(b,L)&&N.indexOf(L)<0&&(T[L]=b[L]);if(b!=null&&typeof Object.getOwnPropertySymbols=="function")for(var K=0,L=Object.getOwnPropertySymbols(b);K<L.length;K++)N.indexOf(L[K])<0&&Object.prototype.propertyIsEnumerable.call(b,L[K])&&(T[L[K]]=b[L[K]]);return T};Object.defineProperty(e,"__esModule",{value:!0}),e.DEFAULT_PROFANITY=e.nouns=e.adjectives=e.uniqueUsernameGenerator=e.generateUsername=e.generateFromEmail=e.generateMany=e.generateUniqueAsync=void 0;const i=VV(),r=ZKA(),n=_V();function a(b,N,T=1e3){return A(this,void 0,void 0,function*(){const L=new Set;for(let K=0;K<T;K++){const H=I(b);if(L.has(H))continue;if(!(yield Promise.resolve(N(H))))return H;L.add(H)}throw new Error("Unable to find a unique username within the given attempts")})}e.generateUniqueAsync=a;function s(b){const{count:N,unique:T=!1}=b,L=t(b,["count","unique"]),K=[],H=new Set;for(let x=0;x<N;x++){let U=I(L);if(T){let G=0;for(;H.has(U)&&G<1e3;)U=I(L),G++;if(H.has(U))throw new Error("Unable to produce the requested number of unique usernames");H.add(U)}K.push(U)}return K}e.generateMany=s;const o=b=>{let N;switch(b){case 1:N=Math.floor((0,r.getRandomInt)(1,9)).toString();break;case 2:N=Math.floor((0,r.getRandomInt)(10,90)).toString();break;case 3:N=Math.floor((0,r.getRandomInt)(100,900)).toString();break;case 4:N=Math.floor((0,r.getRandomInt)(1e3,9e3)).toString();break;case 5:N=Math.floor((0,r.getRandomInt)(1e4,9e4)).toString();break;case 6:N=Math.floor((0,r.getRandomInt)(1e5,9e5)).toString();break;default:N="";break}return N};function g(b,N){var T;let K=b.replace(/@.+/,"").replace(/[&/\\#,+()$~%._@'":*?<>{}]/g,"");const H=typeof N=="object"&&N!==null?N:{randomDigits:typeof N=="number"?N:void 0},x=H.stripLeadingDigits!==!1,U=(T=H.leadingFallback)!==null&&T!==void 0?T:"user";x&&(K=K.replace(/^[0-9]+/,""),K.length===0&&(K=U));const G=typeof H.randomDigits=="number"?H.randomDigits:void 0;return K+o(G)}e.generateFromEmail=g;function l(b,N,T,L){const K=d(),H=u(),x=K[Math.floor(Math.random()*K.length)],U=L?L.replace(/\s{2,}/g," ").replace(/\s/g,b??"").toLocaleLowerCase():H[Math.floor(Math.random()*H.length)];let G;return b?G=U+b+x+o(N):G=U+x+o(N),T?G.substring(0,T):G}e.generateUsername=l;function I(b){var N,T,L,K;if(b.dictionaries){const H=Array.from(new Set([...(N=b.profanityList)!==null&&N!==void 0?N:n.DEFAULT_PROFANITY,...(T=b.exclude)!==null&&T!==void 0?T:[]])).filter(j=>!!j),x=(0,n.buildProfanityFilter)(H,b.profanityOptions),G=b.dictionaries.map(j=>j.filter(X=>!x(String(X)))).filter(j=>j.length>0);if(G.length===0)throw new Error("All provided dictionaries are empty after filtering. Consider relaxing filters or providing more words.");const F=typeof b.seed<"u"?(0,r.createSeededRandomInt)(b.seed):r.getRandomInt,O=j=>G[j][F(0,G[j].length-1)],P=G.length,q=b.separator||"";let Y,z=!1;if(b.template)Y=R(b.template,G,F,q,b.randomDigits);else{const j=[];for(let _=0;_<P;_++){const gA=O(_);j.push(gA)}Y=y(j,(L=b.style)!==null&&L!==void 0?L:"lowerCase",q)+o(b.randomDigits),z=!0}return z||(Y=p(Y,(K=b.style)!==null&&K!==void 0?K:"lowerCase",q)),b.length?Y.substring(0,b.length):Y.substring(0,15)}else throw new Error("Cannot find any dictionary. Please provide at least one, or leave the 'dictionary' field empty in the config object")}e.uniqueUsernameGenerator=I;var C=VV();Object.defineProperty(e,"adjectives",{enumerable:!0,get:function(){return C.adjectives}}),Object.defineProperty(e,"nouns",{enumerable:!0,get:function(){return C.nouns}});var E=_V();Object.defineProperty(e,"DEFAULT_PROFANITY",{enumerable:!0,get:function(){return E.DEFAULT_PROFANITY}});function u(){const b=(0,n.buildProfanityFilter)(n.DEFAULT_PROFANITY);return i.adjectives.filter(N=>!b(N))}function d(){const b=(0,n.buildProfanityFilter)(n.DEFAULT_PROFANITY);return i.nouns.filter(N=>!b(N))}function Q(b){return b&&b.charAt(0).toUpperCase()+b.slice(1).toLowerCase()}function f(b,N){return N?b.split(N).filter(Boolean):[b]}function p(b,N,T){const L=typeof T=="string"?T:"",K=f(b,L);switch(N){case"upperCase":return K.join(L).toUpperCase();case"capital":return K.map(Q).join(L);case"camelCase":{const[H,...x]=K.map(U=>U.toLowerCase());return[H??"",...x.map(Q)].join("")}case"pascalCase":return K.map(Q).join("");case"kebabCase":return K.map(H=>H.toLowerCase()).join("-");case"snakeCase":return K.map(H=>H.toLowerCase()).join("_");case"lowerCase":default:return K.join(L).toLowerCase()}}function y(b,N,T){const L=b.map(K=>w(K,T));switch(N){case"upperCase":return L.map(K=>K.toUpperCase()).join(T);case"capital":{const K=L.join(T);return K&&K.charAt(0).toUpperCase()+K.slice(1).toLowerCase()}case"titleCase":return L.map(Q).join(T);case"camelCase":{const[K,...H]=L.map(x=>x.toLowerCase());return[K??"",...H.map(Q)].join("")}case"pascalCase":return L.map(Q).join("");case"kebabCase":return L.map(K=>K.toLowerCase()).join("-");case"snakeCase":return L.map(K=>K.toLowerCase()).join("_");case"lowerCase":default:return L.map(K=>K.toLowerCase()).join(T)}}function w(b,N){if(!b)return b;if(!N)return b.replace(/[^a-zA-Z0-9]/g,"");const L=b.replace(/[^a-zA-Z0-9]+/g,N).replace(new RegExp(`${S(N)}{2,}`,"g"),N);return k(L,N)}function S(b){return b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function k(b,N){const T=new RegExp(`^${S(N)}|${S(N)}$`,"g");return b.replace(T,"")}function R(b,N,T,L,K){const H=/\{(adjective|noun|digits(?::\d+)?|\d+)\}/gi,x=F=>N[F][T(0,N[F].length-1)];let U=-1,G=-1;return N.length>0&&(U=0),N.length>1&&(G=1),b.replace(H,F=>{const O=F.slice(1,-1);if(O.startsWith("digits")){const q=O.split(":"),Y=q[1]?parseInt(q[1],10):K??0;return o(Number.isFinite(Y)?Y:void 0)}if(O==="adjective"&&U>=0)return x(U);if(O==="noun"&&G>=0)return x(G);const P=parseInt(O,10);return Number.isFinite(P)&&P>=0&&P<N.length?x(P):F}).replace(/\s+/g,L||"")}})(rE)),rE}var QT=jKA();function YlA(){const e=QT.uniqueUsernameGenerator({dictionaries:[QT.adjectives,QT.nouns],separator:"|||",style:"lowerCase",randomDigits:0,length:50}),[A,t]=e.split("|||");return`${A}-${t}-tater`}const fT={displayName:{defaultValue:()=>YlA(),fromCookie:()=>Pe.getItem("plannotator-identity")||void 0,toCookie:e=>Pe.setItem("plannotator-identity",e),serverKey:"displayName",fromServer:e=>typeof e.displayName=="string"&&e.displayName?e.displayName:void 0,toServer:e=>({displayName:e})},diffStyle:{defaultValue:"split",fromCookie:()=>{const e=Pe.getItem("plannotator-diff-style")??Pe.getItem("review-diff-style");return e==="split"||e==="unified"?e:void 0},toCookie:e=>Pe.setItem("plannotator-diff-style",e),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.diffStyle;return A==="split"||A==="unified"?A:void 0},toServer:e=>({diffOptions:{diffStyle:e}})},diffOverflow:{defaultValue:"scroll",fromCookie:()=>{const e=Pe.getItem("plannotator-diff-overflow");return e==="scroll"||e==="wrap"?e:void 0},toCookie:e=>Pe.setItem("plannotator-diff-overflow",e),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.overflow;return A==="scroll"||A==="wrap"?A:void 0},toServer:e=>({diffOptions:{overflow:e}})},diffIndicators:{defaultValue:"bars",fromCookie:()=>{const e=Pe.getItem("plannotator-diff-indicators");return e==="bars"||e==="classic"||e==="none"?e:void 0},toCookie:e=>Pe.setItem("plannotator-diff-indicators",e),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.diffIndicators;return A==="bars"||A==="classic"||A==="none"?A:void 0},toServer:e=>({diffOptions:{diffIndicators:e}})},diffLineDiffType:{defaultValue:"word-alt",fromCookie:()=>{const e=Pe.getItem("plannotator-diff-line-diff-type");return e==="word-alt"||e==="word"||e==="char"||e==="none"?e:void 0},toCookie:e=>Pe.setItem("plannotator-diff-line-diff-type",e),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.lineDiffType;return A==="word-alt"||A==="word"||A==="char"||A==="none"?A:void 0},toServer:e=>({diffOptions:{lineDiffType:e}})},diffShowLineNumbers:{defaultValue:!0,fromCookie:()=>{const e=Pe.getItem("plannotator-diff-show-line-numbers");return e==="true"?!0:e==="false"?!1:void 0},toCookie:e=>Pe.setItem("plannotator-diff-show-line-numbers",String(e)),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.showLineNumbers;return typeof A=="boolean"?A:void 0},toServer:e=>({diffOptions:{showLineNumbers:e}})},diffShowBackground:{defaultValue:!0,fromCookie:()=>{const e=Pe.getItem("plannotator-diff-show-background");return e==="true"?!0:e==="false"?!1:void 0},toCookie:e=>Pe.setItem("plannotator-diff-show-background",String(e)),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.showDiffBackground;return typeof A=="boolean"?A:void 0},toServer:e=>({diffOptions:{showDiffBackground:e}})},diffFontFamily:{defaultValue:"",fromCookie:()=>Pe.getItem("plannotator-diff-font-family")||void 0,toCookie:e=>Pe.setItem("plannotator-diff-font-family",e),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.fontFamily;return typeof A=="string"?A:void 0},toServer:e=>({diffOptions:{fontFamily:e}})},diffFontSize:{defaultValue:"",fromCookie:()=>Pe.getItem("plannotator-diff-font-size")||void 0,toCookie:e=>Pe.setItem("plannotator-diff-font-size",e),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.fontSize;return typeof A=="string"?A:void 0},toServer:e=>({diffOptions:{fontSize:e}})},conventionalComments:{defaultValue:!1,fromCookie:()=>{const e=Pe.getItem("plannotator-conventional-comments");return e==="true"?!0:e==="false"?!1:void 0},toCookie:e=>Pe.setItem("plannotator-conventional-comments",String(e)),serverKey:"conventionalComments",fromServer:e=>{const A=e.conventionalComments;return typeof A=="boolean"?A:void 0},toServer:e=>({conventionalComments:e})},conventionalLabels:{defaultValue:null,fromCookie:()=>Pe.getItem("plannotator-cc-labels")||void 0,toCookie:e=>{e?Pe.setItem("plannotator-cc-labels",e):Pe.removeItem("plannotator-cc-labels")},serverKey:"conventionalLabels",fromServer:e=>{const A=e.conventionalLabels;if(A===null)return null;if(Array.isArray(A))return JSON.stringify(A)},toServer:e=>{if(e===null)return{conventionalLabels:null};try{return{conventionalLabels:JSON.parse(e)}}catch{return{}}}}};function HlA(e,A){for(const t of Object.keys(A))typeof e[t]=="object"&&e[t]!==null&&!Array.isArray(e[t])&&typeof A[t]=="object"&&A[t]!==null&&!Array.isArray(A[t])?HlA(e[t],A[t]):e[t]=A[t]}class _KA{constructor(){this.values=new Map,this.listeners=new Set,this.version=0,this.pendingServerWrites={},this.serverSyncTimer=null;for(const[A,t]of Object.entries(fT)){const i=t.fromCookie(),r=typeof t.defaultValue=="function"?t.defaultValue():t.defaultValue,n=i??r;this.values.set(A,n),i===void 0&&t.toCookie(n)}}init(A){if(A){for(const[t,i]of Object.entries(fT))if(i.serverKey&&i.fromServer){const r=i.fromServer(A);r!==void 0&&(this.values.set(t,r),i.toCookie(r))}}this.notify()}get(A){return this.values.get(A)}set(A,t){const i=fT[A];this.values.set(A,t),i.toCookie(t),i.serverKey&&i.toServer&&(HlA(this.pendingServerWrites,i.toServer(t)),this.scheduleServerSync()),this.notify()}subscribe(A){return this.listeners.add(A),()=>this.listeners.delete(A)}notify(){this.version++;for(const A of this.listeners)A()}scheduleServerSync(){this.serverSyncTimer&&clearTimeout(this.serverSyncTimer),this.serverSyncTimer=setTimeout(()=>{const A={...this.pendingServerWrites};this.pendingServerWrites={},fetch("/api/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(A)}).catch(()=>{})},300)}}const Mn=new _KA;function Zg(e){const A=nA.useCallback(i=>Mn.subscribe(i),[]),t=nA.useCallback(()=>Mn.get(e),[e]);return nA.useSyncExternalStore(A,t)}function zd(){return Mn.get("displayName")}function XKA(e){const A=e.trim();return A?(Mn.set("displayName",A),A):zd()}function $KA(){const e=YlA();return Mn.set("displayName",e),e}function $V(e){return e?e===Mn.get("displayName"):!1}const PlA=({stats:e,isActive:A,onToggle:t,hasPreviousVersion:i})=>!i||!e||!(e.additions>0||e.deletions>0||e.modifications>0)?null:D.jsxs("button",{onClick:t,className:`px-1.5 py-0.5 rounded text-[9px] font-mono transition-colors cursor-pointer ${A?"bg-primary/15":"bg-muted/50 hover:bg-muted"}`,title:A?"Exit plan diff view":"Show what changed from previous version",children:[D.jsxs("span",{className:A?"text-success":"text-success/70",children:["+",e.additions]}),D.jsx("span",{className:"text-muted-foreground/50 mx-0.5",children:"/"}),D.jsxs("span",{className:A?"text-destructive":"text-destructive/70",children:["-",e.deletions]})]}),JlA=({layout:e,repoInfo:A,planDiffStats:t,isPlanDiffActive:i,hasPreviousVersion:r,onPlanDiffToggle:n,showDemoBadge:a,archiveInfo:s,linkedDocInfo:o})=>{if(!(A||r||a||o||s))return null;const l=e==="row",I=l?"flex flex-row items-center gap-1.5 text-[9px] text-muted-foreground/70 font-mono":"flex flex-col items-start gap-1 text-[9px] text-muted-foreground/50 font-mono";return D.jsxs("div",{className:I,children:[A&&!o&&D.jsxs("div",{className:"flex items-center gap-1.5",children:[D.jsx("span",{className:"px-1.5 py-0.5 bg-muted/50 rounded truncate max-w-[140px]",title:A.display,children:A.display}),A.branch&&D.jsxs("span",{className:"px-1.5 py-0.5 bg-muted/30 rounded max-w-[120px] flex items-center gap-1 overflow-hidden",title:A.branch,children:[D.jsx("svg",{className:"w-2.5 h-2.5 flex-shrink-0",viewBox:"0 0 16 16",fill:"currentColor",children:D.jsx("path",{d:"M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"})}),D.jsx("span",{className:"truncate",children:A.branch})]})]}),n&&!o&&D.jsx(PlA,{stats:t??null,isActive:i??!1,onToggle:n,hasPreviousVersion:r??!1}),!l&&a&&!o&&D.jsx("span",{className:"px-1.5 py-0.5 rounded text-[9px] font-mono bg-amber-500/15 text-amber-600 dark:text-amber-400",children:"Demo"}),s&&!o&&D.jsxs("div",{className:"flex items-center gap-1.5",children:[D.jsx("span",{className:`px-1.5 py-0.5 rounded ${s.status==="approved"?"bg-green-500/15 text-green-600 dark:text-green-400":s.status==="denied"?"bg-red-500/15 text-red-600 dark:text-red-400":"bg-muted/50 text-muted-foreground"}`,children:s.status==="approved"?"Approved":s.status==="denied"?"Denied":"Unknown"}),s.timestamp&&D.jsxs("span",{className:"px-1.5 py-0.5 bg-muted/50 rounded",title:s.timestamp,children:[new Date(s.timestamp).toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})," ",new Date(s.timestamp).toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"})]})]}),!l&&o&&D.jsxs("div",{className:"flex items-center gap-1.5",children:[D.jsxs("button",{onClick:o.onBack,className:"px-1.5 py-0.5 bg-primary/10 text-primary rounded hover:bg-primary/20 transition-colors flex items-center gap-1",children:[D.jsx("svg",{className:"w-2.5 h-2.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18"})}),o.backLabel||"plan"]}),D.jsx("span",{className:"px-1.5 py-0.5 bg-primary/10 text-primary/80 rounded",children:o.label||"Linked File"}),D.jsx("span",{className:"px-1.5 py-0.5 bg-muted/50 text-muted-foreground rounded truncate max-w-[200px]",title:o.filepath,children:o.filepath.split("/").pop()})]})]})},zlA=nA.createContext(null);function yb(){return nA.useContext(zlA)}const A5A=({target:e,containerRef:A})=>{const[t,i]=nA.useState(null),r=nA.useRef(0),n=yb();return nA.useLayoutEffect(()=>{if(!e||!A.current){i(null);return}const a=()=>{const o=A.current.getBoundingClientRect(),g=e.element.getBoundingClientRect();i({top:g.top-o.top,left:g.left-o.left,width:g.width,height:g.height})};a();const s=()=>{cancelAnimationFrame(r.current),r.current=requestAnimationFrame(a)};return window.addEventListener("resize",s,{passive:!0}),n?.addEventListener("scroll",s,{passive:!0}),()=>{cancelAnimationFrame(r.current),window.removeEventListener("resize",s),n?.removeEventListener("scroll",s)}},[e,A,n]),!t||!e?null:D.jsxs(D.Fragment,{children:[D.jsx("div",{className:"border-2 border-dashed border-primary/50 bg-primary/5 rounded",style:{position:"absolute",top:t.top-2,left:t.left-2,width:t.width+4,height:t.height+4,pointerEvents:"none",zIndex:20,transition:"all 100ms ease-out"}}),D.jsx("div",{style:{position:"absolute",top:t.top-22,left:t.left-2,pointerEvents:"none",zIndex:21,transition:"all 100ms ease-out"},children:D.jsx("span",{className:"inline-block text-[10px] leading-4 px-1.5 rounded-sm bg-primary text-primary-foreground font-mono whitespace-nowrap max-w-[220px] overflow-hidden text-ellipsis",children:e.label})})]})},e5A=[".annotation-toolbar",".annotation-highlight","mark[data-bind-id]","button","[data-pinpoint-ignore]"].join(","),t5A=new Set(["STRONG","EM","A"]),i5A=new Set(["TD","TH"]),$y=22;function AZ(e,A,t){if(e.closest(e5A)||!A.contains(e))return null;const i=e.closest("[data-pinpoint-group]");if(i&&A.contains(i)&&!e.closest("[data-block-id]")){const g=i.getAttribute("data-pinpoint-group");return{element:i,blockId:"",label:g==="list"?"list":g==="blockquote"?"blockquote group":"group",isCodeBlock:!1}}const r=e.closest("[data-block-id]");if(!r||!A.contains(r))return null;const n=r.getAttribute("data-block-id");if(r.tagName==="HR")return null;const a=r.querySelector("pre > code.hljs");if(a&&(e===a||a.contains(e)||e.closest("pre")))return{element:r,blockId:n,label:a5A(r),isCodeBlock:!0};const s=r.querySelector("table");if(s&&t){const g=s.getBoundingClientRect(),l=t.clientX-g.left<$y,I=g.right-t.clientX<$y,C=t.clientY-g.top<$y,E=g.bottom-t.clientY<$y;if(C||E)return{element:r,blockId:n,label:"table",isCodeBlock:!1};if(l||I){const u=s5A(s,t.clientY);return u?{element:u,blockId:n,label:o5A(u),isCodeBlock:!1}:{element:r,blockId:n,label:"table",isCodeBlock:!1}}}if(e.tagName==="CODE"&&!e.classList.contains("hljs")){const g=e.textContent?.trim()||"";if(g)return{element:e,blockId:n,label:`code: \`${ug(g,30)}\``,isCodeBlock:!1}}if(t5A.has(e.tagName)){const g=e.textContent?.trim()||"";if(g)return{element:e,blockId:n,label:r5A(e,g),isCodeBlock:!1}}if(i5A.has(e.tagName))return{element:e,blockId:n,label:"table cell",isCodeBlock:!1};const o=e.closest("td, th");if(o&&r.contains(o))return{element:o,blockId:n,label:"table cell",isCodeBlock:!1};if(r.querySelector(".select-none")){const g=r.children[1];if(g&&(g===e||g.contains(e)))return{element:g,blockId:n,label:eZ(g),isCodeBlock:!1};if(g)return{element:g,blockId:n,label:eZ(g),isCodeBlock:!1}}return{element:r,blockId:n,label:n5A(r),isCodeBlock:!1}}function r5A(e,A){switch(e.tagName){case"STRONG":return`bold: "${ug(A,30)}"`;case"EM":return`italic: "${ug(A,30)}"`;case"A":return`link: "${ug(A,25)}"`;default:return ug(A,30)}}function n5A(e){const A=e.tagName.toLowerCase(),t=e.textContent?.trim()||"";return e.querySelector("table")?"table":e.dataset.blockType==="heading"||/^h[1-6]$/.test(A)?`heading: "${ug(t,35)}"`:A==="blockquote"?`blockquote: "${ug(t,30)}"`:A==="p"?t?`paragraph: "${ug(t,35)}"`:"paragraph":ug(t,35)||A}function eZ(e){const A=e.textContent?.trim()||"";return A?`list item: "${ug(A,30)}"`:"list item"}function a5A(e){const t=e.querySelector("code")?.className?.match(/language-(\S+)/)?.[1];return t?`code block (${t})`:"code block"}function s5A(e,A){const t=e.querySelectorAll("tr");for(const i of t){const r=i.getBoundingClientRect();if(A>=r.top&&A<=r.bottom)return i}return null}function o5A(e){if(e.querySelector("th"))return"table header row";const t=e.querySelector("td")?.textContent?.trim()||"";return t?`row: "${ug(t,25)}"`:"table row"}function ug(e,A){return e.length>A?e.slice(0,A)+"...":e}function g5A({containerRef:e,highlighterRef:A,inputMethod:t,enabled:i,onCodeBlockClick:r}){const[n,a]=nA.useState(null),s=t==="pinpoint"&&i;return nA.useEffect(()=>{s||a(o=>(o&&o.element.removeAttribute("data-pinpoint-hover"),null))},[s]),nA.useEffect(()=>{const o=e.current;if(!s||!o)return;let g=null;const l=(u,d,Q)=>{const f=AZ(Q,o,{clientX:u,clientY:d});f?f.element!==g&&(g?.removeAttribute("data-pinpoint-hover"),f.element.setAttribute("data-pinpoint-hover",""),g=f.element,a({element:f.element,label:f.label})):g&&(g.removeAttribute("data-pinpoint-hover"),g=null,a(null))},I=u=>{l(u.clientX,u.clientY,u.target)},C=u=>{if(u.touches.length!==1)return;const d=u.touches[0],Q=document.elementFromPoint(d.clientX,d.clientY);Q&&l(d.clientX,d.clientY,Q)},E=()=>{g?.removeAttribute("data-pinpoint-hover"),g=null,a(null)};return o.addEventListener("mousemove",I),o.addEventListener("mouseleave",E),o.addEventListener("touchstart",C,{passive:!0}),()=>{g?.removeAttribute("data-pinpoint-hover"),o.removeEventListener("mousemove",I),o.removeEventListener("mouseleave",E),o.removeEventListener("touchstart",C)}},[s,e]),nA.useEffect(()=>{const o=e.current;if(!s||!o)return;const g=l=>{const I=A.current;if(!I)return;const C=l.target,E=AZ(C,o,{clientX:l.clientX,clientY:l.clientY});if(!E)return;const u=C.closest("a");if(u&&o.contains(u)&&l.preventDefault(),E.element.removeAttribute("data-pinpoint-hover"),a(null),E.isCodeBlock){const f=o.querySelector(`[data-block-id="${E.blockId}"]`);f&&r(E.blockId,f);return}const d=l5A(E.element);if(!d)return;const Q=window.getSelection();Q?.removeAllRanges(),Q?.addRange(d),I.fromRange(d),window.getSelection()?.removeAllRanges()};return o.addEventListener("click",g,!0),()=>{o.removeEventListener("click",g,!0)}},[s,e,A,r]),{hoverTarget:n}}function l5A(e){const A=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null);let t=null,i=null,r;for(;r=A.nextNode();)t||(t=r),i=r;if(!t||!i)return null;const n=document.createRange();return n.setStart(t,0),n.setEnd(i,i.length),n}var pT={exports:{}};/*! @plannotator/web-highlighter v0.8.1 https://github.com/backnotprop/web-highlighter */var tZ;function c5A(){return tZ||(tZ=1,(function(e,A){(function(t,i){e.exports=i()})(window,(function(){return(function(t){var i={};function r(n){if(i[n])return i[n].exports;var a=i[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,r),a.l=!0,a.exports}return r.m=t,r.c=i,r.d=function(n,a,s){r.o(n,a)||Object.defineProperty(n,a,{enumerable:!0,get:s})},r.r=function(n){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},r.t=function(n,a){if(1&a&&(n=r(n)),8&a||4&a&&typeof n=="object"&&n&&n.__esModule)return n;var s=Object.create(null);if(r.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:n}),2&a&&typeof n!="string")for(var o in n)r.d(s,o,function(g){return n[g]}.bind(null,o));return s},r.n=function(n){var a=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(a,"a",a),a},r.o=function(n,a){return Object.prototype.hasOwnProperty.call(n,a)},r.p="",r(r.s=8)})([function(t,i,r){var n,a=this&&this.__extends||(n=function(I,C){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(E,u){E.__proto__=u}||function(E,u){for(var d in u)Object.prototype.hasOwnProperty.call(u,d)&&(E[d]=u[d])})(I,C)},function(I,C){function E(){this.constructor=I}n(I,C),I.prototype=C===null?Object.create(C):(E.prototype=C.prototype,new E)}),s=this&&this.__importDefault||function(I){return I&&I.__esModule?I:{default:I}};Object.defineProperty(i,"__esModule",{value:!0}),i.eventEmitter=i.INTERNAL_ERROR_EVENT=i.UNKNOWN_IDX=i.ROOT_IDX=i.getStylesheet=i.getDefaultOptions=i.CAMEL_DATASET_SPLIT_TYPE=i.CAMEL_DATASET_IDENTIFIER_EXTRA=i.CAMEL_DATASET_IDENTIFIER=i.DATASET_SPLIT_TYPE=i.DATASET_IDENTIFIER_EXTRA=i.DATASET_IDENTIFIER=i.STYLESHEET_ID=i.LOCAL_STORE_KEY=i.ID_DIVISION=void 0;var o=s(r(11)),g=s(r(2));i.ID_DIVISION=";",i.LOCAL_STORE_KEY="highlight-mengshou",i.STYLESHEET_ID="highlight-mengshou-style",i.DATASET_IDENTIFIER="highlight-id",i.DATASET_IDENTIFIER_EXTRA="highlight-id-extra",i.DATASET_SPLIT_TYPE="highlight-split-type",i.CAMEL_DATASET_IDENTIFIER=o.default(i.DATASET_IDENTIFIER),i.CAMEL_DATASET_IDENTIFIER_EXTRA=o.default(i.DATASET_IDENTIFIER_EXTRA),i.CAMEL_DATASET_SPLIT_TYPE=o.default(i.DATASET_SPLIT_TYPE),i.getDefaultOptions=function(){return{$root:document||document.documentElement,exceptSelectors:null,wrapTag:"span",verbose:!1,style:{className:"highlight-mengshou-wrap"}}},i.getStylesheet=function(){return`
460
+ */UlA.initialize({startOnLoad:!1,securityLevel:"strict",theme:"dark",themeVariables:{primaryColor:"#3b82f6",primaryTextColor:"#f8fafc",primaryBorderColor:"#475569",lineColor:"#64748b",secondaryColor:"#1e293b",tertiaryColor:"#0f172a",background:"#1e293b",mainBkg:"#1e293b",nodeBorder:"#475569",clusterBkg:"#1e293b",clusterBorder:"#475569",titleColor:"#f8fafc",edgeLabelBackground:"#1e293b"},flowchart:{htmlLabels:!0,curve:"basis"}});const jy=.25,BT=.25,dT=8;function KKA(e){const A=e.getAttribute("viewBox");if(!A)return null;const t=A.trim().split(/[\s,]+/).map(s=>Number.parseFloat(s));if(t.length!==4||t.some(s=>Number.isNaN(s)))return null;const[i,r,n,a]=t;return n<=0||a<=0?null:{x:i,y:r,width:n,height:a}}function YKA(e){const A=e.match(/viewBox\s*=\s*"([^"]+)"/i);if(A?.[1]){const a=A[1].trim().split(/[\s,]+/).map(s=>Number.parseFloat(s));if(a.length===4&&a.every(s=>Number.isFinite(s))){const[s,o,g,l]=a;if(g>0&&l>0)return{x:s,y:o,width:g,height:l}}}const t=e.match(/\bwidth\s*=\s*"([0-9.]+)(?:px)?"/i),i=e.match(/\bheight\s*=\s*"([0-9.]+)(?:px)?"/i),r=t?.[1]?Number.parseFloat(t[1]):NaN,n=i?.[1]?Number.parseFloat(i[1]):NaN;return Number.isFinite(r)&&Number.isFinite(n)&&r>0&&n>0?{x:0,y:0,width:r,height:n}:null}function hT(e,A,t,i){const r=A.width/t,n=A.height/t,a=A.x+A.width/2,s=A.y+A.height/2,o=a-r/2+i.x,g=s-n/2+i.y;e.setAttribute("viewBox",`${o} ${g} ${r} ${n}`)}function HKA(e,A){const t=Math.max(A.width,1),i=Math.max(A.height,1),r=e.width/e.height,n=t/i;if(r>n){const o=e.width/n,g=(o-e.height)/2;return{x:e.x,y:e.y-g,width:e.width,height:o}}const a=e.height*n,s=(a-e.width)/2;return{x:e.x-s,y:e.y,width:a,height:e.height}}const PKA=({block:e})=>{const A=nA.useRef(null),t=nA.useRef(null),[i,r]=nA.useState(""),[n,a]=nA.useState(null),[s,o]=nA.useState(!1),[g,l]=nA.useState(!1),I=nA.useRef(1),C=nA.useRef(!1),E=nA.useRef(null),u=nA.useRef(null),d=nA.useRef({x:0,y:0}),Q=nA.useRef({x:0,y:0}),f=nA.useRef({x:0,y:0}),p=nA.useRef(null),y=nA.useRef(null),w=nA.useRef(null),S=nA.useCallback(F=>{if(I.current=F,A.current&&u.current){const O=A.current.querySelector("svg");O instanceof SVGSVGElement&&hT(O,u.current,F,d.current)}if(p.current&&(p.current.disabled=F>=dT),y.current&&(y.current.disabled=F<=BT),w.current){const O=Math.abs(F-1)>.001;w.current.textContent=O?`${Math.round(F*100)}%`:"",w.current.hidden=!O}},[]),k=nA.useCallback(()=>{if(!A.current||!E.current)return;const F=A.current.querySelector("svg");if(!(F instanceof SVGSVGElement))return;const O=HKA(E.current,A.current.getBoundingClientRect());u.current=O,d.current={x:0,y:0},S(1),hT(F,O,1,{x:0,y:0})},[S]);nA.useEffect(()=>{let F=!1;return(async()=>{try{const P=`mermaid-${e.id}`,{svg:q}=await UlA.render(P,e.content);F||(E.current=YKA(q),r(q),a(null))}catch(P){F||(a(P instanceof Error?P.message:"Failed to render diagram"),r(""))}})(),()=>{F=!0}},[e.content,e.id]),nA.useEffect(()=>{I.current=1,E.current=null,u.current=null,d.current={x:0,y:0},l(!1)},[e.content]),nA.useEffect(()=>{if(s){l(!1);return}I.current=1,d.current={x:0,y:0},u.current=null},[s]),nA.useEffect(()=>{if(!g)return;const F=document.body.style.overflow;document.body.style.overflow="hidden";const O=P=>{P.key==="Escape"&&l(!1)};return window.addEventListener("keydown",O),()=>{document.body.style.overflow=F,window.removeEventListener("keydown",O)}},[g]),nA.useEffect(()=>{if(!i||s||!A.current)return;const F=A.current.querySelector("svg");if(!(F instanceof SVGSVGElement))return;F.style.maxWidth="none",F.style.width="100%",F.style.height="100%",F.style.display="block",F.style.filter="none",F.style.willChange="auto",F.setAttribute("width","100%"),F.setAttribute("height","100%"),F.setAttribute("preserveAspectRatio","xMidYMid meet");let O=!1;const P=()=>{if(!O)try{const z=E.current??KKA(F);if(!z)return;E.current=z,k()}catch{a("Failed to measure diagram bounds"),r("")}},q=requestAnimationFrame(()=>requestAnimationFrame(P)),Y=window.setTimeout(P,120);return()=>{O=!0,cancelAnimationFrame(q),window.clearTimeout(Y)}},[k,g,s,i]);const R=nA.useCallback(F=>{if(Math.abs(F)<.1)return;const O=F>0?-jy:jy,P=Math.max(BT,Math.min(dT,I.current+O));S(P)},[S]);nA.useEffect(()=>{if(s||!A.current)return;const F=A.current,O=P=>{Math.abs(P.deltaY)<.1||(P.preventDefault(),R(P.deltaY))};return F.addEventListener("wheel",O,{passive:!1}),()=>{F.removeEventListener("wheel",O)}},[R,s]),nA.useEffect(()=>{if(s||!g)return;const F=O=>{if(!O.ctrlKey&&!O.metaKey||!t.current)return;const P=O.target;!(P instanceof Node)||!t.current.contains(P)||(O.preventDefault(),O.stopPropagation(),R(O.deltaY))};return window.addEventListener("wheel",F,{passive:!1,capture:!0}),()=>{window.removeEventListener("wheel",F,{capture:!0})}},[R,g,s]);const b=nA.useCallback(()=>{S(Math.min(I.current+jy,dT))},[S]),N=nA.useCallback(()=>{S(Math.max(I.current-jy,BT))},[S]),T=nA.useCallback(()=>{k()},[k]);nA.useEffect(()=>{if(s||!A.current||!E.current||typeof ResizeObserver>"u")return;const F=new ResizeObserver(()=>{Math.abs(I.current-1)>.001||k()});return F.observe(A.current),()=>F.disconnect()},[k,g,s,i]);const L=nA.useCallback(F=>{F.button===0&&(F.preventDefault(),C.current=!0,Q.current={x:F.clientX,y:F.clientY},f.current={...d.current},A.current&&(A.current.style.cursor="grabbing"))},[]),K=nA.useCallback(F=>{if(!C.current||!A.current||!u.current)return;const O=A.current.querySelector("svg");if(!(O instanceof SVGSVGElement))return;const P=O.getBoundingClientRect(),q=u.current,Y=I.current,z=q.width/Y/P.width,j=q.height/Y/P.height,X=F.clientX-Q.current.x,_=F.clientY-Q.current.y;d.current={x:f.current.x-X*z,y:f.current.y-_*j},hT(O,q,Y,d.current)},[]),H=nA.useCallback(()=>{C.current&&(C.current=!1,A.current&&(A.current.style.cursor="grab"))},[]);if(n)return D.jsxs("div",{className:"my-5 rounded-lg border border-destructive/30 bg-destructive/5 overflow-hidden",children:[D.jsxs("div",{className:"px-3 py-2 bg-destructive/10 border-b border-destructive/20 flex items-center gap-2",children:[D.jsx("svg",{className:"w-4 h-4 text-destructive",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"})}),D.jsx("span",{className:"text-xs text-destructive font-medium",children:"Mermaid Error"})]}),D.jsx("pre",{className:"p-3 text-xs text-destructive/80 overflow-x-auto",children:n}),D.jsx("pre",{className:"p-3 text-xs text-muted-foreground bg-muted/30 border-t border-border/30 overflow-x-auto",children:D.jsx("code",{children:e.content})})]});const x=D.jsxs("div",{className:`absolute top-2 right-2 flex flex-col gap-1 items-center z-10 ${g?"opacity-100":"opacity-0 group-hover:opacity-100 transition-opacity"}`,children:[D.jsx("button",{onClick:()=>o(!s),className:"p-1.5 rounded-md bg-muted/85 hover:bg-muted text-muted-foreground hover:text-foreground",title:s?"Show diagram":"Show source",children:s?D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"})}):D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"})})}),!s&&i&&D.jsxs(D.Fragment,{children:[D.jsxs("div",{className:"flex w-10 flex-col items-center gap-0.5 bg-muted/85 rounded-md p-0.5",children:[D.jsx("button",{onClick:()=>l(!g),className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground",title:g?"Exit expanded view":"Expand diagram","aria-label":g?"Exit expanded view":"Expand diagram",children:g?D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 10h4V6M18 10h-4V6M6 14h4v4M18 14h-4v4"})}):D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5"})})}),D.jsx("button",{ref:p,onClick:b,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground disabled:opacity-30 disabled:cursor-not-allowed",title:"Zoom in","aria-label":"Zoom in",children:D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 5v14M5 12h14"})})}),D.jsx("button",{onClick:T,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground",title:"Fit to view","aria-label":"Fit to view",children:D.jsxs("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:[D.jsx("circle",{cx:"12",cy:"12",r:"4",strokeLinecap:"round",strokeLinejoin:"round"}),D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 2v4M12 18v4M2 12h4M18 12h4"})]})}),D.jsx("button",{ref:y,onClick:N,className:"p-1 rounded hover:bg-muted text-muted-foreground hover:text-foreground disabled:opacity-30 disabled:cursor-not-allowed",title:"Zoom out","aria-label":"Zoom out",children:D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 12h14"})})})]}),D.jsx("span",{ref:w,hidden:!0,className:"min-w-10 rounded bg-muted/85 px-1 py-0.5 text-[10px] text-center text-muted-foreground tabular-nums leading-tight"})]})]}),U=D.jsx("pre",{className:"rounded-lg text-[13px] overflow-x-auto bg-muted/50 border border-border/30 p-4",children:D.jsx("code",{className:"hljs font-mono language-mermaid",children:e.content})}),G=D.jsx("div",{ref:A,className:`rounded-xl bg-muted/30 border border-border/30 overflow-hidden select-none cursor-grab ${g?"h-full min-h-0":"h-[min(65vh,36rem)] min-h-[20rem]"}`,dangerouslySetInnerHTML:{__html:i},onMouseDown:L,onMouseMove:K,onMouseUp:H,onMouseLeave:H});return D.jsxs(D.Fragment,{children:[D.jsxs("div",{className:"my-5 group relative","data-block-id":e.id,children:[!g&&x,s||!i?U:g?D.jsx("div",{className:"rounded-xl border border-border/30 bg-muted/10 h-[min(65vh,36rem)] min-h-[20rem]"}):G]}),!s&&i&&g&&typeof document<"u"&&Dg.createPortal(D.jsx("div",{ref:t,className:"fixed inset-0 z-[9999] bg-background/90 backdrop-blur-sm p-4 md:p-6",children:D.jsxs("div",{className:"mx-auto flex h-full max-w-[min(96vw,110rem)] flex-col gap-3",children:[D.jsxs("div",{className:"flex items-center justify-between gap-4 text-xs text-muted-foreground",children:[D.jsx("span",{className:"truncate",children:"Mermaid diagram"}),D.jsx("button",{onClick:()=>l(!1),className:"rounded-md border border-border/60 bg-card/70 px-2.5 py-1.5 text-foreground hover:bg-card",children:"Close"})]}),D.jsxs("div",{className:"group relative flex-1 min-h-0",children:[x,G]})]})}),document.body)]})},JKA=new Set(["dot","graphviz","gv"]);function KlA(e){return e?.trim().split(/\s+/,1)[0]?.toLowerCase()}function zKA(e){return KlA(e)==="mermaid"}function qKA(e){const A=KlA(e);return A?JKA.has(A):!1}var rE={},nE={},_y={},zV;function WKA(){return zV||(zV=1,Object.defineProperty(_y,"__esModule",{value:!0}),_y.default=["abashed","abbreviated","abdominal","abiding","abject","ablaze","able","able-bodied","abnormal","abominable","aboriginal","above","abrasive","abreast","abrupt","absent","absolute","absorbed","absorbing","abstract","abundant","academic","accelerated","accelerating","acceptable","accepted","accessible","accidental","accompanying","accomplished","accountable","accumulated","accurate","accursed","accused","accustomed","aching","acknowledged","acoustic","acquired","acquisitive","acrid","acrimonious","across-the-board","acting","active","actual","acute","adamant","adaptable","adaptive","added","addictive","additional","additive","adept","adequate","adhesive","adjacent","adjoining","adjustable","administrative","admirable","admiring","admitting","adolescent","adopted","adorable","adoring","adrenal","adrift","adroit","adult","advanced","advancing","advantageous","adventurous","adverse","advisable","advisory","aesthetic","affable","affected","affectionate","affiliated","affirmative","afflicted","affluent","affordable","afire","afloat","afraid","aft","after","afterward","aged","ageless","aggravated","aggregate","aghast","agile","aging","agitated","agonized","agonizing","agrarian","agreeable","agreed","agricultural","ailing","aimless","air-conditioned","air-conditioning","airborne","airless","airtight","airy","ajar","akin","alarmed","alarming","alert","alien","alienated","alike","alive","all-american","all-important","all-night","all-out","all-powerful","all-purpose","all-time","all-white","alleged","allegorical","allergic","allied","allowable","alluring","almighty","alone","aloof","alright","altered","alternate","alternating","alternative","amateur","amateurish","amazed","amazing","amber","ambiguous","ambitious","ambivalent","amenable","amiable","amorous","amorphous","ample","amused","amusing","anachronistic","anal","analogous","analytic","analytical","anarchic","anatomical","ancestral","ancient","anemic","anesthetic","angelic","angry","anguished","angular","animated","announced","annoying","annual","anonymous","answering","antagonistic","anterior","anthropological","anti","anti-american","anti-inflation","anti-soviet","anticipated","antinuclear","antiquated","antique","antiseptic","antitank","anxious","apathetic","apocalyptic","apolitical","appalled","appalling","apparent","appealing","appellate","applicable","applied","appointed","appreciable","appreciative","apprehensive","approaching","appropriate","approved","approximate","apt","aquatic","arbitrary","arcane","arch","archaeological","archaic","arched","archetypal","architectural","arctic","ardent","arduous","arid","aristocratic","armed","armored","arms-control","aromatic","arresting","arterial","artful","articulate","articulated","artificial","artistic","ascending","ascetic","ascorbic","ashamed","ashen","askew","asleep","aspiring","assembled","assertive","assigned","assistant","associate","associated","assorted","assumed","assured","astonished","astonishing","astounded","astounding","astronomical","astute","athletic","atmospheric","atomic","atrocious","attached","attacking","attainable","attempted","attendant","attentive","attracting","attractive","attributable","auburn","audacious","audible","audio","auditory","august","auspicious","austere","authentic","authoritarian","authoritative","authorized","autobiographical","autocratic","automated","automatic","automotive","autonomous","autumnal","auxiliary","available","avant-garde","avenging","average","averse","avid","avowed","awake","aware","awash","away","awed","awesome","back","backhand","backstage","backward","bacterial","baffled","baffling","baggy","baked","balanced","bald","balding","baleful","ballistic","balmy","banal","bankrupt","banned","barbarous","barbed","bare","barefoot","barefooted","barred","barren","basic","bass","bathing","battered","beaded","beaming","bearable","bearded","beastly","beautiful","bedraggled","beefy","befuddled","beguiling","behavioral","behind-the-scenes","beige","belated","beleaguered","believable","belligerent","beloved","bemused","beneficent","beneficial","benign","bent","bereaved","bereft","bespectacled","best-known","best-selling","bestselling","bewildered","bewildering","big","big-city","big-time","bilateral","bilingual","binary","binding","biochemical","biographical","biological","bipartisan","biting","bitter","bittersweet","bizarre","black","black-and-white","black-haired","blackened","bland","blank","blasted","blatant","blazing","bleached","bleak","bleary","bleeding","blessed","blind","blinding","blinking","blissful","blistering","bloated","blocking","blond","blonde","bloodied","bloodshot","bloodstained","bloody","blooming","blue","blue-and-white","blue-black","blue-chip","blue-collar","blue-eyed","blue-gray","blue-green","bluish","blunt","blurred","bodily","bogus","boiled","boiling","boisterous","bold","bony","booming","bored","boring","born","born-again","borrowed","botanical","bottled","bottom","bottomless","bouncing","bound","boundless","bountiful","bourgeois","bowed","box-office","boyish","bracing","braided","branching","brand-new","brash","brassy","brave","brawny","brazen","breathless","breathtaking","breezy","bridal","brief","bright","bright-eyed","brilliant","brisk","brittle","broad","broad-shouldered","broke","broken","bronchial","brooding","brotherly","brown","brownish","bruised","brusque","brutal","bubbling","bubbly","budding","budgetary","bulbous","bulging","bulky","bulletproof","bumper","bumpy","buoyant","burdensome","bureaucratic","burgeoning","buried","burly","burned","burned-out","burning","burnished","burnt","bushy","businesslike","busing","busted","bustling","busy","button-down","buxom","buzzing","bygone","caged","calculated","called","callous","calm","cancerous","candid","canned","canny","cantankerous","capable","capital","capitalist","capitalistic","capricious","captive","cardboard","cardiac","cardinal","cardiovascular","carefree","careful","careless","caring","carnival","carpeted","carved","cast","cast-iron","casual","catastrophic","causal","caustic","cautionary","cautious","cavernous","ceaseless","celebrated","celestial","cellular","centennial","central","centralized","centre-fire","centrifugal","centrist","ceramic","cerebral","ceremonial","certain","certified","challenging","change-minimizing","changed","changing","chaotic","characteristic","charged","charging","charismatic","charitable","charming","charred","chartered","chaste","chastened","cheap","checked","checkered","cheerful","cheering","cheery","chemical","cherished","chief","childlike","chilled","chilling","chilly","chipped","chopped","choppy","choral","chosen","chronic","chronological","chunky","cinematic","circular","circulating","circulatory","circumstantial","citywide","civic","civil","civilian","civilized","clammy","clandestine","classic","classical","classified","classy","clean","clean-cut","clear","clear-cut","cleared","clearing","clenched","clerical","clever","climactic","climatic","clinging","clinical","clipped","close","closed","closed-circuit","closing","cloudless","cloudy","clumsy","cluttered","coarse","coastal","cobbled","coded","coed","coercive","cognitive","coherent","cohesive","coiled","coincidental","cold","cold-blooded","collaborative","collapsing","collected","collective","collegiate","colonial","colored","colorful","colorless","colossal","coloured","comatose","combative","combined","comely","comfortable","comforting","comic","comical","coming","commanding","commendable","commensurate","commercial","committed","common","commonplace","communal","compact","comparable","comparative","compassionate","compatible","compelling","compensatory","competent","competing","competitive","complacent","complementary","complete","completed","complex","compliant","complicated","complimentary","composite","compositional","comprehensible","comprehensive","compressed","compulsory","computerized","concave","concealed","conceivable","concentrated","concentric","conceptual","concerned","concerted","conciliatory","concise","concluding","conclusive","concomitant","concrete","concurrent","condemned","condescending","conditional","conditioned","conducive","confident","confidential","confined","confirmed","conflicting","confused","confusing","congenial","congenital","congested","congressional","conic","conical","connected","connecting","connective","conquered","conquering","conscientious","conscious","consecutive","consequent","conservation","conservative","considerable","considerate","consistent","consoling","conspicuous","conspiratorial","constant","constitutional","constructive","consular","consulting","consuming","consummate","contagious","contaminated","contemplative","contemporary","contemptible","contemptuous","contending","content","contented","contentious","contested","continental","contingent","continual","continued","continuing","continuous","contraceptive","contracting","contractual","contradictory","contrary","contrasting","contributing","contrite","contrived","controlled","controlling","controversial","convenient","conventional","conversational","converted","convertible","convicted","convinced","convincing","convulsive","cooked","cool","cooling","cooperative","coordinated","copious","cordial","corned","corny","coronary","corporate","correct","correctional","corrective","corresponding","corrosive","corrugated","cosmetic","cosmic","cosmopolitan","costly","counterfeit","counterproductive","countless","courageous","court-ordered","courteous","courtly","covered","covert","coveted","coy","cozy","cracked","cracking","crackling","crafty","craggy","cramped","cranky","crashing","crass","crawling","crazed","crazy","creaking","cream-colored","creamy","creased","created","creative","credible","creeping","crimson","crippled","crisp","critical","cross-country","cross-legged","crossed","crowded","crucial","crumbling","crummy","crumpled","crushed","crushing","crusty","cryptic","crystalline","cubic","culinary","cultivated","cultural","cultured","cumbersome","cumulative","cunning","cupped","curious","curled","curly","current","cursory","curt","curtained","curved","curving","customary","cut-rate","cute","cutting","cyclical","cylindrical","daily","dainty","damaged","damn","damned","damp","dangerous","dank","dapper","daring","dark","dark-blue","dark-eyed","dark-haired","darkened","darkening","darling","darting","dashing","dated","daunting","day-care","day-to-day","dazed","dazzling","deaf","deafening","dear","deathly","debatable","debilitating","decadent","decaying","deceased","decent","decentralized","decided","decision-making","decisive","declared","declining","decorated","decorative","decorous","decreased","decreasing","decrepit","dedicated","deductible","deep","deep-seated","deepening","defeated","defenseless","defensible","defensive","deferential","deferred","defiant","deficient","definite","definitive","deformed","deft","defunct","degenerate","degenerative","dejected","delayed","delectable","deliberate","delicate","delicious","delighted","delightful","delinquent","delirious","demanding","demeaning","demented","democratic","demographic","demonic","demure","dense","dental","departed","departing","departmental","dependable","dependent","depleted","deplorable","deposed","depressed","derelict","derisive","descending","descriptive","deserted","deserving","designated","desirable","desired","desolate","despairing","desperate","despicable","despised","despondent","destitute","destructive","desultory","detached","detailed","detectable","deteriorating","determined","determining","detrimental","devastating","developed","developing","developmental","deviant","devious","devoid","devoted","devout","diagnostic","diagonal","dialectical","dictatorial","dietary","different","differential","differing","diffident","diffuse","digestive","digging","digital","dignified","dilapidated","diligent","dim","diminished","diminishing","diminutive","dingy","diplomatic","dire","direct","disabled","disappearing","disappointing","disapproving","disastrous","discarded","discernible","discerning","disciplinary","disciplined","disconcerting","discontented","discordant","discouraging","discredited","discreet","discrete","discretionary","discriminatory","disembodied","disenchanted","disguised","disjointed","dismayed","disorderly","disorganized","disoriented","disparate","displaced","displeased","disposable","disproportionate","disputed","disquieting","disreputable","disruptive","dissenting","dissident","dissimilar","distant","distinct","distinctive","distinguishable","distinguished","distinguishing","distorted","distraught","distressed","distressing","disturbed","disturbing","divergent","diverse","diversified","divided","dividing","divine","diving","divisional","divisive","dizzy","dizzying","do-it-yourself","docile","doctoral","doctrinaire","doctrinal","dogged","dogmatic","domed","domestic","doomed","door-to-door","dormant","double","double-action","double-breasted","double-digit","doubtful","dour","down","down-to-earth","downcast","downhill","downright","downtown","downward","drab","drained","dramatic","drastic","dreaded","dreamlike","dreamy","dreary","dried","driven","driving","droll","drooping","drowning","drowsy","drugged","drunken","dry","dual","dubious","due","dull","duplicate","durable","dusky","dusty","dutiful","dwindling","dyed","dying","dynamic","dynastic","eager","early","early-morning","earned","earnest","earthen","earthly","earthy","eastern","easy","easygoing","ebullient","eccentric","ecclesiastical","echoing","eclectic","ecological","economic","economical","ecstatic","ecumenical","edgy","edible","editorial","educated","educational","eerie","effective","efficient","effortless","egalitarian","eight-hour","eight-year","eighteenth-century","elaborate","elastic","elated","elderly","elected","elective","electoral","electric","electrical","electromagnetic","electronic","electrostatic","elegant","elemental","elementary","elevated","eligible","elitist","elongated","eloquent","elusive","embarrassed","embarrassing","embattled","emblematic","embroidered","embryonic","emerging","emeritus","eminent","emotional","emphatic","empirical","empty","empty-handed","enchanted","enchanting","enclosed","encouraging","endangered","endearing","endemic","endless","enduring","energetic","enforced","engaged","engaging","engraved","enhanced","enigmatic","enjoyable","enlarged","enlightened","enormous","enraged","enriched","ensconced","ensuing","enterprising","entertaining","enthusiastic","enticing","entire","entrenched","entrepreneurial","enviable","envious","environmental","ephemeral","epic","equal","equatorial","equestrian","equitable","equivalent","eroding","errant","erratic","erroneous","ersatz","erstwhile","escalating","escaping","esoteric","essential","established","esteemed","esthetic","estimated","estranged","eternal","ethereal","ethical","eucalyptus","euphoric","evangelical","evasive","even","eventual","ever-increasing","ever-present","everlasting","everyday","evident","evocative","evolutionary","exact","exacting","exaggerated","exalted","excellent","exceptional","excess","excessive","excited","exciting","exclusive","excruciating","executive","exemplary","exempt","exhausted","exhausting","exhaustive","exhilarated","exhilarating","exiled","existential","existing","exorbitant","exotic","expanded","expanding","expansive","expectant","expected","expedient","expendable","expensive","experienced","experimental","expert","explanatory","explicit","exploratory","explosive","exposed","express","expressed","expressionless","expressive","exquisite","extant","extended","extensive","exterior","external","extinct","extra","extracurricular","extraneous","extraordinary","extravagant","extreme","extremist","extrinsic","exuberant","exultant","fabled","fabulous","face-to-face","faceless","facial","facile","factional","factual","faded","fading","failed","failing","faint","fair","faithful","fallen","falling","fallow","false","faltering","famed","familial","familiar","famished","famous","fanatical","fanciful","fancy","fantastic","far-flung","far-off","far-reaching","farcical","farfetched","fascinated","fascinating","fascist","fashionable","fast","fast-food","fast-growing","fast-moving","fastidious","fatal","fated","fateful","fatherly","fatty","fatuous","faulty","favorable","favored","favorite","favourable","favourite","feal","fearful","fearless","fearsome","feasible","feathered","feathery","featureless","federal","feeble","feeding","feisty","fellow","feminine","ferocious","fervent","festive","fetal","fetid","feudal","feverish","fickle","fictional","fictitious","fierce","fiery","figurative","filmy","final","financial","fine","finished","finishing","finite","firm","first-aid","first-class","first-quarter","first-rate","first-time","first-year","firsthand","fiscal","fishy","fit","fitful","fitting","five-day","five-minute","five-year","fixed","flabbergasted","flabby","flagrant","flailing","flaky","flamboyant","flaming","flash","flashing","flashy","flat","flattened","flattered","flattering","flawless","fledgling","fleeing","fleeting","fleshy","flexible","flickering","flimsy","flipping","floating","floppy","floral","florid","flourishing","flowered","flowering","flowery","flowing","fluent","fluffy","fluorescent","flushed","flustered","fluted","fluttering","flying","foaming","focal","foggy","folded","folding","follow-up","following","fond","foolhardy","foolish","forbidding","forced","forceful","foregoing","foreign","foreign-policy","forensic","foreseeable","forested","forged","forgiving","forgotten","forlorn","formal","formative","formidable","formless","forthcoming","forthright","fortified","fortuitous","fortunate","forward","foster","foul","founding","four-day","four-hour","four-year","fourth-quarter","fractured","fragmentary","fragmented","fragrant","frail","framed","frank","frantic","fraternal","fraudulent","fraught","frayed","freak","freckled","free","free-lance","freezing","french","frenetic","frenzied","frequent","fresh","freshwater","fretful","friendly","frightened","frightening","frightful","frigid","fringed","frivolous","front","front-line","front-page","frontal","frosted","frosty","frozen","fruitful","fruitless","frustrated","frustrating","full","full-blown","full-fledged","full-length","full-page","full-scale","full-size","full-time","fun","functional","functioning","fund-raising","fundamental","fundamentalist","funded","funky","funny","furious","furnished","furry","furtive","fussy","futile","future","futuristic","fuzzy","galactic","gallant","galloping","galvanized","gaping","garbled","gargantuan","garish","garrulous","gaseous","gastrointestinal","gathered","gaudy","gaunt","gebling","general","generalized","generating","generative","generic","generous","genetic","genital","genteel","gentle","gentlemanly","genuine","geographic","geographical","geological","geometric","geopolitical","ghastly","ghostly","giant","gibberish","giddy","gifted","gigantic","gilded","ginger","girlish","given","glacial","glad","glamorous","glaring","glassy","glazed","gleaming","gleeful","glib","glistening","glittering","global","gloomy","glorious","glossy","gloved","glowing","glum","gnarled","goddam","goddamn","goddamned","going","gold","golden","good","good-by","good-looking","good-natured","good-sized","goodly","gorgeous","gory","governing","governmental","graceful","gracious","gradual","grainy","grammatical","grand","grandiose","graphic","grassy","grateful","gratifying","grating","gratuitous","grave","gravitational","gray","gray-haired","graying","grayish","grazing","greasy","great","greedy","green","greenish","gregarious","grey","grieving","grievous","grilled","grim","grimy","grinding","grinning","gripping","grisly","gritty","grizzled","grizzly","groggy","grotesque","ground","ground-floor","growing","grown-up","grubby","grudging","grueling","gruesome","gruff","guaranteed","guarded","gubernatorial","guided","guiding","gullible","guttural","habitual","haggard","hairless","hairy","half-empty","halfway","hallowed","halting","hand-held","hand-to-hand","handicapped","handmade","handsome","handwritten","handy","hanging","haphazard","hapless","happy","hard","hard-boiled","hard-core","hard-line","hard-nosed","hard-pressed","hard-working","hardened","hardworking","hardy","harmless","harmonious","harried","harrowing","harsh","hashish","hasty","hated","hateful","haughty","haunted","haunting","hawkish","hazardous","hazel","hazy","head","headlong","heady","healing","healthful","healthy","heart-shaped","heartbreaking","heartening","heartfelt","heartless","hearty","heated","heathen","heavenly","heavy","heavy-duty","hectic","heedless","hefty","heightened","helmeted","helpful","hereditary","heretical","heroic","hesitant","heterogeneous","hidden","hierarchical","high","high-ceilinged","high-fiber","high-heeled","high-level","high-pitched","high-powered","high-pressure","high-priced","high-quality","high-ranking","high-rise","high-risk","high-school","high-speed","high-tech","high-technology","hilarious","hilly","hind","hired","historic","historical","hit-and-run","hoarse","holding","hollow","holy","homeless","homemade","homesick","honest","honorable","honorary","honored","hooded","hopeful","hopeless","horizontal","hormonal","horn-rimmed","horrendous","horrible","horrid","horrified","horse-drawn","hospitable","hot","hour-long","hourly","howling","huge","hulking","human","humane","humanistic","humanitarian","humble","humid","humiliating","humorless","humorous","hunched","hungry","hunted","hurried","hurt","hurtful","hushed","husky","hybrid","hydraulic","hydroelectric","hypnotic","hypodermic","hypothetical","hysterical","ice-cold","iced","icy","ideal","idealistic","identical","identifiable","ideological","idiosyncratic","idiotic","idle","idyllic","ignorant","ill","ill-advised","ill-fated","ill-fitting","illegitimate","illicit","illiterate","illogical","illuminated","illuminating","illusory","illustrated","illustrious","imaginable","imaginary","imaginative","imagined","immaculate","immediate","immense","imminent","immobile","immortal","immune","immutable","impartial","impassable","impassioned","impassive","impatient","impeccable","impending","impenetrable","imperative","imperceptible","imperial","imperialist","imperious","impersonal","impertinent","impervious","impetuous","implacable","implausible","implicit","implied","important","imported","imposing","impossible","impoverished","impractical","imprecise","impressed","impressive","imprisoned","improbable","impromptu","improper","improved","improving","improvised","impulsive","impure","in-depth","in-house","inaccessible","inactive","inane","inanimate","inarticulate","inaudible","incalculable","incandescent","incapable","incendiary","incessant","incidental","incipient","incisive","inclined","inclusive","incoherent","income-tax","incoming","incomparable","incompatible","incompetent","incomplete","incomprehensible","inconceivable","inconclusive","incongruous","inconsequential","inconsistent","inconspicuous","incorrect","increased","increasing","incredible","incredulous","incremental","incriminating","incumbent","incurable","indebted","indefatigable","indefinite","indelible","independent","indestructible","indeterminate","indicative","indifferent","indigenous","indigent","indignant","indirect","indiscriminate","indispensable","indistinct","indistinguishable","individual","individualistic","indomitable","indoor","indulgent","industrial","industrialized","industrious","ineffable","ineffective","ineffectual","inept","inert","inescapable","inevitable","inexhaustible","inexorable","inexpensive","inexperienced","inexplicable","infallible","infamous","infantile","infatuated","infected","infectious","infernal","infinite","infirm","inflamed","inflammatory","inflated","inflationary","inflexible","influential","informal","informative","informed","infrared","infrequent","ingenious","ingratiating","inherent","inherited","inhospitable","inimical","initial","injured","inlaid","inland","innate","inner","inner-city","innermost","innocent","innocuous","innovative","innumerable","inordinate","inorganic","inquisitive","insane","inscrutable","insensitive","inside","insignificant","insistent","insoluble","inspirational","inspired","inspiring","instant","instantaneous","instinctive","institutional","institutionalized","instructional","instructive","instrumental","insufferable","insulated","insurgent","insurmountable","intact","intangible","integral","integrated","intellectual","intelligent","intelligible","intended","intense","intensified","intensive","intent","intentional","inter","interchangeable","intercontinental","interdependent","interested","interesting","interim","interior","interlocking","intermediate","intermediate-range","interminable","intermittent","internal","international","interpersonal","interrelated","interstate","interstellar","intervening","intimidating","intolerable","intolerant","intractable","intransigent","intravenous","intrepid","intricate","intriguing","intrinsic","introductory","intrusive","intuitive","invading","invalid","invaluable","inventive","inverted","investigative","investing","invigorating","invincible","invisible","inviting","involuntary","involved","invulnerable","inward","irate","iridescent","ironic","irrational","irregular","irrelevant","irreparable","irreplaceable","irrepressible","irresistible","irresponsible","irreverent","irreversible","irrevocable","irritable","irritated","irritating","isolated","issuing","itinerant","jaded","jagged","jaunty","jerky","jeweled","jittery","joint","jolly","journalistic","jovial","joyful","joyous","jubilant","judicial","judicious","juicy","jumbo","jumping","jumpy","junior","just","justifiable","justified","keen","khaki","kind","kindly","kindred","kinetic","kinky","knitted","knotted","knowing","knowledgeable","known","kosher","labored","laborious","laconic","lacy","lame","land-based","landed","landless","languid","lanky","large","large-scale","lascivious","last-minute","lasting","late","late-night","latent","lateral","latter-day","laughable","laughing","lavish","law-abiding","law-enforcement","lawful","lawless","lax","lay","lazy","leaded","leaden","leading","leafless","leafy","leaky","lean","learned","leathery","leery","left","left-hand","left-handed","left-wing","leftover","legal","legendary","legislative","legitimate","leisurely","lengthy","lenient","lesser","lethal","level","leveraged","lexical","liable","liberal","liberated","liberating","licensed","life-size","lifeless","lifelong","light","lighted","lightweight","likable","like","likely","limited","limiting","limitless","limp","linear","lined","lingering","linguistic","linked","liquid","listed","listening","listless","literal","literary","literate","lithe","little","little-known","liturgical","live","lively","livid","living","living-room","loaded","loathsome","local","locked","lofty","logical","logistical","lone","lonely","lonesome","long","long-awaited","long-distance","long-haired","long-legged","long-lost","long-range","long-running","long-standing","long-term","long-time","longstanding","longterm","longtime","looking","looming","loose","lopsided","lordly","losing","loud","lousy","lovable","loved","lovely","loving","low","low-cost","low-income","low-key","low-level","lower-class","lowered","lowly","loyal","lucid","lucky","lucrative","ludicrous","lukewarm","lumbering","luminous","lunar","lunatic","lurid","lurking","luscious","lush","luxuriant","luxurious","luxury","lyric","lyrical","macabre","machine-gun","macho","mad","magic","magical","magnetic","magnificent","maiden","maimed","main","mainstream","majestic","major","makeshift","malevolent","malignant","mammoth","man-made","manageable","managerial","managing","mandatory","maniacal","manic","manicured","manifest","manifold","manipulative","manly","manned","manual","manufactured","marching","marginal","marine","maritime","marked","marketable","maroon","married","marshy","martial","marvellous","marvelous","masculine","mashed","masked","mass","mass-produced","massed","massive","masterful","masterly","matched","matching","material","materialistic","maternal","mathematical","mating","matter-of-fact","mature","maudlin","mauve","maximum","mayoral","meager","meaningful","meaningless","measurable","measured","measuring","meaty","mechanical","mechanized","median","medical","medicinal","medieval","mediocre","meditative","medium","medium-size","medium-sized","meek","melancholy","mellow","melodic","melodramatic","melted","memorable","menacing","menial","mental","mercantile","merciful","merciless","mercurial","mere","merry","messy","metabolic","metallic","metaphoric","metaphorical","metaphysical","methodical","methodological","meticulous","metric","metropolitan","microscopic","middle","middle-aged","middle-class","middle-income","midwestern","mighty","migratory","mild","mild-mannered","militant","military","military-industrial","milky","million-dollar","mindful","mindless","mingled","miniature","minimal","minimum","ministerial","mint","minuscule","minute","miraculous","mirrored","miscellaneous","mischievous","misguided","misleading","misplaced","missed","misshapen","missing","mistaken","misty","mixed","mobile","mock","mocking","moderate","modern","modern-day","modernist","modest","modified","moist","molecular","molten","momentary","momentous","monastic","monetary","monogrammed","monolithic","monotonous","monstrous","monthly","monumental","moody","moonlit","moot","moral","morbid","morose","mortal","mossy","motionless","motivated","motley","mottled","mountainous","mounted","mounting","mournful","movable","moving","muddled","muddy","muffled","multicolored","multilateral","multinational","multiple","mundane","municipal","murdered","murderous","murky","muscular","mushy","musical","musty","mute","muted","mutilated","mutual","mysterious","mystic","mystical","mystified","mythic","mythical","mythological","nagging","naive","named","nameless","narrative","narrow","nasal","national","nationalist","nationalistic","nationalized","nationwide","native","natural","naturalistic","nauseous","nautical","naval","near","nearby","neat","nebulous","necessary","needful","needless","needy","negative","negligent","negligible","negotiable","negotiated","neighboring","nervous","neural","neurological","neurotic","neutral","never-ending","new","new-found","newborn","newfound","newsworthy","next-door","nice","nightly","nightmarish","nimble","nineteenth-century","no-fault","no-nonsense","noble","nocturnal","noisy","nomadic","nominal","non-communist","nonaligned","nondescript","nonexistent","nonpartisan","nonpolitical","nonprofit","nonstop","normal","normative","northeastern","northern","northwestern","nostalgic","notable","noted","noteworthy","noticeable","notorious","novel","noxious","nuclear","numb","numbered","numerical","numerous","nursing","nutritional","nutritious","nuts","nutty","obedient","obese","objectionable","objective","obligatory","obliging","oblique","oblivious","obnoxious","obscure","observable","observant","observed","obsessive","obsolete","obstinate","obvious","occasional","occupational","occupied","octagonal","odd","odious","off","off-duty","offbeat","offending","offhand","official","offshore","oil-producing","oil-rich","oily","old","old-fashioned","old-line","old-time","olive","ominous","omnipotent","omnipresent","oncoming","one-day","one-man","one-party","one-room","one-sided","one-story","one-time","one-way","one-year","onerous","onetime","ongoing","only","onstage","opaque","open","open-air","open-ended","opened","operatic","operational","operative","opposing","opposite","oppressed","optical","optimal","optimistic","optimum","optional","opulent","orange","orbital","orchestral","ordered","orderly","ordinary","organic","organizational","organized","organizing","oriental","original","ornamental","ornate","orphaned","orthodox","orthopedic","ostensible","ostentatious","other","out-of-town","outdated","outdoor","outer","outgoing","outlandish","outlawed","outlying","outmoded","outraged","outrageous","outright","outside","outspoken","outstanding","outstretched","outward","oval","over-all","over-the-counter","overall","overcast","overcome","overcrowded","overdue","overgrown","overhanging","overhead","overheated","overjoyed","overlapping","overnight","overpowering","overriding","overseas","oversized","overstuffed","overt","overturned","overweight","overwhelming","overworked","packaged","packed","padded","paid","pained","painful","painless","painstaking","painted","palatable","palatial","pale","pallid","palpable","paltry","panicky","papal","paradoxical","parallel","paralyzed","paramilitary","paramount","paranoid","parasitic","parched","parental","parked","parliamentary","parochial","part-time","partial","participating","participatory","particular","partisan","passable","passing","passionate","passive","past","pastel","pastoral","paternal","patient","patriarchal","patriotic","patterned","paved","payable","paying","peace-keeping","peaceable","peaceful","pearly","peculiar","pedagogical","penal","pending","penetrating","penniless","pensive","pent-up","perceived","perceptible","perceptive","perceptual","peremptory","perennial","perfect","perfumed","perfunctory","periodic","peripheral","permanent","permissible","permissive","pernicious","perpetual","perplexed","perplexing","persistent","personal","persuasive","pert","pertinent","pervasive","pessimistic","petite","petrified","petty","petulant","phantom","pharmaceutical","phenomenal","philosophic","philosophical","phonetic","phony","photographic","physical","physiological","pictorial","picturesque","piercing","pinched","pink","pinkish","pioneering","pious","pissed","pitched","pitiful","pitiless","pivotal","placid","plain","plaintive","planetary","planned","planted","plausible","playful","playing","pleasant","pleased","pleasing","pleasurable","pleated","plentiful","pliable","plump","plush","poetic","poignant","pointed","pointless","poisonous","polar","polished","polite","political","polluted","pompous","ponderous","poorly","popular","populist","populous","porous","portable","portentous","portly","posh","positive","possible","post-world","postal","postwar","potent","potential","potted","pouring","powdered","powerful","powerless","practicable","practical","practiced","practicing","pragmatic","precarious","preceding","precious","precipitous","precise","precocious","predatory","predictable","predicted","predominant","preferable","preferential","preferred","prehistoric","prejudiced","preliminary","premier","premium","prenatal","preoccupied","prep","preparatory","prepared","preposterous","prescribed","present","present-day","presentable","preserving","presidential","presiding","pressing","prestigious","presumed","presumptuous","pretentious","pretrial","pretty","prevailing","prevalent","preventive","previous","prewar","priceless","prickly","priestly","prim","primal","primary","prime","primeval","primitive","primordial","princely","principal","printed","prior","pristine","private","privileged","privy","prized","pro","probable","probing","procedural","processed","prodigious","producing","productive","profane","professional","proficient","profitable","profound","progressive","projected","projecting","projective","proletarian","prolific","prolonged","prominent","promiscuous","promised","promising","promotional","prompt","prone","pronounced","proper","prophetic","proportional","proportionate","proposed","proprietary","prosaic","prospective","prosperous","prostrate","protected","protectionist","protective","protracted","protruding","proud","proven","proverbial","provincial","provisional","provocative","prudent","psychedelic","psychic","psychological","pubic","public","public-relations","publicized","published","pudgy","puffing","puffy","pulmonary","pungent","punishable","punishing","punitive","pure","puritanical","purple","purplish","purported","purposeful","pushy","putative","puzzled","puzzling","quaint","qualified","qualifying","qualitative","quantitative","quarterly","queasy","queer","questioning","quick","quiet","quilted","quintessential","quirky","quivering","quixotic","quizzical","rabid","racial","racing","radiant","radical","radioactive","ragged","raging","rainy","raised","rambling","rampant","ramshackle","rancid","random","rapacious","rapid","rapt","rare","rash","rasping","rational","raucous","ravaged","ravenous","raw","reactionary","readable","ready","ready-made","real","real-estate","real-life","realistic","rear","rear-view","rearing","reasonable","reasoned","reassuring","recalcitrant","receding","received","receiving","recent","receptive","reciprocal","reckless","recognizable","recognized","recommended","recorded","recreational","rectangular","recurrent","recurring","red","red-faced","red-haired","red-hot","reddish","reduced","redundant","refined","reflected","reflective","reflex","reformed","reformist","refreshing","regal","regimental","regional","registered","regressive","regular","regulated","regulatory","reigning","related","relative","relaxed","relaxing","released","relentless","relevant","reliable","relieved","religious","reluctant","remaining","remarkable","remedial","remembered","reminiscent","remote","renewed","renowned","rented","repeated","repeating","repetitious","repetitive","replete","reported","reprehensible","representative","repressed","repressive","reproductive","republican","repugnant","reputable","reputed","required","requisite","resentful","reserve","reserved","resident","residential","residual","resigned","resilient","resistant","resolute","resonant","resounding","resourceful","respectable","respected","respectful","respective","respiratory","resplendent","responsible","responsive","restful","restive","restless","restored","restoring","restrained","restraining","restricted","restrictive","resultant","resulting","retail","retaliatory","reticent","retired","retiring","retreating","retroactive","retrospective","returning","revealing","revered","reverent","reverse","revised","revived","revolting","revolutionary","revolving","rewarding","rhetorical","rheumatic","rheumatoid","rhythmic","ribbed","rich","rickety","rife","right","right-hand","right-wing","righteous","rightful","rigid","rigorous","riotous","ripe","ripped","rippling","rising","risky","ritual","rival","roaring","roast","roasted","roasting","robust","rock-and-roll","rocking","rocky","rolled","rolling","romantic","rosy","rotating","rotting","rough","round","round-trip","rounded","rousing","routine","roving","rowdy","royal","rubber","rubbery","ruddy","rudimentary","rueful","ruffled","rugged","ruined","ruinous","ruling","rumpled","run-down","runaway","running","rural","rushing","rusted","rustic","rusty","ruthless","rutted","sacred","sacrificial","sacrosanct","sad","safe","said","saintly","salaried","salient","sallow","salted","salty","salutary","sandy","sane","sanguine","sanitary","sardonic","satiric","satirical","satisfactory","satisfied","satisfying","saturated","saucy","savage","savvy","scaly","scant","scanty","scarce","scared","scarlet","scarred","scary","scathing","scattered","scenic","scented","scheduled","scholarly","scholastic","science-fiction","scientific","scorched","scornful","scrambled","scraping","scrawny","screaming","scriptural","scruffy","scrupulous","sealed","searching","searing","seasonal","seasoned","seated","secluded","second-class","second-floor","second-hand","second-rate","secondary","secondhand","secret","secretarial","secretive","sectarian","sectional","secular","secure","sedate","sedentary","seedy","seeming","segregated","seismic","select","selected","selective","self-appointed","self-assured","self-centered","self-confident","self-conscious","self-contained","self-effacing","self-evident","self-fulfilling","self-help","self-imposed","self-indulgent","self-made","self-proclaimed","self-righteous","self-satisfied","self-serving","self-styled","self-sufficient","self-supporting","selfless","semantic","semifinal","senatorial","senior","sensational","senseless","sensible","sensitive","sensory","sensuous","sentencing","sentimental","separate","separated","separatist","serene","serial","serious","settled","seven-year","seventeenth-century","severe","severed","shabby","shaded","shadowed","shadowy","shady","shaggy","shaken","shaky","shallow","shaped","shapeless","shapely","shared","sharp","sharpened","shattered","shattering","shaven","shaving","sheepish","sheer","sheltered","shifting","shimmering","shining","shiny","shocked","shocking","shoddy","short","short-lived","short-range","short-sleeved","short-term","shortsighted","shouting","showy","shredded","shrewd","shrill","shrinking","shrunken","shuddering","shut","shuttered","shy","sick","sidelong","signed","significant","silent","silken","silky","silly","silver","silver-haired","silvery","similar","simmering","simple","simplified","simplistic","simulated","simultaneous","sincere","sinewy","sinful","single","singular","sinister","sinuous","six-day","six-foot","six-month","six-year","sizable","sizzling","skeletal","skeptical","sketchy","skilled","skillful","skimpy","skinny","skittish","slack","slain","slanted","slatted","sleazy","sled","sleek","sleeping","sleepless","sleepy","sleeveless","slender","sliced","slick","sliding","slight","slim","slimy","slippery","sloping","sloppy","slow","slow-moving","sluggish","sly","small","small-scale","small-time","small-town","smart","smashed","smashing","smiling","smoked","smokeless","smoking","smoky","smoldering","smooth","smug","snap","snappy","snarling","sneaky","snow-covered","snowy","snug","so-called","soaked","soaring","sober","sobering","socalled","sociable","social","socialist","societal","socioeconomic","sociological","sodden","soft","soft-spoken","soggy","soiled","solar","sole","solemn","solicitous","solid","solitary","soluble","somber","sometime","sonic","soothing","sooty","sophisticated","sordid","sore","sorrowful","sorry","sortal","sound","soundless","sour","southeastern","southern","southwestern","sovereign","soybean","spacious","spare","sparkling","sparse","spatial","speaking","special","special-interest","specialized","specific","specified","speckled","spectacular","spectral","speculative","speechless","speeding","speedy","spellbound","spent","spherical","spicy","spiky","spilled","spinal","spindly","spinning","spiral","spirited","spiritual","spiteful","splendid","splintered","split","spoiled","spoken","spongy","sponsored","spontaneous","spooky","sporadic","sporting","sporty","spotless","spotted","spotty","sprawling","spreading","springy","spurious","square","squat","squeaky","stable","stacked","staggering","staid","stained","stained-glass","stainless","stale","stalled","stalwart","stamped","stand-up","standard","standardized","standby","starched","stark","starry","startled","startling","starved","starving","state-owned","state-run","stated","stately","statewide","static","stationary","statistical","statutory","staunch","steadfast","steady","steamed","steaming","steamy","steely","steep","stellar","step-by-step","stepped-up","stereotyped","sticking","sticky","stiff","still","stimulating","stinging","stingy","stinking","stirring","stocky","stolen","stolid","stoned","stony","stopped","stored","stormy","stout","straight","straight-backed","straightforward","strained","stranded","strange","strangled","strapping","strategic","stray","streamlined","strenuous","stressful","stricken","strict","strident","striking","stringent","stringy","striped","strong","strong-willed","structural","structured","struggling","stubby","stuck","studied","studious","stuffed","stuffy","stunned","stunning","stunted","sturdy","stylish","stylistic","stylized","suave","subatomic","subconscious","subdued","subjective","sublime","subliminal","submerged","subordinate","subsequent","subservient","subsidiary","subsidized","substandard","substantial","substantive","substitute","subterranean","subtle","suburban","subversive","succeeding","successful","successive","sudden","suffering","sufficient","suffocating","suggested","suggestive","suicidal","suitable","sullen","sultry","sumptuous","sundry","sunken","sunlit","sunny","super","superb","superficial","superfluous","superhuman","superior","supernatural","supersonic","superstitious","supervisory","supple","supplemental","supplementary","supporting","supportive","supposed","suppressed","supreme","sure","surface-to-air","surgical","surging","surly","surplus","surprised","surprising","surreal","surrounding","surviving","susceptible","suspect","suspected","suspended","suspicious","sustained","swarthy","swaying","sweating","sweeping","sweet","swell","swelling","swift","swinging","swirling","switching","swollen","sworn","symbolic","symmetrical","sympathetic","symptomatic","syndicated","synonymous","syntactic","synthetic","systematic","systemic","tacit","tacky","tactful","tactical","tailored","talented","talkative","tall","tame","tan","tangible","tangled","tanned","tantalizing","tantamount","taped","tart","tasteful","tasteless","tasty","tattered","taut","tawny","tax-exempt","tax-free","taxable","taxing","tearful","teasing","technical","technological","tedious","teeming","teen-age","teenage","telescopic","televised","telling","temperate","temporal","temporary","tempting","ten-year","tenacious","tender","tense","tentative","tenuous","tepid","terminal","terraced","terrestrial","terrible","terrific","terrifying","territorial","terrorist","terse","textured","thankful","thatched","theatrical","thematic","then","theological","theoretical","therapeutic","thermal","thermonuclear","thick","thin","third-floor","thirsty","thorny","thorough","thoughtful","thoughtless","threadbare","threatened","three-day","three-dimensional","three-hour","three-month","three-piece","three-story","three-way","three-week","three-year","thrilled","thrilling","thriving","throaty","throbbing","through","thunderous","thyroid","tidal","tidy","tight","tight-lipped","tiled","time-consuming","time-honored","timeless","timely","timid","tinkling","tinny","tinted","tiny","tional","tired","tireless","tiresome","tiring","tive","token","tolerable","tolerant","toothless","top","top-level","top-secret","topical","topless","tormented","torn","tortuous","tortured","total","touching","touchy","tough","towering","traceable","tracking","traditional","trailing","trained","trampled","tranquil","transatlantic","transcendent","transcendental","transient","transitional","transitory","translucent","transparent","trapped","traumatic","traveling","treacherous","treasured","tree-lined","trembling","tremendous","tremulous","trendy","triangular","tribal","tricky","tried","trifling","trim","triple","trite","triumphal","triumphant","trivial","tropical","troubled","troublesome","troubling","trucking","true","trusted","trusting","trustworthy","truthful","trying","tufted","tumbling","tumultuous","turbulent","turn-of-the-century","turning","turquoise","tutoring","twelve-year-old","twentieth-century","twin","twisting","two-bit","two-day","two-dimensional","two-hour","two-man","two-month","two-room","two-story","two-way","two-week","two-year","typed","typical","tyrannical","ubiquitous","ultimate","ultraviolet","umbilical","unabashed","unable","unaccountable","unaccustomed","unadorned","unaffected","unanimous","unannounced","unanswered","unanticipated","unarmed","unassuming","unattended","unauthorized","unavailable","unavoidable","unaware","unbalanced","unbearable","unbelievable","unborn","unbridled","unbroken","uncanny","uncertain","unchallenged","unchanged","unchanging","uncharacteristic","unchecked","unclean","unclear","uncomfortable","uncommon","uncomplicated","uncomprehending","uncompromising","unconcerned","unconditional","unconscionable","unconscious","unconstitutional","uncontrollable","unconventional","unconvinced","unconvincing","uncritical","uncut","undecided","undefeated","undefined","undeniable","undercover","underdeveloped","underground","underlying","understandable","underwater","undetected","undeveloped","undifferentiated","undisciplined","undisclosed","undiscovered","undisputed","undistinguished","undisturbed","undue","undulating","unearned","unearthly","uneasy","uneducated","unencumbered","unending","unequal","unequivocal","unethical","uneven","uneventful","unexpected","unexplained","unfair","unfamiliar","unfashionable","unfathomable","unfavorable","unfettered","unfinished","unfit","unfocused","unforeseen","unforgettable","unfortunate","unfounded","unfriendly","unfulfilled","ungainly","unguarded","unharmed","unheard","unhurried","unidentified","unified","uniform","uniformed","unifying","unilateral","unimaginable","unimpressed","uninformed","uninhabited","uninhibited","unintelligible","unintended","uninterested","uninteresting","uninterrupted","unionized","unique","unitary","united","universal","unjust","unjustified","unkempt","unknown","unlike","unlikely","unlimited","unlit","unmanageable","unmanned","unmarked","unmatched","unmistakable","unmoved","unmoving","unnamed","unnatural","unnoticed","unobserved","unobtrusive","unoccupied","unofficial","unopened","unorthodox","unpaid","unpainted","unparalleled","unperturbed","unpopular","unprecedented","unpredictable","unprepared","unpretentious","unproductive","unprofitable","unprotected","unpublished","unqualified","unquestioned","unreadable","unreal","unrealistic","unreasonable","unrecognizable","unrecognized","unrelated","unrelenting","unreliable","unresolved","unresponsive","unrestricted","unruffled","unruly","unsafe","unsatisfactory","unsatisfied","unsavory","unscathed","unscrupulous","unseemly","unseen","unsettled","unsettling","unskilled","unsmiling","unsold","unsolved","unsophisticated","unsound","unspecified","unspoiled","unspoken","unstable","unsteady","unsuitable","unsupported","unsure","unsuspecting","untapped","untenable","untested","unthinkable","unthinking","untidy","untimely","untold","untouchable","untouched","untoward","untrained","untreated","untroubled","untrue","unused","unusual","unwanted","unwarranted","unwary","unwashed","unwavering","unwelcome","unwieldy","unwise","unwitting","unwrapped","unwritten","unyielding","up-to-date","upbeat","upcoming","updated","uphill","upper","upper-class","upper-middle-class","uppermost","upright","uprooted","upsetting","upstate","uptight","uptown","upturned","upward","urban","urbane","urgent","usable","used","useful","useless","usual","utilitarian","utmost","utopian","utter","vacant","vague","vain","valiant","valid","valuable","valued","vanished","vanishing","vanquished","variable","varied","various","varying","vascular","vast","vaudeville","vaulted","vaunted","vegetarian","vehement","veiled","velvety","venerable","venereal","venomous","verbal","verifiable","veritable","versatile","vertical","very","vested","veteran","veterinary","viable","vibrant","vice","vice-presidential","vicious","victorious","vigilant","vigorous","vile","vindictive","violet","viral","virile","virtual","virtuous","virulent","visible","visionary","visiting","visual","vital","vivacious","vivid","vocal","vocational","volatile","volcanic","voluble","voluminous","voluntary","voracious","vulnerable","wage-price","waiting","walled","wan","wandering","waning","wanted","wanting","wanton","warlike","warm","warped","warring","wary","washed","wasted","wasteful","watchful","waterproof","watery","waving","wavy","waxed","wayward","weakening","wealthy","weary","weathered","wee","weekly","weeping","weightless","weighty","weird","welcome","welcoming","well","well-defined","well-dressed","well-educated","well-established","well-heeled","well-intentioned","well-known","well-meaning","well-organized","well-placed","well-publicized","well-to-do","well-trained","well-worn","western","whimsical","whipped","whirling","whispered","white","white-collar","white-haired","whitewashed","whitish","whole","wholesale","wholesome","wicked","wide","wide-eyed","wide-open","wide-ranging","widening","widespread","widowed","wild","wild-eyed","willful","willing","wily","winding","windy","winged","winning","winsome","wintry","wiry","wise","wishful","wispy","wistful","withered","withering","withholding","witty","wobbly","wonderful","wondrous","wont","wooded","wooden","woody","woolen","woolly","wordless","workable","working","working-class","world-class","world-wide","worldly","worldwide","worn","worn-out","worrisome","worrying","worsening","worthless","worthwhile","worthy","wounded","woven","wrecked","wretched","wrinkled","written","wrought","wrought-iron","wry","yawning","year-end","year-old","year-round","yearly","yellow","yellowed","yellowing","yellowish","yielding","young","youthful","zealous"]),_y}var Xy={},qV;function VKA(){return qV||(qV=1,Object.defineProperty(Xy,"__esModule",{value:!0}),Xy.default=["abatement","abbey","abbot","abbreviation","abdication","abdomen","abductor","ability","abode","abolition","abolitionist","about-face","abrasion","absolutism","absolutist","absorber","absorption","abstention","abstract","abstraction","absurdist","absurdity","abundance","abutment","abyss","acacia","academic","academician","academy","acceleration","accelerator","accent","acceptance","accession","accessory","acclaim","acclamation","accolade","accommodation","accompaniment","accompanist","accomplice","accomplishment","accord","accordion","account","accountant","accounting","accreditation","accretion","accumulation","accuracy","accuser","ace","acetate","achievement","acknowledgement","acolyte","acorn","acquaintance","acquaintanceship","acquisition","acquit","acquittal","acreage","acrobat","acronym","acrylic","act","action","activist","activity","actor","actuality","actualization","actuary","acuity","ad","ad-lib","adage","adaptation","adapter","adder","addition","address","adequacy","adherent","adhesive","adjective","adjournment","adjudication","adjunct","adjuster","adjustment","adjutant","administration","administrator","admiral","admiration","admirer","admission","admixture","admonition","adobe","adolescent","adornment","adulation","adult","advance","advancement","advantage","adventure","adventurer","adverb","adversity","advertisement","advertiser","advisement","adviser","advisor","advocate","aerial","aerie","aeroplane","aerosol","aesthete","affect","affection","affidavit","affiliate","affiliation","affinity","affirmation","affront","afterburner","aftermath","afterthought","agate","agency","agenda","agent","agglomeration","aggrandizement","aggregate","aggregation","agitation","agitator","agreement","agribusiness","agronomist","aide","air","air-conditioner","airfield","airfoil","airframe","airing","airlift","airline","airliner","airlock","airman","airplane","airport","airship","airstrip","airway","aisle","alarm","alarmist","albatross","album","alchemist","alcove","alder","alderman","ale","alert","algorithm","alibi","alien","alignment","alkali","allegiance","allegory","alleviation","alley","alleyway","alliance","alligator","alliteration","allocation","allotment","allowance","alloy","allure","allusion","ally","almanac","almond","alpha","alphabet","also-ran","altar","altarpiece","alteration","altercation","alternation","alternative","altitude","alto","ama","amalgam","amalgamation","amateur","ambassador","ambassadorship","amber","ambiguity","ambition","ambivalence","ambulance","amelioration","amendment","amenity","amethyst","amity","ammunition","amnesty","amoeba","amount","amour","amphetamine","amphitheater","amphitheatre","amplifier","amplitude","ampule","amputee","amulet","amusement","anachronism","analgesic","analog","analogue","analogy","analysis","analyst","anarchist","anatomist","anatomy","ance","ancestor","ancestry","anchor","anchorage","anchorman","anchovy","ancient","android","anecdote","anemia","anesthesiologist","anesthetic","anesthetist","aneurysm","angel","angiogram","angle","angler","angora","animal","animation","ankle","annex","annexation","anniversary","announcement","announcer","annoyance","annual","annuity","annulment","anode","anonymity","answer","ant","antagonist","antechamber","antelope","antenna","anteroom","anthem","anthill","anthology","anthropoid","anthropologist","antibiotic","antibody","anticipation","anticommunist","antidote","antigen","antihero","antiquarian","antique","antiquity","antithesis","antler","anvil","aorta","apartment","ape","aperture","apex","aphasia","aphorism","aphrodisiac","apologia","apostle","apothecary","apparition","appeal","appearance","appellation","appendage","appendectomy","appendix","appetite","appetizer","apple","appliance","applicant","application","appointee","appointment","apportionment","appraisal","appraiser","appreciation","apprehension","apprentice","apprenticeship","approach","appropriation","approval","approximation","apricot","apron","aptitude","aquarium","aqueduct","arbiter","arbitration","arbitrator","arbor","arcade","arch","archaeologist","archangel","archbishop","archdiocese","archeologist","archer","archetype","archipelago","architect","archive","archivist","archway","ardor","arena","argument","argyle","aria","aristocracy","aristocrat","arithmetic","ark","arm","armada","armadillo","armament","armature","armband","armchair","armful","armload","armoire","armor","armory","army","aroma","arraignment","arrangement","arranger","array","arrival","arrow","arrowhead","arse","arsenal","arson","arsonist","art","artery","artichoke","article","articulation","artifact","artifice","artificiality","artisan","artist","artiste","artwork","ascendant","ascension","ascent","ascot","ash","ashtray","asking","aspect","aspen","aspirant","aspiration","assailant","assay","assemblage","assembly","assemblyman","assent","assertion","assessment","assessor","asset","assignation","assignment","assimilation","assist","assistant","associate","association","assortment","assumption","assurance","asterisk","asteroid","astonishment","astrologer","astronaut","astronomer","astrophysicist","asylum","asymmetry","atelier","atheist","athlete","ation","atmosphere","atoll","atom","atrium","attachment","attainment","attempt","attendant","attention","attic","attitude","attorney","attraction","attribute","attribution","attrition","auction","auctioneer","audience","audit","audition","auditor","auditorium","auger","augury","aura","aureole","austerity","auteur","author","authority","authorization","autobiography","autocracy","autocrat","autograph","automaker","automatic","automaton","automobile","autopsy","auxiliary","availability","avant-garde","avatar","avenger","avenue","aviary","aviator","avocation","avowal","awakening","award","awareness","awl","awning","ax","axe","axiom","axis","axle","ayatollah","azure","ba","babble","baby-sitter","babysitter","bachelor","back-up","backache","backboard","backbone","backdoor","backdrop","backer","backfield","background","backlog","backpack","backroom","backseat","backside","backstop","backup","backwash","backwater","backyard","bacon","bacterium","badge","badger","bag","bagel","baggage","bagpipe","bail","bailiff","bailiwick","baiting","baker","bakery","baking","balance","balcony","bale","ball","ballad","ballast","ballcarrier","ballerina","ballet","ballgame","balloon","ballot","ballpark","ballplayer","ballpoint","ballroom","balm","balustrade","bamboo","ban","banality","banana","band","bandage","bandana","bandanna","banding","bandit","bandleader","bandstand","bang","banister","bank","bankbook","banker","bankroll","bankruptcy","banner","banning","bannister","banquet","banquette","banshee","bantam","bantamweight","baptism","bar","barb","barbecue","barbell","barber","barbershop","bard","bargain","bargaining","barge","baritone","bark","barkeep","barker","barmaid","barman","barn","barnyard","barometer","baron","baroness","baronet","barony","barracuda","barrage","barrel","barrette","barricade","barrier","barrister","barroom","barrow","barstool","bartender","barter","bas-relief","basalt","baseball","baseboard","baseline","baseman","basement","bash","basilica","basilisk","basin","basis","basket","basketball","bassinet","bassist","bastion","bat","batch","bath","bathhouse","bathrobe","bathroom","bathtub","battalion","battering","battery","battle","battlefield","battlefront","battleground","battlement","battleship","bauble","bayonet","bazaar","beach","beachhead","beacon","bead","beagle","beak","beaker","beam","beamer","bean","bear","beard","bearer","bearing","bearskin","beastie","beater","beating","beau","beautician","beauty","beaver","beck","bed","bedchamber","bedding","bedpan","bedpost","bedroll","bedroom","bedsheet","bedside","bedspread","bedstead","bee","beech","beef","beefsteak","beehive","beep","beeper","beet","beetle","begat","beginner","beginning","behavior","behaviorist","behaviour","behemoth","behind","beholder","being","belch","belfry","belief","believer","bell","belle","bellhop","bellow","bellowing","belly","bellyache","beloved","belt","bench","benchmark","bender","bending","benediction","benefactor","beneficiary","benefit","bequest","ber","bereavement","beret","berry","berserker","berth","best-seller","bestseller","beta","betrothal","better","betterment","bettor","bevel","beverage","bevy","bib","bicep","bickering","bicycle","bid","bidder","bidet","biennial","bier","biggie","bike","biker","bilge","bility","bill","billboard","billiard","billing","billionaire","billow","billy","bin","binary","bind","binder","binding","binge","bio","biochemist","biographer","biography","biologist","biology","biopsy","biplane","birch","bird","birdbath","birdcage","birder","birdie","birdsong","birth","birthday","birthmark","birthplace","birthrate","birthright","biscuit","bishop","bit","bivouac","black","blackberry","blackbird","blackboard","blackguard","blackjack","blacklist","blackness","blackout","blacksmith","bladder","blade","blanc","blank","blanket","blare","blast","blaster","blastocyst","blaze","blazer","ble","bleach","bleacher","bleat","blemish","blend","blender","blessing","blimp","blind","blink","blinker","blinking","blip","blister","blizzard","bloak","blob","block","blockade","blockage","blockbuster","blocker","blockhouse","bloke","blond","blonde","blood","bloodhound","bloodletting","bloodline","bloodstream","bloom","blooper","blossom","blot","blotch","blotter","blow-up","blower","blowgun","blowing","blowout","blowpipe","blowtorch","blowup","blubber","bludgeon","blue","blueberry","blueprint","bluff","blur","blurb","blush","blusher","bo","boa","boar","board","boarder","boarding","boardinghouse","boardroom","boardwalk","boast","boasting","boat","boater","boathouse","boatload","boatman","boatyard","bobby","bobcat","bodice","body","bodyguard","bog","bogey","boiler","bolster","bolt","bomb","bombard","bombardment","bomber","bombing","bombshell","bon","bonanza","bond","bonding","bondsman","bone","bonfire","bonnet","book","bookcase","bookie","booking","bookkeeper","booklet","bookmaker","bookseller","bookshelf","bookshop","bookstore","boom","booming","boomlet","boon","boondoggle","boor","boost","booster","boot","booth","bootlegger","bootstrap","booty","booze","border","borderline","bore","borough","borrower","borrowing","bosom","boss","botanist","bottle","bottleneck","bottler","bottling","bottom","bottomland","boudoir","bougainvillea","bough","bouillabaisse","boulder","boulevard","bounce","bouncer","bound","boundary","bounty","bouquet","bourbon","bourgeoisie","bout","boutique","bow","bowel","bowhead","bowl","bowler","bowsprit","bowstring","box","boxcar","boxer","boxwood","brace","bracelet","bracket","braggart","braid","brain","brainstorm","brake","brakeman","bramble","branch","brand","brandy","brass","brassiere","brat","brave","bravery","brawl","brawler","brawling","brazier","breach","breadth","breadwinner","break","break-up","breakaway","breakdown","breaker","breakfast","breakfront","breakin","breaking","breakout","breakthrough","breakup","breakwater","breath","breather","breathing","breech","breed","breeder","breeding","breeze","brew","brewer","brewery","briar","bribe","brick","bricklayer","brickwork","bride","bridegroom","bridge","bridgehead","bridle","brief","briefcase","briefing","brig","brigade","brigadier","brigand","brightness","brilliance","brim","brioche","brisket","bristle","broad","broadcast","broadcaster","broadcasting","broadcloth","broadsheet","broadside","broadsword","brocade","brochure","brogue","broil","broiler","broker","brokerage","bromide","bronc","bronze","brooch","brood","brook","broom","broomstick","broth","brouhaha","brown","brownstone","bruise","brunch","brunette","brush","brushfire","brushing","brute","bubble","buccaneer","buckboard","bucket","bucketful","buckle","buckskin","bud","buddy","budget","buff","buffalo","buffer","buffet","buffoon","bug","bugger","bugging","buggy","bugle","build-up","builder","building","buildup","bulb","bulge","bulkhead","bull","bulldog","bulldozer","bullet","bulletin","bullfight","bullfighter","bullfrog","bullhorn","bullock","bully","bulwark","bum","bumblebee","bummer","bump","bumper","bumpkin","bun","bunch","bundle","bungalow","bunk","bunker","bunkhouse","bunny","bunt","bunting","buoy","burden","bureau","bureaucracy","bureaucrat","burger","burgher","burglar","burglary","burial","burlap","burlesque","burn","burner","burnout","burp","burrow","burst","bursting","busboy","bush","bushel","business","businessman","businesswoman","busload","bust","buster","bustle","busybody","butchery","butler","butt","butte","butterfly","butternut","buttock","button","buttonhole","buttress","buy","buyer","buying","buyout","buzzard","buzzer","by-election","by-product","bypass","byproduct","bystander","byword","cab","cabal","cabana","cabaret","cabbage","cabbie","cabby","cabdriver","cabin","cabinet","cabinetmaker","cable","caboose","cache","cachet","cackle","cacophony","cad","cadaver","caddie","caddy","cadence","cadet","cadre","caf","cafe","cafeteria","caftan","cage","cairn","cajole","cake","calabash","calculation","calculator","caldron","calendar","calf","calfskin","caliber","calibre","calico","caller","calling","calumny","calyx","cam","camcorder","camel","cameo","camera","cameraman","camisole","camp","campaign","campaigner","camper","campfire","campground","campsite","can","canal","canard","canary","cancellation","cancer","candelabra","candidacy","candidate","candle","candlestick","candy","cane","canine","canister","cannery","cannibal","cannonball","canoe","canon","canopy","cant","cantaloupe","canteen","canter","cantina","canton","cantor","canvass","canyon","cap","capability","capacity","cape","caper","capital","capitalist","capitalization","capitol","capitulation","capon","caprice","capstone","capsule","captain","caption","captive","captivity","captor","capture","car","carafe","caramel","carapace","carat","caravan","carbide","carbine","carbohydrate","carbon","carbonate","carburetor","carcass","carcinogen","card","cardboard","cardigan","cardinal","cardiologist","career","careerist","carelessness","caress","caretaker","cargo","caricature","carillon","carload","carnation","carnival","carnivore","carol","carotene","carousel","carpenter","carpet","carport","carriage","carrier","carrot","carryall","carrying","cart","cartel","carter","cartilage","carton","cartoon","cartoonist","cartridge","cartwheel","carver","carving","cascade","caseload","casement","cashier","cashmere","casing","cask","casket","cassava","casserole","cassette","cassock","cast","castaway","caste","casting","castle","castor","casualty","cat","cataclysm","catalog","catalogue","catalyst","catamaran","catapult","cataract","catch","catcher","catechism","categorization","category","caterer","caterpillar","cathedral","catheter","cathode","cathouse","cation","cattleman","catwalk","cauldron","cauliflower","causality","causation","cause","causeway","caution","cavalcade","cavalier","cavalryman","cave","caveat","caveman","cavern","cavity","ce","cease-fire","cedar","ceiling","celebration","celebrity","cell","cellar","cellblock","cellist","cellmate","cement","cemetery","censor","censure","centaur","centenary","center","centerpiece","centimeter","centre","centrifuge","centurion","cer","ceramic","cereal","cerebrum","ceremonial","ceremony","certainty","certificate","certification","certitude","cess","cession","cesspool","chador","chain","chair","chairman","chairmanship","chaise","chalet","chalice","chalk","chalkboard","challenge","challenger","chamber","chamberlain","chambermaid","chameleon","champ","champagne","champion","championship","chance","chancellery","chancellor","chancre","chandelier","change","changeling","changeover","changer","channel","chant","chanting","chap","chapel","chaperone","chaplain","chapter","char","character","characteristic","characterization","charcoal","chard","charge","charger","chariot","charioteer","charity","charlatan","charm","charmer","chart","charter","chartreuse","chase","chaser","chasm","chat","chateau","chattel","chatter","chatty","chauffeur","check","checkbook","checker","checkerboard","checklist","checkout","checkpoint","checkup","cheek","cheekbone","cheer","cheering","cheerleader","cheeseburger","cheesecake","cheetah","chef","chemical","chemise","chemist","chemistry","chenille","cheque","cheroot","cherry","cherub","chessboard","chestnut","chicanery","chick","chicken","chief","chieftain","chiffon","child","childhood","chile","chili","chill","chillun","chime","chimera","chimney","chimp","chimpanzee","chin","chine","chip","chipmunk","chiropractor","chisel","chiton","chloride","chlorophyll","chocolate","choice","choir","choirboy","choke","choker","cholera","chop","chopper","chopping","chord","chore","choreographer","chowder","chrissake","christening","chrome","chromosome","chronicle","chronicler","chronology","chrysanthemum","chuck","chuckle","chum","chump","chunk","church","churchman","churchyard","churn","chute","cider","cigar","cigaret","cigarette","cinch","cinder","cinema","cinematographer","cipher","circel","circle","circlet","circuit","circular","circulation","circumference","circumstance","cistern","citadel","citation","citizen","citizenship","citron","city","city-state","cityscape","civilian","civilisation","civility","civilization","claim","claimant","clam","clamor","clamp","clampdown","clan","clang","clank","clanking","clap","clapboard","clapper","claque","claret","clarification","clarinet","clarinetist","clarity","clash","clasp","class","classic","classicist","classification","classmate","classroom","clatter","clause","clavicle","claw","clay","claymore","clean","cleaner","cleanser","cleansing","cleanup","clearance","clearing","clearinghouse","cleat","cleaver","cleft","clemency","clergyman","cleric","clerk","clich","cliche","click","clicking","client","clientele","cliff","cliffside","climate","climax","climber","clime","clinch","clinic","clinician","clink","clip","clipboard","clipper","clipping","clique","cloak","cloakroom","clock","clod","clog","cloister","clone","close-up","closet","closeup","closing","closure","clot","cloth","clothesline","cloud","clout","clove","clover","clown","club","clubhouse","clump","cluster","clustering","clutch","co-author","co-chairman","co-conspirator","co-defendant","co-director","co-founder","co-op","co-operation","co-ordination","co-owner","co-pilot","co-star","co-worker","coach","coachman","coal","coalition","coast","coaster","coastline","coat","coating","coauthor","cob","cobbler","cobblestone","cobra","cobweb","cochairman","cockpit","cockroach","cocktail","coconut","cocoon","coda","code","codger","coding","coed","coefficient","coenzyme","coffee","coffeehouse","coffeepot","coffin","coffle","cofounder","cog","cognac","cognition","cohabitation","coherence","cohesion","cohort","coif","coiffure","coil","coin","coinage","coincidence","coke","col","cola","colander","coliseum","collaboration","collaborator","collage","collapse","collar","collarbone","collateral","colleague","collect","collection","collective","collectivist","collectivity","collector","colleen","college","collie","collier","collision","cologne","colon","colonel","colonist","colonization","colonnade","colony","color","coloration","coloring","colour","colouring","colt","column","columnist","com","coma","comb","combination","combustion","comeback","comedian","comedienne","comedy","comer","comet","comfort","comforter","comic","coming","comma","command","commandant","commander","commander-in-chief","commandment","commando","commemoration","commencement","commendation","comment","commentary","commentator","commercial","commie","commissar","commission","commissioner","commitment","committee","committeeman","commode","commodity","commodore","commonality","commoner","commonplace","commonwealth","commotion","commune","communication","communicator","communion","communique","community","commuter","companion","companionway","company","comparison","compartment","compass","compatriot","compendium","compensation","competence","competency","competition","competitor","compilation","complacency","complaint","completion","complex","complexion","complexity","compliance","complication","compliment","component","composer","composite","composition","compost","compound","comprehension","compress","compression","compressor","compromise","comptroller","compunction","computation","computer","comrade","concatenation","concealment","conceit","concentrate","concentration","concept","conception","conceptualization","concern","concert","concertina","concession","conch","concierge","conciliation","conciliator","conclave","conclusion","concoction","concourse","concubine","concurrence","concussion","condemnation","condensation","condenser","condition","conditioner","condolence","condominium","condor","conduct","conductor","conduit","cone","confection","confederate","confederation","conference","confession","confessional","confessor","confidant","confidante","configuration","confinement","confirmation","confiscation","conflagration","conflict","confluence","conformation","conformist","confrontation","confusion","conga","congestion","conglomerate","conglomeration","congregation","congress","congressman","conjecture","conjunction","conjurer","connection","connector","connexion","connoisseur","connotation","conqueror","conquest","conscience","consciousness","conscript","conscription","consent","consequence","conservation","conservationist","conservative","conservator","conservatory","consideration","consignment","consistency","consolation","console","consolidation","consonant","consort","consortium","conspiracy","conspirator","constable","constancy","constant","constellation","constituency","constituent","constitution","constraint","constriction","constrictor","construct","construction","constructionist","constructivist","consul","consulate","consultant","consultation","consumer","consumption","contact","container","contaminant","contamination","contemplation","contemporary","contempt","contender","content","contention","contentment","contest","contestant","context","continent","contingency","contingent","continuance","continuation","continuity","continuum","contour","contra","contraband","contraceptive","contract","contraction","contractor","contradiction","contraption","contrary","contrast","contravention","contribution","contributor","contrivance","control","controller","controversy","conundrum","convenience","convent","convention","conventionalist","convergence","conversation","conversationalist","converse","conversion","convert","converter","convertible","conveyance","conveyor","conviviality","convocation","convoy","convulsion","cook","cookbook","cooker","cookie","cookstove","coolant","cooler","coolie","coon","coop","cooperative","coordination","coordinator","cop","copier","copper","coproduction","copse","copter","copulation","copyright","copywriter","coral","cord","cordiality","cordon","corduroy","core","cork","corkscrew","corn","corncob","cornea","corner","cornerback","cornerstone","cornet","cornfield","cornice","cornucopia","corollary","coronation","coroner","corporal","corporation","corpse","corpsman","corpus","corral","correction","corrective","correlation","correspondence","correspondent","corridor","corsage","corsair","corset","cortex","cosmology","cosmopolitan","costume","cot","coterie","cottage","cotton","cottonwood","couch","cough","council","councilman","councilor","counsel","counsellor","counselor","count","countdown","countenance","counter","counterattack","counterfeit","counterforce","counterman","counterpart","counterpoint","counterproposal","counterrevolution","countertop","counterweight","countess","country","countryman","countryside","county","couple","couplet","coupling","coupon","courier","course","court","court-martial","courtesan","courtesy","courthouse","courtier","courtroom","courtship","courtyard","cousin","couturier","cove","coven","covenant","cover","cover-up","coverage","coverall","covering","coverlet","covey","cowbell","cowboy","cowgirl","cowhide","cowl","coyote","crab","crack","crackdown","cracker","crackle","crackling","crackpot","cradle","craft","craftsman","cramp","cranberry","crane","crank","cranny","crap","crash","crate","crater","cravat","craving","crayon","craze","creak","cream","crease","creation","creator","creature","creche","credit","creditor","creed","creek","creel","cremation","crematorium","creole","crepe","crescent","crest","crevasse","crevice","crew","crewcut","crewman","crib","crick","cricket","crier","crimp","crimson","cripple","crisis","crisp","crissake","crisscross","criterion","critic","criticism","critique","critter","croak","crochet","crock","crocodile","croissant","crone","crony","crook","crooner","crop","cropland","cropper","cropping","cross","cross-examination","cross-section","crossbar","crossbow","crossfire","crossing","crossover","crossword","crotch","croupier","crow","crowbar","crowd","crown","crucible","crucifix","crucifixion","crude","crudeness","crudity","cruise","cruiser","crumb","crumbling","crunch","crusade","crusader","crush","crusher","crust","crutch","crypt","cryptographer","crystal","crystallization","cub","cubble","cubbyhole","cube","cubicle","cubist","cuckoo","cucumber","cud","cudgel","cuff","cuisine","cul-de-sac","cultivator","culture","culvert","cummerbund","cup","cupboard","cupola","cur","curate","curator","curb","curd","cure","curfew","curio","curiosity","curmudgeon","curragh","currant","currency","current","curriculum","curry","curtailment","curtain","curtsy","curvature","curve","cushion","custard","custodian","custody","custom","customer","cut","cutaway","cutback","cuticle","cutie","cutoff","cutout","cutter","cutthroat","cutting","cy","cyanide","cyclamate","cycle","cyclist","cyclone","cylinder","cymbal","cynic","cynicism","cypress","cyst","czar","da","dab","dacha","dachshund","dagger","dairy","daisy","dalliance","dam","damage","damask","dame","damn","damnation","damp","damper","damsel","dance","dancer","dancing","dandelion","dandy","daredevil","darkroom","darky","darlin","darling","dart","dash","dashboard","database","date","davenport","daybed","daydream","daylight","dazzle","deacon","dead-end","deadbeat","deadline","deadlock","deadpan","deal","dealer","dealership","dealing","dear","dearie","debacle","debasement","debate","debater","debauchery","debility","debit","debriefing","debt","debtor","debut","debutante","decadent","decal","decanter","decency","decision","deck","declaration","declivity","decoder","decor","decoration","decorator","decree","dedication","deductible","deduction","deed","deejay","deerskin","default","defector","defence","defendant","defender","defense","defenseman","deference","deferment","deferral","defiance","deficit","defile","definition","deflation","deflection","defoliant","deformation","deformity","degree","deity","delay","delegate","delegation","deletion","deli","deliberation","delicacy","delicatessen","delight","delineation","delinquency","delinquent","deliverance","deliverer","delivery","dell","delta","deluge","demagogue","demand","demarcation","demeanor","dementia","demesne","demitasse","democracy","democrat","demographer","demolition","demon","demonstration","demonstrator","demotion","den","dence","denial","denigration","denim","denomination","denominator","denouement","density","dent","dentist","denunciation","deodorant","department","departure","dependence","dependency","dependent","depiction","depletion","deployment","deportation","deposit","deposition","depot","depravity","depth","deputation","deputy","derailment","derangement","derby","dereliction","derivation","derivative","dermatologist","derriere","dervish","descendant","descent","description","desert","deserter","desertion","design","designation","designer","desire","desk","desktop","desperado","desperation","despot","despotism","dessert","destination","destiny","detachment","detail","detective","detector","detergent","deterioration","determinant","determination","determinism","deterrent","detonation","detonator","detour","detriment","deuce","devaluation","developer","development","deviation","device","devotee","devotion","dew","dharma","diabetic","diadem","diagnosis","diagnostician","diagram","dial","dialect","dialectic","dialog","dialogue","diameter","diamond","diaper","diaphragm","diary","diatribe","dichotomy","dictation","dictator","dictatorship","dictionary","dictum","die","diesel","diet","dietician","difference","differential","differentiation","difficulty","diffuser","diffusion","dig","digestion","digger","digging","digit","dignitary","dignity","digression","dike","dilemma","dilettante","dilution","dime","dimension","diminution","diminutive","dimmer","dimple","diner","dinette","dinghy","dinner","dinosaur","dint","diocese","diorama","dioxide","dioxin","dip","diplomacy","diplomat","dipper","dipping","direction","directive","director","directorate","directorship","directory","dirge","disc","discard","discharge","disciple","disciplinarian","discipline","disclaimer","disclosure","discoloration","discomfiture","discomfort","discontent","discord","discotheque","discount","discouragement","discourse","discourtesy","discoverer","discovery","discrepancy","discrimination","discussion","disdain","disequilibrium","disgrace","disguise","dish","disharmony","dishonesty","dishonor","dishpan","dishtowel","dishwasher","disillusionment","disinfectant","disintegration","disjunction","disk","disparity","dispatch","dispatcher","dispensary","dispensation","dispenser","dispersion","displacement","display","disposal","disposition","disproportion","dispute","disquisition","disruption","dissection","dissector","dissension","dissent","dissenter","dissertation","disservice","dissident","dissipation","dissolution","dissonance","distance","distemper","distillate","distillation","distillery","distinction","distortion","distraction","distribution","distributor","distributorship","district","disturbance","dition","ditty","divan","dive","diver","divergence","diversion","diversity","divestiture","divide","dividend","divider","divination","divine","divinity","division","do-gooder","doc","dock","docket","docking","dockside","doctor","doctorate","doctrine","docudrama","document","documentary","documentation","dodge","doe","dogmatism","dogwood","dollop","dolphin","dom","domain","dome","domestic","domicile","domination","dominion","domino","donation","donkey","donor","donut","doom","door","doorbell","doorjamb","doorkeeper","doorknob","doorman","doormat","doorsill","doorstep","doorway","dope","dorm","dormer","dormitory","dosage","dose","dossier","dot","dotage","double","double-dealing","double-take","doubleheader","doubler","doublet","doubling","doubt","douche","dough","doughnut","dove","dovetail","dowager","dowel","down","downfall","downhill","downpour","downturn","dowry","doze","drab","draft","draftee","draftsman","dragon","dragonet","dragonfly","drain","drainage","draining","dramatist","dramatization","drape","drapery","draught","draw","drawback","drawbridge","drawer","drawing","drawing-room","drawl","drawstring","dread","dream","dreamer","dredge","dredging","dress","dresser","dressing","dressing-room","dressmaker","dribble","drier","drift","drill","drilling","drink","drinker","drip","dripping","drive","driver","driveway","drone","droop","drop","droplet","dropout","dropping","drove","drowning","drubbing","drudge","drudgery","drug","druggist","drugstore","druid","drum","drumbeat","drummer","drumming","drumstick","drunk","drunkard","dryad","drybone","dryer","dualism","duality","duchy","duckling","duct","duction","duel","duffel","dugout","duke","dukedom","dumbbell","dummy","dump","dumping","dumpling","dumpster","dun","dunce","dune","dung","dungeon","duo","duocorn","duplicate","duplication","duration","dust","duster","dusting","dustpan","dwarf","dweller","dwelling","dy","dye","dynamo","dynasty","dysentery","dystrophy","eagle","ear","earl","earlobe","earner","earphone","earpiece","earplug","earring","earth","earthenware","earthling","earthquake","easel","eater","eatery","eating","eavesdropper","ebb","eccentricity","echelon","echo","eclipse","ecologist","ecology","economist","economy","ecosystem","ecstasy","edging","edict","edifice","edition","editor","editorial","education","educator","effect","efficacy","efficiency","effigy","effluent","effort","effrontery","effusion","egalitarian","egg","eggplant","eggshell","egomaniac","egotist","eighteen-wheeler","el","elaboration","elasticity","elbow","elder","elect","election","elector","electorate","electrician","electricity","electrocardiogram","electrocution","electrode","electrolyte","electron","elegance","elegy","element","elephant","elevation","elevator","elf","elimination","elite","elixir","ell","ellipse","elm","elongation","emanation","emancipation","embankment","embargo","embassy","embellishment","ember","embezzlement","embezzler","emblem","embodiment","embolden","embolism","embrace","embrasure","embroidery","emcee","emerald","emergency","emigration","emigre","eminence","emissary","emission","emotion","emperor","emphasis","empire","empiricist","emplacement","employe","employee","employer","employment","emporium","empress","emptiness","emulsion","enactment","enamel","encampment","ence","enchantment","enclave","enclosure","encore","encounter","encouragement","encroachment","encumbrance","encyclopedia","endearment","endeavor","endeavour","endgame","ending","endorsement","endowment","endurance","energy","enforcement","enforcer","engagement","engine","engineer","engraving","enhancement","enjoyment","enlargement","enlistment","enmity","enormity","enquiry","enrichment","enrollment","ensemble","ensign","ent","entanglement","enterprise","entertainer","entertainment","enthusiasm","enthusiast","enticement","entitlement","entity","entomologist","entourage","entrance","entranceway","entrant","entreaty","entree","entrepreneur","entry","entryway","enumeration","envelope","environ","environment","environmentalist","envoy","enzyme","ephor","epic","epidemic","epidemiologist","epigraph","epileptic","epilogue","epiphany","episode","epistemology","epitaph","epithet","epitome","equality","equation","equator","equerry","equinox","equity","equivalence","equivalency","equivalent","equivocation","eral","eraser","erasure","eration","ern","ernment","errand","error","eruption","escalation","escalator","escapade","escape","escapist","escarpment","esplanade","essay","essayist","esse","essence","establishment","estate","esteem","estimate","estimation","estrangement","estrogen","estuary","etching","eternity","ether","ethnicity","eulogy","euphemism","evacuation","evaluation","evangelist","evasion","event","eventuality","evergreen","eviction","evidence","evocation","evolution","ewe","exaggeration","exaltation","exam","examination","examiner","example","exasperation","excavation","excellence","exception","excerpt","excess","exchange","exchanger","excise","excision","excitement","exclamation","exclusion","excommunication","excrement","excretion","excursion","excuse","execution","executioner","executive","executor","exegesis","exemption","exercise","exertion","exhalation","exhaust","exhibit","exhibition","exhibitionist","exhibitor","exhilaration","exhortation","existence","exorcism","expanse","expansion","expatriate","expectancy","expectant","expectation","expediency","expedient","expediter","expedition","expenditure","expense","experience","experiment","experimentation","experimenter","expert","expiration","explanation","expletive","exploit","exploitation","exploration","explorer","exploring","explosion","explosive","exponent","export","exporter","exposition","exposure","expression","expressionist","expressway","expropriation","expulsion","extension","extent","exterior","extermination","exterminator","extinction","extinguisher","extortion","extract","extraction","extrapolation","extravagance","extravaganza","extreme","extremity","extrovert","exuberance","exultation","eye","eyeball","eyebrow","eyedropper","eyeglass","eyelash","eyelet","eyelid","eyepiece","eyeshade","eyesore","eyewitness","fa","fable","fabric","fabrication","facade","face","face-lift","faceplate","facet","facility","facing","facsimile","fact","faction","factor","factory","factotum","faculty","fad","faint","fairground","fairway","fairy","fairy-tale","fairyland","fairytale","faith","falcon","fallacy","fallibility","familiarity","family","fan","fanaticism","fancier","fancy","fanfare","fang","fantasy","farce","farewell","farm","farmboy","farmer","farmhouse","farmland","farmstead","farmyard","fascination","fashion","fastball","fastening","fasting","fastness","fate","fatigue","faucet","favor","favorite","favour","favourite","fawn","fax","feat","feather","feature","federation","fedora","fee","feed","feedback","feeder","feeding","feedlot","feeling","feint","felicity","fell","fella","feller","fellow","fellowship","felt","femme","fence","fencer","fender","fense","fer","ference","ferment","fern","ferret","ferry","ferryboat","ferryman","fertilizer","fervor","fester","festival","festivity","feud","fever","fiber","fibre","fibrillation","fiction","fief","fiefdom","field","fielder","fiend","fiesta","fife","fig","figger","fight","fighter","fighting","figment","figure","figurehead","figurine","figuring","filament","file","filet","filibuster","filigree","filing","filler","fillet","filling","fillip","filly","film","filmmaker","filter","fin","final","finale","finalist","finality","finance","financier","financing","finder","finding","finery","finesse","finger","fingernail","fingerprint","fingertip","finish","finisher","fink","fir","fire","firearm","fireball","firebox","firebrand","firecracker","firefight","firefighter","firehouse","fireman","fireplace","fireside","firestorm","firm","firmament","fishbowl","fisher","fisherman","fishery","fishhook","fishnet","fission","fissure","fist","fistfight","fistful","fit","fitness","fitter","fitting","fiver","fiveyear","fix","fixation","fixer","fixing","fixity","fixture","fjord","flag","flagon","flagpole","flagship","flagstone","flail","flake","flame","flamethrower","flange","flank","flannel","flap","flapper","flare","flare-up","flash","flashback","flasher","flashlight","flask","flat","flatboat","flatcar","flatland","flatness","flavor","flavour","flaw","flea","fleck","fledgling","fleece","fleet","flesh","flex","flick","flicker","flier","flight","flimsy","flinch","flint","flip","flip-flop","flippancy","flipper","flirt","flirtation","flirting","flitter","float","floater","flock","flogging","flood","flooding","floodlight","floor","floorboard","flooring","flop","flophouse","florist","flotilla","flounce","flour","flourish","flow","flower","flowering","flowerpot","flu","fluctuation","flue","fluff","fluid","fluoride","flurry","flush","flushing","flute","fluting","flutist","flutter","fly","flyer","flyleaf","flywheel","fo","foal","foam","focus","fodder","fog","foghorn","foil","foist","fold","folder","foliage","folio","folklore","foller","follicle","follow-up","follower","following","folly","font","food","football","footbridge","footfall","foothill","foothold","footing","footlocker","footman","footnote","footpath","footprint","footrest","footstep","footstool","fop","forage","foray","force","ford","forearm","foreboding","forecast","forecaster","foreclosure","forefinger","foreground","forehead","foreigner","foreleg","forelock","foreman","forepaw","forerunner","foresight","foreskin","forest","forester","foreword","forfeiture","fork","forklift","form","formalism","formality","formance","format","formation","formula","formulation","fort","fortress","fortune","fortune-teller","forum","forward","fossil","foul","foul-up","foundation","founder","foundry","fount","fountain","fox","foxhole","foyer","fraction","fracture","fragility","fragment","fragmentation","fragrance","frailty","frame","frame-up","framework","franchise","frat","fraternity","fray","freak","free-fall","freedman","freedom","freelancer","freeway","freeze","freezer","freight","freighter","frenzy","frequency","fresco","freshman","fret","friar","friction","fridge","friend","friendly","friendship","frieze","frigate","fright","frill","fringe","frisbee","frisson","frivolity","frock","frolic","frond","front","front-runner","frontage","frontier","frontiersman","frontline","frontrunner","frost","frostbite","frosting","froth","frown","fruitcake","frustration","fuchsia","fudge","fuel","fugue","fulcrum","fulfillment","fulfilment","fullback","fumble","fumbling","function","functionalist","functionary","functioning","fund","fund-raiser","fundamentalist","funeral","fungus","funk","funnel","fur","furcot","furlough","furnace","furnishing","furor","furrow","fuse","fuselage","fusillade","fusion","future","futurist","gabardine","gable","gadfly","gadget","gaff","gaffe","gage","gaggle","gaiety","gain","gainer","gait","gal","gala","galaxy","gall","gallantry","galleon","gallery","galley","gallop","gambit","gamble","gambler","gambling","game","gamete","gametophyte","gamma","gantry","gap","garage","garden","gardener","gardenia","gargoyle","garland","garlic","garment","garner","garnet","garret","garrison","garter","gash","gasket","gaslight","gasoline","gasp","gate","gatehouse","gatekeeper","gateway","gathering","gation","gauge","gauntlet","gauze","gavel","gaze","gazelle","gear","gearbox","gebling","geezer","geisha","gel","gelatin","gelding","gem","gen","gence","gender","gene","genealogy","general","generalist","generality","generalization","generation","generator","generosity","geneticist","genie","genius","genre","gent","gentleman","gentlewoman","genus","geographer","geography","geologist","geometry","geosector","ger","germ","gestation","gesture","getaway","getup","geyser","ghetto","ghost","ghoul","giant","giantess","gift","gig","giggle","gill","gilt","gimmick","gin","gingham","giraffe","girder","girdle","girth","gist","giveaway","giver","giving","gizzard","glacier","glade","gladiator","glamour","glance","gland","glare","glass","glassful","glassware","glaze","gleam","glen","glide","glider","gliding","glimmer","glimmering","glimpse","glint","glitch","glitter","glob","globe","gloom","glory","gloss","glove","glow","glower","glue","glutton","glycogen","gnat","gnawing","gnome","goal","goalie","goaltender","goat","goatee","goatskin","goblet","goblin","going","goiter","gold","golem","golfer","gondola","goner","gong","good","good-bye","good-night","goodbye","goodie","goodnight","goof","goon","goose","gopher","gore","gorge","gorilla","gospel","gossip","gouge","gourd","gourmet","gout","governess","government","governor","governorship","gown","grab","grabber","grace","grad","grade","grader","gradient","grading","graduate","graduation","graft","grail","grailstone","grain","grammar","gramophone","granary","grandeur","grandmaster","grandstand","grange","granite","granny","grant","grape","grapevine","graph","grass","grasshopper","grassland","grate","gratification","gratuity","grave","gravestone","graveyard","gravity","gravy","gray","grazer","grease","green","greenback","greengrocer","greenhorn","greenhouse","greeter","greeting","grenade","grendel","greyhound","grid","gridiron","grievance","grill","grille","grimace","grin","grind","grinder","grinding","grindstone","grip","gripe","grit","grizzly","groan","groaning","grocer","grocery","groom","groove","groping","grotesque","grotto","ground","groundcar","grounder","grounding","groundswell","group","grouper","groupie","grouping","grove","grower","growl","grown-up","grownup","growth","grub","grudge","gruel","grunt","grunting","guarantee","guarantor","guard","guardhouse","guardian","guardianship","guardrail","guardsman","guerrilla","guess","guessing","guest","guesthouse","guffaw","guide","guidebook","guideline","guild","guillotine","guilt","guinea","guise","guitar","guitarist","gulch","gulf","gull","gullet","gully","gum","gun","gunboat","gunfighter","gunman","gunner","gunnysack","gunshot","gunsight","gunwale","gurdwara","gurgle","gurney","gush","gust","gut","gutter","guy","gym","gymnast","gypsy","habit","habitat","habitation","hacienda","hack","hacker","hacking","hacksaw","hag","hail","hailstorm","hair","hairbrush","haircut","hairdresser","hairline","hairpiece","hairpin","hairstyle","half-circle","half-life","halfback","halftime","hall","hallmark","halloo","hallway","halo","halter","ham","hamadryad","hamburger","hamlet","hammer","hammering","hammock","hamper","hamster","hamstring","han","hand","handbag","handball","handbook","handcuff","handful","handgun","handhold","handicap","handicraft","handkerchief","handle","handlebar","handler","handmaiden","handout","handrail","handshake","handwriting","handyman","hang-up","hangar","hanger","hanging","hangman","hangout","hangover","hank","hanker","hankie","hanky","hap","happening","harangue","harbinger","harbor","harbour","hard-liner","hardback","hardness","hardtop","hardwood","hare","harlot","harm","harmonica","harmony","harness","harp","harpist","harpoon","harpooner","harpsichord","harpy","harridan","harrier","harrow","hart","harvest","harvester","has-been","hash","hassle","hassock","hat","hatbox","hatch","hatchery","hatchet","hatching","hatchway","hatter","haul","haunch","haunt","haunting","haven","hawk","hay","hayloft","haymaker","hayseed","haystack","hazard","headache","headband","headboard","headdress","heading","headland","headlight","headline","headman","headmaster","headpiece","headset","headsman","headstone","headwaiter","headway","headwrap","healer","healing","heap","hearer","hearing","hearse","heart","heartache","heartbeat","heartbreak","hearth","hearthstone","heartland","hearty","heater","heath","heathen","heather","heave","heaven","heaving","heavyweight","hedge","hedgehog","hedonist","heed","heel","heft","hegemony","heifer","height","heir","heiress","heirloom","heist","helicopter","helix","hellhole","helm","helmet","helmsman","help","helper","helping","hem","hemisphere","hemline","hemlock","hemorrhage","hen","henchman","henhouse","herald","herb","herbicide","herd","herder","herdsman","heresy","heretic","heritage","hermaphrodite","hermit","hernia","hero","heroine","herringbone","hesitancy","hesitation","hex","heyday","hiccup","hick","hickory","hideaway","hierarchy","high","highball","highboy","highland","highlander","highlight","highschool","highway","hike","hiker","hilarity","hill","hillock","hillside","hilltop","hilt","hint","hinterland","hip","hire","hiring","historian","historiography","history","hitch","hitchhiker","hitter","hive","hoard","hoarding","hoax","hobble","hobby","hock","hog","hogan","hoist","holder","holding","holdout","holdover","holdup","hole","holiday","holler","hollow","holly","hologram","holothete","holster","homage","hombre","home","homebody","homecoming","homeland","homemaker","homeowner","homer","homeroom","homestead","homesteader","hometown","homily","hone","honey","honeybee","honeycomb","honeymoon","honkie","honky-tonk","honor","honour","hood","hoodlum","hoof","hook","hoop","hoot","hootch","hooting","hop","hope","hopper","horde","horizon","hornet","horoscope","horse","horseback","horseman","horsepower","horseshoe","hose","hospice","hospital","hospitalization","host","hostel","hostess","hotel","hound","hourglass","house","houseboat","houseboy","housecoat","housedress","household","householder","housekeeper","housing","hovel","howitzer","howler","hubcap","huckleberry","huddle","hue","hug","hulk","hull","hum","humanity","humbug","humidity","humility","hummingbird","hummock","humor","humorist","humour","hump","humpback","hunch","hunchback","hunger","hunt","hunter","hurdle","hurricane","hush","husk","hussy","hustle","hustler","hut","hutch","hybrid","hydrant","hydrocarbon","hydrolysis","hyena","hype","hypnotist","hypochondriac","hypocrite","hypothesis","hysterectomy","hysteria","ice","ice-cream","iceberg","icebox","icehouse","icicle","icing","icon","iconoclast","idea","ideal","idealism","idealist","idealization","ident","identification","identity","ideologist","ideologue","ideology","idiom","idiosyncrasy","idjit","idyll","ignition","ignominy","ignorance","iguana","illumination","illusion","illustration","image","imagery","imagination","imbalance","imbroglio","imitation","immediacy","immensity","immersion","imp","impact","impairment","impala","impasse","impeachment","impediment","imperative","imperfection","imperialism","impersonation","impersonator","impertinence","impiety","implant","implantation","implement","implication","import","importation","importer","imposition","impossibility","imposter","impostor","impoundment","impresario","impression","imprint","impropriety","improvement","improvisation","impulse","in-law","inauguration","inbound","incantation","incapacity","incarceration","incarnation","incidence","incident","incinerator","incline","inclusion","incoherence","income","incompatibility","incongruity","inconsistency","inconvenience","increase","increment","incumbency","incumbent","incursion","indemnity","indentation","independence","independent","index","indication","indicator","indictment","indirection","indiscretion","individual","individualist","individuality","individuation","inducement","induction","inductivist","indulgence","industrialist","industry","ineptitude","inequality","inequity","inertia","inevitability","infamy","infantryman","infarct","infarction","infatuation","infection","inference","inferno","infestation","infield","infielder","infinity","infirmary","infirmity","inflammation","inflation","inflection","inflow","influence","informality","informant","information","informer","infraction","infrastructure","infringement","infusion","ingenue","ingenuity","ingot","ingredient","inhabitant","inhalation","inhaler","inheritance","inheritor","inhibition","inhibitor","inhumanity","iniquity","initial","initiation","initiative","initiator","injection","injunction","injury","injustice","ink","inkling","inkwell","inlay","inlet","inmate","inn","innkeeper","innocence","innocent","innovation","innovator","innuendo","inoculation","inpatient","input","inquest","inquiry","inquisition","inscription","insecurity","insemination","insensitivity","insert","insertion","inset","inside","insider","insight","insignia","insincerity","insinuation","insistence","inspection","inspector","inspiration","instability","installation","installment","instance","instep","instigation","instigator","instinct","institute","institution","instruction","instructor","instrument","instrumentality","insulator","insurer","insurgency","insurrection","intake","integration","integrator","intellect","intellectual","intellectualist","intelligence","intensification","intensity","intent","intention","interaction","interception","interceptor","interchange","intercom","interconnection","interest","interface","interference","interferon","interior","interlocutor","interloper","interlude","intermediary","intermission","intern","internationalist","internist","internship","interplay","interpretation","interpreter","interrelationship","interrogation","interruption","intersection","interval","intervention","interview","interviewee","interviewer","interweaving","intestine","intonation","intricacy","intrigue","introduction","introspection","intrusion","intuition","invalid","invariance","invective","invention","inventor","inventory","inversion","investigation","investigator","investment","investor","invisibility","invitation","invocation","invoice","involvement","iodide","iridescence","iron","ironclad","ironist","ironwork","ironworker","irony","irrationality","irregularity","irrelevance","irrelevancy","irrigation","irritant","irritation","island","isle","islet","isolation","isolationist","isotope","issue","item","itinerary","ity","ivory","ivy","jab","jabber","jacaranda","jack","jacket","jackhammer","jackknife","jackpot","jackrabbit","jade","jaguar","jailbird","jam","jamb","jangle","jar","jargon","jasmine","jaunt","javelin","jaw","jawbone","jawline","jay","jean","jector","jeep","jelly","jeopardy","jerk","jerkin","jersey","jest","jester","jet","jetliner","jetport","jetty","jewel","jeweler","jib","jig","jigsaw","jimmy","jingle","job","jobber","jock","jockey","jog","jogger","joiner","joining","joint","jolt","jot","journal","journalist","journey","journeyman","jowl","jubilation","jubilee","judge","judgement","judgeship","judging","judgment","jug","juggernaut","juggler","juice","juicer","juke","jukebox","jumbo","jumper","jumpsuit","junction","juncture","jungle","junior","juniper","junk","junket","junkie","junkyard","junta","jurisdiction","jurist","juror","jury","justice","justification","juxtaposition","kaleidoscope","kangaroo","karma","katun","kebele","keel","keep","keeper","keeping","keepsake","kelp","ken","kennel","kerchief","kernel","kettle","key","keyboard","keyhole","keynote","keystone","khaki","kick","kickback","kicker","kicking","kickoff","kid","kiddie","kidnaping","kidnapper","kidnapping","kidney","kill","killer","killing","kiln","kilt","kindergarten","kindness","king","kingdom","kingmaker","kingpin","kinship","kinsman","kiosk","kit","kitchen","kitchenette","kite","kitten","kitty","klaxon","knack","knapsack","knave","knee","kneecap","knife","knight","knighthood","knit","knock","knockdown","knocker","knocking","knockout","knoll","knot","knuckle","kook","kraken","kynd","lab","label","labor","laboratory","laborer","labour","labourer","labyrinth","lace","lackey","lacquer","lad","ladder","laddie","ladle","laggard","lagoon","lair","laird","lake","lakeshore","lamb","lament","lamentation","laminate","lamp","lamppost","lampshade","lance","lanch","land","landau","lander","landfall","landfill","landing","landmark","landmass","landowner","landscape","landslide","lane","language","languor","lantern","lanyard","lap","lapel","lapse","larceny","lard","larder","lark","laser","lash","lass","latch","latecomer","lateness","lath","lathe","lation","latitude","latrine","lattice","laugh","laughter","launch","launcher","launching","laundering","laundromat","laundry","laureate","laurel","lavender","law","lawgiver","lawmaker","lawman","lawn","lawnmower","lawsuit","lawyer","layer","laying","layman","layoff","layout","layover","layup","lead","leader","leadership","leaf","leaflet","league","leak","leakage","leap","learner","learning","lease","leash","leather","leave","leave-taking","leaving","lectern","lecture","lecturer","ledge","ledger","lee","leer","left-hander","lefty","leg","legacy","legality","legation","legend","legion","legislation","legislator","legislature","legitimation","legume","lem","lemon","lender","length","leopard","leotard","leper","lesion","lesson","letdown","lethargy","letter","letterhead","lettuce","levee","level","lever","leviathan","levity","levy","lexicon","ley","liability","liaison","liana","libation","libel","liberal","liberation","liberationist","liberator","libertarian","liberty","librarian","library","licence","license","licensee","lichen","lick","licking","lid","liege","lien","lieutenant","lieve","life-cycle","life-span","life-style","lifeboat","lifeguard","lifeline","lifer","lifespan","lifestyle","lift","lifter","lifting","ligament","light","lighter","lighthouse","lightning","lightweight","likeness","liking","lilac","lily","lima","limb","lime","limerick","limestone","limit","limitation","limousine","linchpin","linden","line-up","lineage","linebacker","lineman","linen","liner","lineup","ling","lingo","linguist","liniment","lining","link","linkage","linker","linkup","lintel","lion","lioness","lip","lipstick","liqueur","liquid","liquidation","liquor","list","listener","listing","litany","lite","liter","literature","lithograph","litigation","litter","liturgy","livelihood","liver","livery","living","living-room","lizard","loader","loading","loaf","loafer","loan","loathing","lob","lobby","lobbyist","lobe","lobotomy","lobster","lobsterman","locale","locality","location","locator","lock","lock-mechanism","locker","locket","lockout","locksmith","lockup","locomotive","locust","lode","lodge","lodger","lodging","loft","log","loggia","logic","logician","logjam","loiter","lollipop","longing","longitude","longshoreman","loo","look-alike","looker","lookout","loom","loon","loony","loophole","loot","looter","lord","lordship","lorry","lotion","lottery","loudspeaker","lounge","louse","lout","lover","loveseat","low","lowland","loyalty","lubricant","lug","lullaby","lumber","lumberjack","lumberyard","luminary","luminosity","lump","lumpectomy","lunacy","lunatic","lunch","luncheon","luncheonette","lunchroom","lung","lunge","lurch","lurcher","lure","luster","lute","luxury","lynching","lyre","lyric","lyricist","m'lord","macaw","mace","machete","machine","machinist","mackinaw","madcap","mademoiselle","madhouse","maelstrom","magazine","mage","magenta","magic","magician","magistrate","magnate","magnet","magnetism","magnification","magnificence","magnitude","magnolia","magnum","magpie","mahogany","mahout","mail","mailbox","mailing","mailman","mainframe","mainland","mainsail","mainspring","mainstay","majesty","major","majority","make","make-up","maker","makeup","making","malady","malaise","malcontent","malfunction","malignancy","mall","mallard","mallet","malpractice","malt","mammal","mammogram","mammography","mammoth","management","manager","mance","mandarin","mandate","mandolin","mane","maneuver","maneuvering","manger","mango","mangrove","manhole","manhunt","manicure","manifestation","manifesto","manifold","mannequin","manner","mannerism","mannerist","manoeuvre","manor","manse","manservant","mansion","mantel","mantelpiece","mantle","mantra","manual","manufacturer","manure","manuscript","map","maple","mapping","marathon","marble","march","marching","mare","margarine","margarita","margin","marina","marine","mariner","marionette","marker","market","marketer","marketing","marketplace","marking","marksman","markup","marlin","marmalade","marquee","marrow","marsh","marshal","marshland","marshmallow","mart","martinet","martini","martyr","martyrdom","marvel","mascot","mash","mask","mason","masque","mass","massage","masseur","mast","mastectomy","master","master-mason","mastermind","masterpiece","masterwork","masthead","mat","matador","match","matchbook","matchbox","matchmaker","matchstick","matchup","material","materialist","mathematician","matinee","mating","matrix","matron","matte","matter","mattress","maturity","mauling","mausoleum","maverick","maw","maxim","maximum","mayor","maze","mead","meadow","meal","mean","meaning","meanness","measure","measurement","meatball","mecca","mechanic","mechanism","medal","medalist","medallion","median","mediation","mediator","medic","medication","medicine","meditation","medley","meet","meeting","megaphone","melancholy","melanoma","melodrama","melody","melon","meltdown","member","membership","membrane","memento","memoir","memorandum","memorial","memory","menace","mention","mentor","menu","mercenary","merchandise","merchant","merchantman","mercy","merger","meridian","meringue","meristem","merit","mermaid","merry-go-round","mesa","mesh","meson","mesquite","mess","message","messenger","messiah","metabolism","metal","metamorphosis","metaphor","meteor","meteorite","meteoroid","meteorologist","meter","method","methodology","metier","metronome","microbe","microbiologist","microchip","microcomputer","microcosm","microfilm","microphone","microprocessor","microscope","microwave","middle","middleman","midpoint","midriff","midst","midterm","might","mignon","migraine","migrant","migration","mike","mil","mileage","miler","milestone","militant","military","militiaman","milk","milking","milkmaid","milkman","milkshake","mill","miller","millet","millimeter","millionaire","millionth","millstone","mime","mimeograph","mimic","minaret","mind","mind-set","mindstone","minefield","miner","mineral","mini","miniature","minicomputer","minim","minimalist","minimum","mining","minion","miniskirt","minister","ministration","ministry","minnow","minor","minority","minstrel","mint","minuet","miracle","mirage","mire","mirror","misadventure","misapprehension","miscalculation","miscarriage","miscellany","mischance","mischief","misdemeanor","miser","misery","misfit","misfortune","misgiving","mishap","misinterpretation","mismatch","misnomer","misrepresentation","missal","missile","mission","missive","misstatement","misstep","mist","mistake","mister","mite","miter","mitigation","mitt","mittee","mitten","mix","mix-up","mixer","mixture","mixup","moat","mob","mobile","mobilization","mobster","moccasin","mock-up","mockery","mod","model","modem","moderator","modernism","modernization","modification","modifier","modulation","module","mogul","mohole","moire","moisture","molar","mold","molding","mole","molecule","mom","moment","monarchy","monastery","monetarist","money","moneymaker","monitor","monk","monocle","monogram","monograph","monolith","monologue","monopoly","monorail","monosaccharide","monotone","monotony","monsoon","monster","monstrosity","montage","monthly","monument","moo","moon","moonlight","moonshiner","moor","mooring","moorland","mop","moral","moralist","morality","morass","moratorium","moray","morbidity","morgue","morn","moron","morsel","mortal","mortality","mortar","mortgage","mortician","mortification","mortise","mortuary","mosaic","mosque","mosquito","moss","mote","motel","motif","motion","motivation","motivator","motive","motor","motorbike","motorboat","motorcade","motorcar","motorcycle","motorist","motorman","motto","mouf","mould","mound","mount","mountain","mountaineer","mountainside","mountaintop","mounting","mousse","moustache","mouth","mouth-harp","mouthful","mouthpiece","movement","mover","movie","moviegoer","moviemaker","mower","mu","muddle","muffin","muffler","mug","mugger","mugging","mulatto","mulberry","mulch","mule","mullah","mullet","multimillionaire","multiple","multiplication","multiplier","multitude","mum","mumble","municipality","mural","murder","murderer","murderess","murmur","murmuring","muscle","muse","museum","mushroom","musical","musician","musicologist","musket","muskrat","muslin","mussel","must","mustache","mustang","muster","mutant","mutiny","mutter","muttering","mutton","muzzle","myosin","myriad","myrtle","mystery","mystic","mysticism","mystification","myth","mythology","nail","naivete","nameplate","namesake","nap","napkin","narration","narrative","narrator","nation","nation-state","nationalism","nationalist","nationality","nationalization","native","nativist","naturalist","nature","nave","navigation","navigator","navy","nay","ne'er-do-well","nebula","necessity","neck","neckerchief","necklace","necktie","nectar","needle","needlepoint","needler","negation","negative","negligee","negotiation","negotiator","neigh","neighbor","neighborhood","neighbour","neomort","neon","neophyte","nephew","nerd","nerve","nest","net","netting","nettle","network","neurologist","neurosis","neurosurgeon","neutralist","neutrality","neutron","newcomer","newel","newlywed","newness","newscast","newscaster","newsletter","newsmagazine","newsman","newspaper","newspaperman","newsreel","newsroom","newsstand","nicety","niche","nick","nickel","nickname","nightcap","nightclub","nightingale","nightshirt","nightstand","nightstick","nightwatch","nimbus","ninny","nip","nite","nitrate","nitrite","nitrogen","no","no-hitter","nobility","noble","nobleman","nod","node","nodule","noggin","noise","nomad","nomination","nominee","noncom","nonentity","nonsmoker","nonwhite","noodle","nook","noose","norm","normalcy","normality","nose","nostalgia","nostril","notary","notation","notch","note","notebook","notepad","notice","notification","notion","noun","nouveau","nouvelle","nova","novel","novelist","novella","novelty","novice","nozzle","nuance","nub","nude","nudge","nugget","nuisance","nullity","number","numeral","nun","nunnery","nurse","nursemaid","nursery","nurture","nut","nutmeg","nutrient","nutritionist","nutshell","nylon","nymph","oaf","oak","oar","oasis","oath","obeisance","obelisk","obfuscation","obituary","object","objection","objective","objectivist","objector","obligation","oblivion","oblong","oboe","obscenity","obscurity","observance","observation","observatory","observer","obsession","obsidian","obstacle","obstetrician","obstinacy","obstruction","obstructionist","occasion","occupancy","occupant","occupation","occurrence","ocean","oceanographer","ochre","octave","octogenarian","oddball","oddity","odometer","odor","odour","odyssey","oeuvre","ofa","offence","offender","offense","offensive","offer","offering","office","officeholder","officer","official","offshoot","ogre","oil","oiler","oilfield","oilman","oilskin","ointment","oldster","oligarchy","olive","ombudsman","omelet","omelette","omen","omission","one-liner","onion","onlooker","onslaught","ontology","onyx","ooze","op","opacity","opal","opener","opening","opera","operation","operative","operator","operetta","ophthalmologist","opiate","opinion","opment","opportunist","opportunity","opposite","opposition","oppression","oppressor","optimism","optimist","option","oracle","oral","orange","oration","orator","oratorio","oratory","orb","orbit","orbiter","orchard","orchestra","orchestration","orchid","ordeal","order","ordering","orderly","ordinance","ordination","ore","organ","organisation","organist","organization","organizer","orientation","orifice","origin","original","originator","ornament","ornamentation","orthodontist","orthodoxy","oscillation","oscillator","oscilloscope","ostrich","other","otter","ouster","outboard","outbreak","outburst","outcast","outcome","outcrop","outcropping","outcry","outdistance","outdoorsman","outfield","outfielder","outfit","outflow","outgrowth","outhouse","outing","outlaw","outlay","outlet","outline","outlook","outpatient","outpost","outpouring","output","outrage","outside","outsider","oval","ovary","ovation","oven","over","overall","overcoat","overdose","overdraft","overflow","overhang","overhaul","overhead","overlap","overlay","overload","overlord","overpass","override","overrun","overseer","oversight","oversimplification","overstatement","overtone","overture","overview","oviduct","ovum","owl","owner","ownership","ox","oxford","oxidation","oxide","oyster","pacemaker","pacer","pacifier","pacifist","pack","package","packer","packet","packing","pact","pad","paddle","paddock","paddy","padlock","paean","pagan","page","pageant","pagoda","paign","pail","pain","painkiller","paint","paintbrush","painter","painting","pairing","paisley","pal","palace","palate","palette","palisade","pall","palladium","pallbearer","pallet","pallor","palm","palsy","pamphlet","pan","panacea","pancake","panda","pane","panel","panelling","panhandle","panic","panoply","panorama","pansy","pant","panther","panting","pantomime","pantry","pantsuit","pap","papaya","paper","paperback","paperweight","paprika","para","parable","parachute","parade","paradigm","paradise","paradox","paraffin","parafoil","paragon","paragraph","parakeet","parallel","parallelism","parameter","paramour","paranoia","parapet","paraphrase","parasite","parasol","paratroop","paratrooper","parcel","parchment","pardner","pardon","parent","parenthesis","pariah","parish","parishioner","parity","park","parka","parkland","parkway","parley","parliament","parlor","parlour","parody","parole","paroxysm","parrot","parry","parson","partake","participant","participation","particle","particular","particularity","particulate","parting","partisan","partition","partment","partner","partnership","party","parvenu","pasha","pass","passage","passageway","passenger","passer","passer-by","passing","passion","passport","password","pasta","paste","pastel","pastiche","pastime","pastor","pastry","pasture","pasty","pat","patch","pate","patent","patentee","path","pathologist","pathology","pathway","patient","patina","patio","patrician","patriot","patriotism","patrol","patrolman","patron","patsy","patter","pattern","paunch","pauper","pause","pavement","pavilion","paw","pawl","pawn","pawnshop","paycheck","payday","payload","paymaster","payment","payoff","payout","payroll","pea","peace","peacemaker","peach","peacock","peak","peal","peanut","pear","pearl","peasant","peasantry","peat","pebble","pecan","peck","pecker","pecking","pectin","pectoral","peculiarity","pedal","pedant","peddler","pedestal","pedestrian","pediatrician","pedigree","pediment","pee","peek","peel","peeling","peep","peephole","peerage","peg","pegboard","pellet","pelt","pen","penance","pencil","pendant","pendulum","penguin","penicillin","peninsula","penitence","penitent","penitentiary","penknife","pennant","pension","pensione","pensioner","penthouse","penumbra","pepper","peppermint","pepperoni","percentage","perception","percussion","percussionist","peregrine","perennial","perfection","perfectionist","perfidy","perforation","performance","performer","perfume","perience","peril","perimeter","period","periodical","periphery","periscope","permission","permit","peroration","perpetrator","perplexity","persimmon","persona","personage","personality","personification","perspective","perspiration","persuasion","pertinence","perusal","pessimist","pest","pesticide","pestilence","pet","petal","petit","petition","petitioner","petticoat","pettiness","pew","phaeton","phalanx","phantasy","phantom","pharaoh","pharmacist","pharmacy","phase","pheasant","phenomenon","philanthropist","philanthropy","philistine","philosopher","philosophy","phobia","phone","phoneme","phonograph","phony","phosphate","phosphor","photo","photocell","photocopy","photograph","photographer","photon","phrase","phrasing","physician","physicist","physiologist","physiology","physique","pi","pianist","piazza","pic","pick","pick-up","pickax","picker","picket","picking","pickle","pickpocket","pickup","picnic","picture","pidgin","pie","piece","pier","piety","pig","pigeon","pigeonhole","piggy","piggyback","piglet","pigment","pigsty","pigtail","pile","pilgrim","pilgrimage","piling","pill","pillar","pillbox","pillow","pillowcase","pilot","pin","pinafore","pinball","pincer","pinch","pine","pineapple","ping","pinhead","pink","pinkie","pinky","pinnace","pinnacle","pinstripe","pinwheel","pioneer","pipe","pipeline","piper","piracy","pirate","pistachio","pistol","piston","pit","pitch","pitcher","pitchfork","pitchman","pittance","pituitary","pivot","pixie","pizza","placard","place","placement","placenta","placer","placing","plagiarism","plague","plaid","plain","plainclothesman","plaint","plaintiff","plait","plan","plane","planer","planet","planetoid","plank","planner","planning","plant","plantain","plantation","planter","planting","plaque","plasma","plaster","plastic","plate","plateau","platelet","platform","platitude","platoon","platter","play","playback","player","playground","playgroup","playhouse","playing","playmate","playoff","playpen","playroom","plaything","playwright","plaza","pleading","pleasantry","pleasure","plebiscite","pledge","plight","plot","plotting","plough","plow","ploy","plug","plum","plumage","plumber","plume","plunge","plural","plurality","plywood","pneumonia","pocket","pocketbook","pocketful","pod","podesta","podium","poem","poet","poetry","pogrom","poignancy","point","point-of-view","pointer","poise","poison","poisoning","polariser","polarity","polarization","polder","pole","polemic","policy","policymaker","polish","polishing","politician","polity","polka","poll","pollen","pollination","polling","pollster","pollutant","polluter","pollution","polyester","polygraph","polymer","polyp","pomegranate","pomp","pompadour","pomposity","pond","poniard","pony","ponytail","poodle","pool","poolhall","poorhouse","pop-up","popcorn","pope","poplar","poppy","popsicle","popularization","population","populist","porcelain","porch","porcupine","pore","porpoise","porridge","port","portal","portent","porter","portfolio","porthole","portico","portiere","portion","portrait","portraitist","portraiture","portrayal","posing","position","posse","possession","possessor","possibility","possum","post","post-mortem","postcard","poster","posterior","postgraduate","posting","postman","postmark","postmaster","postponement","postscript","postulate","posture","posturing","pot","potato","potency","potentate","potential","potentiality","pothole","potion","potpourri","potter","pottery","pouch","poultice","pound","pounding","pout","powder","power","powerboat","powerhouse","practicality","practice","practitioner","pragmatist","prairie","praise","pram","prance","prayer","preacher","preaching","preamble","precaution","precedent","precept","precinct","precipice","precipitate","precision","precondition","precursor","predicament","predicate","prediction","predilection","predisposition","prefab","preface","prefect","prefecture","preference","preferment","prejudice","prelate","prelude","premier","premiere","premise","premium","premonition","preoccupation","prep","preparation","preppie","prerequisite","prerogative","presbytery","prescription","presence","present","presentation","presenter","presentiment","preservation","preservative","preserve","preserver","presidency","president","press","pression","pressure","presumption","pretence","pretender","pretense","pretension","pretext","pretzel","prevalence","prevention","preview","prey","price","pricing","prick","prickle","pride","priest","priestess","priesthood","prig","prima","primary","primate","primer","primitive","principal","principality","principle","print","printer","printing","printout","priority","prise","prism","privacy","private","privation","privilege","prize","prizefighter","prizewinner","pro","proach","probability","probation","probe","problem","procedure","proceeding","process","procession","processor","proclamation","proclivity","procurement","prod","prodding","prodigality","prodigy","produce","producer","product","production","productivist","productivity","profession","professional","professor","professorship","proficiency","profile","profit","profligacy","profundity","progenitor","progeny","prognosis","program","programme","programmer","progression","progressive","prohibition","project","projectile","projection","projectionist","projector","proletariat","prologue","prolongation","promenade","prominence","promise","promontory","promoter","promotion","prompt","prompting","prong","pronghorn","pronoun","pronouncement","pronunciation","proof","prop","propellant","propeller","propensity","property","proponent","proportion","proposal","proposition","proprietor","propriety","proscription","prosecution","prosecutor","prospect","prospector","prosthesis","protagonist","protection","protector","protectorate","protege","protein","protest","protester","protocol","proton","prototype","protrusion","provenance","proverb","providence","provider","province","provincialism","provision","provocateur","provocation","prow","prowl","prowler","proximity","proxy","prude","prune","pruning","psalm","pseudonym","pseudopatient","psi","psion","psych","psyche","psychoanalyst","pub","public","publican","publication","publicist","publisher","puck","pudding","puddle","puff","puke","pullback","pulley","pullover","pulp","pulpit","pulsar","pulsation","pulse","pump","pumper","pumpkin","pun","punch","puncher","puncture","pundit","punt","punter","pupil","purchase","purchaser","puree","purge","purification","purist","puritan","purity","purple","purpose","purr","purse","purser","pursuer","pursuit","purveyance","purveyor","push","pushbutton","pushcart","pusher","pushover","put-down","putdown","puter","putt","putter","puzzle","puzzlement","pylon","pyramid","pyre","python","quack","quadrangle","quadrant","quagmire","quake","qualification","qualifier","quality","qualm","quandary","quantity","quark","quarrel","quarry","quarter","quarterback","quarterly","quartermaster","quartet","quasar","quaver","quay","queen","query","quest","question","questioner","questioning","questionnaire","queue","quiche","quickie","quicksand","quiet","quill","quilt","quince","quintet","quip","quirk","quitter","quiver","quota","quotation","quote","quotient","ra","rabbi","rabbit","raccoon","race","racehorse","racer","racetrack","racist","rack","racket","raconteur","racquet","rad","radar","radiation","radiator","radical","radicalism","radio","radioisotope","radiologist","radioman","radish","radius","raffle","raft","rafter","rag","ragtag","raid","raider","rail","railing","railroad","railway","raiment","rain","rainbow","raincoat","raindrop","rainfall","rainstorm","raise","raiser","raisin","raising","rake","rally","ram","rambling","ramp","rampart","ramrod","ranch","rancher","rancor","range","rangeland","ranger","rank","ranking","ransom","rant","rap","rapacity","rapier","rapping","rapport","rapture","rarity","rascal","rash","rashness","rasp","raspberry","ratchet","rathorn","ratification","rating","ratio","ration","rationale","rationalist","rationality","rationalization","rattle","rattler","rattlesnake","rave","raven","ravine","ray","rayon","razor","re-creation","re-election","re-enactment","re-evaluation","rea","reach","reaction","reactor","read","reader","reading","readjustment","readout","reaffirmation","realignment","realist","reality","realization","reallocation","realm","realtor","realty","ream","reanimation","reaper","reappearance","reappointment","reappraisal","rear","rearrangement","reason","reasoning","reassessment","reassignment","reassurance","rebate","rebbe","rebound","rebuff","rebuke","rebuttal","rec","recapitulation","receipt","receiver","receivership","receptacle","reception","receptionist","receptor","recess","recession","recipe","recipient","reciprocity","recital","recitation","recitative","reckoning","reclamation","recliner","recluse","recognition","recognizance","recollection","recommendation","reconciliation","reconnoiter","reconsideration","reconstruction","record","recorder","recording","recount","recourse","recovery","recreation","recrimination","recruit","recruiter","recruitment","rectangle","rector","rectory","recuperation","recurrence","redefinition","redemption","redeployment","redesign","redhead","rediscovery","redistribution","redneck","redoubt","redskin","reduction","redundancy","redwood","reed","reef","reefer","reek","reel","reentry","refectory","referee","reference","referendum","referent","referral","refill","refinement","refiner","refinery","reflection","reflector","reflex","reform","reformation","reformer","reformulation","refraction","refractor","refrain","refresher","refreshment","refrigerator","refuge","refugee","refund","refusal","refuse","refusenik","refutation","regeneration","regent","regime","regimen","regiment","region","register","registrar","registration","registry","regression","regret","regularity","regulation","regulator","regurgitation","rehabilitation","rehash","rehearsal","reign","reimbursement","reincarnation","reinforcement","reinstatement","reinterpretation","reinvestment","reissue","reiteration","reject","rejection","rejoinder","relapse","relative","relativist","relativity","relaxation","relay","release","reliance","relic","relief","religion","relish","relocation","reluctance","remainder","remake","remark","remedy","remembering","remembrance","reminder","reminiscence","remission","remnant","removal","remove","remover","remuneration","rendering","rendition","renegade","renewal","renovation","rent","rental","renter","renunciation","reopening","reorganization","rep","repair","repairman","reparation","repast","repatriation","repayment","repeat","repeater","repellent","repertoire","repertory","repetition","replacement","replay","replenishment","replica","reply","report","reporter","reporting","repose","repository","repre","representation","representative","repression","reprieve","reprimand","reprint","reprisal","reprise","reproach","reproof","reptile","republic","republican","repudiation","repulsion","repurchase","reputation","request","requiem","requirement","requisite","requisition","rerun","resale","rescue","rescuer","researcher","resemblance","resentment","reservation","reserve","reservist","reservoir","residence","residency","resident","residue","resignation","resin","resistance","resolution","resonance","resort","resource","respect","respiration","respirator","respite","respondent","response","responsibility","restatement","restaurant","restaurateur","restitution","restoration","restorer","restraint","restriction","restroom","restructuring","result","resume","retailer","retainer","retaliation","retardant","retardation","retary","retch","retelling","reticence","retina","retinue","retiree","retirement","retort","retraction","retreat","retrenchment","retrial","retriever","return","reunion","revaluation","revelation","revelry","revenge","revenue","reverberation","reverie","reversal","reverse","reversion","review","reviewer","revision","revisionist","revitalization","revival","revocation","revolt","revolution","revolver","revue","revulsion","reward","rhetoric","rhinestone","rhizome","rhododendron","rhyme","rhythm","riage","rib","ribbon","rickshaw","ricochet","riddle","ride","rider","ridge","ridgeline","ridicule","riding","riff","riffle","rifle","rifleman","rift","rig","rigging","right","right-hander","right-of-way","rightist","rigidity","rigor","rim","rime","rind","ring","ringer","ringing","ringleader","ringmaster","rink","rinse","rip","ripoff","riposte","ripple","riser","rising","rite","ritual","rival","rivalry","river","riverbank","riverbed","riverboat","rivet","rivulet","ro","roach","road","roadbed","roadblock","roadhouse","roadside","roadster","roadway","roaring","roast","robber","robbery","robe","robin","robot","rock","rocker","rocket","rod","rodent","rodeo","rogue","role","roll","rollback","rollcall","roller","rolling","romp","roof","rooftop","rook","rookery","rookie","room","roommate","roost","rooster","root","rope","rosary","rose","rosebud","rosette","roster","rotation","rote","rotor","rotunda","rouge","roughage","roughhouse","roughneck","round","roundabout","roundness","roundup","roustabout","rout","route","router","routine","routing","rover","row","rowboat","rower","royalist","royalty","rub","rubber","rubber-stamp","rubbing","rube","rubric","ruby","ruck","rucksack","rudder","rue","ruffle","rug","ruin","rule","ruler","ruling","rum","rumble","rumbling","rumination","rummy","rumor","rumour","rump","run-up","runaway","rune","rung","runner","running","runoff","runt","runway","rupture","ruse","rusher","rust","rustle","rustling","rut","rye","sabbatical","saber","sable","sabra","sabre","sac","sack","sacking","sacrament","sacrifice","sacrificer","sacrilege","saddle","saddlebag","sadist","sadness","safari","safe","safeguard","safety","saga","sage","sail","sailboat","sailer","sailing","sailor","sake","salad","salamander","salami","salary","salon","saloon","salsa","salt","salutation","salute","salvage","salvation","salve","salver","samba","samovar","sample","sampler","sampling","sanatorium","sanction","sanctuary","sanctum","sandal","sandbag","sandbar","sandbox","sander","sandstone","sandwich","sanitarium","sapling","sapper","sapphire","sarcasm","sardine","sari","sash","satchel","satellite","satin","satire","satirist","satisfaction","satrap","satyr","sauce","saucepan","saucer","sauna","sausage","savanna","savannah","savant","save","saver","saving","savior","savor","saw","sawhorse","sawmill","sax","saxophone","saxophonist","saying","scab","scabbard","scaffold","scaffolding","scale","scallop","scalp","scalpel","scam","scamp","scan","scandal","scanner","scare","scarf","scarlet","scat","scattering","scavenger","scenario","scenarist","scene","scent","scepter","schedule","schema","scheme","schemer","schism","scholar","scholarship","school","schoolhouse","schoolmarm","schoolroom","schoolteacher","schoolyard","schooner","science","scientist","scimitar","scion","scolding","scoop","scooter","scope","score","scoreboard","scorecard","scorer","scoring","scorn","scotch","scoundrel","scourge","scouring","scout","scowl","scrambler","scrap","scrapbook","scrape","scraper","scratch","scratching","scrawl","scream","screamer","screaming","scree","screech","screen","screening","screenplay","screenwriter","screw","screwball","screwdriver","scribbling","scribe","scrim","scrimmage","script","scripture","scriptwriter","scrivener","scroll","scrub","scrubber","scrubbing","scruple","scuffle","scuffling","scullery","sculptor","sculpture","scythe","sea","seabed","seafood","seagull","seal","sealer","sealskin","seam","seaman","seamstress","seance","seaplane","seaport","search","searcher","searchlight","seascape","seashell","seashore","seasoning","seat","seating","seaway","seaweed","secession","secondary","secrecy","secret","secretion","sect","section","sector","security","sedan","sedge","sediment","sedition","seed","seedbed","seeding","seedling","seedship","seeker","seer","seesaw","segment","segmentation","segregationist","seine","seismometer","seizure","selection","selector","self","self-congratulation","self-criticism","self-deception","self-delusion","self-denial","self-doubt","self-examination","self-image","self-indulgence","self-interest","self-justification","self-portrait","self-sacrifice","self-satisfaction","seller","sellout","semaphore","semblance","semester","semi","semi-circle","semicircle","semiconductor","seminar","seminarian","seminary","sen","senate","senator","sender","sending","senior","senor","sensation","sense","sensibility","sensitivity","sensor","sensuality","sentence","sentiment","sentimentalist","sentimentality","sentinel","sentry","separation","separator","sepulcher","sequel","sequence","serenade","serf","sergeant","serial","sermon","serpent","serum","servant","serve","server","service","serving","sesame","set-up","setback","settee","setter","setting","settlement","settler","settling","setup","sewer","shack","shade","shading","shadow","shaft","shake","shake-up","shakedown","shaker","shakeup","shale","sham","shaman","shame","shampoo","shank","shanty","shantytown","shape","shaping","shard","share","sharecropper","shareholder","shark","sharpener","sharpness","sharpshooter","shave","shaver","shaving","shawl","sheaf","sheath","shed","sheen","sheepherder","sheepskin","sheet","sheik","shelf","shell","shellac","shelling","shelter","shepherd","sherbet","sheriff","sherry","shield","shift","shifting","shiksa","shill","shimmer","shimmy","shin","shindig","shingle","ship","shipload","shipment","shipwreck","shipwright","shipyard","shire","shirt","shirtmaker","shirttail","shirtwaist","shiver","shivering","sho","shoal","shock","shocker","shoe","shoestring","shoot","shooter","shooting","shootout","shop","shopkeeper","shopper","shore","shoreline","short","shortage","shortcoming","shortcut","shortening","shortfall","shortstop","shot","shotgun","shoulder","shout","shouting","shove","shovel","show","showcase","showdown","shower","showing","showman","showpiece","showplace","showroom","shred","shrew","shriek","shrimp","shrine","shrink","shroud","shrub","shrubbery","shrug","shtetl","shudder","shuffle","shuffling","shunt","shutdown","shutout","shutter","shuttle","sibling","sickle","sidearm","sideboard","sidecar","sidekick","sideline","sideshow","sidewalk","sidewinder","siding","siege","siesta","sieve","sigh","sight","sighting","sign","signal","signalman","signature","signer","significance","signification","signifier","signing","signora","signpost","silage","silence","silencer","silhouette","silicone","silk","sill","silver","similarity","simile","simpleton","simplicity","simplification","simulation","simulator","sinecure","sinew","singer","single","singsong","singularity","sink","sinker","sinkhole","sire","siren","sirloin","sit","sitcom","site","siting","sitter","sitting","sitting-room","situation","six-pack","sizzle","skate","skater","skein","skeleton","skeptic","skepticism","sketch","sketchbook","skewer","ski","skid","skier","skiff","skill","skillet","skim","skimmer","skin","skip","skipper","skirmish","skirmishing","skirt","skit","skull","skullcap","skunk","sky","skylight","skyline","skyrocket","skyscraper","slab","slack","slag","slalom","slamming","slander","slant","slash","slat","slate","slaver","slayer","slaying","sledge","sledgehammer","sleeper","sleeping","sleepwalker","sleet","sleeve","sleigh","sleight","sleuth","slice","slick","slicker","slide","slider","slime","sling","slingshot","slip","slippage","slipper","slit","sliver","slob","slobber","slogan","sloop","slop","slope","slot","sloth","slouch","slough","slowdown","sluice","slum","slumber","slump","slur","slurry","smack","small","smash","smattering","smear","smell","smelter","smidgen","smile","smirk","smith","smithy","smock","smoke","smoker","smokescreen","smokestack","smudge","smut","snack","snail","snake","snakebite","snap","snapper","snapshot","snare","snarl","snatch","sneak","sneaker","sneer","sneeze","snicker","sniff","sniffer","snifter","snip","sniper","snitch","snob","snobbery","snooper","snooze","snore","snorkel","snort","snot","snout","snow","snowball","snowbank","snowdrift","snowfall","snowfield","snowflake","snowman","snowmobile","snowplow","snowshoe","snowstorm","snub","snuffler","soap","soapbox","sobbing","sobriquet","socialism","socialist","socialite","society","sociology","sock","socket","sod","soda","sofa","softball","softener","softening","softness","soil","sojourn","solace","solder","soldier","sole","solemnity","solicitation","solicitor","solicitude","solid","solidarity","soliloquy","solitude","solo","soloist","solstice","solution","solvent","somersault","son","sonar","sonarman","sonata","song","songwriter","sonnet","sonobuoy","soot","sophistication","sophistry","sophomore","sor","sorbet","sorcerer","sorcery","sore","sorghum","sorority","sorrow","sortie","sorting","souffle","soul","sound","sounding","soundtrack","soup","source","sourdough","southerner","southpaw","souvenir","sovereign","sovereignty","soviet","sow","soybean","spa","space","spaceman","spaceport","spacer","spaceship","spacesuit","spacing","spade","span","spaniel","spanking","spar","spark","sparkle","sparrow","spasm","spat","spate","spatter","spatula","speakeasy","speaker","speaking","spear","specialist","speciality","specialization","specialty","specification","specimen","speck","spectacle","spectator","specter","spectre","spectrum","speculation","speculator","speech","speechwriter","speed","speedboat","speedometer","speedster","spell","spelling","spend","spender","spendthrift","sphere","spice","spider","spiderweb","spiel","spigot","spike","spill","spillway","spin","spindle","spine","spinnaker","spinner","spinoff","spinster","spiral","spire","spirit","spiritualist","spirituality","spirochete","spit","spitball","spite","splash","splashing","splat","spleen","splendor","splendour","splint","splinter","split","splitting","splotch","spoil","spoiler","spoke","sponge","sponsor","sponsorship","spoof","spook","spool","spoon","spoonful","spoor","spore","sporophyte","sport","sportscaster","sportsman","sportswriter","spot","spotlight","spotter","spouse","spout","sprawl","spray","spraying","spread","spree","sprig","spring","springboard","sprinkler","sprinkling","sprint","sprinter","sprite","spruce","spume","spur","spurt","spy","squab","squabble","squad","squadron","squall","square","squash","squat","squatter","squaw","squawk","squeak","squeal","squeeze","squint","squire","squirm","squirrel","squirt","stability","stabilizer","stable","stack","stadium","staffer","stag","stage","stagecoach","stagger","staging","stain","stair","staircase","stairway","stairwell","stake","stakeout","stalemate","stalk","stall","stamp","stampede","stance","stanchion","stand","standard","standard-bearer","standing","standoff","standout","standpoint","standstill","stanza","staple","star","starburst","starch","stare","starlet","starling","starship","start","start-up","starter","stash","state","statehouse","statement","stateroom","statesman","static","station","stationmaster","statistician","statue","statuette","stature","statute","stave","stead","steak","steam","steamboat","steamer","steamship","steed","steel","steelworker","steeple","steer","stein","stele","stem","stench","stenographer","stepladder","steppe","stepping-stone","stepson","stereo","stereotype","stern","stethoscope","stevedore","stew","steward","stewardess","stick","sticker","stickler","stickup","stiff","stigma","still","stilt","stimulant","stimulation","sting","stinger","stink","stinker","stint","stipend","stipulation","stir","stirrup","stitch","stoan","stock","stockade","stockbroker","stockholder","stocking","stockpile","stockroom","stockyard","stoic","stole","stone","stoneware","stooge","stool","stoop","stopgap","stoplight","stopover","stoppage","stopper","stopwatch","store","storefront","storehouse","storekeeper","storeroom","stork","storm","story","storyboard","storybook","storyteller","stout","stove","stovepipe","strain","strait","straitjacket","strand","stranger","strangle","strangler","strangulation","strap","stratagem","strategist","strategy","stratum","straw","strawberry","streak","stream","streamer","street","streetcar","streetlamp","streetlight","strength","stress","stretch","stretcher","stricture","stride","stridency","strike","strikeout","striker","string","stringency","stringer","strip","stripe","striving","strobe","stroke","stroll","stroller","strongbox","stronghold","strongman","strop","struction","structure","strudel","struggle","strumpet","strut","stub","stubble","stud","student","studio","study","stuff","stuffing","stumble","stumbling","stump","stunner","stunt","stupor","sturgeon","stutter","sty","style","styling","stylist","stylus","suasion","sub","subcommittee","subcompact","subcontractor","subculture","subdivision","subgroup","subject","subjectivist","subjugation","sublet","sublimation","submarine","submission","subordination","subpena","subpoena","subscriber","subscription","subset","subsidiary","subsidy","substage","substance","substation","substitute","substitution","substrate","substructure","subterfuge","subtext","subtitle","subtlety","subtraction","suburb","suburbanite","subversion","subway","success","succession","successor","succor","suede","suffix","suffocation","sugar","suggestion","suit","suitcase","suite","suitor","sulfate","sulfide","sulfite","sulfur","sulphate","sultan","summary","summation","summit","sun","sunbeam","sunburn","sunburst","sundae","sundial","sunflower","sunlight","sunrise","sunset","suntan","super","supercomputer","superficiality","supergiant","superhighway","superintendent","superior","superiority","superman","supermarket","supernova","superpower","superstar","superstructure","supervisor","supper","supplement","supplicant","supplication","supplier","supply","support","supporter","supposition","suppression","surcharge","surcoat","surety","surface","surfboard","surfeit","surfer","surge","surgeon","surgery","surmise","surname","surprise","surrender","surrogate","surround","surtax","surveillance","survey","surveyor","survival","survivor","susceptibility","suspect","suspension","suspicion","suture","swagger","swallow","swami","swamp","swampland","swan","swarm","swastika","swatch","swath","swathe","sweat","sweatband","sweater","sweating","sweatshirt","sweatshop","sweatsuit","sweet","sweetener","sweetheart","sweetie","sweetness","swell","swig","swim","swimmer","swimsuit","swindle","swindler","swing","swinger","swipe","swirl","swish","switch","switchback","switchblade","switchboard","switching","swivel","swoon","swoop","sword","swordsman","sycamore","sycophant","syllable","syllogism","symbol","symbolism","symmetry","sympathizer","sympathy","symphony","symposium","symptom","synagogue","synapse","syndicate","syndication","syndrome","synod","synonym","synopsis","synthesis","synthesizer","syringe","syrup","system","tab","tabby","tabernacle","table","tableau","tablecloth","tablespoon","tablet","tabletop","tableware","tabloid","taboo","tabulation","tack","tactic","tactician","taffeta","tag","tai-pan","tail","tailback","tailcoat","tailgate","taillight","tailor","tailspin","taint","take","takeoff","takeover","taker","taking","talc","tale","talent","talker","tally","talon","tamale","tambourine","tamer","taming","tampering","tan","tance","tang","tangent","tangle","tank","tankard","tanker","tanner","tannin","tantrum","tap","tape","taper","tapestry","taping","tapping","tar","tarantula","target","tariff","tarp","tarpaulin","tart","tary","taskmaster","tassel","taste","tasting","tat","tation","tattoo","taunt","tautology","tavern","tavern-keeper","taverna","tax","taxation","taxi","taxicab","taxiway","taxpayer","tea","teacher","teaching","teacup","teahouse","teak","teakettle","team","teammate","teamster","teapot","teardrop","teaspoon","teat","technicality","technician","technique","technocrat","technology","teddy","tedium","tee","teetotaler","teevee","tektite","tel","telecast","telegram","telegraph","telephone","telescope","telethon","teletype","television","telex","teller","telling","telltale","temper","temperament","temperature","tempest","template","temple","tempo","temptation","temptress","tenancy","tenant","tendency","tender","tenderness","tendon","tendril","tenement","tenet","tenon","tenor","tense","tension","tent","tentacle","tention","tenure","tepee","tequila","terminal","termination","terminology","tern","terrace","terracotta","terrain","terrarium","terrier","territory","terror","terrorist","testament","tester","testimonial","testimony","tetracycline","text","textbook","textile","texture","thang","thanksgiving","thatch","thaw","the","theater","theatre","theft","theme","theologian","theology","theorem","theoretician","theorist","theorizing","theory","ther","therapist","therapy","thermometer","thermostat","these","thesis","thickening","thicket","thickness","thief","thievery","thigh","thimble","thing","thinker","thinking","thinning","thistle","thorax","thorn","thornbush","thoroughbred","thoroughfare","thought","thrall","thrashing","thread","threat","three-star","threesome","threshing","threshold","thrift","thrill","thriller","throat","throb","throbbing","throne","throng","throttle","throw","throwaway","throwback","thrower","thrum","thrush","thrust","thud","thug","thumb","thumbnail","thump","thumping","thunder","thunderbolt","thunderclap","thunderstorm","thwack","thyme","thyroid","tiara","tibia","tic","tick","ticker","ticket","ticking","tickle","tidbit","tide","tie","tie-up","tiger","tile","till","tiller","tilt","timber","timberland","timbre","timeline","timepiece","timer","timetable","timidity","timing","tin","tincture","tine","ting","tinge","tingle","tingling","tinker","tint","tinting","tip","tipper","tiptoe","tirade","tissue","titan","tithe","tithing","titillation","title","toad","toast","toaster","tobacconist","toboggan","toddler","toddy","toe","toehold","toenail","toffee","toga","toil","toilet","toke","token","tolerance","toll","tom","tomahawk","tomato","tomb","tomboy","tombstone","tomcat","tome","tonality","tong","tongue","tonic","tonnage","tonsillectomy","tonsure","tool","toolbox","tooth","toothache","toothbrush","toothpaste","toothpick","topcoat","topic","topping","topside","torch","torchlight","torment","tormentor","tornado","torpedo","torpor","torque","torrent","tort","torte","tortilla","tortoise","torture","torturer","toss","tossing","tot","total","totalitarianism","totality","tote","totem","touch","touchdown","touchstone","tough","toupee","tour","tourist","tournament","tourney","tourniquet","tow","towel","tower","town","townhouse","township","townsman","toy","trace","tracer","tracery","tracing","track","tracker","tract","tractor","trade","trademark","trader","tradesman","tradition","traditionalist","traffic","trafficker","tragedy","trail","trailer","train","trainee","trainer","training","trainload","trajectory","tram","tramp","trampoline","trance","tranquilizer","transaction","transceiver","transcript","transcription","transfer","transference","transformation","transformer","transfusion","transgression","transistor","transit","transition","translation","translator","transmission","transmitter","transmutation","transom","transparency","transplant","transplantation","transport","transportation","transvestite","trap","trapdoor","trapeze","trapper","trapping","tration","travail","travel","traveler","traveller","travelogue","traverse","travesty","trawler","tray","treachery","treacle","tread","treadmill","treason","treasure","treasurer","treasury","treat","treatise","treatment","treaty","treble","tree","treetop","trembling","tremor","trench","trenchcoat","trend","trepidation","trespass","trespasser","tress","trestle","triad","trial","triangle","tribe","tribesman","tribulation","tribunal","tribune","tributary","tribute","trick","trickle","trickster","tricolor","tricycle","trifle","trigger","trill","trilogy","trinket","trip","tripe","triple","triplicate","tripod","triumph","triviality","troika","troll","trolley","trombone","trombonist","troop","trooper","trophy","trot","troubadour","trouble","troublemaker","troubleshooter","trough","troupe","trouper","trouser","trove","trowel","truancy","truce","truck","trucker","truckload","truffle","truism","trump","trumpet","trumpeter","truncheon","trunk","truss","trust","trustee","trusteeship","truth","tryout","tryst","tsar","tub","tuba","tube","tuber","tuft","tug","tug-of-war","tugboat","tuition","tulip","tulle","tumble","tumbler","tumbleweed","tummy","tumor","tumult","tundra","tune","tune-up","tuner","tunic","tuning","tunnel","turban","turbine","turbocharger","turbulence","turd","ture","tureen","turkey","turmoil","turnabout","turnaround","turncoat","turning","turnip","turnkey","turnout","turnover","turnpike","turnstile","turntable","turquoise","turret","turtle","turtleneck","tusk","tussle","tutor","tutorial","tutu","tux","tuxedo","twang","tweed","tween","twick","twig","twilight","twill","twin","twine","twinge","twinkle","twirl","twist","twister","twit","twitch","twitching","ty","tycoon","tyke","typer","typescript","typewriter","typhoid","typhoon","typist","typology","tyranny","tyrant","udder","umber","umbrella","umpire","unbutton","uncertainty","underclass","undercurrent","underdog","undergarment","undergraduate","underground","underling","underpass","undersecretary","underside","understatement","understudy","undertaker","undertaking","undertone","undertow","underwriter","underwriting","undoing","undulation","unfairness","unicorn","unification","uniform","uniformity","union","unity","universe","university","unreality","upbringing","update","updraft","upheaval","upland","uplift","uprising","upstart","upsurge","upswing","urchin","ureter","urgency","urging","urn","usage","user","usher","usurpation","usurper","utility","utopia","utterance","vacancy","vacation","vaccination","vaccine","vacillation","vagabond","vagrant","valedictorian","valentine","valet","validation","valise","valley","valuation","value","valve","van","vandal","vane","vanity","vantage","vapor","variability","variable","variance","variant","variation","variety","varnish","vase","vassal","vastness","vat","vault","vaulting","veal","vector","vegetable","vegetarian","vegetation","vehicle","veil","vein","velocity","velour","velvet","vendetta","vendor","veneer","veneration","vent","ventilator","ventricle","venture","venue","ver","veranda","verb","verdict","verge","verification","verity","vermouth","vernacular","verse","version","versity","vertebra","vertical","vessel","vest","vestibule","vestige","vet","veteran","veterinarian","veto","vexation","vial","vibration","vibrator","vicar","vice","vice-chairman","vice-president","viceroy","victor","victory","video","videocassette","videodisc","videotape","viewer","viewing","viewpoint","viewscreen","vigil","vigilante","vignette","villa","village","villager","vindication","vine","vinegar","vineyard","vintage","vinyl","violet","violin","violinist","viper","virologist","virtue","visa","visage","vise","vision","visit","visitation","visitor","visor","vista","visualization","vitamin","vivacity","vocabulary","vocalist","vocalization","vocation","vodka","vogue","voice","void","volatility","volcano","volition","volley","volleyball","voltage","volume","volunteer","vomit","vortex","voter","voucher","vow","vowel","voyage","voyce","voyeur","vulnerability","waddle","wafer","waffle","wag","wage","wager","wagon","waif","wail","wailing","waist","waistband","waistcoat","waistline","wait","waiver","waking","walk","walk-up","walker","walkie-talkie","walkout","walkway","wall","wallet","walleye","wallflower","wallop","wallow","wallpaper","walnut","wand","wanderer","wane","want","war","war-horse","warbler","warden","wardrobe","wardroom","ware","warehouse","warhead","warhorse","warlord","warm-up","warmth","warmup","warning","warp","warrant","warranty","warren","warrior","warship","wart","wartime","wash","washbasin","washboard","washcloth","washer","washing","washout","washroom","washstand","washtub","wasp","waste","wastebasket","wasteland","wastrel","watch","watchdog","watcher","watching","watchman","watchtower","watchword","water","watercolor","waterfall","waterfront","watering","waterman","watermelon","watershed","waterway","wattle","wave","wavelength","wax","wayfarer","weal","weapon","wear","wearer","wearing","weasel","weather","weatherman","weave","weaver","weaving","web","wedding","wedge","weed","weekly","weighing","weight","welcome","welder","well","wellspring","welt","welterweight","wench","werewolf","werowance","whack","whale","whalebone","whaler","whammy","wharf","whatnot","wheat","wheel","wheelbarrow","wheelchair","wheelhouse","wheeling","wheeze","whelp","which","whiff","whim","whimper","whimpering","whimsy","whine","whining","whinny","whip","whiplash","whipping","whir","whirl","whirlpool","whirlwind","whirr","whirring","whisk","whisker","whiskey","whisky","whisper","whispering","whistle","whistling","white","whitey","whodunit","whole","wholesaler","whoosh","whopper","whorl","wick","wickedness","wicket","width","wig","wiggle","wigwam","wil","wildcat","wilderness","wildfire","will","willow","wimp","wince","winch","wind","windbreaker","windfall","windmill","window","windowpane","windowsill","windpipe","windshield","wine","wineglass","winery","wingman","wingspan","wink","winner","winning","wipe","wire","wiretap","wisdom","wisecrack","wish","wishbone","wisp","wit","witch","withdrawal","withholding","witness","witticism","wizard","wizardry","wobble","woe","wok","wolf","wonder","wondering","wonderland","wonderment","wood","woodchuck","woodcutter","woodland","woodpecker","woodpile","woodshed","woodsman","woodworker","wool","word","wording","workbench","workday","worker","workhorse","workhouse","working","workingman","workload","workman","workout","workplace","workroom","workshirt","workshop","workstation","worktable","workweek","world","world-system","world-view","worldview","worm","worrier","worry","worsted","worthy","wound","wounding","wraith","wrangle","wrangling","wrap","wrapper","wrapping","wreath","wreck","wrecker","wren","wrench","wrestler","wrestling","wretch","wrinkle","wrist","wristwatch","writ","writer","writhing","writing","wrong","wrongdoing","wyrm","x-ray","yacht","yachtsman","yam","yard","yardstick","yarmulke","yarn","yawn","yearbook","yearling","yearning","yeast","yell","yelling","yellow","yellow-green","yeoman","yew","yield","yogurt","yoke","yolk","youngster","youth","yucca","yuppie","zation","zealot","zebra","zero","zigzag","zipper","zombie","zone","zoo","zoologist","zoom","zygote"]),Xy}var WV;function VV(){if(WV)return nE;WV=1,Object.defineProperty(nE,"__esModule",{value:!0}),nE.nouns=nE.adjectives=void 0;const e=WKA();nE.adjectives=e.default;const A=VKA();return nE.nouns=A.default,nE}var aE={},ZV;function ZKA(){if(ZV)return aE;ZV=1,Object.defineProperty(aE,"__esModule",{value:!0}),aE.createSeededRandomInt=aE.getRandomInt=void 0;function e(){const o=typeof globalThis<"u"?globalThis:void 0;return o&&o.crypto?o.crypto:void 0}let A=(Date.now()^2654435769)>>>0;function t(){return A^=A<<13,A>>>=0,A^=A>>>17,A>>>=0,A^=A<<5,A>>>=0,A>>>0}function i(o){const g=e();if(g&&typeof g.getRandomValues=="function"){const I=new Uint32Array(o);return g.getRandomValues(I),I}const l=new Uint32Array(o);for(let I=0;I<o;I++)l[I]=t();return l}const r=(o,g)=>{if(!Number.isFinite(o)||!Number.isFinite(g))throw new Error("Invalid bounds for getRandomInt");if(g<o)throw new Error("maxInclusive must be >= minInclusive");if(o===g)return o;const[l]=i(1),I=g-o+1;return o+l%I};aE.getRandomInt=r;function n(o){let g=1779033703^o.length;for(let l=0;l<o.length;l++)g=Math.imul(g^o.charCodeAt(l),3432918353),g=g<<13|g>>>19;return function(){return g=Math.imul(g^g>>>16,2246822507),g=Math.imul(g^g>>>13,3266489909),(g^=g>>>16)>>>0}}function a(o){return function(){o|=0,o=o+1831565813|0;let g=Math.imul(o^o>>>15,1|o);return g=g+Math.imul(g^g>>>7,61|g)^g,((g^g>>>14)>>>0)/4294967296}}function s(o){const g=String(o),I=n(g)(),C=a(I);return(E,u)=>{if(!Number.isFinite(E)||!Number.isFinite(u))throw new Error("Invalid bounds for getRandomInt");if(u<E)throw new Error("maxInclusive must be >= minInclusive");if(E===u)return E;const d=C(),Q=u-E+1;return E+Math.floor(d*Q)}}return aE.createSeededRandomInt=s,aE}var sE={},jV;function _V(){if(jV)return sE;jV=1,Object.defineProperty(sE,"__esModule",{value:!0}),sE.buildProfanityFilter=sE.DEFAULT_PROFANITY=void 0,sE.DEFAULT_PROFANITY=["ass","asses","asshole","bastard","bitch","bloody","bollocks","bugger","cock","cocks","cocksucker","crap","cunt","damn","dick","douche","dumb","dumber","dumbest","fag","faggot","fuck","fucked","fucker","fucking","goddam","goddamn","goddamned","hell","jerk","moron","nazi","nuts","piss","pisser","pissing","prick","retard","shit","shitty","slut","tits","twat","wanker"];function e(A,t){var i;const r=A.filter(Boolean).map(g=>g.trim().toLowerCase()).filter(g=>g.length>0),n=Array.from(new Set(r)),a=t?.matchSubstrings===!0,s=(i=t?.wordBoundary)!==null&&i!==void 0?i:"(?:^|[^a-z0-9])(?:%s)(?:$|[^a-z0-9])",o=n.map(g=>{const l=g.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(a)return new RegExp(l,"i");const I=s.replace("%s",l);return new RegExp(I,"i")});return g=>{if(!g)return!1;const l=String(g).toLowerCase();return o.some(I=>I.test(l))}}return sE.buildProfanityFilter=e,sE}var XV;function jKA(){return XV||(XV=1,(function(e){var A=rE&&rE.__awaiter||function(b,N,T,L){function K(H){return H instanceof T?H:new T(function(x){x(H)})}return new(T||(T=Promise))(function(H,x){function U(O){try{F(L.next(O))}catch(P){x(P)}}function G(O){try{F(L.throw(O))}catch(P){x(P)}}function F(O){O.done?H(O.value):K(O.value).then(U,G)}F((L=L.apply(b,N||[])).next())})},t=rE&&rE.__rest||function(b,N){var T={};for(var L in b)Object.prototype.hasOwnProperty.call(b,L)&&N.indexOf(L)<0&&(T[L]=b[L]);if(b!=null&&typeof Object.getOwnPropertySymbols=="function")for(var K=0,L=Object.getOwnPropertySymbols(b);K<L.length;K++)N.indexOf(L[K])<0&&Object.prototype.propertyIsEnumerable.call(b,L[K])&&(T[L[K]]=b[L[K]]);return T};Object.defineProperty(e,"__esModule",{value:!0}),e.DEFAULT_PROFANITY=e.nouns=e.adjectives=e.uniqueUsernameGenerator=e.generateUsername=e.generateFromEmail=e.generateMany=e.generateUniqueAsync=void 0;const i=VV(),r=ZKA(),n=_V();function a(b,N,T=1e3){return A(this,void 0,void 0,function*(){const L=new Set;for(let K=0;K<T;K++){const H=I(b);if(L.has(H))continue;if(!(yield Promise.resolve(N(H))))return H;L.add(H)}throw new Error("Unable to find a unique username within the given attempts")})}e.generateUniqueAsync=a;function s(b){const{count:N,unique:T=!1}=b,L=t(b,["count","unique"]),K=[],H=new Set;for(let x=0;x<N;x++){let U=I(L);if(T){let G=0;for(;H.has(U)&&G<1e3;)U=I(L),G++;if(H.has(U))throw new Error("Unable to produce the requested number of unique usernames");H.add(U)}K.push(U)}return K}e.generateMany=s;const o=b=>{let N;switch(b){case 1:N=Math.floor((0,r.getRandomInt)(1,9)).toString();break;case 2:N=Math.floor((0,r.getRandomInt)(10,90)).toString();break;case 3:N=Math.floor((0,r.getRandomInt)(100,900)).toString();break;case 4:N=Math.floor((0,r.getRandomInt)(1e3,9e3)).toString();break;case 5:N=Math.floor((0,r.getRandomInt)(1e4,9e4)).toString();break;case 6:N=Math.floor((0,r.getRandomInt)(1e5,9e5)).toString();break;default:N="";break}return N};function g(b,N){var T;let K=b.replace(/@.+/,"").replace(/[&/\\#,+()$~%._@'":*?<>{}]/g,"");const H=typeof N=="object"&&N!==null?N:{randomDigits:typeof N=="number"?N:void 0},x=H.stripLeadingDigits!==!1,U=(T=H.leadingFallback)!==null&&T!==void 0?T:"user";x&&(K=K.replace(/^[0-9]+/,""),K.length===0&&(K=U));const G=typeof H.randomDigits=="number"?H.randomDigits:void 0;return K+o(G)}e.generateFromEmail=g;function l(b,N,T,L){const K=d(),H=u(),x=K[Math.floor(Math.random()*K.length)],U=L?L.replace(/\s{2,}/g," ").replace(/\s/g,b??"").toLocaleLowerCase():H[Math.floor(Math.random()*H.length)];let G;return b?G=U+b+x+o(N):G=U+x+o(N),T?G.substring(0,T):G}e.generateUsername=l;function I(b){var N,T,L,K;if(b.dictionaries){const H=Array.from(new Set([...(N=b.profanityList)!==null&&N!==void 0?N:n.DEFAULT_PROFANITY,...(T=b.exclude)!==null&&T!==void 0?T:[]])).filter(j=>!!j),x=(0,n.buildProfanityFilter)(H,b.profanityOptions),G=b.dictionaries.map(j=>j.filter(X=>!x(String(X)))).filter(j=>j.length>0);if(G.length===0)throw new Error("All provided dictionaries are empty after filtering. Consider relaxing filters or providing more words.");const F=typeof b.seed<"u"?(0,r.createSeededRandomInt)(b.seed):r.getRandomInt,O=j=>G[j][F(0,G[j].length-1)],P=G.length,q=b.separator||"";let Y,z=!1;if(b.template)Y=R(b.template,G,F,q,b.randomDigits);else{const j=[];for(let _=0;_<P;_++){const gA=O(_);j.push(gA)}Y=y(j,(L=b.style)!==null&&L!==void 0?L:"lowerCase",q)+o(b.randomDigits),z=!0}return z||(Y=p(Y,(K=b.style)!==null&&K!==void 0?K:"lowerCase",q)),b.length?Y.substring(0,b.length):Y.substring(0,15)}else throw new Error("Cannot find any dictionary. Please provide at least one, or leave the 'dictionary' field empty in the config object")}e.uniqueUsernameGenerator=I;var C=VV();Object.defineProperty(e,"adjectives",{enumerable:!0,get:function(){return C.adjectives}}),Object.defineProperty(e,"nouns",{enumerable:!0,get:function(){return C.nouns}});var E=_V();Object.defineProperty(e,"DEFAULT_PROFANITY",{enumerable:!0,get:function(){return E.DEFAULT_PROFANITY}});function u(){const b=(0,n.buildProfanityFilter)(n.DEFAULT_PROFANITY);return i.adjectives.filter(N=>!b(N))}function d(){const b=(0,n.buildProfanityFilter)(n.DEFAULT_PROFANITY);return i.nouns.filter(N=>!b(N))}function Q(b){return b&&b.charAt(0).toUpperCase()+b.slice(1).toLowerCase()}function f(b,N){return N?b.split(N).filter(Boolean):[b]}function p(b,N,T){const L=typeof T=="string"?T:"",K=f(b,L);switch(N){case"upperCase":return K.join(L).toUpperCase();case"capital":return K.map(Q).join(L);case"camelCase":{const[H,...x]=K.map(U=>U.toLowerCase());return[H??"",...x.map(Q)].join("")}case"pascalCase":return K.map(Q).join("");case"kebabCase":return K.map(H=>H.toLowerCase()).join("-");case"snakeCase":return K.map(H=>H.toLowerCase()).join("_");case"lowerCase":default:return K.join(L).toLowerCase()}}function y(b,N,T){const L=b.map(K=>w(K,T));switch(N){case"upperCase":return L.map(K=>K.toUpperCase()).join(T);case"capital":{const K=L.join(T);return K&&K.charAt(0).toUpperCase()+K.slice(1).toLowerCase()}case"titleCase":return L.map(Q).join(T);case"camelCase":{const[K,...H]=L.map(x=>x.toLowerCase());return[K??"",...H.map(Q)].join("")}case"pascalCase":return L.map(Q).join("");case"kebabCase":return L.map(K=>K.toLowerCase()).join("-");case"snakeCase":return L.map(K=>K.toLowerCase()).join("_");case"lowerCase":default:return L.map(K=>K.toLowerCase()).join(T)}}function w(b,N){if(!b)return b;if(!N)return b.replace(/[^a-zA-Z0-9]/g,"");const L=b.replace(/[^a-zA-Z0-9]+/g,N).replace(new RegExp(`${S(N)}{2,}`,"g"),N);return k(L,N)}function S(b){return b.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function k(b,N){const T=new RegExp(`^${S(N)}|${S(N)}$`,"g");return b.replace(T,"")}function R(b,N,T,L,K){const H=/\{(adjective|noun|digits(?::\d+)?|\d+)\}/gi,x=F=>N[F][T(0,N[F].length-1)];let U=-1,G=-1;return N.length>0&&(U=0),N.length>1&&(G=1),b.replace(H,F=>{const O=F.slice(1,-1);if(O.startsWith("digits")){const q=O.split(":"),Y=q[1]?parseInt(q[1],10):K??0;return o(Number.isFinite(Y)?Y:void 0)}if(O==="adjective"&&U>=0)return x(U);if(O==="noun"&&G>=0)return x(G);const P=parseInt(O,10);return Number.isFinite(P)&&P>=0&&P<N.length?x(P):F}).replace(/\s+/g,L||"")}})(rE)),rE}var QT=jKA();function YlA(){const e=QT.uniqueUsernameGenerator({dictionaries:[QT.adjectives,QT.nouns],separator:"|||",style:"lowerCase",randomDigits:0,length:50}),[A,t]=e.split("|||");return`${A}-${t}-tater`}const fT={displayName:{defaultValue:()=>YlA(),fromCookie:()=>Pe.getItem("plannotator-identity")||void 0,toCookie:e=>Pe.setItem("plannotator-identity",e),serverKey:"displayName",fromServer:e=>typeof e.displayName=="string"&&e.displayName?e.displayName:void 0,toServer:e=>({displayName:e})},diffStyle:{defaultValue:"split",fromCookie:()=>{const e=Pe.getItem("plannotator-diff-style")??Pe.getItem("review-diff-style");return e==="split"||e==="unified"?e:void 0},toCookie:e=>Pe.setItem("plannotator-diff-style",e),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.diffStyle;return A==="split"||A==="unified"?A:void 0},toServer:e=>({diffOptions:{diffStyle:e}})},diffOverflow:{defaultValue:"scroll",fromCookie:()=>{const e=Pe.getItem("plannotator-diff-overflow");return e==="scroll"||e==="wrap"?e:void 0},toCookie:e=>Pe.setItem("plannotator-diff-overflow",e),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.overflow;return A==="scroll"||A==="wrap"?A:void 0},toServer:e=>({diffOptions:{overflow:e}})},diffIndicators:{defaultValue:"bars",fromCookie:()=>{const e=Pe.getItem("plannotator-diff-indicators");return e==="bars"||e==="classic"||e==="none"?e:void 0},toCookie:e=>Pe.setItem("plannotator-diff-indicators",e),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.diffIndicators;return A==="bars"||A==="classic"||A==="none"?A:void 0},toServer:e=>({diffOptions:{diffIndicators:e}})},diffLineDiffType:{defaultValue:"word-alt",fromCookie:()=>{const e=Pe.getItem("plannotator-diff-line-diff-type");return e==="word-alt"||e==="word"||e==="char"||e==="none"?e:void 0},toCookie:e=>Pe.setItem("plannotator-diff-line-diff-type",e),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.lineDiffType;return A==="word-alt"||A==="word"||A==="char"||A==="none"?A:void 0},toServer:e=>({diffOptions:{lineDiffType:e}})},diffShowLineNumbers:{defaultValue:!0,fromCookie:()=>{const e=Pe.getItem("plannotator-diff-show-line-numbers");return e==="true"?!0:e==="false"?!1:void 0},toCookie:e=>Pe.setItem("plannotator-diff-show-line-numbers",String(e)),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.showLineNumbers;return typeof A=="boolean"?A:void 0},toServer:e=>({diffOptions:{showLineNumbers:e}})},diffShowBackground:{defaultValue:!0,fromCookie:()=>{const e=Pe.getItem("plannotator-diff-show-background");return e==="true"?!0:e==="false"?!1:void 0},toCookie:e=>Pe.setItem("plannotator-diff-show-background",String(e)),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.showDiffBackground;return typeof A=="boolean"?A:void 0},toServer:e=>({diffOptions:{showDiffBackground:e}})},diffFontFamily:{defaultValue:"",fromCookie:()=>Pe.getItem("plannotator-diff-font-family")||void 0,toCookie:e=>Pe.setItem("plannotator-diff-font-family",e),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.fontFamily;return typeof A=="string"?A:void 0},toServer:e=>({diffOptions:{fontFamily:e}})},diffFontSize:{defaultValue:"",fromCookie:()=>Pe.getItem("plannotator-diff-font-size")||void 0,toCookie:e=>Pe.setItem("plannotator-diff-font-size",e),serverKey:"diffOptions",fromServer:e=>{const A=e.diffOptions?.fontSize;return typeof A=="string"?A:void 0},toServer:e=>({diffOptions:{fontSize:e}})},conventionalComments:{defaultValue:!1,fromCookie:()=>{const e=Pe.getItem("plannotator-conventional-comments");return e==="true"?!0:e==="false"?!1:void 0},toCookie:e=>Pe.setItem("plannotator-conventional-comments",String(e)),serverKey:"conventionalComments",fromServer:e=>{const A=e.conventionalComments;return typeof A=="boolean"?A:void 0},toServer:e=>({conventionalComments:e})},conventionalLabels:{defaultValue:null,fromCookie:()=>Pe.getItem("plannotator-cc-labels")||void 0,toCookie:e=>{e?Pe.setItem("plannotator-cc-labels",e):Pe.removeItem("plannotator-cc-labels")},serverKey:"conventionalLabels",fromServer:e=>{const A=e.conventionalLabels;if(A===null)return null;if(Array.isArray(A))return JSON.stringify(A)},toServer:e=>{if(e===null)return{conventionalLabels:null};try{return{conventionalLabels:JSON.parse(e)}}catch{return{}}}}};function HlA(e,A){for(const t of Object.keys(A))typeof e[t]=="object"&&e[t]!==null&&!Array.isArray(e[t])&&typeof A[t]=="object"&&A[t]!==null&&!Array.isArray(A[t])?HlA(e[t],A[t]):e[t]=A[t]}class _KA{constructor(){this.values=new Map,this.listeners=new Set,this.version=0,this.pendingServerWrites={},this.serverSyncTimer=null;for(const[A,t]of Object.entries(fT)){const i=t.fromCookie(),r=typeof t.defaultValue=="function"?t.defaultValue():t.defaultValue,n=i??r;this.values.set(A,n),i===void 0&&t.toCookie(n)}}init(A){if(A){for(const[t,i]of Object.entries(fT))if(i.serverKey&&i.fromServer){const r=i.fromServer(A);r!==void 0&&(this.values.set(t,r),i.toCookie(r))}}this.notify()}get(A){return this.values.get(A)}set(A,t){const i=fT[A];this.values.set(A,t),i.toCookie(t),i.serverKey&&i.toServer&&(HlA(this.pendingServerWrites,i.toServer(t)),this.scheduleServerSync()),this.notify()}subscribe(A){return this.listeners.add(A),()=>this.listeners.delete(A)}notify(){this.version++;for(const A of this.listeners)A()}scheduleServerSync(){this.serverSyncTimer&&clearTimeout(this.serverSyncTimer),this.serverSyncTimer=setTimeout(()=>{const A={...this.pendingServerWrites};this.pendingServerWrites={},fetch("/api/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(A)}).catch(()=>{})},300)}}const Mn=new _KA;function Zg(e){const A=nA.useCallback(i=>Mn.subscribe(i),[]),t=nA.useCallback(()=>Mn.get(e),[e]);return nA.useSyncExternalStore(A,t)}function zd(){return Mn.get("displayName")}function XKA(e){const A=e.trim();return A?(Mn.set("displayName",A),A):zd()}function $KA(){const e=YlA();return Mn.set("displayName",e),e}function $V(e){return e?e===Mn.get("displayName"):!1}const PlA=({stats:e,isActive:A,onToggle:t,hasPreviousVersion:i})=>!i||!e||!(e.additions>0||e.deletions>0||e.modifications>0)?null:D.jsxs("button",{onClick:t,className:`px-1.5 py-0.5 rounded text-[9px] font-mono transition-colors cursor-pointer ${A?"bg-primary/15":"bg-muted/50 hover:bg-muted"}`,title:A?"Exit plan diff view":"Show what changed from previous version",children:[D.jsxs("span",{className:A?"text-success":"text-success/70",children:["+",e.additions]}),D.jsx("span",{className:"text-muted-foreground/50 mx-0.5",children:"/"}),D.jsxs("span",{className:A?"text-destructive":"text-destructive/70",children:["-",e.deletions]})]}),JlA=({layout:e,repoInfo:A,planDiffStats:t,isPlanDiffActive:i,hasPreviousVersion:r,onPlanDiffToggle:n,showDemoBadge:a,archiveInfo:s,linkedDocInfo:o})=>{if(!(A||r||a||o||s))return null;const l=e==="row",I=l?"flex flex-row items-center gap-1.5 text-[9px] text-muted-foreground/70 font-mono":"flex flex-col items-start gap-1 text-[9px] text-muted-foreground/50 font-mono";return D.jsxs("div",{className:I,children:[A&&!o&&!l&&D.jsxs("div",{className:"flex items-center gap-1.5",children:[D.jsx("span",{className:"px-1.5 py-0.5 bg-muted/50 rounded truncate max-w-[140px]",title:A.display,children:A.display}),A.branch&&D.jsxs("span",{className:"px-1.5 py-0.5 bg-muted/30 rounded max-w-[120px] flex items-center gap-1 overflow-hidden",title:A.branch,children:[D.jsx("svg",{className:"w-2.5 h-2.5 flex-shrink-0",viewBox:"0 0 16 16",fill:"currentColor",children:D.jsx("path",{d:"M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"})}),D.jsx("span",{className:"truncate",children:A.branch})]})]}),n&&!o&&D.jsx(PlA,{stats:t??null,isActive:i??!1,onToggle:n,hasPreviousVersion:r??!1}),!l&&a&&!o&&D.jsx("span",{className:"px-1.5 py-0.5 rounded text-[9px] font-mono bg-amber-500/15 text-amber-600 dark:text-amber-400",children:"Demo"}),s&&!o&&D.jsxs("div",{className:"flex items-center gap-1.5",children:[D.jsx("span",{className:`px-1.5 py-0.5 rounded ${s.status==="approved"?"bg-green-500/15 text-green-600 dark:text-green-400":s.status==="denied"?"bg-red-500/15 text-red-600 dark:text-red-400":"bg-muted/50 text-muted-foreground"}`,children:s.status==="approved"?"Approved":s.status==="denied"?"Denied":"Unknown"}),s.timestamp&&D.jsxs("span",{className:"px-1.5 py-0.5 bg-muted/50 rounded",title:s.timestamp,children:[new Date(s.timestamp).toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})," ",new Date(s.timestamp).toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"})]})]}),!l&&o&&D.jsxs("div",{className:"flex items-center gap-1.5",children:[D.jsxs("button",{onClick:o.onBack,className:"px-1.5 py-0.5 bg-primary/10 text-primary rounded hover:bg-primary/20 transition-colors flex items-center gap-1",children:[D.jsx("svg",{className:"w-2.5 h-2.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18"})}),o.backLabel||"plan"]}),D.jsx("span",{className:"px-1.5 py-0.5 bg-primary/10 text-primary/80 rounded",children:o.label||"Linked File"}),D.jsx("span",{className:"px-1.5 py-0.5 bg-muted/50 text-muted-foreground rounded truncate max-w-[200px]",title:o.filepath,children:o.filepath.split("/").pop()})]})]})},zlA=nA.createContext(null);function yb(){return nA.useContext(zlA)}const A5A=({target:e,containerRef:A})=>{const[t,i]=nA.useState(null),r=nA.useRef(0),n=yb();return nA.useLayoutEffect(()=>{if(!e||!A.current){i(null);return}const a=()=>{const o=A.current.getBoundingClientRect(),g=e.element.getBoundingClientRect();i({top:g.top-o.top,left:g.left-o.left,width:g.width,height:g.height})};a();const s=()=>{cancelAnimationFrame(r.current),r.current=requestAnimationFrame(a)};return window.addEventListener("resize",s,{passive:!0}),n?.addEventListener("scroll",s,{passive:!0}),()=>{cancelAnimationFrame(r.current),window.removeEventListener("resize",s),n?.removeEventListener("scroll",s)}},[e,A,n]),!t||!e?null:D.jsxs(D.Fragment,{children:[D.jsx("div",{className:"border-2 border-dashed border-primary/50 bg-primary/5 rounded",style:{position:"absolute",top:t.top-2,left:t.left-2,width:t.width+4,height:t.height+4,pointerEvents:"none",zIndex:20,transition:"all 100ms ease-out"}}),D.jsx("div",{style:{position:"absolute",top:t.top-22,left:t.left-2,pointerEvents:"none",zIndex:21,transition:"all 100ms ease-out"},children:D.jsx("span",{className:"inline-block text-[10px] leading-4 px-1.5 rounded-sm bg-primary text-primary-foreground font-mono whitespace-nowrap max-w-[220px] overflow-hidden text-ellipsis",children:e.label})})]})},e5A=[".annotation-toolbar",".annotation-highlight","mark[data-bind-id]","button","[data-pinpoint-ignore]"].join(","),t5A=new Set(["STRONG","EM","A"]),i5A=new Set(["TD","TH"]),$y=22;function AZ(e,A,t){if(e.closest(e5A)||!A.contains(e))return null;const i=e.closest("[data-pinpoint-group]");if(i&&A.contains(i)&&!e.closest("[data-block-id]")){const g=i.getAttribute("data-pinpoint-group");return{element:i,blockId:"",label:g==="list"?"list":g==="blockquote"?"blockquote group":"group",isCodeBlock:!1}}const r=e.closest("[data-block-id]");if(!r||!A.contains(r))return null;const n=r.getAttribute("data-block-id");if(r.tagName==="HR")return null;const a=r.querySelector("pre > code.hljs");if(a&&(e===a||a.contains(e)||e.closest("pre")))return{element:r,blockId:n,label:a5A(r),isCodeBlock:!0};const s=r.querySelector("table");if(s&&t){const g=s.getBoundingClientRect(),l=t.clientX-g.left<$y,I=g.right-t.clientX<$y,C=t.clientY-g.top<$y,E=g.bottom-t.clientY<$y;if(C||E)return{element:r,blockId:n,label:"table",isCodeBlock:!1};if(l||I){const u=s5A(s,t.clientY);return u?{element:u,blockId:n,label:o5A(u),isCodeBlock:!1}:{element:r,blockId:n,label:"table",isCodeBlock:!1}}}if(e.tagName==="CODE"&&!e.classList.contains("hljs")){const g=e.textContent?.trim()||"";if(g)return{element:e,blockId:n,label:`code: \`${ug(g,30)}\``,isCodeBlock:!1}}if(t5A.has(e.tagName)){const g=e.textContent?.trim()||"";if(g)return{element:e,blockId:n,label:r5A(e,g),isCodeBlock:!1}}if(i5A.has(e.tagName))return{element:e,blockId:n,label:"table cell",isCodeBlock:!1};const o=e.closest("td, th");if(o&&r.contains(o))return{element:o,blockId:n,label:"table cell",isCodeBlock:!1};if(r.querySelector(".select-none")){const g=r.children[1];if(g&&(g===e||g.contains(e)))return{element:g,blockId:n,label:eZ(g),isCodeBlock:!1};if(g)return{element:g,blockId:n,label:eZ(g),isCodeBlock:!1}}return{element:r,blockId:n,label:n5A(r),isCodeBlock:!1}}function r5A(e,A){switch(e.tagName){case"STRONG":return`bold: "${ug(A,30)}"`;case"EM":return`italic: "${ug(A,30)}"`;case"A":return`link: "${ug(A,25)}"`;default:return ug(A,30)}}function n5A(e){const A=e.tagName.toLowerCase(),t=e.textContent?.trim()||"";return e.querySelector("table")?"table":e.dataset.blockType==="heading"||/^h[1-6]$/.test(A)?`heading: "${ug(t,35)}"`:A==="blockquote"?`blockquote: "${ug(t,30)}"`:A==="p"?t?`paragraph: "${ug(t,35)}"`:"paragraph":ug(t,35)||A}function eZ(e){const A=e.textContent?.trim()||"";return A?`list item: "${ug(A,30)}"`:"list item"}function a5A(e){const t=e.querySelector("code")?.className?.match(/language-(\S+)/)?.[1];return t?`code block (${t})`:"code block"}function s5A(e,A){const t=e.querySelectorAll("tr");for(const i of t){const r=i.getBoundingClientRect();if(A>=r.top&&A<=r.bottom)return i}return null}function o5A(e){if(e.querySelector("th"))return"table header row";const t=e.querySelector("td")?.textContent?.trim()||"";return t?`row: "${ug(t,25)}"`:"table row"}function ug(e,A){return e.length>A?e.slice(0,A)+"...":e}function g5A({containerRef:e,highlighterRef:A,inputMethod:t,enabled:i,onCodeBlockClick:r}){const[n,a]=nA.useState(null),s=t==="pinpoint"&&i;return nA.useEffect(()=>{s||a(o=>(o&&o.element.removeAttribute("data-pinpoint-hover"),null))},[s]),nA.useEffect(()=>{const o=e.current;if(!s||!o)return;let g=null;const l=(u,d,Q)=>{const f=AZ(Q,o,{clientX:u,clientY:d});f?f.element!==g&&(g?.removeAttribute("data-pinpoint-hover"),f.element.setAttribute("data-pinpoint-hover",""),g=f.element,a({element:f.element,label:f.label})):g&&(g.removeAttribute("data-pinpoint-hover"),g=null,a(null))},I=u=>{l(u.clientX,u.clientY,u.target)},C=u=>{if(u.touches.length!==1)return;const d=u.touches[0],Q=document.elementFromPoint(d.clientX,d.clientY);Q&&l(d.clientX,d.clientY,Q)},E=()=>{g?.removeAttribute("data-pinpoint-hover"),g=null,a(null)};return o.addEventListener("mousemove",I),o.addEventListener("mouseleave",E),o.addEventListener("touchstart",C,{passive:!0}),()=>{g?.removeAttribute("data-pinpoint-hover"),o.removeEventListener("mousemove",I),o.removeEventListener("mouseleave",E),o.removeEventListener("touchstart",C)}},[s,e]),nA.useEffect(()=>{const o=e.current;if(!s||!o)return;const g=l=>{const I=A.current;if(!I)return;const C=l.target,E=AZ(C,o,{clientX:l.clientX,clientY:l.clientY});if(!E)return;const u=C.closest("a");if(u&&o.contains(u)&&l.preventDefault(),E.element.removeAttribute("data-pinpoint-hover"),a(null),E.isCodeBlock){const f=o.querySelector(`[data-block-id="${E.blockId}"]`);f&&r(E.blockId,f);return}const d=l5A(E.element);if(!d)return;const Q=window.getSelection();Q?.removeAllRanges(),Q?.addRange(d),I.fromRange(d),window.getSelection()?.removeAllRanges()};return o.addEventListener("click",g,!0),()=>{o.removeEventListener("click",g,!0)}},[s,e,A,r]),{hoverTarget:n}}function l5A(e){const A=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,null);let t=null,i=null,r;for(;r=A.nextNode();)t||(t=r),i=r;if(!t||!i)return null;const n=document.createRange();return n.setStart(t,0),n.setEnd(i,i.length),n}var pT={exports:{}};/*! @plannotator/web-highlighter v0.8.1 https://github.com/backnotprop/web-highlighter */var tZ;function c5A(){return tZ||(tZ=1,(function(e,A){(function(t,i){e.exports=i()})(window,(function(){return(function(t){var i={};function r(n){if(i[n])return i[n].exports;var a=i[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,r),a.l=!0,a.exports}return r.m=t,r.c=i,r.d=function(n,a,s){r.o(n,a)||Object.defineProperty(n,a,{enumerable:!0,get:s})},r.r=function(n){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},r.t=function(n,a){if(1&a&&(n=r(n)),8&a||4&a&&typeof n=="object"&&n&&n.__esModule)return n;var s=Object.create(null);if(r.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:n}),2&a&&typeof n!="string")for(var o in n)r.d(s,o,function(g){return n[g]}.bind(null,o));return s},r.n=function(n){var a=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(a,"a",a),a},r.o=function(n,a){return Object.prototype.hasOwnProperty.call(n,a)},r.p="",r(r.s=8)})([function(t,i,r){var n,a=this&&this.__extends||(n=function(I,C){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(E,u){E.__proto__=u}||function(E,u){for(var d in u)Object.prototype.hasOwnProperty.call(u,d)&&(E[d]=u[d])})(I,C)},function(I,C){function E(){this.constructor=I}n(I,C),I.prototype=C===null?Object.create(C):(E.prototype=C.prototype,new E)}),s=this&&this.__importDefault||function(I){return I&&I.__esModule?I:{default:I}};Object.defineProperty(i,"__esModule",{value:!0}),i.eventEmitter=i.INTERNAL_ERROR_EVENT=i.UNKNOWN_IDX=i.ROOT_IDX=i.getStylesheet=i.getDefaultOptions=i.CAMEL_DATASET_SPLIT_TYPE=i.CAMEL_DATASET_IDENTIFIER_EXTRA=i.CAMEL_DATASET_IDENTIFIER=i.DATASET_SPLIT_TYPE=i.DATASET_IDENTIFIER_EXTRA=i.DATASET_IDENTIFIER=i.STYLESHEET_ID=i.LOCAL_STORE_KEY=i.ID_DIVISION=void 0;var o=s(r(11)),g=s(r(2));i.ID_DIVISION=";",i.LOCAL_STORE_KEY="highlight-mengshou",i.STYLESHEET_ID="highlight-mengshou-style",i.DATASET_IDENTIFIER="highlight-id",i.DATASET_IDENTIFIER_EXTRA="highlight-id-extra",i.DATASET_SPLIT_TYPE="highlight-split-type",i.CAMEL_DATASET_IDENTIFIER=o.default(i.DATASET_IDENTIFIER),i.CAMEL_DATASET_IDENTIFIER_EXTRA=o.default(i.DATASET_IDENTIFIER_EXTRA),i.CAMEL_DATASET_SPLIT_TYPE=o.default(i.DATASET_SPLIT_TYPE),i.getDefaultOptions=function(){return{$root:document||document.documentElement,exceptSelectors:null,wrapTag:"span",verbose:!1,style:{className:"highlight-mengshou-wrap"}}},i.getStylesheet=function(){return`
461
461
  .`+i.getDefaultOptions().style.className+` {
462
462
  background: #ff9;
463
463
  cursor: pointer;
@@ -508,7 +508,7 @@ created: ${new Date().toISOString().slice(0,19)}Z
508
508
  source: plannotator
509
509
  tags: [plan, ...]
510
510
  ---`})]}),D.jsx("div",{className:"border-t border-border/30"}),D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsxs("div",{children:[D.jsx("div",{className:"text-xs font-medium",children:"Auto-save on Plan Arrival"}),D.jsx("div",{className:"text-[10px] text-muted-foreground",children:"Automatically save to Obsidian when a plan loads, before you approve or deny"})]}),D.jsx("button",{role:"switch","aria-checked":Q.autoSave,onClick:()=>zA({autoSave:!Q.autoSave}),className:`relative inline-flex h-6 w-11 flex-shrink-0 items-center rounded-full transition-colors ${Q.autoSave?"bg-primary":"bg-muted"}`,children:D.jsx("span",{className:`inline-block h-4 w-4 transform rounded-full bg-white shadow-sm transition-transform ${Q.autoSave?"translate-x-6":"translate-x-1"}`})})]}),D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsxs("div",{children:[D.jsx("div",{className:"text-xs font-medium",children:"Vault Browser"}),D.jsx("div",{className:"text-[10px] text-muted-foreground",children:"Browse and annotate vault files from the sidebar"})]}),D.jsx("button",{role:"switch","aria-checked":Q.vaultBrowserEnabled,onClick:()=>zA({vaultBrowserEnabled:!Q.vaultBrowserEnabled}),className:`relative inline-flex h-6 w-11 flex-shrink-0 items-center rounded-full transition-colors ${Q.vaultBrowserEnabled?"bg-primary":"bg-muted"}`,children:D.jsx("span",{className:`inline-block h-4 w-4 transform rounded-full bg-white shadow-sm transition-transform ${Q.vaultBrowserEnabled?"translate-x-6":"translate-x-1"}`})})]})]})]})]}),C==="bear"&&D.jsxs(D.Fragment,{children:[D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsxs("div",{children:[D.jsx("div",{className:"text-sm font-medium",children:"Bear Notes"}),D.jsx("div",{className:"text-xs text-muted-foreground",children:"Auto-save approved plans to Bear"})]}),D.jsx("button",{role:"switch","aria-checked":k.enabled,onClick:()=>le({enabled:!k.enabled}),className:`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${k.enabled?"bg-primary":"bg-muted"}`,children:D.jsx("span",{className:`inline-block h-4 w-4 transform rounded-full bg-white shadow-sm transition-transform ${k.enabled?"translate-x-6":"translate-x-1"}`})})]}),k.enabled&&D.jsxs("div",{className:"mt-3 space-y-3",children:[D.jsxs("div",{className:"space-y-1.5 pl-0.5",children:[D.jsx("label",{className:"text-xs text-muted-foreground",children:"Custom Tags"}),D.jsx("input",{type:"text",value:k.customTags,onChange:hA=>le({customTags:hA.target.value}),onBlur:hA=>le({customTags:GYA(hA.target.value)}),placeholder:"plan, work",className:"w-full px-3 py-2 bg-muted rounded-lg text-xs font-mono placeholder:text-muted-foreground/50 focus:outline-none focus:ring-1 focus:ring-primary/50"}),D.jsx("div",{className:"text-[10px] text-muted-foreground",children:"Comma-separated, kebab-case. Leave empty for auto-generated tags."})]}),D.jsxs("div",{className:"space-y-1.5 pl-0.5",children:[D.jsx("label",{className:"text-xs text-muted-foreground",children:"Tag Position"}),D.jsxs("select",{value:k.tagPosition,onChange:hA=>le({tagPosition:hA.target.value}),className:"w-full px-3 py-2 bg-muted rounded-lg text-xs focus:outline-none focus:ring-1 focus:ring-primary/50",children:[D.jsx("option",{value:"append",children:"Append (end of note)"}),D.jsx("option",{value:"prepend",children:"Prepend (after title)"})]})]}),D.jsx("div",{className:"border-t border-border/30"}),D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsxs("div",{children:[D.jsx("div",{className:"text-xs font-medium",children:"Auto-save on Plan Arrival"}),D.jsx("div",{className:"text-[10px] text-muted-foreground",children:"Automatically save to Bear when a plan loads, before you approve or deny"})]}),D.jsx("button",{role:"switch","aria-checked":k.autoSave,onClick:()=>le({autoSave:!k.autoSave}),className:`relative inline-flex h-6 w-11 flex-shrink-0 items-center rounded-full transition-colors ${k.autoSave?"bg-primary":"bg-muted"}`,children:D.jsx("span",{className:`inline-block h-4 w-4 transform rounded-full bg-white shadow-sm transition-transform ${k.autoSave?"translate-x-6":"translate-x-1"}`})})]})]})]}),C==="octarine"&&D.jsxs(D.Fragment,{children:[D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsxs("div",{children:[D.jsx("div",{className:"text-sm font-medium",children:"Octarine"}),D.jsx("div",{className:"text-xs text-muted-foreground",children:"Auto-save approved plans to Octarine"})]}),D.jsx("button",{role:"switch","aria-checked":b.enabled,onClick:()=>MA({enabled:!b.enabled}),className:`relative inline-flex h-6 w-11 items-center rounded-full transition-colors ${b.enabled?"bg-primary":"bg-muted"}`,children:D.jsx("span",{className:`inline-block h-4 w-4 transform rounded-full bg-white shadow-sm transition-transform ${b.enabled?"translate-x-6":"translate-x-1"}`})})]}),b.enabled&&D.jsxs("div",{className:"mt-3 space-y-3",children:[D.jsxs("div",{className:"space-y-1.5 pl-0.5",children:[D.jsx("label",{className:"text-xs text-muted-foreground",children:"Workspace Name"}),D.jsx("input",{type:"text",value:b.workspace,onChange:hA=>MA({workspace:hA.target.value}),placeholder:"My Workspace",className:"w-full px-3 py-2 bg-muted rounded-lg text-xs font-mono placeholder:text-muted-foreground/50 focus:outline-none focus:ring-1 focus:ring-primary/50"}),D.jsx("div",{className:"text-[10px] text-muted-foreground",children:"The Octarine workspace name to save plans into."})]}),D.jsxs("div",{className:"space-y-1.5 pl-0.5",children:[D.jsx("label",{className:"text-xs text-muted-foreground",children:"Folder"}),D.jsx("input",{type:"text",value:b.folder,onChange:hA=>MA({folder:hA.target.value}),placeholder:"plannotator",className:"w-full px-3 py-2 bg-muted rounded-lg text-xs font-mono placeholder:text-muted-foreground/50 focus:outline-none focus:ring-1 focus:ring-primary/50"}),D.jsx("div",{className:"text-[10px] text-muted-foreground",children:"Subfolder within the workspace for saved plans."})]}),D.jsxs("div",{className:"text-[10px] text-muted-foreground/70",children:["Plans saved to: ",b.workspace||"..."," / ",b.folder||"plannotator","/"]}),D.jsx("div",{className:"border-t border-border/30"}),D.jsxs("div",{className:"flex items-center justify-between",children:[D.jsxs("div",{children:[D.jsx("div",{className:"text-xs font-medium",children:"Auto-save on Plan Arrival"}),D.jsx("div",{className:"text-[10px] text-muted-foreground",children:"Automatically save to Octarine when a plan loads, before you approve or deny"})]}),D.jsx("button",{role:"switch","aria-checked":b.autoSave,onClick:()=>MA({autoSave:!b.autoSave}),className:`relative inline-flex h-6 w-11 flex-shrink-0 items-center rounded-full transition-colors ${b.autoSave?"bg-primary":"bg-muted"}`,children:D.jsx("span",{className:`inline-block h-4 w-4 transform rounded-full bg-white shadow-sm transition-transform ${b.autoSave?"translate-x-6":"translate-x-1"}`})})]})]})]})]})})]})]})}),document.body)]})},OZ=({onClick:e,disabled:A=!1,isLoading:t=!1,label:i="Send Feedback",shortLabel:r,loadingLabel:n="Sending...",shortLoadingLabel:a,title:s="Send Feedback",muted:o=!1})=>D.jsxs("button",{onClick:e,disabled:A,className:`p-1.5 md:px-2.5 md:py-1 rounded-md text-xs font-medium transition-all ${o?"opacity-50 cursor-not-allowed bg-accent/10 text-accent/50":A?"opacity-50 cursor-not-allowed bg-muted text-muted-foreground":"bg-accent/15 text-accent hover:bg-accent/25 border border-accent/30"}`,title:s,children:[D.jsx("svg",{className:"w-4 h-4 md:hidden",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"})}),r?D.jsxs(D.Fragment,{children:[D.jsx("span",{className:"hidden md:inline lg:hidden",children:t?a??n:r}),D.jsx("span",{className:"hidden lg:inline",children:t?n:i})]}):D.jsx("span",{className:"hidden md:inline",children:t?n:i})]}),UZ=({onClick:e,disabled:A=!1,isLoading:t=!1,label:i="Approve",loadingLabel:r="Approving...",mobileLabel:n="OK",mobileLoadingLabel:a="...",title:s,dimmed:o=!1,muted:g=!1})=>D.jsxs("button",{onClick:e,disabled:A,className:`px-2 py-1 md:px-2.5 rounded-md text-xs font-medium transition-all ${g?"opacity-40 cursor-not-allowed bg-muted text-muted-foreground":A?"opacity-50 cursor-not-allowed bg-muted text-muted-foreground":o?"bg-success/50 text-success-foreground/70 hover:bg-success hover:text-success-foreground":"bg-success text-success-foreground hover:opacity-90"}`,title:s,children:[D.jsx("span",{className:"md:hidden",children:t?a:n}),D.jsx("span",{className:"hidden md:inline",children:t?r:i})]});async function bIA(e){const A=JSON.stringify(e),t=new TextEncoder().encode(A),i=new CompressionStream("deflate-raw"),r=i.writable.getWriter();r.write(t),r.close();const n=await new Response(i.readable).arrayBuffer(),a=new Uint8Array(n);let s="";for(let g=0;g<a.length;g++)s+=String.fromCharCode(a[g]);return btoa(s).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}async function SS(e){const A=e.replace(/-/g,"+").replace(/_/g,"/"),t=atob(A),i=Uint8Array.from(t,o=>o.charCodeAt(0)),r=new DecompressionStream("deflate-raw"),n=r.writable.getWriter();n.write(i),n.close();const a=await new Response(r.readable).arrayBuffer(),s=new TextDecoder().decode(a);return JSON.parse(s)}async function Y8A(e){const A=await crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt"]),t=crypto.getRandomValues(new Uint8Array(12)),i=new TextEncoder().encode(e),r=await crypto.subtle.encrypt({name:"AES-GCM",iv:t},A,i),n=new Uint8Array(t.length+r.byteLength);n.set(t,0),n.set(new Uint8Array(r),t.length);const a=await crypto.subtle.exportKey("raw",A);return{ciphertext:KZ(n),key:KZ(new Uint8Array(a))}}async function H8A(e,A){const t=YZ(e),i=YZ(A),r=t.slice(0,12),n=t.slice(12),a=await crypto.subtle.importKey("raw",i.buffer,{name:"AES-GCM",length:256},!1,["decrypt"]),s=await crypto.subtle.decrypt({name:"AES-GCM",iv:r},a,n);return new TextDecoder().decode(s)}function KZ(e){let A="";for(let t=0;t<e.length;t++)A+=String.fromCharCode(e[t]);return btoa(A).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function YZ(e){const A=e.replace(/-/g,"+").replace(/_/g,"/"),t=atob(A);return Uint8Array.from(t,i=>i.charCodeAt(0))}function dd(e){if(e?.length)return e.map(A=>{if(typeof A=="string"){const t=A.split("/").pop()?.replace(/\.[^.]+$/,"")||"image";return{path:A,name:t}}return{path:A[0],name:A[1]}})}function N5(e){if(e?.length)return e.map(A=>[A.path,A.name])}function RIA(e){return e.map(A=>{const t=A.author||null,i=N5(A.images);return A.type===oi.GLOBAL_COMMENT?["G",A.text||"",t,i]:A.type===oi.DELETION?["D",A.originalText,t,i]:A.isQuickLabel?["C",A.originalText,A.text||"",t,i??void 0,1]:["C",A.originalText,A.text||"",t,i]})}function Nw(e,A,t){const i={D:oi.DELETION,C:oi.COMMENT,G:oi.GLOBAL_COMMENT};return e.map((r,n)=>{const a=r[0];if(a==="G"){const C=r[1],E=r[2],u=r[3];return{id:`shared-${n}-${Date.now()}`,blockId:"",startOffset:0,endOffset:0,type:oi.GLOBAL_COMMENT,text:C||void 0,originalText:"",createdA:Date.now()+n,author:E||void 0,images:dd(u),...t?.[n]?{source:t[n]}:{}}}const s=r[1],o=a==="D"?void 0:r[2],g=a==="D"?r[2]:r[3],l=a==="D"?r[3]:r[4],I=a==="C"&&r.length>5&&r[5]===1?!0:void 0;return{id:`shared-${n}-${Date.now()}`,blockId:"",startOffset:0,endOffset:0,type:i[a],text:o||void 0,originalText:s,createdA:Date.now()+n,author:g||void 0,images:dd(l),...I?{isQuickLabel:I}:{},...A?.[n]?{diffContext:A[n]}:{},...t?.[n]?{source:t[n]}:{}}})}function NIA(e){const A=e.map(t=>t.diffContext||null);return A.some(t=>t!==null)?A:null}function MIA(e){const A=e.map(t=>t.source||void 0);return A.some(t=>t!==void 0)?A:null}async function P8A(e,A,t,i=xIA){const r=NIA(A),n=MIA(A),a={p:e,a:RIA(A),g:t?.length?N5(t):void 0,...r?{d:r}:{},...n?{s:n}:{}},s=await bIA(a);return`${i}/#${s}`}async function J8A(){const A=window.location.hash.slice(1).split("?")[0];if(!A)return null;try{return await SS(A)}catch(t){return console.warn("Failed to parse share hash:",t),null}}function z8A(e){const A=new Blob([e]).size;return A<1024?`${A} B`:`${(A/1024).toFixed(1)} KB`}const kIA="https://plannotator-paste.plannotator.workers.dev",xIA="https://share.plannotator.ai";async function q8A(e,A,t,i){const r=i?.pasteApiUrl??kIA,n=i?.shareBaseUrl??xIA;try{const a=NIA(A),s=MIA(A),o={p:e,a:RIA(A),g:t?.length?N5(t):void 0,...a?{d:a}:{},...s?{s}:{}},g=await bIA(o),{ciphertext:l,key:I}=await Y8A(g),C=await fetch(`${r}/api/paste`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({data:l}),signal:AbortSignal.timeout(5e3)});if(!C.ok)return console.warn(`[sharing] Paste service returned ${C.status}`),null;const E=await C.json();return{shortUrl:`${n}/p/${E.id}#key=${I}`,id:E.id}}catch(a){return console.debug("[sharing] Short URL service unavailable, using hash-based sharing:",a),null}}async function HZ(e,A=kIA,t){try{const i=await fetch(`${A}/api/paste/${e}`,{signal:AbortSignal.timeout(1e4)});if(!i.ok)return console.warn(`[sharing] Paste fetch returned ${i.status} for id ${e}`),null;const r=await i.json();if(t){const n=await H8A(r.data,t);return await SS(n)}return await SS(r.data)}catch(i){return console.warn("[sharing] Failed to load from paste ID:",i),null}}function W8A(e,A,t,i,r,n,a,s,o){const[g,l]=nA.useState(!1),[I,C]=nA.useState(!0),[E,u]=nA.useState(""),[d,Q]=nA.useState(""),[f,p]=nA.useState(""),[y,w]=nA.useState(!1),[S,k]=nA.useState(""),[R,b]=nA.useState(null),[N,T]=nA.useState(null),[L,K]=nA.useState(""),H=nA.useCallback(()=>{b(null),T(null)},[]),x=nA.useCallback(()=>K(""),[]),U=nA.useCallback(async()=>{try{const P=window.location.pathname.match(/^\/p\/([A-Za-z0-9]{6,16})$/);if(P){const z=P[1],j=window.location.hash.slice(1),X=j.startsWith("key=")?j.slice(4):void 0,_=await HZ(z,o,X);if(_){i(_.p);const gA=Nw(_.a,_.d,_.s);if(r(gA),_.g?.length){const dA=dd(_.g)??[];n(dA),T(dA)}b(gA),l(!0),a?.();const eA=window.location.pathname.replace(/\/p\/[A-Za-z0-9]+$/,"")||"/";return window.history.replaceState({},"",eA),!0}return K("Failed to load shared plan — the link may be expired or incomplete."),!1}const q=window.location.hash.slice(1),Y=await J8A();if(Y){i(Y.p);const z=Nw(Y.a,Y.d,Y.s);if(r(z),Y.g?.length){const j=dd(Y.g)??[];n(j),T(j)}return b(z),l(!0),a?.(),window.history.replaceState({},"",window.location.pathname),!0}return q&&K("Failed to load shared plan — the URL may have been truncated by your browser."),!1}catch(P){return console.error("Failed to load from share hash:",P),K("Failed to load shared plan — an unexpected error occurred."),!1}},[i,r,n,a,o]);nA.useEffect(()=>{U().finally(()=>C(!1))},[]),nA.useEffect(()=>{const P=()=>{window.location.hash.length>1&&U()};return window.addEventListener("hashchange",P),()=>window.removeEventListener("hashchange",P)},[U]);const G=nA.useCallback(async()=>{try{const P=await P8A(e,A,t,s);u(P),Q(z8A(P))}catch(P){console.error("Failed to generate share URL:",P),u(""),Q("")}},[e,A,t,s]);nA.useEffect(()=>{G()},[G]),nA.useEffect(()=>{p(""),k("")},[e,A]);const F=nA.useCallback(async()=>{if(e){w(!0),k("");try{const P=await q8A(e,A,t,{pasteApiUrl:o,shareBaseUrl:s});P?p(P.shortUrl):(p(""),k("Short URL service unavailable"))}catch{p(""),k("Failed to generate short URL")}finally{w(!1)}}},[e,A,t,s,o]),O=nA.useCallback(async P=>{try{let q;const Y=P.match(/\/p\/([A-Za-z0-9]{6,16})(?:#key=([A-Za-z0-9_-]+))?(?:\?|#|$)/);if(Y){const eA=Y[1],dA=Y[2],tA=await HZ(eA,o,dA);if(!tA)return{success:!1,count:0,planTitle:"",error:"Failed to load from short URL — paste may have expired"};q=tA}else{const eA=P.indexOf("#");if(eA===-1)return{success:!1,count:0,planTitle:"",error:"Invalid share URL: no hash fragment or short link found"};const dA=P.slice(eA+1);if(!dA)return{success:!1,count:0,planTitle:"",error:"Invalid share URL: empty hash"};q=await SS(dA)}const j=(q.p||"").trim().split(`
511
- `).find(eA=>eA.startsWith("#")),X=j?j.replace(/^#+\s*/,"").trim():"Unknown Plan",_=Nw(q.a,q.d,q.s);if(_.length===0)return{success:!0,count:0,planTitle:X,error:"No annotations found in share link"};const gA=_.filter(eA=>!A.some(dA=>dA.originalText===eA.originalText&&dA.type===eA.type&&dA.text===eA.text));if(gA.length>0&&(r(eA=>{const dA=_.filter(oA=>!eA.some(aA=>aA.originalText===oA.originalText&&aA.type===oA.type&&aA.text===oA.text));if(dA.length===0)return eA;const tA=[...eA,...dA];return b(tA),tA}),q.g?.length)){const eA=dd(q.g)??[];n(dA=>{const tA=new Set(dA.map(aA=>aA.path)),oA=eA.filter(aA=>!tA.has(aA.path));return oA.length>0?[...dA,...oA]:dA}),T(eA)}return{success:!0,count:gA.length,planTitle:X}}catch(q){return{success:!1,count:0,planTitle:"",error:q instanceof Error?q.message:"Failed to decompress share URL"}}},[A,t,r,n,o]);return{isSharedSession:g,isLoadingShared:I,shareUrl:E,shareUrlSize:d,shortShareUrl:f,isGeneratingShortUrl:y,shortUrlError:S,pendingSharedAnnotations:R,sharedGlobalAttachments:N,clearPendingSharedAnnotations:H,refreshShareUrl:G,generateShortUrl:F,importFromShareUrl:O,shareLoadError:L,clearShareLoadError:x}}var Mw=(e=>(e.Approve="approve",e.Feedback="feedback",e))(Mw||{});function V8A(e=window.location){const A=new URLSearchParams(e.search);let t=A.get("cb"),i=A.get("ct");if(!t||!i){const r=e.hash.indexOf("?");if(r!==-1){const n=new URLSearchParams(e.hash.slice(r+1));t=t??n.get("cb"),i=i??n.get("ct")}}if(!t||!i)return null;try{const{protocol:r}=new URL(t);if(r!=="https:"&&r!=="http:")return null}catch{return null}return{callbackUrl:t,token:i}}async function Z8A(e,A,t){const i=e==="approve"?"Plan approved! The bot will proceed to implementation.":"Feedback sent! The bot will re-plan with your annotations.";try{const r=await fetch(A.callbackUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,token:A.token,annotated_url:t})});return r.ok?{type:"success",message:i}:{type:"error",message:r.status===401?"Plan link expired — request a new one from the bot.":"Callback failed."}}catch{return{type:"error",message:"Callback failed."}}}function j8A(e,A,t){const[i,r]=nA.useState(null),n=nA.useRef(null);return nA.useEffect(()=>{const a=t??e.current;if(!a)return;const s=a.querySelectorAll('[data-block-type="heading"]');if(s.length===0)return;const o=new Map;return n.current=new IntersectionObserver(g=>{g.forEach(C=>{o.set(C.target,C.isIntersecting)});let l=null,I=1/0;for(const[C,E]of o)if(E){const u=C.getBoundingClientRect();u.top<I&&(I=u.top,l=C)}if(l){const C=l.getAttribute("data-block-id");C&&r(C)}},{root:a,rootMargin:"-80px 0px -80% 0px",threshold:[0,.1,.5,1]}),s.forEach(g=>{n.current?.observe(g)}),()=>{n.current?.disconnect()}},[e,A,t]),i}function PZ(e){window.close(),setTimeout(()=>{window.closed||e()},300)}function _8A(e){const[A,t]=nA.useState({phase:"idle"});nA.useEffect(()=>{if(!e)return;const r=RiA();r==="0"?(PZ(()=>t({phase:"closeFailed"})),t({phase:"closed"})):t(r!=="off"?{phase:"counting",remaining:Number(r)}:{phase:"prompt"})},[e]),nA.useEffect(()=>{if(A.phase!=="counting")return;if(A.remaining<=0){PZ(()=>t({phase:"closeFailed"}));return}const r=setTimeout(()=>t(n=>n.phase==="counting"?{phase:"counting",remaining:n.remaining-1}:n),1e3);return()=>clearTimeout(r)},[A]);const i=nA.useCallback(()=>{NiA("3"),t({phase:"counting",remaining:3})},[]);return{state:A,enableAndStart:i}}const X8A=()=>D.jsx("svg",{className:"w-8 h-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 13l4 4L19 7"})}),$8A=()=>D.jsx("svg",{className:"w-8 h-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"})});function A9A({submitted:e,title:A,subtitle:t,agentLabel:i}){const{state:r,enableAndStart:n}=_8A(!!e);if(!e)return null;const a=e==="approved";return D.jsx("div",{className:"fixed inset-0 z-[100] bg-background flex items-center justify-center",children:D.jsxs("div",{className:"text-center space-y-6 max-w-md px-8",children:[D.jsx("div",{className:`mx-auto w-16 h-16 rounded-full flex items-center justify-center ${a?"bg-success/20 text-success":"bg-accent/20 text-accent"}`,children:a?D.jsx(X8A,{}):D.jsx($8A,{})}),D.jsxs("div",{className:"space-y-2",children:[D.jsx("h2",{className:"text-xl font-semibold text-foreground",children:A}),D.jsx("p",{className:"text-muted-foreground",children:t})]}),D.jsx("div",{className:"pt-4 border-t border-border space-y-2",children:r.phase==="counting"?D.jsxs(D.Fragment,{children:[D.jsxs("p",{className:"text-sm text-muted-foreground",children:["This tab will close in ",D.jsx("span",{className:"text-foreground font-medium",children:r.remaining})," second",r.remaining!==1?"s":"","..."]}),D.jsx("p",{className:"text-xs text-muted-foreground/60",children:"You can change this in Settings."})]}):r.phase==="closeFailed"?D.jsxs(D.Fragment,{children:[D.jsx("p",{className:"text-sm text-muted-foreground",children:"Could not close this tab automatically. Please close it manually."}),D.jsxs("p",{className:"text-xs text-muted-foreground/60",children:["Auto-close works when the tab is opened by ",i,"."]})]}):D.jsxs(D.Fragment,{children:[D.jsxs("p",{className:"text-sm text-muted-foreground",children:["You can close this tab and return to ",D.jsx("span",{className:"text-foreground font-medium",children:i}),"."]}),r.phase==="prompt"?D.jsxs(D.Fragment,{children:[D.jsxs("label",{className:"flex items-center justify-center gap-2 cursor-pointer group",children:[D.jsx("input",{type:"checkbox",checked:!1,onChange:n,className:"accent-primary"}),D.jsx("span",{className:"text-xs text-muted-foreground group-hover:text-foreground transition-colors",children:"Auto-close this tab after 3 seconds"})]}),D.jsx("p",{className:"text-xs text-muted-foreground/60",children:"You can change the delay in Settings."})]}):D.jsx("p",{className:"text-xs text-muted-foreground/60",children:"Your response has been sent."})]})})]})})}const e9A="https://api.github.com/repos/backnotprop/plannotator/releases/latest",JZ={"0.5.0":{title:"Code Review is here!",description:"Review git diffs with inline annotations. Run /plannotator-review to try it."}};function t9A(e,A){const t=n=>n.replace(/^v/,""),i=t(e).split(".").map(Number),r=t(A).split(".").map(Number);for(let n=0;n<Math.max(i.length,r.length);n++){const a=i[n]||0,s=r[n]||0;if(s>a)return!0;if(s<a)return!1}return!1}function i9A(){const[e,A]=nA.useState(null);return nA.useEffect(()=>{(async()=>{try{const i="0.17.2",n=new URLSearchParams(window.location.search).get("preview-update");if(n){const C=n.replace(/^v/,"");A({currentVersion:i,latestVersion:n,updateAvailable:!0,releaseUrl:`https://github.com/backnotprop/plannotator/releases/tag/v${C}`,featureHighlight:JZ[C]});return}const a=await fetch(e9A);if(!a.ok)return;const s=await a.json(),o=s.tag_name,g=t9A(i,o),l=o.replace(/^v/,""),I=JZ[l];A({currentVersion:i,latestVersion:o,updateAvailable:g,releaseUrl:s.html_url,featureHighlight:I})}catch(i){console.debug("Update check failed:",i)}})()},[]),e}const r9A="pi install npm:@plannotator/pi-extension";function n9A(e){return cSA&&!e?'powershell -c "irm https://plannotator.ai/install.ps1 | iex"':"curl -fsSL https://plannotator.ai/install.sh | bash"}const a9A=({origin:e,isWSL:A=!1})=>{const t=i9A(),[i,r]=nA.useState(!1),[n,a]=nA.useState(!1),g=new URLSearchParams(window.location.search).get("preview-origin")||e,l=g==="pi",I=g==="opencode",C=l?r9A:n9A(A);if(!t?.updateAvailable||n)return null;const E=async()=>{try{await navigator.clipboard.writeText(C),r(!0),setTimeout(()=>r(!1),2e3)}catch(d){console.error("Failed to copy:",d)}};return t.featureHighlight?D.jsx("div",{className:"fixed bottom-4 right-4 z-50 max-w-md animate-in slide-in-from-bottom-2 fade-in duration-300",children:D.jsxs("div",{className:"bg-card border border-primary/30 rounded-xl shadow-2xl overflow-hidden",children:[D.jsx("div",{className:"bg-gradient-to-r from-primary/20 to-primary/5 px-5 py-4 border-b border-border/50",children:D.jsxs("div",{className:"flex items-start justify-between gap-3",children:[D.jsxs("div",{className:"flex items-center gap-3",children:[D.jsx("div",{className:"flex-shrink-0 w-10 h-10 rounded-lg bg-primary/20 flex items-center justify-center",children:D.jsx("svg",{className:"w-5 h-5 text-primary",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"})})}),D.jsxs("div",{children:[D.jsx("h4",{className:"text-base font-semibold text-foreground",children:t.featureHighlight.title}),D.jsxs("p",{className:"text-xs text-muted-foreground mt-0.5",children:["New in ",t.latestVersion]})]})]}),D.jsx("button",{onClick:()=>a(!0),className:"text-muted-foreground hover:text-foreground transition-colors p-1",children:D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]})}),D.jsxs("div",{className:"px-5 py-4",children:[D.jsx("p",{className:"text-sm text-foreground/80 leading-relaxed",children:t.featureHighlight.description}),D.jsxs("p",{className:"text-xs text-muted-foreground mt-3",children:["You have ",t.currentVersion]}),I&&D.jsx("p",{className:"text-xs text-muted-foreground mt-3",children:"Run the install script, then restart OpenCode."}),l&&D.jsx("p",{className:"text-xs text-muted-foreground mt-3",children:"Run the install command, then restart Pi."}),D.jsxs("div",{className:"mt-4 flex items-center gap-2",children:[D.jsx("button",{onClick:E,className:"flex-1 px-4 py-2 text-sm font-medium bg-primary text-primary-foreground rounded-lg hover:opacity-90 transition-opacity",children:i?"Copied!":"Copy install command"}),D.jsx("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-4 py-2 text-sm font-medium text-muted-foreground hover:text-foreground border border-border rounded-lg hover:bg-muted transition-colors",children:"Release notes"})]})]})]})}):D.jsx("div",{className:"fixed bottom-4 right-4 z-50 max-w-sm animate-in slide-in-from-bottom-2 fade-in duration-300",children:D.jsx("div",{className:"bg-card border border-border rounded-lg shadow-xl p-4",children:D.jsxs("div",{className:"flex items-start gap-3",children:[D.jsx("div",{className:"flex-shrink-0 w-8 h-8 rounded-full bg-primary/20 flex items-center justify-center",children:D.jsx("svg",{className:"w-4 h-4 text-primary",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12"})})}),D.jsxs("div",{className:"flex-1 min-w-0",children:[D.jsxs("div",{className:"flex items-center justify-between gap-2",children:[D.jsx("h4",{className:"text-sm font-medium text-foreground",children:"Update available"}),D.jsx("button",{onClick:()=>a(!0),className:"text-muted-foreground hover:text-foreground transition-colors",children:D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]}),D.jsxs("p",{className:"text-xs text-muted-foreground mt-0.5",children:[t.latestVersion," is available (you have ",t.currentVersion,")"]}),D.jsxs("div",{className:"mt-3 flex items-center gap-2",children:[D.jsx("button",{onClick:E,className:"flex-1 px-3 py-1.5 text-xs font-medium bg-primary text-primary-foreground rounded-md hover:opacity-90 transition-opacity",children:i?"Copied!":"Copy install command"}),D.jsx("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground border border-border rounded-md hover:bg-muted transition-colors",children:"Notes"})]})]})]})})})},LIA="plannotator-editor-mode",s9A="selection";function o9A(){const e=Pe.getItem(LIA);return e==="selection"||e==="comment"||e==="redline"||e==="quickLabel"?e:s9A}function g9A(e){Pe.setItem(LIA,e)}const TIA="plannotator-input-method",l9A="drag";function c9A(){const e=Pe.getItem(TIA);return e==="drag"||e==="pinpoint"?e:l9A}function I9A(e){Pe.setItem(TIA,e)}const C9A=300,E9A=300;function u9A(e,A){const t=nA.useRef("idle"),i=nA.useRef(0),r=nA.useRef(void 0),n=nA.useRef(e);nA.useEffect(()=>{t.current==="idle"&&(n.current=e)},[e]);const a=nA.useCallback(s=>s==="drag"?"pinpoint":"drag",[]);nA.useEffect(()=>{const s=g=>{if(g.key!=="Alt"||g.repeat)return;const l=g.target?.tagName;l==="INPUT"||l==="TEXTAREA"||g.target?.isContentEditable||document.querySelector("[data-quick-label-picker]")||(t.current==="idle"?(n.current=e,i.current=Date.now(),t.current="held",A(a(e))):t.current==="tapped"&&(clearTimeout(r.current),t.current="idle",n.current=a(n.current)))},o=g=>{g.key==="Alt"&&t.current==="held"&&(Date.now()-i.current>=E9A?(A(n.current),t.current="idle"):(t.current="tapped",r.current=setTimeout(()=>{t.current==="tapped"&&(A(n.current),t.current="idle")},C9A)))};return window.addEventListener("keydown",s),window.addEventListener("keyup",o),()=>{clearTimeout(r.current),window.removeEventListener("keydown",s),window.removeEventListener("keyup",o)}},[e,A,a])}function B9A(){nA.useEffect(()=>{const e=()=>document.documentElement.classList.add("plannotator-print"),A=()=>document.documentElement.classList.remove("plannotator-print"),t=()=>{!document.hidden&&document.documentElement.classList.contains("plannotator-print")&&document.documentElement.classList.remove("plannotator-print")};return window.addEventListener("beforeprint",e),window.addEventListener("afterprint",A),document.addEventListener("visibilitychange",t),()=>{window.removeEventListener("beforeprint",e),window.removeEventListener("afterprint",A),document.removeEventListener("visibilitychange",t),document.documentElement.classList.remove("plannotator-print")}},[])}function zZ({storageKey:e,defaultWidth:A=288,minWidth:t=200,maxWidth:i=600,side:r="right"}){const[n,a]=nA.useState(()=>{const Q=Pe.getItem(e);if(Q){const f=Number(Q);if(!Number.isNaN(f)&&f>=t&&f<=i)return f}return A}),[s,o]=nA.useState(!1),g=nA.useRef(0),l=nA.useRef(0),I=nA.useRef(n),C=nA.useCallback(Q=>{I.current=Q,a(Q)},[]),E=nA.useCallback(Q=>{Q.preventDefault(),g.current=Q.clientX,l.current=I.current,o(!0)},[]),u=nA.useCallback(Q=>{Q.preventDefault(),g.current=Q.touches[0].clientX,l.current=I.current,o(!0)},[]);nA.useEffect(()=>{if(!s)return;const Q=y=>"touches"in y?y.touches[0]?.clientX??y.changedTouches[0]?.clientX??0:y.clientX,f=y=>{const w=Q(y),S=r==="right"?g.current-w:w-g.current;C(Math.min(i,Math.max(t,l.current+S)))},p=()=>{o(!1),Pe.setItem(e,String(I.current))};return document.addEventListener("mousemove",f),document.addEventListener("mouseup",p),document.addEventListener("touchmove",f,{passive:!1}),document.addEventListener("touchend",p),document.addEventListener("touchcancel",p),()=>{document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",p),document.removeEventListener("touchmove",f),document.removeEventListener("touchend",p),document.removeEventListener("touchcancel",p)}},[s,t,i,e,r,C]);const d=nA.useCallback(()=>{C(A),Pe.setItem(e,String(A))},[A,e,C]);return{width:n,isDragging:s,handleProps:{isDragging:s,onMouseDown:E,onTouchStart:u,onDoubleClick:d}}}const qZ=({isDragging:e,onMouseDown:A,onTouchStart:t,onDoubleClick:i,className:r,side:n})=>D.jsxs("div",{className:`relative w-0 cursor-col-resize flex-shrink-0 group z-10${r?` ${r}`:""}`,children:[D.jsx("div",{className:`absolute inset-y-0 -left-0.5 -right-0.5 transition-colors ${e?"bg-primary/50":"group-hover:bg-border"}`}),D.jsx("div",{className:`absolute inset-y-0 ${n==="left"?"-right-2 -left-1":n==="right"?"-right-3 left-0":"-inset-x-2"}`,onMouseDown:A,onTouchStart:t,onDoubleClick:i})]});function d9A(){const e=nA.useRef(null),[A,t]=nA.useState(null),i=nA.useCallback(r=>{const n=r;e.current=n,t(n)},[]);return{ref:e,viewport:A,onViewportReady:i}}const h9A=({className:e,panelClassName:A,renderTrigger:t,children:i})=>{const[r,n]=nA.useState(!1),a=nA.useRef(null);return nA.useEffect(()=>{if(!r)return;const s=g=>{a.current&&!a.current.contains(g.target)&&n(!1)},o=g=>{g.key==="Escape"&&n(!1)};return document.addEventListener("pointerdown",s),document.addEventListener("keydown",o),()=>{document.removeEventListener("pointerdown",s),document.removeEventListener("keydown",o)}},[r]),D.jsxs("div",{ref:a,className:e?`relative ${e}`:"relative",children:[t({isOpen:r,toggleMenu:()=>n(s=>!s)}),r&&D.jsx("div",{className:A??"absolute top-full right-0 mt-1 w-56 rounded-lg border border-border bg-popover py-1 shadow-xl z-[70]",children:i({closeMenu:()=>n(!1)})})]})},Yg=({onClick:e,icon:A,label:t,subtitle:i,badge:r})=>D.jsxs("button",{onClick:e,className:"flex w-full items-center gap-2 px-3 py-2 text-left text-xs transition-colors hover:bg-muted",children:[D.jsx("span",{className:"text-muted-foreground",children:A}),i?D.jsxs("span",{className:"flex flex-1 flex-col gap-0.5",children:[D.jsx("span",{children:t}),D.jsx("span",{className:"text-[10px] text-muted-foreground",children:i})]}):D.jsx("span",{className:"flex-1",children:t}),r]}),rD=()=>D.jsx("div",{className:"my-1 border-t border-border"}),WZ=({children:e})=>D.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:e}),Q9A=({className:e="w-3.5 h-3.5"})=>D.jsxs("svg",{className:`${e} flex-shrink-0`,viewBox:"0 0 64 64",fill:"none",stroke:"currentColor",children:[D.jsx("path",{d:"M40.5 40.5L55 55",strokeWidth:7,strokeLinecap:"round"}),D.jsx("circle",{cx:"27",cy:"27",r:"20",strokeWidth:4}),D.jsx("path",{d:"M27 14L29.2 14.3L30.2 17.2L32.6 18.6L35.5 17.5L37.2 19.2L36.1 22.1L37.5 24.5L40.4 25.5L40.7 27.7L40.4 29.9L37.5 30.9L36.1 33.3L37.2 36.2L35.5 37.9L32.6 36.8L30.2 38.2L29.2 41.1L27 41.4L24.8 41.1L23.8 38.2L21.4 36.8L18.5 37.9L16.8 36.2L17.9 33.3L16.5 30.9L13.6 29.9L13.3 27.7L13.6 25.5L16.5 24.5L17.9 22.1L16.8 19.2L18.5 17.5L21.4 18.6L23.8 17.2L24.8 14.3Z",strokeWidth:1.5,strokeLinejoin:"round"}),D.jsx("circle",{cx:"27",cy:"27.7",r:"7",strokeWidth:1.5})]}),f9A=({appVersion:e,onOpenSettings:A,onOpenExport:t,onCopyAgentInstructions:i,onDownloadAnnotations:r,onPrint:n,onCopyShareLink:a,onOpenImport:s,onSaveToObsidian:o,onSaveToBear:g,onSaveToOctarine:l,sharingEnabled:I,isApiMode:C,agentInstructionsEnabled:E,hasNewSettingsHints:u,obsidianConfigured:d,bearConfigured:Q,octarineConfigured:f})=>{const{theme:p,setTheme:y}=$cA(),w=C&&(d||Q||f);return D.jsx(h9A,{renderTrigger:({isOpen:S,toggleMenu:k})=>D.jsxs("button",{onClick:k,className:`relative flex items-center gap-1.5 p-1.5 md:px-2.5 md:py-1 rounded-md text-xs font-medium transition-colors ${S?"bg-muted text-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"}`,title:"Options","aria-label":"Options","aria-expanded":S,children:[S?D.jsx(m9A,{}):D.jsx(p9A,{}),D.jsx("span",{className:"hidden md:inline",children:"Options"}),u&&!S&&D.jsxs("span",{className:"absolute -top-0.5 -right-0.5 flex h-2 w-2",children:[D.jsx("span",{className:"absolute inset-0 rounded-full bg-primary opacity-75 animate-ping"}),D.jsx("span",{className:"relative rounded-full h-2 w-2 bg-primary"})]})]}),children:({closeMenu:S})=>D.jsxs(D.Fragment,{children:[D.jsxs("div",{className:"px-3 py-2 space-y-1.5",children:[D.jsx(WZ,{children:"Theme"}),D.jsx("div",{className:"flex items-center gap-1 rounded-lg bg-muted/50 p-0.5",children:["light","dark","system"].map(k=>D.jsxs("button",{onClick:()=>{S(),y(k)},className:`flex flex-1 items-center justify-center gap-1.5 rounded-md px-2 py-1 text-[11px] font-medium transition-colors ${p===k?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:[k==="light"?D.jsx(pIA,{}):k==="dark"?D.jsx(mIA,{}):D.jsx(yIA,{}),D.jsx("span",{className:"capitalize",children:k})]},k))})]}),D.jsx(rD,{}),D.jsx(Yg,{onClick:()=>{S(),A()},icon:D.jsx(y9A,{}),label:"Settings"}),D.jsx(Yg,{onClick:()=>{S(),t()},icon:D.jsx(D9A,{}),label:"Export"}),E&&D.jsx(Yg,{onClick:()=>{S(),i()},icon:D.jsx(Q9A,{}),label:"Agent Instructions",subtitle:"Copy agent instructions for external annotations"}),D.jsx(rD,{}),D.jsx(Yg,{onClick:()=>{S(),r()},icon:D.jsx(w9A,{}),label:"Download Annotations"}),D.jsx(Yg,{onClick:()=>{S(),n()},icon:D.jsx(v9A,{}),label:"Print Plan"}),I&&D.jsx(Yg,{onClick:()=>{S(),a()},icon:D.jsx(S9A,{}),label:"Copy Share Link"}),I&&D.jsx(Yg,{onClick:()=>{S(),s()},icon:D.jsx(b9A,{}),label:"Import Review"}),w&&D.jsxs(D.Fragment,{children:[D.jsx(rD,{}),d&&D.jsx(Yg,{onClick:()=>{S(),o()},icon:D.jsx(kT,{}),label:"Save to Obsidian"}),Q&&D.jsx(Yg,{onClick:()=>{S(),g()},icon:D.jsx(kT,{}),label:"Save to Bear"}),f&&D.jsx(Yg,{onClick:()=>{S(),l()},icon:D.jsx(kT,{}),label:"Save to Octarine"})]}),D.jsx(rD,{}),D.jsxs("div",{className:"px-3 py-2 space-y-2",children:[D.jsxs("div",{className:"flex items-center justify-between gap-3",children:[D.jsx(WZ,{children:"Plannotator"}),D.jsxs("span",{className:"text-[10px] font-mono text-muted-foreground/70",children:["v",e]})]}),D.jsxs("div",{className:"flex flex-col items-start gap-1 text-[11px]",children:[D.jsx("a",{href:"https://github.com/backnotprop/plannotator/releases",target:"_blank",rel:"noopener noreferrer",onClick:S,className:"text-muted-foreground hover:text-foreground transition-colors",children:"Release notes"}),D.jsx("a",{href:"https://github.com/backnotprop/plannotator",target:"_blank",rel:"noopener noreferrer",onClick:S,className:"text-muted-foreground hover:text-foreground transition-colors",children:"Project repo"})]})]})]})})},p9A=()=>D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 6h16M4 12h16M4 18h16"})}),m9A=()=>D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})}),y9A=()=>D.jsxs("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:[D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.066 2.573c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.573 1.066c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.066-2.573c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"}),D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})]}),D9A=()=>D.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12"})}),w9A=()=>D.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"})}),v9A=()=>D.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h6a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z"})}),S9A=()=>D.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"})}),b9A=()=>D.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"})}),kT=()=>D.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 5a2 2 0 012-2h10a2 2 0 012 2v16l-7-3.5L5 21V5z"})}),R9A=({isOpen:e,onComplete:A})=>{const[t,i]=nA.useState("acceptEdits");if(!e)return null;const r=()=>{CIA(t),A(t)};return Dg.createPortal(D.jsx("div",{className:"fixed inset-0 z-[100] flex items-center justify-center bg-background/90 backdrop-blur-sm p-4",children:D.jsxs("div",{className:"bg-card border border-border rounded-xl w-full max-w-lg shadow-2xl",children:[D.jsxs("div",{className:"p-5 border-b border-border",children:[D.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[D.jsx("div",{className:"p-1.5 rounded-lg bg-primary/15",children:D.jsx("svg",{className:"w-5 h-5 text-primary",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0"})})}),D.jsx("h3",{className:"font-semibold text-base",children:"New: Permission Mode Preservation"})]}),D.jsx("p",{className:"text-sm text-muted-foreground",children:"Claude Code 2.1.7+ supports preserving your permission mode after plan approval. Choose your preferred automation level."}),D.jsxs("p",{className:"text-xs text-muted-foreground/70 mt-1",children:["Requires Claude Code 2.1.7 or later. Run ",D.jsx("code",{className:"bg-muted px-1 rounded",children:"claude update"})," to update."]})]}),D.jsx("div",{className:"p-4 space-y-2",children:zO.map(n=>D.jsxs("label",{className:`flex items-start gap-3 p-3 rounded-lg cursor-pointer transition-all border ${t===n.value?"border-primary bg-primary/10":"border-transparent bg-muted/50 hover:bg-muted"}`,children:[D.jsx("input",{type:"radio",name:"permissionMode",value:n.value,checked:t===n.value,onChange:()=>i(n.value),className:"mt-0.5 accent-primary"}),D.jsxs("div",{className:"flex-1",children:[D.jsx("div",{className:"text-sm font-medium",children:n.label}),D.jsx("div",{className:"text-xs text-muted-foreground",children:n.description})]})]},n.value))}),D.jsxs("div",{className:"p-4 border-t border-border flex justify-between items-center",children:[D.jsx("p",{className:"text-xs text-muted-foreground",children:"You can change this later in Settings."}),D.jsx("button",{onClick:r,className:"px-4 py-2 bg-primary text-primary-foreground rounded-lg text-sm font-medium hover:opacity-90 transition-opacity",children:"Continue"})]})]})}),document.body)};function N9A(e){const[A,t]=nA.useState(e),[i,r]=nA.useState("toc"),n=nA.useCallback(o=>{t(!0),o&&r(o)},[]),a=nA.useCallback(()=>{t(!1)},[]),s=nA.useCallback(o=>{A?i===o?t(!1):r(o):(t(!0),r(o))},[A,i]);return{isOpen:A,activeTab:i,open:n,close:a,toggleTab:s}}class M9A{diff(A,t,i={}){let r;typeof i=="function"?(r=i,i={}):"callback"in i&&(r=i.callback);const n=this.castInput(A,i),a=this.castInput(t,i),s=this.removeEmpty(this.tokenize(n,i)),o=this.removeEmpty(this.tokenize(a,i));return this.diffWithOptionsObj(s,o,i,r)}diffWithOptionsObj(A,t,i,r){var n;const a=p=>{if(p=this.postProcess(p,i),r){setTimeout(function(){r(p)},0);return}else return p},s=t.length,o=A.length;let g=1,l=s+o;i.maxEditLength!=null&&(l=Math.min(l,i.maxEditLength));const I=(n=i.timeout)!==null&&n!==void 0?n:1/0,C=Date.now()+I,E=[{oldPos:-1,lastComponent:void 0}];let u=this.extractCommon(E[0],t,A,0,i);if(E[0].oldPos+1>=o&&u+1>=s)return a(this.buildValues(E[0].lastComponent,t,A));let d=-1/0,Q=1/0;const f=()=>{for(let p=Math.max(d,-g);p<=Math.min(Q,g);p+=2){let y;const w=E[p-1],S=E[p+1];w&&(E[p-1]=void 0);let k=!1;if(S){const b=S.oldPos-p;k=S&&0<=b&&b<s}const R=w&&w.oldPos+1<o;if(!k&&!R){E[p]=void 0;continue}if(!R||k&&w.oldPos<S.oldPos?y=this.addToPath(S,!0,!1,0,i):y=this.addToPath(w,!1,!0,1,i),u=this.extractCommon(y,t,A,p,i),y.oldPos+1>=o&&u+1>=s)return a(this.buildValues(y.lastComponent,t,A))||!0;E[p]=y,y.oldPos+1>=o&&(Q=Math.min(Q,p-1)),u+1>=s&&(d=Math.max(d,p+1))}g++};if(r)(function p(){setTimeout(function(){if(g>l||Date.now()>C)return r(void 0);f()||p()},0)})();else for(;g<=l&&Date.now()<=C;){const p=f();if(p)return p}}addToPath(A,t,i,r,n){const a=A.lastComponent;return a&&!n.oneChangePerToken&&a.added===t&&a.removed===i?{oldPos:A.oldPos+r,lastComponent:{count:a.count+1,added:t,removed:i,previousComponent:a.previousComponent}}:{oldPos:A.oldPos+r,lastComponent:{count:1,added:t,removed:i,previousComponent:a}}}extractCommon(A,t,i,r,n){const a=t.length,s=i.length;let o=A.oldPos,g=o-r,l=0;for(;g+1<a&&o+1<s&&this.equals(i[o+1],t[g+1],n);)g++,o++,l++,n.oneChangePerToken&&(A.lastComponent={count:1,previousComponent:A.lastComponent,added:!1,removed:!1});return l&&!n.oneChangePerToken&&(A.lastComponent={count:l,previousComponent:A.lastComponent,added:!1,removed:!1}),A.oldPos=o,g}equals(A,t,i){return i.comparator?i.comparator(A,t):A===t||!!i.ignoreCase&&A.toLowerCase()===t.toLowerCase()}removeEmpty(A){const t=[];for(let i=0;i<A.length;i++)A[i]&&t.push(A[i]);return t}castInput(A,t){return A}tokenize(A,t){return Array.from(A)}join(A){return A.join("")}postProcess(A,t){return A}get useLongestToken(){return!1}buildValues(A,t,i){const r=[];let n;for(;A;)r.push(A),n=A.previousComponent,delete A.previousComponent,A=n;r.reverse();const a=r.length;let s=0,o=0,g=0;for(;s<a;s++){const l=r[s];if(l.removed)l.value=this.join(i.slice(g,g+l.count)),g+=l.count;else{if(!l.added&&this.useLongestToken){let I=t.slice(o,o+l.count);I=I.map(function(C,E){const u=i[g+E];return u.length>C.length?u:C}),l.value=this.join(I)}else l.value=this.join(t.slice(o,o+l.count));o+=l.count,l.added||(g+=l.count)}}return r}}class k9A extends M9A{constructor(){super(...arguments),this.tokenize=T9A}equals(A,t,i){return i.ignoreWhitespace?((!i.newlineIsToken||!A.includes(`
511
+ `).find(eA=>eA.startsWith("#")),X=j?j.replace(/^#+\s*/,"").trim():"Unknown Plan",_=Nw(q.a,q.d,q.s);if(_.length===0)return{success:!0,count:0,planTitle:X,error:"No annotations found in share link"};const gA=_.filter(eA=>!A.some(dA=>dA.originalText===eA.originalText&&dA.type===eA.type&&dA.text===eA.text));if(gA.length>0&&(r(eA=>{const dA=_.filter(oA=>!eA.some(aA=>aA.originalText===oA.originalText&&aA.type===oA.type&&aA.text===oA.text));if(dA.length===0)return eA;const tA=[...eA,...dA];return b(tA),tA}),q.g?.length)){const eA=dd(q.g)??[];n(dA=>{const tA=new Set(dA.map(aA=>aA.path)),oA=eA.filter(aA=>!tA.has(aA.path));return oA.length>0?[...dA,...oA]:dA}),T(eA)}return{success:!0,count:gA.length,planTitle:X}}catch(q){return{success:!1,count:0,planTitle:"",error:q instanceof Error?q.message:"Failed to decompress share URL"}}},[A,t,r,n,o]);return{isSharedSession:g,isLoadingShared:I,shareUrl:E,shareUrlSize:d,shortShareUrl:f,isGeneratingShortUrl:y,shortUrlError:S,pendingSharedAnnotations:R,sharedGlobalAttachments:N,clearPendingSharedAnnotations:H,refreshShareUrl:G,generateShortUrl:F,importFromShareUrl:O,shareLoadError:L,clearShareLoadError:x}}var Mw=(e=>(e.Approve="approve",e.Feedback="feedback",e))(Mw||{});function V8A(e=window.location){const A=new URLSearchParams(e.search);let t=A.get("cb"),i=A.get("ct");if(!t||!i){const r=e.hash.indexOf("?");if(r!==-1){const n=new URLSearchParams(e.hash.slice(r+1));t=t??n.get("cb"),i=i??n.get("ct")}}if(!t||!i)return null;try{const{protocol:r}=new URL(t);if(r!=="https:"&&r!=="http:")return null}catch{return null}return{callbackUrl:t,token:i}}async function Z8A(e,A,t){const i=e==="approve"?"Plan approved! The bot will proceed to implementation.":"Feedback sent! The bot will re-plan with your annotations.";try{const r=await fetch(A.callbackUrl,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:e,token:A.token,annotated_url:t})});return r.ok?{type:"success",message:i}:{type:"error",message:r.status===401?"Plan link expired — request a new one from the bot.":"Callback failed."}}catch{return{type:"error",message:"Callback failed."}}}function j8A(e,A,t){const[i,r]=nA.useState(null),n=nA.useRef(null);return nA.useEffect(()=>{const a=t??e.current;if(!a)return;const s=a.querySelectorAll('[data-block-type="heading"]');if(s.length===0)return;const o=new Map;return n.current=new IntersectionObserver(g=>{g.forEach(C=>{o.set(C.target,C.isIntersecting)});let l=null,I=1/0;for(const[C,E]of o)if(E){const u=C.getBoundingClientRect();u.top<I&&(I=u.top,l=C)}if(l){const C=l.getAttribute("data-block-id");C&&r(C)}},{root:a,rootMargin:"-80px 0px -80% 0px",threshold:[0,.1,.5,1]}),s.forEach(g=>{n.current?.observe(g)}),()=>{n.current?.disconnect()}},[e,A,t]),i}function PZ(e){window.close(),setTimeout(()=>{window.closed||e()},300)}function _8A(e){const[A,t]=nA.useState({phase:"idle"});nA.useEffect(()=>{if(!e)return;const r=RiA();r==="0"?(PZ(()=>t({phase:"closeFailed"})),t({phase:"closed"})):t(r!=="off"?{phase:"counting",remaining:Number(r)}:{phase:"prompt"})},[e]),nA.useEffect(()=>{if(A.phase!=="counting")return;if(A.remaining<=0){PZ(()=>t({phase:"closeFailed"}));return}const r=setTimeout(()=>t(n=>n.phase==="counting"?{phase:"counting",remaining:n.remaining-1}:n),1e3);return()=>clearTimeout(r)},[A]);const i=nA.useCallback(()=>{NiA("3"),t({phase:"counting",remaining:3})},[]);return{state:A,enableAndStart:i}}const X8A=()=>D.jsx("svg",{className:"w-8 h-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 13l4 4L19 7"})}),$8A=()=>D.jsx("svg",{className:"w-8 h-8",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"})});function A9A({submitted:e,title:A,subtitle:t,agentLabel:i}){const{state:r,enableAndStart:n}=_8A(!!e);if(!e)return null;const a=e==="approved";return D.jsx("div",{className:"fixed inset-0 z-[100] bg-background flex items-center justify-center",children:D.jsxs("div",{className:"text-center space-y-6 max-w-md px-8",children:[D.jsx("div",{className:`mx-auto w-16 h-16 rounded-full flex items-center justify-center ${a?"bg-success/20 text-success":"bg-accent/20 text-accent"}`,children:a?D.jsx(X8A,{}):D.jsx($8A,{})}),D.jsxs("div",{className:"space-y-2",children:[D.jsx("h2",{className:"text-xl font-semibold text-foreground",children:A}),D.jsx("p",{className:"text-muted-foreground",children:t})]}),D.jsx("div",{className:"pt-4 border-t border-border space-y-2",children:r.phase==="counting"?D.jsxs(D.Fragment,{children:[D.jsxs("p",{className:"text-sm text-muted-foreground",children:["This tab will close in ",D.jsx("span",{className:"text-foreground font-medium",children:r.remaining})," second",r.remaining!==1?"s":"","..."]}),D.jsx("p",{className:"text-xs text-muted-foreground/60",children:"You can change this in Settings."})]}):r.phase==="closeFailed"?D.jsxs(D.Fragment,{children:[D.jsx("p",{className:"text-sm text-muted-foreground",children:"Could not close this tab automatically. Please close it manually."}),D.jsxs("p",{className:"text-xs text-muted-foreground/60",children:["Auto-close works when the tab is opened by ",i,"."]})]}):D.jsxs(D.Fragment,{children:[D.jsxs("p",{className:"text-sm text-muted-foreground",children:["You can close this tab and return to ",D.jsx("span",{className:"text-foreground font-medium",children:i}),"."]}),r.phase==="prompt"?D.jsxs(D.Fragment,{children:[D.jsxs("label",{className:"flex items-center justify-center gap-2 cursor-pointer group",children:[D.jsx("input",{type:"checkbox",checked:!1,onChange:n,className:"accent-primary"}),D.jsx("span",{className:"text-xs text-muted-foreground group-hover:text-foreground transition-colors",children:"Auto-close this tab after 3 seconds"})]}),D.jsx("p",{className:"text-xs text-muted-foreground/60",children:"You can change the delay in Settings."})]}):D.jsx("p",{className:"text-xs text-muted-foreground/60",children:"Your response has been sent."})]})})]})})}const e9A="https://api.github.com/repos/backnotprop/plannotator/releases/latest",JZ={"0.5.0":{title:"Code Review is here!",description:"Review git diffs with inline annotations. Run /plannotator-review to try it."}};function t9A(e,A){const t=n=>n.replace(/^v/,""),i=t(e).split(".").map(Number),r=t(A).split(".").map(Number);for(let n=0;n<Math.max(i.length,r.length);n++){const a=i[n]||0,s=r[n]||0;if(s>a)return!0;if(s<a)return!1}return!1}function i9A(){const[e,A]=nA.useState(null);return nA.useEffect(()=>{(async()=>{try{const i="0.17.3",n=new URLSearchParams(window.location.search).get("preview-update");if(n){const C=n.replace(/^v/,"");A({currentVersion:i,latestVersion:n,updateAvailable:!0,releaseUrl:`https://github.com/backnotprop/plannotator/releases/tag/v${C}`,featureHighlight:JZ[C]});return}const a=await fetch(e9A);if(!a.ok)return;const s=await a.json(),o=s.tag_name,g=t9A(i,o),l=o.replace(/^v/,""),I=JZ[l];A({currentVersion:i,latestVersion:o,updateAvailable:g,releaseUrl:s.html_url,featureHighlight:I})}catch(i){console.debug("Update check failed:",i)}})()},[]),e}const r9A="pi install npm:@plannotator/pi-extension";function n9A(e){return cSA&&!e?'powershell -c "irm https://plannotator.ai/install.ps1 | iex"':"curl -fsSL https://plannotator.ai/install.sh | bash"}const a9A=({origin:e,isWSL:A=!1})=>{const t=i9A(),[i,r]=nA.useState(!1),[n,a]=nA.useState(!1),g=new URLSearchParams(window.location.search).get("preview-origin")||e,l=g==="pi",I=g==="opencode",C=l?r9A:n9A(A);if(!t?.updateAvailable||n)return null;const E=async()=>{try{await navigator.clipboard.writeText(C),r(!0),setTimeout(()=>r(!1),2e3)}catch(d){console.error("Failed to copy:",d)}};return t.featureHighlight?D.jsx("div",{className:"fixed bottom-4 right-4 z-50 max-w-md animate-in slide-in-from-bottom-2 fade-in duration-300",children:D.jsxs("div",{className:"bg-card border border-primary/30 rounded-xl shadow-2xl overflow-hidden",children:[D.jsx("div",{className:"bg-gradient-to-r from-primary/20 to-primary/5 px-5 py-4 border-b border-border/50",children:D.jsxs("div",{className:"flex items-start justify-between gap-3",children:[D.jsxs("div",{className:"flex items-center gap-3",children:[D.jsx("div",{className:"flex-shrink-0 w-10 h-10 rounded-lg bg-primary/20 flex items-center justify-center",children:D.jsx("svg",{className:"w-5 h-5 text-primary",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"})})}),D.jsxs("div",{children:[D.jsx("h4",{className:"text-base font-semibold text-foreground",children:t.featureHighlight.title}),D.jsxs("p",{className:"text-xs text-muted-foreground mt-0.5",children:["New in ",t.latestVersion]})]})]}),D.jsx("button",{onClick:()=>a(!0),className:"text-muted-foreground hover:text-foreground transition-colors p-1",children:D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]})}),D.jsxs("div",{className:"px-5 py-4",children:[D.jsx("p",{className:"text-sm text-foreground/80 leading-relaxed",children:t.featureHighlight.description}),D.jsxs("p",{className:"text-xs text-muted-foreground mt-3",children:["You have ",t.currentVersion]}),I&&D.jsx("p",{className:"text-xs text-muted-foreground mt-3",children:"Run the install script, then restart OpenCode."}),l&&D.jsx("p",{className:"text-xs text-muted-foreground mt-3",children:"Run the install command, then restart Pi."}),D.jsxs("div",{className:"mt-4 flex items-center gap-2",children:[D.jsx("button",{onClick:E,className:"flex-1 px-4 py-2 text-sm font-medium bg-primary text-primary-foreground rounded-lg hover:opacity-90 transition-opacity",children:i?"Copied!":"Copy install command"}),D.jsx("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-4 py-2 text-sm font-medium text-muted-foreground hover:text-foreground border border-border rounded-lg hover:bg-muted transition-colors",children:"Release notes"})]})]})]})}):D.jsx("div",{className:"fixed bottom-4 right-4 z-50 max-w-sm animate-in slide-in-from-bottom-2 fade-in duration-300",children:D.jsx("div",{className:"bg-card border border-border rounded-lg shadow-xl p-4",children:D.jsxs("div",{className:"flex items-start gap-3",children:[D.jsx("div",{className:"flex-shrink-0 w-8 h-8 rounded-full bg-primary/20 flex items-center justify-center",children:D.jsx("svg",{className:"w-4 h-4 text-primary",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12"})})}),D.jsxs("div",{className:"flex-1 min-w-0",children:[D.jsxs("div",{className:"flex items-center justify-between gap-2",children:[D.jsx("h4",{className:"text-sm font-medium text-foreground",children:"Update available"}),D.jsx("button",{onClick:()=>a(!0),className:"text-muted-foreground hover:text-foreground transition-colors",children:D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})})})]}),D.jsxs("p",{className:"text-xs text-muted-foreground mt-0.5",children:[t.latestVersion," is available (you have ",t.currentVersion,")"]}),D.jsxs("div",{className:"mt-3 flex items-center gap-2",children:[D.jsx("button",{onClick:E,className:"flex-1 px-3 py-1.5 text-xs font-medium bg-primary text-primary-foreground rounded-md hover:opacity-90 transition-opacity",children:i?"Copied!":"Copy install command"}),D.jsx("a",{href:t.releaseUrl,target:"_blank",rel:"noopener noreferrer",className:"px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground border border-border rounded-md hover:bg-muted transition-colors",children:"Notes"})]})]})]})})})},LIA="plannotator-editor-mode",s9A="selection";function o9A(){const e=Pe.getItem(LIA);return e==="selection"||e==="comment"||e==="redline"||e==="quickLabel"?e:s9A}function g9A(e){Pe.setItem(LIA,e)}const TIA="plannotator-input-method",l9A="drag";function c9A(){const e=Pe.getItem(TIA);return e==="drag"||e==="pinpoint"?e:l9A}function I9A(e){Pe.setItem(TIA,e)}const C9A=300,E9A=300;function u9A(e,A){const t=nA.useRef("idle"),i=nA.useRef(0),r=nA.useRef(void 0),n=nA.useRef(e);nA.useEffect(()=>{t.current==="idle"&&(n.current=e)},[e]);const a=nA.useCallback(s=>s==="drag"?"pinpoint":"drag",[]);nA.useEffect(()=>{const s=g=>{if(g.key!=="Alt"||g.repeat)return;const l=g.target?.tagName;l==="INPUT"||l==="TEXTAREA"||g.target?.isContentEditable||document.querySelector("[data-quick-label-picker]")||(t.current==="idle"?(n.current=e,i.current=Date.now(),t.current="held",A(a(e))):t.current==="tapped"&&(clearTimeout(r.current),t.current="idle",n.current=a(n.current)))},o=g=>{g.key==="Alt"&&t.current==="held"&&(Date.now()-i.current>=E9A?(A(n.current),t.current="idle"):(t.current="tapped",r.current=setTimeout(()=>{t.current==="tapped"&&(A(n.current),t.current="idle")},C9A)))};return window.addEventListener("keydown",s),window.addEventListener("keyup",o),()=>{clearTimeout(r.current),window.removeEventListener("keydown",s),window.removeEventListener("keyup",o)}},[e,A,a])}function B9A(){nA.useEffect(()=>{const e=()=>document.documentElement.classList.add("plannotator-print"),A=()=>document.documentElement.classList.remove("plannotator-print"),t=()=>{!document.hidden&&document.documentElement.classList.contains("plannotator-print")&&document.documentElement.classList.remove("plannotator-print")};return window.addEventListener("beforeprint",e),window.addEventListener("afterprint",A),document.addEventListener("visibilitychange",t),()=>{window.removeEventListener("beforeprint",e),window.removeEventListener("afterprint",A),document.removeEventListener("visibilitychange",t),document.documentElement.classList.remove("plannotator-print")}},[])}function zZ({storageKey:e,defaultWidth:A=288,minWidth:t=200,maxWidth:i=600,side:r="right"}){const[n,a]=nA.useState(()=>{const Q=Pe.getItem(e);if(Q){const f=Number(Q);if(!Number.isNaN(f)&&f>=t&&f<=i)return f}return A}),[s,o]=nA.useState(!1),g=nA.useRef(0),l=nA.useRef(0),I=nA.useRef(n),C=nA.useCallback(Q=>{I.current=Q,a(Q)},[]),E=nA.useCallback(Q=>{Q.preventDefault(),g.current=Q.clientX,l.current=I.current,o(!0)},[]),u=nA.useCallback(Q=>{Q.preventDefault(),g.current=Q.touches[0].clientX,l.current=I.current,o(!0)},[]);nA.useEffect(()=>{if(!s)return;const Q=y=>"touches"in y?y.touches[0]?.clientX??y.changedTouches[0]?.clientX??0:y.clientX,f=y=>{const w=Q(y),S=r==="right"?g.current-w:w-g.current;C(Math.min(i,Math.max(t,l.current+S)))},p=()=>{o(!1),Pe.setItem(e,String(I.current))};return document.addEventListener("mousemove",f),document.addEventListener("mouseup",p),document.addEventListener("touchmove",f,{passive:!1}),document.addEventListener("touchend",p),document.addEventListener("touchcancel",p),()=>{document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",p),document.removeEventListener("touchmove",f),document.removeEventListener("touchend",p),document.removeEventListener("touchcancel",p)}},[s,t,i,e,r,C]);const d=nA.useCallback(()=>{C(A),Pe.setItem(e,String(A))},[A,e,C]);return{width:n,isDragging:s,handleProps:{isDragging:s,onMouseDown:E,onTouchStart:u,onDoubleClick:d}}}const qZ=({isDragging:e,onMouseDown:A,onTouchStart:t,onDoubleClick:i,className:r,side:n})=>D.jsxs("div",{className:`relative w-0 cursor-col-resize flex-shrink-0 group z-10${r?` ${r}`:""}`,children:[D.jsx("div",{className:`absolute inset-y-0 -left-0.5 -right-0.5 transition-colors ${e?"bg-primary/50":"group-hover:bg-border"}`}),D.jsx("div",{className:`absolute inset-y-0 ${n==="left"?"-right-2 -left-1":n==="right"?"-right-3 left-0":"-inset-x-2"}`,onMouseDown:A,onTouchStart:t,onDoubleClick:i})]});function d9A(){const e=nA.useRef(null),[A,t]=nA.useState(null),i=nA.useCallback(r=>{const n=r;e.current=n,t(n)},[]);return{ref:e,viewport:A,onViewportReady:i}}const h9A=({className:e,panelClassName:A,renderTrigger:t,children:i})=>{const[r,n]=nA.useState(!1),a=nA.useRef(null);return nA.useEffect(()=>{if(!r)return;const s=g=>{a.current&&!a.current.contains(g.target)&&n(!1)},o=g=>{g.key==="Escape"&&n(!1)};return document.addEventListener("pointerdown",s),document.addEventListener("keydown",o),()=>{document.removeEventListener("pointerdown",s),document.removeEventListener("keydown",o)}},[r]),D.jsxs("div",{ref:a,className:e?`relative ${e}`:"relative",children:[t({isOpen:r,toggleMenu:()=>n(s=>!s)}),r&&D.jsx("div",{className:A??"absolute top-full right-0 mt-1 w-56 rounded-lg border border-border bg-popover py-1 shadow-xl z-[70]",children:i({closeMenu:()=>n(!1)})})]})},Yg=({onClick:e,icon:A,label:t,subtitle:i,badge:r})=>D.jsxs("button",{onClick:e,className:"flex w-full items-center gap-2 px-3 py-2 text-left text-xs transition-colors hover:bg-muted",children:[D.jsx("span",{className:"text-muted-foreground",children:A}),i?D.jsxs("span",{className:"flex flex-1 flex-col gap-0.5",children:[D.jsx("span",{children:t}),D.jsx("span",{className:"text-[10px] text-muted-foreground",children:i})]}):D.jsx("span",{className:"flex-1",children:t}),r]}),rD=()=>D.jsx("div",{className:"my-1 border-t border-border"}),WZ=({children:e})=>D.jsx("div",{className:"text-[10px] font-semibold uppercase tracking-wider text-muted-foreground",children:e}),Q9A=({className:e="w-3.5 h-3.5"})=>D.jsxs("svg",{className:`${e} flex-shrink-0`,viewBox:"0 0 64 64",fill:"none",stroke:"currentColor",children:[D.jsx("path",{d:"M40.5 40.5L55 55",strokeWidth:7,strokeLinecap:"round"}),D.jsx("circle",{cx:"27",cy:"27",r:"20",strokeWidth:4}),D.jsx("path",{d:"M27 14L29.2 14.3L30.2 17.2L32.6 18.6L35.5 17.5L37.2 19.2L36.1 22.1L37.5 24.5L40.4 25.5L40.7 27.7L40.4 29.9L37.5 30.9L36.1 33.3L37.2 36.2L35.5 37.9L32.6 36.8L30.2 38.2L29.2 41.1L27 41.4L24.8 41.1L23.8 38.2L21.4 36.8L18.5 37.9L16.8 36.2L17.9 33.3L16.5 30.9L13.6 29.9L13.3 27.7L13.6 25.5L16.5 24.5L17.9 22.1L16.8 19.2L18.5 17.5L21.4 18.6L23.8 17.2L24.8 14.3Z",strokeWidth:1.5,strokeLinejoin:"round"}),D.jsx("circle",{cx:"27",cy:"27.7",r:"7",strokeWidth:1.5})]}),f9A=({appVersion:e,onOpenSettings:A,onOpenExport:t,onCopyAgentInstructions:i,onDownloadAnnotations:r,onPrint:n,onCopyShareLink:a,onOpenImport:s,onSaveToObsidian:o,onSaveToBear:g,onSaveToOctarine:l,sharingEnabled:I,isApiMode:C,agentInstructionsEnabled:E,hasNewSettingsHints:u,obsidianConfigured:d,bearConfigured:Q,octarineConfigured:f})=>{const{theme:p,setTheme:y}=$cA(),w=C&&(d||Q||f);return D.jsx(h9A,{renderTrigger:({isOpen:S,toggleMenu:k})=>D.jsxs("button",{onClick:k,className:`relative flex items-center gap-1.5 p-1.5 md:px-2.5 md:py-1 rounded-md text-xs font-medium transition-colors ${S?"bg-muted text-foreground":"text-muted-foreground hover:text-foreground hover:bg-muted"}`,title:"Options","aria-label":"Options","aria-expanded":S,children:[S?D.jsx(m9A,{}):D.jsx(p9A,{}),D.jsx("span",{className:"hidden md:inline",children:"Options"}),u&&!S&&D.jsxs("span",{className:"absolute -top-0.5 -right-0.5 flex h-2 w-2",children:[D.jsx("span",{className:"absolute inset-0 rounded-full bg-primary opacity-75 animate-ping"}),D.jsx("span",{className:"relative rounded-full h-2 w-2 bg-primary"})]})]}),children:({closeMenu:S})=>D.jsxs(D.Fragment,{children:[D.jsxs("div",{className:"px-3 py-2 space-y-1.5",children:[D.jsx(WZ,{children:"Theme"}),D.jsx("div",{className:"flex items-center gap-1 rounded-lg bg-muted/50 p-0.5",children:["light","dark","system"].map(k=>D.jsxs("button",{onClick:()=>{S(),y(k)},className:`flex flex-1 items-center justify-center gap-1.5 rounded-md px-2 py-1 text-[11px] font-medium transition-colors ${p===k?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:[k==="light"?D.jsx(pIA,{}):k==="dark"?D.jsx(mIA,{}):D.jsx(yIA,{}),D.jsx("span",{className:"capitalize",children:k})]},k))})]}),D.jsx(rD,{}),D.jsx(Yg,{onClick:()=>{S(),A()},icon:D.jsx(y9A,{}),label:"Settings"}),D.jsx(Yg,{onClick:()=>{S(),t()},icon:D.jsx(D9A,{}),label:"Export"}),E&&D.jsx(Yg,{onClick:()=>{S(),i()},icon:D.jsx(Q9A,{}),label:"Agent Instructions",subtitle:"Copy agent instructions for external annotations"}),D.jsx(rD,{}),D.jsx(Yg,{onClick:()=>{S(),r()},icon:D.jsx(w9A,{}),label:"Download Annotations"}),D.jsx(Yg,{onClick:()=>{S(),n()},icon:D.jsx(v9A,{}),label:"Print Plan"}),I&&D.jsx(Yg,{onClick:()=>{S(),a()},icon:D.jsx(S9A,{}),label:"Copy Share Link"}),I&&D.jsx(Yg,{onClick:()=>{S(),s()},icon:D.jsx(b9A,{}),label:"Import Review"}),w&&D.jsxs(D.Fragment,{children:[D.jsx(rD,{}),d&&D.jsx(Yg,{onClick:()=>{S(),o()},icon:D.jsx(kT,{}),label:"Save to Obsidian"}),Q&&D.jsx(Yg,{onClick:()=>{S(),g()},icon:D.jsx(kT,{}),label:"Save to Bear"}),f&&D.jsx(Yg,{onClick:()=>{S(),l()},icon:D.jsx(kT,{}),label:"Save to Octarine"})]}),D.jsx(rD,{}),D.jsxs("div",{className:"px-3 py-2 space-y-2",children:[D.jsxs("div",{className:"flex items-center justify-between gap-3",children:[D.jsx(WZ,{children:"Plannotator"}),D.jsxs("span",{className:"text-[10px] font-mono text-muted-foreground/70",children:["v",e]})]}),D.jsxs("div",{className:"flex flex-col items-start gap-1 text-[11px]",children:[D.jsx("a",{href:"https://github.com/backnotprop/plannotator/releases",target:"_blank",rel:"noopener noreferrer",onClick:S,className:"text-muted-foreground hover:text-foreground transition-colors",children:"Release notes"}),D.jsx("a",{href:"https://github.com/backnotprop/plannotator",target:"_blank",rel:"noopener noreferrer",onClick:S,className:"text-muted-foreground hover:text-foreground transition-colors",children:"Project repo"})]})]})]})})},p9A=()=>D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 6h16M4 12h16M4 18h16"})}),m9A=()=>D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2.5,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"})}),y9A=()=>D.jsxs("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:[D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.066 2.573c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.573 1.066c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.066-2.573c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"}),D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})]}),D9A=()=>D.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12"})}),w9A=()=>D.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"})}),v9A=()=>D.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h6a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z"})}),S9A=()=>D.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1"})}),b9A=()=>D.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4M10 17l5-5-5-5M15 12H3"})}),kT=()=>D.jsx("svg",{className:"w-3.5 h-3.5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 5a2 2 0 012-2h10a2 2 0 012 2v16l-7-3.5L5 21V5z"})}),R9A=({isOpen:e,onComplete:A})=>{const[t,i]=nA.useState("acceptEdits");if(!e)return null;const r=()=>{CIA(t),A(t)};return Dg.createPortal(D.jsx("div",{className:"fixed inset-0 z-[100] flex items-center justify-center bg-background/90 backdrop-blur-sm p-4",children:D.jsxs("div",{className:"bg-card border border-border rounded-xl w-full max-w-lg shadow-2xl",children:[D.jsxs("div",{className:"p-5 border-b border-border",children:[D.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[D.jsx("div",{className:"p-1.5 rounded-lg bg-primary/15",children:D.jsx("svg",{className:"w-5 h-5 text-primary",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M14.857 17.082a23.848 23.848 0 005.454-1.31A8.967 8.967 0 0118 9.75v-.7V9A6 6 0 006 9v.75a8.967 8.967 0 01-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 01-5.714 0m5.714 0a3 3 0 11-5.714 0"})})}),D.jsx("h3",{className:"font-semibold text-base",children:"New: Permission Mode Preservation"})]}),D.jsx("p",{className:"text-sm text-muted-foreground",children:"Claude Code 2.1.7+ supports preserving your permission mode after plan approval. Choose your preferred automation level."}),D.jsxs("p",{className:"text-xs text-muted-foreground/70 mt-1",children:["Requires Claude Code 2.1.7 or later. Run ",D.jsx("code",{className:"bg-muted px-1 rounded",children:"claude update"})," to update."]})]}),D.jsx("div",{className:"p-4 space-y-2",children:zO.map(n=>D.jsxs("label",{className:`flex items-start gap-3 p-3 rounded-lg cursor-pointer transition-all border ${t===n.value?"border-primary bg-primary/10":"border-transparent bg-muted/50 hover:bg-muted"}`,children:[D.jsx("input",{type:"radio",name:"permissionMode",value:n.value,checked:t===n.value,onChange:()=>i(n.value),className:"mt-0.5 accent-primary"}),D.jsxs("div",{className:"flex-1",children:[D.jsx("div",{className:"text-sm font-medium",children:n.label}),D.jsx("div",{className:"text-xs text-muted-foreground",children:n.description})]})]},n.value))}),D.jsxs("div",{className:"p-4 border-t border-border flex justify-between items-center",children:[D.jsx("p",{className:"text-xs text-muted-foreground",children:"You can change this later in Settings."}),D.jsx("button",{onClick:r,className:"px-4 py-2 bg-primary text-primary-foreground rounded-lg text-sm font-medium hover:opacity-90 transition-opacity",children:"Continue"})]})]})}),document.body)};function N9A(e){const[A,t]=nA.useState(e),[i,r]=nA.useState("toc"),n=nA.useCallback(o=>{t(!0),o&&r(o)},[]),a=nA.useCallback(()=>{t(!1)},[]),s=nA.useCallback(o=>{A?i===o?t(!1):r(o):(t(!0),r(o))},[A,i]);return{isOpen:A,activeTab:i,open:n,close:a,toggleTab:s}}class M9A{diff(A,t,i={}){let r;typeof i=="function"?(r=i,i={}):"callback"in i&&(r=i.callback);const n=this.castInput(A,i),a=this.castInput(t,i),s=this.removeEmpty(this.tokenize(n,i)),o=this.removeEmpty(this.tokenize(a,i));return this.diffWithOptionsObj(s,o,i,r)}diffWithOptionsObj(A,t,i,r){var n;const a=p=>{if(p=this.postProcess(p,i),r){setTimeout(function(){r(p)},0);return}else return p},s=t.length,o=A.length;let g=1,l=s+o;i.maxEditLength!=null&&(l=Math.min(l,i.maxEditLength));const I=(n=i.timeout)!==null&&n!==void 0?n:1/0,C=Date.now()+I,E=[{oldPos:-1,lastComponent:void 0}];let u=this.extractCommon(E[0],t,A,0,i);if(E[0].oldPos+1>=o&&u+1>=s)return a(this.buildValues(E[0].lastComponent,t,A));let d=-1/0,Q=1/0;const f=()=>{for(let p=Math.max(d,-g);p<=Math.min(Q,g);p+=2){let y;const w=E[p-1],S=E[p+1];w&&(E[p-1]=void 0);let k=!1;if(S){const b=S.oldPos-p;k=S&&0<=b&&b<s}const R=w&&w.oldPos+1<o;if(!k&&!R){E[p]=void 0;continue}if(!R||k&&w.oldPos<S.oldPos?y=this.addToPath(S,!0,!1,0,i):y=this.addToPath(w,!1,!0,1,i),u=this.extractCommon(y,t,A,p,i),y.oldPos+1>=o&&u+1>=s)return a(this.buildValues(y.lastComponent,t,A))||!0;E[p]=y,y.oldPos+1>=o&&(Q=Math.min(Q,p-1)),u+1>=s&&(d=Math.max(d,p+1))}g++};if(r)(function p(){setTimeout(function(){if(g>l||Date.now()>C)return r(void 0);f()||p()},0)})();else for(;g<=l&&Date.now()<=C;){const p=f();if(p)return p}}addToPath(A,t,i,r,n){const a=A.lastComponent;return a&&!n.oneChangePerToken&&a.added===t&&a.removed===i?{oldPos:A.oldPos+r,lastComponent:{count:a.count+1,added:t,removed:i,previousComponent:a.previousComponent}}:{oldPos:A.oldPos+r,lastComponent:{count:1,added:t,removed:i,previousComponent:a}}}extractCommon(A,t,i,r,n){const a=t.length,s=i.length;let o=A.oldPos,g=o-r,l=0;for(;g+1<a&&o+1<s&&this.equals(i[o+1],t[g+1],n);)g++,o++,l++,n.oneChangePerToken&&(A.lastComponent={count:1,previousComponent:A.lastComponent,added:!1,removed:!1});return l&&!n.oneChangePerToken&&(A.lastComponent={count:l,previousComponent:A.lastComponent,added:!1,removed:!1}),A.oldPos=o,g}equals(A,t,i){return i.comparator?i.comparator(A,t):A===t||!!i.ignoreCase&&A.toLowerCase()===t.toLowerCase()}removeEmpty(A){const t=[];for(let i=0;i<A.length;i++)A[i]&&t.push(A[i]);return t}castInput(A,t){return A}tokenize(A,t){return Array.from(A)}join(A){return A.join("")}postProcess(A,t){return A}get useLongestToken(){return!1}buildValues(A,t,i){const r=[];let n;for(;A;)r.push(A),n=A.previousComponent,delete A.previousComponent,A=n;r.reverse();const a=r.length;let s=0,o=0,g=0;for(;s<a;s++){const l=r[s];if(l.removed)l.value=this.join(i.slice(g,g+l.count)),g+=l.count;else{if(!l.added&&this.useLongestToken){let I=t.slice(o,o+l.count);I=I.map(function(C,E){const u=i[g+E];return u.length>C.length?u:C}),l.value=this.join(I)}else l.value=this.join(t.slice(o,o+l.count));o+=l.count,l.added||(g+=l.count)}}return r}}class k9A extends M9A{constructor(){super(...arguments),this.tokenize=T9A}equals(A,t,i){return i.ignoreWhitespace?((!i.newlineIsToken||!A.includes(`
512
512
  `))&&(A=A.trim()),(!i.newlineIsToken||!t.includes(`
513
513
  `))&&(t=t.trim())):i.ignoreNewlineAtEof&&!i.newlineIsToken&&(A.endsWith(`
514
514
  `)&&(A=A.slice(0,-1)),t.endsWith(`
@@ -977,7 +977,7 @@ export const CursorOverlay: React.FC<CursorOverlayProps> = ({
977
977
  ---
978
978
 
979
979
  **Target:** Ship MVP in next sprint
980
- `;function pHA({blocks:e,annotations:A,addAnnotation:t,removeAnnotation:i}){const[r,n]=nA.useState(new Map),a=nA.useRef(e);a.current=e;const s=nA.useRef(A);s.current=A,nA.useEffect(()=>{if(r.size===0)return;const l=new Set(e.map(C=>C.id)),I=[...r.keys()].filter(C=>!l.has(C));I.length>0&&n(C=>{const E=new Map(C);return I.forEach(u=>E.delete(u)),E})},[e]);const o=nA.useCallback((l,I)=>{const C=a.current,E=s.current,u=C.find(Q=>Q.id===l);if(u&&I===u.checked)n(f=>{const p=new Map(f);return p.delete(l),p}),E.filter(f=>f.blockId===l&&f.id.startsWith("ann-checkbox-")).forEach(f=>i(f.id));else if(E.filter(f=>f.blockId===l&&f.id.startsWith("ann-checkbox-")).forEach(f=>i(f.id)),n(f=>{const p=new Map(f);return p.set(l,I),p}),u){const f=C.indexOf(u);let p="";for(let k=f-1;k>=0;k--)if(C[k].type==="heading"){p=C[k].content;break}const y=I?"Mark as completed":"Mark as not completed",w=p?` (under "${p}")`:` (line ${u.startLine})`,S={id:`ann-checkbox-${l}-${Date.now()}`,blockId:l,startOffset:0,endOffset:u.content.length,type:oi.COMMENT,text:`${y}${w}: ${u.content}`,originalText:u.content,createdA:Date.now()};t(S)}},[t,i]),g=nA.useCallback(l=>{n(I=>{const C=new Map(I);return C.delete(l),C})},[]);return{overrides:r,toggle:o,revertOverride:g}}const mHA=()=>{const[e,A]=nA.useState(fHA),[t,i]=nA.useState([]),[r,n]=nA.useState(null),[a,s]=nA.useState([]),[o,g]=nA.useState(null),[l,I]=nA.useState(!1),[C,E]=nA.useState(!1),[u,d]=nA.useState(!1),[Q,f]=nA.useState(!1),[p,y]=nA.useState(!1),[w,S]=nA.useState(""),[k,R]=nA.useState(()=>window.innerWidth>=768),[b,N]=nA.useState(!1),[T,L]=nA.useState(()=>QIA()),[K,H]=nA.useState(o9A),[x,U]=nA.useState(c9A),[G,F]=nA.useState(()=>Pe.getItem("plannotator-tater-mode")==="true"),[O,P]=nA.useState(()=>JO()),q=nA.useRef(null),[Y,z]=nA.useState("full");nA.useLayoutEffect(()=>{const $A=q.current;if(!$A)return;const Oe=dt=>dt>=800?"full":dt>=680?"short":"icon";z(Oe($A.getBoundingClientRect().width));const et=new ResizeObserver(([dt])=>{const Ii=Oe(dt.contentRect.width);z(Cr=>Cr===Ii?Cr:Ii)});return et.observe($A),()=>et.disconnect()},[]);const[j,X]=nA.useState(!1),[_,gA]=nA.useState(null),[eA,dA]=nA.useState(),[tA,oA]=nA.useState(!1),[aA,rA]=nA.useState([]),[EA,cA]=nA.useState(!1),[wA,uA]=nA.useState(null),[PA,sA]=nA.useState(void 0),[te,SA]=nA.useState(!0),[XA,re]=nA.useState(!1),[oe,GA]=nA.useState(null),[Ae,HA]=nA.useState(null),[zA,le]=nA.useState(!1),[MA,ee]=nA.useState("bypassPermissions"),[BA,vA]=nA.useState(!0),[Z,yA]=nA.useState(void 0),[fA,xA]=nA.useState(void 0),[kA,hA]=nA.useState(null),[TA,NA]=nA.useState(null);nA.useEffect(()=>{document.title=kA?`${kA.display} · Plannotator`:"Plannotator"},[kA]);const[YA,jA]=nA.useState(),[ae,mA]=nA.useState(null),[KA,UA]=nA.useState(!1),[se,Ne]=nA.useState("clean"),[ve,iA]=nA.useState(null),[Ce,ce]=nA.useState(null),De=nA.useRef(null),{ref:Se,viewport:Ke,onViewportReady:Ue}=d9A();B9A();const je=zZ({storageKey:"plannotator-panel-width"}),bt=zZ({storageKey:"plannotator-toc-width",defaultWidth:240,minWidth:160,maxWidth:400,side:"left"}),$e=je.isDragging||bt.isDragging,tt=N9A(JO().tocEnabled);nA.useEffect(()=>{O.tocEnabled?tt.open("toc"):tt.close()},[O.tocEnabled]),nA.useEffect(()=>{tt.activeTab==="toc"&&KA&&UA(!1)},[tt.activeTab]),nA.useEffect(()=>{if(!KA)return;const $A=Oe=>{Oe.key==="Escape"&&UA(!1)};return document.addEventListener("keydown",$A),()=>document.removeEventListener("keydown",$A)},[KA]);const Et=G9A(e,ve,Ce),Ve=O9A({markdown:e,annotations:t,selectedAnnotationId:r,globalAttachments:aA,setMarkdown:A,setAnnotations:i,setSelectedAnnotationId:n,setGlobalAttachments:rA,viewerRef:De,sidebar:tt}),At=J9A({markdown:e,viewerRef:De,linkedDocHook:Ve,setMarkdown:A,setAnnotations:i,setSelectedAnnotationId:n,setSubmitted:GA}),Dt=U9A(),gi=nA.useMemo(()=>TYA(),[O]),Fe=nA.useMemo(()=>{if(!gi)return"";const $A=xI();return LI($A)},[gi,O]);nA.useEffect(()=>{gi||Dt.setActiveFile(null)},[gi]),nA.useEffect(()=>{tt.activeTab==="vault"&&gi&&Fe&&Dt.tree.length===0&&!Dt.isLoading&&Dt.fetchTree(Fe)},[tt.activeTab,gi,Fe]);const WA=Ur.useCallback($A=>Oe=>`/api/reference/obsidian/doc?vaultPath=${encodeURIComponent($A)}&path=${encodeURIComponent(Oe)}`,[]),Re=Ur.useCallback($A=>{Ve.open($A,WA(Fe)),Dt.setActiveFile($A)},[Fe,Ve,Dt,WA]),Ye=X9A(),Lt=nA.useMemo(()=>!!TA||GZ(),[TA,O]),Xt=nA.useMemo(()=>{const $A=TA?[TA]:[],Oe=GZ()?R5().directories:[];return[...new Set([...$A,...Oe])]},[TA,O]);nA.useEffect(()=>{Lt||Ye.setActiveFile(null)},[Lt]),nA.useEffect(()=>{if(tt.activeTab==="files"&&Lt&&Xt.length>0){const $A=Ye.dirs.map(et=>et.path);(Xt.length!==$A.length||Xt.some(et=>!$A.includes(et)))&&Ye.fetchAll(Xt)}},[tt.activeTab,Lt,Xt]);const ut=Ur.useCallback(($A,Oe)=>{const et=dt=>`/api/doc?path=${encodeURIComponent(dt)}&base=${encodeURIComponent(Oe)}`;Ve.open($A,et,"files"),Ye.setActiveFile($A),Dt.setActiveFile(null)},[Ve,Ye]),Si=Ur.useCallback($A=>{if(Dt.activeFile&&Fe)Ve.open($A,WA(Fe));else if(Ye.activeFile&&Ye.activeDirPath){const Oe=Ve.filepath?.replace(/\/[^/]+$/,"")||Ye.activeDirPath;Ve.open($A,et=>`/api/doc?path=${encodeURIComponent(et)}&base=${encodeURIComponent(Oe)}`)}else{const Oe=Ve.filepath?Ve.filepath.replace(/\/[^/]+$/,""):PA;Oe?Ve.open($A,et=>`/api/doc?path=${encodeURIComponent(et)}&base=${encodeURIComponent(Oe)}`):Ve.open($A)}},[Dt.activeFile,Fe,Ye.activeFile,Ye.activeDirPath,Ve,WA,PA]),zi=Ur.useCallback(()=>{Ve.back(),Dt.setActiveFile(null),Ye.setActiveFile(null),At.clearSelection()},[Ve,Dt,Ye,At]),ri=nA.useMemo(()=>{const $A=new Map;for(const[Oe,et]of Ve.getDocAnnotations()){const dt=et.annotations.length+et.globalAttachments.length;dt>0&&$A.set(Oe,dt)}return $A},[Ve.getDocAnnotations,t,aA]),xe=nA.useMemo(()=>{if(Xt.length===0)return ri;const $A=new Map;for(const[Oe,et]of ri)Xt.some(dt=>Oe.startsWith(dt+"/"))&&$A.set(Oe,et);return $A},[ri,Xt]),ye=nA.useMemo(()=>{if(!Fe)return new Map;const $A=Fe.endsWith("/")?Fe:Fe+"/",Oe=new Map;for(const[et,dt]of ri)et.startsWith($A)&&Oe.set(et.slice($A.length),dt);return Oe},[ri,Fe]),ke=xe.size>0,be=ye.size>0,me=nA.useMemo(()=>{const $A=Ve.filepath;let Oe=0,et=0;for(const[dt,Ii]of ri)dt!==$A&&(Oe+=Ii,et++);return Oe>0?{count:Oe,files:et}:void 0},[ri,Ve.filepath]),[gt,LA]=nA.useState(),qi=Ur.useRef(),FA=Ur.useCallback(()=>{const $A=new Set(ri.keys());$A.size!==0&&((!tt.isOpen||tt.activeTab!=="files"&&tt.activeTab!=="vault")&&tt.open(be&&!ke?"vault":"files"),qi.current&&clearTimeout(qi.current),LA(void 0),requestAnimationFrame(()=>{LA($A),qi.current=setTimeout(()=>LA(void 0),1200)}))},[ri,tt,be,ke]),Kt=nA.useMemo(()=>{if(!gt||!Fe)return;const $A=Fe.endsWith("/")?Fe:Fe+"/",Oe=new Set;for(const et of gt)et.startsWith($A)&&Oe.add(et.slice($A.length));return Oe.size>0?Oe:void 0},[gt,Fe]),Fa=wA==="folder"?"file list":wA==="file"?"file":wA==="message"?"message":"plan",ss=Ur.useCallback(()=>{Dt.fetchTree(Fe)},[Dt,Fe]),Ga=nA.useMemo(()=>a.filter($A=>$A.type==="heading").length,[a]),Ls=j8A(Se,Ga,Ke),{editorAnnotations:mi,deleteEditorAnnotation:gr}=q9A(),{externalAnnotations:An,updateExternalAnnotation:fa,deleteExternalAnnotation:os}=Z9A({enabled:j}),{reset:lr}=j9A({viewerRef:De,externalAnnotations:An,enabled:j&&!Ve.isActive&&!KA,planKey:e}),hi=nA.useMemo(()=>An.length===0?t:[...t.filter(Oe=>Oe.source?!An.some(et=>et.source===Oe.source&&et.type===Oe.type&&et.originalText===Oe.originalText):!0),...An],[t,An]),cr=nA.useMemo(()=>hi.filter($A=>!!$A.diffContext),[hi]),Qt=nA.useMemo(()=>hi.filter($A=>!$A.diffContext),[hi]),{isSharedSession:yt,isLoadingShared:Ni,shareUrl:Yt,shareUrlSize:en,shortShareUrl:Ir,isGeneratingShortUrl:ea,shortUrlError:In,pendingSharedAnnotations:qe,clearPendingSharedAnnotations:W,generateShortUrl:$,importFromShareUrl:CA,shareLoadError:DA,clearShareLoadError:OA}=W8A(e,hi,aA,A,i,rA,()=>{SA(!1)},Z,fA),{draftBanner:_A,restoreDraft:Ee,dismissDraft:fe}=P9A({annotations:hi,globalAttachments:aA,isApiMode:j,isSharedSession:yt,submitted:!!oe}),Xe=Ur.useCallback(()=>{const{annotations:$A,globalAttachments:Oe}=Ee();$A.length>0&&(i($A),Oe.length>0&&rA(Oe),setTimeout(()=>{De.current?.applySharedAnnotations($A.filter(et=>!et.diffContext))},100))},[Ee]),{getAgentWarning:Ht}=BIA(_);nA.useEffect(()=>{if(qe&&qe.length>0){const $A=setTimeout(()=>{De.current?.clearAllHighlights(),De.current?.applySharedAnnotations(qe.filter(Oe=>!Oe.diffContext)),W(),lr()},100);return()=>clearTimeout($A)}},[qe,W,lr]);const Pt=$A=>{F($A),Pe.setItem("plannotator-tater-mode",String($A))},ti=$A=>{H($A),g9A($A)},Ai=$A=>{U($A),I9A($A)};u9A(x,Ai),nA.useEffect(()=>{Ni||yt||fetch("/api/plan").then($A=>{if(!$A.ok)throw new Error("Not in API mode");return $A.json()}).then($A=>{Mn.init($A.serverConfig),dA($A.serverConfig?.gitUser),$A.mode==="archive"?(A($A.plan||""),$A.archivePlans&&At.init($A.archivePlans),At.fetchPlans(),vA(!1),tt.open("archive")):$A.mode==="annotate-folder"?A(""):$A.plan&&A($A.plan),X(!0),($A.mode==="annotate"||$A.mode==="annotate-last"||$A.mode==="annotate-folder")&&cA(!0),$A.mode==="annotate-folder"&&tt.open("files"),$A.mode&&$A.mode!=="archive"&&uA($A.mode==="annotate-last"?"message":$A.mode==="annotate-folder"?"folder":"file"),$A.filePath&&sA($A.mode==="annotate-folder"?$A.filePath:$A.filePath.replace(/\/[^/]+$/,"")),$A.sharingEnabled!==void 0&&vA($A.sharingEnabled),$A.shareBaseUrl&&yA($A.shareBaseUrl),$A.pasteApiUrl&&xA($A.pasteApiUrl),$A.repoInfo&&hA($A.repoInfo),$A.projectRoot&&NA($A.projectRoot),$A.previousPlan!==void 0&&iA($A.previousPlan),$A.versionInfo&&ce($A.versionInfo),$A.origin&&(gA($A.origin),$A.origin==="claude-code"&&I8A()&&le(!0),ee(IIA().mode)),$A.isWSL&&oA(!0)}).catch(()=>{X(!1)}).finally(()=>SA(!1))},[Ni,yt]),nA.useEffect(()=>{const{frontmatter:$A}=piA(e);g($A),s(miA(e))},[e]);const wt=nA.useRef(!1),kt=nA.useRef({}),Hi=nA.useRef(null);nA.useEffect(()=>{wt.current=!1,kt.current={},Hi.current=null},[e]),nA.useEffect(()=>{if(!j||!e||yt||EA||At.archiveMode||wt.current)return;const $A={},Oe=[],et=xI();if(et.autoSave&&et.enabled){const dr=LI(et);dr&&($A.obsidian={vaultPath:dr,folder:et.folder||"plannotator",plan:e,...et.filenameFormat&&{filenameFormat:et.filenameFormat},...et.filenameSeparator&&et.filenameSeparator!=="space"&&{filenameSeparator:et.filenameSeparator}},Oe.push("Obsidian"))}const dt=DE();dt.autoSave&&dt.enabled&&($A.bear={plan:e,customTags:dt.customTags,tagPosition:dt.tagPosition},Oe.push("Bear"));const Ii=Bd();if(Ii.autoSave&&tD()&&($A.octarine={plan:e,workspace:Ii.workspace,folder:Ii.folder||"plannotator"},Oe.push("Octarine")),Oe.length===0)return;wt.current=!0;const Cr=fetch("/api/save-notes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify($A)}).then(dr=>dr.json()).then(dr=>{const Xo={...$A.obsidian?{obsidian:!!dr.results?.obsidian?.success}:{},...$A.bear?{bear:!!dr.results?.bear?.success}:{},...$A.octarine?{octarine:!!dr.results?.octarine?.success}:{}};kt.current=Xo;const KC=Oe.filter(Uh=>!dr.results?.[Uh.toLowerCase()]?.success);return KC.length===0?mA({type:"success",message:`Auto-saved to ${Oe.join(" & ")}`}):mA({type:"error",message:`Auto-save failed for ${KC.join(" & ")}`}),Xo}).catch(()=>(kt.current={},mA({type:"error",message:"Auto-save failed"}),{})).finally(()=>setTimeout(()=>mA(null),3e3));Hi.current=Cr},[j,e,yt,EA]),nA.useEffect(()=>{const $A=Oe=>{const et=Oe.clipboardData?.items;if(et){for(const dt of et)if(dt.type.startsWith("image/")){Oe.preventDefault();const Ii=dt.getAsFile();if(Ii){const Cr=f3(Ii.name,aA.map(Xo=>Xo.name)),dr=URL.createObjectURL(Ii);HA({file:Ii,blobUrl:dr,initialName:Cr})}break}}};return document.addEventListener("paste",$A),()=>document.removeEventListener("paste",$A)},[aA]);const Jn=async($A,Oe,et)=>{if(Ae)try{const dt=new FormData,Ii=Oe?new File([$A],"annotated.png",{type:"image/png"}):Ae.file;dt.append("file",Ii);const Cr=await fetch("/api/upload",{method:"POST",body:dt});if(Cr.ok){const dr=await Cr.json();rA(Xo=>[...Xo,{path:dr.path,name:et}])}}catch{}finally{URL.revokeObjectURL(Ae.blobUrl),HA(null)}},zn=()=>{Ae&&(URL.revokeObjectURL(Ae.blobUrl),HA(null))},Pi=async()=>{re(!0);try{const $A=xI(),Oe=DE(),et=Bd(),dt=S5(),Ii=wS(),Cr=Oe.autoSave&&Hi.current?await Hi.current:kt.current,dr={};_==="claude-code"&&(dr.permissionMode=MA);const Xo=o8A(dt);Xo&&(dr.agentSwitch=Xo),dr.planSave={enabled:Ii.enabled,...Ii.customPath&&{customPath:Ii.customPath}};const KC=LI($A);$A.enabled&&KC&&(dr.obsidian={vaultPath:KC,folder:$A.folder||"plannotator",plan:e,...$A.filenameFormat&&{filenameFormat:$A.filenameFormat},...$A.filenameSeparator&&$A.filenameSeparator!=="space"&&{filenameSeparator:$A.filenameSeparator}}),Oe.enabled&&!(Oe.autoSave&&Cr.bear)&&(dr.bear={plan:e,customTags:Oe.customTags,tagPosition:Oe.tagPosition}),tD()&&(dr.octarine={plan:e,workspace:et.workspace,folder:et.folder||"plannotator"});const Uh=Array.from(Ve.getDocAnnotations().values()).some(bm=>bm.annotations.length>0||bm.globalAttachments.length>0);(hi.length>0||aA.length>0||Uh||mi.length>0)&&(dr.feedback=_o),await fetch("/api/approve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(dr)}),GA("approved")}catch{re(!1)}},zr=async()=>{re(!0);try{const $A=wS();await fetch("/api/deny",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({feedback:_o,planSave:{enabled:$A.enabled,...$A.customPath&&{customPath:$A.customPath}}})}),GA("denied")}catch{re(!1)}},Ts=async()=>{re(!0);try{await fetch("/api/feedback",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({feedback:_o,annotations:hi})}),GA("denied")}catch{re(!1)}};nA.useEffect(()=>{const $A=Oe=>{if(Oe.key!=="Enter"||!(Oe.metaKey||Oe.ctrlKey))return;const et=Oe.target?.tagName;if(et==="INPUT"||et==="TEXTAREA"||l||C||u||Q||p||zA||Ae||oe||XA||!j||Ve.isActive)return;if(Oe.preventDefault(),EA){Ts();return}const dt=Ve.getDocAnnotations(),Ii=Array.from(dt.values()).some(Cr=>Cr.annotations.length>0||Cr.globalAttachments.length>0);if(hi.length===0&&mi.length===0&&!Ii){if(_==="opencode"){const Cr=Ht();if(Cr){S(Cr),y(!0);return}}Pi()}else zr()};return window.addEventListener("keydown",$A),()=>window.removeEventListener("keydown",$A)},[l,C,u,Q,p,zA,Ae,oe,XA,j,Ve.isActive,t.length,An.length,EA,_,Ht]);const Cn=$A=>{i(Oe=>[...Oe,$A]),n($A.id),R(!0)},jo=Ur.useCallback($A=>{n($A),$A&&window.innerWidth<768&&R(!0)},[]),Mr=$A=>{De.current?.removeHighlight($A),i(Oe=>Oe.filter(et=>et.id!==$A)),r===$A&&n(null)},OC=pHA({blocks:a,annotations:t,addAnnotation:Cn,removeAnnotation:Mr}),UC=$A=>{const Oe=hi.find(et=>et.id===$A);if(Oe?.source&&An.some(et=>et.id===$A)){os($A),r===$A&&n(null);return}$A.startsWith("ann-checkbox-")&&Oe&&OC.revertOverride(Oe.blockId),Mr($A)},zu=($A,Oe)=>{if(hi.find(dt=>dt.id===$A)?.source&&An.some(dt=>dt.id===$A)){fa($A,Oe);return}i(dt=>dt.map(Ii=>Ii.id===$A?{...Ii,...Oe}:Ii))},vm=($A,Oe)=>{i(et=>et.map(dt=>dt.author===$A?{...dt,author:Oe}:dt))},jR=$A=>{rA(Oe=>[...Oe,$A])},_R=$A=>{rA(Oe=>Oe.filter(et=>et.path!==$A))},XR=$A=>{},_o=nA.useMemo(()=>{const $A=Ve.getDocAnnotations(),Oe=Array.from($A.values()).some(Cr=>Cr.annotations.length>0||Cr.globalAttachments.length>0),et=hi.length>0||aA.length>0,dt=mi.length>0;if(!et&&!Oe&&!dt)return"User reviewed the document and has no feedback.";let Ii=et?HmA(a,hi,aA,wA==="message"?"Message Feedback":wA==="folder"?"Folder Feedback":wA==="file"?"File Feedback":"Plan Feedback",wA??"plan"):"";return Oe&&(Ii+=PmA($A)),dt&&(Ii+=JmA(mi)),Ii},[a,hi,aA,Ve.getDocAnnotations,mi]),qu=Ur.useMemo(()=>V8A(),[]),Wu=Ur.useCallback(async $A=>{if(!(!qu||XA||!Yt)){re(!0);try{const Oe=await Z8A($A,qu,Yt);Oe&&(mA(Oe),setTimeout(()=>mA(null),4e3),Oe.type==="success"&&GA($A===Mw.Approve?"approved":"denied"))}finally{re(!1)}}},[qu,XA,Yt]),$R=Ur.useCallback(()=>Wu(Mw.Approve),[Wu]),AN=Ur.useCallback(()=>Wu(Mw.Feedback),[Wu]),Sm=()=>{const $A=new Blob([_o],{type:"text/plain"}),Oe=URL.createObjectURL($A),et=document.createElement("a");et.href=Oe,et.download="annotations.md",et.click(),URL.revokeObjectURL(Oe),mA({type:"success",message:"Downloaded annotations"}),setTimeout(()=>mA(null),3e3)},Ll=async $A=>{const Oe={};if($A==="obsidian"){const dt=xI(),Ii=LI(dt);Ii&&(Oe.obsidian={vaultPath:Ii,folder:dt.folder||"plannotator",plan:e,...dt.filenameFormat&&{filenameFormat:dt.filenameFormat},...dt.filenameSeparator&&dt.filenameSeparator!=="space"&&{filenameSeparator:dt.filenameSeparator}})}if($A==="bear"){const dt=DE();Oe.bear={plan:e,customTags:dt.customTags,tagPosition:dt.tagPosition}}if($A==="octarine"){const dt=Bd();Oe.octarine={plan:e,workspace:dt.workspace,folder:dt.folder||"plannotator"}}const et=$A==="obsidian"?"Obsidian":$A==="bear"?"Bear":"Octarine";try{const Cr=(await(await fetch("/api/save-notes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Oe)})).json()).results?.[$A];Cr?.success?mA({type:"success",message:`Saved to ${et}`}):mA({type:"error",message:Cr?.error||"Save failed"})}catch{mA({type:"error",message:"Save failed"})}setTimeout(()=>mA(null),3e3)},eN=async()=>{const $A=_9A(window.location.origin);try{await navigator.clipboard.writeText($A),mA({type:"success",message:"Agent instructions copied"})}catch{mA({type:"error",message:"Failed to copy"})}setTimeout(()=>mA(null),3e3)},tN=async()=>{try{await navigator.clipboard.writeText(Yt),mA({type:"success",message:"Share link copied"})}catch{mA({type:"error",message:"Failed to copy"})}setTimeout(()=>mA(null),3e3)};nA.useEffect(()=>{const $A=Oe=>{if(Oe.key!=="s"||!(Oe.metaKey||Oe.ctrlKey))return;const et=Oe.target?.tagName;if(et==="INPUT"||et==="TEXTAREA"||l||u||Q||p||zA||Ae||oe||!j)return;Oe.preventDefault();const dt=uIA(),Ii=vZ(),Cr=DE().enabled,dr=tD();dt==="download"?Sm():dt==="obsidian"&&Ii?Ll("obsidian"):dt==="bear"&&Cr?Ll("bear"):dt==="octarine"&&dr?Ll("octarine"):(jA("notes"),I(!0))};return window.addEventListener("keydown",$A),()=>window.removeEventListener("keydown",$A)},[l,u,Q,p,zA,Ae,oe,j,e,_o]),nA.useEffect(()=>{const $A=Oe=>{if(Oe.key!=="p"||!(Oe.metaKey||Oe.ctrlKey))return;const et=Oe.target?.tagName;et==="INPUT"||et==="TEXTAREA"||l||u||Q||p||zA||Ae||oe||(Oe.preventDefault(),window.print())};return window.addEventListener("keydown",$A),()=>window.removeEventListener("keydown",$A)},[l,u,Q,p,zA,Ae,oe]);const Tl=nA.useMemo(()=>KmA(_),[_]),Vu=nA.useMemo(()=>({compact:832,default:1040,wide:1280})[O.planWidth]??832,[O.planWidth]);return D.jsx(YYA,{defaultTheme:"dark",children:D.jsxs("div",{"data-print-region":"root",className:"h-screen flex flex-col bg-background overflow-hidden",children:[D.jsxs("header",{className:"h-12 flex items-center justify-between px-2 md:px-4 border-b border-border/50 bg-card/50 backdrop-blur-xl sticky top-0 z-[50]",children:[D.jsx("div",{className:"flex items-center gap-2 md:gap-3",children:D.jsx("a",{href:"https://plannotator.ai",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1.5 md:gap-2 hover:opacity-80 transition-opacity",children:D.jsx("span",{className:"text-sm font-semibold tracking-tight",children:"Plannotator"})})}),D.jsxs("div",{className:"flex items-center gap-1 md:gap-2",children:[qu&&!j&&yt&&D.jsxs(D.Fragment,{children:[D.jsx("div",{className:"w-px h-5 bg-border/50 mx-1 hidden md:block"}),D.jsx(OZ,{onClick:AN,disabled:XA||!Yt,isLoading:XA,title:"Send feedback to bot"}),D.jsx(UZ,{onClick:$R,disabled:XA||!Yt,isLoading:XA,title:"Approve design and notify bot"})]}),j&&!Ve.isActive&&At.archiveMode&&D.jsxs(D.Fragment,{children:[D.jsxs("button",{onClick:At.copy,className:"px-2.5 py-1 rounded-md text-xs font-medium transition-all bg-muted text-foreground hover:bg-muted/80 border border-border",title:"Copy plan content",children:[D.jsx("span",{className:"hidden md:inline",children:"Copy"}),D.jsx("svg",{className:"w-4 h-4 md:hidden",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})})]}),D.jsx("button",{onClick:At.done,className:"px-2.5 py-1 rounded-md text-xs font-medium transition-all bg-success text-success-foreground hover:opacity-90",title:"Close archive",children:"Done"})]}),j&&(!Ve.isActive||EA)&&!At.archiveMode&&D.jsxs(D.Fragment,{children:[D.jsx(OZ,{onClick:()=>{if(EA){Ts();return}const $A=Ve.getDocAnnotations(),Oe=Array.from($A.values()).some(et=>et.annotations.length>0||et.globalAttachments.length>0);hi.length===0&&mi.length===0&&!Oe?d(!0):zr()},disabled:XA,isLoading:XA,label:EA?hi.length>0||mi.length>0||Ve.docAnnotationCount>0?"Send Annotations":"Done":"Send Feedback",title:EA?hi.length>0||mi.length>0||Ve.docAnnotationCount>0?"Send Annotations":"Done":"Send Feedback"}),!EA&&D.jsxs("div",{className:"relative group/approve",children:[D.jsx(UZ,{onClick:()=>{if(_==="claude-code"&&hi.length>0){f(!0);return}if(_==="opencode"){const $A=Ht();if($A){S($A),y(!0);return}}Pi()},disabled:XA,isLoading:XA,dimmed:(_==="claude-code"||_==="gemini-cli")&&hi.length>0}),(_==="claude-code"||_==="gemini-cli")&&hi.length>0&&D.jsxs("div",{className:"absolute top-full right-0 mt-2 px-3 py-2 bg-popover border border-border rounded-lg shadow-xl text-xs text-foreground w-56 text-center opacity-0 invisible group-hover/approve:opacity-100 group-hover/approve:visible transition-all pointer-events-none z-50",children:[D.jsx("div",{className:"absolute bottom-full right-4 border-4 border-transparent border-b-border"}),D.jsx("div",{className:"absolute bottom-full right-4 mt-px border-4 border-transparent border-b-popover"}),Tl," doesn't support feedback on approval. Your annotations won't be seen."]})]}),D.jsx("div",{className:"w-px h-5 bg-border/50 mx-1 hidden md:block"})]}),D.jsx("button",{onClick:()=>R(!k),className:`p-1.5 rounded-md text-xs font-medium transition-all ${k?"bg-primary/15 text-primary":"text-muted-foreground hover:text-foreground hover:bg-muted"}`,title:k?"Hide annotations":"Show annotations",children:D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z"})})}),D.jsx("div",{className:"hidden",children:D.jsx(K8A,{taterMode:G,onTaterModeChange:Pt,onIdentityChange:vm,origin:_,onUIPreferencesChange:P,externalOpen:b,onExternalClose:()=>N(!1),gitUser:eA})}),D.jsx(f9A,{appVersion:"0.17.2",hasNewSettingsHints:T,onOpenSettings:()=>{T&&(fIA(),L(!1)),N(!0)},onOpenExport:()=>{jA(void 0),I(!0)},onCopyAgentInstructions:eN,onDownloadAnnotations:Sm,onPrint:()=>window.print(),onCopyShareLink:tN,onOpenImport:()=>E(!0),onSaveToObsidian:()=>Ll("obsidian"),onSaveToBear:()=>Ll("bear"),onSaveToOctarine:()=>Ll("octarine"),sharingEnabled:BA,isApiMode:j,agentInstructionsEnabled:j&&!At.archiveMode&&!EA,obsidianConfigured:vZ(),bearConfigured:DE().enabled,octarineConfigured:tD()})]})]}),Ve.error&&D.jsxs("div",{className:"bg-destructive/10 border-b border-destructive/20 px-4 py-2 flex items-center gap-2 flex-shrink-0",children:[D.jsx("span",{className:"text-xs text-destructive",children:Ve.error}),D.jsx("button",{onClick:Ve.dismissError,className:"ml-auto text-xs text-destructive/60 hover:text-destructive",children:"dismiss"})]}),D.jsx(zlA.Provider,{value:Ke,children:D.jsxs("div",{"data-print-region":"content",className:`flex-1 flex overflow-hidden relative z-0 ${$e?"select-none":""}`,children:[G&&D.jsx(e8A,{}),!tt.isOpen&&D.jsx($9A,{activeTab:tt.activeTab,onToggleTab:tt.toggleTab,hasDiff:Et.hasPreviousVersion,showFilesTab:Lt&&!At.archiveMode,showVaultTab:gi,hasFileAnnotations:ke,hasVaultAnnotations:be,className:"hidden lg:flex absolute left-0 top-0 z-10"}),tt.isOpen&&D.jsxs(D.Fragment,{children:[D.jsx(cHA,{activeTab:tt.activeTab,onTabChange:$A=>{tt.toggleTab($A),$A==="archive"&&!At.archiveMode&&At.fetchPlans()},onClose:tt.close,width:bt.width,blocks:a,annotations:t,activeSection:Ls,onTocNavigate:XR,linkedDocFilepath:Ve.filepath,onLinkedDocBack:Ve.isActive?zi:void 0,backLabel:Fa,showFilesTab:Lt&&!At.archiveMode,fileAnnotationCounts:xe,highlightedFiles:gt,fileBrowser:Ye,onFilesSelectFile:ut,onFilesFetchAll:()=>Ye.fetchAll(Xt),showVaultTab:gi&&!At.archiveMode,vaultPath:Fe,vaultBrowser:Dt,vaultAnnotationCounts:ye,vaultHighlightedFiles:Kt,onVaultSelectFile:Re,onVaultFetchTree:ss,hasFileAnnotations:ke,hasVaultAnnotations:be,versionInfo:Ce,versions:Et.versions,selectedBaseVersion:Et.diffBaseVersion,onSelectBaseVersion:Et.selectBaseVersion,isPlanDiffActive:KA,hasPreviousVersion:Et.hasPreviousVersion,onActivatePlanDiff:()=>UA(!0),isLoadingVersions:Et.isLoadingVersions,isSelectingVersion:Et.isSelectingVersion,fetchingVersion:Et.fetchingVersion,onFetchVersions:Et.fetchVersions,showArchiveTab:j&&!EA,archivePlans:At.plans,selectedArchiveFile:At.selectedFile,onArchiveSelect:At.select,isLoadingArchive:At.isLoading}),D.jsx(qZ,{...bt.handleProps,className:"hidden lg:block",side:"left"})]}),D.jsxs(zp,{element:"main",className:`flex-1 min-w-0 bg-grid ${tt.isOpen?"":"lg:pl-[30px]"}`,"data-print-region":"document",onViewportReady:Ue,children:[D.jsx(WQ,{isOpen:!!_A,onClose:fe,onConfirm:Xe,title:"Draft Recovered",message:_A?`Found ${_A.count} annotation${_A.count!==1?"s":""} from ${_A.timeAgo}. Would you like to restore them?`:"",confirmText:"Restore",cancelText:"Dismiss",showCancel:!0}),D.jsxs("div",{ref:q,className:"min-h-full flex flex-col items-center px-2 py-3 md:px-10 md:py-8 xl:px-16 relative z-10",children:[!KA&&!At.archiveMode&&!Ve.isActive&&O.stickyActionsEnabled&&D.jsx(jYA,{inputMethod:x,onInputMethodChange:Ai,mode:K,onModeChange:ti,taterMode:G,repoInfo:kA,planDiffStats:Et.diffStats,isPlanDiffActive:KA,hasPreviousVersion:Et.hasPreviousVersion,onPlanDiffToggle:()=>UA(!KA),archiveInfo:At.currentInfo,maxWidth:Vu,remountToken:Ve.isActive?`doc:${Ve.filepath}`:"plan"}),!KA&&!At.archiveMode&&D.jsx("div",{"data-print-hide":!0,className:"w-full mb-3 md:mb-4 flex items-center justify-start",style:{maxWidth:Vu},children:D.jsx(eIA,{inputMethod:x,onInputMethodChange:Ai,mode:K,onModeChange:ti,taterMode:G})}),Et.diffBlocks&&Et.diffStats&&D.jsx("div",{className:"w-full flex justify-center",style:{display:KA?void 0:"none"},children:D.jsx(QHA,{diffBlocks:Et.diffBlocks,diffStats:Et.diffStats,diffMode:se,onDiffModeChange:Ne,onPlanDiffToggle:()=>UA(!1),repoInfo:kA,baseVersionLabel:Et.diffBaseVersion!=null?`v${Et.diffBaseVersion}`:void 0,baseVersion:Et.diffBaseVersion??void 0,maxWidth:Vu,annotations:cr,onAddAnnotation:Cn,onSelectAnnotation:jo,selectedAnnotationId:r,mode:K})}),wA==="folder"&&!e&&!Ve.isActive&&D.jsx("div",{className:"w-full flex justify-center",children:D.jsxs("div",{className:"w-full max-w-3xl p-12 text-center text-muted-foreground",children:[D.jsx("p",{className:"text-lg font-medium mb-2",children:"Select a file to annotate"}),D.jsx("p",{className:"text-sm",children:"Pick a markdown file from the sidebar to begin."})]})}),D.jsx("div",{className:"w-full flex justify-center",style:{display:KA&&Et.diffBlocks||wA==="folder"&&!e&&!Ve.isActive?"none":void 0},children:D.jsx(u5A,{ref:De,blocks:a,markdown:e,frontmatter:o,annotations:Qt,onAddAnnotation:Cn,onSelectAnnotation:jo,selectedAnnotationId:r,mode:K,inputMethod:x,taterMode:G,globalAttachments:aA,onAddGlobalAttachment:jR,onRemoveGlobalAttachment:_R,repoInfo:kA,stickyActions:O.stickyActionsEnabled,planDiffStats:Ve.isActive?null:Et.diffStats,isPlanDiffActive:KA,onPlanDiffToggle:()=>UA(!KA),hasPreviousVersion:!Ve.isActive&&Et.hasPreviousVersion,showDemoBadge:!j&&!Ni&&!yt,maxWidth:Vu,onOpenLinkedDoc:Si,linkedDocInfo:Ve.isActive?{filepath:Ve.filepath,onBack:zi,label:Dt.activeFile?"Vault File":Ye.activeFile?"File":void 0,backLabel:Fa}:null,imageBaseDir:PA,copyLabel:wA==="message"?"Copy message":wA==="file"||wA==="folder"?"Copy file":void 0,archiveInfo:At.currentInfo,onToggleCheckbox:OC.toggle,checkboxOverrides:OC.overrides,actionsLabelMode:Y},Ve.isActive?`doc:${Ve.filepath}`:"plan")})]})]}),k&&D.jsx(qZ,{...je.handleProps,className:"hidden md:block",side:"right"}),D.jsx(NYA,{isOpen:k,blocks:a,annotations:hi,selectedId:r,onSelect:n,onDelete:UC,onEdit:zu,sharingEnabled:BA,width:je.width,editorAnnotations:mi,onDeleteEditorAnnotation:gr,onClose:()=>R(!1),onQuickCopy:async()=>{await navigator.clipboard.writeText(DiA(_o))},onShare:Yt?()=>{R(!1),jA("share"),I(!0)}:void 0,otherFileAnnotations:me,onOtherFileAnnotationsClick:FA})]})}),D.jsx(UYA,{isOpen:l,onClose:()=>{I(!1),jA(void 0)},shareUrl:Yt,shareUrlSize:en,shortShareUrl:Ir,isGeneratingShortUrl:ea,shortUrlError:In,onGenerateShortUrl:$,annotationsOutput:_o,annotationCount:hi.length,taterSprite:G?D.jsx(v5,{}):void 0,sharingEnabled:BA,markdown:e,isApiMode:j,initialTab:YA}),D.jsx(KYA,{isOpen:C,onClose:()=>E(!1),onImport:CA,shareBaseUrl:Z}),D.jsx(WQ,{isOpen:u,onClose:()=>d(!1),title:"Add Annotations First",message:`To provide feedback, select text in the plan and add annotations. ${Tl} will use your annotations to revise the plan.`,variant:"info"}),D.jsx(WQ,{isOpen:Q,onClose:()=>f(!1),onConfirm:()=>{f(!1),Pi()},title:"Annotations Won't Be Sent",message:D.jsxs(D.Fragment,{children:[Tl," doesn't yet support feedback on approval. Your ",hi.length," annotation",hi.length!==1?"s":""," will be lost."]}),subMessage:D.jsxs(D.Fragment,{children:["To send feedback, use ",D.jsx("strong",{children:"Send Feedback"})," instead.",D.jsx("br",{}),D.jsx("br",{}),"Want this feature? Upvote these issues:",D.jsx("br",{}),D.jsx("a",{href:"https://github.com/anthropics/claude-code/issues/16001",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"#16001"})," · ",D.jsx("a",{href:"https://github.com/anthropics/claude-code/issues/15755",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"#15755"})]}),confirmText:"Approve Anyway",cancelText:"Cancel",variant:"warning",showCancel:!0}),D.jsx(WQ,{isOpen:p,onClose:()=>y(!1),onConfirm:()=>{y(!1),Pi()},title:"Agent Not Found",message:w,subMessage:D.jsxs(D.Fragment,{children:["You can change the agent in ",D.jsx("strong",{children:"Settings"}),", or approve anyway and OpenCode will use the default agent."]}),confirmText:"Approve Anyway",cancelText:"Cancel",variant:"warning",showCancel:!0}),D.jsx(WQ,{isOpen:!!DA&&!j,onClose:OA,title:"Shared Plan Could Not Be Loaded",message:DA,subMessage:"You are viewing a demo plan. This is sample content — it is not your data or anyone else's.",variant:"warning"}),ae&&D.jsx("div",{className:`fixed top-16 right-4 z-50 px-3 py-2 rounded-lg text-xs font-medium shadow-lg transition-opacity ${ae.type==="success"?"bg-success/15 text-success border border-success/30":"bg-destructive/15 text-destructive border border-destructive/30"}`,children:ae.message}),D.jsx(A9A,{submitted:oe,title:At.archiveMode?"Archive Closed":oe==="approved"?"Plan Approved":EA?"Annotations Sent":"Feedback Sent",subtitle:At.archiveMode?"You can reopen with plannotator archive.":oe==="approved"?`${Tl} will proceed with the implementation.`:EA?`${Tl} will address your annotations on the ${wA==="message"?"message":wA==="folder"?"files":"file"}.`:`${Tl} will revise the plan based on your annotations.`,agentLabel:Tl}),D.jsx(a9A,{origin:_,isWSL:tA}),D.jsx(FiA,{isOpen:!!Ae,imageSrc:Ae?.blobUrl??"",initialName:Ae?.initialName,onAccept:Jn,onClose:zn}),D.jsx(R9A,{isOpen:zA,onComplete:$A=>{ee($A),le(!1)}})]})})},YIA=document.getElementById("root");if(!YIA)throw new Error("Could not find root element to mount to");const yHA=UmA.createRoot(YIA);yHA.render(D.jsx(Ur.StrictMode,{children:D.jsx(mHA,{})}));class Bs{constructor(A,t,i){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=A,this.start=t,this.end=i}static range(A,t){return t?!A||!A.loc||!t.loc||A.loc.lexer!==t.loc.lexer?null:new Bs(A.loc.lexer,A.loc.start,t.loc.end):A&&A.loc}}class $s{constructor(A,t){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=A,this.loc=t}range(A,t){return new $s(t,Bs.range(this,A))}}class _e{constructor(A,t){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var i="KaTeX parse error: "+A,r,n,a=t&&t.loc;if(a&&a.start<=a.end){var s=a.lexer.input;r=a.start,n=a.end,r===s.length?i+=" at end of input: ":i+=" at position "+(r+1)+": ";var o=s.slice(r,n).replace(/[^]/g,"$&̲"),g;r>15?g="…"+s.slice(r-15,r):g=s.slice(0,r);var l;n+15<s.length?l=s.slice(n,n+15)+"…":l=s.slice(n),i+=g+o+l}var I=new Error(i);return I.name="ParseError",I.__proto__=_e.prototype,I.position=r,r!=null&&n!=null&&(I.length=n-r),I.rawMessage=A,I}}_e.prototype.__proto__=Error.prototype;var DHA=function(A,t){return A===void 0?t:A},wHA=/([A-Z])/g,vHA=function(A){return A.replace(wHA,"-$1").toLowerCase()},SHA={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"},bHA=/[&><"']/g;function RHA(e){return String(e).replace(bHA,A=>SHA[A])}var HIA=function e(A){return A.type==="ordgroup"||A.type==="color"?A.body.length===1?e(A.body[0]):A:A.type==="font"?e(A.body):A},NHA=function(A){var t=HIA(A);return t.type==="mathord"||t.type==="textord"||t.type==="atom"},MHA=function(A){if(!A)throw new Error("Expected non-null, but got "+String(A));return A},kHA=function(A){var t=/^[\x00-\x20]*([^\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(A);return t?t[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():"_relative"},Ui={deflt:DHA,escape:RHA,hyphenate:vHA,getBaseElem:HIA,isCharacterBox:NHA,protocolFromUrl:kHA},p0={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format <type>"},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color <color>",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro <def>",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,A)=>(A.push(e),A)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness <size>",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size <n>",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand <n>",cliProcessor:e=>e==="Infinity"?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function xHA(e){if(e.default)return e.default;var A=e.type,t=Array.isArray(A)?A[0]:A;if(typeof t!="string")return t.enum[0];switch(t){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class M5{constructor(A){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,A=A||{};for(var t in p0)if(p0.hasOwnProperty(t)){var i=p0[t];this[t]=A[t]!==void 0?i.processor?i.processor(A[t]):A[t]:xHA(i)}}reportNonstrict(A,t,i){var r=this.strict;if(typeof r=="function"&&(r=r(A,t,i)),!(!r||r==="ignore")){if(r===!0||r==="error")throw new _e("LaTeX-incompatible input and strict mode is set to 'error': "+(t+" ["+A+"]"),i);r==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" ["+A+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+r+"': "+t+" ["+A+"]"))}}useStrictBehavior(A,t,i){var r=this.strict;if(typeof r=="function")try{r=r(A,t,i)}catch{r="error"}return!r||r==="ignore"?!1:r===!0||r==="error"?!0:r==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" ["+A+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+r+"': "+t+" ["+A+"]")),!1)}isTrusted(A){if(A.url&&!A.protocol){var t=Ui.protocolFromUrl(A.url);if(t==null)return!1;A.protocol=t}var i=typeof this.trust=="function"?this.trust(A):this.trust;return!!i}}class fI{constructor(A,t,i){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=A,this.size=t,this.cramped=i}sup(){return el[LHA[this.id]]}sub(){return el[THA[this.id]]}fracNum(){return el[FHA[this.id]]}fracDen(){return el[GHA[this.id]]}cramp(){return el[OHA[this.id]]}text(){return el[UHA[this.id]]}isTight(){return this.size>=2}}var k5=0,bS=1,hd=2,Dc=3,tp=4,Lo=5,jd=6,Va=7,el=[new fI(k5,0,!1),new fI(bS,0,!0),new fI(hd,1,!1),new fI(Dc,1,!0),new fI(tp,2,!1),new fI(Lo,2,!0),new fI(jd,3,!1),new fI(Va,3,!0)],LHA=[tp,Lo,tp,Lo,jd,Va,jd,Va],THA=[Lo,Lo,Lo,Lo,Va,Va,Va,Va],FHA=[hd,Dc,tp,Lo,jd,Va,jd,Va],GHA=[Dc,Dc,Lo,Lo,Va,Va,Va,Va],OHA=[bS,bS,Dc,Dc,Lo,Lo,Va,Va],UHA=[k5,bS,hd,Dc,hd,Dc,hd,Dc],Ot={DISPLAY:el[k5],TEXT:el[hd],SCRIPT:el[tp],SCRIPTSCRIPT:el[jd]},VO=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function KHA(e){for(var A=0;A<VO.length;A++)for(var t=VO[A],i=0;i<t.blocks.length;i++){var r=t.blocks[i];if(e>=r[0]&&e<=r[1])return t.name}return null}var kw=[];VO.forEach(e=>e.blocks.forEach(A=>kw.push(...A)));function PIA(e){for(var A=0;A<kw.length;A+=2)if(e>=kw[A]&&e<=kw[A+1])return!0;return!1}var RB=80,YHA=function(A,t){return"M95,"+(622+A+t)+`
980
+ `;function pHA({blocks:e,annotations:A,addAnnotation:t,removeAnnotation:i}){const[r,n]=nA.useState(new Map),a=nA.useRef(e);a.current=e;const s=nA.useRef(A);s.current=A,nA.useEffect(()=>{if(r.size===0)return;const l=new Set(e.map(C=>C.id)),I=[...r.keys()].filter(C=>!l.has(C));I.length>0&&n(C=>{const E=new Map(C);return I.forEach(u=>E.delete(u)),E})},[e]);const o=nA.useCallback((l,I)=>{const C=a.current,E=s.current,u=C.find(Q=>Q.id===l);if(u&&I===u.checked)n(f=>{const p=new Map(f);return p.delete(l),p}),E.filter(f=>f.blockId===l&&f.id.startsWith("ann-checkbox-")).forEach(f=>i(f.id));else if(E.filter(f=>f.blockId===l&&f.id.startsWith("ann-checkbox-")).forEach(f=>i(f.id)),n(f=>{const p=new Map(f);return p.set(l,I),p}),u){const f=C.indexOf(u);let p="";for(let k=f-1;k>=0;k--)if(C[k].type==="heading"){p=C[k].content;break}const y=I?"Mark as completed":"Mark as not completed",w=p?` (under "${p}")`:` (line ${u.startLine})`,S={id:`ann-checkbox-${l}-${Date.now()}`,blockId:l,startOffset:0,endOffset:u.content.length,type:oi.COMMENT,text:`${y}${w}: ${u.content}`,originalText:u.content,createdA:Date.now()};t(S)}},[t,i]),g=nA.useCallback(l=>{n(I=>{const C=new Map(I);return C.delete(l),C})},[]);return{overrides:r,toggle:o,revertOverride:g}}const mHA=()=>{const[e,A]=nA.useState(fHA),[t,i]=nA.useState([]),[r,n]=nA.useState(null),[a,s]=nA.useState([]),[o,g]=nA.useState(null),[l,I]=nA.useState(!1),[C,E]=nA.useState(!1),[u,d]=nA.useState(!1),[Q,f]=nA.useState(!1),[p,y]=nA.useState(!1),[w,S]=nA.useState(""),[k,R]=nA.useState(()=>window.innerWidth>=768),[b,N]=nA.useState(!1),[T,L]=nA.useState(()=>QIA()),[K,H]=nA.useState(o9A),[x,U]=nA.useState(c9A),[G,F]=nA.useState(()=>Pe.getItem("plannotator-tater-mode")==="true"),[O,P]=nA.useState(()=>JO()),q=nA.useRef(null),[Y,z]=nA.useState("full");nA.useLayoutEffect(()=>{const $A=q.current;if(!$A)return;const Oe=dt=>dt>=800?"full":dt>=680?"short":"icon";z(Oe($A.getBoundingClientRect().width));const et=new ResizeObserver(([dt])=>{const Ii=Oe(dt.contentRect.width);z(Cr=>Cr===Ii?Cr:Ii)});return et.observe($A),()=>et.disconnect()},[]);const[j,X]=nA.useState(!1),[_,gA]=nA.useState(null),[eA,dA]=nA.useState(),[tA,oA]=nA.useState(!1),[aA,rA]=nA.useState([]),[EA,cA]=nA.useState(!1),[wA,uA]=nA.useState(null),[PA,sA]=nA.useState(void 0),[te,SA]=nA.useState(!0),[XA,re]=nA.useState(!1),[oe,GA]=nA.useState(null),[Ae,HA]=nA.useState(null),[zA,le]=nA.useState(!1),[MA,ee]=nA.useState("bypassPermissions"),[BA,vA]=nA.useState(!0),[Z,yA]=nA.useState(void 0),[fA,xA]=nA.useState(void 0),[kA,hA]=nA.useState(null),[TA,NA]=nA.useState(null);nA.useEffect(()=>{document.title=kA?`${kA.display} · Plannotator`:"Plannotator"},[kA]);const[YA,jA]=nA.useState(),[ae,mA]=nA.useState(null),[KA,UA]=nA.useState(!1),[se,Ne]=nA.useState("clean"),[ve,iA]=nA.useState(null),[Ce,ce]=nA.useState(null),De=nA.useRef(null),{ref:Se,viewport:Ke,onViewportReady:Ue}=d9A();B9A();const je=zZ({storageKey:"plannotator-panel-width"}),bt=zZ({storageKey:"plannotator-toc-width",defaultWidth:240,minWidth:160,maxWidth:400,side:"left"}),$e=je.isDragging||bt.isDragging,tt=N9A(JO().tocEnabled);nA.useEffect(()=>{O.tocEnabled?tt.open("toc"):tt.close()},[O.tocEnabled]),nA.useEffect(()=>{tt.activeTab==="toc"&&KA&&UA(!1)},[tt.activeTab]),nA.useEffect(()=>{if(!KA)return;const $A=Oe=>{Oe.key==="Escape"&&UA(!1)};return document.addEventListener("keydown",$A),()=>document.removeEventListener("keydown",$A)},[KA]);const Et=G9A(e,ve,Ce),Ve=O9A({markdown:e,annotations:t,selectedAnnotationId:r,globalAttachments:aA,setMarkdown:A,setAnnotations:i,setSelectedAnnotationId:n,setGlobalAttachments:rA,viewerRef:De,sidebar:tt}),At=J9A({markdown:e,viewerRef:De,linkedDocHook:Ve,setMarkdown:A,setAnnotations:i,setSelectedAnnotationId:n,setSubmitted:GA}),Dt=U9A(),gi=nA.useMemo(()=>TYA(),[O]),Fe=nA.useMemo(()=>{if(!gi)return"";const $A=xI();return LI($A)},[gi,O]);nA.useEffect(()=>{gi||Dt.setActiveFile(null)},[gi]),nA.useEffect(()=>{tt.activeTab==="vault"&&gi&&Fe&&Dt.tree.length===0&&!Dt.isLoading&&Dt.fetchTree(Fe)},[tt.activeTab,gi,Fe]);const WA=Ur.useCallback($A=>Oe=>`/api/reference/obsidian/doc?vaultPath=${encodeURIComponent($A)}&path=${encodeURIComponent(Oe)}`,[]),Re=Ur.useCallback($A=>{Ve.open($A,WA(Fe)),Dt.setActiveFile($A)},[Fe,Ve,Dt,WA]),Ye=X9A(),Lt=nA.useMemo(()=>!!TA||GZ(),[TA,O]),Xt=nA.useMemo(()=>{const $A=TA?[TA]:[],Oe=GZ()?R5().directories:[];return[...new Set([...$A,...Oe])]},[TA,O]);nA.useEffect(()=>{Lt||Ye.setActiveFile(null)},[Lt]),nA.useEffect(()=>{if(tt.activeTab==="files"&&Lt&&Xt.length>0){const $A=Ye.dirs.map(et=>et.path);(Xt.length!==$A.length||Xt.some(et=>!$A.includes(et)))&&Ye.fetchAll(Xt)}},[tt.activeTab,Lt,Xt]);const ut=Ur.useCallback(($A,Oe)=>{const et=dt=>`/api/doc?path=${encodeURIComponent(dt)}&base=${encodeURIComponent(Oe)}`;Ve.open($A,et,"files"),Ye.setActiveFile($A),Dt.setActiveFile(null)},[Ve,Ye]),Si=Ur.useCallback($A=>{if(Dt.activeFile&&Fe)Ve.open($A,WA(Fe));else if(Ye.activeFile&&Ye.activeDirPath){const Oe=Ve.filepath?.replace(/\/[^/]+$/,"")||Ye.activeDirPath;Ve.open($A,et=>`/api/doc?path=${encodeURIComponent(et)}&base=${encodeURIComponent(Oe)}`)}else{const Oe=Ve.filepath?Ve.filepath.replace(/\/[^/]+$/,""):PA;Oe?Ve.open($A,et=>`/api/doc?path=${encodeURIComponent(et)}&base=${encodeURIComponent(Oe)}`):Ve.open($A)}},[Dt.activeFile,Fe,Ye.activeFile,Ye.activeDirPath,Ve,WA,PA]),zi=Ur.useCallback(()=>{Ve.back(),Dt.setActiveFile(null),Ye.setActiveFile(null),At.clearSelection()},[Ve,Dt,Ye,At]),ri=nA.useMemo(()=>{const $A=new Map;for(const[Oe,et]of Ve.getDocAnnotations()){const dt=et.annotations.length+et.globalAttachments.length;dt>0&&$A.set(Oe,dt)}return $A},[Ve.getDocAnnotations,t,aA]),xe=nA.useMemo(()=>{if(Xt.length===0)return ri;const $A=new Map;for(const[Oe,et]of ri)Xt.some(dt=>Oe.startsWith(dt+"/"))&&$A.set(Oe,et);return $A},[ri,Xt]),ye=nA.useMemo(()=>{if(!Fe)return new Map;const $A=Fe.endsWith("/")?Fe:Fe+"/",Oe=new Map;for(const[et,dt]of ri)et.startsWith($A)&&Oe.set(et.slice($A.length),dt);return Oe},[ri,Fe]),ke=xe.size>0,be=ye.size>0,me=nA.useMemo(()=>{const $A=Ve.filepath;let Oe=0,et=0;for(const[dt,Ii]of ri)dt!==$A&&(Oe+=Ii,et++);return Oe>0?{count:Oe,files:et}:void 0},[ri,Ve.filepath]),[gt,LA]=nA.useState(),qi=Ur.useRef(),FA=Ur.useCallback(()=>{const $A=new Set(ri.keys());$A.size!==0&&((!tt.isOpen||tt.activeTab!=="files"&&tt.activeTab!=="vault")&&tt.open(be&&!ke?"vault":"files"),qi.current&&clearTimeout(qi.current),LA(void 0),requestAnimationFrame(()=>{LA($A),qi.current=setTimeout(()=>LA(void 0),1200)}))},[ri,tt,be,ke]),Kt=nA.useMemo(()=>{if(!gt||!Fe)return;const $A=Fe.endsWith("/")?Fe:Fe+"/",Oe=new Set;for(const et of gt)et.startsWith($A)&&Oe.add(et.slice($A.length));return Oe.size>0?Oe:void 0},[gt,Fe]),Fa=wA==="folder"?"file list":wA==="file"?"file":wA==="message"?"message":"plan",ss=Ur.useCallback(()=>{Dt.fetchTree(Fe)},[Dt,Fe]),Ga=nA.useMemo(()=>a.filter($A=>$A.type==="heading").length,[a]),Ls=j8A(Se,Ga,Ke),{editorAnnotations:mi,deleteEditorAnnotation:gr}=q9A(),{externalAnnotations:An,updateExternalAnnotation:fa,deleteExternalAnnotation:os}=Z9A({enabled:j}),{reset:lr}=j9A({viewerRef:De,externalAnnotations:An,enabled:j&&!Ve.isActive&&!KA,planKey:e}),hi=nA.useMemo(()=>An.length===0?t:[...t.filter(Oe=>Oe.source?!An.some(et=>et.source===Oe.source&&et.type===Oe.type&&et.originalText===Oe.originalText):!0),...An],[t,An]),cr=nA.useMemo(()=>hi.filter($A=>!!$A.diffContext),[hi]),Qt=nA.useMemo(()=>hi.filter($A=>!$A.diffContext),[hi]),{isSharedSession:yt,isLoadingShared:Ni,shareUrl:Yt,shareUrlSize:en,shortShareUrl:Ir,isGeneratingShortUrl:ea,shortUrlError:In,pendingSharedAnnotations:qe,clearPendingSharedAnnotations:W,generateShortUrl:$,importFromShareUrl:CA,shareLoadError:DA,clearShareLoadError:OA}=W8A(e,hi,aA,A,i,rA,()=>{SA(!1)},Z,fA),{draftBanner:_A,restoreDraft:Ee,dismissDraft:fe}=P9A({annotations:hi,globalAttachments:aA,isApiMode:j,isSharedSession:yt,submitted:!!oe}),Xe=Ur.useCallback(()=>{const{annotations:$A,globalAttachments:Oe}=Ee();$A.length>0&&(i($A),Oe.length>0&&rA(Oe),setTimeout(()=>{De.current?.applySharedAnnotations($A.filter(et=>!et.diffContext))},100))},[Ee]),{getAgentWarning:Ht}=BIA(_);nA.useEffect(()=>{if(qe&&qe.length>0){const $A=setTimeout(()=>{De.current?.clearAllHighlights(),De.current?.applySharedAnnotations(qe.filter(Oe=>!Oe.diffContext)),W(),lr()},100);return()=>clearTimeout($A)}},[qe,W,lr]);const Pt=$A=>{F($A),Pe.setItem("plannotator-tater-mode",String($A))},ti=$A=>{H($A),g9A($A)},Ai=$A=>{U($A),I9A($A)};u9A(x,Ai),nA.useEffect(()=>{Ni||yt||fetch("/api/plan").then($A=>{if(!$A.ok)throw new Error("Not in API mode");return $A.json()}).then($A=>{Mn.init($A.serverConfig),dA($A.serverConfig?.gitUser),$A.mode==="archive"?(A($A.plan||""),$A.archivePlans&&At.init($A.archivePlans),At.fetchPlans(),vA(!1),tt.open("archive")):$A.mode==="annotate-folder"?A(""):$A.plan&&A($A.plan),X(!0),($A.mode==="annotate"||$A.mode==="annotate-last"||$A.mode==="annotate-folder")&&cA(!0),$A.mode==="annotate-folder"&&tt.open("files"),$A.mode&&$A.mode!=="archive"&&uA($A.mode==="annotate-last"?"message":$A.mode==="annotate-folder"?"folder":"file"),$A.filePath&&sA($A.mode==="annotate-folder"?$A.filePath:$A.filePath.replace(/\/[^/]+$/,"")),$A.sharingEnabled!==void 0&&vA($A.sharingEnabled),$A.shareBaseUrl&&yA($A.shareBaseUrl),$A.pasteApiUrl&&xA($A.pasteApiUrl),$A.repoInfo&&hA($A.repoInfo),$A.projectRoot&&NA($A.projectRoot),$A.previousPlan!==void 0&&iA($A.previousPlan),$A.versionInfo&&ce($A.versionInfo),$A.origin&&(gA($A.origin),$A.origin==="claude-code"&&I8A()&&le(!0),ee(IIA().mode)),$A.isWSL&&oA(!0)}).catch(()=>{X(!1)}).finally(()=>SA(!1))},[Ni,yt]),nA.useEffect(()=>{const{frontmatter:$A}=piA(e);g($A),s(miA(e))},[e]);const wt=nA.useRef(!1),kt=nA.useRef({}),Hi=nA.useRef(null);nA.useEffect(()=>{wt.current=!1,kt.current={},Hi.current=null},[e]),nA.useEffect(()=>{if(!j||!e||yt||EA||At.archiveMode||wt.current)return;const $A={},Oe=[],et=xI();if(et.autoSave&&et.enabled){const dr=LI(et);dr&&($A.obsidian={vaultPath:dr,folder:et.folder||"plannotator",plan:e,...et.filenameFormat&&{filenameFormat:et.filenameFormat},...et.filenameSeparator&&et.filenameSeparator!=="space"&&{filenameSeparator:et.filenameSeparator}},Oe.push("Obsidian"))}const dt=DE();dt.autoSave&&dt.enabled&&($A.bear={plan:e,customTags:dt.customTags,tagPosition:dt.tagPosition},Oe.push("Bear"));const Ii=Bd();if(Ii.autoSave&&tD()&&($A.octarine={plan:e,workspace:Ii.workspace,folder:Ii.folder||"plannotator"},Oe.push("Octarine")),Oe.length===0)return;wt.current=!0;const Cr=fetch("/api/save-notes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify($A)}).then(dr=>dr.json()).then(dr=>{const Xo={...$A.obsidian?{obsidian:!!dr.results?.obsidian?.success}:{},...$A.bear?{bear:!!dr.results?.bear?.success}:{},...$A.octarine?{octarine:!!dr.results?.octarine?.success}:{}};kt.current=Xo;const KC=Oe.filter(Uh=>!dr.results?.[Uh.toLowerCase()]?.success);return KC.length===0?mA({type:"success",message:`Auto-saved to ${Oe.join(" & ")}`}):mA({type:"error",message:`Auto-save failed for ${KC.join(" & ")}`}),Xo}).catch(()=>(kt.current={},mA({type:"error",message:"Auto-save failed"}),{})).finally(()=>setTimeout(()=>mA(null),3e3));Hi.current=Cr},[j,e,yt,EA]),nA.useEffect(()=>{const $A=Oe=>{const et=Oe.clipboardData?.items;if(et){for(const dt of et)if(dt.type.startsWith("image/")){Oe.preventDefault();const Ii=dt.getAsFile();if(Ii){const Cr=f3(Ii.name,aA.map(Xo=>Xo.name)),dr=URL.createObjectURL(Ii);HA({file:Ii,blobUrl:dr,initialName:Cr})}break}}};return document.addEventListener("paste",$A),()=>document.removeEventListener("paste",$A)},[aA]);const Jn=async($A,Oe,et)=>{if(Ae)try{const dt=new FormData,Ii=Oe?new File([$A],"annotated.png",{type:"image/png"}):Ae.file;dt.append("file",Ii);const Cr=await fetch("/api/upload",{method:"POST",body:dt});if(Cr.ok){const dr=await Cr.json();rA(Xo=>[...Xo,{path:dr.path,name:et}])}}catch{}finally{URL.revokeObjectURL(Ae.blobUrl),HA(null)}},zn=()=>{Ae&&(URL.revokeObjectURL(Ae.blobUrl),HA(null))},Pi=async()=>{re(!0);try{const $A=xI(),Oe=DE(),et=Bd(),dt=S5(),Ii=wS(),Cr=Oe.autoSave&&Hi.current?await Hi.current:kt.current,dr={};_==="claude-code"&&(dr.permissionMode=MA);const Xo=o8A(dt);Xo&&(dr.agentSwitch=Xo),dr.planSave={enabled:Ii.enabled,...Ii.customPath&&{customPath:Ii.customPath}};const KC=LI($A);$A.enabled&&KC&&(dr.obsidian={vaultPath:KC,folder:$A.folder||"plannotator",plan:e,...$A.filenameFormat&&{filenameFormat:$A.filenameFormat},...$A.filenameSeparator&&$A.filenameSeparator!=="space"&&{filenameSeparator:$A.filenameSeparator}}),Oe.enabled&&!(Oe.autoSave&&Cr.bear)&&(dr.bear={plan:e,customTags:Oe.customTags,tagPosition:Oe.tagPosition}),tD()&&(dr.octarine={plan:e,workspace:et.workspace,folder:et.folder||"plannotator"});const Uh=Array.from(Ve.getDocAnnotations().values()).some(bm=>bm.annotations.length>0||bm.globalAttachments.length>0);(hi.length>0||aA.length>0||Uh||mi.length>0)&&(dr.feedback=_o),await fetch("/api/approve",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(dr)}),GA("approved")}catch{re(!1)}},zr=async()=>{re(!0);try{const $A=wS();await fetch("/api/deny",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({feedback:_o,planSave:{enabled:$A.enabled,...$A.customPath&&{customPath:$A.customPath}}})}),GA("denied")}catch{re(!1)}},Ts=async()=>{re(!0);try{await fetch("/api/feedback",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({feedback:_o,annotations:hi})}),GA("denied")}catch{re(!1)}};nA.useEffect(()=>{const $A=Oe=>{if(Oe.key!=="Enter"||!(Oe.metaKey||Oe.ctrlKey))return;const et=Oe.target?.tagName;if(et==="INPUT"||et==="TEXTAREA"||l||C||u||Q||p||zA||Ae||oe||XA||!j||Ve.isActive)return;if(Oe.preventDefault(),EA){Ts();return}const dt=Ve.getDocAnnotations(),Ii=Array.from(dt.values()).some(Cr=>Cr.annotations.length>0||Cr.globalAttachments.length>0);if(hi.length===0&&mi.length===0&&!Ii){if(_==="opencode"){const Cr=Ht();if(Cr){S(Cr),y(!0);return}}Pi()}else zr()};return window.addEventListener("keydown",$A),()=>window.removeEventListener("keydown",$A)},[l,C,u,Q,p,zA,Ae,oe,XA,j,Ve.isActive,t.length,An.length,EA,_,Ht]);const Cn=$A=>{i(Oe=>[...Oe,$A]),n($A.id),R(!0)},jo=Ur.useCallback($A=>{n($A),$A&&window.innerWidth<768&&R(!0)},[]),Mr=$A=>{De.current?.removeHighlight($A),i(Oe=>Oe.filter(et=>et.id!==$A)),r===$A&&n(null)},OC=pHA({blocks:a,annotations:t,addAnnotation:Cn,removeAnnotation:Mr}),UC=$A=>{const Oe=hi.find(et=>et.id===$A);if(Oe?.source&&An.some(et=>et.id===$A)){os($A),r===$A&&n(null);return}$A.startsWith("ann-checkbox-")&&Oe&&OC.revertOverride(Oe.blockId),Mr($A)},zu=($A,Oe)=>{if(hi.find(dt=>dt.id===$A)?.source&&An.some(dt=>dt.id===$A)){fa($A,Oe);return}i(dt=>dt.map(Ii=>Ii.id===$A?{...Ii,...Oe}:Ii))},vm=($A,Oe)=>{i(et=>et.map(dt=>dt.author===$A?{...dt,author:Oe}:dt))},jR=$A=>{rA(Oe=>[...Oe,$A])},_R=$A=>{rA(Oe=>Oe.filter(et=>et.path!==$A))},XR=$A=>{},_o=nA.useMemo(()=>{const $A=Ve.getDocAnnotations(),Oe=Array.from($A.values()).some(Cr=>Cr.annotations.length>0||Cr.globalAttachments.length>0),et=hi.length>0||aA.length>0,dt=mi.length>0;if(!et&&!Oe&&!dt)return"User reviewed the document and has no feedback.";let Ii=et?HmA(a,hi,aA,wA==="message"?"Message Feedback":wA==="folder"?"Folder Feedback":wA==="file"?"File Feedback":"Plan Feedback",wA??"plan"):"";return Oe&&(Ii+=PmA($A)),dt&&(Ii+=JmA(mi)),Ii},[a,hi,aA,Ve.getDocAnnotations,mi]),qu=Ur.useMemo(()=>V8A(),[]),Wu=Ur.useCallback(async $A=>{if(!(!qu||XA||!Yt)){re(!0);try{const Oe=await Z8A($A,qu,Yt);Oe&&(mA(Oe),setTimeout(()=>mA(null),4e3),Oe.type==="success"&&GA($A===Mw.Approve?"approved":"denied"))}finally{re(!1)}}},[qu,XA,Yt]),$R=Ur.useCallback(()=>Wu(Mw.Approve),[Wu]),AN=Ur.useCallback(()=>Wu(Mw.Feedback),[Wu]),Sm=()=>{const $A=new Blob([_o],{type:"text/plain"}),Oe=URL.createObjectURL($A),et=document.createElement("a");et.href=Oe,et.download="annotations.md",et.click(),URL.revokeObjectURL(Oe),mA({type:"success",message:"Downloaded annotations"}),setTimeout(()=>mA(null),3e3)},Ll=async $A=>{const Oe={};if($A==="obsidian"){const dt=xI(),Ii=LI(dt);Ii&&(Oe.obsidian={vaultPath:Ii,folder:dt.folder||"plannotator",plan:e,...dt.filenameFormat&&{filenameFormat:dt.filenameFormat},...dt.filenameSeparator&&dt.filenameSeparator!=="space"&&{filenameSeparator:dt.filenameSeparator}})}if($A==="bear"){const dt=DE();Oe.bear={plan:e,customTags:dt.customTags,tagPosition:dt.tagPosition}}if($A==="octarine"){const dt=Bd();Oe.octarine={plan:e,workspace:dt.workspace,folder:dt.folder||"plannotator"}}const et=$A==="obsidian"?"Obsidian":$A==="bear"?"Bear":"Octarine";try{const Cr=(await(await fetch("/api/save-notes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(Oe)})).json()).results?.[$A];Cr?.success?mA({type:"success",message:`Saved to ${et}`}):mA({type:"error",message:Cr?.error||"Save failed"})}catch{mA({type:"error",message:"Save failed"})}setTimeout(()=>mA(null),3e3)},eN=async()=>{const $A=_9A(window.location.origin);try{await navigator.clipboard.writeText($A),mA({type:"success",message:"Agent instructions copied"})}catch{mA({type:"error",message:"Failed to copy"})}setTimeout(()=>mA(null),3e3)},tN=async()=>{try{await navigator.clipboard.writeText(Yt),mA({type:"success",message:"Share link copied"})}catch{mA({type:"error",message:"Failed to copy"})}setTimeout(()=>mA(null),3e3)};nA.useEffect(()=>{const $A=Oe=>{if(Oe.key!=="s"||!(Oe.metaKey||Oe.ctrlKey))return;const et=Oe.target?.tagName;if(et==="INPUT"||et==="TEXTAREA"||l||u||Q||p||zA||Ae||oe||!j)return;Oe.preventDefault();const dt=uIA(),Ii=vZ(),Cr=DE().enabled,dr=tD();dt==="download"?Sm():dt==="obsidian"&&Ii?Ll("obsidian"):dt==="bear"&&Cr?Ll("bear"):dt==="octarine"&&dr?Ll("octarine"):(jA("notes"),I(!0))};return window.addEventListener("keydown",$A),()=>window.removeEventListener("keydown",$A)},[l,u,Q,p,zA,Ae,oe,j,e,_o]),nA.useEffect(()=>{const $A=Oe=>{if(Oe.key!=="p"||!(Oe.metaKey||Oe.ctrlKey))return;const et=Oe.target?.tagName;et==="INPUT"||et==="TEXTAREA"||l||u||Q||p||zA||Ae||oe||(Oe.preventDefault(),window.print())};return window.addEventListener("keydown",$A),()=>window.removeEventListener("keydown",$A)},[l,u,Q,p,zA,Ae,oe]);const Tl=nA.useMemo(()=>KmA(_),[_]),Vu=nA.useMemo(()=>({compact:832,default:1040,wide:1280})[O.planWidth]??832,[O.planWidth]);return D.jsx(YYA,{defaultTheme:"dark",children:D.jsxs("div",{"data-print-region":"root",className:"h-screen flex flex-col bg-background overflow-hidden",children:[D.jsxs("header",{className:"h-12 flex items-center justify-between px-2 md:px-4 border-b border-border/50 bg-card/50 backdrop-blur-xl sticky top-0 z-[50]",children:[D.jsx("div",{className:"flex items-center gap-2 md:gap-3",children:D.jsx("a",{href:"https://plannotator.ai",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-1.5 md:gap-2 hover:opacity-80 transition-opacity",children:D.jsx("span",{className:"text-sm font-semibold tracking-tight",children:"Plannotator"})})}),D.jsxs("div",{className:"flex items-center gap-1 md:gap-2",children:[qu&&!j&&yt&&D.jsxs(D.Fragment,{children:[D.jsx("div",{className:"w-px h-5 bg-border/50 mx-1 hidden md:block"}),D.jsx(OZ,{onClick:AN,disabled:XA||!Yt,isLoading:XA,title:"Send feedback to bot"}),D.jsx(UZ,{onClick:$R,disabled:XA||!Yt,isLoading:XA,title:"Approve design and notify bot"})]}),j&&!Ve.isActive&&At.archiveMode&&D.jsxs(D.Fragment,{children:[D.jsxs("button",{onClick:At.copy,className:"px-2.5 py-1 rounded-md text-xs font-medium transition-all bg-muted text-foreground hover:bg-muted/80 border border-border",title:"Copy plan content",children:[D.jsx("span",{className:"hidden md:inline",children:"Copy"}),D.jsx("svg",{className:"w-4 h-4 md:hidden",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})})]}),D.jsx("button",{onClick:At.done,className:"px-2.5 py-1 rounded-md text-xs font-medium transition-all bg-success text-success-foreground hover:opacity-90",title:"Close archive",children:"Done"})]}),j&&(!Ve.isActive||EA)&&!At.archiveMode&&D.jsxs(D.Fragment,{children:[D.jsx(OZ,{onClick:()=>{if(EA){Ts();return}const $A=Ve.getDocAnnotations(),Oe=Array.from($A.values()).some(et=>et.annotations.length>0||et.globalAttachments.length>0);hi.length===0&&mi.length===0&&!Oe?d(!0):zr()},disabled:XA,isLoading:XA,label:EA?hi.length>0||mi.length>0||Ve.docAnnotationCount>0?"Send Annotations":"Done":"Send Feedback",title:EA?hi.length>0||mi.length>0||Ve.docAnnotationCount>0?"Send Annotations":"Done":"Send Feedback"}),!EA&&D.jsxs("div",{className:"relative group/approve",children:[D.jsx(UZ,{onClick:()=>{if(_==="claude-code"&&hi.length>0){f(!0);return}if(_==="opencode"){const $A=Ht();if($A){S($A),y(!0);return}}Pi()},disabled:XA,isLoading:XA,dimmed:(_==="claude-code"||_==="gemini-cli")&&hi.length>0}),(_==="claude-code"||_==="gemini-cli")&&hi.length>0&&D.jsxs("div",{className:"absolute top-full right-0 mt-2 px-3 py-2 bg-popover border border-border rounded-lg shadow-xl text-xs text-foreground w-56 text-center opacity-0 invisible group-hover/approve:opacity-100 group-hover/approve:visible transition-all pointer-events-none z-50",children:[D.jsx("div",{className:"absolute bottom-full right-4 border-4 border-transparent border-b-border"}),D.jsx("div",{className:"absolute bottom-full right-4 mt-px border-4 border-transparent border-b-popover"}),Tl," doesn't support feedback on approval. Your annotations won't be seen."]})]}),D.jsx("div",{className:"w-px h-5 bg-border/50 mx-1 hidden md:block"})]}),D.jsx("button",{onClick:()=>R(!k),className:`p-1.5 rounded-md text-xs font-medium transition-all ${k?"bg-primary/15 text-primary":"text-muted-foreground hover:text-foreground hover:bg-muted"}`,title:k?"Hide annotations":"Show annotations",children:D.jsx("svg",{className:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:D.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z"})})}),D.jsx("div",{className:"hidden",children:D.jsx(K8A,{taterMode:G,onTaterModeChange:Pt,onIdentityChange:vm,origin:_,onUIPreferencesChange:P,externalOpen:b,onExternalClose:()=>N(!1),gitUser:eA})}),D.jsx(f9A,{appVersion:"0.17.3",hasNewSettingsHints:T,onOpenSettings:()=>{T&&(fIA(),L(!1)),N(!0)},onOpenExport:()=>{jA(void 0),I(!0)},onCopyAgentInstructions:eN,onDownloadAnnotations:Sm,onPrint:()=>window.print(),onCopyShareLink:tN,onOpenImport:()=>E(!0),onSaveToObsidian:()=>Ll("obsidian"),onSaveToBear:()=>Ll("bear"),onSaveToOctarine:()=>Ll("octarine"),sharingEnabled:BA,isApiMode:j,agentInstructionsEnabled:j&&!At.archiveMode&&!EA,obsidianConfigured:vZ(),bearConfigured:DE().enabled,octarineConfigured:tD()})]})]}),Ve.error&&D.jsxs("div",{className:"bg-destructive/10 border-b border-destructive/20 px-4 py-2 flex items-center gap-2 flex-shrink-0",children:[D.jsx("span",{className:"text-xs text-destructive",children:Ve.error}),D.jsx("button",{onClick:Ve.dismissError,className:"ml-auto text-xs text-destructive/60 hover:text-destructive",children:"dismiss"})]}),D.jsx(zlA.Provider,{value:Ke,children:D.jsxs("div",{"data-print-region":"content",className:`flex-1 flex overflow-hidden relative z-0 ${$e?"select-none":""}`,children:[G&&D.jsx(e8A,{}),!tt.isOpen&&D.jsx($9A,{activeTab:tt.activeTab,onToggleTab:tt.toggleTab,hasDiff:Et.hasPreviousVersion,showFilesTab:Lt&&!At.archiveMode,showVaultTab:gi,hasFileAnnotations:ke,hasVaultAnnotations:be,className:"hidden lg:flex absolute left-0 top-0 z-10"}),tt.isOpen&&D.jsxs(D.Fragment,{children:[D.jsx(cHA,{activeTab:tt.activeTab,onTabChange:$A=>{tt.toggleTab($A),$A==="archive"&&!At.archiveMode&&At.fetchPlans()},onClose:tt.close,width:bt.width,blocks:a,annotations:t,activeSection:Ls,onTocNavigate:XR,linkedDocFilepath:Ve.filepath,onLinkedDocBack:Ve.isActive?zi:void 0,backLabel:Fa,showFilesTab:Lt&&!At.archiveMode,fileAnnotationCounts:xe,highlightedFiles:gt,fileBrowser:Ye,onFilesSelectFile:ut,onFilesFetchAll:()=>Ye.fetchAll(Xt),showVaultTab:gi&&!At.archiveMode,vaultPath:Fe,vaultBrowser:Dt,vaultAnnotationCounts:ye,vaultHighlightedFiles:Kt,onVaultSelectFile:Re,onVaultFetchTree:ss,hasFileAnnotations:ke,hasVaultAnnotations:be,versionInfo:Ce,versions:Et.versions,selectedBaseVersion:Et.diffBaseVersion,onSelectBaseVersion:Et.selectBaseVersion,isPlanDiffActive:KA,hasPreviousVersion:Et.hasPreviousVersion,onActivatePlanDiff:()=>UA(!0),isLoadingVersions:Et.isLoadingVersions,isSelectingVersion:Et.isSelectingVersion,fetchingVersion:Et.fetchingVersion,onFetchVersions:Et.fetchVersions,showArchiveTab:j&&!EA,archivePlans:At.plans,selectedArchiveFile:At.selectedFile,onArchiveSelect:At.select,isLoadingArchive:At.isLoading}),D.jsx(qZ,{...bt.handleProps,className:"hidden lg:block",side:"left"})]}),D.jsxs(zp,{element:"main",className:`flex-1 min-w-0 bg-grid ${tt.isOpen?"":"lg:pl-[30px]"}`,"data-print-region":"document",onViewportReady:Ue,children:[D.jsx(WQ,{isOpen:!!_A,onClose:fe,onConfirm:Xe,title:"Draft Recovered",message:_A?`Found ${_A.count} annotation${_A.count!==1?"s":""} from ${_A.timeAgo}. Would you like to restore them?`:"",confirmText:"Restore",cancelText:"Dismiss",showCancel:!0}),D.jsxs("div",{ref:q,className:"min-h-full flex flex-col items-center px-2 py-3 md:px-10 md:py-8 xl:px-16 relative z-10",children:[!KA&&!At.archiveMode&&!Ve.isActive&&O.stickyActionsEnabled&&D.jsx(jYA,{inputMethod:x,onInputMethodChange:Ai,mode:K,onModeChange:ti,taterMode:G,repoInfo:kA,planDiffStats:Et.diffStats,isPlanDiffActive:KA,hasPreviousVersion:Et.hasPreviousVersion,onPlanDiffToggle:()=>UA(!KA),archiveInfo:At.currentInfo,maxWidth:Vu,remountToken:Ve.isActive?`doc:${Ve.filepath}`:"plan"}),!KA&&!At.archiveMode&&D.jsx("div",{"data-print-hide":!0,className:"w-full mb-3 md:mb-4 flex items-center justify-start",style:{maxWidth:Vu},children:D.jsx(eIA,{inputMethod:x,onInputMethodChange:Ai,mode:K,onModeChange:ti,taterMode:G})}),Et.diffBlocks&&Et.diffStats&&D.jsx("div",{className:"w-full flex justify-center",style:{display:KA?void 0:"none"},children:D.jsx(QHA,{diffBlocks:Et.diffBlocks,diffStats:Et.diffStats,diffMode:se,onDiffModeChange:Ne,onPlanDiffToggle:()=>UA(!1),repoInfo:kA,baseVersionLabel:Et.diffBaseVersion!=null?`v${Et.diffBaseVersion}`:void 0,baseVersion:Et.diffBaseVersion??void 0,maxWidth:Vu,annotations:cr,onAddAnnotation:Cn,onSelectAnnotation:jo,selectedAnnotationId:r,mode:K})}),wA==="folder"&&!e&&!Ve.isActive&&D.jsx("div",{className:"w-full flex justify-center",children:D.jsxs("div",{className:"w-full max-w-3xl p-12 text-center text-muted-foreground",children:[D.jsx("p",{className:"text-lg font-medium mb-2",children:"Select a file to annotate"}),D.jsx("p",{className:"text-sm",children:"Pick a markdown file from the sidebar to begin."})]})}),D.jsx("div",{className:"w-full flex justify-center",style:{display:KA&&Et.diffBlocks||wA==="folder"&&!e&&!Ve.isActive?"none":void 0},children:D.jsx(u5A,{ref:De,blocks:a,markdown:e,frontmatter:o,annotations:Qt,onAddAnnotation:Cn,onSelectAnnotation:jo,selectedAnnotationId:r,mode:K,inputMethod:x,taterMode:G,globalAttachments:aA,onAddGlobalAttachment:jR,onRemoveGlobalAttachment:_R,repoInfo:kA,stickyActions:O.stickyActionsEnabled,planDiffStats:Ve.isActive?null:Et.diffStats,isPlanDiffActive:KA,onPlanDiffToggle:()=>UA(!KA),hasPreviousVersion:!Ve.isActive&&Et.hasPreviousVersion,showDemoBadge:!j&&!Ni&&!yt,maxWidth:Vu,onOpenLinkedDoc:Si,linkedDocInfo:Ve.isActive?{filepath:Ve.filepath,onBack:zi,label:Dt.activeFile?"Vault File":Ye.activeFile?"File":void 0,backLabel:Fa}:null,imageBaseDir:PA,copyLabel:wA==="message"?"Copy message":wA==="file"||wA==="folder"?"Copy file":void 0,archiveInfo:At.currentInfo,onToggleCheckbox:OC.toggle,checkboxOverrides:OC.overrides,actionsLabelMode:Y},Ve.isActive?`doc:${Ve.filepath}`:"plan")})]})]}),k&&D.jsx(qZ,{...je.handleProps,className:"hidden md:block",side:"right"}),D.jsx(NYA,{isOpen:k,blocks:a,annotations:hi,selectedId:r,onSelect:n,onDelete:UC,onEdit:zu,sharingEnabled:BA,width:je.width,editorAnnotations:mi,onDeleteEditorAnnotation:gr,onClose:()=>R(!1),onQuickCopy:async()=>{await navigator.clipboard.writeText(DiA(_o))},onShare:Yt?()=>{R(!1),jA("share"),I(!0)}:void 0,otherFileAnnotations:me,onOtherFileAnnotationsClick:FA})]})}),D.jsx(UYA,{isOpen:l,onClose:()=>{I(!1),jA(void 0)},shareUrl:Yt,shareUrlSize:en,shortShareUrl:Ir,isGeneratingShortUrl:ea,shortUrlError:In,onGenerateShortUrl:$,annotationsOutput:_o,annotationCount:hi.length,taterSprite:G?D.jsx(v5,{}):void 0,sharingEnabled:BA,markdown:e,isApiMode:j,initialTab:YA}),D.jsx(KYA,{isOpen:C,onClose:()=>E(!1),onImport:CA,shareBaseUrl:Z}),D.jsx(WQ,{isOpen:u,onClose:()=>d(!1),title:"Add Annotations First",message:`To provide feedback, select text in the plan and add annotations. ${Tl} will use your annotations to revise the plan.`,variant:"info"}),D.jsx(WQ,{isOpen:Q,onClose:()=>f(!1),onConfirm:()=>{f(!1),Pi()},title:"Annotations Won't Be Sent",message:D.jsxs(D.Fragment,{children:[Tl," doesn't yet support feedback on approval. Your ",hi.length," annotation",hi.length!==1?"s":""," will be lost."]}),subMessage:D.jsxs(D.Fragment,{children:["To send feedback, use ",D.jsx("strong",{children:"Send Feedback"})," instead.",D.jsx("br",{}),D.jsx("br",{}),"Want this feature? Upvote these issues:",D.jsx("br",{}),D.jsx("a",{href:"https://github.com/anthropics/claude-code/issues/16001",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"#16001"})," · ",D.jsx("a",{href:"https://github.com/anthropics/claude-code/issues/15755",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"#15755"})]}),confirmText:"Approve Anyway",cancelText:"Cancel",variant:"warning",showCancel:!0}),D.jsx(WQ,{isOpen:p,onClose:()=>y(!1),onConfirm:()=>{y(!1),Pi()},title:"Agent Not Found",message:w,subMessage:D.jsxs(D.Fragment,{children:["You can change the agent in ",D.jsx("strong",{children:"Settings"}),", or approve anyway and OpenCode will use the default agent."]}),confirmText:"Approve Anyway",cancelText:"Cancel",variant:"warning",showCancel:!0}),D.jsx(WQ,{isOpen:!!DA&&!j,onClose:OA,title:"Shared Plan Could Not Be Loaded",message:DA,subMessage:"You are viewing a demo plan. This is sample content — it is not your data or anyone else's.",variant:"warning"}),ae&&D.jsx("div",{className:`fixed top-16 right-4 z-50 px-3 py-2 rounded-lg text-xs font-medium shadow-lg transition-opacity ${ae.type==="success"?"bg-success/15 text-success border border-success/30":"bg-destructive/15 text-destructive border border-destructive/30"}`,children:ae.message}),D.jsx(A9A,{submitted:oe,title:At.archiveMode?"Archive Closed":oe==="approved"?"Plan Approved":EA?"Annotations Sent":"Feedback Sent",subtitle:At.archiveMode?"You can reopen with plannotator archive.":oe==="approved"?`${Tl} will proceed with the implementation.`:EA?`${Tl} will address your annotations on the ${wA==="message"?"message":wA==="folder"?"files":"file"}.`:`${Tl} will revise the plan based on your annotations.`,agentLabel:Tl}),D.jsx(a9A,{origin:_,isWSL:tA}),D.jsx(FiA,{isOpen:!!Ae,imageSrc:Ae?.blobUrl??"",initialName:Ae?.initialName,onAccept:Jn,onClose:zn}),D.jsx(R9A,{isOpen:zA,onComplete:$A=>{ee($A),le(!1)}})]})})},YIA=document.getElementById("root");if(!YIA)throw new Error("Could not find root element to mount to");const yHA=UmA.createRoot(YIA);yHA.render(D.jsx(Ur.StrictMode,{children:D.jsx(mHA,{})}));class Bs{constructor(A,t,i){this.lexer=void 0,this.start=void 0,this.end=void 0,this.lexer=A,this.start=t,this.end=i}static range(A,t){return t?!A||!A.loc||!t.loc||A.loc.lexer!==t.loc.lexer?null:new Bs(A.loc.lexer,A.loc.start,t.loc.end):A&&A.loc}}class $s{constructor(A,t){this.text=void 0,this.loc=void 0,this.noexpand=void 0,this.treatAsRelax=void 0,this.text=A,this.loc=t}range(A,t){return new $s(t,Bs.range(this,A))}}class _e{constructor(A,t){this.name=void 0,this.position=void 0,this.length=void 0,this.rawMessage=void 0;var i="KaTeX parse error: "+A,r,n,a=t&&t.loc;if(a&&a.start<=a.end){var s=a.lexer.input;r=a.start,n=a.end,r===s.length?i+=" at end of input: ":i+=" at position "+(r+1)+": ";var o=s.slice(r,n).replace(/[^]/g,"$&̲"),g;r>15?g="…"+s.slice(r-15,r):g=s.slice(0,r);var l;n+15<s.length?l=s.slice(n,n+15)+"…":l=s.slice(n),i+=g+o+l}var I=new Error(i);return I.name="ParseError",I.__proto__=_e.prototype,I.position=r,r!=null&&n!=null&&(I.length=n-r),I.rawMessage=A,I}}_e.prototype.__proto__=Error.prototype;var DHA=function(A,t){return A===void 0?t:A},wHA=/([A-Z])/g,vHA=function(A){return A.replace(wHA,"-$1").toLowerCase()},SHA={"&":"&amp;",">":"&gt;","<":"&lt;",'"':"&quot;","'":"&#x27;"},bHA=/[&><"']/g;function RHA(e){return String(e).replace(bHA,A=>SHA[A])}var HIA=function e(A){return A.type==="ordgroup"||A.type==="color"?A.body.length===1?e(A.body[0]):A:A.type==="font"?e(A.body):A},NHA=function(A){var t=HIA(A);return t.type==="mathord"||t.type==="textord"||t.type==="atom"},MHA=function(A){if(!A)throw new Error("Expected non-null, but got "+String(A));return A},kHA=function(A){var t=/^[\x00-\x20]*([^\\/#?]*?)(:|&#0*58|&#x0*3a|&colon)/i.exec(A);return t?t[2]!==":"||!/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t[1])?null:t[1].toLowerCase():"_relative"},Ui={deflt:DHA,escape:RHA,hyphenate:vHA,getBaseElem:HIA,isCharacterBox:NHA,protocolFromUrl:kHA},p0={displayMode:{type:"boolean",description:"Render math in display mode, which puts the math in display style (so \\int and \\sum are large, for example), and centers the math on the page on its own line.",cli:"-d, --display-mode"},output:{type:{enum:["htmlAndMathml","html","mathml"]},description:"Determines the markup language of the output.",cli:"-F, --format <type>"},leqno:{type:"boolean",description:"Render display math in leqno style (left-justified tags)."},fleqn:{type:"boolean",description:"Render display math flush left."},throwOnError:{type:"boolean",default:!0,cli:"-t, --no-throw-on-error",cliDescription:"Render errors (in the color given by --error-color) instead of throwing a ParseError exception when encountering an error."},errorColor:{type:"string",default:"#cc0000",cli:"-c, --error-color <color>",cliDescription:"A color string given in the format 'rgb' or 'rrggbb' (no #). This option determines the color of errors rendered by the -t option.",cliProcessor:e=>"#"+e},macros:{type:"object",cli:"-m, --macro <def>",cliDescription:"Define custom macro of the form '\\foo:expansion' (use multiple -m arguments for multiple macros).",cliDefault:[],cliProcessor:(e,A)=>(A.push(e),A)},minRuleThickness:{type:"number",description:"Specifies a minimum thickness, in ems, for fraction lines, `\\sqrt` top lines, `{array}` vertical lines, `\\hline`, `\\hdashline`, `\\underline`, `\\overline`, and the borders of `\\fbox`, `\\boxed`, and `\\fcolorbox`.",processor:e=>Math.max(0,e),cli:"--min-rule-thickness <size>",cliProcessor:parseFloat},colorIsTextColor:{type:"boolean",description:"Makes \\color behave like LaTeX's 2-argument \\textcolor, instead of LaTeX's one-argument \\color mode change.",cli:"-b, --color-is-text-color"},strict:{type:[{enum:["warn","ignore","error"]},"boolean","function"],description:"Turn on strict / LaTeX faithfulness mode, which throws an error if the input uses features that are not supported by LaTeX.",cli:"-S, --strict",cliDefault:!1},trust:{type:["boolean","function"],description:"Trust the input, enabling all HTML features such as \\url.",cli:"-T, --trust"},maxSize:{type:"number",default:1/0,description:"If non-zero, all user-specified sizes, e.g. in \\rule{500em}{500em}, will be capped to maxSize ems. Otherwise, elements and spaces can be arbitrarily large",processor:e=>Math.max(0,e),cli:"-s, --max-size <n>",cliProcessor:parseInt},maxExpand:{type:"number",default:1e3,description:"Limit the number of macro expansions to the specified number, to prevent e.g. infinite macro loops. If set to Infinity, the macro expander will try to fully expand as in LaTeX.",processor:e=>Math.max(0,e),cli:"-e, --max-expand <n>",cliProcessor:e=>e==="Infinity"?1/0:parseInt(e)},globalGroup:{type:"boolean",cli:!1}};function xHA(e){if(e.default)return e.default;var A=e.type,t=Array.isArray(A)?A[0]:A;if(typeof t!="string")return t.enum[0];switch(t){case"boolean":return!1;case"string":return"";case"number":return 0;case"object":return{}}}class M5{constructor(A){this.displayMode=void 0,this.output=void 0,this.leqno=void 0,this.fleqn=void 0,this.throwOnError=void 0,this.errorColor=void 0,this.macros=void 0,this.minRuleThickness=void 0,this.colorIsTextColor=void 0,this.strict=void 0,this.trust=void 0,this.maxSize=void 0,this.maxExpand=void 0,this.globalGroup=void 0,A=A||{};for(var t in p0)if(p0.hasOwnProperty(t)){var i=p0[t];this[t]=A[t]!==void 0?i.processor?i.processor(A[t]):A[t]:xHA(i)}}reportNonstrict(A,t,i){var r=this.strict;if(typeof r=="function"&&(r=r(A,t,i)),!(!r||r==="ignore")){if(r===!0||r==="error")throw new _e("LaTeX-incompatible input and strict mode is set to 'error': "+(t+" ["+A+"]"),i);r==="warn"?typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" ["+A+"]")):typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+r+"': "+t+" ["+A+"]"))}}useStrictBehavior(A,t,i){var r=this.strict;if(typeof r=="function")try{r=r(A,t,i)}catch{r="error"}return!r||r==="ignore"?!1:r===!0||r==="error"?!0:r==="warn"?(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to 'warn': "+(t+" ["+A+"]")),!1):(typeof console<"u"&&console.warn("LaTeX-incompatible input and strict mode is set to "+("unrecognized '"+r+"': "+t+" ["+A+"]")),!1)}isTrusted(A){if(A.url&&!A.protocol){var t=Ui.protocolFromUrl(A.url);if(t==null)return!1;A.protocol=t}var i=typeof this.trust=="function"?this.trust(A):this.trust;return!!i}}class fI{constructor(A,t,i){this.id=void 0,this.size=void 0,this.cramped=void 0,this.id=A,this.size=t,this.cramped=i}sup(){return el[LHA[this.id]]}sub(){return el[THA[this.id]]}fracNum(){return el[FHA[this.id]]}fracDen(){return el[GHA[this.id]]}cramp(){return el[OHA[this.id]]}text(){return el[UHA[this.id]]}isTight(){return this.size>=2}}var k5=0,bS=1,hd=2,Dc=3,tp=4,Lo=5,jd=6,Va=7,el=[new fI(k5,0,!1),new fI(bS,0,!0),new fI(hd,1,!1),new fI(Dc,1,!0),new fI(tp,2,!1),new fI(Lo,2,!0),new fI(jd,3,!1),new fI(Va,3,!0)],LHA=[tp,Lo,tp,Lo,jd,Va,jd,Va],THA=[Lo,Lo,Lo,Lo,Va,Va,Va,Va],FHA=[hd,Dc,tp,Lo,jd,Va,jd,Va],GHA=[Dc,Dc,Lo,Lo,Va,Va,Va,Va],OHA=[bS,bS,Dc,Dc,Lo,Lo,Va,Va],UHA=[k5,bS,hd,Dc,hd,Dc,hd,Dc],Ot={DISPLAY:el[k5],TEXT:el[hd],SCRIPT:el[tp],SCRIPTSCRIPT:el[jd]},VO=[{name:"latin",blocks:[[256,591],[768,879]]},{name:"cyrillic",blocks:[[1024,1279]]},{name:"armenian",blocks:[[1328,1423]]},{name:"brahmic",blocks:[[2304,4255]]},{name:"georgian",blocks:[[4256,4351]]},{name:"cjk",blocks:[[12288,12543],[19968,40879],[65280,65376]]},{name:"hangul",blocks:[[44032,55215]]}];function KHA(e){for(var A=0;A<VO.length;A++)for(var t=VO[A],i=0;i<t.blocks.length;i++){var r=t.blocks[i];if(e>=r[0]&&e<=r[1])return t.name}return null}var kw=[];VO.forEach(e=>e.blocks.forEach(A=>kw.push(...A)));function PIA(e){for(var A=0;A<kw.length;A+=2)if(e>=kw[A]&&e<=kw[A+1])return!0;return!1}var RB=80,YHA=function(A,t){return"M95,"+(622+A+t)+`
981
981
  c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
982
982
  c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
983
983
  c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10