@lax-wp/design-system 0.14.30 → 0.14.31
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/dist/components/forms/md-input/RichMarkdownInput.cjs.js +1 -1
- package/dist/components/forms/md-input/RichMarkdownInput.cjs.js.map +1 -1
- package/dist/components/forms/md-input/RichMarkdownInput.es.js +39 -38
- package/dist/components/forms/md-input/RichMarkdownInput.es.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("../../../_virtual/index.cjs.js"),N=require("react"),d=require("@mui/icons-material"),xe=require("../../data-display/modal/Modal.cjs.js"),u=require("../../button/Button.cjs.js"),ue=require("../../navigation/tabs/Tabs.cjs.js"),K=require("./MarkdownPreview.cjs.js"),O=require("./listEditing.cjs.js"),L=require("../../tooltip/Tooltip.cjs.js"),A=require("framer-motion"),H=require("../../data-display/typography/Typography.cjs.js"),me=require("../shared/InputLabel.cjs.js"),fe=["edit","preview"],he=({className:p,size:n=16})=>e.jsxs("svg",{width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:p,children:[e.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]}),U=N.forwardRef(({id:p,value:n="",defaultValue:V,onChange:m,placeholder:D="Enter markdown content...",minRows:W=4,maxRows:G=20,isDisabled:l=!1,className:J,textareaClassName:Q,previewClassName:E,label:v,labelClassName:X,isRequiredConditional:Y,required:F=!1,showPreviewOnModal:Z=!1,maxLength:a,linkTarget:q="_blank",errorMessage:k,tooltip:R,originalCase:_,suffixIcon:j,isClearable:y,inputref:C,showFormattingHelp:ee=!0,onKeyDown:te,noIndent:T=!1,showMinimalPreview:M=!1,acceptAdvanceContent:g=!0},i)=>{const[c,se]=N.useState("edit"),[ne,I]=N.useState(!1),f=N.useRef(null),r=p||`rich-md-input-${Math.random().toString(36).slice(2,11)}`,ae=n.length,o=(t,s="",x="")=>{const h=i?.current||f.current;if(!h)return;const S=h.selectionStart,P=h.selectionEnd,w=n.substring(S,P),oe=w||x,de=n.substring(0,S)+t+oe+s+n.substring(P);m(de),setTimeout(()=>{const B=S+t.length+(w?w.length:0);h.focus(),h.setSelectionRange(B,B+(w?0:x.length))},0)},z=t=>{const s=i?.current||f.current;if(!s)return;const x=O.toggleList(n,s.selectionStart,s.selectionEnd,t);a&&x.value.length>a||(m(x.value),setTimeout(()=>{s.focus(),s.setSelectionRange(x.caret,x.caret)},0))},re=()=>{const t=i?.current||f.current;if(!t)return!1;const s=O.continueList(n,t.selectionStart,t.selectionEnd);return!s||a&&s.value.length>a?!1:(m(s.value),setTimeout(()=>{t.focus(),t.setSelectionRange(s.caret,s.caret)},0),!0)},le=t=>{if(te?.(t),t.key==="Enter"&&!t.shiftKey&&!t.altKey&&!t.metaKey&&!t.ctrlKey&&!t.defaultPrevented){re()&&t.preventDefault();return}if(t.metaKey||t.ctrlKey)switch(t.key.toLowerCase()){case"b":t.preventDefault(),o("**","**","bold text");break;case"i":t.preventDefault(),o("*","*","italic text");break;case"u":t.preventDefault(),o("<u>","</u>","underlined text");break;case"k":t.preventDefault(),o("[","](url)","link text");break;case"e":t.preventDefault(),o("```","```","code");break}},ie=()=>{m(""),(i?.current||f.current)?.focus()},ce=(()=>{const t=(n.match(/\n/g)||[]).length+1;return Math.min(G,Math.max(W,t))})(),$=e.jsxs("div",{className:b("flex flex-col",J),children:[e.jsxs("div",{className:`flex flex-row items-center ${v?"justify-between":"justify-end"} w-full`,children:[v&&e.jsx("label",{id:r,htmlFor:r,className:`mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${_?"":"capitalize"} ${X||"!uppercse"}`,children:e.jsx("div",{className:"flex flex-wrap items-center justify-between w-full",children:e.jsx("div",{className:"inline-flex flex-wrap items-center gap-1",children:e.jsx(me.InputLabel,{label:v||"",required:F||!1,isRequiredConditional:Y||!1})})})}),ee&&e.jsx(L,{placement:"bottom-end",title:e.jsxs("div",{className:"flex flex-col items-start justify-center py-2 px-3 min-w-[220px] gap-2 bg-neutral-900 rounded-lg",children:[e.jsxs("div",{className:"flex flex-col items-start justify-start gap-1 w-full",children:[e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"**bold**"})}),e.jsxs("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:["→ ",e.jsx("strong",{children:"bold"})," text"]})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"*italic*"})}),e.jsxs("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:["→ ",e.jsx("em",{children:"italic"})," text"]})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"`code`"})}),e.jsxs("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:["→ ",e.jsx("code",{children:"inline code"})]})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"<u>text</u>"})}),e.jsxs("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:["→ ",e.jsx("u",{children:"underline"})]})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"~~strike~~"})}),e.jsxs("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:["→ ",e.jsx("del",{children:"strike"})]})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"- item"})}),e.jsx("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:"→ bullet list"})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"1. item"})}),e.jsx("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:"→ numbered list"})]}),g&&e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"## heading"})}),e.jsx("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:"→ heading 2"})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"[link](url)"})}),e.jsx("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:"→ hyperlink"})]})]}),g&&e.jsx(e.Fragment,{children:e.jsxs("div",{className:"flex flex-col items-start justify-start gap-1 w-full",children:[e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"> quote"})}),e.jsx("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:"→ blockquote"})]}),e.jsxs("div",{className:"flex flex-col items-start justify-start gap-0.5 w-full mt-0.5",children:[e.jsxs("div",{className:"flex flex-row items-center gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:"Table:"})]}),e.jsxs("div",{className:"flex flex-col px-1 py-0.5 bg-neutral-700 ml-2 rounded-sm gap-0",children:[e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap",children:"| Header 1 | Header 2 | Header 3 |"}),e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap",children:"| :--- | :---: | ---: |"}),e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap",children:"| Left | Center | Right |"})]})]})]})})]}),children:e.jsx(H.Typography,{className:"mb-2 text-xs font-medium text-primary-700 inline-flex items-center gap-1 cursor-pointer",children:"Formatting help ?"})})]}),e.jsxs("div",{className:b("flex flex-col border shadow-[0px_1px_2px_rgba(0,0,0,0.05)] rounded-lg bg-white dark:bg-black-700 w-full",k?"border-red-300 focus-within:border-red-500 focus-within:shadow-[0_0_0_1.5px_var(--color-red-200)]":"border-[#EAECF0] dark:border-black-600 focus-within:border-primary-600 dark:focus-within:border-primary-400 focus-within:shadow-[0_0_0_1.5px_var(--color-primary-100)] dark:focus-within:shadow-[0_0_0_1.5px_var(--color-primary-950)]"),children:[e.jsxs("div",{className:b("flex flex-row justify-between items-center px-3 py-2 gap-2 h-11 rounded-t-lg bg-[#F9FAFB] dark:bg-black-600 border-b border-[#EAECF0] dark:border-black-600"),children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(u,{id:`${r}-bold`,type:"button",onClick:()=>o("**","**","bold text"),disabled:l||c==="preview",className:"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",appearance:"ghost",status:"no-background",title:"Bold (Ctrl+B)",children:e.jsx(d.FormatBold,{sx:{fontSize:20,color:"#667085"},className:"dark:text-neutral-400"})}),e.jsx(u,{id:`${r}-italic`,type:"button",onClick:()=>o("*","*","italic text"),disabled:l||c==="preview",className:"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",appearance:"ghost",status:"no-background",title:"Italic (Ctrl+I)",children:e.jsx(d.FormatItalic,{sx:{fontSize:20,color:"#667085"},className:"dark:text-neutral-400"})}),e.jsx(u,{id:`${r}-underline`,type:"button",onClick:()=>o("<u>","</u>","underlined text"),disabled:l||c==="preview",className:"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",appearance:"ghost",status:"no-background",title:"Underline (Ctrl+U)",children:e.jsx(d.FormatUnderlined,{sx:{fontSize:20,color:"#667085"},className:"dark:text-neutral-400"})}),e.jsx("div",{className:"w-px h-5 bg-[#EAECF0] dark:bg-black-500 rounded-full"}),e.jsx(u,{id:`${r}-numbered-list`,type:"button",onClick:()=>z("ordered"),disabled:l||c==="preview",className:"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",appearance:"ghost",status:"no-background",title:"Numbered List",children:e.jsx(d.FormatListNumbered,{sx:{fontSize:20,color:"#667085"},className:"dark:text-neutral-400"})}),e.jsx(u,{id:`${r}-bullet-list`,type:"button",onClick:()=>z("bullet"),disabled:l||c==="preview",className:"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",appearance:"ghost",status:"no-background",title:"Bullet List",children:e.jsx(d.FormatListBulleted,{sx:{fontSize:20,color:"#667085"},className:"dark:text-neutral-400"})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[a&&e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"text-sm font-medium text-[#475467] dark:text-neutral-400",children:[ae,"/",a]}),e.jsx("div",{className:"w-px h-6 bg-[#EAECF0] dark:bg-black-500 rounded-full"})]}),Z?e.jsx(u,{id:`${r}-expand`,type:"button",onClick:()=>I(!0),disabled:l,className:"!p-0.5 !min-w-0 !h-auto ml-1 !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",appearance:"ghost",status:"no-background",title:"Expand Preview",children:e.jsx(d.OpenInFull,{sx:{fontSize:16,color:"#667085"},className:"dark:text-neutral-400"})}):e.jsx(ue.Tabs,{variant:"switch",tabs:fe,activeTab:c,onTabClick:t=>se(t),height:"h-5",iconsOnly:!0,tabIcons:{edit:e.jsx(d.Edit,{sx:{fontSize:16,color:"#667085"},className:"dark:text-neutral-400"}),preview:e.jsx(d.VisibilityOutlined,{sx:{fontSize:16,color:"#667085"},className:"dark:text-neutral-400"})},className:"rounded-lg"})]})]}),e.jsx("div",{className:"px-3 py-2 relative",children:c==="edit"?e.jsxs(e.Fragment,{children:[e.jsx("textarea",{ref:t=>{typeof i=="function"?i(t):i&&(i.current=t),f.current=t,C&&(C.current=t)},id:r,value:n,defaultValue:V,onChange:t=>{const s=t.target.value;(!a||s.length<=a)&&m(s)},onKeyDown:le,placeholder:D,rows:ce,disabled:l,required:F,maxLength:a,className:b("w-full bg-transparent !focus:ring-0 !focus:border-none","font-inter font-medium text-sm leading-5","text-[#101828] dark:text-neutral-100","placeholder:text-neutral-400 dark:placeholder:text-neutral-500","focus:outline-none resize-none","scrollbar-none","[&::-webkit-scrollbar]:hidden","[-ms-overflow-style:none]","[scrollbar-width:none]",{"text-neutral-400 dark:text-neutral-500 cursor-not-allowed":l},{"pr-20":y||j},Q)}),(y||j)&&c==="edit"&&e.jsxs("div",{className:"absolute right-1 top-2 flex items-center gap-1",children:[y&&n&&e.jsx("button",{id:`btn-input-field-clear-${p}`,className:"absolute inset-y-0 flex items-center cursor-pointer top-2 right-1 focus:outline-none",onClick:ie,type:"button",children:e.jsx(he,{className:"text-neutral-300 dark:text-black-500 hover:text-neutral-400 dark:hover:text-black-400 transition-colors",size:16})}),j&&e.jsx("div",{className:"flex items-center",children:j})]})]}):e.jsx("div",{className:"w-full min-h-[92px] max-h-[400px] overflow-y-auto",children:e.jsx(K.MarkdownPreview,{content:n,linkTarget:q,className:E,noIndent:T,showMinimalPreview:M,acceptAdvanceContent:g})})})]}),e.jsx(xe.Modal,{open:ne,onCancel:()=>I(!1),title:"Markdown Preview",width:900,footer:null,children:e.jsx("div",{className:"max-h-[calc(100vh-200px)] overflow-y-auto p-4",children:e.jsx(K.MarkdownPreview,{content:n,linkTarget:q,className:E,noIndent:T,showMinimalPreview:M,acceptAdvanceContent:g})})}),e.jsx(A.AnimatePresence,{children:k&&e.jsx(A.motion.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:.2},children:e.jsx(H.Typography,{className:"mt-1 text-error-500",appearance:"custom",size:"extra-small",variant:"medium",children:k})})})]});return R?e.jsx(L,{title:R,children:$}):$});U.displayName="RichMarkdownInput";exports.RichMarkdownInput=U;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),b=require("../../../_virtual/index.cjs.js"),N=require("react"),x=require("@mui/icons-material"),ue=require("../../data-display/modal/Modal.cjs.js"),u=require("../../button/Button.cjs.js"),me=require("../../navigation/tabs/Tabs.cjs.js"),K=require("./MarkdownPreview.cjs.js"),L=require("./listEditing.cjs.js"),O=require("../../tooltip/Tooltip.cjs.js"),A=require("framer-motion"),H=require("../../data-display/typography/Typography.cjs.js"),he=require("../shared/InputLabel.cjs.js"),U=require("../../icon/icons.generated.cjs.js"),fe=["edit","preview"],pe=({className:p,size:n=16})=>e.jsxs("svg",{width:n,height:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:p,children:[e.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]}),V=N.forwardRef(({id:p,value:n="",defaultValue:D,onChange:m,placeholder:W="Enter markdown content...",minRows:G=4,maxRows:J=20,isDisabled:l=!1,className:Q,textareaClassName:X,previewClassName:E,label:v,labelClassName:Y,isRequiredConditional:Z,required:F=!1,showPreviewOnModal:ee=!1,maxLength:a,linkTarget:S="_blank",errorMessage:k,tooltip:_,originalCase:R,suffixIcon:j,isClearable:y,inputref:C,showFormattingHelp:te=!0,onKeyDown:se,noIndent:I=!1,showMinimalPreview:T=!1,acceptAdvanceContent:g=!0},i)=>{const[c,ne]=N.useState("edit"),[ae,M]=N.useState(!1),h=N.useRef(null),r=p||`rich-md-input-${Math.random().toString(36).slice(2,11)}`,re=n.length,d=(t,s="",o="")=>{const f=i?.current||h.current;if(!f)return;const q=f.selectionStart,z=f.selectionEnd,w=n.substring(q,z),oe=w||o,xe=n.substring(0,q)+t+oe+s+n.substring(z);m(xe),setTimeout(()=>{const B=q+t.length+(w?w.length:0);f.focus(),f.setSelectionRange(B,B+(w?0:o.length))},0)},$=t=>{const s=i?.current||h.current;if(!s)return;const o=L.toggleList(n,s.selectionStart,s.selectionEnd,t);a&&o.value.length>a||(m(o.value),setTimeout(()=>{s.focus(),s.setSelectionRange(o.caret,o.caret)},0))},le=()=>{const t=i?.current||h.current;if(!t)return!1;const s=L.continueList(n,t.selectionStart,t.selectionEnd);return!s||a&&s.value.length>a?!1:(m(s.value),setTimeout(()=>{t.focus(),t.setSelectionRange(s.caret,s.caret)},0),!0)},ie=t=>{if(se?.(t),t.key==="Enter"&&!t.shiftKey&&!t.altKey&&!t.metaKey&&!t.ctrlKey&&!t.defaultPrevented){le()&&t.preventDefault();return}if(t.metaKey||t.ctrlKey)switch(t.key.toLowerCase()){case"b":t.preventDefault(),d("**","**","bold text");break;case"i":t.preventDefault(),d("*","*","italic text");break;case"u":t.preventDefault(),d("<u>","</u>","underlined text");break;case"k":t.preventDefault(),d("[","](url)","link text");break;case"e":t.preventDefault(),d("```","```","code");break}},ce=()=>{m(""),(i?.current||h.current)?.focus()},de=(()=>{const t=(n.match(/\n/g)||[]).length+1;return Math.min(J,Math.max(G,t))})(),P=e.jsxs("div",{className:b("flex flex-col",Q),children:[e.jsxs("div",{className:`flex flex-row items-center ${v?"justify-between":"justify-end"} w-full`,children:[v&&e.jsx("label",{id:r,htmlFor:r,className:`mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${R?"":"capitalize"} ${Y||"!uppercse"}`,children:e.jsx("div",{className:"flex flex-wrap items-center justify-between w-full",children:e.jsx("div",{className:"inline-flex flex-wrap items-center gap-1",children:e.jsx(he.InputLabel,{label:v||"",required:F||!1,isRequiredConditional:Z||!1})})})}),te&&e.jsx(O,{placement:"bottom-end",title:e.jsxs("div",{className:"flex flex-col items-start justify-center py-2 px-3 min-w-[220px] gap-2 bg-neutral-900 rounded-lg",children:[e.jsxs("div",{className:"flex flex-col items-start justify-start gap-1 w-full",children:[e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"**bold**"})}),e.jsxs("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:["→ ",e.jsx("strong",{children:"bold"})," text"]})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"*italic*"})}),e.jsxs("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:["→ ",e.jsx("em",{children:"italic"})," text"]})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"`code`"})}),e.jsxs("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:["→ ",e.jsx("code",{children:"inline code"})]})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"<u>text</u>"})}),e.jsxs("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:["→ ",e.jsx("u",{children:"underline"})]})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"~~strike~~"})}),e.jsxs("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:["→ ",e.jsx("del",{children:"strike"})]})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"- item"})}),e.jsx("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:"→ bullet list"})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"1. item"})}),e.jsx("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:"→ numbered list"})]}),g&&e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"## heading"})}),e.jsx("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:"→ heading 2"})]}),e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"[link](url)"})}),e.jsx("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:"→ hyperlink"})]})]}),g&&e.jsx(e.Fragment,{children:e.jsxs("div",{className:"flex flex-col items-start justify-start gap-1 w-full",children:[e.jsxs("div",{className:"flex flex-row items-start gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("div",{className:"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm",children:e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter",children:"> quote"})}),e.jsx("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:"→ blockquote"})]}),e.jsxs("div",{className:"flex flex-col items-start justify-start gap-0.5 w-full mt-0.5",children:[e.jsxs("div",{className:"flex flex-row items-center gap-1 ml-1",children:[e.jsx("span",{className:"text-white text-[18px] leading-4",children:"•"}),e.jsx("span",{className:"text-white text-xs font-medium leading-4 font-inter",children:"Table:"})]}),e.jsxs("div",{className:"flex flex-col px-1 py-0.5 bg-neutral-700 ml-2 rounded-sm gap-0",children:[e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap",children:"| Header 1 | Header 2 | Header 3 |"}),e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap",children:"| :--- | :---: | ---: |"}),e.jsx("span",{className:"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap",children:"| Left | Center | Right |"})]})]})]})})]}),children:e.jsx(H.Typography,{className:"mb-2 text-xs font-medium text-primary-700 inline-flex items-center gap-1 cursor-pointer",children:"Formatting help ?"})})]}),e.jsxs("div",{className:b("flex flex-col border shadow-[0px_1px_2px_rgba(0,0,0,0.05)] rounded-lg bg-white dark:bg-black-700 w-full",k?"border-red-300 focus-within:border-red-500 focus-within:shadow-[0_0_0_1.5px_var(--color-red-200)]":"border-[#EAECF0] dark:border-black-600 focus-within:border-primary-600 dark:focus-within:border-primary-400 focus-within:shadow-[0_0_0_1.5px_var(--color-primary-100)] dark:focus-within:shadow-[0_0_0_1.5px_var(--color-primary-950)]"),children:[e.jsxs("div",{className:b("flex flex-row justify-between items-center px-3 py-2 gap-2 h-11 rounded-t-lg bg-[#F9FAFB] dark:bg-black-600 border-b border-[#EAECF0] dark:border-black-600"),children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(u,{id:`${r}-bold`,type:"button",onClick:()=>d("**","**","bold text"),disabled:l||c==="preview",className:"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",appearance:"ghost",status:"no-background",title:"Bold (Ctrl+B)",children:e.jsx(x.FormatBold,{sx:{fontSize:20,color:"#667085"},className:"dark:text-neutral-400"})}),e.jsx(u,{id:`${r}-italic`,type:"button",onClick:()=>d("*","*","italic text"),disabled:l||c==="preview",className:"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",appearance:"ghost",status:"no-background",title:"Italic (Ctrl+I)",children:e.jsx(x.FormatItalic,{sx:{fontSize:20,color:"#667085"},className:"dark:text-neutral-400"})}),e.jsx(u,{id:`${r}-underline`,type:"button",onClick:()=>d("<u>","</u>","underlined text"),disabled:l||c==="preview",className:"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",appearance:"ghost",status:"no-background",title:"Underline (Ctrl+U)",children:e.jsx(x.FormatUnderlined,{sx:{fontSize:20,color:"#667085"},className:"dark:text-neutral-400"})}),e.jsx("div",{className:"w-px h-5 bg-[#EAECF0] dark:bg-black-500 rounded-full"}),e.jsx(u,{id:`${r}-numbered-list`,type:"button",onClick:()=>$("ordered"),disabled:l||c==="preview",className:"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",appearance:"ghost",status:"no-background",title:"Numbered List",children:e.jsx(x.FormatListNumbered,{sx:{fontSize:20,color:"#667085"},className:"dark:text-neutral-400"})}),e.jsx(u,{id:`${r}-bullet-list`,type:"button",onClick:()=>$("bullet"),disabled:l||c==="preview",className:"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",appearance:"ghost",status:"no-background",title:"Bullet List",children:e.jsx(x.FormatListBulleted,{sx:{fontSize:20,color:"#667085"},className:"dark:text-neutral-400"})})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[a&&e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"text-sm font-medium text-[#475467] dark:text-neutral-400",children:[re,"/",a]}),e.jsx("div",{className:"w-px h-6 bg-[#EAECF0] dark:bg-black-500 rounded-full"})]}),ee?e.jsx(u,{id:`${r}-expand`,type:"button",onClick:()=>M(!0),disabled:l,className:"!p-0.5 !min-w-0 !h-auto ml-1 !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",appearance:"ghost",status:"no-background",title:"Expand Preview",children:e.jsx(x.OpenInFull,{sx:{fontSize:16,color:"#667085"},className:"dark:text-neutral-400"})}):e.jsx(me.Tabs,{variant:"switch",tabs:fe,activeTab:c,onTabClick:t=>ne(t),height:"h-5",iconsOnly:!0,tabIcons:{edit:e.jsx(U.EditIcon,{className:"h-md w-md dark:text-neutral-400"}),preview:e.jsx(U.VisibilityIcon,{className:"h-md w-md dark:text-neutral-400"})},className:"rounded-lg"})]})]}),e.jsx("div",{className:"px-3 py-2 relative",children:c==="edit"?e.jsxs(e.Fragment,{children:[e.jsx("textarea",{ref:t=>{typeof i=="function"?i(t):i&&(i.current=t),h.current=t,C&&(C.current=t)},id:r,value:n,defaultValue:D,onChange:t=>{const s=t.target.value;(!a||s.length<=a)&&m(s)},onKeyDown:ie,placeholder:W,rows:de,disabled:l,required:F,maxLength:a,className:b("w-full bg-transparent !focus:ring-0 !focus:border-none","font-inter font-medium text-sm leading-5","text-[#101828] dark:text-neutral-100","placeholder:text-neutral-400 dark:placeholder:text-neutral-500","focus:outline-none resize-none","scrollbar-none","[&::-webkit-scrollbar]:hidden","[-ms-overflow-style:none]","[scrollbar-width:none]",{"text-neutral-400 dark:text-neutral-500 cursor-not-allowed":l},{"pr-20":y||j},X)}),(y||j)&&c==="edit"&&e.jsxs("div",{className:"absolute right-1 top-2 flex items-center gap-1",children:[y&&n&&e.jsx("button",{id:`btn-input-field-clear-${p}`,className:"absolute inset-y-0 flex items-center cursor-pointer top-2 right-1 focus:outline-none",onClick:ce,type:"button",children:e.jsx(pe,{className:"text-neutral-300 dark:text-black-500 hover:text-neutral-400 dark:hover:text-black-400 transition-colors",size:16})}),j&&e.jsx("div",{className:"flex items-center",children:j})]})]}):e.jsx("div",{className:"w-full min-h-[92px] max-h-[400px] overflow-y-auto",children:e.jsx(K.MarkdownPreview,{content:n,linkTarget:S,className:E,noIndent:I,showMinimalPreview:T,acceptAdvanceContent:g})})})]}),e.jsx(ue.Modal,{open:ae,onCancel:()=>M(!1),title:"Markdown Preview",width:900,footer:null,children:e.jsx("div",{className:"max-h-[calc(100vh-200px)] overflow-y-auto p-4",children:e.jsx(K.MarkdownPreview,{content:n,linkTarget:S,className:E,noIndent:I,showMinimalPreview:T,acceptAdvanceContent:g})})}),e.jsx(A.AnimatePresence,{children:k&&e.jsx(A.motion.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:.2},children:e.jsx(H.Typography,{className:"mt-1 text-error-500",appearance:"custom",size:"extra-small",variant:"medium",children:k})})})]});return _?e.jsx(O,{title:_,children:P}):P});V.displayName="RichMarkdownInput";exports.RichMarkdownInput=V;
|
|
2
2
|
//# sourceMappingURL=RichMarkdownInput.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichMarkdownInput.cjs.js","sources":["../../../../src/components/forms/md-input/RichMarkdownInput.tsx"],"sourcesContent":["import cn from \"classnames\";\nimport { forwardRef, useRef, useState } from \"react\";\nimport {\n\tFormatBold,\n\tFormatItalic,\n\tFormatUnderlined,\n\tFormatListBulleted,\n\tFormatListNumbered,\n\tOpenInFull,\n\tEdit,\n\tVisibilityOutlined,\n} from \"@mui/icons-material\";\nimport { Modal } from \"../../data-display/modal/Modal\";\nimport Button from \"../../button/Button\";\nimport { Tabs } from \"../../navigation/tabs/Tabs\";\nimport { MarkdownPreview } from \"./MarkdownPreview\";\nimport { continueList, toggleList, type ListType } from \"./listEditing\";\nimport Tooltip from \"../../tooltip/Tooltip\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { Typography } from \"../../data-display/typography/Typography\";\nimport { InputLabel } from \"../shared/InputLabel\";\n\n/**\n * Props for the RichMarkdownInput component\n */\nexport interface RichMarkdownInputProps {\n\t/** Unique identifier for the markdown input */\n\tid?: string;\n\t/** Current markdown value */\n\tvalue?: string;\n\t/** Default value for the input */\n\tdefaultValue?: string;\n\t/** Placeholder text for the textarea */\n\tplaceholder?: string;\n\t/** Minimum number of visible text lines */\n\tminRows?: number;\n\t/** Maximum number of visible text lines */\n\tmaxRows?: number;\n\t/** Whether the input is disabled */\n\tisDisabled?: boolean;\n\t/** Additional CSS classes for the wrapper container */\n\tclassName?: string;\n\t/** Additional CSS classes for the textarea */\n\ttextareaClassName?: string;\n\t/** Additional CSS classes for the preview container */\n\tpreviewClassName?: string;\n\t/** Label text to display above the input */\n\tlabel?: string;\n\t/** Additional CSS classes for the label */\n\tlabelClassName?: string;\n\t/** Whether the field is required and the required indicator shows as conditional */\n\tisRequiredConditional?: boolean;\n\t/** Whether the field is required */\n\trequired?: boolean;\n\t/** Whether to show the preview button */\n\tshowPreviewOnModal?: boolean;\n\t/** Maximum character count */\n\tmaxLength?: number;\n\t/** Link target behavior: '_blank' for new tab, '_self' for current tab */\n\tlinkTarget?: '_blank' | '_self';\n\t/** Error message to display */\n\terrorMessage?: string;\n\t/** Tooltip text */\n\ttooltip?: string;\n\t/** Whether to preserve original case (no auto-lowercase) */\n\toriginalCase?: boolean;\n\t/** Icon to display at the end of the input */\n\tsuffixIcon?: React.ReactNode;\n\t/** Whether the input is clearable */\n\tisClearable?: boolean;\n\t/** Ref for the input element */\n\tinputref?: React.RefObject<HTMLTextAreaElement>;\n\t/** Whether to show the formatting help tooltip */\n\tshowFormattingHelp?: boolean;\n\t/** Keyboard event handler */\n\tonKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n\t/** Whether to remove indentation from lists and align all content to the left in preview */\n\tnoIndent?: boolean;\n\t/** Whether to display all content with uniform font size/weight (paragraph-like) while keeping formatting */\n\tshowMinimalPreview?: boolean;\n\t/** Whether to accept and render advanced content (code blocks, blockquotes, tables, images) in preview */\n\tacceptAdvanceContent?: boolean;\n\t/** Callback function called when the markdown value changes */\n\tonChange: (value: string) => void;\n}\n\n/**\n * The type of view for the rich markdown input\n */\ntype RichMarkdownInputViewType = \"edit\" | \"preview\";\n\n/**\n * The tabs for the rich markdown input\n */\nconst RichMarkdownInputTabs: RichMarkdownInputViewType[] = [\"edit\", \"preview\"];\n\n/**\n * Close icon for clearable input\n */\nconst CloseIcon = ({ className, size = 16 }: { className?: string; size?: number }) => (\n\t<svg\n\t\twidth={size}\n\t\theight={size}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstrokeWidth=\"2\"\n\t\tstrokeLinecap=\"round\"\n\t\tstrokeLinejoin=\"round\"\n\t\tclassName={className}\n\t>\n\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n\t</svg>\n);\n\n/**\n * A rich markdown input component with comprehensive formatting toolbar.\n * \n * **Text Formatting:**\n * - Bold (Ctrl+B) - Always visible\n * - Italic (Ctrl+I) - Always visible\n * - Underline (Ctrl+U) - Always visible\n * \n * **Lists:**\n * - Bullet lists - Always visible\n * - Numbered lists - Always visible\n * - Enter continues the list with the next marker; Enter on an empty item exits it\n * \n * **Features:**\n * - Edit/Preview toggle with icons\n * - Character counter (optional)\n * - Preview modal with scrolling\n * - Keyboard shortcuts\n * - Syntax highlighting for code blocks\n * - Responsive toolbar\n * - Dark mode support\n * - Configurable link target behavior\n * - Error message display\n * - Tooltip support\n * - Clear button (optional)\n * - Suffix icon support\n * - Custom keyboard handlers\n * - Minimal preview mode (uniform typography)\n * - Toggle advanced content in preview\n *\n * @example\n * ```tsx\n * <RichMarkdownInput\n * value={markdown}\n * onChange={setMarkdown}\n * placeholder=\"Enter description...\"\n * label=\"Description\"\n * maxLength={300}\n * linkTarget=\"_blank\"\n * isClearable\n * errorMessage=\"Invalid input\"\n * tooltip=\"Use markdown formatting\"\n * showMinimalPreview={false}\n * acceptAdvanceContent={true}\n * />\n * ```\n */\nexport const RichMarkdownInput = forwardRef<\n\tHTMLTextAreaElement,\n\tRichMarkdownInputProps\n>(\n\t(\n\t\t{\n\t\t\tid,\n\t\t\tvalue = \"\",\n\t\t\tdefaultValue,\n\t\t\tonChange,\n\t\t\tplaceholder = \"Enter markdown content...\",\n\t\t\tminRows = 4,\n\t\t\tmaxRows = 20,\n\t\t\tisDisabled = false,\n\t\t\tclassName,\n\t\t\ttextareaClassName,\n\t\t\tpreviewClassName,\n\t\t\tlabel,\n\t\t\tlabelClassName,\n\t\t\tisRequiredConditional,\n\t\t\trequired = false,\n\t\t\tshowPreviewOnModal = false,\n\t\t\tmaxLength,\n\t\t\tlinkTarget = '_blank',\n\t\t\terrorMessage,\n\t\t\ttooltip,\n\t\t\toriginalCase,\n\t\t\tsuffixIcon,\n\t\t\tisClearable,\n\t\t\tinputref,\n\t\t\tshowFormattingHelp = true,\n\t\t\tonKeyDown,\n\t\t\tnoIndent = false,\n\t\t\tshowMinimalPreview = false,\n\t\t\tacceptAdvanceContent = true,\n\t\t},\n\t\tref\n\t) => {\n\t\tconst [mode, setMode] = useState<RichMarkdownInputViewType>(\"edit\");\n\t\tconst [isPreviewOpen, setIsPreviewOpen] = useState(false);\n\t\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\t\tconst inputId = id || `rich-md-input-${Math.random().toString(36).slice(2, 11)}`;\n\n\t\tconst charCount = value.length;\n\n\t\t/**\n\t\t * Insert markdown syntax at cursor position\n\t\t */\n\t\tconst insertMarkdown = (before: string, after: string = \"\", placeholder: string = \"\") => {\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\tif (!textarea) return;\n\n\t\t\tconst start = textarea.selectionStart;\n\t\t\tconst end = textarea.selectionEnd;\n\t\t\tconst selectedText = value.substring(start, end);\n\t\t\tconst textToInsert = selectedText || placeholder;\n\n\t\t\tconst newValue = value.substring(0, start) + before + textToInsert + after + value.substring(end);\n\t\t\tonChange(newValue);\n\n\t\t\t// Set cursor position after insertion\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst newCursorPos = start + before.length + (selectedText ? selectedText.length : 0);\n\t\t\t\ttextarea.focus();\n\t\t\t\ttextarea.setSelectionRange(newCursorPos, newCursorPos + (selectedText ? 0 : placeholder.length));\n\t\t\t}, 0);\n\t\t};\n\n\t\t/**\n\t\t * Toggle list markers on the selected line(s).\n\t\t * Ordered lists are numbered sequentially (1., 2., 3., ...) so the raw\n\t\t * markdown matches what the preview renders.\n\t\t */\n\t\tconst insertList = (type: ListType) => {\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\tif (!textarea) return;\n\n\t\t\tconst result = toggleList(value, textarea.selectionStart, textarea.selectionEnd, type);\n\t\t\tif (maxLength && result.value.length > maxLength) return;\n\n\t\t\tonChange(result.value);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\ttextarea.focus();\n\t\t\t\ttextarea.setSelectionRange(result.caret, result.caret);\n\t\t\t}, 0);\n\t\t};\n\n\t\t/**\n\t\t * Continue the list the caret sits in when Enter is pressed.\n\t\t * Returns true when the key was handled and the default should be prevented.\n\t\t */\n\t\tconst continueListOnEnter = () => {\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\tif (!textarea) return false;\n\n\t\t\tconst result = continueList(value, textarea.selectionStart, textarea.selectionEnd);\n\t\t\tif (!result) return false;\n\t\t\tif (maxLength && result.value.length > maxLength) return false;\n\n\t\t\tonChange(result.value);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\ttextarea.focus();\n\t\t\t\ttextarea.setSelectionRange(result.caret, result.caret);\n\t\t\t}, 0);\n\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * Handle keyboard shortcuts\n\t\t */\n\t\tconst handleKeyDownInternal = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\t// Call external handler first\n\t\t\tonKeyDown?.(e);\n\n\t\t\tif (\n\t\t\t\te.key === 'Enter' &&\n\t\t\t\t!e.shiftKey &&\n\t\t\t\t!e.altKey &&\n\t\t\t\t!e.metaKey &&\n\t\t\t\t!e.ctrlKey &&\n\t\t\t\t!e.defaultPrevented\n\t\t\t) {\n\t\t\t\tif (continueListOnEnter()) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.metaKey || e.ctrlKey) {\n\t\t\t\tswitch (e.key.toLowerCase()) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('**', '**', 'bold text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('*', '*', 'italic text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('<u>', '</u>', 'underlined text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'k':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('[', '](url)', 'link text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('```', '```', 'code');\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Handle clear button click\n\t\t */\n\t\tconst handleClear = () => {\n\t\t\tonChange('');\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\ttextarea?.focus();\n\t\t};\n\n\t\t/**\n\t\t * Calculate dynamic rows based on content\n\t\t */\n\t\tconst calculateRows = () => {\n\t\t\tconst lineCount = (value.match(/\\n/g) || []).length + 1;\n\t\t\treturn Math.min(maxRows, Math.max(minRows, lineCount));\n\t\t};\n\n\t\tconst rows = calculateRows();\n\n\t\tconst content = (\n\t\t\t<div className={cn(\"flex flex-col\", className)}>\n\t\t\t\t<div className={`flex flex-row items-center ${label ? \"justify-between\" : \"justify-end\"} w-full`}>\n\t\t\t\t\t{/* Label */}\n\t\t\t\t\t{label && (\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\t\t\tclassName={`mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${!originalCase ? \"capitalize\" : \"\"\n\t\t\t\t\t\t\t\t} ${labelClassName || \"!uppercse\"}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"flex flex-wrap items-center justify-between w-full\">\n\t\t\t\t\t\t\t\t<div className=\"inline-flex flex-wrap items-center gap-1\">\n\t\t\t\t\t\t\t\t\t<InputLabel label={label || \"\"} required={required || false} isRequiredConditional={isRequiredConditional || false} />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Markdown Formatting Info */}\n\t\t\t\t\t{showFormattingHelp && (\n\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\tplacement=\"bottom-end\"\n\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-center py-2 px-3 min-w-[220px] gap-2 bg-neutral-900 rounded-lg\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-start gap-1 w-full\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">**bold**</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <strong>bold</strong> text\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">*italic*</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <em>italic</em> text\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">`code`</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <code>inline code</code>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\"><u>text</u></span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <u>underline</u>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">~~strike~~</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <del>strike</del>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">- item</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ bullet list\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">1. item</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ numbered list\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{acceptAdvanceContent && (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">## heading</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t→ heading 2\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">[link](url)</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ hyperlink\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{acceptAdvanceContent && (\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-start gap-1 w-full\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">> quote</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t→ blockquote\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-start gap-0.5 w-full mt-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-center gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tTable:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col px-1 py-0.5 bg-neutral-700 ml-2 rounded-sm gap-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap\">| Header 1 | Header 2 | Header 3 |</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap\">| :--- | :---: | ---: |</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap\">| Left | Center | Right |</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Typography className=\"mb-2 text-xs font-medium text-primary-700 inline-flex items-center gap-1 cursor-pointer\">\n\t\t\t\t\t\t\t\tFormatting help ?\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Main Container */}\n\t\t\t\t<div className={cn(\n\t\t\t\t\t\"flex flex-col border shadow-[0px_1px_2px_rgba(0,0,0,0.05)] rounded-lg bg-white dark:bg-black-700 w-full\",\n\t\t\t\t\terrorMessage\n\t\t\t\t\t\t? \"border-red-300 focus-within:border-red-500 focus-within:shadow-[0_0_0_1.5px_var(--color-red-200)]\"\n\t\t\t\t\t\t: \"border-[#EAECF0] dark:border-black-600 focus-within:border-primary-600 dark:focus-within:border-primary-400 focus-within:shadow-[0_0_0_1.5px_var(--color-primary-100)] dark:focus-within:shadow-[0_0_0_1.5px_var(--color-primary-950)]\"\n\t\t\t\t)}>\n\t\t\t\t\t{/* Toolbar */}\n\t\t\t\t\t<div className={cn(\n\t\t\t\t\t\t\"flex flex-row justify-between items-center px-3 py-2 gap-2 h-11 rounded-t-lg bg-[#F9FAFB] dark:bg-black-600 border-b border-[#EAECF0] dark:border-black-600\"\n\t\t\t\t\t)}>\n\t\t\t\t\t\t{/* Left: Formatting Buttons */}\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-bold`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertMarkdown('**', '**', 'bold text')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Bold (Ctrl+B)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatBold sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-italic`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertMarkdown('*', '*', 'italic text')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Italic (Ctrl+I)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatItalic sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-underline`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertMarkdown('<u>', '</u>', 'underlined text')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Underline (Ctrl+U)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatUnderlined sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<div className=\"w-px h-5 bg-[#EAECF0] dark:bg-black-500 rounded-full\" />\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-numbered-list`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertList('ordered')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Numbered List\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatListNumbered sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-bullet-list`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertList('bullet')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Bullet List\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatListBulleted sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t{/* Center: Character Count */}\n\t\t\t\t\t\t\t{maxLength && (\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm font-medium text-[#475467] dark:text-neutral-400\">\n\t\t\t\t\t\t\t\t\t\t{charCount}/{maxLength}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<div className=\"w-px h-6 bg-[#EAECF0] dark:bg-black-500 rounded-full\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* Right: Edit/Preview Toggle */}\n\t\t\t\t\t\t\t{showPreviewOnModal ? (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tid={`${inputId}-expand`}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={() => setIsPreviewOpen(true)}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto ml-1 !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\t\ttitle=\"Expand Preview\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<OpenInFull sx={{ fontSize: 16, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Tabs<RichMarkdownInputViewType>\n\t\t\t\t\t\t\t\t\tvariant=\"switch\"\n\t\t\t\t\t\t\t\t\ttabs={RichMarkdownInputTabs}\n\t\t\t\t\t\t\t\t\tactiveTab={mode}\n\t\t\t\t\t\t\t\t\tonTabClick={(tab) => setMode(tab)}\n\t\t\t\t\t\t\t\t\theight=\"h-5\"\n\t\t\t\t\t\t\t\t\ticonsOnly\n\t\t\t\t\t\t\t\t\ttabIcons={{\n\t\t\t\t\t\t\t\t\t\tedit: (<Edit sx={{ fontSize: 16, color: '#667085' }} className=\"dark:text-neutral-400\" />),\n\t\t\t\t\t\t\t\t\t\tpreview: (\n\t\t\t\t\t\t\t\t\t\t\t<VisibilityOutlined sx={{ fontSize: 16, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-lg\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Content Area */}\n\t\t\t\t\t<div className=\"px-3 py-2 relative\">\n\t\t\t\t\t\t{mode === \"edit\" ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\t\t\t\t// Handle all refs: forwarded ref, internal ref, and inputref\n\t\t\t\t\t\t\t\t\t\tif (typeof ref === 'function') {\n\t\t\t\t\t\t\t\t\t\t\tref(node);\n\t\t\t\t\t\t\t\t\t\t} else if (ref) {\n\t\t\t\t\t\t\t\t\t\t\t(ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t(textareaRef as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n\t\t\t\t\t\t\t\t\t\tif (inputref) {\n\t\t\t\t\t\t\t\t\t\t\t(inputref as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\t\t\tconst newValue = originalCase ? e.target.value : e.target.value;\n\t\t\t\t\t\t\t\t\t\tif (!maxLength || newValue.length <= maxLength) {\n\t\t\t\t\t\t\t\t\t\t\tonChange(newValue);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonKeyDown={handleKeyDownInternal}\n\t\t\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\t\t\trows={rows}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\t\t\t\tmaxLength={maxLength}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t// Base styles\n\t\t\t\t\t\t\t\t\t\t\"w-full bg-transparent !focus:ring-0 !focus:border-none\",\n\t\t\t\t\t\t\t\t\t\t\"font-inter font-medium text-sm leading-5\",\n\t\t\t\t\t\t\t\t\t\t\"text-[#101828] dark:text-neutral-100\",\n\t\t\t\t\t\t\t\t\t\t\"placeholder:text-neutral-400 dark:placeholder:text-neutral-500\",\n\t\t\t\t\t\t\t\t\t\t\"focus:outline-none resize-none\",\n\t\t\t\t\t\t\t\t\t\t// Hide scrollbar\n\t\t\t\t\t\t\t\t\t\t\"scrollbar-none\",\n\t\t\t\t\t\t\t\t\t\t\"[&::-webkit-scrollbar]:hidden\",\n\t\t\t\t\t\t\t\t\t\t\"[-ms-overflow-style:none]\",\n\t\t\t\t\t\t\t\t\t\t\"[scrollbar-width:none]\",\n\t\t\t\t\t\t\t\t\t\t// Disabled state\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"text-neutral-400 dark:text-neutral-500 cursor-not-allowed\": isDisabled,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t// Add padding if suffix icons exist\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"pr-20\": isClearable || suffixIcon,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\ttextareaClassName\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{/* Suffix Icons */}\n\t\t\t\t\t\t\t\t{(isClearable || suffixIcon) && mode === \"edit\" && (\n\t\t\t\t\t\t\t\t\t<div className=\"absolute right-1 top-2 flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t{isClearable && value && (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\tid={`btn-input-field-clear-${id}`}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"absolute inset-y-0 flex items-center cursor-pointer top-2 right-1 focus:outline-none\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleClear}\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<CloseIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-neutral-300 dark:text-black-500 hover:text-neutral-400 dark:hover:text-black-400 transition-colors\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{suffixIcon && <div className=\"flex items-center\">{suffixIcon}</div>}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"w-full min-h-[92px] max-h-[400px] overflow-y-auto\">\n\t\t\t\t\t\t\t\t<MarkdownPreview\n\t\t\t\t\t\t\t\t\tcontent={value}\n\t\t\t\t\t\t\t\t\tlinkTarget={linkTarget}\n\t\t\t\t\t\t\t\t\tclassName={previewClassName}\n\t\t\t\t\t\t\t\t\tnoIndent={noIndent}\n\t\t\t\t\t\t\t\t\tshowMinimalPreview={showMinimalPreview}\n\t\t\t\t\t\t\t\t\tacceptAdvanceContent={acceptAdvanceContent}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Expanded Preview Modal */}\n\t\t\t\t<Modal\n\t\t\t\t\topen={isPreviewOpen}\n\t\t\t\t\tonCancel={() => setIsPreviewOpen(false)}\n\t\t\t\t\ttitle=\"Markdown Preview\"\n\t\t\t\t\twidth={900}\n\t\t\t\t\tfooter={null}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"max-h-[calc(100vh-200px)] overflow-y-auto p-4\">\n\t\t\t\t\t\t<MarkdownPreview\n\t\t\t\t\t\t\tcontent={value}\n\t\t\t\t\t\t\tlinkTarget={linkTarget}\n\t\t\t\t\t\t\tclassName={previewClassName}\n\t\t\t\t\t\t\tnoIndent={noIndent}\n\t\t\t\t\t\t\tshowMinimalPreview={showMinimalPreview}\n\t\t\t\t\t\t\tacceptAdvanceContent={acceptAdvanceContent}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</Modal>\n\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{errorMessage && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -10 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, y: -10 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\tclassName=\"mt-1 text-error-500\"\n\t\t\t\t\t\t\t\tappearance=\"custom\"\n\t\t\t\t\t\t\t\tsize=\"extra-small\"\n\t\t\t\t\t\t\t\tvariant=\"medium\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t);\n\n\t\treturn tooltip ? (\n\t\t\t<Tooltip title={tooltip}>\n\t\t\t\t{content}\n\t\t\t</Tooltip>\n\t\t) : (\n\t\t\tcontent\n\t\t);\n\t}\n);\n\nRichMarkdownInput.displayName = \"RichMarkdownInput\";\n"],"names":["RichMarkdownInputTabs","CloseIcon","className","size","jsxs","jsx","RichMarkdownInput","forwardRef","id","value","defaultValue","onChange","placeholder","minRows","maxRows","isDisabled","textareaClassName","previewClassName","label","labelClassName","isRequiredConditional","required","showPreviewOnModal","maxLength","linkTarget","errorMessage","tooltip","originalCase","suffixIcon","isClearable","inputref","showFormattingHelp","onKeyDown","noIndent","showMinimalPreview","acceptAdvanceContent","ref","mode","setMode","useState","isPreviewOpen","setIsPreviewOpen","textareaRef","useRef","inputId","charCount","insertMarkdown","before","after","textarea","start","end","selectedText","textToInsert","newValue","newCursorPos","insertList","type","result","toggleList","continueListOnEnter","continueList","handleKeyDownInternal","e","handleClear","rows","lineCount","content","cn","InputLabel","Tooltip","Fragment","Typography","Button","FormatBold","FormatItalic","FormatUnderlined","FormatListNumbered","FormatListBulleted","OpenInFull","Tabs","tab","Edit","VisibilityOutlined","node","MarkdownPreview","Modal","AnimatePresence","motion"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RichMarkdownInput.cjs.js","sources":["../../../../src/components/forms/md-input/RichMarkdownInput.tsx"],"sourcesContent":["import cn from \"classnames\";\nimport { forwardRef, useRef, useState } from \"react\";\nimport {\n\tFormatBold,\n\tFormatItalic,\n\tFormatUnderlined,\n\tFormatListBulleted,\n\tFormatListNumbered,\n\tOpenInFull,\n\tEdit,\n\tVisibilityOutlined,\n} from \"@mui/icons-material\";\nimport { Modal } from \"../../data-display/modal/Modal\";\nimport Button from \"../../button/Button\";\nimport { Tabs } from \"../../navigation/tabs/Tabs\";\nimport { MarkdownPreview } from \"./MarkdownPreview\";\nimport { continueList, toggleList, type ListType } from \"./listEditing\";\nimport Tooltip from \"../../tooltip/Tooltip\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { Typography } from \"../../data-display/typography/Typography\";\nimport { InputLabel } from \"../shared/InputLabel\";\nimport { EditIcon, VisibilityIcon } from \"../../icon\";\n\n/**\n * Props for the RichMarkdownInput component\n */\nexport interface RichMarkdownInputProps {\n\t/** Unique identifier for the markdown input */\n\tid?: string;\n\t/** Current markdown value */\n\tvalue?: string;\n\t/** Default value for the input */\n\tdefaultValue?: string;\n\t/** Placeholder text for the textarea */\n\tplaceholder?: string;\n\t/** Minimum number of visible text lines */\n\tminRows?: number;\n\t/** Maximum number of visible text lines */\n\tmaxRows?: number;\n\t/** Whether the input is disabled */\n\tisDisabled?: boolean;\n\t/** Additional CSS classes for the wrapper container */\n\tclassName?: string;\n\t/** Additional CSS classes for the textarea */\n\ttextareaClassName?: string;\n\t/** Additional CSS classes for the preview container */\n\tpreviewClassName?: string;\n\t/** Label text to display above the input */\n\tlabel?: string;\n\t/** Additional CSS classes for the label */\n\tlabelClassName?: string;\n\t/** Whether the field is required and the required indicator shows as conditional */\n\tisRequiredConditional?: boolean;\n\t/** Whether the field is required */\n\trequired?: boolean;\n\t/** Whether to show the preview button */\n\tshowPreviewOnModal?: boolean;\n\t/** Maximum character count */\n\tmaxLength?: number;\n\t/** Link target behavior: '_blank' for new tab, '_self' for current tab */\n\tlinkTarget?: '_blank' | '_self';\n\t/** Error message to display */\n\terrorMessage?: string;\n\t/** Tooltip text */\n\ttooltip?: string;\n\t/** Whether to preserve original case (no auto-lowercase) */\n\toriginalCase?: boolean;\n\t/** Icon to display at the end of the input */\n\tsuffixIcon?: React.ReactNode;\n\t/** Whether the input is clearable */\n\tisClearable?: boolean;\n\t/** Ref for the input element */\n\tinputref?: React.RefObject<HTMLTextAreaElement>;\n\t/** Whether to show the formatting help tooltip */\n\tshowFormattingHelp?: boolean;\n\t/** Keyboard event handler */\n\tonKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n\t/** Whether to remove indentation from lists and align all content to the left in preview */\n\tnoIndent?: boolean;\n\t/** Whether to display all content with uniform font size/weight (paragraph-like) while keeping formatting */\n\tshowMinimalPreview?: boolean;\n\t/** Whether to accept and render advanced content (code blocks, blockquotes, tables, images) in preview */\n\tacceptAdvanceContent?: boolean;\n\t/** Callback function called when the markdown value changes */\n\tonChange: (value: string) => void;\n}\n\n/**\n * The type of view for the rich markdown input\n */\ntype RichMarkdownInputViewType = \"edit\" | \"preview\";\n\n/**\n * The tabs for the rich markdown input\n */\nconst RichMarkdownInputTabs: RichMarkdownInputViewType[] = [\"edit\", \"preview\"];\n\n/**\n * Close icon for clearable input\n */\nconst CloseIcon = ({ className, size = 16 }: { className?: string; size?: number }) => (\n\t<svg\n\t\twidth={size}\n\t\theight={size}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstrokeWidth=\"2\"\n\t\tstrokeLinecap=\"round\"\n\t\tstrokeLinejoin=\"round\"\n\t\tclassName={className}\n\t>\n\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n\t</svg>\n);\n\n/**\n * A rich markdown input component with comprehensive formatting toolbar.\n * \n * **Text Formatting:**\n * - Bold (Ctrl+B) - Always visible\n * - Italic (Ctrl+I) - Always visible\n * - Underline (Ctrl+U) - Always visible\n * \n * **Lists:**\n * - Bullet lists - Always visible\n * - Numbered lists - Always visible\n * - Enter continues the list with the next marker; Enter on an empty item exits it\n * \n * **Features:**\n * - Edit/Preview toggle with icons\n * - Character counter (optional)\n * - Preview modal with scrolling\n * - Keyboard shortcuts\n * - Syntax highlighting for code blocks\n * - Responsive toolbar\n * - Dark mode support\n * - Configurable link target behavior\n * - Error message display\n * - Tooltip support\n * - Clear button (optional)\n * - Suffix icon support\n * - Custom keyboard handlers\n * - Minimal preview mode (uniform typography)\n * - Toggle advanced content in preview\n *\n * @example\n * ```tsx\n * <RichMarkdownInput\n * value={markdown}\n * onChange={setMarkdown}\n * placeholder=\"Enter description...\"\n * label=\"Description\"\n * maxLength={300}\n * linkTarget=\"_blank\"\n * isClearable\n * errorMessage=\"Invalid input\"\n * tooltip=\"Use markdown formatting\"\n * showMinimalPreview={false}\n * acceptAdvanceContent={true}\n * />\n * ```\n */\nexport const RichMarkdownInput = forwardRef<\n\tHTMLTextAreaElement,\n\tRichMarkdownInputProps\n>(\n\t(\n\t\t{\n\t\t\tid,\n\t\t\tvalue = \"\",\n\t\t\tdefaultValue,\n\t\t\tonChange,\n\t\t\tplaceholder = \"Enter markdown content...\",\n\t\t\tminRows = 4,\n\t\t\tmaxRows = 20,\n\t\t\tisDisabled = false,\n\t\t\tclassName,\n\t\t\ttextareaClassName,\n\t\t\tpreviewClassName,\n\t\t\tlabel,\n\t\t\tlabelClassName,\n\t\t\tisRequiredConditional,\n\t\t\trequired = false,\n\t\t\tshowPreviewOnModal = false,\n\t\t\tmaxLength,\n\t\t\tlinkTarget = '_blank',\n\t\t\terrorMessage,\n\t\t\ttooltip,\n\t\t\toriginalCase,\n\t\t\tsuffixIcon,\n\t\t\tisClearable,\n\t\t\tinputref,\n\t\t\tshowFormattingHelp = true,\n\t\t\tonKeyDown,\n\t\t\tnoIndent = false,\n\t\t\tshowMinimalPreview = false,\n\t\t\tacceptAdvanceContent = true,\n\t\t},\n\t\tref\n\t) => {\n\t\tconst [mode, setMode] = useState<RichMarkdownInputViewType>(\"edit\");\n\t\tconst [isPreviewOpen, setIsPreviewOpen] = useState(false);\n\t\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\t\tconst inputId = id || `rich-md-input-${Math.random().toString(36).slice(2, 11)}`;\n\n\t\tconst charCount = value.length;\n\n\t\t/**\n\t\t * Insert markdown syntax at cursor position\n\t\t */\n\t\tconst insertMarkdown = (before: string, after: string = \"\", placeholder: string = \"\") => {\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\tif (!textarea) return;\n\n\t\t\tconst start = textarea.selectionStart;\n\t\t\tconst end = textarea.selectionEnd;\n\t\t\tconst selectedText = value.substring(start, end);\n\t\t\tconst textToInsert = selectedText || placeholder;\n\n\t\t\tconst newValue = value.substring(0, start) + before + textToInsert + after + value.substring(end);\n\t\t\tonChange(newValue);\n\n\t\t\t// Set cursor position after insertion\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst newCursorPos = start + before.length + (selectedText ? selectedText.length : 0);\n\t\t\t\ttextarea.focus();\n\t\t\t\ttextarea.setSelectionRange(newCursorPos, newCursorPos + (selectedText ? 0 : placeholder.length));\n\t\t\t}, 0);\n\t\t};\n\n\t\t/**\n\t\t * Toggle list markers on the selected line(s).\n\t\t * Ordered lists are numbered sequentially (1., 2., 3., ...) so the raw\n\t\t * markdown matches what the preview renders.\n\t\t */\n\t\tconst insertList = (type: ListType) => {\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\tif (!textarea) return;\n\n\t\t\tconst result = toggleList(value, textarea.selectionStart, textarea.selectionEnd, type);\n\t\t\tif (maxLength && result.value.length > maxLength) return;\n\n\t\t\tonChange(result.value);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\ttextarea.focus();\n\t\t\t\ttextarea.setSelectionRange(result.caret, result.caret);\n\t\t\t}, 0);\n\t\t};\n\n\t\t/**\n\t\t * Continue the list the caret sits in when Enter is pressed.\n\t\t * Returns true when the key was handled and the default should be prevented.\n\t\t */\n\t\tconst continueListOnEnter = () => {\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\tif (!textarea) return false;\n\n\t\t\tconst result = continueList(value, textarea.selectionStart, textarea.selectionEnd);\n\t\t\tif (!result) return false;\n\t\t\tif (maxLength && result.value.length > maxLength) return false;\n\n\t\t\tonChange(result.value);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\ttextarea.focus();\n\t\t\t\ttextarea.setSelectionRange(result.caret, result.caret);\n\t\t\t}, 0);\n\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * Handle keyboard shortcuts\n\t\t */\n\t\tconst handleKeyDownInternal = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\t// Call external handler first\n\t\t\tonKeyDown?.(e);\n\n\t\t\tif (\n\t\t\t\te.key === 'Enter' &&\n\t\t\t\t!e.shiftKey &&\n\t\t\t\t!e.altKey &&\n\t\t\t\t!e.metaKey &&\n\t\t\t\t!e.ctrlKey &&\n\t\t\t\t!e.defaultPrevented\n\t\t\t) {\n\t\t\t\tif (continueListOnEnter()) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.metaKey || e.ctrlKey) {\n\t\t\t\tswitch (e.key.toLowerCase()) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('**', '**', 'bold text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('*', '*', 'italic text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('<u>', '</u>', 'underlined text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'k':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('[', '](url)', 'link text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('```', '```', 'code');\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Handle clear button click\n\t\t */\n\t\tconst handleClear = () => {\n\t\t\tonChange('');\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\ttextarea?.focus();\n\t\t};\n\n\t\t/**\n\t\t * Calculate dynamic rows based on content\n\t\t */\n\t\tconst calculateRows = () => {\n\t\t\tconst lineCount = (value.match(/\\n/g) || []).length + 1;\n\t\t\treturn Math.min(maxRows, Math.max(minRows, lineCount));\n\t\t};\n\n\t\tconst rows = calculateRows();\n\n\t\tconst content = (\n\t\t\t<div className={cn(\"flex flex-col\", className)}>\n\t\t\t\t<div className={`flex flex-row items-center ${label ? \"justify-between\" : \"justify-end\"} w-full`}>\n\t\t\t\t\t{/* Label */}\n\t\t\t\t\t{label && (\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\t\t\tclassName={`mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${!originalCase ? \"capitalize\" : \"\"\n\t\t\t\t\t\t\t\t} ${labelClassName || \"!uppercse\"}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"flex flex-wrap items-center justify-between w-full\">\n\t\t\t\t\t\t\t\t<div className=\"inline-flex flex-wrap items-center gap-1\">\n\t\t\t\t\t\t\t\t\t<InputLabel label={label || \"\"} required={required || false} isRequiredConditional={isRequiredConditional || false} />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Markdown Formatting Info */}\n\t\t\t\t\t{showFormattingHelp && (\n\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\tplacement=\"bottom-end\"\n\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-center py-2 px-3 min-w-[220px] gap-2 bg-neutral-900 rounded-lg\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-start gap-1 w-full\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">**bold**</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <strong>bold</strong> text\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">*italic*</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <em>italic</em> text\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">`code`</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <code>inline code</code>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\"><u>text</u></span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <u>underline</u>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">~~strike~~</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <del>strike</del>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">- item</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ bullet list\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">1. item</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ numbered list\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{acceptAdvanceContent && (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">## heading</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t→ heading 2\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">[link](url)</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ hyperlink\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{acceptAdvanceContent && (\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-start gap-1 w-full\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">> quote</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t→ blockquote\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-start gap-0.5 w-full mt-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-center gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tTable:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col px-1 py-0.5 bg-neutral-700 ml-2 rounded-sm gap-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap\">| Header 1 | Header 2 | Header 3 |</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap\">| :--- | :---: | ---: |</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap\">| Left | Center | Right |</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Typography className=\"mb-2 text-xs font-medium text-primary-700 inline-flex items-center gap-1 cursor-pointer\">\n\t\t\t\t\t\t\t\tFormatting help ?\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Main Container */}\n\t\t\t\t<div className={cn(\n\t\t\t\t\t\"flex flex-col border shadow-[0px_1px_2px_rgba(0,0,0,0.05)] rounded-lg bg-white dark:bg-black-700 w-full\",\n\t\t\t\t\terrorMessage\n\t\t\t\t\t\t? \"border-red-300 focus-within:border-red-500 focus-within:shadow-[0_0_0_1.5px_var(--color-red-200)]\"\n\t\t\t\t\t\t: \"border-[#EAECF0] dark:border-black-600 focus-within:border-primary-600 dark:focus-within:border-primary-400 focus-within:shadow-[0_0_0_1.5px_var(--color-primary-100)] dark:focus-within:shadow-[0_0_0_1.5px_var(--color-primary-950)]\"\n\t\t\t\t)}>\n\t\t\t\t\t{/* Toolbar */}\n\t\t\t\t\t<div className={cn(\n\t\t\t\t\t\t\"flex flex-row justify-between items-center px-3 py-2 gap-2 h-11 rounded-t-lg bg-[#F9FAFB] dark:bg-black-600 border-b border-[#EAECF0] dark:border-black-600\"\n\t\t\t\t\t)}>\n\t\t\t\t\t\t{/* Left: Formatting Buttons */}\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-bold`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertMarkdown('**', '**', 'bold text')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Bold (Ctrl+B)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatBold sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-italic`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertMarkdown('*', '*', 'italic text')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Italic (Ctrl+I)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatItalic sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-underline`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertMarkdown('<u>', '</u>', 'underlined text')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Underline (Ctrl+U)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatUnderlined sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<div className=\"w-px h-5 bg-[#EAECF0] dark:bg-black-500 rounded-full\" />\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-numbered-list`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertList('ordered')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Numbered List\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatListNumbered sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-bullet-list`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertList('bullet')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Bullet List\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatListBulleted sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t{/* Center: Character Count */}\n\t\t\t\t\t\t\t{maxLength && (\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm font-medium text-[#475467] dark:text-neutral-400\">\n\t\t\t\t\t\t\t\t\t\t{charCount}/{maxLength}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<div className=\"w-px h-6 bg-[#EAECF0] dark:bg-black-500 rounded-full\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* Right: Edit/Preview Toggle */}\n\t\t\t\t\t\t\t{showPreviewOnModal ? (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tid={`${inputId}-expand`}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={() => setIsPreviewOpen(true)}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto ml-1 !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\t\ttitle=\"Expand Preview\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<OpenInFull sx={{ fontSize: 16, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Tabs<RichMarkdownInputViewType>\n\t\t\t\t\t\t\t\t\tvariant=\"switch\"\n\t\t\t\t\t\t\t\t\ttabs={RichMarkdownInputTabs}\n\t\t\t\t\t\t\t\t\tactiveTab={mode}\n\t\t\t\t\t\t\t\t\tonTabClick={(tab) => setMode(tab)}\n\t\t\t\t\t\t\t\t\theight=\"h-5\"\n\t\t\t\t\t\t\t\t\ticonsOnly\n\t\t\t\t\t\t\t\t\ttabIcons={{\n\t\t\t\t\t\t\t\t\t\tedit: (<EditIcon className=\"h-md w-md dark:text-neutral-400\" />),\n\t\t\t\t\t\t\t\t\t\tpreview: (\n\t\t\t\t\t\t\t\t\t\t\t<VisibilityIcon className=\"h-md w-md dark:text-neutral-400\" />\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-lg\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Content Area */}\n\t\t\t\t\t<div className=\"px-3 py-2 relative\">\n\t\t\t\t\t\t{mode === \"edit\" ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\t\t\t\t// Handle all refs: forwarded ref, internal ref, and inputref\n\t\t\t\t\t\t\t\t\t\tif (typeof ref === 'function') {\n\t\t\t\t\t\t\t\t\t\t\tref(node);\n\t\t\t\t\t\t\t\t\t\t} else if (ref) {\n\t\t\t\t\t\t\t\t\t\t\t(ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t(textareaRef as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n\t\t\t\t\t\t\t\t\t\tif (inputref) {\n\t\t\t\t\t\t\t\t\t\t\t(inputref as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\t\t\tconst newValue = originalCase ? e.target.value : e.target.value;\n\t\t\t\t\t\t\t\t\t\tif (!maxLength || newValue.length <= maxLength) {\n\t\t\t\t\t\t\t\t\t\t\tonChange(newValue);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonKeyDown={handleKeyDownInternal}\n\t\t\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\t\t\trows={rows}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\t\t\t\tmaxLength={maxLength}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t// Base styles\n\t\t\t\t\t\t\t\t\t\t\"w-full bg-transparent !focus:ring-0 !focus:border-none\",\n\t\t\t\t\t\t\t\t\t\t\"font-inter font-medium text-sm leading-5\",\n\t\t\t\t\t\t\t\t\t\t\"text-[#101828] dark:text-neutral-100\",\n\t\t\t\t\t\t\t\t\t\t\"placeholder:text-neutral-400 dark:placeholder:text-neutral-500\",\n\t\t\t\t\t\t\t\t\t\t\"focus:outline-none resize-none\",\n\t\t\t\t\t\t\t\t\t\t// Hide scrollbar\n\t\t\t\t\t\t\t\t\t\t\"scrollbar-none\",\n\t\t\t\t\t\t\t\t\t\t\"[&::-webkit-scrollbar]:hidden\",\n\t\t\t\t\t\t\t\t\t\t\"[-ms-overflow-style:none]\",\n\t\t\t\t\t\t\t\t\t\t\"[scrollbar-width:none]\",\n\t\t\t\t\t\t\t\t\t\t// Disabled state\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"text-neutral-400 dark:text-neutral-500 cursor-not-allowed\": isDisabled,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t// Add padding if suffix icons exist\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"pr-20\": isClearable || suffixIcon,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\ttextareaClassName\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{/* Suffix Icons */}\n\t\t\t\t\t\t\t\t{(isClearable || suffixIcon) && mode === \"edit\" && (\n\t\t\t\t\t\t\t\t\t<div className=\"absolute right-1 top-2 flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t{isClearable && value && (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\tid={`btn-input-field-clear-${id}`}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"absolute inset-y-0 flex items-center cursor-pointer top-2 right-1 focus:outline-none\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleClear}\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<CloseIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-neutral-300 dark:text-black-500 hover:text-neutral-400 dark:hover:text-black-400 transition-colors\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{suffixIcon && <div className=\"flex items-center\">{suffixIcon}</div>}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"w-full min-h-[92px] max-h-[400px] overflow-y-auto\">\n\t\t\t\t\t\t\t\t<MarkdownPreview\n\t\t\t\t\t\t\t\t\tcontent={value}\n\t\t\t\t\t\t\t\t\tlinkTarget={linkTarget}\n\t\t\t\t\t\t\t\t\tclassName={previewClassName}\n\t\t\t\t\t\t\t\t\tnoIndent={noIndent}\n\t\t\t\t\t\t\t\t\tshowMinimalPreview={showMinimalPreview}\n\t\t\t\t\t\t\t\t\tacceptAdvanceContent={acceptAdvanceContent}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Expanded Preview Modal */}\n\t\t\t\t<Modal\n\t\t\t\t\topen={isPreviewOpen}\n\t\t\t\t\tonCancel={() => setIsPreviewOpen(false)}\n\t\t\t\t\ttitle=\"Markdown Preview\"\n\t\t\t\t\twidth={900}\n\t\t\t\t\tfooter={null}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"max-h-[calc(100vh-200px)] overflow-y-auto p-4\">\n\t\t\t\t\t\t<MarkdownPreview\n\t\t\t\t\t\t\tcontent={value}\n\t\t\t\t\t\t\tlinkTarget={linkTarget}\n\t\t\t\t\t\t\tclassName={previewClassName}\n\t\t\t\t\t\t\tnoIndent={noIndent}\n\t\t\t\t\t\t\tshowMinimalPreview={showMinimalPreview}\n\t\t\t\t\t\t\tacceptAdvanceContent={acceptAdvanceContent}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</Modal>\n\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{errorMessage && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -10 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, y: -10 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\tclassName=\"mt-1 text-error-500\"\n\t\t\t\t\t\t\t\tappearance=\"custom\"\n\t\t\t\t\t\t\t\tsize=\"extra-small\"\n\t\t\t\t\t\t\t\tvariant=\"medium\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t);\n\n\t\treturn tooltip ? (\n\t\t\t<Tooltip title={tooltip}>\n\t\t\t\t{content}\n\t\t\t</Tooltip>\n\t\t) : (\n\t\t\tcontent\n\t\t);\n\t}\n);\n\nRichMarkdownInput.displayName = \"RichMarkdownInput\";\n"],"names":["RichMarkdownInputTabs","CloseIcon","className","size","jsxs","jsx","RichMarkdownInput","forwardRef","id","value","defaultValue","onChange","placeholder","minRows","maxRows","isDisabled","textareaClassName","previewClassName","label","labelClassName","isRequiredConditional","required","showPreviewOnModal","maxLength","linkTarget","errorMessage","tooltip","originalCase","suffixIcon","isClearable","inputref","showFormattingHelp","onKeyDown","noIndent","showMinimalPreview","acceptAdvanceContent","ref","mode","setMode","useState","isPreviewOpen","setIsPreviewOpen","textareaRef","useRef","inputId","charCount","insertMarkdown","before","after","textarea","start","end","selectedText","textToInsert","newValue","newCursorPos","insertList","type","result","toggleList","continueListOnEnter","continueList","handleKeyDownInternal","e","handleClear","rows","lineCount","content","cn","InputLabel","Tooltip","Fragment","Typography","Button","FormatBold","FormatItalic","FormatUnderlined","FormatListNumbered","FormatListBulleted","OpenInFull","Tabs","tab","EditIcon","VisibilityIcon","node","MarkdownPreview","Modal","AnimatePresence","motion"],"mappings":"ooBA+FMA,GAAqD,CAAC,OAAQ,SAAS,EAKvEC,GAAY,CAAC,CAAE,UAAAC,EAAW,KAAAC,EAAO,MACtCC,EAAAA,KAAC,MAAA,CACA,MAAOD,EACP,OAAQA,EACR,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,QACf,UAAAD,EAEA,SAAA,CAAAG,EAAAA,IAAC,OAAA,CAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAA,CAAK,EACpCA,EAAAA,IAAC,QAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAA,CAAK,CAAA,CAAA,CACrC,EAkDYC,EAAoBC,EAAAA,WAIhC,CACC,CACC,GAAAC,EACA,MAAAC,EAAQ,GACR,aAAAC,EACA,SAAAC,EACA,YAAAC,EAAc,4BACd,QAAAC,EAAU,EACV,QAAAC,EAAU,GACV,WAAAC,EAAa,GACb,UAAAb,EACA,kBAAAc,EACA,iBAAAC,EACA,MAAAC,EACA,eAAAC,EACA,sBAAAC,EACA,SAAAC,EAAW,GACX,mBAAAC,GAAqB,GACrB,UAAAC,EACA,WAAAC,EAAa,SACb,aAAAC,EACA,QAAAC,EACA,aAAAC,EACA,WAAAC,EACA,YAAAC,EACA,SAAAC,EACA,mBAAAC,GAAqB,GACrB,UAAAC,GACA,SAAAC,EAAW,GACX,mBAAAC,EAAqB,GACrB,qBAAAC,EAAuB,EAAA,EAExBC,IACI,CACJ,KAAM,CAACC,EAAMC,EAAO,EAAIC,EAAAA,SAAoC,MAAM,EAC5D,CAACC,GAAeC,CAAgB,EAAIF,EAAAA,SAAS,EAAK,EAClDG,EAAcC,EAAAA,OAA4B,IAAI,EAC9CC,EAAUpC,GAAM,iBAAiB,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,EAAG,EAAE,CAAC,GAExEqC,GAAYpC,EAAM,OAKlBqC,EAAiB,CAACC,EAAgBC,EAAgB,GAAIpC,EAAsB,KAAO,CACxF,MAAMqC,EAAYb,GAA8C,SAAWM,EAAY,QACvF,GAAI,CAACO,EAAU,OAEf,MAAMC,EAAQD,EAAS,eACjBE,EAAMF,EAAS,aACfG,EAAe3C,EAAM,UAAUyC,EAAOC,CAAG,EACzCE,GAAeD,GAAgBxC,EAE/B0C,GAAW7C,EAAM,UAAU,EAAGyC,CAAK,EAAIH,EAASM,GAAeL,EAAQvC,EAAM,UAAU0C,CAAG,EAChGxC,EAAS2C,EAAQ,EAGjB,WAAW,IAAM,CAChB,MAAMC,EAAeL,EAAQH,EAAO,QAAUK,EAAeA,EAAa,OAAS,GACnFH,EAAS,MAAA,EACTA,EAAS,kBAAkBM,EAAcA,GAAgBH,EAAe,EAAIxC,EAAY,OAAO,CAChG,EAAG,CAAC,CACL,EAOM4C,EAAcC,GAAmB,CACtC,MAAMR,EAAYb,GAA8C,SAAWM,EAAY,QACvF,GAAI,CAACO,EAAU,OAEf,MAAMS,EAASC,EAAAA,WAAWlD,EAAOwC,EAAS,eAAgBA,EAAS,aAAcQ,CAAI,EACjFlC,GAAamC,EAAO,MAAM,OAASnC,IAEvCZ,EAAS+C,EAAO,KAAK,EAErB,WAAW,IAAM,CAChBT,EAAS,MAAA,EACTA,EAAS,kBAAkBS,EAAO,MAAOA,EAAO,KAAK,CACtD,EAAG,CAAC,EACL,EAMME,GAAsB,IAAM,CACjC,MAAMX,EAAYb,GAA8C,SAAWM,EAAY,QACvF,GAAI,CAACO,EAAU,MAAO,GAEtB,MAAMS,EAASG,EAAAA,aAAapD,EAAOwC,EAAS,eAAgBA,EAAS,YAAY,EAEjF,MADI,CAACS,GACDnC,GAAamC,EAAO,MAAM,OAASnC,EAAkB,IAEzDZ,EAAS+C,EAAO,KAAK,EAErB,WAAW,IAAM,CAChBT,EAAS,MAAA,EACTA,EAAS,kBAAkBS,EAAO,MAAOA,EAAO,KAAK,CACtD,EAAG,CAAC,EAEG,GACR,EAKMI,GAAyBC,GAAgD,CAI9E,GAFA/B,KAAY+B,CAAC,EAGZA,EAAE,MAAQ,SACV,CAACA,EAAE,UACH,CAACA,EAAE,QACH,CAACA,EAAE,SACH,CAACA,EAAE,SACH,CAACA,EAAE,iBACF,CACGH,MACHG,EAAE,eAAA,EAEH,MACD,CAEA,GAAIA,EAAE,SAAWA,EAAE,QAClB,OAAQA,EAAE,IAAI,YAAA,EAAY,CACzB,IAAK,IACJA,EAAE,eAAA,EACFjB,EAAe,KAAM,KAAM,WAAW,EACtC,MACD,IAAK,IACJiB,EAAE,eAAA,EACFjB,EAAe,IAAK,IAAK,aAAa,EACtC,MACD,IAAK,IACJiB,EAAE,eAAA,EACFjB,EAAe,MAAO,OAAQ,iBAAiB,EAC/C,MACD,IAAK,IACJiB,EAAE,eAAA,EACFjB,EAAe,IAAK,SAAU,WAAW,EACzC,MACD,IAAK,IACJiB,EAAE,eAAA,EACFjB,EAAe,MAAO,MAAO,MAAM,EACnC,KAAA,CAGJ,EAKMkB,GAAc,IAAM,CACzBrD,EAAS,EAAE,GACOyB,GAA8C,SAAWM,EAAY,UAC7E,MAAA,CACX,EAUMuB,IALgB,IAAM,CAC3B,MAAMC,GAAazD,EAAM,MAAM,KAAK,GAAK,CAAA,GAAI,OAAS,EACtD,OAAO,KAAK,IAAIK,EAAS,KAAK,IAAID,EAASqD,CAAS,CAAC,CACtD,GAEa,EAEPC,EACL/D,OAAC,MAAA,CAAI,UAAWgE,EAAG,gBAAiBlE,CAAS,EAC5C,SAAA,CAAAE,EAAAA,KAAC,OAAI,UAAW,8BAA8Bc,EAAQ,kBAAoB,aAAa,UAErF,SAAA,CAAAA,GACAb,EAAAA,IAAC,QAAA,CACA,GAAIuC,EACJ,QAASA,EACT,UAAW,yEAA0EjB,EAA8B,GAAf,YACnG,IAAIR,GAAkB,WAAW,GAElC,SAAAd,EAAAA,IAAC,OAAI,UAAU,qDACd,eAAC,MAAA,CAAI,UAAU,2CACd,SAAAA,EAAAA,IAACgE,GAAAA,WAAA,CAAW,MAAOnD,GAAS,GAAI,SAAUG,GAAY,GAAO,sBAAuBD,GAAyB,EAAA,CAAO,EACrH,CAAA,CACD,CAAA,CAAA,EAKDW,IACA1B,EAAAA,IAACiE,EAAA,CACA,UAAU,aACV,MACClE,EAAAA,KAAC,MAAA,CAAI,UAAU,mGACd,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,uDACd,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,uCACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,mCAAmC,SAAA,IAAC,EACpDA,EAAAA,IAAC,OAAI,UAAU,+EACd,eAAC,OAAA,CAAK,UAAU,4DAA4D,SAAA,UAAA,CAAQ,CAAA,CACrF,EACAD,EAAAA,KAAC,OAAA,CAAK,UAAU,sDAAsD,SAAA,CAAA,KACnEC,EAAAA,IAAC,UAAO,SAAA,MAAA,CAAI,EAAS,OAAA,CAAA,CACxB,CAAA,EACD,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,uCACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,mCAAmC,SAAA,IAAC,EACpDA,EAAAA,IAAC,OAAI,UAAU,+EACd,eAAC,OAAA,CAAK,UAAU,4DAA4D,SAAA,UAAA,CAAQ,CAAA,CACrF,EACAD,EAAAA,KAAC,OAAA,CAAK,UAAU,sDAAsD,SAAA,CAAA,KACnEC,EAAAA,IAAC,MAAG,SAAA,QAAA,CAAM,EAAK,OAAA,CAAA,CAClB,CAAA,EACD,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,uCACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,mCAAmC,SAAA,IAAC,EACpDA,EAAAA,IAAC,OAAI,UAAU,+EACd,eAAC,OAAA,CAAK,UAAU,4DAA4D,SAAA,QAAA,CAAM,CAAA,CACnF,EACAD,EAAAA,KAAC,OAAA,CAAK,UAAU,sDAAsD,SAAA,CAAA,KACnEC,EAAAA,IAAC,QAAK,SAAA,aAAA,CAAW,CAAA,CAAA,CACpB,CAAA,EACD,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,uCACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,mCAAmC,SAAA,IAAC,EACpDA,EAAAA,IAAC,OAAI,UAAU,+EACd,eAAC,OAAA,CAAK,UAAU,4DAA4D,SAAA,aAAA,CAAuB,CAAA,CACpG,EACAD,EAAAA,KAAC,OAAA,CAAK,UAAU,sDAAsD,SAAA,CAAA,KACnEC,EAAAA,IAAC,KAAE,SAAA,WAAA,CAAS,CAAA,CAAA,CACf,CAAA,EACD,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,uCACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,mCAAmC,SAAA,IAAC,EACpDA,EAAAA,IAAC,OAAI,UAAU,+EACd,eAAC,OAAA,CAAK,UAAU,4DAA4D,SAAA,YAAA,CAAU,CAAA,CACvF,EACAD,EAAAA,KAAC,OAAA,CAAK,UAAU,sDAAsD,SAAA,CAAA,KACnEC,EAAAA,IAAC,OAAI,SAAA,QAAA,CAAM,CAAA,CAAA,CACd,CAAA,EACD,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,uCACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,mCAAmC,SAAA,IAAC,EACpDA,EAAAA,IAAC,OAAI,UAAU,+EACd,eAAC,OAAA,CAAK,UAAU,4DAA4D,SAAA,QAAA,CAAM,CAAA,CACnF,EACAA,EAAAA,IAAC,OAAA,CAAK,UAAU,sDAAsD,SAAA,eAAA,CAEtE,CAAA,EACD,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,uCACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,mCAAmC,SAAA,IAAC,EACpDA,EAAAA,IAAC,OAAI,UAAU,+EACd,eAAC,OAAA,CAAK,UAAU,4DAA4D,SAAA,SAAA,CAAO,CAAA,CACpF,EACAA,EAAAA,IAAC,OAAA,CAAK,UAAU,sDAAsD,SAAA,iBAAA,CAEtE,CAAA,EACD,EACC8B,GACA/B,EAAAA,KAAC,MAAA,CAAI,UAAU,uCACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,mCAAmC,SAAA,IAAC,EACpDA,EAAAA,IAAC,OAAI,UAAU,+EACd,eAAC,OAAA,CAAK,UAAU,4DAA4D,SAAA,YAAA,CAAU,CAAA,CACvF,EACAA,EAAAA,IAAC,OAAA,CAAK,UAAU,sDAAsD,SAAA,aAAA,CAEtE,CAAA,EACD,EAEDD,EAAAA,KAAC,MAAA,CAAI,UAAU,uCACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,mCAAmC,SAAA,IAAC,EACpDA,EAAAA,IAAC,OAAI,UAAU,+EACd,eAAC,OAAA,CAAK,UAAU,4DAA4D,SAAA,aAAA,CAAW,CAAA,CACxF,EACAA,EAAAA,IAAC,OAAA,CAAK,UAAU,sDAAsD,SAAA,aAAA,CAEtE,CAAA,CAAA,CACD,CAAA,EACD,EAEC8B,GACA9B,EAAAA,IAAAkE,EAAAA,SAAA,CACC,SAAAnE,OAAC,MAAA,CAAI,UAAU,uDACd,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,uCACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,mCAAmC,SAAA,IAAC,EACpDA,EAAAA,IAAC,OAAI,UAAU,+EACd,eAAC,OAAA,CAAK,UAAU,4DAA4D,SAAA,SAAA,CAAU,CAAA,CACvF,EACAA,EAAAA,IAAC,OAAA,CAAK,UAAU,sDAAsD,SAAA,cAAA,CAEtE,CAAA,EACD,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,gEACd,SAAA,CAAAA,EAAAA,KAAC,MAAA,CAAI,UAAU,wCACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,mCAAmC,SAAA,IAAC,EACpDA,EAAAA,IAAC,OAAA,CAAK,UAAU,sDAAsD,SAAA,QAAA,CAEtE,CAAA,EACD,EACAD,EAAAA,KAAC,MAAA,CAAI,UAAU,iEACd,SAAA,CAAAC,EAAAA,IAAC,OAAA,CAAK,UAAU,8EAA8E,SAAA,qCAAkC,EAChIA,EAAAA,IAAC,OAAA,CAAK,UAAU,8EAA8E,SAAA,0BAAuB,EACrHA,EAAAA,IAAC,OAAA,CAAK,UAAU,8EAA8E,SAAA,2BAAA,CAAyB,CAAA,CAAA,CACxH,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CACD,CAAA,EAEF,EAGD,SAAAA,EAAAA,IAACmE,aAAA,CAAW,UAAU,0FAA0F,SAAA,mBAAA,CAEhH,CAAA,CAAA,CACD,EAEF,EAGApE,OAAC,OAAI,UAAWgE,EACf,0GACA3C,EACG,oGACA,wOAAA,EAGH,SAAA,CAAArB,OAAC,OAAI,UAAWgE,EACf,6JAAA,EAGA,SAAA,CAAAhE,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACd,SAAA,CAAAC,EAAAA,IAACoE,EAAA,CACA,GAAI,GAAG7B,CAAO,QACd,KAAK,SACL,QAAS,IAAME,EAAe,KAAM,KAAM,WAAW,EACrD,SAAU/B,GAAcsB,IAAS,UACjC,UAAU,oIACV,WAAW,QACX,OAAO,gBACP,MAAM,gBAEN,SAAAhC,EAAAA,IAACqE,aAAA,CAAW,GAAI,CAAE,SAAU,GAAI,MAAO,WAAa,UAAU,uBAAA,CAAwB,CAAA,CAAA,EAGvFrE,EAAAA,IAACoE,EAAA,CACA,GAAI,GAAG7B,CAAO,UACd,KAAK,SACL,QAAS,IAAME,EAAe,IAAK,IAAK,aAAa,EACrD,SAAU/B,GAAcsB,IAAS,UACjC,UAAU,oIACV,WAAW,QACX,OAAO,gBACP,MAAM,kBAEN,SAAAhC,EAAAA,IAACsE,eAAA,CAAa,GAAI,CAAE,SAAU,GAAI,MAAO,WAAa,UAAU,uBAAA,CAAwB,CAAA,CAAA,EAGzFtE,EAAAA,IAACoE,EAAA,CACA,GAAI,GAAG7B,CAAO,aACd,KAAK,SACL,QAAS,IAAME,EAAe,MAAO,OAAQ,iBAAiB,EAC9D,SAAU/B,GAAcsB,IAAS,UACjC,UAAU,oIACV,WAAW,QACX,OAAO,gBACP,MAAM,qBAEN,SAAAhC,EAAAA,IAACuE,mBAAA,CAAiB,GAAI,CAAE,SAAU,GAAI,MAAO,WAAa,UAAU,uBAAA,CAAwB,CAAA,CAAA,EAG7FvE,EAAAA,IAAC,MAAA,CAAI,UAAU,sDAAA,CAAuD,EAEtEA,EAAAA,IAACoE,EAAA,CACA,GAAI,GAAG7B,CAAO,iBACd,KAAK,SACL,QAAS,IAAMY,EAAW,SAAS,EACnC,SAAUzC,GAAcsB,IAAS,UACjC,UAAU,oIACV,WAAW,QACX,OAAO,gBACP,MAAM,gBAEN,SAAAhC,EAAAA,IAACwE,qBAAA,CAAmB,GAAI,CAAE,SAAU,GAAI,MAAO,WAAa,UAAU,uBAAA,CAAwB,CAAA,CAAA,EAG/FxE,EAAAA,IAACoE,EAAA,CACA,GAAI,GAAG7B,CAAO,eACd,KAAK,SACL,QAAS,IAAMY,EAAW,QAAQ,EAClC,SAAUzC,GAAcsB,IAAS,UACjC,UAAU,oIACV,WAAW,QACX,OAAO,gBACP,MAAM,cAEN,SAAAhC,EAAAA,IAACyE,qBAAA,CAAmB,GAAI,CAAE,SAAU,GAAI,MAAO,WAAa,UAAU,uBAAA,CAAwB,CAAA,CAAA,CAC/F,EACD,EAEA1E,EAAAA,KAAC,MAAA,CAAI,UAAU,0BAEb,SAAA,CAAAmB,GACAnB,EAAAA,KAAC,MAAA,CAAI,UAAU,0BACd,SAAA,CAAAA,EAAAA,KAAC,OAAA,CAAK,UAAU,2DACd,SAAA,CAAAyC,GAAU,IAAEtB,CAAA,EACd,EACAlB,EAAAA,IAAC,MAAA,CAAI,UAAU,sDAAA,CAAuD,CAAA,EACvE,EAIAiB,GACAjB,EAAAA,IAACoE,EAAA,CACA,GAAI,GAAG7B,CAAO,UACd,KAAK,SACL,QAAS,IAAMH,EAAiB,EAAI,EACpC,SAAU1B,EACV,UAAU,yIACV,WAAW,QACX,OAAO,gBACP,MAAM,iBAEN,SAAAV,EAAAA,IAAC0E,aAAA,CAAW,GAAI,CAAE,SAAU,GAAI,MAAO,WAAa,UAAU,uBAAA,CAAwB,CAAA,CAAA,EAGvF1E,EAAAA,IAAC2E,GAAAA,KAAA,CACA,QAAQ,SACR,KAAMhF,GACN,UAAWqC,EACX,WAAa4C,GAAQ3C,GAAQ2C,CAAG,EAChC,OAAO,MACP,UAAS,GACT,SAAU,CACT,KAAO5E,EAAAA,IAAC6E,EAAAA,SAAA,CAAS,UAAU,iCAAA,CAAkC,EAC7D,QACC7E,EAAAA,IAAC8E,EAAAA,eAAA,CAAe,UAAU,iCAAA,CAAkC,CAAA,EAG9D,UAAU,YAAA,CAAA,CACX,CAAA,CAEF,CAAA,EACD,QAGC,MAAA,CAAI,UAAU,qBACb,SAAA9C,IAAS,OACTjC,EAAAA,KAAAmE,EAAAA,SAAA,CACC,SAAA,CAAAlE,EAAAA,IAAC,WAAA,CACA,IAAM+E,GAAS,CAEV,OAAOhD,GAAQ,WAClBA,EAAIgD,CAAI,EACEhD,IACTA,EAA2D,QAAUgD,GAEtE1C,EAAmE,QAAU0C,EAC1EtD,IACFA,EAAgE,QAAUsD,EAE7E,EACA,GAAIxC,EACJ,MAAAnC,EACA,aAAAC,EACA,SAAWqD,GAAM,CAChB,MAAMT,EAA0BS,EAAE,OAAO,OACrC,CAACxC,GAAa+B,EAAS,QAAU/B,IACpCZ,EAAS2C,CAAQ,CAEnB,EACA,UAAWQ,GACX,YAAAlD,EACA,KAAAqD,GACA,SAAUlD,EACV,SAAAM,EACA,UAAAE,EACA,UAAW6C,EAEV,yDACA,2CACA,uCACA,iEACA,iCAEA,iBACA,gCACA,4BACA,yBAEA,CACC,4DAA6DrD,CAAA,EAG9D,CACC,QAASc,GAAeD,CAAA,EAEzBZ,CAAA,CACD,CAAA,GAICa,GAAeD,IAAeS,IAAS,QACxCjC,OAAC,MAAA,CAAI,UAAU,iDACb,SAAA,CAAAyB,GAAepB,GACfJ,EAAAA,IAAC,SAAA,CACA,GAAI,yBAAyBG,CAAE,GAC/B,UAAU,uFACV,QAASwD,GACT,KAAK,SAEL,SAAA3D,EAAAA,IAACJ,GAAA,CACA,UAAU,0GACV,KAAM,EAAA,CAAA,CACP,CAAA,EAGD2B,GAAcvB,EAAAA,IAAC,MAAA,CAAI,UAAU,oBAAqB,SAAAuB,CAAA,CAAW,CAAA,CAAA,CAC/D,CAAA,CAAA,CAEF,EAEAvB,EAAAA,IAAC,MAAA,CAAI,UAAU,oDACd,SAAAA,EAAAA,IAACgF,EAAAA,gBAAA,CACA,QAAS5E,EACT,WAAAe,EACA,UAAWP,EACX,SAAAgB,EACA,mBAAAC,EACA,qBAAAC,CAAA,CAAA,EAEF,CAAA,CAEF,CAAA,EACD,EAGA9B,EAAAA,IAACiF,GAAAA,MAAA,CACA,KAAM9C,GACN,SAAU,IAAMC,EAAiB,EAAK,EACtC,MAAM,mBACN,MAAO,IACP,OAAQ,KAER,SAAApC,EAAAA,IAAC,MAAA,CAAI,UAAU,gDACd,SAAAA,EAAAA,IAACgF,EAAAA,gBAAA,CACA,QAAS5E,EACT,WAAAe,EACA,UAAWP,EACX,SAAAgB,EACA,mBAAAC,EACA,qBAAAC,CAAA,CAAA,CACD,CACD,CAAA,CAAA,EAGD9B,EAAAA,IAACkF,EAAAA,iBACC,SAAA9D,GACApB,EAAAA,IAACmF,EAAAA,OAAO,IAAP,CACA,QAAS,CAAE,QAAS,EAAG,EAAG,GAAA,EAC1B,QAAS,CAAE,QAAS,EAAG,EAAG,CAAA,EAC1B,KAAM,CAAE,QAAS,EAAG,EAAG,GAAA,EACvB,WAAY,CAAE,SAAU,EAAA,EAExB,SAAAnF,EAAAA,IAACmE,EAAAA,WAAA,CACA,UAAU,sBACV,WAAW,SACX,KAAK,cACL,QAAQ,SAEP,SAAA/C,CAAA,CAAA,CACF,CAAA,CACD,CAEF,CAAA,EACD,EAGD,OAAOC,EACNrB,MAACiE,EAAA,CAAQ,MAAO5C,EACd,WACF,EAEAyC,CAEF,CACD,EAEA7D,EAAkB,YAAc"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { jsxs as n, jsx as e, Fragment as P } from "react/jsx-runtime";
|
|
2
2
|
import N from "../../../_virtual/index.es.js";
|
|
3
|
-
import { forwardRef as oe, useState as
|
|
4
|
-
import { FormatBold as me, FormatItalic as xe, FormatUnderlined as ue, FormatListNumbered as fe, FormatListBulleted as pe, OpenInFull as he
|
|
5
|
-
import { Modal as
|
|
3
|
+
import { forwardRef as oe, useState as L, useRef as de } from "react";
|
|
4
|
+
import { FormatBold as me, FormatItalic as xe, FormatUnderlined as ue, FormatListNumbered as fe, FormatListBulleted as pe, OpenInFull as he } from "@mui/icons-material";
|
|
5
|
+
import { Modal as ge } from "../../data-display/modal/Modal.es.js";
|
|
6
6
|
import x from "../../button/Button.es.js";
|
|
7
|
-
import { Tabs as
|
|
8
|
-
import { MarkdownPreview as
|
|
9
|
-
import { toggleList as
|
|
7
|
+
import { Tabs as we } from "../../navigation/tabs/Tabs.es.js";
|
|
8
|
+
import { MarkdownPreview as O } from "./MarkdownPreview.es.js";
|
|
9
|
+
import { toggleList as be, continueList as Ne } from "./listEditing.es.js";
|
|
10
10
|
import q from "../../tooltip/Tooltip.es.js";
|
|
11
|
-
import { AnimatePresence as
|
|
11
|
+
import { AnimatePresence as ve, motion as ke } from "framer-motion";
|
|
12
12
|
import { Typography as A } from "../../data-display/typography/Typography.es.js";
|
|
13
|
-
import { InputLabel as
|
|
14
|
-
|
|
13
|
+
import { InputLabel as ye } from "../shared/InputLabel.es.js";
|
|
14
|
+
import { VisibilityIcon as je, EditIcon as Ee } from "../../icon/icons.generated.es.js";
|
|
15
|
+
const Fe = ["edit", "preview"], _e = ({ className: h, size: r = 16 }) => /* @__PURE__ */ n(
|
|
15
16
|
"svg",
|
|
16
17
|
{
|
|
17
18
|
width: r,
|
|
@@ -28,7 +29,7 @@ const Fe = ["edit", "preview"], Se = ({ className: h, size: r = 16 }) => /* @__P
|
|
|
28
29
|
/* @__PURE__ */ e("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
|
|
29
30
|
]
|
|
30
31
|
}
|
|
31
|
-
),
|
|
32
|
+
), Ce = oe(
|
|
32
33
|
({
|
|
33
34
|
id: h,
|
|
34
35
|
value: r = "",
|
|
@@ -47,20 +48,20 @@ const Fe = ["edit", "preview"], Se = ({ className: h, size: r = 16 }) => /* @__P
|
|
|
47
48
|
required: F = !1,
|
|
48
49
|
showPreviewOnModal: X = !1,
|
|
49
50
|
maxLength: l,
|
|
50
|
-
linkTarget:
|
|
51
|
+
linkTarget: _ = "_blank",
|
|
51
52
|
errorMessage: k,
|
|
52
|
-
tooltip:
|
|
53
|
-
originalCase:
|
|
53
|
+
tooltip: C,
|
|
54
|
+
originalCase: S,
|
|
54
55
|
suffixIcon: g,
|
|
55
56
|
isClearable: y,
|
|
56
57
|
inputref: R,
|
|
57
58
|
showFormattingHelp: Y = !0,
|
|
58
59
|
onKeyDown: Z,
|
|
59
|
-
noIndent:
|
|
60
|
+
noIndent: I = !1,
|
|
60
61
|
showMinimalPreview: T = !1,
|
|
61
62
|
acceptAdvanceContent: w = !0
|
|
62
63
|
}, c) => {
|
|
63
|
-
const [o, ee] =
|
|
64
|
+
const [o, ee] = L("edit"), [te, $] = L(!1), f = de(null), i = h || `rich-md-input-${Math.random().toString(36).slice(2, 11)}`, ne = r.length, d = (t, a = "", m = "") => {
|
|
64
65
|
const p = c?.current || f.current;
|
|
65
66
|
if (!p) return;
|
|
66
67
|
const j = p.selectionStart, K = p.selectionEnd, b = r.substring(j, K), se = b || m, ce = r.substring(0, j) + t + se + a + r.substring(K);
|
|
@@ -68,17 +69,17 @@ const Fe = ["edit", "preview"], Se = ({ className: h, size: r = 16 }) => /* @__P
|
|
|
68
69
|
const M = j + t.length + (b ? b.length : 0);
|
|
69
70
|
p.focus(), p.setSelectionRange(M, M + (b ? 0 : m.length));
|
|
70
71
|
}, 0);
|
|
71
|
-
},
|
|
72
|
+
}, z = (t) => {
|
|
72
73
|
const a = c?.current || f.current;
|
|
73
74
|
if (!a) return;
|
|
74
|
-
const m =
|
|
75
|
+
const m = be(r, a.selectionStart, a.selectionEnd, t);
|
|
75
76
|
l && m.value.length > l || (u(m.value), setTimeout(() => {
|
|
76
77
|
a.focus(), a.setSelectionRange(m.caret, m.caret);
|
|
77
78
|
}, 0));
|
|
78
79
|
}, ae = () => {
|
|
79
80
|
const t = c?.current || f.current;
|
|
80
81
|
if (!t) return !1;
|
|
81
|
-
const a =
|
|
82
|
+
const a = Ne(r, t.selectionStart, t.selectionEnd);
|
|
82
83
|
return !a || l && a.value.length > l ? !1 : (u(a.value), setTimeout(() => {
|
|
83
84
|
t.focus(), t.setSelectionRange(a.caret, a.caret);
|
|
84
85
|
}, 0), !0);
|
|
@@ -117,8 +118,8 @@ const Fe = ["edit", "preview"], Se = ({ className: h, size: r = 16 }) => /* @__P
|
|
|
117
118
|
{
|
|
118
119
|
id: i,
|
|
119
120
|
htmlFor: i,
|
|
120
|
-
className: `mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${
|
|
121
|
-
children: /* @__PURE__ */ e("div", { className: "flex flex-wrap items-center justify-between w-full", children: /* @__PURE__ */ e("div", { className: "inline-flex flex-wrap items-center gap-1", children: /* @__PURE__ */ e(
|
|
121
|
+
className: `mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${S ? "" : "capitalize"} ${J || "!uppercse"}`,
|
|
122
|
+
children: /* @__PURE__ */ e("div", { className: "flex flex-wrap items-center justify-between w-full", children: /* @__PURE__ */ e("div", { className: "inline-flex flex-wrap items-center gap-1", children: /* @__PURE__ */ e(ye, { label: v || "", required: F || !1, isRequiredConditional: Q || !1 }) }) })
|
|
122
123
|
}
|
|
123
124
|
),
|
|
124
125
|
Y && /* @__PURE__ */ e(
|
|
@@ -269,7 +270,7 @@ const Fe = ["edit", "preview"], Se = ({ className: h, size: r = 16 }) => /* @__P
|
|
|
269
270
|
{
|
|
270
271
|
id: `${i}-numbered-list`,
|
|
271
272
|
type: "button",
|
|
272
|
-
onClick: () =>
|
|
273
|
+
onClick: () => z("ordered"),
|
|
273
274
|
disabled: s || o === "preview",
|
|
274
275
|
className: "!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",
|
|
275
276
|
appearance: "ghost",
|
|
@@ -283,7 +284,7 @@ const Fe = ["edit", "preview"], Se = ({ className: h, size: r = 16 }) => /* @__P
|
|
|
283
284
|
{
|
|
284
285
|
id: `${i}-bullet-list`,
|
|
285
286
|
type: "button",
|
|
286
|
-
onClick: () =>
|
|
287
|
+
onClick: () => z("bullet"),
|
|
287
288
|
disabled: s || o === "preview",
|
|
288
289
|
className: "!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200",
|
|
289
290
|
appearance: "ghost",
|
|
@@ -316,7 +317,7 @@ const Fe = ["edit", "preview"], Se = ({ className: h, size: r = 16 }) => /* @__P
|
|
|
316
317
|
children: /* @__PURE__ */ e(he, { sx: { fontSize: 16, color: "#667085" }, className: "dark:text-neutral-400" })
|
|
317
318
|
}
|
|
318
319
|
) : /* @__PURE__ */ e(
|
|
319
|
-
|
|
320
|
+
we,
|
|
320
321
|
{
|
|
321
322
|
variant: "switch",
|
|
322
323
|
tabs: Fe,
|
|
@@ -325,8 +326,8 @@ const Fe = ["edit", "preview"], Se = ({ className: h, size: r = 16 }) => /* @__P
|
|
|
325
326
|
height: "h-5",
|
|
326
327
|
iconsOnly: !0,
|
|
327
328
|
tabIcons: {
|
|
328
|
-
edit: /* @__PURE__ */ e(
|
|
329
|
-
preview: /* @__PURE__ */ e(
|
|
329
|
+
edit: /* @__PURE__ */ e(Ee, { className: "h-md w-md dark:text-neutral-400" }),
|
|
330
|
+
preview: /* @__PURE__ */ e(je, { className: "h-md w-md dark:text-neutral-400" })
|
|
330
331
|
},
|
|
331
332
|
className: "rounded-lg"
|
|
332
333
|
}
|
|
@@ -386,7 +387,7 @@ const Fe = ["edit", "preview"], Se = ({ className: h, size: r = 16 }) => /* @__P
|
|
|
386
387
|
onClick: le,
|
|
387
388
|
type: "button",
|
|
388
389
|
children: /* @__PURE__ */ e(
|
|
389
|
-
|
|
390
|
+
_e,
|
|
390
391
|
{
|
|
391
392
|
className: "text-neutral-300 dark:text-black-500 hover:text-neutral-400 dark:hover:text-black-400 transition-colors",
|
|
392
393
|
size: 16
|
|
@@ -397,19 +398,19 @@ const Fe = ["edit", "preview"], Se = ({ className: h, size: r = 16 }) => /* @__P
|
|
|
397
398
|
g && /* @__PURE__ */ e("div", { className: "flex items-center", children: g })
|
|
398
399
|
] })
|
|
399
400
|
] }) : /* @__PURE__ */ e("div", { className: "w-full min-h-[92px] max-h-[400px] overflow-y-auto", children: /* @__PURE__ */ e(
|
|
400
|
-
|
|
401
|
+
O,
|
|
401
402
|
{
|
|
402
403
|
content: r,
|
|
403
|
-
linkTarget:
|
|
404
|
+
linkTarget: _,
|
|
404
405
|
className: E,
|
|
405
|
-
noIndent:
|
|
406
|
+
noIndent: I,
|
|
406
407
|
showMinimalPreview: T,
|
|
407
408
|
acceptAdvanceContent: w
|
|
408
409
|
}
|
|
409
410
|
) }) })
|
|
410
411
|
] }),
|
|
411
412
|
/* @__PURE__ */ e(
|
|
412
|
-
|
|
413
|
+
ge,
|
|
413
414
|
{
|
|
414
415
|
open: te,
|
|
415
416
|
onCancel: () => $(!1),
|
|
@@ -417,20 +418,20 @@ const Fe = ["edit", "preview"], Se = ({ className: h, size: r = 16 }) => /* @__P
|
|
|
417
418
|
width: 900,
|
|
418
419
|
footer: null,
|
|
419
420
|
children: /* @__PURE__ */ e("div", { className: "max-h-[calc(100vh-200px)] overflow-y-auto p-4", children: /* @__PURE__ */ e(
|
|
420
|
-
|
|
421
|
+
O,
|
|
421
422
|
{
|
|
422
423
|
content: r,
|
|
423
|
-
linkTarget:
|
|
424
|
+
linkTarget: _,
|
|
424
425
|
className: E,
|
|
425
|
-
noIndent:
|
|
426
|
+
noIndent: I,
|
|
426
427
|
showMinimalPreview: T,
|
|
427
428
|
acceptAdvanceContent: w
|
|
428
429
|
}
|
|
429
430
|
) })
|
|
430
431
|
}
|
|
431
432
|
),
|
|
432
|
-
/* @__PURE__ */ e(
|
|
433
|
-
|
|
433
|
+
/* @__PURE__ */ e(ve, { children: k && /* @__PURE__ */ e(
|
|
434
|
+
ke.div,
|
|
434
435
|
{
|
|
435
436
|
initial: { opacity: 0, y: -10 },
|
|
436
437
|
animate: { opacity: 1, y: 0 },
|
|
@@ -449,11 +450,11 @@ const Fe = ["edit", "preview"], Se = ({ className: h, size: r = 16 }) => /* @__P
|
|
|
449
450
|
}
|
|
450
451
|
) })
|
|
451
452
|
] });
|
|
452
|
-
return
|
|
453
|
+
return C ? /* @__PURE__ */ e(q, { title: C, children: B }) : B;
|
|
453
454
|
}
|
|
454
455
|
);
|
|
455
|
-
|
|
456
|
+
Ce.displayName = "RichMarkdownInput";
|
|
456
457
|
export {
|
|
457
|
-
|
|
458
|
+
Ce as RichMarkdownInput
|
|
458
459
|
};
|
|
459
460
|
//# sourceMappingURL=RichMarkdownInput.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichMarkdownInput.es.js","sources":["../../../../src/components/forms/md-input/RichMarkdownInput.tsx"],"sourcesContent":["import cn from \"classnames\";\nimport { forwardRef, useRef, useState } from \"react\";\nimport {\n\tFormatBold,\n\tFormatItalic,\n\tFormatUnderlined,\n\tFormatListBulleted,\n\tFormatListNumbered,\n\tOpenInFull,\n\tEdit,\n\tVisibilityOutlined,\n} from \"@mui/icons-material\";\nimport { Modal } from \"../../data-display/modal/Modal\";\nimport Button from \"../../button/Button\";\nimport { Tabs } from \"../../navigation/tabs/Tabs\";\nimport { MarkdownPreview } from \"./MarkdownPreview\";\nimport { continueList, toggleList, type ListType } from \"./listEditing\";\nimport Tooltip from \"../../tooltip/Tooltip\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { Typography } from \"../../data-display/typography/Typography\";\nimport { InputLabel } from \"../shared/InputLabel\";\n\n/**\n * Props for the RichMarkdownInput component\n */\nexport interface RichMarkdownInputProps {\n\t/** Unique identifier for the markdown input */\n\tid?: string;\n\t/** Current markdown value */\n\tvalue?: string;\n\t/** Default value for the input */\n\tdefaultValue?: string;\n\t/** Placeholder text for the textarea */\n\tplaceholder?: string;\n\t/** Minimum number of visible text lines */\n\tminRows?: number;\n\t/** Maximum number of visible text lines */\n\tmaxRows?: number;\n\t/** Whether the input is disabled */\n\tisDisabled?: boolean;\n\t/** Additional CSS classes for the wrapper container */\n\tclassName?: string;\n\t/** Additional CSS classes for the textarea */\n\ttextareaClassName?: string;\n\t/** Additional CSS classes for the preview container */\n\tpreviewClassName?: string;\n\t/** Label text to display above the input */\n\tlabel?: string;\n\t/** Additional CSS classes for the label */\n\tlabelClassName?: string;\n\t/** Whether the field is required and the required indicator shows as conditional */\n\tisRequiredConditional?: boolean;\n\t/** Whether the field is required */\n\trequired?: boolean;\n\t/** Whether to show the preview button */\n\tshowPreviewOnModal?: boolean;\n\t/** Maximum character count */\n\tmaxLength?: number;\n\t/** Link target behavior: '_blank' for new tab, '_self' for current tab */\n\tlinkTarget?: '_blank' | '_self';\n\t/** Error message to display */\n\terrorMessage?: string;\n\t/** Tooltip text */\n\ttooltip?: string;\n\t/** Whether to preserve original case (no auto-lowercase) */\n\toriginalCase?: boolean;\n\t/** Icon to display at the end of the input */\n\tsuffixIcon?: React.ReactNode;\n\t/** Whether the input is clearable */\n\tisClearable?: boolean;\n\t/** Ref for the input element */\n\tinputref?: React.RefObject<HTMLTextAreaElement>;\n\t/** Whether to show the formatting help tooltip */\n\tshowFormattingHelp?: boolean;\n\t/** Keyboard event handler */\n\tonKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n\t/** Whether to remove indentation from lists and align all content to the left in preview */\n\tnoIndent?: boolean;\n\t/** Whether to display all content with uniform font size/weight (paragraph-like) while keeping formatting */\n\tshowMinimalPreview?: boolean;\n\t/** Whether to accept and render advanced content (code blocks, blockquotes, tables, images) in preview */\n\tacceptAdvanceContent?: boolean;\n\t/** Callback function called when the markdown value changes */\n\tonChange: (value: string) => void;\n}\n\n/**\n * The type of view for the rich markdown input\n */\ntype RichMarkdownInputViewType = \"edit\" | \"preview\";\n\n/**\n * The tabs for the rich markdown input\n */\nconst RichMarkdownInputTabs: RichMarkdownInputViewType[] = [\"edit\", \"preview\"];\n\n/**\n * Close icon for clearable input\n */\nconst CloseIcon = ({ className, size = 16 }: { className?: string; size?: number }) => (\n\t<svg\n\t\twidth={size}\n\t\theight={size}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstrokeWidth=\"2\"\n\t\tstrokeLinecap=\"round\"\n\t\tstrokeLinejoin=\"round\"\n\t\tclassName={className}\n\t>\n\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n\t</svg>\n);\n\n/**\n * A rich markdown input component with comprehensive formatting toolbar.\n * \n * **Text Formatting:**\n * - Bold (Ctrl+B) - Always visible\n * - Italic (Ctrl+I) - Always visible\n * - Underline (Ctrl+U) - Always visible\n * \n * **Lists:**\n * - Bullet lists - Always visible\n * - Numbered lists - Always visible\n * - Enter continues the list with the next marker; Enter on an empty item exits it\n * \n * **Features:**\n * - Edit/Preview toggle with icons\n * - Character counter (optional)\n * - Preview modal with scrolling\n * - Keyboard shortcuts\n * - Syntax highlighting for code blocks\n * - Responsive toolbar\n * - Dark mode support\n * - Configurable link target behavior\n * - Error message display\n * - Tooltip support\n * - Clear button (optional)\n * - Suffix icon support\n * - Custom keyboard handlers\n * - Minimal preview mode (uniform typography)\n * - Toggle advanced content in preview\n *\n * @example\n * ```tsx\n * <RichMarkdownInput\n * value={markdown}\n * onChange={setMarkdown}\n * placeholder=\"Enter description...\"\n * label=\"Description\"\n * maxLength={300}\n * linkTarget=\"_blank\"\n * isClearable\n * errorMessage=\"Invalid input\"\n * tooltip=\"Use markdown formatting\"\n * showMinimalPreview={false}\n * acceptAdvanceContent={true}\n * />\n * ```\n */\nexport const RichMarkdownInput = forwardRef<\n\tHTMLTextAreaElement,\n\tRichMarkdownInputProps\n>(\n\t(\n\t\t{\n\t\t\tid,\n\t\t\tvalue = \"\",\n\t\t\tdefaultValue,\n\t\t\tonChange,\n\t\t\tplaceholder = \"Enter markdown content...\",\n\t\t\tminRows = 4,\n\t\t\tmaxRows = 20,\n\t\t\tisDisabled = false,\n\t\t\tclassName,\n\t\t\ttextareaClassName,\n\t\t\tpreviewClassName,\n\t\t\tlabel,\n\t\t\tlabelClassName,\n\t\t\tisRequiredConditional,\n\t\t\trequired = false,\n\t\t\tshowPreviewOnModal = false,\n\t\t\tmaxLength,\n\t\t\tlinkTarget = '_blank',\n\t\t\terrorMessage,\n\t\t\ttooltip,\n\t\t\toriginalCase,\n\t\t\tsuffixIcon,\n\t\t\tisClearable,\n\t\t\tinputref,\n\t\t\tshowFormattingHelp = true,\n\t\t\tonKeyDown,\n\t\t\tnoIndent = false,\n\t\t\tshowMinimalPreview = false,\n\t\t\tacceptAdvanceContent = true,\n\t\t},\n\t\tref\n\t) => {\n\t\tconst [mode, setMode] = useState<RichMarkdownInputViewType>(\"edit\");\n\t\tconst [isPreviewOpen, setIsPreviewOpen] = useState(false);\n\t\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\t\tconst inputId = id || `rich-md-input-${Math.random().toString(36).slice(2, 11)}`;\n\n\t\tconst charCount = value.length;\n\n\t\t/**\n\t\t * Insert markdown syntax at cursor position\n\t\t */\n\t\tconst insertMarkdown = (before: string, after: string = \"\", placeholder: string = \"\") => {\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\tif (!textarea) return;\n\n\t\t\tconst start = textarea.selectionStart;\n\t\t\tconst end = textarea.selectionEnd;\n\t\t\tconst selectedText = value.substring(start, end);\n\t\t\tconst textToInsert = selectedText || placeholder;\n\n\t\t\tconst newValue = value.substring(0, start) + before + textToInsert + after + value.substring(end);\n\t\t\tonChange(newValue);\n\n\t\t\t// Set cursor position after insertion\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst newCursorPos = start + before.length + (selectedText ? selectedText.length : 0);\n\t\t\t\ttextarea.focus();\n\t\t\t\ttextarea.setSelectionRange(newCursorPos, newCursorPos + (selectedText ? 0 : placeholder.length));\n\t\t\t}, 0);\n\t\t};\n\n\t\t/**\n\t\t * Toggle list markers on the selected line(s).\n\t\t * Ordered lists are numbered sequentially (1., 2., 3., ...) so the raw\n\t\t * markdown matches what the preview renders.\n\t\t */\n\t\tconst insertList = (type: ListType) => {\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\tif (!textarea) return;\n\n\t\t\tconst result = toggleList(value, textarea.selectionStart, textarea.selectionEnd, type);\n\t\t\tif (maxLength && result.value.length > maxLength) return;\n\n\t\t\tonChange(result.value);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\ttextarea.focus();\n\t\t\t\ttextarea.setSelectionRange(result.caret, result.caret);\n\t\t\t}, 0);\n\t\t};\n\n\t\t/**\n\t\t * Continue the list the caret sits in when Enter is pressed.\n\t\t * Returns true when the key was handled and the default should be prevented.\n\t\t */\n\t\tconst continueListOnEnter = () => {\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\tif (!textarea) return false;\n\n\t\t\tconst result = continueList(value, textarea.selectionStart, textarea.selectionEnd);\n\t\t\tif (!result) return false;\n\t\t\tif (maxLength && result.value.length > maxLength) return false;\n\n\t\t\tonChange(result.value);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\ttextarea.focus();\n\t\t\t\ttextarea.setSelectionRange(result.caret, result.caret);\n\t\t\t}, 0);\n\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * Handle keyboard shortcuts\n\t\t */\n\t\tconst handleKeyDownInternal = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\t// Call external handler first\n\t\t\tonKeyDown?.(e);\n\n\t\t\tif (\n\t\t\t\te.key === 'Enter' &&\n\t\t\t\t!e.shiftKey &&\n\t\t\t\t!e.altKey &&\n\t\t\t\t!e.metaKey &&\n\t\t\t\t!e.ctrlKey &&\n\t\t\t\t!e.defaultPrevented\n\t\t\t) {\n\t\t\t\tif (continueListOnEnter()) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.metaKey || e.ctrlKey) {\n\t\t\t\tswitch (e.key.toLowerCase()) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('**', '**', 'bold text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('*', '*', 'italic text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('<u>', '</u>', 'underlined text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'k':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('[', '](url)', 'link text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('```', '```', 'code');\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Handle clear button click\n\t\t */\n\t\tconst handleClear = () => {\n\t\t\tonChange('');\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\ttextarea?.focus();\n\t\t};\n\n\t\t/**\n\t\t * Calculate dynamic rows based on content\n\t\t */\n\t\tconst calculateRows = () => {\n\t\t\tconst lineCount = (value.match(/\\n/g) || []).length + 1;\n\t\t\treturn Math.min(maxRows, Math.max(minRows, lineCount));\n\t\t};\n\n\t\tconst rows = calculateRows();\n\n\t\tconst content = (\n\t\t\t<div className={cn(\"flex flex-col\", className)}>\n\t\t\t\t<div className={`flex flex-row items-center ${label ? \"justify-between\" : \"justify-end\"} w-full`}>\n\t\t\t\t\t{/* Label */}\n\t\t\t\t\t{label && (\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\t\t\tclassName={`mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${!originalCase ? \"capitalize\" : \"\"\n\t\t\t\t\t\t\t\t} ${labelClassName || \"!uppercse\"}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"flex flex-wrap items-center justify-between w-full\">\n\t\t\t\t\t\t\t\t<div className=\"inline-flex flex-wrap items-center gap-1\">\n\t\t\t\t\t\t\t\t\t<InputLabel label={label || \"\"} required={required || false} isRequiredConditional={isRequiredConditional || false} />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Markdown Formatting Info */}\n\t\t\t\t\t{showFormattingHelp && (\n\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\tplacement=\"bottom-end\"\n\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-center py-2 px-3 min-w-[220px] gap-2 bg-neutral-900 rounded-lg\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-start gap-1 w-full\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">**bold**</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <strong>bold</strong> text\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">*italic*</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <em>italic</em> text\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">`code`</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <code>inline code</code>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\"><u>text</u></span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <u>underline</u>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">~~strike~~</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <del>strike</del>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">- item</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ bullet list\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">1. item</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ numbered list\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{acceptAdvanceContent && (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">## heading</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t→ heading 2\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">[link](url)</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ hyperlink\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{acceptAdvanceContent && (\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-start gap-1 w-full\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">> quote</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t→ blockquote\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-start gap-0.5 w-full mt-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-center gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tTable:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col px-1 py-0.5 bg-neutral-700 ml-2 rounded-sm gap-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap\">| Header 1 | Header 2 | Header 3 |</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap\">| :--- | :---: | ---: |</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap\">| Left | Center | Right |</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Typography className=\"mb-2 text-xs font-medium text-primary-700 inline-flex items-center gap-1 cursor-pointer\">\n\t\t\t\t\t\t\t\tFormatting help ?\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Main Container */}\n\t\t\t\t<div className={cn(\n\t\t\t\t\t\"flex flex-col border shadow-[0px_1px_2px_rgba(0,0,0,0.05)] rounded-lg bg-white dark:bg-black-700 w-full\",\n\t\t\t\t\terrorMessage\n\t\t\t\t\t\t? \"border-red-300 focus-within:border-red-500 focus-within:shadow-[0_0_0_1.5px_var(--color-red-200)]\"\n\t\t\t\t\t\t: \"border-[#EAECF0] dark:border-black-600 focus-within:border-primary-600 dark:focus-within:border-primary-400 focus-within:shadow-[0_0_0_1.5px_var(--color-primary-100)] dark:focus-within:shadow-[0_0_0_1.5px_var(--color-primary-950)]\"\n\t\t\t\t)}>\n\t\t\t\t\t{/* Toolbar */}\n\t\t\t\t\t<div className={cn(\n\t\t\t\t\t\t\"flex flex-row justify-between items-center px-3 py-2 gap-2 h-11 rounded-t-lg bg-[#F9FAFB] dark:bg-black-600 border-b border-[#EAECF0] dark:border-black-600\"\n\t\t\t\t\t)}>\n\t\t\t\t\t\t{/* Left: Formatting Buttons */}\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-bold`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertMarkdown('**', '**', 'bold text')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Bold (Ctrl+B)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatBold sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-italic`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertMarkdown('*', '*', 'italic text')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Italic (Ctrl+I)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatItalic sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-underline`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertMarkdown('<u>', '</u>', 'underlined text')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Underline (Ctrl+U)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatUnderlined sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<div className=\"w-px h-5 bg-[#EAECF0] dark:bg-black-500 rounded-full\" />\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-numbered-list`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertList('ordered')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Numbered List\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatListNumbered sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-bullet-list`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertList('bullet')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Bullet List\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatListBulleted sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t{/* Center: Character Count */}\n\t\t\t\t\t\t\t{maxLength && (\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm font-medium text-[#475467] dark:text-neutral-400\">\n\t\t\t\t\t\t\t\t\t\t{charCount}/{maxLength}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<div className=\"w-px h-6 bg-[#EAECF0] dark:bg-black-500 rounded-full\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* Right: Edit/Preview Toggle */}\n\t\t\t\t\t\t\t{showPreviewOnModal ? (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tid={`${inputId}-expand`}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={() => setIsPreviewOpen(true)}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto ml-1 !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\t\ttitle=\"Expand Preview\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<OpenInFull sx={{ fontSize: 16, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Tabs<RichMarkdownInputViewType>\n\t\t\t\t\t\t\t\t\tvariant=\"switch\"\n\t\t\t\t\t\t\t\t\ttabs={RichMarkdownInputTabs}\n\t\t\t\t\t\t\t\t\tactiveTab={mode}\n\t\t\t\t\t\t\t\t\tonTabClick={(tab) => setMode(tab)}\n\t\t\t\t\t\t\t\t\theight=\"h-5\"\n\t\t\t\t\t\t\t\t\ticonsOnly\n\t\t\t\t\t\t\t\t\ttabIcons={{\n\t\t\t\t\t\t\t\t\t\tedit: (<Edit sx={{ fontSize: 16, color: '#667085' }} className=\"dark:text-neutral-400\" />),\n\t\t\t\t\t\t\t\t\t\tpreview: (\n\t\t\t\t\t\t\t\t\t\t\t<VisibilityOutlined sx={{ fontSize: 16, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-lg\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Content Area */}\n\t\t\t\t\t<div className=\"px-3 py-2 relative\">\n\t\t\t\t\t\t{mode === \"edit\" ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\t\t\t\t// Handle all refs: forwarded ref, internal ref, and inputref\n\t\t\t\t\t\t\t\t\t\tif (typeof ref === 'function') {\n\t\t\t\t\t\t\t\t\t\t\tref(node);\n\t\t\t\t\t\t\t\t\t\t} else if (ref) {\n\t\t\t\t\t\t\t\t\t\t\t(ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t(textareaRef as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n\t\t\t\t\t\t\t\t\t\tif (inputref) {\n\t\t\t\t\t\t\t\t\t\t\t(inputref as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\t\t\tconst newValue = originalCase ? e.target.value : e.target.value;\n\t\t\t\t\t\t\t\t\t\tif (!maxLength || newValue.length <= maxLength) {\n\t\t\t\t\t\t\t\t\t\t\tonChange(newValue);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonKeyDown={handleKeyDownInternal}\n\t\t\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\t\t\trows={rows}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\t\t\t\tmaxLength={maxLength}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t// Base styles\n\t\t\t\t\t\t\t\t\t\t\"w-full bg-transparent !focus:ring-0 !focus:border-none\",\n\t\t\t\t\t\t\t\t\t\t\"font-inter font-medium text-sm leading-5\",\n\t\t\t\t\t\t\t\t\t\t\"text-[#101828] dark:text-neutral-100\",\n\t\t\t\t\t\t\t\t\t\t\"placeholder:text-neutral-400 dark:placeholder:text-neutral-500\",\n\t\t\t\t\t\t\t\t\t\t\"focus:outline-none resize-none\",\n\t\t\t\t\t\t\t\t\t\t// Hide scrollbar\n\t\t\t\t\t\t\t\t\t\t\"scrollbar-none\",\n\t\t\t\t\t\t\t\t\t\t\"[&::-webkit-scrollbar]:hidden\",\n\t\t\t\t\t\t\t\t\t\t\"[-ms-overflow-style:none]\",\n\t\t\t\t\t\t\t\t\t\t\"[scrollbar-width:none]\",\n\t\t\t\t\t\t\t\t\t\t// Disabled state\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"text-neutral-400 dark:text-neutral-500 cursor-not-allowed\": isDisabled,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t// Add padding if suffix icons exist\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"pr-20\": isClearable || suffixIcon,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\ttextareaClassName\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{/* Suffix Icons */}\n\t\t\t\t\t\t\t\t{(isClearable || suffixIcon) && mode === \"edit\" && (\n\t\t\t\t\t\t\t\t\t<div className=\"absolute right-1 top-2 flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t{isClearable && value && (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\tid={`btn-input-field-clear-${id}`}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"absolute inset-y-0 flex items-center cursor-pointer top-2 right-1 focus:outline-none\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleClear}\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<CloseIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-neutral-300 dark:text-black-500 hover:text-neutral-400 dark:hover:text-black-400 transition-colors\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{suffixIcon && <div className=\"flex items-center\">{suffixIcon}</div>}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"w-full min-h-[92px] max-h-[400px] overflow-y-auto\">\n\t\t\t\t\t\t\t\t<MarkdownPreview\n\t\t\t\t\t\t\t\t\tcontent={value}\n\t\t\t\t\t\t\t\t\tlinkTarget={linkTarget}\n\t\t\t\t\t\t\t\t\tclassName={previewClassName}\n\t\t\t\t\t\t\t\t\tnoIndent={noIndent}\n\t\t\t\t\t\t\t\t\tshowMinimalPreview={showMinimalPreview}\n\t\t\t\t\t\t\t\t\tacceptAdvanceContent={acceptAdvanceContent}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Expanded Preview Modal */}\n\t\t\t\t<Modal\n\t\t\t\t\topen={isPreviewOpen}\n\t\t\t\t\tonCancel={() => setIsPreviewOpen(false)}\n\t\t\t\t\ttitle=\"Markdown Preview\"\n\t\t\t\t\twidth={900}\n\t\t\t\t\tfooter={null}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"max-h-[calc(100vh-200px)] overflow-y-auto p-4\">\n\t\t\t\t\t\t<MarkdownPreview\n\t\t\t\t\t\t\tcontent={value}\n\t\t\t\t\t\t\tlinkTarget={linkTarget}\n\t\t\t\t\t\t\tclassName={previewClassName}\n\t\t\t\t\t\t\tnoIndent={noIndent}\n\t\t\t\t\t\t\tshowMinimalPreview={showMinimalPreview}\n\t\t\t\t\t\t\tacceptAdvanceContent={acceptAdvanceContent}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</Modal>\n\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{errorMessage && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -10 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, y: -10 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\tclassName=\"mt-1 text-error-500\"\n\t\t\t\t\t\t\t\tappearance=\"custom\"\n\t\t\t\t\t\t\t\tsize=\"extra-small\"\n\t\t\t\t\t\t\t\tvariant=\"medium\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t);\n\n\t\treturn tooltip ? (\n\t\t\t<Tooltip title={tooltip}>\n\t\t\t\t{content}\n\t\t\t</Tooltip>\n\t\t) : (\n\t\t\tcontent\n\t\t);\n\t}\n);\n\nRichMarkdownInput.displayName = \"RichMarkdownInput\";\n"],"names":["RichMarkdownInputTabs","CloseIcon","className","size","jsxs","jsx","RichMarkdownInput","forwardRef","id","value","defaultValue","onChange","placeholder","minRows","maxRows","isDisabled","textareaClassName","previewClassName","label","labelClassName","isRequiredConditional","required","showPreviewOnModal","maxLength","linkTarget","errorMessage","tooltip","originalCase","suffixIcon","isClearable","inputref","showFormattingHelp","onKeyDown","noIndent","showMinimalPreview","acceptAdvanceContent","ref","mode","setMode","useState","isPreviewOpen","setIsPreviewOpen","textareaRef","useRef","inputId","charCount","insertMarkdown","before","after","textarea","start","end","selectedText","textToInsert","newValue","newCursorPos","insertList","type","result","toggleList","continueListOnEnter","continueList","handleKeyDownInternal","e","handleClear","rows","lineCount","content","cn","InputLabel","Tooltip","Fragment","Typography","Button","FormatBold","FormatItalic","FormatUnderlined","FormatListNumbered","FormatListBulleted","OpenInFull","Tabs","tab","Edit","VisibilityOutlined","node","MarkdownPreview","Modal","AnimatePresence","motion"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RichMarkdownInput.es.js","sources":["../../../../src/components/forms/md-input/RichMarkdownInput.tsx"],"sourcesContent":["import cn from \"classnames\";\nimport { forwardRef, useRef, useState } from \"react\";\nimport {\n\tFormatBold,\n\tFormatItalic,\n\tFormatUnderlined,\n\tFormatListBulleted,\n\tFormatListNumbered,\n\tOpenInFull,\n\tEdit,\n\tVisibilityOutlined,\n} from \"@mui/icons-material\";\nimport { Modal } from \"../../data-display/modal/Modal\";\nimport Button from \"../../button/Button\";\nimport { Tabs } from \"../../navigation/tabs/Tabs\";\nimport { MarkdownPreview } from \"./MarkdownPreview\";\nimport { continueList, toggleList, type ListType } from \"./listEditing\";\nimport Tooltip from \"../../tooltip/Tooltip\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { Typography } from \"../../data-display/typography/Typography\";\nimport { InputLabel } from \"../shared/InputLabel\";\nimport { EditIcon, VisibilityIcon } from \"../../icon\";\n\n/**\n * Props for the RichMarkdownInput component\n */\nexport interface RichMarkdownInputProps {\n\t/** Unique identifier for the markdown input */\n\tid?: string;\n\t/** Current markdown value */\n\tvalue?: string;\n\t/** Default value for the input */\n\tdefaultValue?: string;\n\t/** Placeholder text for the textarea */\n\tplaceholder?: string;\n\t/** Minimum number of visible text lines */\n\tminRows?: number;\n\t/** Maximum number of visible text lines */\n\tmaxRows?: number;\n\t/** Whether the input is disabled */\n\tisDisabled?: boolean;\n\t/** Additional CSS classes for the wrapper container */\n\tclassName?: string;\n\t/** Additional CSS classes for the textarea */\n\ttextareaClassName?: string;\n\t/** Additional CSS classes for the preview container */\n\tpreviewClassName?: string;\n\t/** Label text to display above the input */\n\tlabel?: string;\n\t/** Additional CSS classes for the label */\n\tlabelClassName?: string;\n\t/** Whether the field is required and the required indicator shows as conditional */\n\tisRequiredConditional?: boolean;\n\t/** Whether the field is required */\n\trequired?: boolean;\n\t/** Whether to show the preview button */\n\tshowPreviewOnModal?: boolean;\n\t/** Maximum character count */\n\tmaxLength?: number;\n\t/** Link target behavior: '_blank' for new tab, '_self' for current tab */\n\tlinkTarget?: '_blank' | '_self';\n\t/** Error message to display */\n\terrorMessage?: string;\n\t/** Tooltip text */\n\ttooltip?: string;\n\t/** Whether to preserve original case (no auto-lowercase) */\n\toriginalCase?: boolean;\n\t/** Icon to display at the end of the input */\n\tsuffixIcon?: React.ReactNode;\n\t/** Whether the input is clearable */\n\tisClearable?: boolean;\n\t/** Ref for the input element */\n\tinputref?: React.RefObject<HTMLTextAreaElement>;\n\t/** Whether to show the formatting help tooltip */\n\tshowFormattingHelp?: boolean;\n\t/** Keyboard event handler */\n\tonKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n\t/** Whether to remove indentation from lists and align all content to the left in preview */\n\tnoIndent?: boolean;\n\t/** Whether to display all content with uniform font size/weight (paragraph-like) while keeping formatting */\n\tshowMinimalPreview?: boolean;\n\t/** Whether to accept and render advanced content (code blocks, blockquotes, tables, images) in preview */\n\tacceptAdvanceContent?: boolean;\n\t/** Callback function called when the markdown value changes */\n\tonChange: (value: string) => void;\n}\n\n/**\n * The type of view for the rich markdown input\n */\ntype RichMarkdownInputViewType = \"edit\" | \"preview\";\n\n/**\n * The tabs for the rich markdown input\n */\nconst RichMarkdownInputTabs: RichMarkdownInputViewType[] = [\"edit\", \"preview\"];\n\n/**\n * Close icon for clearable input\n */\nconst CloseIcon = ({ className, size = 16 }: { className?: string; size?: number }) => (\n\t<svg\n\t\twidth={size}\n\t\theight={size}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstrokeWidth=\"2\"\n\t\tstrokeLinecap=\"round\"\n\t\tstrokeLinejoin=\"round\"\n\t\tclassName={className}\n\t>\n\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n\t</svg>\n);\n\n/**\n * A rich markdown input component with comprehensive formatting toolbar.\n * \n * **Text Formatting:**\n * - Bold (Ctrl+B) - Always visible\n * - Italic (Ctrl+I) - Always visible\n * - Underline (Ctrl+U) - Always visible\n * \n * **Lists:**\n * - Bullet lists - Always visible\n * - Numbered lists - Always visible\n * - Enter continues the list with the next marker; Enter on an empty item exits it\n * \n * **Features:**\n * - Edit/Preview toggle with icons\n * - Character counter (optional)\n * - Preview modal with scrolling\n * - Keyboard shortcuts\n * - Syntax highlighting for code blocks\n * - Responsive toolbar\n * - Dark mode support\n * - Configurable link target behavior\n * - Error message display\n * - Tooltip support\n * - Clear button (optional)\n * - Suffix icon support\n * - Custom keyboard handlers\n * - Minimal preview mode (uniform typography)\n * - Toggle advanced content in preview\n *\n * @example\n * ```tsx\n * <RichMarkdownInput\n * value={markdown}\n * onChange={setMarkdown}\n * placeholder=\"Enter description...\"\n * label=\"Description\"\n * maxLength={300}\n * linkTarget=\"_blank\"\n * isClearable\n * errorMessage=\"Invalid input\"\n * tooltip=\"Use markdown formatting\"\n * showMinimalPreview={false}\n * acceptAdvanceContent={true}\n * />\n * ```\n */\nexport const RichMarkdownInput = forwardRef<\n\tHTMLTextAreaElement,\n\tRichMarkdownInputProps\n>(\n\t(\n\t\t{\n\t\t\tid,\n\t\t\tvalue = \"\",\n\t\t\tdefaultValue,\n\t\t\tonChange,\n\t\t\tplaceholder = \"Enter markdown content...\",\n\t\t\tminRows = 4,\n\t\t\tmaxRows = 20,\n\t\t\tisDisabled = false,\n\t\t\tclassName,\n\t\t\ttextareaClassName,\n\t\t\tpreviewClassName,\n\t\t\tlabel,\n\t\t\tlabelClassName,\n\t\t\tisRequiredConditional,\n\t\t\trequired = false,\n\t\t\tshowPreviewOnModal = false,\n\t\t\tmaxLength,\n\t\t\tlinkTarget = '_blank',\n\t\t\terrorMessage,\n\t\t\ttooltip,\n\t\t\toriginalCase,\n\t\t\tsuffixIcon,\n\t\t\tisClearable,\n\t\t\tinputref,\n\t\t\tshowFormattingHelp = true,\n\t\t\tonKeyDown,\n\t\t\tnoIndent = false,\n\t\t\tshowMinimalPreview = false,\n\t\t\tacceptAdvanceContent = true,\n\t\t},\n\t\tref\n\t) => {\n\t\tconst [mode, setMode] = useState<RichMarkdownInputViewType>(\"edit\");\n\t\tconst [isPreviewOpen, setIsPreviewOpen] = useState(false);\n\t\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\t\tconst inputId = id || `rich-md-input-${Math.random().toString(36).slice(2, 11)}`;\n\n\t\tconst charCount = value.length;\n\n\t\t/**\n\t\t * Insert markdown syntax at cursor position\n\t\t */\n\t\tconst insertMarkdown = (before: string, after: string = \"\", placeholder: string = \"\") => {\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\tif (!textarea) return;\n\n\t\t\tconst start = textarea.selectionStart;\n\t\t\tconst end = textarea.selectionEnd;\n\t\t\tconst selectedText = value.substring(start, end);\n\t\t\tconst textToInsert = selectedText || placeholder;\n\n\t\t\tconst newValue = value.substring(0, start) + before + textToInsert + after + value.substring(end);\n\t\t\tonChange(newValue);\n\n\t\t\t// Set cursor position after insertion\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst newCursorPos = start + before.length + (selectedText ? selectedText.length : 0);\n\t\t\t\ttextarea.focus();\n\t\t\t\ttextarea.setSelectionRange(newCursorPos, newCursorPos + (selectedText ? 0 : placeholder.length));\n\t\t\t}, 0);\n\t\t};\n\n\t\t/**\n\t\t * Toggle list markers on the selected line(s).\n\t\t * Ordered lists are numbered sequentially (1., 2., 3., ...) so the raw\n\t\t * markdown matches what the preview renders.\n\t\t */\n\t\tconst insertList = (type: ListType) => {\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\tif (!textarea) return;\n\n\t\t\tconst result = toggleList(value, textarea.selectionStart, textarea.selectionEnd, type);\n\t\t\tif (maxLength && result.value.length > maxLength) return;\n\n\t\t\tonChange(result.value);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\ttextarea.focus();\n\t\t\t\ttextarea.setSelectionRange(result.caret, result.caret);\n\t\t\t}, 0);\n\t\t};\n\n\t\t/**\n\t\t * Continue the list the caret sits in when Enter is pressed.\n\t\t * Returns true when the key was handled and the default should be prevented.\n\t\t */\n\t\tconst continueListOnEnter = () => {\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\tif (!textarea) return false;\n\n\t\t\tconst result = continueList(value, textarea.selectionStart, textarea.selectionEnd);\n\t\t\tif (!result) return false;\n\t\t\tif (maxLength && result.value.length > maxLength) return false;\n\n\t\t\tonChange(result.value);\n\n\t\t\tsetTimeout(() => {\n\t\t\t\ttextarea.focus();\n\t\t\t\ttextarea.setSelectionRange(result.caret, result.caret);\n\t\t\t}, 0);\n\n\t\t\treturn true;\n\t\t};\n\n\t\t/**\n\t\t * Handle keyboard shortcuts\n\t\t */\n\t\tconst handleKeyDownInternal = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\t// Call external handler first\n\t\t\tonKeyDown?.(e);\n\n\t\t\tif (\n\t\t\t\te.key === 'Enter' &&\n\t\t\t\t!e.shiftKey &&\n\t\t\t\t!e.altKey &&\n\t\t\t\t!e.metaKey &&\n\t\t\t\t!e.ctrlKey &&\n\t\t\t\t!e.defaultPrevented\n\t\t\t) {\n\t\t\t\tif (continueListOnEnter()) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.metaKey || e.ctrlKey) {\n\t\t\t\tswitch (e.key.toLowerCase()) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('**', '**', 'bold text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('*', '*', 'italic text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'u':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('<u>', '</u>', 'underlined text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'k':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('[', '](url)', 'link text');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e':\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tinsertMarkdown('```', '```', 'code');\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Handle clear button click\n\t\t */\n\t\tconst handleClear = () => {\n\t\t\tonChange('');\n\t\t\tconst textarea = (ref as React.RefObject<HTMLTextAreaElement>)?.current || textareaRef.current;\n\t\t\ttextarea?.focus();\n\t\t};\n\n\t\t/**\n\t\t * Calculate dynamic rows based on content\n\t\t */\n\t\tconst calculateRows = () => {\n\t\t\tconst lineCount = (value.match(/\\n/g) || []).length + 1;\n\t\t\treturn Math.min(maxRows, Math.max(minRows, lineCount));\n\t\t};\n\n\t\tconst rows = calculateRows();\n\n\t\tconst content = (\n\t\t\t<div className={cn(\"flex flex-col\", className)}>\n\t\t\t\t<div className={`flex flex-row items-center ${label ? \"justify-between\" : \"justify-end\"} w-full`}>\n\t\t\t\t\t{/* Label */}\n\t\t\t\t\t{label && (\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\t\t\tclassName={`mb-1 text-xs font-medium text-gray-600 inline-flex items-center gap-1 ${!originalCase ? \"capitalize\" : \"\"\n\t\t\t\t\t\t\t\t} ${labelClassName || \"!uppercse\"}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"flex flex-wrap items-center justify-between w-full\">\n\t\t\t\t\t\t\t\t<div className=\"inline-flex flex-wrap items-center gap-1\">\n\t\t\t\t\t\t\t\t\t<InputLabel label={label || \"\"} required={required || false} isRequiredConditional={isRequiredConditional || false} />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Markdown Formatting Info */}\n\t\t\t\t\t{showFormattingHelp && (\n\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\tplacement=\"bottom-end\"\n\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-center py-2 px-3 min-w-[220px] gap-2 bg-neutral-900 rounded-lg\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-start gap-1 w-full\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">**bold**</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <strong>bold</strong> text\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">*italic*</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <em>italic</em> text\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">`code`</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <code>inline code</code>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\"><u>text</u></span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <u>underline</u>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">~~strike~~</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ <del>strike</del>\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">- item</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ bullet list\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">1. item</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ numbered list\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{acceptAdvanceContent && (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">## heading</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t→ heading 2\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">[link](url)</span>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t→ hyperlink\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{acceptAdvanceContent && (\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-start gap-1 w-full\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-start gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row justify-center items-center px-[3px] bg-neutral-700 rounded-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter\">> quote</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t→ blockquote\n\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-start justify-start gap-0.5 w-full mt-0.5\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row items-center gap-1 ml-1\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-[18px] leading-4\">•</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-white text-xs font-medium leading-4 font-inter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tTable:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex flex-col px-1 py-0.5 bg-neutral-700 ml-2 rounded-sm gap-0\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap\">| Header 1 | Header 2 | Header 3 |</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap\">| :--- | :---: | ---: |</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-300 text-xs font-medium leading-4 font-inter whitespace-nowrap\">| Left | Center | Right |</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Typography className=\"mb-2 text-xs font-medium text-primary-700 inline-flex items-center gap-1 cursor-pointer\">\n\t\t\t\t\t\t\t\tFormatting help ?\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Main Container */}\n\t\t\t\t<div className={cn(\n\t\t\t\t\t\"flex flex-col border shadow-[0px_1px_2px_rgba(0,0,0,0.05)] rounded-lg bg-white dark:bg-black-700 w-full\",\n\t\t\t\t\terrorMessage\n\t\t\t\t\t\t? \"border-red-300 focus-within:border-red-500 focus-within:shadow-[0_0_0_1.5px_var(--color-red-200)]\"\n\t\t\t\t\t\t: \"border-[#EAECF0] dark:border-black-600 focus-within:border-primary-600 dark:focus-within:border-primary-400 focus-within:shadow-[0_0_0_1.5px_var(--color-primary-100)] dark:focus-within:shadow-[0_0_0_1.5px_var(--color-primary-950)]\"\n\t\t\t\t)}>\n\t\t\t\t\t{/* Toolbar */}\n\t\t\t\t\t<div className={cn(\n\t\t\t\t\t\t\"flex flex-row justify-between items-center px-3 py-2 gap-2 h-11 rounded-t-lg bg-[#F9FAFB] dark:bg-black-600 border-b border-[#EAECF0] dark:border-black-600\"\n\t\t\t\t\t)}>\n\t\t\t\t\t\t{/* Left: Formatting Buttons */}\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-bold`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertMarkdown('**', '**', 'bold text')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Bold (Ctrl+B)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatBold sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-italic`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertMarkdown('*', '*', 'italic text')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Italic (Ctrl+I)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatItalic sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-underline`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertMarkdown('<u>', '</u>', 'underlined text')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Underline (Ctrl+U)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatUnderlined sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<div className=\"w-px h-5 bg-[#EAECF0] dark:bg-black-500 rounded-full\" />\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-numbered-list`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertList('ordered')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Numbered List\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatListNumbered sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tid={`${inputId}-bullet-list`}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => insertList('bullet')}\n\t\t\t\t\t\t\t\tdisabled={isDisabled || mode === \"preview\"}\n\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\ttitle=\"Bullet List\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FormatListBulleted sx={{ fontSize: 20, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t{/* Center: Character Count */}\n\t\t\t\t\t\t\t{maxLength && (\n\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t\t\t<span className=\"text-sm font-medium text-[#475467] dark:text-neutral-400\">\n\t\t\t\t\t\t\t\t\t\t{charCount}/{maxLength}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t<div className=\"w-px h-6 bg-[#EAECF0] dark:bg-black-500 rounded-full\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* Right: Edit/Preview Toggle */}\n\t\t\t\t\t\t\t{showPreviewOnModal ? (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tid={`${inputId}-expand`}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={() => setIsPreviewOpen(true)}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\tclassName=\"!p-0.5 !min-w-0 !h-auto ml-1 !rounded-md hover:!bg-neutral-200 dark:hover:!bg-black-500 hover:!scale-110 !transition-all !duration-200\"\n\t\t\t\t\t\t\t\t\tappearance=\"ghost\"\n\t\t\t\t\t\t\t\t\tstatus=\"no-background\"\n\t\t\t\t\t\t\t\t\ttitle=\"Expand Preview\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<OpenInFull sx={{ fontSize: 16, color: '#667085' }} className=\"dark:text-neutral-400\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Tabs<RichMarkdownInputViewType>\n\t\t\t\t\t\t\t\t\tvariant=\"switch\"\n\t\t\t\t\t\t\t\t\ttabs={RichMarkdownInputTabs}\n\t\t\t\t\t\t\t\t\tactiveTab={mode}\n\t\t\t\t\t\t\t\t\tonTabClick={(tab) => setMode(tab)}\n\t\t\t\t\t\t\t\t\theight=\"h-5\"\n\t\t\t\t\t\t\t\t\ticonsOnly\n\t\t\t\t\t\t\t\t\ttabIcons={{\n\t\t\t\t\t\t\t\t\t\tedit: (<EditIcon className=\"h-md w-md dark:text-neutral-400\" />),\n\t\t\t\t\t\t\t\t\t\tpreview: (\n\t\t\t\t\t\t\t\t\t\t\t<VisibilityIcon className=\"h-md w-md dark:text-neutral-400\" />\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tclassName=\"rounded-lg\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Content Area */}\n\t\t\t\t\t<div className=\"px-3 py-2 relative\">\n\t\t\t\t\t\t{mode === \"edit\" ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\t\t\t\t// Handle all refs: forwarded ref, internal ref, and inputref\n\t\t\t\t\t\t\t\t\t\tif (typeof ref === 'function') {\n\t\t\t\t\t\t\t\t\t\t\tref(node);\n\t\t\t\t\t\t\t\t\t\t} else if (ref) {\n\t\t\t\t\t\t\t\t\t\t\t(ref as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t(textareaRef as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n\t\t\t\t\t\t\t\t\t\tif (inputref) {\n\t\t\t\t\t\t\t\t\t\t\t(inputref as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\t\t\tconst newValue = originalCase ? e.target.value : e.target.value;\n\t\t\t\t\t\t\t\t\t\tif (!maxLength || newValue.length <= maxLength) {\n\t\t\t\t\t\t\t\t\t\t\tonChange(newValue);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonKeyDown={handleKeyDownInternal}\n\t\t\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\t\t\trows={rows}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\t\t\t\tmaxLength={maxLength}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t// Base styles\n\t\t\t\t\t\t\t\t\t\t\"w-full bg-transparent !focus:ring-0 !focus:border-none\",\n\t\t\t\t\t\t\t\t\t\t\"font-inter font-medium text-sm leading-5\",\n\t\t\t\t\t\t\t\t\t\t\"text-[#101828] dark:text-neutral-100\",\n\t\t\t\t\t\t\t\t\t\t\"placeholder:text-neutral-400 dark:placeholder:text-neutral-500\",\n\t\t\t\t\t\t\t\t\t\t\"focus:outline-none resize-none\",\n\t\t\t\t\t\t\t\t\t\t// Hide scrollbar\n\t\t\t\t\t\t\t\t\t\t\"scrollbar-none\",\n\t\t\t\t\t\t\t\t\t\t\"[&::-webkit-scrollbar]:hidden\",\n\t\t\t\t\t\t\t\t\t\t\"[-ms-overflow-style:none]\",\n\t\t\t\t\t\t\t\t\t\t\"[scrollbar-width:none]\",\n\t\t\t\t\t\t\t\t\t\t// Disabled state\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"text-neutral-400 dark:text-neutral-500 cursor-not-allowed\": isDisabled,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t// Add padding if suffix icons exist\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\"pr-20\": isClearable || suffixIcon,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\ttextareaClassName\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t{/* Suffix Icons */}\n\t\t\t\t\t\t\t\t{(isClearable || suffixIcon) && mode === \"edit\" && (\n\t\t\t\t\t\t\t\t\t<div className=\"absolute right-1 top-2 flex items-center gap-1\">\n\t\t\t\t\t\t\t\t\t\t{isClearable && value && (\n\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\tid={`btn-input-field-clear-${id}`}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"absolute inset-y-0 flex items-center cursor-pointer top-2 right-1 focus:outline-none\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleClear}\n\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<CloseIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-neutral-300 dark:text-black-500 hover:text-neutral-400 dark:hover:text-black-400 transition-colors\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{suffixIcon && <div className=\"flex items-center\">{suffixIcon}</div>}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"w-full min-h-[92px] max-h-[400px] overflow-y-auto\">\n\t\t\t\t\t\t\t\t<MarkdownPreview\n\t\t\t\t\t\t\t\t\tcontent={value}\n\t\t\t\t\t\t\t\t\tlinkTarget={linkTarget}\n\t\t\t\t\t\t\t\t\tclassName={previewClassName}\n\t\t\t\t\t\t\t\t\tnoIndent={noIndent}\n\t\t\t\t\t\t\t\t\tshowMinimalPreview={showMinimalPreview}\n\t\t\t\t\t\t\t\t\tacceptAdvanceContent={acceptAdvanceContent}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Expanded Preview Modal */}\n\t\t\t\t<Modal\n\t\t\t\t\topen={isPreviewOpen}\n\t\t\t\t\tonCancel={() => setIsPreviewOpen(false)}\n\t\t\t\t\ttitle=\"Markdown Preview\"\n\t\t\t\t\twidth={900}\n\t\t\t\t\tfooter={null}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"max-h-[calc(100vh-200px)] overflow-y-auto p-4\">\n\t\t\t\t\t\t<MarkdownPreview\n\t\t\t\t\t\t\tcontent={value}\n\t\t\t\t\t\t\tlinkTarget={linkTarget}\n\t\t\t\t\t\t\tclassName={previewClassName}\n\t\t\t\t\t\t\tnoIndent={noIndent}\n\t\t\t\t\t\t\tshowMinimalPreview={showMinimalPreview}\n\t\t\t\t\t\t\tacceptAdvanceContent={acceptAdvanceContent}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</Modal>\n\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{errorMessage && (\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ opacity: 0, y: -10 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\t\t\texit={{ opacity: 0, y: -10 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\tclassName=\"mt-1 text-error-500\"\n\t\t\t\t\t\t\t\tappearance=\"custom\"\n\t\t\t\t\t\t\t\tsize=\"extra-small\"\n\t\t\t\t\t\t\t\tvariant=\"medium\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{errorMessage}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t);\n\n\t\treturn tooltip ? (\n\t\t\t<Tooltip title={tooltip}>\n\t\t\t\t{content}\n\t\t\t</Tooltip>\n\t\t) : (\n\t\t\tcontent\n\t\t);\n\t}\n);\n\nRichMarkdownInput.displayName = \"RichMarkdownInput\";\n"],"names":["RichMarkdownInputTabs","CloseIcon","className","size","jsxs","jsx","RichMarkdownInput","forwardRef","id","value","defaultValue","onChange","placeholder","minRows","maxRows","isDisabled","textareaClassName","previewClassName","label","labelClassName","isRequiredConditional","required","showPreviewOnModal","maxLength","linkTarget","errorMessage","tooltip","originalCase","suffixIcon","isClearable","inputref","showFormattingHelp","onKeyDown","noIndent","showMinimalPreview","acceptAdvanceContent","ref","mode","setMode","useState","isPreviewOpen","setIsPreviewOpen","textareaRef","useRef","inputId","charCount","insertMarkdown","before","after","textarea","start","end","selectedText","textToInsert","newValue","newCursorPos","insertList","type","result","toggleList","continueListOnEnter","continueList","handleKeyDownInternal","e","handleClear","rows","lineCount","content","cn","InputLabel","Tooltip","Fragment","Typography","Button","FormatBold","FormatItalic","FormatUnderlined","FormatListNumbered","FormatListBulleted","OpenInFull","Tabs","tab","EditIcon","VisibilityIcon","node","MarkdownPreview","Modal","AnimatePresence","motion"],"mappings":"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"}
|