@commercetools/nimbus 0.0.0-canary-20250916130207 → 0.0.0-canary-20250918091239

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.
Files changed (78) hide show
  1. package/dist/chunks/icon-BHx0r3NL.cjs.js +2 -0
  2. package/dist/chunks/icon-BHx0r3NL.cjs.js.map +1 -0
  3. package/dist/chunks/icon-DHu0zrOb.es.js +14 -0
  4. package/dist/chunks/icon-DHu0zrOb.es.js.map +1 -0
  5. package/dist/chunks/icon.recipe-ClxbhW0Q.cjs.js +2 -0
  6. package/dist/chunks/icon.recipe-ClxbhW0Q.cjs.js.map +1 -0
  7. package/dist/chunks/icon.recipe-DjkjodUn.es.js +24 -0
  8. package/dist/chunks/icon.recipe-DjkjodUn.es.js.map +1 -0
  9. package/dist/chunks/inline-svg-DTleUhZq.es.js +21 -0
  10. package/dist/chunks/inline-svg-DTleUhZq.es.js.map +1 -0
  11. package/dist/chunks/inline-svg-DbvmiSw9.cjs.js +2 -0
  12. package/dist/chunks/inline-svg-DbvmiSw9.cjs.js.map +1 -0
  13. package/dist/chunks/{menu-bzi7WVh0.cjs.js → menu-CQYhHGbS.cjs.js} +2 -2
  14. package/dist/chunks/{menu-bzi7WVh0.cjs.js.map → menu-CQYhHGbS.cjs.js.map} +1 -1
  15. package/dist/chunks/{menu-DZVU5Z-r.es.js → menu-DnbrSKhK.es.js} +2 -2
  16. package/dist/chunks/{menu-DZVU5Z-r.es.js.map → menu-DnbrSKhK.es.js.map} +1 -1
  17. package/dist/chunks/rich-text-input-BbCjT_Nf.es.js +7916 -0
  18. package/dist/chunks/rich-text-input-BbCjT_Nf.es.js.map +1 -0
  19. package/dist/chunks/rich-text-input-BwrGY2EU.cjs.js +24 -0
  20. package/dist/chunks/rich-text-input-BwrGY2EU.cjs.js.map +1 -0
  21. package/dist/chunks/{split-button-BR8DktKd.es.js → split-button-ClVaxLZ7.es.js} +3 -3
  22. package/dist/chunks/{split-button-BR8DktKd.es.js.map → split-button-ClVaxLZ7.es.js.map} +1 -1
  23. package/dist/chunks/{split-button-1uPesHKO.cjs.js → split-button-D-3pT-LA.cjs.js} +2 -2
  24. package/dist/chunks/{split-button-1uPesHKO.cjs.js.map → split-button-D-3pT-LA.cjs.js.map} +1 -1
  25. package/dist/chunks/use-inline-svg-C2ko8Bcq.cjs.js +2 -0
  26. package/dist/chunks/use-inline-svg-C2ko8Bcq.cjs.js.map +1 -0
  27. package/dist/chunks/use-inline-svg-Cua0623E.es.js +47 -0
  28. package/dist/chunks/use-inline-svg-Cua0623E.es.js.map +1 -0
  29. package/dist/components/components.cjs +1 -1
  30. package/dist/components/components.es.js +79 -77
  31. package/dist/components/components.es.js.map +1 -1
  32. package/dist/components/constants.cjs +1 -1
  33. package/dist/components/constants.cjs.map +1 -1
  34. package/dist/components/constants.es.js +13 -122
  35. package/dist/components/constants.es.js.map +1 -1
  36. package/dist/components/hooks.cjs +1 -1
  37. package/dist/components/hooks.es.js +2 -5
  38. package/dist/components/icon.cjs +1 -1
  39. package/dist/components/icon.es.js +1 -1
  40. package/dist/components/inline-svg.cjs +2 -0
  41. package/dist/components/inline-svg.cjs.map +1 -0
  42. package/dist/components/inline-svg.es.js +5 -0
  43. package/dist/components/inline-svg.es.js.map +1 -0
  44. package/dist/components/rich-text-input.cjs +1 -1
  45. package/dist/components/rich-text-input.es.js +1 -1
  46. package/dist/components/split-button.cjs +1 -1
  47. package/dist/components/split-button.es.js +1 -1
  48. package/dist/components/utils.cjs +2 -1
  49. package/dist/components/utils.cjs.map +1 -1
  50. package/dist/components/utils.es.js +543 -65
  51. package/dist/components/utils.es.js.map +1 -1
  52. package/dist/components.d.ts +34 -0
  53. package/dist/constants.d.ts +4 -113
  54. package/dist/hooks.d.ts +7 -46
  55. package/dist/index.cjs +1 -1
  56. package/dist/index.cjs.map +1 -1
  57. package/dist/index.d.ts +41 -45
  58. package/dist/index.es.js +121 -119
  59. package/dist/index.es.js.map +1 -1
  60. package/dist/inline-svg.d.ts +139 -0
  61. package/dist/utils.d.ts +28 -148
  62. package/package.json +6 -5
  63. package/dist/chunks/icon-BoRbJStV.es.js +0 -31
  64. package/dist/chunks/icon-BoRbJStV.es.js.map +0 -1
  65. package/dist/chunks/icon-Cny8ZtnX.cjs.js +0 -2
  66. package/dist/chunks/icon-Cny8ZtnX.cjs.js.map +0 -1
  67. package/dist/chunks/rich-text-input-B3s6cy-T.cjs.js +0 -2
  68. package/dist/chunks/rich-text-input-B3s6cy-T.cjs.js.map +0 -1
  69. package/dist/chunks/rich-text-input-D4cP13Oo.es.js +0 -691
  70. package/dist/chunks/rich-text-input-D4cP13Oo.es.js.map +0 -1
  71. package/dist/chunks/slate-helpers-BwRHJO4o.es.js +0 -6919
  72. package/dist/chunks/slate-helpers-BwRHJO4o.es.js.map +0 -1
  73. package/dist/chunks/slate-helpers-CMAwCMk0.cjs.js +0 -24
  74. package/dist/chunks/slate-helpers-CMAwCMk0.cjs.js.map +0 -1
  75. package/dist/chunks/use-formatting-state-Denpy3Zo.cjs.js +0 -2
  76. package/dist/chunks/use-formatting-state-Denpy3Zo.cjs.js.map +0 -1
  77. package/dist/chunks/use-formatting-state-RJvSR-Zg.es.js +0 -247
  78. package/dist/chunks/use-formatting-state-RJvSR-Zg.es.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"icon-Cny8ZtnX.cjs.js","sources":["../../src/components/icon/icon.recipe.tsx","../../src/components/icon/icon.slots.tsx","../../src/components/icon/icon.tsx"],"sourcesContent":["import { defineRecipe } from \"@chakra-ui/react/styled-system\";\n\n/**\n * Recipe configuration for the Icon component.\n * Defines the styling variants and base styles using Chakra UI's recipe system.\n */\nexport const iconRecipe = defineRecipe({\n className: \"nimbus-icon\",\n base: {\n display: \"inline-block\",\n },\n\n variants: {\n /**\n * allows applying a predefined size to the icon\n */\n size: {\n \"2xs\": { boxSize: \"600\" },\n xs: { boxSize: \"800\" },\n sm: { boxSize: \"900\" },\n md: { boxSize: \"1000\" },\n lg: { boxSize: \"1200\" },\n xl: { boxSize: \"1400\" },\n },\n },\n});\n","import {\n type HTMLChakraProps,\n type RecipeProps,\n type UnstyledProp,\n createRecipeContext,\n} from \"@chakra-ui/react/styled-system\";\n\nimport { iconRecipe } from \"./icon.recipe\";\n\n/**\n * Base recipe props interface that combines Chakra UI's recipe props\n * with the unstyled prop option for the svg element.\n */\ninterface IconRecipeProps extends RecipeProps<\"svg\">, UnstyledProp {}\n\n/**\n * Root props interface that extends Chakra's HTML props with our recipe props.\n * This creates a complete set of props for the root element, combining\n * HTML attributes, Chakra's styling system, and our custom recipe props.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface IconRootSlotProps\n extends HTMLChakraProps<\"svg\", IconRecipeProps> {}\n\nconst { withContext } = createRecipeContext({ recipe: iconRecipe });\n\n/**\n * Root component that provides the styling context for the Icon component.\n * Uses Chakra UI's recipe context system for consistent styling across instances.\n */\nexport const IconRootSlot = withContext<SVGSVGElement, IconRootSlotProps>(\n \"svg\"\n);\n","import { IconRootSlot } from \"./icon.slots\";\nimport type { IconProps } from \"./icon.types\";\n\n/**\n * # Icon\n *\n * displays icon components\n *\n * @see {@link https://nimbus-documentation.vercel.app/components/media/icon}\n */\nexport const Icon = (props: IconProps) => {\n const { ref, ...restProps } = props;\n return <IconRootSlot ref={ref} asChild={!restProps.as} {...restProps} />;\n};\n\nIcon.displayName = \"Icon\";\n"],"names":["iconRecipe","defineRecipe","withContext","createRecipeContext","IconRootSlot","Icon","props","ref","restProps","jsx"],"mappings":"8FAMaA,EAAaC,EAAAA,aAAa,CACrC,UAAW,cACX,KAAM,CACJ,QAAS,cAAA,EAGX,SAAU,CAIR,KAAM,CACJ,MAAO,CAAE,QAAS,KAAA,EAClB,GAAI,CAAE,QAAS,KAAA,EACf,GAAI,CAAE,QAAS,KAAA,EACf,GAAI,CAAE,QAAS,MAAA,EACf,GAAI,CAAE,QAAS,MAAA,EACf,GAAI,CAAE,QAAS,MAAA,CAAO,CACxB,CAEJ,CAAC,ECDK,CAAE,YAAAC,CAAA,EAAgBC,EAAAA,oBAAoB,CAAE,OAAQH,EAAY,EAMrDI,EAAeF,EAC1B,KACF,ECtBaG,EAAQC,GAAqB,CACxC,KAAM,CAAE,IAAAC,EAAK,GAAGC,CAAA,EAAcF,EAC9B,OAAOG,EAAAA,IAACL,GAAa,IAAAG,EAAU,QAAS,CAACC,EAAU,GAAK,GAAGA,EAAW,CACxE,EAEAH,EAAK,YAAc"}
@@ -1,2 +0,0 @@
1
- "use strict";const e=require("react/jsx-runtime"),p=require("react"),k=require("@chakra-ui/react"),oe=require("./extractStyleProps-CDKV7i5o.cjs.js"),n=require("./slate-helpers-CMAwCMk0.cjs.js"),D=require("./use-formatting-state-Denpy3Zo.cjs.js"),I=require("../components/constants.cjs"),b=require("./box-CWni3A32.cjs.js"),N=require("./divider-Lm98hgn6.cjs.js"),U=require("./group-Buy-O6Mr.cjs.js"),O=require("./icon-button-CFLScvMi.cjs.js"),w=require("./icon-toggle-button-DJsMgc_N.cjs.js"),v=require("./text-CCW9kDT_.cjs.js"),d=require("./tooltip-g8-hEdZp.cjs.js"),M=require("./visually-hidden-Bh-G5QHv.cjs.js"),_=require("./toggle-button-group-DX134q7m.cjs.js"),re=require("./toolbar-BfEvyuOt.cjs.js"),f=require("@commercetools/nimbus-icons"),y=require("./menu-bzi7WVh0.cjs.js"),G=k.defineSlotRecipe({slots:["root","toolbar","editable"],className:"nimbus-rich-text-input",base:{root:{display:"flex",flexDirection:"column",position:"relative",width:"full",borderRadius:"200",borderWidth:"{sizes.25}",colorPalette:"slate",borderColor:"colorPalette.7",backgroundColor:"colorPalette.contrast","&[data-invalid='true']":{borderWidth:"{sizes.50}",borderColor:"critical.7"}},toolbar:{boxShadow:"1","[data-disabled='true'] &":{opacity:"0.5"}},editable:{padding:"400",minHeight:"inherit",outline:"none","[data-disabled='true'] &":{cursor:"not-allowed",opacity:"0.5"},"& p":{textStyle:"md",fontWeight:"500"},"& h1":{textStyle:"2xl",fontWeight:"500"},"& h2":{textStyle:"xl",fontWeight:"500"},"& h3":{textStyle:"lg",fontWeight:"500"},"& h4":{textStyle:"md",fontWeight:"500"},"& h5":{textStyle:"xs",fontWeight:"500"},"& blockquote":{textStyle:"md",fontWeight:"400",borderLeftWidth:"{sizes.100}",paddingLeft:"400"},"& ul":{paddingLeft:"600",listStyleType:"disc"},"& ol":{paddingLeft:"600",listStyleType:"decimal"},"& code":{padding:"100",fontFamily:"mono"},"& pre":{padding:"300",borderRadius:"200",overflow:"auto","& code":{padding:"0"}},"& a":{color:"primary.11",textDecoration:"underline",cursor:"pointer",_hover:{textDecoration:"none"}},"& strong":{fontWeight:"700"},"& em":{fontStyle:"italic"},"& u":{textDecoration:"underline"},"& del":{textDecoration:"line-through"},"& sup":{fontSize:"75%",verticalAlign:"super",lineHeight:"0"},"& sub":{fontSize:"75%",verticalAlign:"sub",lineHeight:"0"}}},variants:{}}),{withProvider:ne,withContext:K}=k.createSlotRecipeContext({recipe:G}),ie=ne("div","root"),se=K("div","toolbar"),le=K("div","editable");var ae={isHistory(t){return n.isPlainObject(t)&&Array.isArray(t.redos)&&Array.isArray(t.undos)&&(t.redos.length===0||n.Operation.isOperationList(t.redos[0].operations))&&(t.undos.length===0||n.Operation.isOperationList(t.undos[0].operations))}},z=new WeakMap,S=new WeakMap,C=new WeakMap,m={isHistoryEditor(t){return ae.isHistory(t.history)&&n.Editor.isEditor(t)},isMerging(t){return S.get(t)},isSplittingOnce(t){return C.get(t)},setSplittingOnce(t,o){C.set(t,o)},isSaving(t){return z.get(t)},redo(t){t.redo()},undo(t){t.undo()},withMerging(t,o){var i=m.isMerging(t);S.set(t,!0),o(),S.set(t,i)},withNewBatch(t,o){var i=m.isMerging(t);S.set(t,!0),C.set(t,!0),o(),S.set(t,i),C.delete(t)},withoutMerging(t,o){var i=m.isMerging(t);S.set(t,!1),o(),S.set(t,i)},withoutSaving(t,o){var i=m.isSaving(t);z.set(t,!1);try{o()}finally{z.set(t,i)}}},de=t=>{var o=t,{apply:i}=o;return o.history={undos:[],redos:[]},o.redo=()=>{var{history:l}=o,{redos:s}=l;if(s.length>0){var a=s[s.length-1];a.selectionBefore&&n.Transforms.setSelection(o,a.selectionBefore),m.withoutSaving(o,()=>{n.Editor.withoutNormalizing(o,()=>{for(var c of a.operations)o.apply(c)})}),l.redos.pop(),o.writeHistory("undos",a)}},o.undo=()=>{var{history:l}=o,{undos:s}=l;if(s.length>0){var a=s[s.length-1];m.withoutSaving(o,()=>{n.Editor.withoutNormalizing(o,()=>{var c=a.operations.map(n.Operation.inverse).reverse();for(var u of c)o.apply(u);a.selectionBefore&&n.Transforms.setSelection(o,a.selectionBefore)})}),o.writeHistory("redos",a),l.undos.pop()}},o.apply=l=>{var{operations:s,history:a}=o,{undos:c}=a,u=c[c.length-1],j=u&&u.operations[u.operations.length-1],g=m.isSaving(o),h=m.isMerging(o);if(g==null&&(g=ue(l)),g){if(h==null&&(u==null?h=!1:s.length!==0?h=!0:h=ce(l,j)),m.isSplittingOnce(o)&&(h=!1,m.setSplittingOnce(o,void 0)),u&&h)u.operations.push(l);else{var r={operations:[l],selectionBefore:o.selection};o.writeHistory("undos",r)}for(;c.length>100;)c.shift();a.redos=[]}i(l)},o.writeHistory=(l,s)=>{o.history[l].push(s)},o},ce=(t,o)=>!!(o&&t.type==="insert_text"&&o.type==="insert_text"&&t.offset===o.offset+o.text.length&&n.Path.equals(t.path,o.path)||o&&t.type==="remove_text"&&o.type==="remove_text"&&t.offset+t.text.length===o.offset&&n.Path.equals(t.path,o.path)),ue=(t,o)=>t.type!=="set_selection";const X=p.forwardRef((t,o)=>{const{value:i,onChange:l,onFocus:s,onBlur:a,placeholder:c=I.EDITOR_DEFAULTS.placeholder,isDisabled:u=I.EDITOR_DEFAULTS.isDisabled,isReadOnly:j=I.EDITOR_DEFAULTS.isReadOnly,autoFocus:g=I.EDITOR_DEFAULTS.autoFocus,toolbar:h}=t,r=p.useMemo(()=>{const x=n.createEditor();return n.withLinks(de(n.withReact(x)))},[]),{handleKeyDown:E}=D.useKeyboardShortcuts({editor:r}),H=p.useCallback(x=>{s&&s(x)},[s]),L=p.useCallback(x=>{a&&a(x)},[a]);p.useImperativeHandle(o,()=>({focus:()=>n.focusEditor(r),resetValue:x=>n.resetEditor(r,x)}),[r]);const P=p.useCallback(x=>e.jsx(n.Element$1,{...x}),[]),F=p.useCallback(x=>e.jsx(n.Leaf,{...x}),[]),q=n.createEmptyValue(),V=Array.isArray(i)&&i.length>0?i:q;return e.jsxs(n.Slate,{editor:r,value:V,onChange:l,children:[h&&e.jsx(se,{children:h}),e.jsx(le,{asChild:!0,children:e.jsx(n.Editable,{renderElement:P,renderLeaf:F,placeholder:c,autoFocus:g,readOnly:j||u,onKeyDown:E,onFocus:H,onBlur:L,"aria-label":"Rich text editor",role:"textbox","aria-multiline":"true"})})]})});X.displayName="RichTextEditor";const he=({isDisabled:t=!1})=>{const o=n.useSlate(),i=D.usePreservedSelection(o),{allSelectedKeys:l,handleAllSelectionChange:s}=D.useFormattingState({withPreservedSelection:i});return e.jsxs(y.Menu.Root,{selectionMode:"multiple",selectedKeys:l,onSelectionChange:s,children:[e.jsxs(d.Tooltip.Root,{delay:0,closeDelay:0,children:[e.jsx(y.Menu.Trigger,{asChild:!0,children:e.jsx(O.IconButton,{size:"xs",variant:"ghost","aria-label":"More formatting options",isDisabled:t,onMouseDown:a=>a.preventDefault(),children:e.jsx(f.MoreHoriz,{})})}),e.jsx(d.Tooltip.Content,{placement:"top",children:"More styles"})]}),e.jsxs(y.Menu.Content,{children:[e.jsx(y.Menu.Item,{id:"strikethrough",children:e.jsxs(b.Box,{slot:"label",display:"flex",alignItems:"center",gap:"200",children:[e.jsx(f.FormatStrikethrough,{}),e.jsx(v.Text,{textStyle:"sm",children:"Strikethrough"})]})}),e.jsx(y.Menu.Item,{id:"code",children:e.jsxs(b.Box,{slot:"label",display:"flex",alignItems:"center",gap:"200",children:[e.jsx(f.Code,{}),e.jsx(v.Text,{textStyle:"sm",children:"Code"})]})}),e.jsx(y.Menu.Item,{id:"superscript",children:e.jsxs(b.Box,{slot:"label",display:"flex",alignItems:"center",gap:"200",children:[e.jsx(v.Text,{children:"X²"}),e.jsx(v.Text,{textStyle:"sm",children:"Superscript"})]})}),e.jsx(y.Menu.Item,{id:"subscript",children:e.jsxs(b.Box,{slot:"label",display:"flex",alignItems:"center",gap:"200",children:[e.jsx(v.Text,{children:"X₂"}),e.jsx(v.Text,{textStyle:"sm",children:"Subscript"})]})})]})]})},$=({isDisabled:t=!1})=>{const o=n.useSlate(),i=D.usePreservedSelection(o),{currentTextStyle:l,selectedTextStyleLabel:s,handleTextStyleChange:a,handleListToggle:c,selectedFormatKeys:u,selectedListKeys:j,hasUndos:g,hasRedos:h}=D.useToolbarState({withPreservedSelection:i});return e.jsxs(re.Toolbar,{orientation:"horizontal","aria-label":"Text formatting",width:"full",overflow:"hidden",size:"xs",children:[e.jsx(U.Group,{children:e.jsxs(y.Menu.Root,{onAction:r=>a(String(r)),children:[e.jsxs(d.Tooltip.Root,{delay:0,closeDelay:0,children:[e.jsx(y.Menu.Trigger,{height:"800",width:"4000",bg:"primary.1",borderRadius:"200",_hover:{bg:"primary.2"},isDisabled:t,onMouseDown:r=>r.preventDefault(),"aria-label":"Text style menu",children:e.jsxs(b.Box,{display:"flex",alignItems:"center",gap:"200",px:"200",children:[e.jsx(b.Box,{display:"flex",alignItems:"center",gap:"200",flexGrow:"1",children:e.jsx(v.Text,{my:"auto",textStyle:"sm",fontWeight:"500",children:s})}),e.jsx(f.KeyboardArrowDown,{})]})}),e.jsx(d.Tooltip.Content,{placement:"top",children:"Text style"})]}),e.jsx(y.Menu.Content,{children:I.textStyles.map(r=>e.jsx(y.Menu.Item,{id:r.id,...l===r.id&&{"data-state":"checked"},children:e.jsx(v.Text,{...r.props,children:r.label})},r.id))})]})}),e.jsx(N.Divider,{orientation:"vertical"}),e.jsxs(_.ToggleButtonGroup.Root,{selectionMode:"multiple",selectedKeys:u,isDisabled:t,children:[e.jsxs(d.Tooltip.Root,{delay:0,closeDelay:0,children:[e.jsxs(w.IconToggleButton,{id:"bold",size:"xs",variant:"ghost","aria-label":"Bold",isDisabled:t,onMouseDown:r=>r.preventDefault(),onPress:i(()=>n.toggleMark(o,"bold")),children:[e.jsx(f.FormatBold,{}),e.jsx(M.VisuallyHidden,{children:"Bold"})]}),e.jsx(d.Tooltip.Content,{placement:"top",children:"Bold"})]}),e.jsxs(d.Tooltip.Root,{delay:0,closeDelay:0,children:[e.jsxs(w.IconToggleButton,{id:"italic",size:"xs",variant:"ghost","aria-label":"Italic",isDisabled:t,onMouseDown:r=>r.preventDefault(),onPress:i(()=>n.toggleMark(o,"italic")),children:[e.jsx(f.FormatItalic,{}),e.jsx(M.VisuallyHidden,{children:"Italic"})]}),e.jsx(d.Tooltip.Content,{placement:"top",children:"Italic"})]}),e.jsxs(d.Tooltip.Root,{delay:0,closeDelay:0,children:[e.jsxs(w.IconToggleButton,{id:"underline",size:"xs",variant:"ghost","aria-label":"Underline",isDisabled:t,onMouseDown:r=>r.preventDefault(),onPress:i(()=>n.toggleMark(o,"underline")),children:[e.jsx(f.FormatUnderlined,{}),e.jsx(M.VisuallyHidden,{children:"Underline"})]}),e.jsx(d.Tooltip.Content,{placement:"top",children:"Underline"})]})]}),e.jsx(he,{isDisabled:t}),e.jsx(N.Divider,{orientation:"vertical"}),e.jsxs(_.ToggleButtonGroup.Root,{selectionMode:"single",selectedKeys:j,onSelectionChange:c,"aria-label":"List formatting",isDisabled:t,children:[e.jsxs(d.Tooltip.Root,{delay:0,closeDelay:0,children:[e.jsx(w.IconToggleButton,{id:"bulleted-list",size:"xs",variant:"ghost","aria-label":"Bulleted List",isDisabled:t,onMouseDown:r=>r.preventDefault(),children:e.jsx(f.FormatListBulleted,{})}),e.jsx(d.Tooltip.Content,{placement:"top",children:"Bulleted list"})]}),e.jsxs(d.Tooltip.Root,{delay:0,closeDelay:0,children:[e.jsx(w.IconToggleButton,{id:"numbered-list",size:"xs",variant:"ghost","aria-label":"Numbered List",isDisabled:t,onMouseDown:r=>r.preventDefault(),children:e.jsx(f.FormatListNumbered,{})}),e.jsx(d.Tooltip.Content,{placement:"top",children:"Numbered list"})]})]}),e.jsx(b.Box,{flexGrow:"1"}),e.jsxs(U.Group,{children:[e.jsxs(d.Tooltip.Root,{delay:0,closeDelay:0,children:[e.jsxs(O.IconButton,{size:"xs",variant:"ghost","aria-label":"Undo",isDisabled:!g||t,onPress:i(()=>o.undo()),onMouseDown:r=>r.preventDefault(),children:[e.jsx(f.Undo,{}),e.jsx(M.VisuallyHidden,{children:"Undo"})]}),e.jsx(d.Tooltip.Content,{placement:"top",children:"Undo"})]}),e.jsxs(d.Tooltip.Root,{delay:0,closeDelay:0,children:[e.jsxs(O.IconButton,{size:"xs",variant:"ghost","aria-label":"Redo",isDisabled:!h||t,onPress:i(()=>o.redo()),onMouseDown:r=>r.preventDefault(),children:[e.jsx(f.Redo,{}),e.jsx(M.VisuallyHidden,{children:"Redo"})]}),e.jsx(d.Tooltip.Content,{placement:"top",children:"Redo"})]})]})]})};$.displayName="RichTextToolbar";const J=t=>{const{ref:o,value:i,defaultValue:l,onChange:s,onFocus:a,onBlur:c,placeholder:u="",isDisabled:j=!1,isReadOnly:g=!1,isInvalid:h=!1,autoFocus:r=!1,...E}=t,H=k.useSlotRecipe({recipe:G}),[L,P]=H.splitVariantProps({...E}),[F,q]=oe.extractStyleProps(P),V={"data-disabled":j?"true":void 0,"data-invalid":h?"true":void 0,"data-readonly":g?"true":void 0},[x,A]=p.useState(()=>{const T=i??l??"";try{return T?n.fromHTML(T):n.createEmptyValue()}catch(R){return console.warn("Failed to parse initial HTML, using empty value:",R),n.createEmptyValue()}}),[B,W]=p.useState(()=>i??l??""),Q=p.useRef(null);p.useEffect(()=>{if(i!==void 0&&i!==B){const T=i?n.fromHTML(i):n.createEmptyValue();A(T),W(i)}},[i,B]);const Y=p.useCallback(T=>{const R=n.toHTML(T),te=R!==B;A(T),W(R),te&&s&&s(R)},[B,s]),Z=x,ee=n.validSlateStateAdapter(Z);return e.jsx(ie,{...L,...F,...q,...V,ref:o,children:e.jsx(X,{ref:Q,value:ee,onChange:Y,onFocus:a,onBlur:c,placeholder:u,isDisabled:j,isReadOnly:g,autoFocus:r,toolbar:g?null:e.jsx($,{isDisabled:j})})})};J.displayName="RichTextInput";exports.RichTextInput=J;
2
- //# sourceMappingURL=rich-text-input-B3s6cy-T.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rich-text-input-B3s6cy-T.cjs.js","sources":["../../src/components/rich-text-input/rich-text-input.recipe.tsx","../../src/components/rich-text-input/rich-text-input.slots.tsx","../../../../node_modules/.pnpm/slate-history@0.113.1_slate@0.75.0/node_modules/slate-history/dist/index.es.js","../../src/components/rich-text-input/components/rich-text-editor.tsx","../../src/components/rich-text-input/components/formatting-menu.tsx","../../src/components/rich-text-input/components/rich-text-toolbar.tsx","../../src/components/rich-text-input/rich-text-input.tsx"],"sourcesContent":["import { defineSlotRecipe } from \"@chakra-ui/react\";\n\nexport const richTextInputRecipe = defineSlotRecipe({\n slots: [\"root\", \"toolbar\", \"editable\"],\n className: \"nimbus-rich-text-input\",\n base: {\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n position: \"relative\",\n width: \"full\",\n borderRadius: \"200\",\n borderWidth: \"{sizes.25}\",\n colorPalette: \"slate\",\n borderColor: \"colorPalette.7\",\n backgroundColor: \"colorPalette.contrast\",\n\n // Invalid state styling\n \"&[data-invalid='true']\": {\n borderWidth: \"{sizes.50}\",\n borderColor: \"critical.7\",\n },\n },\n toolbar: {\n boxShadow: \"1\",\n\n // Disabled state styling for toolbar\n \"[data-disabled='true'] &\": {\n opacity: \"0.5\",\n },\n },\n editable: {\n padding: \"400\",\n minHeight: \"inherit\",\n outline: \"none\",\n\n // Disabled state styling for editable\n \"[data-disabled='true'] &\": {\n cursor: \"not-allowed\",\n opacity: \"0.5\",\n },\n\n // Styling for user-facing editor text\n \"& p\": {\n textStyle: \"md\",\n fontWeight: \"500\",\n },\n \"& h1\": {\n textStyle: \"2xl\",\n fontWeight: \"500\",\n },\n \"& h2\": {\n textStyle: \"xl\",\n fontWeight: \"500\",\n },\n \"& h3\": {\n textStyle: \"lg\",\n fontWeight: \"500\",\n },\n \"& h4\": {\n textStyle: \"md\",\n fontWeight: \"500\",\n },\n \"& h5\": {\n textStyle: \"xs\",\n fontWeight: \"500\",\n },\n \"& blockquote\": {\n textStyle: \"md\",\n fontWeight: \"400\",\n borderLeftWidth: \"{sizes.100}\",\n paddingLeft: \"400\",\n },\n \"& ul\": {\n paddingLeft: \"600\",\n listStyleType: \"disc\",\n },\n \"& ol\": {\n paddingLeft: \"600\",\n listStyleType: \"decimal\",\n },\n \"& code\": {\n padding: \"100\",\n fontFamily: \"mono\",\n },\n \"& pre\": {\n padding: \"300\",\n borderRadius: \"200\",\n overflow: \"auto\",\n \"& code\": {\n padding: \"0\",\n },\n },\n \"& a\": {\n color: \"primary.11\",\n textDecoration: \"underline\",\n cursor: \"pointer\",\n _hover: {\n textDecoration: \"none\",\n },\n },\n \"& strong\": {\n fontWeight: \"700\",\n },\n \"& em\": {\n fontStyle: \"italic\",\n },\n \"& u\": {\n textDecoration: \"underline\",\n },\n \"& del\": {\n textDecoration: \"line-through\",\n },\n \"& sup\": {\n fontSize: \"75%\",\n verticalAlign: \"super\",\n lineHeight: \"0\",\n },\n \"& sub\": {\n fontSize: \"75%\",\n verticalAlign: \"sub\",\n lineHeight: \"0\",\n },\n },\n },\n variants: {},\n});\n","import {\n type HTMLChakraProps,\n type RecipeVariantProps,\n type UnstyledProp,\n createSlotRecipeContext,\n} from \"@chakra-ui/react\";\nimport { richTextInputRecipe } from \"./rich-text-input.recipe\";\n\nconst { withProvider, withContext } = createSlotRecipeContext({\n recipe: richTextInputRecipe,\n});\n\n// Root slot\nexport type RichTextInputRootSlotProps = HTMLChakraProps<\n \"div\",\n RecipeVariantProps<typeof richTextInputRecipe> & UnstyledProp\n>;\n\nexport const RichTextInputRootSlot = withProvider<\n HTMLDivElement,\n RichTextInputRootSlotProps\n>(\"div\", \"root\");\n\n// Toolbar slot\nexport type RichTextInputToolbarSlotProps = HTMLChakraProps<\"div\">;\n\nexport const RichTextInputToolbarSlot = withContext<\n HTMLDivElement,\n RichTextInputToolbarSlotProps\n>(\"div\", \"toolbar\");\n\n// Editable slot\nexport type RichTextInputEditableSlotProps = HTMLChakraProps<\"div\">;\nexport const RichTextInputEditableSlot = withContext<\n HTMLDivElement,\n RichTextInputEditableSlotProps\n>(\"div\", \"editable\");\n","import { isPlainObject } from 'is-plain-object';\nimport { Operation, Editor, Transforms, Path } from 'slate';\n\n// eslint-disable-next-line no-redeclare\nvar History = {\n /**\n * Check if a value is a `History` object.\n */\n isHistory(value) {\n return isPlainObject(value) && Array.isArray(value.redos) && Array.isArray(value.undos) && (value.redos.length === 0 || Operation.isOperationList(value.redos[0].operations)) && (value.undos.length === 0 || Operation.isOperationList(value.undos[0].operations));\n }\n};\n\n/**\n * Weakmaps for attaching state to the editor.\n */\nvar HISTORY = new WeakMap();\nvar SAVING = new WeakMap();\nvar MERGING = new WeakMap();\nvar SPLITTING_ONCE = new WeakMap();\n// eslint-disable-next-line no-redeclare\nvar HistoryEditor = {\n /**\n * Check if a value is a `HistoryEditor` object.\n */\n isHistoryEditor(value) {\n return History.isHistory(value.history) && Editor.isEditor(value);\n },\n /**\n * Get the merge flag's current value.\n */\n isMerging(editor) {\n return MERGING.get(editor);\n },\n /**\n * Get the splitting once flag's current value.\n */\n isSplittingOnce(editor) {\n return SPLITTING_ONCE.get(editor);\n },\n setSplittingOnce(editor, value) {\n SPLITTING_ONCE.set(editor, value);\n },\n /**\n * Get the saving flag's current value.\n */\n isSaving(editor) {\n return SAVING.get(editor);\n },\n /**\n * Redo to the previous saved state.\n */\n redo(editor) {\n editor.redo();\n },\n /**\n * Undo to the previous saved state.\n */\n undo(editor) {\n editor.undo();\n },\n /**\n * Apply a series of changes inside a synchronous `fn`, These operations will\n * be merged into the previous history.\n */\n withMerging(editor, fn) {\n var prev = HistoryEditor.isMerging(editor);\n MERGING.set(editor, true);\n fn();\n MERGING.set(editor, prev);\n },\n /**\n * Apply a series of changes inside a synchronous `fn`, ensuring that the first\n * operation starts a new batch in the history. Subsequent operations will be\n * merged as usual.\n */\n withNewBatch(editor, fn) {\n var prev = HistoryEditor.isMerging(editor);\n MERGING.set(editor, true);\n SPLITTING_ONCE.set(editor, true);\n fn();\n MERGING.set(editor, prev);\n SPLITTING_ONCE.delete(editor);\n },\n /**\n * Apply a series of changes inside a synchronous `fn`, without merging any of\n * the new operations into previous save point in the history.\n */\n withoutMerging(editor, fn) {\n var prev = HistoryEditor.isMerging(editor);\n MERGING.set(editor, false);\n fn();\n MERGING.set(editor, prev);\n },\n /**\n * Apply a series of changes inside a synchronous `fn`, without saving any of\n * their operations into the history.\n */\n withoutSaving(editor, fn) {\n var prev = HistoryEditor.isSaving(editor);\n SAVING.set(editor, false);\n try {\n fn();\n } finally {\n SAVING.set(editor, prev);\n }\n }\n};\n\n/**\n * The `withHistory` plugin keeps track of the operation history of a Slate\n * editor as operations are applied to it, using undo and redo stacks.\n *\n * If you are using TypeScript, you must extend Slate's CustomTypes to use\n * this plugin.\n *\n * See https://docs.slatejs.org/concepts/11-typescript to learn how.\n */\nvar withHistory = editor => {\n var e = editor;\n var {\n apply\n } = e;\n e.history = {\n undos: [],\n redos: []\n };\n e.redo = () => {\n var {\n history\n } = e;\n var {\n redos\n } = history;\n if (redos.length > 0) {\n var batch = redos[redos.length - 1];\n if (batch.selectionBefore) {\n Transforms.setSelection(e, batch.selectionBefore);\n }\n HistoryEditor.withoutSaving(e, () => {\n Editor.withoutNormalizing(e, () => {\n for (var op of batch.operations) {\n e.apply(op);\n }\n });\n });\n history.redos.pop();\n e.writeHistory('undos', batch);\n }\n };\n e.undo = () => {\n var {\n history\n } = e;\n var {\n undos\n } = history;\n if (undos.length > 0) {\n var batch = undos[undos.length - 1];\n HistoryEditor.withoutSaving(e, () => {\n Editor.withoutNormalizing(e, () => {\n var inverseOps = batch.operations.map(Operation.inverse).reverse();\n for (var op of inverseOps) {\n e.apply(op);\n }\n if (batch.selectionBefore) {\n Transforms.setSelection(e, batch.selectionBefore);\n }\n });\n });\n e.writeHistory('redos', batch);\n history.undos.pop();\n }\n };\n e.apply = op => {\n var {\n operations,\n history\n } = e;\n var {\n undos\n } = history;\n var lastBatch = undos[undos.length - 1];\n var lastOp = lastBatch && lastBatch.operations[lastBatch.operations.length - 1];\n var save = HistoryEditor.isSaving(e);\n var merge = HistoryEditor.isMerging(e);\n if (save == null) {\n save = shouldSave(op);\n }\n if (save) {\n if (merge == null) {\n if (lastBatch == null) {\n merge = false;\n } else if (operations.length !== 0) {\n merge = true;\n } else {\n merge = shouldMerge(op, lastOp);\n }\n }\n if (HistoryEditor.isSplittingOnce(e)) {\n merge = false;\n HistoryEditor.setSplittingOnce(e, undefined);\n }\n if (lastBatch && merge) {\n lastBatch.operations.push(op);\n } else {\n var batch = {\n operations: [op],\n selectionBefore: e.selection\n };\n e.writeHistory('undos', batch);\n }\n while (undos.length > 100) {\n undos.shift();\n }\n history.redos = [];\n }\n apply(op);\n };\n e.writeHistory = (stack, batch) => {\n e.history[stack].push(batch);\n };\n return e;\n};\n/**\n * Check whether to merge an operation into the previous operation.\n */\nvar shouldMerge = (op, prev) => {\n if (prev && op.type === 'insert_text' && prev.type === 'insert_text' && op.offset === prev.offset + prev.text.length && Path.equals(op.path, prev.path)) {\n return true;\n }\n if (prev && op.type === 'remove_text' && prev.type === 'remove_text' && op.offset + op.text.length === prev.offset && Path.equals(op.path, prev.path)) {\n return true;\n }\n return false;\n};\n/**\n * Check whether an operation needs to be saved to the history.\n */\nvar shouldSave = (op, prev) => {\n if (op.type === 'set_selection') {\n return false;\n }\n return true;\n};\n\nexport { HISTORY, History, HistoryEditor, MERGING, SAVING, SPLITTING_ONCE, withHistory };\n//# sourceMappingURL=index.es.js.map\n","import {\n useMemo,\n useCallback,\n useImperativeHandle,\n forwardRef,\n type ForwardedRef,\n type FocusEventHandler,\n type ReactNode,\n} from \"react\";\nimport { createEditor, type Descendant } from \"slate\";\nimport { Slate, Editable, withReact } from \"slate-react\";\nimport { withHistory } from \"slate-history\";\nimport {\n RichTextInputEditableSlot,\n RichTextInputToolbarSlot,\n} from \"../rich-text-input.slots\";\nimport {\n Element,\n Leaf,\n withLinks,\n focusEditor,\n resetEditor,\n} from \"../utils/slate-helpers\";\nimport { createEmptyValue } from \"../utils/html-serialization\";\nimport { useKeyboardShortcuts } from \"../hooks/use-keyboard-shortcuts\";\nimport { EDITOR_DEFAULTS } from \"../constants\";\n\nexport interface RichTextEditorProps {\n value?: Descendant[];\n onChange: (value: Descendant[]) => void;\n onFocus?: FocusEventHandler<HTMLDivElement>;\n onBlur?: FocusEventHandler<HTMLDivElement>;\n placeholder?: string;\n isDisabled?: boolean;\n isReadOnly?: boolean;\n autoFocus?: boolean;\n toolbar?: ReactNode;\n}\n\nexport interface RichTextEditorRef {\n focus: () => void;\n resetValue: (html: string) => void;\n}\n\nexport const RichTextEditor = forwardRef<\n RichTextEditorRef,\n RichTextEditorProps\n>((props, forwardedRef: ForwardedRef<RichTextEditorRef>) => {\n const {\n value,\n onChange,\n onFocus,\n onBlur,\n placeholder = EDITOR_DEFAULTS.placeholder,\n isDisabled = EDITOR_DEFAULTS.isDisabled,\n isReadOnly = EDITOR_DEFAULTS.isReadOnly,\n autoFocus = EDITOR_DEFAULTS.autoFocus,\n toolbar,\n } = props;\n\n // Create editor with plugins\n const editor = useMemo(() => {\n const baseEditor = createEditor();\n return withLinks(withHistory(withReact(baseEditor)));\n }, []);\n\n // Handle keyboard shortcuts using hook\n const { handleKeyDown } = useKeyboardShortcuts({ editor });\n\n // Handle focus\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (onFocus) {\n onFocus(event);\n }\n },\n [onFocus]\n );\n\n // Handle blur\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n if (onBlur) {\n onBlur(event);\n }\n },\n [onBlur]\n );\n\n // Expose methods through ref\n useImperativeHandle(\n forwardedRef,\n () => ({\n focus: () => focusEditor(editor),\n resetValue: (html: string) => resetEditor(editor, html),\n }),\n [editor]\n );\n\n // Render element\n const renderElement = useCallback(\n (props: Parameters<typeof Element>[0]) => <Element {...props} />,\n []\n );\n\n // Render leaf\n const renderLeaf = useCallback(\n (props: Parameters<typeof Leaf>[0]) => <Leaf {...props} />,\n []\n );\n\n // Ensure we always have a valid value\n const defaultValue = createEmptyValue();\n const safeInitialValue =\n Array.isArray(value) && value.length > 0 ? value : defaultValue;\n\n return (\n <Slate editor={editor} value={safeInitialValue} onChange={onChange}>\n {toolbar && (\n <RichTextInputToolbarSlot>{toolbar}</RichTextInputToolbarSlot>\n )}\n <RichTextInputEditableSlot asChild>\n <Editable\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n placeholder={placeholder}\n autoFocus={autoFocus}\n readOnly={isReadOnly || isDisabled}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n aria-label=\"Rich text editor\"\n role=\"textbox\"\n aria-multiline=\"true\"\n />\n </RichTextInputEditableSlot>\n </Slate>\n );\n});\n\nRichTextEditor.displayName = \"RichTextEditor\";\n","import { useSlate } from \"slate-react\";\nimport { Menu, IconButton, Text, Box, Tooltip } from \"@/components\";\nimport {\n MoreHoriz,\n FormatStrikethrough,\n Code,\n} from \"@commercetools/nimbus-icons\";\nimport { usePreservedSelection } from \"../hooks/use-preserved-selection\";\nimport { useFormattingState } from \"../hooks/use-formatting-state\";\n\nexport interface FormattingMenuProps {\n isDisabled?: boolean;\n}\n\nexport const FormattingMenu = ({ isDisabled = false }: FormattingMenuProps) => {\n const editor = useSlate();\n const withPreservedSelection = usePreservedSelection(editor);\n\n // Use the formatting state hook for all state management\n const { allSelectedKeys, handleAllSelectionChange } = useFormattingState({\n withPreservedSelection,\n });\n\n return (\n <Menu.Root\n selectionMode=\"multiple\"\n selectedKeys={allSelectedKeys}\n onSelectionChange={handleAllSelectionChange}\n >\n <Tooltip.Root delay={0} closeDelay={0}>\n <Menu.Trigger asChild>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"More formatting options\"\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n >\n <MoreHoriz />\n </IconButton>\n </Menu.Trigger>\n <Tooltip.Content placement=\"top\">More styles</Tooltip.Content>\n </Tooltip.Root>\n <Menu.Content>\n <Menu.Item id=\"strikethrough\">\n <Box slot=\"label\" display=\"flex\" alignItems=\"center\" gap=\"200\">\n <FormatStrikethrough />\n <Text textStyle=\"sm\">Strikethrough</Text>\n </Box>\n </Menu.Item>\n <Menu.Item id=\"code\">\n <Box slot=\"label\" display=\"flex\" alignItems=\"center\" gap=\"200\">\n <Code />\n <Text textStyle=\"sm\">Code</Text>\n </Box>\n </Menu.Item>\n <Menu.Item id=\"superscript\">\n <Box slot=\"label\" display=\"flex\" alignItems=\"center\" gap=\"200\">\n <Text>X²</Text>\n <Text textStyle=\"sm\">Superscript</Text>\n </Box>\n </Menu.Item>\n <Menu.Item id=\"subscript\">\n <Box slot=\"label\" display=\"flex\" alignItems=\"center\" gap=\"200\">\n <Text>X₂</Text>\n <Text textStyle=\"sm\">Subscript</Text>\n </Box>\n </Menu.Item>\n </Menu.Content>\n </Menu.Root>\n );\n};\n","import { useSlate } from \"slate-react\";\nimport {\n Toolbar,\n Menu,\n VisuallyHidden,\n Divider,\n ToggleButtonGroup,\n IconToggleButton,\n IconButton,\n Text,\n Box,\n Tooltip,\n} from \"@/components\";\nimport { Group } from \"@/components/group\";\nimport {\n FormatBold,\n FormatItalic,\n FormatUnderlined,\n FormatListBulleted,\n FormatListNumbered,\n KeyboardArrowDown,\n Undo,\n Redo,\n} from \"@commercetools/nimbus-icons\";\nimport { toggleMark } from \"../utils/slate-helpers\";\nimport { usePreservedSelection } from \"../hooks/use-preserved-selection\";\nimport { useToolbarState } from \"../hooks/use-toolbar-state\";\nimport { textStyles } from \"../constants\";\nimport { FormattingMenu } from \"./formatting-menu\";\n\nexport interface RichTextToolbarProps {\n isDisabled?: boolean;\n}\n\nexport const RichTextToolbar = ({\n isDisabled = false,\n}: RichTextToolbarProps) => {\n const editor = useSlate();\n const withPreservedSelection = usePreservedSelection(editor);\n\n // Use the toolbar state hook for all state management\n const {\n currentTextStyle,\n selectedTextStyleLabel,\n handleTextStyleChange,\n handleListToggle,\n selectedFormatKeys,\n selectedListKeys,\n hasUndos,\n hasRedos,\n } = useToolbarState({ withPreservedSelection });\n\n return (\n <Toolbar\n orientation=\"horizontal\"\n aria-label=\"Text formatting\"\n width=\"full\"\n overflow=\"hidden\"\n size=\"xs\"\n >\n {/* Text Style Menu */}\n <Group>\n <Menu.Root\n onAction={(styleId) => handleTextStyleChange(String(styleId))}\n >\n <Tooltip.Root delay={0} closeDelay={0}>\n {/* Menu trigger styles mimic the Select component */}\n <Menu.Trigger\n height=\"800\"\n width=\"4000\"\n bg=\"primary.1\"\n borderRadius=\"200\"\n _hover={{ bg: \"primary.2\" }}\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n aria-label=\"Text style menu\"\n >\n <Box display=\"flex\" alignItems=\"center\" gap=\"200\" px=\"200\">\n <Box display=\"flex\" alignItems=\"center\" gap=\"200\" flexGrow=\"1\">\n <Text my=\"auto\" textStyle=\"sm\" fontWeight=\"500\">\n {selectedTextStyleLabel}\n </Text>\n </Box>\n <KeyboardArrowDown />\n </Box>\n </Menu.Trigger>\n <Tooltip.Content placement=\"top\">Text style</Tooltip.Content>\n </Tooltip.Root>\n <Menu.Content>\n {textStyles.map((style) => (\n <Menu.Item\n key={style.id}\n id={style.id}\n {...(currentTextStyle === style.id && {\n \"data-state\": \"checked\",\n })}\n >\n <Text {...style.props}>{style.label}</Text>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Group>\n\n <Divider orientation=\"vertical\" />\n\n {/* Text Formatting Toggles */}\n <ToggleButtonGroup.Root\n selectionMode=\"multiple\"\n selectedKeys={selectedFormatKeys}\n isDisabled={isDisabled}\n >\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"bold\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Bold\"\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n onPress={withPreservedSelection(() => toggleMark(editor, \"bold\"))}\n >\n <FormatBold />\n <VisuallyHidden>Bold</VisuallyHidden>\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">Bold</Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"italic\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Italic\"\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n onPress={withPreservedSelection(() => toggleMark(editor, \"italic\"))}\n >\n <FormatItalic />\n <VisuallyHidden>Italic</VisuallyHidden>\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">Italic</Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"underline\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Underline\"\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n onPress={withPreservedSelection(() =>\n toggleMark(editor, \"underline\")\n )}\n >\n <FormatUnderlined />\n <VisuallyHidden>Underline</VisuallyHidden>\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">Underline</Tooltip.Content>\n </Tooltip.Root>\n </ToggleButtonGroup.Root>\n\n {/* Formatting Menu for additional options */}\n <FormattingMenu isDisabled={isDisabled} />\n\n <Divider orientation=\"vertical\" />\n\n {/* Lists & Indentation */}\n <ToggleButtonGroup.Root\n selectionMode=\"single\"\n selectedKeys={selectedListKeys}\n onSelectionChange={handleListToggle}\n aria-label=\"List formatting\"\n isDisabled={isDisabled}\n >\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"bulleted-list\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Bulleted List\"\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n >\n <FormatListBulleted />\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">Bulleted list</Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconToggleButton\n id=\"numbered-list\"\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Numbered List\"\n isDisabled={isDisabled}\n onMouseDown={(event) => event.preventDefault()}\n >\n <FormatListNumbered />\n </IconToggleButton>\n <Tooltip.Content placement=\"top\">Numbered list</Tooltip.Content>\n </Tooltip.Root>\n </ToggleButtonGroup.Root>\n\n {/* Spacer to push undo/redo buttons to the right */}\n <Box flexGrow=\"1\" />\n\n <Group>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Undo\"\n isDisabled={!hasUndos || isDisabled}\n onPress={withPreservedSelection(() => editor.undo())}\n onMouseDown={(event) => event.preventDefault()}\n >\n <Undo />\n <VisuallyHidden>Undo</VisuallyHidden>\n </IconButton>\n <Tooltip.Content placement=\"top\">Undo</Tooltip.Content>\n </Tooltip.Root>\n <Tooltip.Root delay={0} closeDelay={0}>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Redo\"\n isDisabled={!hasRedos || isDisabled}\n onPress={withPreservedSelection(() => editor.redo())}\n onMouseDown={(event) => event.preventDefault()}\n >\n <Redo />\n <VisuallyHidden>Redo</VisuallyHidden>\n </IconButton>\n <Tooltip.Content placement=\"top\">Redo</Tooltip.Content>\n </Tooltip.Root>\n </Group>\n </Toolbar>\n );\n};\n\nRichTextToolbar.displayName = \"RichTextToolbar\";\n","import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useSlotRecipe } from \"@chakra-ui/react\";\nimport { extractStyleProps } from \"@/utils/extractStyleProps\";\nimport { RichTextInputRootSlot } from \"./rich-text-input.slots\";\nimport {\n RichTextEditor,\n type RichTextEditorRef,\n} from \"./components/rich-text-editor\";\nimport { RichTextToolbar } from \"./components/rich-text-toolbar\";\nimport type { RichTextInputProps } from \"./rich-text-input.types\";\nimport {\n toHTML,\n fromHTML,\n createEmptyValue,\n validSlateStateAdapter,\n} from \"./utils\";\nimport { richTextInputRecipe } from \"./rich-text-input.recipe\";\n\n/**\n RichTextInput - A rich text input component with formatting capabilities.\n */\nexport const RichTextInput = (props: RichTextInputProps) => {\n const {\n ref: forwardedRef,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n placeholder = \"\",\n isDisabled = false,\n isReadOnly = false,\n isInvalid = false,\n autoFocus = false,\n ...restProps\n } = props;\n\n const recipe = useSlotRecipe({ recipe: richTextInputRecipe });\n const [recipeProps, remainingProps] = recipe.splitVariantProps({\n // Only semantic variants go here (none currently defined)\n ...restProps,\n });\n const [styleProps, functionalProps] = extractStyleProps(remainingProps);\n\n // Data attributes for state-based styling\n const dataAttributes = {\n \"data-disabled\": isDisabled ? \"true\" : undefined,\n \"data-invalid\": isInvalid ? \"true\" : undefined,\n \"data-readonly\": isReadOnly ? \"true\" : undefined,\n };\n\n // Internal state management\n const [internalValue, setInternalValue] = useState(() => {\n const initialHtml = value ?? defaultValue ?? \"\";\n try {\n return initialHtml ? fromHTML(initialHtml) : createEmptyValue();\n } catch (error) {\n console.warn(\"Failed to parse initial HTML, using empty value:\", error);\n return createEmptyValue();\n }\n });\n\n const [serializedValue, setSerializedValue] = useState(() => {\n return value ?? defaultValue ?? \"\";\n });\n\n const editorRef = useRef<RichTextEditorRef>(null);\n\n // Handle controlled value changes\n useEffect(() => {\n if (value !== undefined && value !== serializedValue) {\n const newSlateValue = value ? fromHTML(value) : createEmptyValue();\n setInternalValue(newSlateValue);\n setSerializedValue(value);\n }\n }, [value, serializedValue]);\n\n const handleChange = useCallback(\n (slateValue: ReturnType<typeof createEmptyValue>) => {\n const newHtml = toHTML(slateValue);\n const hasSerializedValueChanged = newHtml !== serializedValue;\n\n setInternalValue(slateValue);\n setSerializedValue(newHtml);\n\n // Only call onChange if the serialized HTML actually changed\n if (hasSerializedValueChanged && onChange) {\n onChange(newHtml);\n }\n },\n [serializedValue, onChange]\n );\n\n const currentValue = internalValue;\n\n // Safety check: ensure we always have a valid Slate value\n const safeValue = validSlateStateAdapter(currentValue);\n\n return (\n <RichTextInputRootSlot\n {...recipeProps}\n {...styleProps}\n {...functionalProps}\n {...dataAttributes}\n ref={forwardedRef}\n >\n <RichTextEditor\n ref={editorRef}\n value={safeValue}\n onChange={handleChange}\n onFocus={onFocus}\n onBlur={onBlur}\n placeholder={placeholder}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n autoFocus={autoFocus}\n toolbar={\n !isReadOnly ? <RichTextToolbar isDisabled={isDisabled} /> : null\n }\n />\n </RichTextInputRootSlot>\n );\n};\n\nRichTextInput.displayName = \"RichTextInput\";\n"],"names":["richTextInputRecipe","defineSlotRecipe","withProvider","withContext","createSlotRecipeContext","RichTextInputRootSlot","RichTextInputToolbarSlot","RichTextInputEditableSlot","History","value","isPlainObject","Operation","SAVING","MERGING","SPLITTING_ONCE","HistoryEditor","Editor","editor","fn","prev","withHistory","e","apply","history","redos","batch","Transforms","op","undos","inverseOps","operations","lastBatch","lastOp","save","merge","shouldSave","shouldMerge","stack","Path","RichTextEditor","forwardRef","props","forwardedRef","onChange","onFocus","onBlur","placeholder","EDITOR_DEFAULTS","isDisabled","isReadOnly","autoFocus","toolbar","useMemo","baseEditor","createEditor","withLinks","withReact","handleKeyDown","useKeyboardShortcuts","handleFocus","useCallback","event","handleBlur","useImperativeHandle","focusEditor","html","resetEditor","renderElement","jsx","Element","renderLeaf","Leaf","defaultValue","createEmptyValue","safeInitialValue","jsxs","Slate","Editable","FormattingMenu","useSlate","withPreservedSelection","usePreservedSelection","allSelectedKeys","handleAllSelectionChange","useFormattingState","Menu","Tooltip","IconButton","MoreHoriz","Box","FormatStrikethrough","Text","Code","RichTextToolbar","currentTextStyle","selectedTextStyleLabel","handleTextStyleChange","handleListToggle","selectedFormatKeys","selectedListKeys","hasUndos","hasRedos","useToolbarState","Toolbar","Group","styleId","KeyboardArrowDown","textStyles","style","Divider","ToggleButtonGroup","IconToggleButton","toggleMark","FormatBold","VisuallyHidden","FormatItalic","FormatUnderlined","FormatListBulleted","FormatListNumbered","Undo","Redo","RichTextInput","isInvalid","restProps","recipe","useSlotRecipe","recipeProps","remainingProps","styleProps","functionalProps","extractStyleProps","dataAttributes","internalValue","setInternalValue","useState","initialHtml","fromHTML","error","serializedValue","setSerializedValue","editorRef","useRef","useEffect","newSlateValue","handleChange","slateValue","newHtml","toHTML","hasSerializedValueChanged","currentValue","safeValue","validSlateStateAdapter"],"mappings":"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","x_google_ignoreList":[2]}