@blocknote/xl-ai 0.51.3 → 0.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/blocknote-xl-ai.cjs +1 -1
  2. package/dist/blocknote-xl-ai.cjs.map +1 -1
  3. package/dist/blocknote-xl-ai.js +503 -107
  4. package/dist/blocknote-xl-ai.js.map +1 -1
  5. package/dist/locales.cjs.map +1 -1
  6. package/dist/locales.js.map +1 -1
  7. package/dist/{server-JIYg7ELG.js → server-CafGbRLa.js} +35 -31
  8. package/dist/server-CafGbRLa.js.map +1 -0
  9. package/dist/server-CxZHspeS.cjs +36 -0
  10. package/dist/server-CxZHspeS.cjs.map +1 -0
  11. package/dist/server.cjs +1 -1
  12. package/dist/server.js +1 -2
  13. package/dist/style.css +1 -1
  14. package/dist/webpack-stats.json +1 -1
  15. package/package.json +12 -25
  16. package/src/AIExtension.ts +12 -7
  17. package/src/api/formats/base-tools/createAddBlocksTool.ts +4 -4
  18. package/src/api/formats/base-tools/createUpdateBlockTool.ts +4 -4
  19. package/src/api/formats/html-blocks/columnContainerDocumentState.test.ts +1 -1
  20. package/src/api/formats/html-blocks/htmlBlocks.test.ts +6 -8
  21. package/src/api/formats/html-blocks/tools/getPartialHTML.test.ts +1 -1
  22. package/src/api/formats/html-blocks/tools/index.ts +15 -21
  23. package/src/api/formats/html-blocks/tools/rebaseTool.ts +3 -3
  24. package/src/api/formats/json/errorHandling.test.ts +8 -1
  25. package/src/api/formats/json/json.test.ts +1 -1
  26. package/src/api/formats/json/tools/index.ts +4 -4
  27. package/src/api/formats/json/tools/jsontools.test.ts +1 -1
  28. package/src/api/formats/markdown-blocks/markdownBlocks.test.ts +1 -1
  29. package/src/api/formats/markdown-blocks/tools/index.ts +9 -11
  30. package/src/api/formats/markdown-blocks/tools/rebaseTool.ts +3 -3
  31. package/src/api/formats/tests/sharedTestCases.ts +2 -3
  32. package/src/api/formats/tests/snapshotPath.ts +2 -2
  33. package/src/api/formats/tests/validateTestEnvironment.test.ts +1 -1
  34. package/src/api/promptHelpers/suffixIds.ts +1 -1
  35. package/src/api/schema/__snapshots__/schemaToJSONSchema.test.ts.snap +1 -1
  36. package/src/api/schema/schemaToJSONSchema.test.ts +3 -3
  37. package/src/api/schema/schemaToJSONSchema.ts +5 -3
  38. package/src/components/AIMenu/AIMenuController.tsx +1 -1
  39. package/src/components/AIMenu/PromptSuggestionMenu.tsx +1 -1
  40. package/src/plugins/AgentCursorPlugin.ts +8 -1
  41. package/src/prosemirror/AttributionMarks.ts +204 -0
  42. package/src/prosemirror/__snapshots__/agent.test.ts.snap +16 -265
  43. package/src/prosemirror/__snapshots__/rebaseTool.test.ts.snap +4 -4
  44. package/src/prosemirror/agent.test.ts +8 -10
  45. package/src/prosemirror/agent.ts +1 -1
  46. package/src/prosemirror/changeset.test.ts +1 -1
  47. package/src/prosemirror/fragmentUtil.test.ts +1 -1
  48. package/src/prosemirror/rebaseTool.test.ts +8 -3
  49. package/src/server.ts +0 -1
  50. package/src/streamTool/filterNewOrUpdatedOperations.test.ts +1 -1
  51. package/src/streamTool/filterValidOperations.test.ts +1 -1
  52. package/src/streamTool/preprocess.test.ts +1 -1
  53. package/src/streamTool/toValidatedOperations.test.ts +1 -1
  54. package/src/streamTool/vercelAiSdk/clientside/ClientSideTransport.ts +8 -5
  55. package/src/streamTool/vercelAiSdk/util/appendableStream.test.ts +15 -15
  56. package/src/streamTool/vercelAiSdk/util/chatHandlers.test.ts +10 -1
  57. package/src/streamTool/vercelAiSdk/util/chatHandlers.ts +7 -7
  58. package/src/style.css +0 -19
  59. package/src/testUtil/suggestChangesTestUtil.ts +1 -1
  60. package/src/util/stream.ts +1 -1
  61. package/src/vite-env.d.ts +1 -0
  62. package/types/src/AIExtension.d.ts +4 -0
  63. package/types/src/api/formats/base-tools/createAddBlocksTool.d.ts +2 -2
  64. package/types/src/api/formats/base-tools/createUpdateBlockTool.d.ts +2 -2
  65. package/types/src/api/formats/formats.d.ts +3 -3
  66. package/types/src/api/formats/html-blocks/tools/rebaseTool.d.ts +2 -2
  67. package/types/src/api/formats/json/json.d.ts +3 -3
  68. package/types/src/api/formats/markdown-blocks/tools/rebaseTool.d.ts +2 -2
  69. package/types/src/api/schema/schemaToJSONSchema.d.ts +3 -3
  70. package/types/src/prosemirror/AttributionMarks.d.ts +15 -0
  71. package/types/src/testUtil/cases/editors/blockFormatting.d.ts +17 -17
  72. package/types/src/testUtil/cases/editors/formattingAndMentions.d.ts +17 -17
  73. package/types/src/testUtil/cases/editors/simpleEditor.d.ts +51 -51
  74. package/types/src/testUtil/cases/editors/tables.d.ts +17 -17
  75. package/types/src/testUtil/cases/schemas/mention.d.ts +17 -17
  76. package/dist/server-D-Xyj9BS.cjs +0 -36
  77. package/dist/server-D-Xyj9BS.cjs.map +0 -1
  78. package/dist/server-JIYg7ELG.js.map +0 -1
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./server-D-Xyj9BS.cjs`);let t=require(`@ai-sdk/react`),n=require(`@blocknote/core`),r=require(`@blocknote/core/extensions`),i=require(`@handlewithcare/prosemirror-suggest-changes`),a=require(`prosemirror-model`),o=require(`prosemirror-state`),s=require(`prosemirror-tables`),c=require(`prosemirror-view`),l=require(`y-prosemirror`),u=require(`@blocknote/react`),d=require(`react`),f=require(`react-icons/ri`),p=require(`react/jsx-runtime`),m=require(`@floating-ui/react`);var h=new o.PluginKey(`blocknote-agent-cursor`);function g(e){return new o.Plugin({key:h,view:e=>({}),state:{init:()=>({selection:void 0}),apply:(e,t)=>{let n=e.getMeta(`aiAgent`);return n?{selection:n.selection}:{selection:void 0}}},props:{decorations:t=>{let{doc:n}=t,{selection:r}=h.getState(t),i=[];if(!r)return c.DecorationSet.create(n,[]);i.push(c.Decoration.widget(r.head,()=>_(e),{key:`agent-cursor`,side:10}));let a=Math.min(r.anchor,r.head),o=Math.max(r.anchor,r.head);return i.push(c.Decoration.inline(a,o,(0,l.defaultSelectionBuilder)(e),{inclusiveEnd:!0,inclusiveStart:!1})),c.DecorationSet.create(n,i)}}})}var _=e=>{let t=document.createElement(`span`);t.classList.add(`bn-collaboration-cursor__base`),t.setAttribute(`data-active`,`true`);let n=document.createElement(`span`);n.setAttribute(`contentedEditable`,`false`),n.classList.add(`bn-collaboration-cursor__caret`),n.setAttribute(`style`,`background-color: ${e.color}`);let r=document.createElement(`span`);return r.classList.add(`bn-collaboration-cursor__label`),r.setAttribute(`style`,`background-color: ${e.color}`),r.insertBefore(document.createTextNode(e.name),null),n.insertBefore(r,null),t.insertBefore(document.createTextNode(`⁠`),null),t.insertBefore(n,null),t.insertBefore(document.createTextNode(`⁠`),null),t},v=new o.PluginKey(`blocknote-ai-plugin`),y=(0,n.createExtension)(({editor:c,options:l})=>{let u=(0,n.createStore)(l??{}),d=(0,n.createStore)({aiMenuState:`closed`}),f,p=!1,m=(0,i.suggestChanges)();return m.props.decorations=void 0,{key:`ai`,options:u,store:d,mount({signal:e}){let t=!1;document.addEventListener(`scroll`,()=>{t&&(p=!1),t=!0},{capture:!0,signal:e}),document.addEventListener(`scrollend`,()=>{t=!1},{capture:!0,signal:e})},prosemirrorPlugins:[new o.Plugin({key:v,filterTransaction:e=>{let t=d.state.aiMenuState;return!(t!==`closed`&&t.status===`ai-writing`&&e.getMeta(s.fixTablesKey)?.fixTables)}}),m,g(l?.agentCursor||{name:`AI`,color:`#8bc6ff`})],openAIMenuAtBlock(e){c.getExtension(r.ShowSelectionExtension)?.showSelection(!0,`aiMenu`),c.isEditable=!1,d.setState({aiMenuState:{blockId:e,status:`user-input`}}),(c.domElement?.querySelector(`[data-node-type="blockContainer"][data-id="${e}"]`))?.scrollIntoView({block:`center`})},closeAIMenu(){d.setState({aiMenuState:`closed`}),f=void 0,c.getExtension(r.ShowSelectionExtension)?.showSelection(!1,`aiMenu`),c.isEditable=!0,c.focus()},acceptChanges(){let e=c.prosemirrorState.doc;c.exec((e,t)=>(0,i.revertSuggestions)(e,e=>{t?.(e.setMeta(`addToHistory`,!1))})),c.exec((t,n)=>{let r=t.tr;return r.replace(0,r.doc.content.size,new a.Slice(a.Fragment.from(e),0,0)),(0,i.applySuggestions)(t.apply(r),e=>{n?.(r.replace(0,r.doc.content.size,new a.Slice(a.Fragment.from(e.doc),0,0)))})}),c.getExtension(r.ForkYDocExtension)?.merge({keepChanges:!0}),this.closeAIMenu()},rejectChanges(){c.exec((e,t)=>(0,i.revertSuggestions)(e,e=>{t?.(e.setMeta(`addToHistory`,!1))})),c.getExtension(r.ForkYDocExtension)?.merge({keepChanges:!1}),this.closeAIMenu()},async abort(e){let{aiMenuState:t}=d.state;if(t===`closed`||!f||t.status!==`thinking`&&t.status!==`ai-writing`)return;let n=f.chat;f.abortController.abort(e),await n.stop()},async retry(){let{aiMenuState:e}=d.state;if(e===`closed`||e.status!==`error`||!f)throw Error(`retry() is only valid when a previous response failed`);return f?.chat.status===`error`?this.invokeAI({...f.previousRequestOptions,userPrompt:`An error occured in the previous request. Please retry to accomplish the last user prompt.`}):this.invokeAI({...f.previousRequestOptions,userPrompt:`An error occured while executing the previous tool call. Please retry to accomplish the last user prompt.`})},setAIResponseStatus(e){let t=d.state.aiMenuState;if(t!==`closed`)if(e===`ai-writing`&&c.getExtension(r.ShowSelectionExtension)?.showSelection(!1,`aiMenu`),typeof e==`object`){if(e.status!==`error`)throw new n.UnreachableCaseError(e.status);this.store.setState({aiMenuState:{status:e.status,error:e.error,blockId:t.blockId}})}else this.store.setState({aiMenuState:{status:e,blockId:t.blockId}})},async callLLM(e){return this.invokeAI(e)},async invokeAI(i){this.setAIResponseStatus(`thinking`),c.getExtension(r.ForkYDocExtension)?.fork();try{let r=new AbortController;f?(f.previousRequestOptions=i,f.abortController=r):f={previousRequestOptions:i,chat:i.chatProvider?.()||this.options.state.chatProvider?.()||new t.Chat({sendAutomaticallyWhen:()=>!1,transport:i.transport||this.options.state.transport}),abortController:r};let a=f.chat;i={...u.state,...i};let o=await e.y({editor:c,useSelection:i.useSelection,deleteEmptyCursorBlock:i.deleteEmptyCursorBlock,streamToolsProvider:i.streamToolsProvider??this.options.state.streamToolsProvider,documentStateBuilder:i.documentStateBuilder??this.options.state.documentStateBuilder,onBlockUpdated:e=>{let t=d.state.aiMenuState,r=t===`closed`?void 0:t;if(!r||r.status!==`ai-writing`)return;let i=(0,n.getNodeById)(e,c.prosemirrorState.doc);i&&(d.setState({aiMenuState:{blockId:e,status:`ai-writing`}}),p&&c.prosemirrorView.domAtPos(i.posBeforeNode+1).node.scrollIntoView({block:`center`}))},onStart:()=>{p=!0,this.setAIResponseStatus(`ai-writing`),o.emptyCursorBlockToDelete&&o.editor.getBlock(o.emptyCursorBlockToDelete)&&o.editor.removeBlocks([o.emptyCursorBlockToDelete])}}),s=await e.s(a,o,{role:`user`,parts:[{type:`text`,text:i.userPrompt}]},i.chatRequestOptions||this.options.state.chatRequestOptions,f.abortController.signal);s.ok&&a.status!==`error`||r.signal.aborted?this.setAIResponseStatus(`user-reviewing`):(console.warn(`Error calling LLM`,{result:s,chatStatus:a.status,chatError:a.error}),this.setAIResponseStatus({status:`error`,error:s.ok?a.error:s.error}))}catch(e){this.setAIResponseStatus({status:`error`,error:e}),console.error(`Unexpected error calling LLM`,e,f?.chat.messages)}}}});function b(){return e.n((0,u.useBlockNoteContext)().editor)}var x=e=>{let t=(0,u.useComponentsContext)(),{onManualPromptSubmit:i,promptText:a,onPromptTextChange:o,disabled:s}=e,[c,l]=(0,d.useState)(``),f=a||c,m=(0,d.useCallback)(async e=>{e.key===`Enter`&&!e.nativeEvent.isComposing&&i(f)},[f,i]),h=(0,d.useCallback)(e=>{let t=e.currentTarget.value;o&&o(t),a===void 0&&l(t)},[o,l,a]),g=(0,d.useMemo)(()=>(0,r.filterSuggestionItems)(e.items,f),[f,e.items]),{selectedIndex:_,setSelectedIndex:v,handler:y}=(0,u.useSuggestionMenuKeyboardHandler)(g,e=>e.onItemClick()),b=g.length>0&&_>=0&&_<g.length?`bn-suggestion-menu-item-${_}`:void 0,x=(0,d.useCallback)(e=>{e.key===`Enter`&&!e.nativeEvent.isComposing?g.length>0?y(e):m(e):y(e)},[m,y,g.length]);(0,d.useEffect)(()=>{v(0)},[f,v]);let S=(0,d.useRef)(null),C=(0,d.useRef)(s);return(0,d.useEffect)(()=>{S.current&&C.current&&!s&&S.current.focus(),s&&(C.current=!0)},[s]),(0,p.jsxs)(`div`,{className:`bn-combobox`,children:[(0,p.jsx)(t.Generic.Form.Root,{children:(0,p.jsx)(t.Generic.Form.TextInput,{ref:S,className:`bn-combobox-input`,name:`ai-prompt`,variant:`large`,icon:e.icon,value:f||``,placeholder:e.placeholder,disabled:e.disabled,onKeyDown:x,onChange:h,autoComplete:`off`,rightSection:e.rightSection,"aria-activedescendant":b})}),g.length>0&&(0,p.jsx)(t.SuggestionMenu.Root,{className:`bn-combobox-items`,id:`ai-suggestion-menu`,children:g.map((e,r)=>(0,p.jsx)(t.SuggestionMenu.Item,{className:(0,n.mergeCSSClasses)(`bn-suggestion-menu-item`,e.size===`small`?`bn-suggestion-menu-item-small`:``),id:`bn-suggestion-menu-item-${r}`,isSelected:r===_,onClick:e.onItemClick,item:e},e.title))})]})};function S(t){let n=e.n(t),r=t.getExtension(y);return r?[{key:`continue_writing`,title:n.ai_default_commands.continue_writing.title,aliases:n.ai_default_commands.continue_writing.aliases,icon:(0,p.jsx)(f.RiBallPenLine,{size:18}),onItemClick:async()=>{await r.invokeAI({userPrompt:`Continue writing at the current cursor position related to the previous text. Add multiple blocks if needed. If the document looks like a template / draft, follow the template. Be extensive if needed.`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!0,delete:!1,update:!1}})})},size:`small`},{key:`summarize`,title:n.ai_default_commands.summarize.title,aliases:n.ai_default_commands.summarize.aliases,icon:(0,p.jsx)(f.RiTextWrap,{size:18}),onItemClick:async()=>{await r.invokeAI({userPrompt:`Summarize`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!0,delete:!1,update:!1}})})},size:`small`},{key:`action_items`,title:n.ai_default_commands.add_action_items.title,aliases:n.ai_default_commands.add_action_items.aliases,icon:(0,p.jsx)(f.RiListCheck3,{size:18}),onItemClick:async()=>{await r.invokeAI({userPrompt:`Add action items`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!0,delete:!1,update:!1}})})},size:`small`},{key:`write_anything`,title:n.ai_default_commands.write_anything.title,aliases:n.ai_default_commands.write_anything.aliases,icon:(0,p.jsx)(f.RiBallPenLine,{size:18}),onItemClick:e=>{e(n.ai_default_commands.write_anything.prompt_placeholder)},size:`small`}]:[]}function C(t){let n=e.n(t),r=t.getExtension(y);return r?[{key:`improve_writing`,title:n.ai_default_commands.improve_writing.title,aliases:n.ai_default_commands.improve_writing.aliases,icon:(0,p.jsx)(f.RiText,{size:18}),onItemClick:async()=>{await r.invokeAI({useSelection:!0,userPrompt:`Improve writing`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!1,delete:!1,update:!0}})})},size:`small`},{key:`fix_spelling`,title:n.ai_default_commands.fix_spelling.title,aliases:n.ai_default_commands.fix_spelling.aliases,icon:(0,p.jsx)(f.RiCheckLine,{size:18}),onItemClick:async()=>{await r.invokeAI({useSelection:!0,userPrompt:`Fix spelling`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!1,delete:!1,update:!0}})})},size:`small`},{key:`translate`,title:n.ai_default_commands.translate.title,aliases:n.ai_default_commands.translate.aliases,icon:(0,p.jsx)(f.RiEarthLine,{size:18}),onItemClick:e=>{e(n.ai_default_commands.translate.prompt_placeholder)},size:`small`},{key:`simplify`,title:n.ai_default_commands.simplify.title,aliases:n.ai_default_commands.simplify.aliases,icon:(0,p.jsx)(f.RiMagicLine,{size:18}),onItemClick:async()=>{await r.invokeAI({useSelection:!0,userPrompt:`Simplify`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!1,delete:!1,update:!0}})})},size:`small`}]:[]}function w(t){let n=e.n(t),r=t.getExtension(y);return r?[{key:`accept`,title:n.ai_menu.actions.accept.title,aliases:n.ai_menu.actions.accept.aliases,icon:(0,p.jsx)(f.RiCheckFill,{size:18}),onItemClick:()=>{r.acceptChanges()},size:`small`},{key:`revert`,title:n.ai_menu.actions.revert.title,aliases:n.ai_menu.actions.revert.aliases,icon:(0,p.jsx)(f.RiArrowGoBackFill,{size:18}),onItemClick:()=>{r.rejectChanges()},size:`small`}]:[]}function T(t){let n=e.n(t),r=t.getExtension(y);return r?[{key:`retry`,title:n.ai_menu.actions.retry.title,aliases:n.ai_menu.actions.retry.aliases,icon:(0,p.jsx)(f.RiLoopLeftFill,{size:18}),onItemClick:async()=>{await r.retry()},size:`small`},{key:`cancel`,title:n.ai_menu.actions.cancel.title,aliases:n.ai_menu.actions.cancel.aliases,icon:(0,p.jsx)(f.RiArrowGoBackFill,{size:18}),onItemClick:()=>{r.rejectChanges()},size:`small`}]:[]}function E(e,t){return t===`user-input`?e.getSelection()?C(e):S(e):t===`user-reviewing`?w(e):t===`error`?T(e):[]}var D=e=>{let t=(0,u.useBlockNoteEditor)(),[n,r]=(0,d.useState)(``),i=b(),a=(0,u.useComponentsContext)(),o=(0,u.useExtension)(y),s=(0,u.useExtensionState)(y,{selector:e=>e.aiMenuState===`closed`?`closed`:e.aiMenuState.status}),{items:c}=e,l=(0,d.useMemo)(()=>{let e=[];return e=c?c(t,s):E(t,s),e.map(e=>({...e,onItemClick:()=>{e.onItemClick(r)}}))},[c,s,t]),m=(0,d.useCallback)(async e=>{await o.invokeAI({userPrompt:e,useSelection:t.getSelection()!==void 0})},[o,t]);(0,d.useEffect)(()=>{(s===`ai-writing`||s===`user-reviewing`||s===`error`)&&r(``)},[s]);let h=(0,d.useMemo)(()=>s===`thinking`?i.ai_menu.status.thinking:s===`ai-writing`?i.ai_menu.status.editing:s===`error`?i.ai_menu.status.error:i.ai_menu.input_placeholder,[s,i]),g=(0,d.useMemo)(()=>{if(s===`thinking`||s===`ai-writing`)return(0,p.jsx)(a.SuggestionMenu.Loader,{className:`bn-suggestion-menu-loader bn-combobox-right-section`});if(s===`error`)return(0,p.jsx)(`div`,{className:`bn-combobox-right-section bn-combobox-error`,children:(0,p.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,height:`1em`,viewBox:`0 -960 960 960`,width:`1em`,fill:`currentColor`,children:(0,p.jsx)(`path`,{d:`M480-280q17 0 28.5-11.5T520-320q0-17-11.5-28.5T480-360q-17 0-28.5 11.5T440-320q0 17 11.5 28.5T480-280Zm0-160q17 0 28.5-11.5T520-480v-160q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640v160q0 17 11.5 28.5T480-440Zm0 360q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z`})})})},[a,s]);return(0,p.jsx)(x,{onManualPromptSubmit:e.onManualPromptSubmit||m,items:l,promptText:n,onPromptTextChange:r,placeholder:h,disabled:s===`thinking`||s===`ai-writing`,icon:(0,p.jsx)(`div`,{className:`bn-combobox-icon`,children:(0,p.jsx)(f.RiSparkling2Fill,{})}),rightSection:g})},O=e=>{let t=(0,u.useBlockNoteEditor)(),n=(0,u.useExtension)(y),r=(0,u.useExtensionState)(y,{editor:t,selector:e=>e.aiMenuState}),i=r===`closed`?void 0:r.blockId,a=(0,d.useMemo)(()=>({...e.floatingUIOptions,useFloatingOptions:{open:r!==`closed`,placement:`bottom`,middleware:[(0,m.offset)(10),(0,m.flip)(),(0,m.size)({apply({rects:e,elements:t}){Object.assign(t.floating.style,{width:`${e.reference.width}px`})}})],onOpenChange:e=>{e||r===`closed`||(r.status===`user-input`?n.closeAIMenu():(r.status===`user-reviewing`||r.status===`error`)&&n.rejectChanges())},whileElementsMounted(e,t,n){return(0,m.autoUpdate)(e,t,n,{animationFrame:!0})},...e.floatingUIOptions?.useFloatingOptions},useDismissProps:{enabled:r===`closed`||r.status===`user-input`,outsidePress:e=>{if(e.target instanceof Element){let t=e.target.closest(`.bn-block`);t&&t.getAttribute(`data-id`)===i&&n.closeAIMenu()}return!0},...e.floatingUIOptions?.useDismissProps},elementProps:{style:{zIndex:100},...e.floatingUIOptions?.elementProps},focusManagerProps:{disabled:!1,getInsideElements:()=>t.domElement?[t.domElement]:[],...e.floatingUIOptions?.focusManagerProps}}),[n,r,i,e.floatingUIOptions,t.domElement]),o=e.aiMenu||D;return(0,p.jsx)(u.BlockPopover,{blockId:i,...a,children:r!==`closed`&&(0,p.jsx)(o,{})})},k=()=>{let e=b(),t=(0,u.useComponentsContext)(),n=(0,u.useBlockNoteEditor)(),i=(0,u.useExtension)(y),a=(0,u.useExtension)(r.FormattingToolbarExtension);return n.isEditable?(0,p.jsx)(t.Generic.Toolbar.Button,{className:`bn-button`,label:e.formatting_toolbar.ai.tooltip,mainTooltip:e.formatting_toolbar.ai.tooltip,icon:(0,p.jsx)(f.RiSparkling2Fill,{}),onClick:()=>{let e=n.getSelection();if(!e)throw Error(`No selection`);let t=e.blocks[e.blocks.length-1].id;i.openAIMenuAtBlock(t),a.store.setState(!1)}}):null},A={AI:f.RiSparkling2Fill};function j(t){let n=t.getExtension(y);return n?[{key:`ai`,onItemClick:()=>{let e=t.getTextCursorPosition();e.block.content&&Array.isArray(e.block.content)&&e.block.content.length===0&&e.prevBlock?n.openAIMenuAtBlock(e.prevBlock.id):n.openAIMenuAtBlock(e.block.id)},...e.n(t).slash_menu.ai,icon:(0,p.jsx)(A.AI,{})}]:[]}exports.AIExtension=y,exports.AIMenu=D,exports.AIMenuController=O,exports.AIToolbarButton=k,exports.ClientSideTransport=e.u,exports.PROVIDER_OVERRIDES=e.d,exports.PromptSuggestionMenu=x,exports.StreamToolExecutor=e.g,exports._getApplySuggestionsTr=e.a,exports.aiDocumentFormats=e.i,exports.buildAIRequest=e.y,exports.createStreamToolsArraySchema=e._,exports.fetchViaProxy=e.t,exports.getAIDictionary=e.n,exports.getAISlashMenuItems=j,exports.getDefaultAIMenuItems=E,exports.getProviderOverrides=e.f,exports.injectDocumentStateMessages=e.h,exports.makeDocumentStateBuilder=e.o,exports.objectStreamToOperationsResult=e.l,exports.promptHelpers=e.r,exports.sendMessageWithAIRequest=e.s,exports.setupToolCallStreaming=e.c,exports.streamToolsToToolSet=e.v,exports.toolDefinitionsToToolSet=e.p,exports.toolSetToToolDefinitions=e.m,exports.useAIDictionary=b;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./server-CxZHspeS.cjs");let t=require("@ai-sdk/react"),n=require("@blocknote/core"),r=require("@blocknote/core/extensions"),i=require("@handlewithcare/prosemirror-suggest-changes"),a=require("prosemirror-model"),o=require("prosemirror-state"),s=require("prosemirror-tables"),c=require("prosemirror-view"),l=require("@tiptap/core"),u=require("@blocknote/react"),d=require("react");d=e.b(d,1);let f=require("react/jsx-runtime"),p=require("@floating-ui/react");var m=e=>({style:`background-color: ${e.color}70`,class:`ProseMirror-yjs-selection`}),h=new o.PluginKey(`blocknote-agent-cursor`);function g(e){return new o.Plugin({key:h,view:e=>({}),state:{init:()=>({selection:void 0}),apply:(e,t)=>{let n=e.getMeta(`aiAgent`);return n?{selection:n.selection}:{selection:void 0}}},props:{decorations:t=>{let{doc:n}=t,{selection:r}=h.getState(t),i=[];if(!r)return c.DecorationSet.create(n,[]);i.push(c.Decoration.widget(r.head,()=>_(e),{key:`agent-cursor`,side:10}));let a=Math.min(r.anchor,r.head),o=Math.max(r.anchor,r.head);return i.push(c.Decoration.inline(a,o,m(e),{inclusiveEnd:!0,inclusiveStart:!1})),c.DecorationSet.create(n,i)}}})}var _=e=>{let t=document.createElement(`span`);t.classList.add(`bn-collaboration-cursor__base`),t.setAttribute(`data-active`,`true`);let n=document.createElement(`span`);n.setAttribute(`contentedEditable`,`false`),n.classList.add(`bn-collaboration-cursor__caret`),n.setAttribute(`style`,`background-color: ${e.color}`);let r=document.createElement(`span`);return r.classList.add(`bn-collaboration-cursor__label`),r.setAttribute(`style`,`background-color: ${e.color}`),r.insertBefore(document.createTextNode(e.name),null),n.insertBefore(r,null),t.insertBefore(document.createTextNode(`⁠`),null),t.insertBefore(n,null),t.insertBefore(document.createTextNode(`⁠`),null),t},v=l.Mark.create({name:`insertion`,inclusive:!1,excludes:`deletion modification insertion`,group:`${n.BLOCK_LEVEL_SUGGESTION_GROUP} ${n.NON_FORMATTING_MARK_GROUP}`,addAttributes(){return{id:{default:null,validate:`number`}}},extendMarkSchema(e){return e.name===`insertion`?{blocknoteIgnore:!0,inclusive:!1,toDOM(e,t){return[`ins`,{"data-id":String(e.attrs.id),"data-inline":String(t),...!t&&{style:`display: contents`}},0]},parseDOM:[{tag:`ins`,getAttrs(e){return e.dataset.id?{id:parseInt(e.dataset.id,10)}:!1}}]}:{}}}),y=l.Mark.create({name:`deletion`,inclusive:!1,excludes:`insertion modification deletion`,group:`${n.BLOCK_LEVEL_SUGGESTION_GROUP} ${n.NON_FORMATTING_MARK_GROUP}`,addAttributes(){return{id:{default:null,validate:`number`}}},extendMarkSchema(e){return e.name===`deletion`?{blocknoteIgnore:!0,inclusive:!1,toDOM(e,t){return[`del`,{"data-id":String(e.attrs.id),"data-inline":String(t),...!t&&{style:`display: contents`}},0]},parseDOM:[{tag:`del`,getAttrs(e){return e.dataset.id?{id:parseInt(e.dataset.id,10)}:!1}}]}:{}}}),b=l.Mark.create({name:`modification`,inclusive:!1,excludes:`deletion insertion`,group:`${n.BLOCK_LEVEL_SUGGESTION_GROUP} ${n.NON_FORMATTING_MARK_GROUP}`,addAttributes(){return{id:{default:null,validate:`number`},type:{validate:`string`},attrName:{default:null,validate:`string|null`},previousValue:{default:null},newValue:{default:null}}},extendMarkSchema(e){return e.name===`modification`?{blocknoteIgnore:!0,inclusive:!1,toDOM(e,t){return[t?`span`:`div`,{"data-type":`modification`,"data-id":String(e.attrs.id),"data-mod-type":e.attrs.type,"data-mod-prev-val":JSON.stringify(e.attrs.previousValue),"data-mod-new-val":JSON.stringify(e.attrs.newValue)},0]},parseDOM:[{tag:`span[data-type='modification']`,getAttrs(e){return e.dataset.id?{id:parseInt(e.dataset.id,10),type:e.dataset.modType,previousValue:e.dataset.modPrevVal,newValue:e.dataset.modNewVal}:!1}},{tag:`div[data-type='modification']`,getAttrs(e){return e.dataset.id?{id:parseInt(e.dataset.id,10),type:e.dataset.modType,previousValue:e.dataset.modPrevVal}:!1}}]}:{}}}),x=(0,n.createExtension)(()=>({key:`aiAttributionMarks`,tiptapExtensions:[v,y,b]})),S=new o.PluginKey(`blocknote-ai-plugin`),C=(0,n.createExtension)(({editor:c,options:l})=>{let u=(0,n.createStore)(l??{}),d=(0,n.createStore)({aiMenuState:`closed`}),f,p=!1,m=(0,i.suggestChanges)();return m.props.decorations=void 0,{key:`ai`,options:u,store:d,blockNoteExtensions:[x()],mount({signal:e}){let t=!1;document.addEventListener(`scroll`,()=>{t&&(p=!1),t=!0},{capture:!0,signal:e}),document.addEventListener(`scrollend`,()=>{t=!1},{capture:!0,signal:e})},prosemirrorPlugins:[new o.Plugin({key:S,filterTransaction:e=>{let t=d.state.aiMenuState;return!(t!==`closed`&&t.status===`ai-writing`&&e.getMeta(s.fixTablesKey)?.fixTables)}}),m,g(l?.agentCursor||{name:`AI`,color:`#8bc6ff`})],openAIMenuAtBlock(e){c.getExtension(r.ShowSelectionExtension)?.showSelection(!0,`aiMenu`),c.isEditable=!1,d.setState({aiMenuState:{blockId:e,status:`user-input`}}),(c.domElement?.querySelector(`[data-node-type="blockContainer"][data-id="${e}"]`))?.scrollIntoView({block:`center`})},closeAIMenu(){d.setState({aiMenuState:`closed`}),f=void 0,c.getExtension(r.ShowSelectionExtension)?.showSelection(!1,`aiMenu`),c.isEditable=!0,c.focus()},acceptChanges(){let e=c.prosemirrorState.doc;c.exec((e,t)=>(0,i.revertSuggestions)(e,e=>{t?.(e.setMeta(`addToHistory`,!1))})),c.exec((t,n)=>{let r=t.tr;return r.replace(0,r.doc.content.size,new a.Slice(a.Fragment.from(e),0,0)),(0,i.applySuggestions)(t.apply(r),e=>{n?.(r.replace(0,r.doc.content.size,new a.Slice(a.Fragment.from(e.doc),0,0)))})}),c.getExtension(`yForkDoc`)?.merge({keepChanges:!0}),this.closeAIMenu()},rejectChanges(){c.exec((e,t)=>(0,i.revertSuggestions)(e,e=>{t?.(e.setMeta(`addToHistory`,!1))})),c.getExtension(`yForkDoc`)?.merge({keepChanges:!1}),this.closeAIMenu()},async abort(e){let{aiMenuState:t}=d.state;if(t===`closed`||!f||t.status!==`thinking`&&t.status!==`ai-writing`)return;let n=f.chat;f.abortController.abort(e),await n.stop()},async retry(){let{aiMenuState:e}=d.state;if(e===`closed`||e.status!==`error`||!f)throw Error(`retry() is only valid when a previous response failed`);return f?.chat.status===`error`?this.invokeAI({...f.previousRequestOptions,userPrompt:`An error occured in the previous request. Please retry to accomplish the last user prompt.`}):this.invokeAI({...f.previousRequestOptions,userPrompt:`An error occured while executing the previous tool call. Please retry to accomplish the last user prompt.`})},setAIResponseStatus(e){let t=d.state.aiMenuState;if(t!==`closed`)if(e===`ai-writing`&&c.getExtension(r.ShowSelectionExtension)?.showSelection(!1,`aiMenu`),typeof e==`object`){if(e.status!==`error`)throw new n.UnreachableCaseError(e.status);this.store.setState({aiMenuState:{status:e.status,error:e.error,blockId:t.blockId}})}else this.store.setState({aiMenuState:{status:e,blockId:t.blockId}})},async callLLM(e){return this.invokeAI(e)},async invokeAI(r){this.setAIResponseStatus(`thinking`),c.getExtension(`yForkDoc`)?.fork();try{let i=new AbortController;f?(f.previousRequestOptions=r,f.abortController=i):f={previousRequestOptions:r,chat:r.chatProvider?.()||this.options.state.chatProvider?.()||new t.Chat({sendAutomaticallyWhen:()=>!1,transport:r.transport||this.options.state.transport}),abortController:i};let a=f.chat;r={...u.state,...r};let o=await e.y({editor:c,useSelection:r.useSelection,deleteEmptyCursorBlock:r.deleteEmptyCursorBlock,streamToolsProvider:r.streamToolsProvider??this.options.state.streamToolsProvider,documentStateBuilder:r.documentStateBuilder??this.options.state.documentStateBuilder,onBlockUpdated:e=>{let t=d.state.aiMenuState,r=t===`closed`?void 0:t;if(!r||r.status!==`ai-writing`)return;let i=(0,n.getNodeById)(e,c.prosemirrorState.doc);i&&(d.setState({aiMenuState:{blockId:e,status:`ai-writing`}}),p&&c.prosemirrorView.domAtPos(i.posBeforeNode+1).node.scrollIntoView({block:`center`}))},onStart:()=>{p=!0,this.setAIResponseStatus(`ai-writing`),o.emptyCursorBlockToDelete&&o.editor.getBlock(o.emptyCursorBlockToDelete)&&o.editor.removeBlocks([o.emptyCursorBlockToDelete])}}),s=await e.s(a,o,{role:`user`,parts:[{type:`text`,text:r.userPrompt}]},r.chatRequestOptions||this.options.state.chatRequestOptions,f.abortController.signal);s.ok&&a.status!==`error`||i.signal.aborted?this.setAIResponseStatus(`user-reviewing`):(console.warn(`Error calling LLM`,{result:s,chatStatus:a.status,chatError:a.error}),this.setAIResponseStatus({status:`error`,error:s.ok?a.error:s.error}))}catch(e){this.setAIResponseStatus({status:`error`,error:e}),console.error(`Unexpected error calling LLM`,e,f?.chat.messages)}}}}),w={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},T=d.default.createContext&&d.default.createContext(w),E=[`attr`,`size`,`title`];function D(e,t){if(e==null)return{};var n,r,i=O(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function O(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function k(){return k=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},k.apply(null,arguments)}function A(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function j(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?A(Object(n),!0).forEach(function(t){ee(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):A(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ee(e,t,n){return(t=M(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function M(e){var t=N(e,`string`);return typeof t==`symbol`?t:t+``}function N(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function P(e){return e&&e.map((e,t)=>d.default.createElement(e.tag,j({key:t},e.attr),P(e.child)))}function F(e){return t=>d.default.createElement(I,k({attr:j({},e.attr)},t),P(e.child))}function I(e){var t=t=>{var{attr:n,size:r,title:i}=e,a=D(e,E),o=r||t.size||`1em`,s;return t.className&&(s=t.className),e.className&&(s=(s?s+` `:``)+e.className),d.default.createElement(`svg`,k({stroke:`currentColor`,fill:`currentColor`,strokeWidth:`0`},t.attr,n,a,{className:s,style:j(j({color:e.color||t.color},t.style),e.style),height:o,width:o,xmlns:`http://www.w3.org/2000/svg`}),i&&d.default.createElement(`title`,null,i),e.children)};return T===void 0?t(w):d.default.createElement(T.Consumer,null,e=>t(e))}function L(e){return F({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`currentColor`},child:[{tag:`path`,attr:{d:`M17.0007 1.20825 18.3195 3.68108 20.7923 4.99992 18.3195 6.31876 17.0007 8.79159 15.6818 6.31876 13.209 4.99992 15.6818 3.68108 17.0007 1.20825ZM8.00065 4.33325 10.6673 9.33325 15.6673 11.9999 10.6673 14.6666 8.00065 19.6666 5.33398 14.6666.333984 11.9999 5.33398 9.33325 8.00065 4.33325ZM19.6673 16.3333 18.0007 13.2083 16.334 16.3333 13.209 17.9999 16.334 19.6666 18.0007 22.7916 19.6673 19.6666 22.7923 17.9999 19.6673 16.3333Z`},child:[]}]})(e)}function te(e){return F({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`currentColor`},child:[{tag:`path`,attr:{d:`M12 4C9.4095 4 7.10606 5.23053 5.64274 7.14274L8 9.5H2V3.5L4.21863 5.71863C6.05061 3.452 8.85558 2 12 2 17.5228 2 22 6.47715 22 12H20C20 7.58172 16.4183 4 12 4ZM4 12C4 16.4183 7.58172 20 12 20 14.5905 20 16.894 18.7695 18.3573 16.8573L16 14.5 22 14.5V20.5L19.7814 18.2814C17.9494 20.548 15.1444 22 12 22 6.47715 22 2 17.5228 2 12H4Z`},child:[]}]})(e)}function R(e){return F({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`currentColor`},child:[{tag:`path`,attr:{d:`M9.9997 15.1709L19.1921 5.97852L20.6063 7.39273L9.9997 17.9993L3.63574 11.6354L5.04996 10.2212L9.9997 15.1709Z`},child:[]}]})(e)}function z(e){return F({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`currentColor`},child:[{tag:`path`,attr:{d:`M9.9997 15.1709L19.1921 5.97852L20.6063 7.39273L9.9997 17.9993L3.63574 11.6354L5.04996 10.2212L9.9997 15.1709Z`},child:[]}]})(e)}function B(e){return F({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`currentColor`},child:[{tag:`path`,attr:{d:`M6.23509 6.45329C4.85101 7.89148 4 9.84636 4 12C4 16.4183 7.58172 20 12 20C13.0808 20 14.1116 19.7857 15.0521 19.3972C15.1671 18.6467 14.9148 17.9266 14.8116 17.6746C14.582 17.115 13.8241 16.1582 12.5589 14.8308C12.2212 14.4758 12.2429 14.2035 12.3636 13.3943L12.3775 13.3029C12.4595 12.7486 12.5971 12.4209 14.4622 12.1248C15.4097 11.9746 15.6589 12.3533 16.0043 12.8777C16.0425 12.9358 16.0807 12.9928 16.1198 13.0499C16.4479 13.5297 16.691 13.6394 17.0582 13.8064C17.2227 13.881 17.428 13.9751 17.7031 14.1314C18.3551 14.504 18.3551 14.9247 18.3551 15.8472V15.9518C18.3551 16.3434 18.3168 16.6872 18.2566 16.9859C19.3478 15.6185 20 13.8854 20 12C20 8.70089 18.003 5.8682 15.1519 4.64482C14.5987 5.01813 13.8398 5.54726 13.575 5.91C13.4396 6.09538 13.2482 7.04166 12.6257 7.11976C12.4626 7.14023 12.2438 7.12589 12.012 7.11097C11.3905 7.07058 10.5402 7.01606 10.268 7.75495C10.0952 8.2232 10.0648 9.49445 10.6239 10.1543C10.7134 10.2597 10.7307 10.4547 10.6699 10.6735C10.59 10.9608 10.4286 11.1356 10.3783 11.1717C10.2819 11.1163 10.0896 10.8931 9.95938 10.7412C9.64554 10.3765 9.25405 9.92233 8.74797 9.78176C8.56395 9.73083 8.36166 9.68867 8.16548 9.64736C7.6164 9.53227 6.99443 9.40134 6.84992 9.09302C6.74442 8.8672 6.74488 8.55621 6.74529 8.22764C6.74529 7.8112 6.74529 7.34029 6.54129 6.88256C6.46246 6.70541 6.35689 6.56446 6.23509 6.45329ZM12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22Z`},child:[]}]})(e)}function V(e){return F({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`currentColor`},child:[{tag:`path`,attr:{d:`M13 6V21H11V6H5V4H19V6H13Z`},child:[]}]})(e)}function H(e){return F({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`currentColor`},child:[{tag:`path`,attr:{d:`M15 18H16.5C17.8807 18 19 16.8807 19 15.5C19 14.1193 17.8807 13 16.5 13H3V11H16.5C18.9853 11 21 13.0147 21 15.5C21 17.9853 18.9853 20 16.5 20H15V22L11 19L15 16V18ZM3 4H21V6H3V4ZM9 18V20H3V18H9Z`},child:[]}]})(e)}function U(e){return F({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`currentColor`},child:[{tag:`path`,attr:{d:`M8.00008 6V9H5.00008V6H8.00008ZM3.00008 4V11H10.0001V4H3.00008ZM13.0001 4H21.0001V6H13.0001V4ZM13.0001 11H21.0001V13H13.0001V11ZM13.0001 18H21.0001V20H13.0001V18ZM10.7072 16.2071L9.29297 14.7929L6.00008 18.0858L4.20718 16.2929L2.79297 17.7071L6.00008 20.9142L10.7072 16.2071Z`},child:[]}]})(e)}function W(e){return F({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`currentColor`},child:[{tag:`path`,attr:{d:`M15.1986 9.94447C14.7649 9.5337 14.4859 8.98613 14.4085 8.39384L14.0056 5.31138L11.275 6.79724C10.7503 7.08274 10.1433 7.17888 9.55608 7.06948L6.49998 6.50015L7.06931 9.55625C7.17871 10.1435 7.08257 10.7505 6.79707 11.2751L5.31121 14.0057L8.39367 14.4086C8.98596 14.4861 9.53353 14.7651 9.94431 15.1987L12.0821 17.4557L13.4178 14.6486C13.6745 14.1092 14.109 13.6747 14.6484 13.418L17.4555 12.0823L15.1986 9.94447ZM15.2238 15.5079L13.0111 20.1581C12.8687 20.4573 12.5107 20.5844 12.2115 20.442C12.1448 20.4103 12.0845 20.3665 12.0337 20.3129L8.49229 16.5741C8.39749 16.474 8.27113 16.4096 8.13445 16.3918L3.02816 15.7243C2.69958 15.6814 2.46804 15.3802 2.51099 15.0516C2.52056 14.9784 2.54359 14.9075 2.5789 14.8426L5.04031 10.3192C5.1062 10.1981 5.12839 10.058 5.10314 9.92253L4.16 4.85991C4.09931 4.53414 4.3142 4.22086 4.63997 4.16017C4.7126 4.14664 4.78711 4.14664 4.85974 4.16017L9.92237 5.10331C10.0579 5.12855 10.198 5.10637 10.319 5.04048L14.8424 2.57907C15.1335 2.42068 15.4979 2.52825 15.6562 2.81931C15.6916 2.88421 15.7146 2.95507 15.7241 3.02833L16.3916 8.13462C16.4095 8.2713 16.4739 8.39766 16.5739 8.49245L20.3127 12.0338C20.5533 12.2617 20.5636 12.6415 20.3357 12.8821C20.2849 12.9357 20.2246 12.9795 20.1579 13.0112L15.5078 15.224C15.3833 15.2832 15.283 15.3835 15.2238 15.5079ZM16.0206 17.435L17.4348 16.0208L21.6775 20.2634L20.2633 21.6776L16.0206 17.435Z`},child:[]}]})(e)}function G(e){return F({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`currentColor`},child:[{tag:`path`,attr:{d:`M17.8492 11.6983L17.1421 10.9912L7.24264 20.8907H3V16.648L14.3137 5.33432L19.9706 10.9912C20.3611 11.3817 20.3611 12.0149 19.9706 12.4054L12.8995 19.4765L11.4853 18.0622L17.8492 11.6983ZM15.7279 9.57696L14.3137 8.16274L5 17.4765V18.8907H6.41421L15.7279 9.57696ZM18.5563 2.50589L21.3848 5.33432C21.7753 5.72484 21.7753 6.35801 21.3848 6.74853L19.9706 8.16274L15.7279 3.9201L17.1421 2.50589C17.5327 2.11537 18.1658 2.11537 18.5563 2.50589Z`},child:[]}]})(e)}function K(e){return F({tag:`svg`,attr:{viewBox:`0 0 24 24`,fill:`currentColor`},child:[{tag:`path`,attr:{d:`M8 7V11L2 6L8 1V5H13C17.4183 5 21 8.58172 21 13C21 17.4183 17.4183 21 13 21H4V19H13C16.3137 19 19 16.3137 19 13C19 9.68629 16.3137 7 13 7H8Z`},child:[]}]})(e)}function q(){return e.n((0,u.useBlockNoteContext)().editor)}var J=e=>{let t=(0,u.useComponentsContext)(),{onManualPromptSubmit:i,promptText:a,onPromptTextChange:o,disabled:s}=e,[c,l]=(0,d.useState)(``),p=a||c,m=(0,d.useCallback)(async e=>{e.key===`Enter`&&!e.nativeEvent.isComposing&&i(p)},[p,i]),h=(0,d.useCallback)(e=>{let t=e.currentTarget.value;o&&o(t),a===void 0&&l(t)},[o,l,a]),g=(0,d.useMemo)(()=>(0,r.filterSuggestionItems)(e.items,p),[p,e.items]),{selectedIndex:_,setSelectedIndex:v,handler:y}=(0,u.useSuggestionMenuKeyboardHandler)(g,e=>e.onItemClick()),b=g.length>0&&_>=0&&_<g.length?`bn-suggestion-menu-item-${_}`:void 0,x=(0,d.useCallback)(e=>{e.key===`Enter`&&!e.nativeEvent.isComposing?g.length>0?y(e):m(e):y(e)},[m,y,g.length]);(0,d.useEffect)(()=>{v(0)},[p,v]);let S=(0,d.useRef)(null),C=(0,d.useRef)(s);return(0,d.useEffect)(()=>{S.current&&C.current&&!s&&S.current.focus(),s&&(C.current=!0)},[s]),(0,f.jsxs)(`div`,{className:`bn-combobox`,children:[(0,f.jsx)(t.Generic.Form.Root,{children:(0,f.jsx)(t.Generic.Form.TextInput,{ref:S,className:`bn-combobox-input`,name:`ai-prompt`,variant:`large`,icon:e.icon,value:p||``,placeholder:e.placeholder,disabled:e.disabled,onKeyDown:x,onChange:h,autoComplete:`off`,rightSection:e.rightSection,"aria-activedescendant":b})}),g.length>0&&(0,f.jsx)(t.SuggestionMenu.Root,{className:`bn-combobox-items`,id:`ai-suggestion-menu`,children:g.map((e,r)=>(0,f.jsx)(t.SuggestionMenu.Item,{className:(0,n.mergeCSSClasses)(`bn-suggestion-menu-item`,e.size===`small`?`bn-suggestion-menu-item-small`:``),id:`bn-suggestion-menu-item-${r}`,isSelected:r===_,onClick:e.onItemClick,item:e},e.title))})]})};function Y(t){let n=e.n(t),r=t.getExtension(C);return r?[{key:`continue_writing`,title:n.ai_default_commands.continue_writing.title,aliases:n.ai_default_commands.continue_writing.aliases,icon:(0,f.jsx)(G,{size:18}),onItemClick:async()=>{await r.invokeAI({userPrompt:`Continue writing at the current cursor position related to the previous text. Add multiple blocks if needed. If the document looks like a template / draft, follow the template. Be extensive if needed.`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!0,delete:!1,update:!1}})})},size:`small`},{key:`summarize`,title:n.ai_default_commands.summarize.title,aliases:n.ai_default_commands.summarize.aliases,icon:(0,f.jsx)(H,{size:18}),onItemClick:async()=>{await r.invokeAI({userPrompt:`Summarize`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!0,delete:!1,update:!1}})})},size:`small`},{key:`action_items`,title:n.ai_default_commands.add_action_items.title,aliases:n.ai_default_commands.add_action_items.aliases,icon:(0,f.jsx)(U,{size:18}),onItemClick:async()=>{await r.invokeAI({userPrompt:`Add action items`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!0,delete:!1,update:!1}})})},size:`small`},{key:`write_anything`,title:n.ai_default_commands.write_anything.title,aliases:n.ai_default_commands.write_anything.aliases,icon:(0,f.jsx)(G,{size:18}),onItemClick:e=>{e(n.ai_default_commands.write_anything.prompt_placeholder)},size:`small`}]:[]}function X(t){let n=e.n(t),r=t.getExtension(C);return r?[{key:`improve_writing`,title:n.ai_default_commands.improve_writing.title,aliases:n.ai_default_commands.improve_writing.aliases,icon:(0,f.jsx)(V,{size:18}),onItemClick:async()=>{await r.invokeAI({useSelection:!0,userPrompt:`Improve writing`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!1,delete:!1,update:!0}})})},size:`small`},{key:`fix_spelling`,title:n.ai_default_commands.fix_spelling.title,aliases:n.ai_default_commands.fix_spelling.aliases,icon:(0,f.jsx)(R,{size:18}),onItemClick:async()=>{await r.invokeAI({useSelection:!0,userPrompt:`Fix spelling`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!1,delete:!1,update:!0}})})},size:`small`},{key:`translate`,title:n.ai_default_commands.translate.title,aliases:n.ai_default_commands.translate.aliases,icon:(0,f.jsx)(B,{size:18}),onItemClick:e=>{e(n.ai_default_commands.translate.prompt_placeholder)},size:`small`},{key:`simplify`,title:n.ai_default_commands.simplify.title,aliases:n.ai_default_commands.simplify.aliases,icon:(0,f.jsx)(W,{size:18}),onItemClick:async()=>{await r.invokeAI({useSelection:!0,userPrompt:`Simplify`,streamToolsProvider:e.i.html.getStreamToolsProvider({defaultStreamTools:{add:!1,delete:!1,update:!0}})})},size:`small`}]:[]}function Z(t){let n=e.n(t),r=t.getExtension(C);return r?[{key:`accept`,title:n.ai_menu.actions.accept.title,aliases:n.ai_menu.actions.accept.aliases,icon:(0,f.jsx)(z,{size:18}),onItemClick:()=>{r.acceptChanges()},size:`small`},{key:`revert`,title:n.ai_menu.actions.revert.title,aliases:n.ai_menu.actions.revert.aliases,icon:(0,f.jsx)(K,{size:18}),onItemClick:()=>{r.rejectChanges()},size:`small`}]:[]}function ne(t){let n=e.n(t),r=t.getExtension(C);return r?[{key:`retry`,title:n.ai_menu.actions.retry.title,aliases:n.ai_menu.actions.retry.aliases,icon:(0,f.jsx)(te,{size:18}),onItemClick:async()=>{await r.retry()},size:`small`},{key:`cancel`,title:n.ai_menu.actions.cancel.title,aliases:n.ai_menu.actions.cancel.aliases,icon:(0,f.jsx)(K,{size:18}),onItemClick:()=>{r.rejectChanges()},size:`small`}]:[]}function Q(e,t){return t===`user-input`?e.getSelection()?X(e):Y(e):t===`user-reviewing`?Z(e):t===`error`?ne(e):[]}var $=e=>{let t=(0,u.useBlockNoteEditor)(),[n,r]=(0,d.useState)(``),i=q(),a=(0,u.useComponentsContext)(),o=(0,u.useExtension)(C),s=(0,u.useExtensionState)(C,{selector:e=>e.aiMenuState===`closed`?`closed`:e.aiMenuState.status}),{items:c}=e,l=(0,d.useMemo)(()=>{let e=[];return e=c?c(t,s):Q(t,s),e.map(e=>({...e,onItemClick:()=>{e.onItemClick(r)}}))},[c,s,t]),p=(0,d.useCallback)(async e=>{await o.invokeAI({userPrompt:e,useSelection:t.getSelection()!==void 0})},[o,t]);(0,d.useEffect)(()=>{(s===`ai-writing`||s===`user-reviewing`||s===`error`)&&r(``)},[s]);let m=(0,d.useMemo)(()=>s===`thinking`?i.ai_menu.status.thinking:s===`ai-writing`?i.ai_menu.status.editing:s===`error`?i.ai_menu.status.error:i.ai_menu.input_placeholder,[s,i]),h=(0,d.useMemo)(()=>{if(s===`thinking`||s===`ai-writing`)return(0,f.jsx)(a.SuggestionMenu.Loader,{className:`bn-suggestion-menu-loader bn-combobox-right-section`});if(s===`error`)return(0,f.jsx)(`div`,{className:`bn-combobox-right-section bn-combobox-error`,children:(0,f.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,height:`1em`,viewBox:`0 -960 960 960`,width:`1em`,fill:`currentColor`,children:(0,f.jsx)(`path`,{d:`M480-280q17 0 28.5-11.5T520-320q0-17-11.5-28.5T480-360q-17 0-28.5 11.5T440-320q0 17 11.5 28.5T480-280Zm0-160q17 0 28.5-11.5T520-480v-160q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640v160q0 17 11.5 28.5T480-440Zm0 360q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z`})})})},[a,s]);return(0,f.jsx)(J,{onManualPromptSubmit:e.onManualPromptSubmit||p,items:l,promptText:n,onPromptTextChange:r,placeholder:m,disabled:s===`thinking`||s===`ai-writing`,icon:(0,f.jsx)(`div`,{className:`bn-combobox-icon`,children:(0,f.jsx)(L,{})}),rightSection:h})},re=e=>{let t=(0,u.useBlockNoteEditor)(),n=(0,u.useExtension)(C),r=(0,u.useExtensionState)(C,{editor:t,selector:e=>e.aiMenuState}),i=r===`closed`?void 0:r.blockId,a=(0,d.useMemo)(()=>({...e.floatingUIOptions,useFloatingOptions:{open:r!==`closed`,placement:`bottom`,middleware:[(0,p.offset)(10),(0,p.flip)(),(0,p.size)({apply({rects:e,elements:t}){Object.assign(t.floating.style,{width:`${e.reference.width}px`})}})],onOpenChange:e=>{e||r===`closed`||(r.status===`user-input`?n.closeAIMenu():(r.status===`user-reviewing`||r.status===`error`)&&n.rejectChanges())},whileElementsMounted(e,t,n){return(0,p.autoUpdate)(e,t,n,{animationFrame:!0})},...e.floatingUIOptions?.useFloatingOptions},useDismissProps:{enabled:r===`closed`||r.status===`user-input`,outsidePress:e=>{if(e.target instanceof Element){let t=e.target.closest(`.bn-block`);t&&t.getAttribute(`data-id`)===i&&n.closeAIMenu()}return!0},...e.floatingUIOptions?.useDismissProps},elementProps:{style:{zIndex:100},...e.floatingUIOptions?.elementProps},focusManagerProps:{disabled:!1,getInsideElements:()=>t.domElement?[t.domElement]:[],...e.floatingUIOptions?.focusManagerProps}}),[n,r,i,e.floatingUIOptions,t.domElement]),o=e.aiMenu||$;return(0,f.jsx)(u.BlockPopover,{blockId:i,...a,children:r!==`closed`&&(0,f.jsx)(o,{})})},ie=()=>{let e=q(),t=(0,u.useComponentsContext)(),n=(0,u.useBlockNoteEditor)(),i=(0,u.useExtension)(C),a=(0,u.useExtension)(r.FormattingToolbarExtension);return n.isEditable?(0,f.jsx)(t.Generic.Toolbar.Button,{className:`bn-button`,label:e.formatting_toolbar.ai.tooltip,mainTooltip:e.formatting_toolbar.ai.tooltip,icon:(0,f.jsx)(L,{}),onClick:()=>{let e=n.getSelection();if(!e)throw Error(`No selection`);let t=e.blocks[e.blocks.length-1].id;i.openAIMenuAtBlock(t),a.store.setState(!1)}}):null},ae={AI:L};function oe(t){let n=t.getExtension(C);return n?[{key:`ai`,onItemClick:()=>{let e=t.getTextCursorPosition();e.block.content&&Array.isArray(e.block.content)&&e.block.content.length===0&&e.prevBlock?n.openAIMenuAtBlock(e.prevBlock.id):n.openAIMenuAtBlock(e.block.id)},...e.n(t).slash_menu.ai,icon:(0,f.jsx)(ae.AI,{})}]:[]}exports.AIExtension=C,exports.AIMenu=$,exports.AIMenuController=re,exports.AIToolbarButton=ie,exports.ClientSideTransport=e.u,exports.PROVIDER_OVERRIDES=e.d,exports.PromptSuggestionMenu=J,exports.StreamToolExecutor=e.g,exports._getApplySuggestionsTr=e.a,exports.aiDocumentFormats=e.i,exports.buildAIRequest=e.y,exports.createStreamToolsArraySchema=e._,exports.fetchViaProxy=e.t,exports.getAIDictionary=e.n,exports.getAISlashMenuItems=oe,exports.getDefaultAIMenuItems=Q,exports.getProviderOverrides=e.f,exports.injectDocumentStateMessages=e.h,exports.makeDocumentStateBuilder=e.o,exports.objectStreamToOperationsResult=e.l,exports.promptHelpers=e.r,exports.sendMessageWithAIRequest=e.s,exports.setupToolCallStreaming=e.c,exports.streamToolsToToolSet=e.v,exports.toolDefinitionsToToolSet=e.p,exports.toolSetToToolDefinitions=e.m,exports.useAIDictionary=q;
2
2
  //# sourceMappingURL=blocknote-xl-ai.cjs.map