@bloklabs/react 1.12.0 → 1.14.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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @bloklabs/react
2
2
 
3
- The React block editor bindings for [Blok](https://blokeditor.com) — a headless, Notion-like rich text editor whose content is JSON blocks, not HTML.
3
+ The React block editor bindings for [Blok](https://blokeditor.com). Blok is a headless, Notion-like rich text editor whose content is JSON blocks, not HTML.
4
4
 
5
5
  ## Install
6
6
 
@@ -54,8 +54,8 @@ export function Editor() {
54
54
 
55
55
  ## Also exported
56
56
 
57
- - `useBlok(config, deps?)` — the hook behind the component, returns `Blok | null`.
58
- - `useBlokHandle()` — a stable, null-safe imperative handle (`focus`/`clear`/`save`/`render`/`setReadOnly`); attach via `<BlokEditor ref={handle.ref} />` instead of guarding a raw `Blok | null` ref.
57
+ - `useBlok(config, deps?)` — the hook behind the component. Returns `Blok | null`.
58
+ - `useBlokHandle()` — a stable, null-safe imperative handle (`focus`/`clear`/`save`/`render`/`setReadOnly`). Attach it via `<BlokEditor ref={handle.ref} />` instead of guarding a raw `Blok | null` ref.
59
59
  - `BlokContent` — the mount-point `<div>`, if you want to wire the hook yourself.
60
60
  - `useBlocks(editor)` — a reactive snapshot of the block tree plus a manipulation API.
61
61
  - `createReactBlock` / `createReactInlineTool` — author block and inline tools as React components.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("react"),t=require("@bloklabs/core"),n=require("@bloklabs/core/adapters"),r=require("react/jsx-runtime"),i=require("@bloklabs/core/locales"),a=require("react-dom"),o=require("@bloklabs/core/view"),s=require("react-dom/client");var c=new WeakMap;function l(e,t){c.set(e,t)}function u(e){return c.get(e)}function d(e){c.delete(e)}function f(e){"@babel/helpers - typeof";return f=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},f(e)}function p(e,t){if(f(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(f(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function m(e){var t=p(e,`string`);return f(t)==`symbol`?t:t+``}function h(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 g(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 _(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?g(Object(n),!0).forEach(function(t){h(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):g(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var v=(0,e.createContext)({});function y({defaults:e,children:t}){return(0,r.jsx)(v.Provider,{value:e,children:t})}function b(){return(0,e.useContext)(v)}function ee(e,t){if(Object.keys(e).length===0)return t;let n=_({},e);for(let e of Object.keys(t)){let r=t[e];r!==void 0&&(n[e]=r)}return(e.tools!==void 0||t.tools!==void 0)&&(n.tools=_(_({},e.tools),t.tools)),n}var x=`__blokPortalRegistry`,S=`__blokToolName`,C=()=>{let e={snapshot:new Map},t=new Set,n=new Map,r=n=>{e.snapshot=n,t.forEach(e=>e())};return{register(t,i){let a=new Map(e.snapshot),o=i.toolName===void 0?void 0:n.get(i.toolName);a.set(t,o===void 0?i:_(_({},i),{},{props:_(_({},i.props),{},{config:o})})),r(a)},unregister(t,n){let i=e.snapshot.get(t);if(i===void 0||n!==void 0&&i.hostEl!==n)return;let a=new Map(e.snapshot);a.delete(t),r(a)},setProps(t,n){let i=e.snapshot.get(t);if(i===void 0)return;let a=new Map(e.snapshot);a.set(t,_(_({},i),{},{props:_(_({},i.props),n)})),r(a)},setToolConfig(t,i){n.set(t,i);let a=[...e.snapshot].filter(([,e])=>e.toolName===t);if(a.length===0)return;let o=new Map(e.snapshot);for(let[e,t]of a)o.set(e,_(_({},t),{},{props:_(_({},t.props),{},{config:i})}));r(o)},subscribe(e){return t.add(e),()=>{t.delete(e)}},getSnapshot(){return e.snapshot}}},w=new WeakMap;function te(e,t){w.set(e,t)}function T(e){return w.get(e)}function E(e){w.delete(e)}var D=new WeakMap;function ne(e,t){D.set(e,t)}function O(e){return D.get(e)}function k(e){D.delete(e)}var A=e=>{if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},j=(e,t)=>t.reduce((e,t)=>{if(Array.isArray(e))return typeof t==`number`?e[t]:void 0;if(A(e))return e[t]},e),re=(e,t)=>{let n=(e,t)=>{if(typeof e==`function`)return typeof t==`function`?t:e;if(Array.isArray(e)){let r=Array.isArray(t)?t:[];return e.map((e,t)=>n(e,r[t]))}if(A(e)){let r=A(t)?t:{},i={};for(let[t,a]of Object.entries(e))i[t]=n(a,r[t]);return i}return e},r=n(t,e);return A(r)?r:{}},ie=(e,t)=>{if(!A(e))return e;let n={};for(let[r,i]of Object.entries(e)){if(!A(i)||!A(i.config)){n[r]=i;continue}let e=new WeakSet,a=(n,i)=>{if(typeof n==`function`){let e=n;return function(...n){let a=t(),o=A(a)?a[r]:void 0,s=j(A(o)?o.config:void 0,i);return Reflect.apply(typeof s==`function`?s:e,this,n)}}if(Array.isArray(n))return e.has(n)?n:(e.add(n),n.map((e,t)=>a(e,[...i,t])));if(A(n)){if(e.has(n))return n;e.add(n);let t={};for(let[e,r]of Object.entries(n))t[e]=a(r,[...i,e]);return t}return n};n[r]=_(_({},i),{},{config:a(i.config,[])})}return n},M=e=>{let t=typeof e==`function`?e:e==null?void 0:e.class;return typeof t==`function`&&t.__isBlokReactBlock===!0},N=e=>{let t=typeof e==`function`?e:e==null?void 0:e.class;return typeof t==`function`&&t.__isBlokReactInlineTool===!0},ae=(e,t)=>{if(typeof e!=`object`||!e)return e;let n={};for(let[i,a]of Object.entries(e)){var r;if(!M(a)&&!N(a)){n[i]=a;continue}let e=typeof a==`function`?{class:a}:_({},a);e.config=_(_({},(r=e.config)==null?{}:r),{},{[x]:t,[S]:i});let o=e.class.__buildPortalToolbox,s=typeof o==`function`&&e.toolbox===void 0?o(t,i):void 0;s!==void 0&&(e.toolbox=s),n[i]=e}return n};function P(r,i){var a,o;let s=ee((0,e.useContext)(v),r),[c,u]=(0,e.useState)(null),f=(0,e.useRef)(s);f.current=s;let p=(0,e.useRef)({editor:null,holder:null,destroyTimeout:null,isDestroyed:!1,isEditorReady:!1,depsToken:null}),m=(0,e.useMemo)(()=>({}),i==null?[]:i),h=(0,e.useRef)(s.data),g=(0,e.useRef)((0,n.createEmittedEchoWindow)()),y=(0,e.useRef)(null),b=(0,e.useRef)(s.data),x=(0,e.useRef)(Promise.resolve()),S=(0,e.useRef)(void 0),w=(0,e.useRef)(null),T=(0,e.useRef)(void 0),D=(0,e.useRef)(new Map),O=(0,e.useRef)(new Map),A=(0,e.useRef)(null),j=(0,e.useRef)({onChange:!1,onSave:!1,onEnter:!1,onSubmit:!1,onBeforeRender:!1,onAfterRender:!1});(0,e.useEffect)(()=>{var e;if(typeof window>`u`)return;let n=p.current;if(n.destroyTimeout!==null&&(clearTimeout(n.destroyTimeout),n.destroyTimeout=null),n.editor!==null&&!n.isDestroyed&&n.depsToken===m)return n.isEditorReady&&u(n.editor),()=>{F(n,u)};if(n.editor!==null&&!n.isDestroyed){d(n.editor),E(n.editor),k(n.editor);try{n.editor.destroy()}catch(e){}n.editor=null,n.holder=null,n.isDestroyed=!0,n.isEditorReady=!1,u(null)}let r=document.createElement(`div`);n.holder=r,n.isDestroyed=!1,n.isEditorReady=!1,n.depsToken=m;let i=f.current,a=C(),o=i.tools===void 0?void 0:ie(i.tools,()=>f.current.tools),s=o===void 0?void 0:ae(o,a);w.current=a,T.current=o,D.current=new Map,O.current=new Map(Object.entries((e=i.tools)==null?{}:e).map(([e,t])=>[e,typeof t==`object`&&t?t.toolbox:void 0]));let c={onChange:(...e)=>{var t,n;(t=(n=f.current).onChange)==null||t.call(n,...e)},onSave:(...e)=>{var t,n;h.current=e[0],g.current.record(e[0]),(t=(n=f.current).onSave)==null||t.call(n,...e)},onEnter:(...e)=>{var t,n;return(t=(n=f.current).onEnter)==null?void 0:t.call(n,...e)},onSubmit:(...e)=>{var t,n;(t=(n=f.current).onSubmit)==null||t.call(n,...e)},onBeforeRender:(...e)=>{var t,n,r;return(t=(n=(r=f.current).onBeforeRender)==null?void 0:n.call(r,...e))==null?e[0]:t},onAfterRender:(...e)=>{var t,n;(t=(n=f.current).onAfterRender)==null||t.call(n,...e)}};A.current=c;let v={onChange:i.onChange!==void 0,onSave:i.onSave!==void 0,onEnter:i.onEnter!==void 0,onSubmit:i.onSubmit!==void 0,onBeforeRender:i.onBeforeRender!==void 0,onAfterRender:i.onAfterRender!==void 0};j.current=v;let y=new t.Blok(_(_(_(_(_(_(_(_({},i),s===void 0?{}:{tools:s}),{},{holder:r,onReady:(...e)=>{var t,n;(t=(n=f.current).onReady)==null||t.call(n,...e)}},v.onChange?{onChange:c.onChange}:{}),v.onSave?{onSave:c.onSave}:{}),v.onEnter?{onEnter:c.onEnter}:{}),v.onSubmit?{onSubmit:c.onSubmit}:{}),v.onBeforeRender?{onBeforeRender:c.onBeforeRender}:{}),v.onAfterRender?{onAfterRender:c.onAfterRender}:{}));return n.editor=y,b.current=i.data,l(y,r),te(y,a),ne(y,{markRendered:e=>{g.current.clear(),h.current=e,S.current=void 0}}),y.isReady.then(()=>{n.editor===y&&!n.isDestroyed&&(n.isEditorReady=!0,u(y))}).catch(()=>{if(n.editor===y&&!n.isDestroyed){d(y),E(y),k(y);try{y.destroy()}catch(e){}n.editor=null,n.holder=null,n.isDestroyed=!0,n.isEditorReady=!1,u(null)}}),()=>{F(n,u)}},[m]),(0,e.useEffect)(()=>{let e=w.current,t=p.current;if(e===null||t.editor===null||t.isDestroyed)return;let r=f.current.tools;if(typeof r!=`object`||!r)return;let i=T.current;for(let[t,o]of Object.entries(r)){var a;if(!M(o))continue;let r=typeof o==`function`||(a=o.config)==null?{}:a,s=i==null?void 0:i[t],c=re(typeof s==`object`&&s?s.config:void 0,r),l=D.current.get(t);if(l!==void 0&&(0,n.deepEqual)(c,l))continue;let u=Object.freeze(c);D.current.set(t,u),e.setToolConfig(t,u)}}),(0,e.useEffect)(()=>{let e=p.current;if(e.editor===null||e.isDestroyed||!e.isEditorReady)return;let t=f.current.tools;if(!(typeof t!=`object`||!t))for(let[i,a]of Object.entries(t)){var r;if(!O.current.has(i))continue;let t=typeof a==`object`&&a?a.toolbox:void 0;(0,n.deepEqual)(t,O.current.get(i))||(O.current.set(i,t),(r=e.editor.tools)==null||r.update(i,{toolbox:t}))}}),(0,e.useEffect)(()=>{let e=p.current,t=A.current;if(e.editor===null||e.isDestroyed||!e.isEditorReady||t===null)return;let n=f.current,r=j.current,i={},a={value:!1},o=(e,i)=>{let o=n[e]!==void 0;o!==r[e]&&(r[e]=o,a.value=!0,i(o?t[e]:void 0))};o(`onChange`,e=>{i.onChange=e}),o(`onSave`,e=>{i.onSave=e}),o(`onEnter`,e=>{i.onEnter=e}),o(`onSubmit`,e=>{i.onSubmit=e}),o(`onBeforeRender`,e=>{i.onBeforeRender=e}),o(`onAfterRender`,e=>{i.onAfterRender=e}),a.value&&e.editor.handlers.set(i)});let N=typeof s.readOnly==`object`&&s.readOnly!==null,{enabled:P,hideControls:I}=(0,n.normalizeReadOnlyConfig)(s.readOnly);(0,e.useEffect)(()=>{c!==null&&(N?c.readOnly.set(P,{hideControls:I}):c.readOnly.set(P))},[c,P,I,N]);let{hideToolbar:L}=s;(0,e.useEffect)(()=>{c===null||L===void 0||c.toolbar.setHidden(L)},[c,L]);let{toolbarPosition:R}=s;(0,e.useEffect)(()=>{c===null||R===void 0||c.toolbar.setPosition(R)},[c,R]);let{inlineToolbar:z}=s;(0,e.useEffect)(()=>{c===null||z===void 0||c.tools.setInlineToolbar(z)},[c,z===void 0?void 0:JSON.stringify(z)]);let{autofocus:B}=s;(0,e.useEffect)(()=>{c===null||!B||c.focus()},[c,B]);let{theme:V}=s;(0,e.useEffect)(()=>{c===null||V===void 0||c.theme.set(V)},[c,V]);let{width:H}=s;(0,e.useEffect)(()=>{c===null||H===void 0||c.width.set(H)},[c,H]);let U=(a=s.style)==null?void 0:a.tokens,W=(0,e.useRef)((o=s.style)==null?void 0:o.tokens);(0,e.useEffect)(()=>{c===null||U===void 0||(0,n.deepEqual)(U,W.current)||(W.current=U,c.tokens.set(U))},[c,U]);let{i18n:G}=s,K=(0,e.useRef)(s.i18n);(0,e.useEffect)(()=>{if(c===null||G===void 0||(0,n.deepEqual)(G,K.current))return;K.current=G;let{locale:e,messages:t,direction:r}=G;c.i18n.update(_(_(_({},e===void 0?{}:{locale:e}),t===void 0?{}:{messages:t}),r===void 0?{}:{direction:r}))},[c,G]);let{placeholder:q}=s;(0,e.useEffect)(()=>{c===null||q===void 0||c.placeholder.set(q)},[c,q]);let{data:J}=s;return(0,e.useEffect)(()=>{if(c===null||J===void 0)return;let e=p.current;if(e.editor!==c||e.isDestroyed)return;if(y.current!==c&&(y.current=c,S.current=void 0,g.current.clear(),(0,n.deepEqual)(J,b.current))){h.current=J;return}let t=h.current,r=S.current;t!==void 0&&(0,n.equalsOutputData)(J,t)||r!==void 0&&(0,n.equalsOutputData)(J,r)||g.current.matches(J)||(g.current.clear(),S.current=J,x.current=x.current.catch(()=>void 0).then(()=>c.render((0,n.toRenderableData)(J))).then(()=>{h.current=J},()=>{}).then(()=>{S.current===J&&(S.current=void 0)}))},[c,J]),c}function F(e,t){e.destroyTimeout=setTimeout(()=>{if(e.editor!==null){d(e.editor),E(e.editor),k(e.editor);try{e.editor.destroy()}catch(e){}e.editor=null,e.holder=null,e.isDestroyed=!0,e.isEditorReady=!1,e.destroyTimeout=null,t(null)}},0)}var I=class extends e.Component{constructor(...e){super(...e),this.state={failed:!1}}static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(){}render(){return this.state.failed?null:this.props.children}};function L({registry:t}){let n=(0,e.useSyncExternalStore)(t.subscribe,t.getSnapshot,t.getSnapshot);return(0,r.jsx)(r.Fragment,{children:Array.from(n.entries()).map(([e,t])=>{let n=t.component;return(0,a.createPortal)((0,r.jsx)(I,{children:(0,r.jsx)(n,_({},t.props))}),t.hostEl,e)})})}var R=(0,e.createContext)(null);function z(){return(0,e.useContext)(R)}function B(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.includes(r))continue;n[r]=e[r]}return n}function V(e,t){if(e==null)return{};var n,r,i=B(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.includes(n)||{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var H=[`editor`];function U(e){var t,n;if(typeof window>`u`)return;let r=window.location.hash.slice(1);r!==``&&((t=(n=e.blocks).scrollToBlock)==null||t.call(n,W(r)))}function W(e){try{return decodeURIComponent(e)}catch(t){return e}}var G=(0,e.forwardRef)(function(t,n){let{editor:i}=t,a=V(t,H),o=(0,e.useRef)(null),s=e=>{if(o.current=e,typeof n==`function`)n(e);else if(n!=null){let t=n;t.current=e}};(0,e.useEffect)(()=>{if(i===null||o.current===null)return;let e=u(i);if(e!==void 0)return o.current.appendChild(e),U(i),()=>{e.remove()}},[i]);let c=i===null?void 0:T(i);return(0,r.jsx)(`div`,_(_({ref:s},a),{},{children:c===void 0?null:(0,r.jsx)(R.Provider,{value:i,children:(0,r.jsx)(L,{registry:c})})}))}),K=`autofocus.defaultBlock.dataModel.placeholder.sanitizer.hideToolbar.toolbarPosition.maxHistoryLength.historyDebounceTime.newGroupDelay.globalUndoRedo.tools.data.minHeight.logLevel.readOnly.i18n.link.linkPaste.onBeforePaste.onReady.onChange.onSave.onError.onEnter.onSubmit.onBeforeRender.onAfterRender.inlineToolbar.tunes.style.theme.onThemeChange.scrollToBlock.user.resolveUser.notifierPosition.notifier.width.migrations.uploader.captureClicksBelowEditor`.split(`.`),q=[`deps`,`onReady`,`locale`,`onBlocksRendered`,`onBlockRendered`],J=new Set(K),oe=(0,e.forwardRef)(function(t,n){let{deps:i,onReady:a,locale:o,onBlocksRendered:s,onBlockRendered:c}=t,l=V(t,q),u={},d={};for(let e of Object.keys(l)){let t=l[e];J.has(e)?u[e]=t:d[e]=t}if(o!==void 0){let e=u.i18n;u.i18n=_(_({},e),{},{locale:o})}let f=P(u,i);(0,e.useImperativeHandle)(n,()=>f,[f]);let p=(0,e.useRef)(a);p.current=a;let m=(0,e.useRef)(null);(0,e.useEffect)(()=>{if(f!==null&&m.current!==f){var e;m.current=f,(e=p.current)==null||e.call(p,f)}},[f]);let h=(0,e.useRef)(s);h.current=s;let g=(0,e.useRef)(c);g.current=c;let v=!!s,y=!!c;return(0,e.useEffect)(()=>{if(f===null)return;let e=[];if(v){let t=e=>{var t;return(t=h.current)==null?void 0:t.call(h,e)};f.on(`blocks:rendered`,t),e.push([`blocks:rendered`,t])}if(y){let t=e=>{var t;return(t=g.current)==null?void 0:t.call(g,e)};f.on(`block:rendered`,t),e.push([`block:rendered`,t])}return()=>{for(let[t,n]of e)f.off(t,n)}},[f,v,y]),(0,r.jsx)(G,_({editor:f},d))});function se(){let t=(0,e.useRef)(null);return(0,e.useMemo)(()=>({ref:e=>{t.current=e},get current(){return t.current},get isReady(){return t.current!==null},focus:e=>{var n,r;return(n=(r=t.current)==null?void 0:r.focus(e))!=null&&n},clear:()=>{let e=t.current;return e===null?Promise.resolve():e.clear().then(()=>{var t;(t=O(e))==null||t.markRendered(n.EMPTY_OUTPUT_DATA)})},save:()=>t.current===null?Promise.resolve(null):t.current.save(),render:e=>{let n=t.current;return n===null?Promise.resolve():n.render(e).then(()=>{var t;(t=O(n))==null||t.markRendered(e)})},setReadOnly:e=>{let n=t.current;return n===null?Promise.resolve(!1):n.readOnly.set(e==null?!n.readOnly.isEnabled:e)}}),[])}var Y=`block changed`;function ce(t,r={}){var i;let a=(i=r.within)==null?null:i,o=(0,e.useRef)(0),s=(0,e.useRef)(t);s.current!==t&&(s.current=t,o.current=0);let c=(0,e.useCallback)(e=>{if(t===null)return()=>void 0;let r=r=>{a!==null&&!(0,n.changeTouchesSubtree)(t,r,a)||(o.current+=1,e())};return t.on(Y,r),()=>t.off(Y,r)},[t,a]),l=(0,e.useCallback)(()=>o.current,[]);return(0,e.useSyncExternalStore)(c,l,l),(0,e.useMemo)(()=>t===null?n.EMPTY_API:(0,n.createBlocksApiForEditor)(t),[t])}function le(n={}){let{within:r,settleOn:i}=n,[a,o]=(0,e.useState)(!1);return(0,e.useEffect)(()=>{let e=()=>{var e;let n=r instanceof Element?r:(e=r==null?void 0:r.current)==null?null:e;o(r!==void 0&&n===null?!1:t.Blok.readyState({within:n,settleOn:i}).ready)};return e(),t.Blok.subscribeReady(e)},[r,i]),a}var ue=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`link`,`meta`,`param`,`source`,`track`,`wbr`]),de=new Set([`disabled`,`open`,`controls`,`autoplay`,`loop`,`muted`,`required`,`multiple`,`playsinline`,`reversed`,`hidden`,`default`,`novalidate`,`allowfullscreen`,`itemscope`]),X={class:`className`,for:`htmlFor`,colspan:`colSpan`,rowspan:`rowSpan`,tabindex:`tabIndex`,readonly:`readOnly`,srcset:`srcSet`,srclang:`srcLang`,datetime:`dateTime`,autoplay:`autoPlay`,playsinline:`playsInline`,novalidate:`noValidate`,allowfullscreen:`allowFullScreen`,crossorigin:`crossOrigin`,referrerpolicy:`referrerPolicy`,contenteditable:`contentEditable`,spellcheck:`spellCheck`,maxlength:`maxLength`,minlength:`minLength`,usemap:`useMap`,itemscope:`itemScope`},fe=e=>{let t={};for(let n of e.split(`;`)){let e=n.indexOf(`:`);if(e===-1)continue;let r=n.slice(0,e).trim(),i=n.slice(e+1).trim();if(r===``||i===``)continue;let a=r.startsWith(`--`)?r:r.toLowerCase().replace(/-([a-z])/g,(e,t)=>t.toUpperCase());t[a]=i}return t},pe=(e,t)=>{let n={key:t};for(let[t,a]of Object.entries(e)){var r;if(t===`style`){n.style=fe(a);continue}if(t===`checked`){n.defaultChecked=!0;continue}if(t===`value`){n.defaultValue=a;continue}if(de.has(t)){var i;n[(i=X[t])==null?t:i]=!0;continue}n[(r=X[t])==null?t:r]=a}return n},Z=t=>t.map((t,n)=>{if(`text`in t)return t.text;let r=pe(t.attrs,n);return ue.has(t.tag)||t.children.length===0?(0,e.createElement)(t.tag,r):(0,e.createElement)(t.tag,r,...Z(t.children))}),Q=(t,n)=>{let r=n==null?void 0:n.schema,i=n==null?void 0:n.renderers,a=n==null?void 0:n.onUnknownBlock,s=n==null?void 0:n.toolAttributes,c=n==null?void 0:n.blockIds,l=n==null?void 0:n.transformUrl,u=n==null?void 0:n.inlineRenderers,d=n==null?void 0:n.classes;return(0,e.useMemo)(()=>(0,e.createElement)(e.Fragment,null,...Z((0,o.blocksToViewNodes)(t,{schema:r,renderers:i,onUnknownBlock:a,toolAttributes:s,blockIds:c,transformUrl:l,inlineRenderers:u,classes:d}))),[t,r,i,a,s,c,l,u,d])},me=[`data`,`schema`,`renderers`,`onUnknownBlock`,`toolAttributes`,`blockIds`,`transformUrl`,`inlineRenderers`,`classes`],he=e=>{let{data:t,schema:n,renderers:i,onUnknownBlock:a,toolAttributes:o,blockIds:s,transformUrl:c,inlineRenderers:l,classes:u}=e,d=V(e,me),f=Q(t,{schema:n,renderers:i,onUnknownBlock:a,toolAttributes:o,blockIds:s,transformUrl:c,inlineRenderers:l,classes:u==null||u});return(0,r.jsx)(`div`,_(_({"data-blok-interface":`view`},d),{},{children:f}))},ge=[`icon`,`title`],_e=[`commit`,`readOnly`],ve=[x,S],ye=(e,t,r)=>{var i;e==null||(i=e.events)==null||i.emit(n.BlockChildrenMounted,{blockId:t,childIds:r.map(e=>e.id)})},be=new Set([void 0,`user`,`api`,`convert`]),xe=[`toolbox`,`isReadOnlySupported`,`__isBlokReactBlock`,`__buildPortalToolbox`];function Se(t){var i,o;let c=e=>{if(typeof document>`u`)return null;let t=document.createElement(`div`),n=(0,s.createRoot)(t);(0,a.flushSync)(()=>{n.render(e)});let r=t.innerHTML;return n.unmount(),r===``?null:r},l=t=>{let{icon:n,title:r}=t,i=_({},V(t,ge));if(typeof r==`string`&&(i.title=r),!(0,e.isValidElement)(n))return n!==void 0&&(i.icon=n),{entry:i,deferred:!1};let a=c(n);return a===null?(i.icon=n,{entry:i,deferred:!0}):(i.icon=a,{entry:i,deferred:!1})},u=()=>{if(t.toolbox===void 0)return{value:void 0,complete:!0};let e=(Array.isArray(t.toolbox)?t.toolbox:[t.toolbox]).map(e=>l(e)),n=e.every(e=>!e.deferred),r=e.map(e=>e.entry);return{value:Array.isArray(t.toolbox)?r:r[0],complete:n}},d=(n,i)=>{if(t.toolbox===void 0)return;let a=Array.isArray(t.toolbox)?t.toolbox:[t.toolbox];if(!a.some(t=>(0,e.isValidElement)(t.title)))return;let o=a.map((t,a)=>{let{entry:o,deferred:s}=l(t);if(s&&delete o.icon,!(0,e.isValidElement)(t.title))return o;let c=document.createElement(`span`);c.setAttribute(`data-blok-mutation-free`,`true`);let u=t.title,d=()=>(0,r.jsx)(r.Fragment,{children:u});return d.displayName=`BlokToolboxTitle(${i})`,n.register(`__blok-toolbox-title__:${i}:${a}`,{hostEl:c,component:d,props:{},toolName:i}),_(_({},o),{},{titleEl:c})});return Array.isArray(t.toolbox)?o:o[0]},f={resolved:!1,value:void 0},p=()=>{if(f.resolved)return f.value;let{value:e,complete:t}=u();return t&&(f.value=e,f.resolved=!0),e},m=t.viewComponent===void 0?t.component:e=>{let n=t.viewComponent;if(e.readOnly&&n!==void 0){let{commit:t,readOnly:i}=e;return(0,r.jsx)(n,_({},V(e,_e)))}let i=t.component;return(0,r.jsx)(i,_({},e))},h=(i=class{static get toolbox(){return p()}static __buildPortalToolbox(e,t){return d(e,t)}static get isReadOnlySupported(){return!0}constructor(i){var a,o,s;this.mountSignalled=!1,this.hostEl=null,this.pendingDispatch=!1,this.anchorEl=null,this.toolbarAnchorRef=e=>{this.anchorEl=e},this.commit=e=>{var r;let i=(0,n.fillDefaults)(t.propSchema,_(_({},this.mirror),e));(0,n.deepEqual)(i,this.mirror)||(this.mirror=i,this.lastRendered=i,(r=this.registry)==null||r.setProps(this.blockApi.id,{data:i}),this.flushDispatch())},this.blockApi=i.block;let c=(a=i.config)==null?{}:a;this.registry=c[x];let l=c[S];this.toolName=typeof l==`string`?l:void 0;let u={};for(let[e,t]of Object.entries(c))ve.includes(e)||(u[e]=t);this.toolConfig=Object.freeze(u),this.api=i.api;let d=i.api;this.pointerDrag=()=>{var e;return(d==null||(e=d.blocks)==null?void 0:e.isPointerDragActive)===!0},this.mirror=(0,n.fillDefaults)(t.propSchema,(o=i.data)==null?{}:o),this.lastRendered=this.mirror,this.readOnly=i.readOnly,this.origin=(s=i.origin)==null?`api`:s;let f=this.blockApi,p=this.api;this.childrenComponent=function({childAttributes:t,childContentAttributes:i}){let a=(0,e.useRef)(null),o=(0,e.useRef)((0,n.createChildDecorationLedger)());return(0,e.useEffect)(()=>{if(a.current===null)return;let e=f.getChildren();(0,n.mountChildBlocks)(a.current,e),(0,n.applyChildDecoration)(o.current,e,{childAttributes:t,childContentAttributes:i}),ye(p,f.id,e)}),(0,r.jsx)(`div`,{ref:a,[n.DATA_ATTR.nestedBlocks]:``})},this.entryComponent=this.buildEntryComponent()}buildEntryComponent(){let n=t.onMounted,i=t.onCreated;if(n===void 0&&i===void 0)return m;let a=m,o=()=>{if(this.mountSignalled)return;this.mountSignalled=!0;let e={origin:this.origin,api:this.api};n==null||n(this.blockApi,e),be.has(this.origin)&&(i==null||i(this.blockApi,e))},s=t=>((0,e.useEffect)(o,[]),(0,r.jsx)(a,_({},t)));return s.displayName=`BlokBlockMount(${t.type})`,s}render(){var e;let t=document.createElement(`div`);return t.setAttribute(`data-blok-mutation-free`,`true`),this.hostEl=t,(e=this.registry)==null||e.register(this.blockApi.id,{hostEl:t,component:this.entryComponent,props:this.buildProps(),toolName:this.toolName}),t}rendered(){var e;(e=t.onRendered)==null||e.call(t,this.blockApi)}save(){return this.mirror}async setData(e){var r=this;let i=(0,n.fillDefaults)(t.propSchema,e==null?{}:e);return(0,n.deepEqual)(i,r.lastRendered)?!0:(r.mirror=i,r.lastRendered=i,r.pushProps({data:i}),!0)}setReadOnly(e){this.readOnly=e,this.pushProps({readOnly:e})}getToolbarAnchorElement(){var e;let n=this.anchorEl;if(n!==null&&n.isConnected)return n;let r=this.hostEl;if(!(r===null||t.getToolbarAnchorElement===void 0))return(e=t.getToolbarAnchorElement(r,this.blockApi))==null?void 0:e}moved(){var e;(e=t.onMoved)==null||e.call(t,this.blockApi)}removed(){var e,n,r;(e=this.registry)==null||e.unregister(this.blockApi.id,(n=this.hostEl)==null?void 0:n),(r=t.onRemoved)==null||r.call(t,this.blockApi)}destroy(){var e,t;(e=this.registry)==null||e.unregister(this.blockApi.id,(t=this.hostEl)==null?void 0:t)}buildProps(){return{data:this.mirror,commit:this.commit,block:this.blockApi,api:this.api,readOnly:this.readOnly,config:this.toolConfig,BlockChildren:this.childrenComponent,toolbarAnchorRef:this.toolbarAnchorRef}}pushProps(e){let t=this.registry;t!==void 0&&(0,a.flushSync)(()=>{t.setProps(this.blockApi.id,e)})}flushDispatch(){if(!this.pointerDrag()){this.pendingDispatch=!1,this.blockApi.dispatchChange();return}if(this.pendingDispatch)return;this.pendingDispatch=!0;let e=()=>{if(this.pointerDrag()){requestAnimationFrame(e);return}this.pendingDispatch=!1,this.blockApi.dispatchChange()};requestAnimationFrame(e)}},i.__isBlokReactBlock=!0,i);for(let[e,n]of Object.entries((o=t.statics)==null?{}:o))xe.includes(e)||Object.defineProperty(h,e,{value:n,writable:!0,enumerable:!0,configurable:!0});return h}var Ce=[x,S],we=e=>`__blok-inline-tool__:${e}:${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,$=(0,e.createContext)(null);function Te(){let t=(0,e.useContext)($);if(t===null)throw Error(`useInlineTool() must be called from a component rendered by createReactInlineTool`);return t}function Ee(t){var i;return i=class{static get type(){return t.type}static get title(){return t.title}static get titleKey(){var e;return(e=t.titleKey)==null?t.type:e}static get shortcut(){return t.shortcut}static get mark(){return t.mark}static get sanitize(){return t.sanitize===void 0?t.mark===void 0?void 0:(0,n.markSanitizerConfig)(t.mark):t.sanitize}static get isReadOnlySupported(){var e;return(e=t.isReadOnlySupported)!=null&&e}constructor(e){var n;this.active=!1,this.registered=!1;let r=(n=e==null?void 0:e.config)==null?{}:n;this.api=e==null?void 0:e.api,this.registry=r[x];let i=r[S];this.toolName=typeof i==`string`?i:t.type,this.portalKey=we(this.toolName);let a={};for(let[e,t]of Object.entries(r))Ce.includes(e)||(a[e]=t);this.toolConfig=Object.freeze(a),this.portalComponent=this.createPortalComponent()}render(){let e=document.createElement(`div`);return e.setAttribute(`data-blok-mutation-free`,`true`),this.registry!==void 0&&(this.registry.register(this.portalKey,{hostEl:e,component:this.portalComponent,props:{active:this.active,config:this.toolConfig},toolName:this.toolName}),this.registered=!0),{name:this.toolName,title:t.title,icon:e,onActivate:()=>{this.activate()},isActive:()=>this.refreshActiveState()}}destroy(){var e;this.registered&&(this.registered=!1,(e=this.registry)==null||e.unregister(this.portalKey))}activate(){var e;if(typeof t.surround==`function`){let e=window.getSelection();if(!e||e.rangeCount===0)return;t.surround(e.getRangeAt(0),this.api);return}t.mark!==void 0&&((e=this.api)==null?void 0:e.marks)!==void 0&&this.api.marks.toggle(t.mark)}refreshActiveState(){let e=this.computeActiveState();if(e!==this.active&&(this.active=e,this.registered)){var t;(t=this.registry)==null||t.setProps(this.portalKey,{active:e})}return e}computeActiveState(){var e;return typeof t.checkState==`function`?!!t.checkState(window.getSelection(),this.api):t.mark!==void 0&&((e=this.api)==null?void 0:e.marks)!==void 0&&this.api.marks.has(t.mark)}createPortalComponent(){let n=this.api,i=t.mark,a=t.component,o=i!==void 0&&(n==null?void 0:n.marks)!==void 0?{has:()=>n.marks.has(i),toggle:e=>n.marks.toggle(i,e),apply:e=>n.marks.apply(i,e),remove:()=>n.marks.remove(i),read:()=>n.marks.read(i)}:null,s=t=>{let i=(0,e.useMemo)(()=>({active:t.active,config:t.config,api:n,mark:o}),[t.active,t.config]);return(0,r.jsx)($.Provider,{value:i,children:(0,r.jsx)(a,{active:t.active,config:t.config})})};return s.displayName=`BlokInlineTool(${this.toolName})`,s}},i.__isBlokReactInlineTool=!0,i.isInline=!0,i}exports.BLOK_PORTAL_REGISTRY_CONFIG_KEY=x,exports.BLOK_TOOL_NAME_CONFIG_KEY=S,exports.BlockPortalHost=L,exports.BlokContent=G,exports.BlokEditor=oe,exports.BlokProvider=y,exports.BlokView=he,exports.createBlockPortalRegistry=C,exports.createReactBlock=Se,exports.createReactInlineTool=Ee,Object.defineProperty(exports,"getDirection",{enumerable:!0,get:function(){return i.getDirection}}),Object.defineProperty(exports,"normalizeLocale",{enumerable:!0,get:function(){return i.normalizeLocale}}),exports.useBlocks=ce,exports.useBlok=P,exports.useBlokDefaults=b,exports.useBlokHandle=se,exports.useBlokInstance=z,exports.useBlokReady=le,exports.useBlokView=Q,exports.useInlineTool=Te;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("react"),t=require("@bloklabs/core"),n=require("@bloklabs/core/adapters"),r=require("react/jsx-runtime"),i=require("@bloklabs/core/locales"),a=require("react-dom"),o=require("@bloklabs/core/view"),s=require("react-dom/client");var c=new WeakMap;function l(e,t){c.set(e,t)}function u(e){return c.get(e)}function d(e){c.delete(e)}function f(e){"@babel/helpers - typeof";return f=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},f(e)}function p(e,t){if(f(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(f(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function m(e){var t=p(e,`string`);return f(t)==`symbol`?t:t+``}function h(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 g(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 _(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?g(Object(n),!0).forEach(function(t){h(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):g(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var v=(0,e.createContext)({});function y({defaults:e,children:t}){return(0,r.jsx)(v.Provider,{value:e,children:t})}function b(){return(0,e.useContext)(v)}function x(e,t){if(Object.keys(e).length===0)return t;let n=_({},e);for(let e of Object.keys(t)){let r=t[e];r!==void 0&&(n[e]=r)}return(e.tools!==void 0||t.tools!==void 0)&&(n.tools=_(_({},e.tools),t.tools)),n}var S=`__blokPortalRegistry`,C=`__blokToolName`,w=()=>{let e={snapshot:new Map},t=new Set,n=new Map,r=n=>{e.snapshot=n,t.forEach(e=>e())};return{register(t,i){let a=new Map(e.snapshot),o=i.toolName===void 0?void 0:n.get(i.toolName);a.set(t,o===void 0?i:_(_({},i),{},{props:_(_({},i.props),{},{config:o})})),r(a)},unregister(t,n){let i=e.snapshot.get(t);if(i===void 0||n!==void 0&&i.hostEl!==n)return;let a=new Map(e.snapshot);a.delete(t),r(a)},setProps(t,n){let i=e.snapshot.get(t);if(i===void 0)return;let a=new Map(e.snapshot);a.set(t,_(_({},i),{},{props:_(_({},i.props),n)})),r(a)},setToolConfig(t,i){n.set(t,i);let a=[...e.snapshot].filter(([,e])=>e.toolName===t);if(a.length===0)return;let o=new Map(e.snapshot);for(let[e,t]of a)o.set(e,_(_({},t),{},{props:_(_({},t.props),{},{config:i})}));r(o)},subscribe(e){return t.add(e),()=>{t.delete(e)}},getSnapshot(){return e.snapshot}}},T=new WeakMap;function ee(e,t){T.set(e,t)}function E(e){return T.get(e)}function D(e){T.delete(e)}var O=new WeakMap;function te(e,t){O.set(e,t)}function k(e){return O.get(e)}function A(e){O.delete(e)}var j=e=>{if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},M=(e,t)=>t.reduce((e,t)=>{if(Array.isArray(e))return typeof t==`number`?e[t]:void 0;if(j(e))return e[t]},e),ne=(e,t)=>{let n=(e,t)=>{if(typeof e==`function`)return typeof t==`function`?t:e;if(Array.isArray(e)){let r=Array.isArray(t)?t:[];return e.map((e,t)=>n(e,r[t]))}if(j(e)){let r=j(t)?t:{},i={};for(let[t,a]of Object.entries(e))i[t]=n(a,r[t]);return i}return e},r=n(t,e);return j(r)?r:{}},re=(e,t)=>{if(!j(e))return e;let n={};for(let[r,i]of Object.entries(e)){if(!j(i)||!j(i.config)){n[r]=i;continue}let e=new WeakSet,a=(n,i)=>{if(typeof n==`function`){let e=n;return function(...n){let a=t(),o=j(a)?a[r]:void 0,s=M(j(o)?o.config:void 0,i);return Reflect.apply(typeof s==`function`?s:e,this,n)}}if(Array.isArray(n))return e.has(n)?n:(e.add(n),n.map((e,t)=>a(e,[...i,t])));if(j(n)){if(e.has(n))return n;e.add(n);let t={};for(let[e,r]of Object.entries(n))t[e]=a(r,[...i,e]);return t}return n};n[r]=_(_({},i),{},{config:a(i.config,[])})}return n},ie=e=>`[Blok] \`data\` is ignored while collaboration is on: the document lives on the sync service and is shared with everyone editing it, so replacing it from this editor would overwrite their work. To replace the whole document, call POST /sync/${e==null?`{doc}`:e}/reset on your server — it reloads the document from your own document endpoint and every open editor picks it up. To change part of it, use the blocks API (insert/update/delete).`,N=e=>{let t=typeof e==`function`?e:e==null?void 0:e.class;return typeof t==`function`&&t.__isBlokReactBlock===!0},P=e=>{let t=typeof e==`function`?e:e==null?void 0:e.class;return typeof t==`function`&&t.__isBlokReactInlineTool===!0},ae=(e,t)=>{if(typeof e!=`object`||!e)return e;let n={};for(let[i,a]of Object.entries(e)){var r;if(!N(a)&&!P(a)){n[i]=a;continue}let e=typeof a==`function`?{class:a}:_({},a);e.config=_(_({},(r=e.config)==null?{}:r),{},{[S]:t,[C]:i});let o=e.class.__buildPortalToolbox,s=typeof o==`function`&&e.toolbox===void 0?o(t,i):void 0;s!==void 0&&(e.toolbox=s),n[i]=e}return n};function F(r,i){var a,o;let s=x((0,e.useContext)(v),r),[c,u]=(0,e.useState)(null),f=(0,e.useRef)(s);f.current=s;let p=(0,e.useRef)({editor:null,holder:null,destroyTimeout:null,isDestroyed:!1,isEditorReady:!1,depsToken:null}),m=(0,e.useMemo)(()=>({}),i==null?[]:i),h=(0,e.useRef)(s.data),g=(0,e.useRef)((0,n.createEmittedEchoWindow)()),y=(0,e.useRef)(null),b=(0,e.useRef)(s.data),S=(0,e.useRef)(s.collaboration),C=(0,e.useRef)(Promise.resolve()),T=(0,e.useRef)(!1),E=(0,e.useRef)(void 0),O=(0,e.useRef)(null),k=(0,e.useRef)(void 0),j=(0,e.useRef)(new Map),M=(0,e.useRef)(new Map),P=(0,e.useRef)(null),F=(0,e.useRef)({onChange:!1,onSave:!1,onEnter:!1,onSubmit:!1,onBeforeRender:!1,onAfterRender:!1});(0,e.useEffect)(()=>{var e;if(typeof window>`u`)return;let n=p.current;if(n.destroyTimeout!==null&&(clearTimeout(n.destroyTimeout),n.destroyTimeout=null),n.editor!==null&&!n.isDestroyed&&n.depsToken===m)return n.isEditorReady&&u(n.editor),()=>{I(n,u)};if(n.editor!==null&&!n.isDestroyed){d(n.editor),D(n.editor),A(n.editor);try{n.editor.destroy()}catch(e){}n.editor=null,n.holder=null,n.isDestroyed=!0,n.isEditorReady=!1,u(null)}let r=document.createElement(`div`);n.holder=r,n.isDestroyed=!1,n.isEditorReady=!1,n.depsToken=m;let i=f.current,a=w(),o=i.tools===void 0?void 0:re(i.tools,()=>f.current.tools),s=o===void 0?void 0:ae(o,a);O.current=a,k.current=o,j.current=new Map,M.current=new Map(Object.entries((e=i.tools)==null?{}:e).map(([e,t])=>[e,typeof t==`object`&&t?t.toolbox:void 0]));let c={onChange:(...e)=>{var t,n;(t=(n=f.current).onChange)==null||t.call(n,...e)},onSave:(...e)=>{var t,n;h.current=e[0],g.current.record(e[0]),(t=(n=f.current).onSave)==null||t.call(n,...e)},onEnter:(...e)=>{var t,n;return(t=(n=f.current).onEnter)==null?void 0:t.call(n,...e)},onSubmit:(...e)=>{var t,n;(t=(n=f.current).onSubmit)==null||t.call(n,...e)},onBeforeRender:(...e)=>{var t,n,r;return(t=(n=(r=f.current).onBeforeRender)==null?void 0:n.call(r,...e))==null?e[0]:t},onAfterRender:(...e)=>{var t,n;(t=(n=f.current).onAfterRender)==null||t.call(n,...e)}};P.current=c;let v={onChange:i.onChange!==void 0,onSave:i.onSave!==void 0,onEnter:i.onEnter!==void 0,onSubmit:i.onSubmit!==void 0,onBeforeRender:i.onBeforeRender!==void 0,onAfterRender:i.onAfterRender!==void 0};F.current=v;let y=_(_(_(_(_(_(_(_({},i),s===void 0?{}:{tools:s}),{},{holder:r,onReady:(...e)=>{var t,n;(t=(n=f.current).onReady)==null||t.call(n,...e)}},v.onChange?{onChange:c.onChange}:{}),v.onSave?{onSave:c.onSave}:{}),v.onEnter?{onEnter:c.onEnter}:{}),v.onSubmit?{onSubmit:c.onSubmit}:{}),v.onBeforeRender?{onBeforeRender:c.onBeforeRender}:{}),v.onAfterRender?{onAfterRender:c.onAfterRender}:{}),x=new t.Blok(y);return n.editor=x,b.current=i.data,S.current=i.collaboration,l(x,r),ee(x,a),te(x,{markRendered:e=>{g.current.clear(),h.current=e,E.current=void 0}}),x.isReady.then(()=>{n.editor===x&&!n.isDestroyed&&(n.isEditorReady=!0,u(x))}).catch(()=>{if(n.editor===x&&!n.isDestroyed){d(x),D(x),A(x);try{x.destroy()}catch(e){}n.editor=null,n.holder=null,n.isDestroyed=!0,n.isEditorReady=!1,u(null)}}),()=>{I(n,u)}},[m]),(0,e.useEffect)(()=>{let e=O.current,t=p.current;if(e===null||t.editor===null||t.isDestroyed)return;let r=f.current.tools;if(typeof r!=`object`||!r)return;let i=k.current;for(let[t,o]of Object.entries(r)){var a;if(!N(o))continue;let r=typeof o==`function`||(a=o.config)==null?{}:a,s=i==null?void 0:i[t],c=ne(typeof s==`object`&&s?s.config:void 0,r),l=j.current.get(t);if(l!==void 0&&(0,n.deepEqual)(c,l))continue;let u=Object.freeze(c);j.current.set(t,u),e.setToolConfig(t,u)}}),(0,e.useEffect)(()=>{let e=p.current;if(e.editor===null||e.isDestroyed||!e.isEditorReady)return;let t=f.current.tools;if(!(typeof t!=`object`||!t))for(let[i,a]of Object.entries(t)){var r;if(!M.current.has(i))continue;let t=typeof a==`object`&&a?a.toolbox:void 0,o=M.current.get(i);(0,n.deepEqual)(t,o)||(M.current.set(i,t),(r=e.editor.tools)==null||r.update(i,{toolbox:t}))}}),(0,e.useEffect)(()=>{let e=p.current,t=P.current;if(e.editor===null||e.isDestroyed||!e.isEditorReady||t===null)return;let n=f.current,r=F.current,i={},a={value:!1},o=(e,i)=>{let o=n[e]!==void 0;o!==r[e]&&(r[e]=o,a.value=!0,i(o?t[e]:void 0))};o(`onChange`,e=>{i.onChange=e}),o(`onSave`,e=>{i.onSave=e}),o(`onEnter`,e=>{i.onEnter=e}),o(`onSubmit`,e=>{i.onSubmit=e}),o(`onBeforeRender`,e=>{i.onBeforeRender=e}),o(`onAfterRender`,e=>{i.onAfterRender=e}),a.value&&e.editor.handlers.set(i)});let L=typeof s.readOnly==`object`&&s.readOnly!==null,{enabled:R,hideControls:z}=(0,n.normalizeReadOnlyConfig)(s.readOnly);(0,e.useEffect)(()=>{c!==null&&(L?c.readOnly.set(R,{hideControls:z}):c.readOnly.set(R))},[c,R,z,L]);let{hideToolbar:B}=s;(0,e.useEffect)(()=>{c!==null&&B!==void 0&&c.toolbar.setHidden(B)},[c,B]);let{toolbarPosition:V}=s;(0,e.useEffect)(()=>{c!==null&&V!==void 0&&c.toolbar.setPosition(V)},[c,V]);let{inlineToolbar:H}=s,U=H===void 0?void 0:JSON.stringify(H);(0,e.useEffect)(()=>{c!==null&&H!==void 0&&c.tools.setInlineToolbar(H)},[c,U]);let{autofocus:W}=s;(0,e.useEffect)(()=>{c===null||!W||c.focus()},[c,W]);let{theme:G}=s;(0,e.useEffect)(()=>{c!==null&&G!==void 0&&c.theme.set(G)},[c,G]);let{width:K}=s;(0,e.useEffect)(()=>{c!==null&&K!==void 0&&c.width.set(K)},[c,K]);let q=(a=s.style)==null?void 0:a.tokens,J=(0,e.useRef)((o=s.style)==null?void 0:o.tokens);(0,e.useEffect)(()=>{c!==null&&q!==void 0&&((0,n.deepEqual)(q,J.current)||(J.current=q,c.tokens.set(q)))},[c,q]);let{i18n:Y}=s,X=(0,e.useRef)(s.i18n);(0,e.useEffect)(()=>{if(c===null||Y===void 0||(0,n.deepEqual)(Y,X.current))return;X.current=Y;let{locale:e,messages:t,direction:r}=Y;c.i18n.update(_(_(_({},e===void 0?{}:{locale:e}),t===void 0?{}:{messages:t}),r===void 0?{}:{direction:r}))},[c,Y]);let{placeholder:Z}=s;(0,e.useEffect)(()=>{c!==null&&Z!==void 0&&c.placeholder.set(Z)},[c,Z]);let{data:Q}=s;return(0,e.useEffect)(()=>{if(c===null||Q===void 0)return;let e=p.current;if(e.editor!==c||e.isDestroyed)return;if(y.current!==c&&(y.current=c,E.current=void 0,g.current.clear(),(0,n.deepEqual)(Q,b.current))){h.current=Q;return}let t=h.current,r=E.current;if(t!==void 0&&(0,n.equalsOutputData)(Q,t)||r!==void 0&&(0,n.equalsOutputData)(Q,r)||g.current.matches(Q))return;let i=S.current;if(i!==void 0){T.current||(T.current=!0,console.warn(ie(i.doc)));return}g.current.clear(),E.current=Q,C.current=C.current.catch(()=>void 0).then(()=>c.render((0,n.toRenderableData)(Q))).then(()=>{h.current=Q},()=>{}).then(()=>{E.current===Q&&(E.current=void 0)})},[c,Q]),c}function I(e,t){e.destroyTimeout=setTimeout(()=>{if(e.editor!==null){d(e.editor),D(e.editor),A(e.editor);try{e.editor.destroy()}catch(e){}e.editor=null,e.holder=null,e.isDestroyed=!0,e.isEditorReady=!1,e.destroyTimeout=null,t(null)}},0)}var L=class extends e.Component{constructor(...e){super(...e),this.state={failed:!1}}static getDerivedStateFromError(){return{failed:!0}}componentDidCatch(){}render(){return this.state.failed?null:this.props.children}};function R({registry:t}){let n=(0,e.useSyncExternalStore)(t.subscribe,t.getSnapshot,t.getSnapshot);return(0,r.jsx)(r.Fragment,{children:Array.from(n.entries()).map(([e,t])=>{let n=t.component;return(0,a.createPortal)((0,r.jsx)(L,{children:(0,r.jsx)(n,_({},t.props))}),t.hostEl,e)})})}var z=(0,e.createContext)(null);function B(){return(0,e.useContext)(z)}function V(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.includes(r))continue;n[r]=e[r]}return n}function H(e,t){if(e==null)return{};var n,r,i=V(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.includes(n)||{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var U=[`editor`];function W(e){var t,n;if(typeof window>`u`)return;let r=window.location.hash.slice(1);r!==``&&((t=(n=e.blocks).scrollToBlock)==null||t.call(n,G(r)))}function G(e){try{return decodeURIComponent(e)}catch(t){return e}}var K=(0,e.forwardRef)(function(t,n){let{editor:i}=t,a=H(t,U),o=(0,e.useRef)(null),s=e=>{if(o.current=e,typeof n==`function`)n(e);else if(n!=null){let t=n;t.current=e}};(0,e.useEffect)(()=>{if(i===null||o.current===null)return;let e=u(i);if(e!==void 0)return o.current.appendChild(e),W(i),()=>{e.remove()}},[i]);let c=i===null?void 0:E(i);return(0,r.jsx)(`div`,_(_({ref:s},a),{},{children:c===void 0?null:(0,r.jsx)(z.Provider,{value:i,children:(0,r.jsx)(R,{registry:c})})}))}),q=`autofocus.defaultBlock.dataModel.placeholder.sanitizer.hideToolbar.toolbarPosition.maxHistoryLength.historyDebounceTime.newGroupDelay.globalUndoRedo.tools.data.minHeight.logLevel.readOnly.i18n.link.linkPaste.onBeforePaste.onReady.onChange.onSave.onError.onEnter.onSubmit.onBeforeRender.onAfterRender.inlineToolbar.inlineEmoji.tunes.style.theme.onThemeChange.scrollToBlock.user.resolveUser.notifierPosition.notifier.width.migrations.uploader.server.ticket.persistence.collaboration.captureClicksBelowEditor`.split(`.`),J=[`deps`,`onReady`,`locale`,`onBlocksRendered`,`onBlockRendered`],Y=new Set(q),X=(0,e.forwardRef)(function(t,n){let{deps:i,onReady:a,locale:o,onBlocksRendered:s,onBlockRendered:c}=t,l=H(t,J),u={},d={};for(let e of Object.keys(l)){let t=l[e];Y.has(e)?u[e]=t:d[e]=t}if(o!==void 0){let e=u.i18n;u.i18n=_(_({},e),{},{locale:o})}let f=F(u,i);(0,e.useImperativeHandle)(n,()=>f,[f]);let p=(0,e.useRef)(a);p.current=a;let m=(0,e.useRef)(null);(0,e.useEffect)(()=>{if(f!==null&&m.current!==f){var e;m.current=f,(e=p.current)==null||e.call(p,f)}},[f]);let h=(0,e.useRef)(s);h.current=s;let g=(0,e.useRef)(c);g.current=c;let v=!!s,y=!!c;return(0,e.useEffect)(()=>{if(f===null)return;let e=[];if(v){let t=e=>{var t;return(t=h.current)==null?void 0:t.call(h,e)};f.on(`blocks:rendered`,t),e.push([`blocks:rendered`,t])}if(y){let t=e=>{var t;return(t=g.current)==null?void 0:t.call(g,e)};f.on(`block:rendered`,t),e.push([`block:rendered`,t])}return()=>{for(let[t,n]of e)f.off(t,n)}},[f,v,y]),(0,r.jsx)(K,_({editor:f},d))});function Z(){let t=(0,e.useRef)(null);return(0,e.useMemo)(()=>({ref:e=>{t.current=e},get current(){return t.current},get isReady(){return t.current!==null},focus:e=>{var n,r;return(n=(r=t.current)==null?void 0:r.focus(e))!=null&&n},clear:()=>{let e=t.current;return e===null?Promise.resolve():e.clear().then(()=>{var t;(t=k(e))==null||t.markRendered(n.EMPTY_OUTPUT_DATA)})},save:()=>t.current===null?Promise.resolve(null):t.current.save(),render:e=>{let n=t.current;return n===null?Promise.resolve():n.render(e).then(()=>{var t;(t=k(n))==null||t.markRendered(e)})},setReadOnly:e=>{let n=t.current;return n===null?Promise.resolve(!1):n.readOnly.set(e==null?!n.readOnly.isEnabled:e)}}),[])}var Q=`block changed`;function oe(t,r={}){var i;let a=(i=r.within)==null?null:i,o=(0,e.useRef)(0),s=(0,e.useRef)(t);s.current!==t&&(s.current=t,o.current=0);let c=(0,e.useCallback)(e=>{if(t===null)return()=>void 0;let r=r=>{a!==null&&!(0,n.changeTouchesSubtree)(t,r,a)||(o.current+=1,e())};return t.on(Q,r),()=>t.off(Q,r)},[t,a]),l=(0,e.useCallback)(()=>o.current,[]);return(0,e.useSyncExternalStore)(c,l,l),(0,e.useMemo)(()=>t===null?n.EMPTY_API:(0,n.createBlocksApiForEditor)(t),[t])}function se(n={}){let{within:r,settleOn:i}=n,[a,o]=(0,e.useState)(!1);return(0,e.useEffect)(()=>{let e=()=>{var e;let n=r instanceof Element?r:(e=r==null?void 0:r.current)==null?null:e;o(r!==void 0&&n===null?!1:t.Blok.readyState({within:n,settleOn:i}).ready)};return e(),t.Blok.subscribeReady(e)},[r,i]),a}var ce=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`link`,`meta`,`param`,`source`,`track`,`wbr`]),le=new Set([`disabled`,`open`,`controls`,`autoplay`,`loop`,`muted`,`required`,`multiple`,`playsinline`,`reversed`,`hidden`,`default`,`novalidate`,`allowfullscreen`,`itemscope`]),ue={class:`className`,for:`htmlFor`,colspan:`colSpan`,rowspan:`rowSpan`,tabindex:`tabIndex`,readonly:`readOnly`,srcset:`srcSet`,srclang:`srcLang`,datetime:`dateTime`,autoplay:`autoPlay`,playsinline:`playsInline`,novalidate:`noValidate`,allowfullscreen:`allowFullScreen`,crossorigin:`crossOrigin`,referrerpolicy:`referrerPolicy`,contenteditable:`contentEditable`,spellcheck:`spellCheck`,maxlength:`maxLength`,minlength:`minLength`,usemap:`useMap`,itemscope:`itemScope`},de=e=>{let t={};for(let n of e.split(`;`)){let e=n.indexOf(`:`);if(e===-1)continue;let r=n.slice(0,e).trim(),i=n.slice(e+1).trim();if(r===``||i===``)continue;let a=r.startsWith(`--`)?r:r.toLowerCase().replace(/-([a-z])/g,(e,t)=>t.toUpperCase());t[a]=i}return t},fe=(e,t)=>{let n={key:t};for(let[t,a]of Object.entries(e)){var r;if(t===`style`){n.style=de(a);continue}if(t===`checked`){n.defaultChecked=!0;continue}if(t===`value`){n.defaultValue=a;continue}if(le.has(t)){var i;n[(i=ue[t])==null?t:i]=!0;continue}n[(r=ue[t])==null?t:r]=a}return n},pe=t=>t.map((t,n)=>{if(`text`in t)return t.text;let r=fe(t.attrs,n);return ce.has(t.tag)||t.children.length===0?(0,e.createElement)(t.tag,r):(0,e.createElement)(t.tag,r,...pe(t.children))}),me=(t,n)=>{let r=n==null?void 0:n.schema,i=n==null?void 0:n.renderers,a=n==null?void 0:n.onUnknownBlock,s=n==null?void 0:n.toolAttributes,c=n==null?void 0:n.blockIds,l=n==null?void 0:n.transformUrl,u=n==null?void 0:n.inlineRenderers,d=n==null?void 0:n.classes;return(0,e.useMemo)(()=>(0,e.createElement)(e.Fragment,null,...pe((0,o.blocksToViewNodes)(t,{schema:r,renderers:i,onUnknownBlock:a,toolAttributes:s,blockIds:c,transformUrl:l,inlineRenderers:u,classes:d}))),[t,r,i,a,s,c,l,u,d])},he=[`data`,`schema`,`renderers`,`onUnknownBlock`,`toolAttributes`,`blockIds`,`transformUrl`,`inlineRenderers`,`classes`],ge=e=>{let{data:t,schema:n,renderers:i,onUnknownBlock:a,toolAttributes:o,blockIds:s,transformUrl:c,inlineRenderers:l,classes:u}=e,d=H(e,he),f=me(t,{schema:n,renderers:i,onUnknownBlock:a,toolAttributes:o,blockIds:s,transformUrl:c,inlineRenderers:l,classes:u==null||u});return(0,r.jsx)(`div`,_(_({"data-blok-interface":`view`},d),{},{children:f}))},_e=[`icon`,`title`],ve=[`commit`,`readOnly`],ye=[S,C],be=(e,t,r)=>{var i;e==null||(i=e.events)==null||i.emit(n.BlockChildrenMounted,{blockId:t,childIds:r.map(e=>e.id)})},xe=new Set([void 0,`user`,`api`,`convert`]),Se=[`toolbox`,`isReadOnlySupported`,`__isBlokReactBlock`,`__buildPortalToolbox`];function Ce(t){var i,o;let c=e=>{if(typeof document>`u`)return null;let t=document.createElement(`div`),n=(0,s.createRoot)(t);(0,a.flushSync)(()=>{n.render(e)});let r=t.innerHTML;return n.unmount(),r===``?null:r},l=t=>{let{icon:n,title:r}=t,i=_({},H(t,_e));if(typeof r==`string`&&(i.title=r),!(0,e.isValidElement)(n))return n!==void 0&&(i.icon=n),{entry:i,deferred:!1};let a=c(n);return a===null?(i.icon=n,{entry:i,deferred:!0}):(i.icon=a,{entry:i,deferred:!1})},u=()=>{if(t.toolbox===void 0)return{value:void 0,complete:!0};let e=(Array.isArray(t.toolbox)?t.toolbox:[t.toolbox]).map(e=>l(e)),n=e.every(e=>!e.deferred),r=e.map(e=>e.entry);return{value:Array.isArray(t.toolbox)?r:r[0],complete:n}},d=(n,i)=>{if(t.toolbox===void 0)return;let a=Array.isArray(t.toolbox)?t.toolbox:[t.toolbox];if(!a.some(t=>(0,e.isValidElement)(t.title)))return;let o=a.map((t,a)=>{let{entry:o,deferred:s}=l(t);if(s&&delete o.icon,!(0,e.isValidElement)(t.title))return o;let c=document.createElement(`span`);c.setAttribute(`data-blok-mutation-free`,`true`);let u=t.title,d=()=>(0,r.jsx)(r.Fragment,{children:u});return d.displayName=`BlokToolboxTitle(${i})`,n.register(`__blok-toolbox-title__:${i}:${a}`,{hostEl:c,component:d,props:{},toolName:i}),_(_({},o),{},{titleEl:c})});return Array.isArray(t.toolbox)?o:o[0]},f={resolved:!1,value:void 0},p=()=>{if(f.resolved)return f.value;let{value:e,complete:t}=u();return t&&(f.value=e,f.resolved=!0),e},m=t.viewComponent===void 0?t.component:e=>{let n=t.viewComponent;if(e.readOnly&&n!==void 0){let{commit:t,readOnly:i}=e,a=H(e,ve);return(0,r.jsx)(n,_({},a))}let i=t.component;return(0,r.jsx)(i,_({},e))},h=(i=class{static get toolbox(){return p()}static __buildPortalToolbox(e,t){return d(e,t)}static get isReadOnlySupported(){return!0}constructor(i){var a,o,s;this.mountSignalled=!1,this.hostEl=null,this.pendingDispatch=!1,this.anchorEl=null,this.toolbarAnchorRef=e=>{this.anchorEl=e},this.commit=e=>{var r;let i=(0,n.fillDefaults)(t.propSchema,_(_({},this.mirror),e));(0,n.deepEqual)(i,this.mirror)||(this.mirror=i,this.lastRendered=i,(r=this.registry)==null||r.setProps(this.blockApi.id,{data:i}),this.flushDispatch())},this.blockApi=i.block;let c=(a=i.config)==null?{}:a;this.registry=c[S];let l=c[C];this.toolName=typeof l==`string`?l:void 0;let u={};for(let[e,t]of Object.entries(c))ye.includes(e)||(u[e]=t);this.toolConfig=Object.freeze(u),this.api=i.api;let d=i.api;this.pointerDrag=()=>{var e;return(d==null||(e=d.blocks)==null?void 0:e.isPointerDragActive)===!0},this.mirror=(0,n.fillDefaults)(t.propSchema,(o=i.data)==null?{}:o),this.lastRendered=this.mirror,this.readOnly=i.readOnly,this.origin=(s=i.origin)==null?`api`:s;let f=this.blockApi,p=this.api;this.childrenComponent=function({childAttributes:t,childContentAttributes:i}){let a=(0,e.useRef)(null),o=(0,e.useRef)((0,n.createChildDecorationLedger)());return(0,e.useEffect)(()=>{if(a.current===null)return;let e=f.getChildren();(0,n.mountChildBlocks)(a.current,e),(0,n.applyChildDecoration)(o.current,e,{childAttributes:t,childContentAttributes:i}),be(p,f.id,e)}),(0,r.jsx)(`div`,{ref:a,[n.DATA_ATTR.nestedBlocks]:``})},this.entryComponent=this.buildEntryComponent()}buildEntryComponent(){let n=t.onMounted,i=t.onCreated;if(n===void 0&&i===void 0)return m;let a=m,o=()=>{if(this.mountSignalled)return;this.mountSignalled=!0;let e={origin:this.origin,api:this.api};n==null||n(this.blockApi,e),xe.has(this.origin)&&(i==null||i(this.blockApi,e))},s=t=>((0,e.useEffect)(o,[]),(0,r.jsx)(a,_({},t)));return s.displayName=`BlokBlockMount(${t.type})`,s}render(){var e;let t=document.createElement(`div`);return t.setAttribute(`data-blok-mutation-free`,`true`),this.hostEl=t,(e=this.registry)==null||e.register(this.blockApi.id,{hostEl:t,component:this.entryComponent,props:this.buildProps(),toolName:this.toolName}),t}rendered(){var e;(e=t.onRendered)==null||e.call(t,this.blockApi)}save(){return this.mirror}async setData(e){var r=this;let i=(0,n.fillDefaults)(t.propSchema,e==null?{}:e);return(0,n.deepEqual)(i,r.lastRendered)?!0:(r.mirror=i,r.lastRendered=i,r.pushProps({data:i}),!0)}setReadOnly(e){this.readOnly=e,this.pushProps({readOnly:e})}getToolbarAnchorElement(){var e;let n=this.anchorEl;if(n!==null&&n.isConnected)return n;let r=this.hostEl;if(r!==null&&t.getToolbarAnchorElement!==void 0)return(e=t.getToolbarAnchorElement(r,this.blockApi))==null?void 0:e}moved(){var e;(e=t.onMoved)==null||e.call(t,this.blockApi)}removed(){var e,n,r;(e=this.registry)==null||e.unregister(this.blockApi.id,(n=this.hostEl)==null?void 0:n),(r=t.onRemoved)==null||r.call(t,this.blockApi)}destroy(){var e,t;(e=this.registry)==null||e.unregister(this.blockApi.id,(t=this.hostEl)==null?void 0:t)}buildProps(){return{data:this.mirror,commit:this.commit,block:this.blockApi,api:this.api,readOnly:this.readOnly,config:this.toolConfig,BlockChildren:this.childrenComponent,toolbarAnchorRef:this.toolbarAnchorRef}}pushProps(e){let t=this.registry;t!==void 0&&(0,a.flushSync)(()=>{t.setProps(this.blockApi.id,e)})}flushDispatch(){if(!this.pointerDrag()){this.pendingDispatch=!1,this.blockApi.dispatchChange();return}if(this.pendingDispatch)return;this.pendingDispatch=!0;let e=()=>{if(this.pointerDrag()){requestAnimationFrame(e);return}this.pendingDispatch=!1,this.blockApi.dispatchChange()};requestAnimationFrame(e)}},i.__isBlokReactBlock=!0,i);for(let[e,n]of Object.entries((o=t.statics)==null?{}:o))Se.includes(e)||Object.defineProperty(h,e,{value:n,writable:!0,enumerable:!0,configurable:!0});return h}var we=[S,C],Te=e=>`__blok-inline-tool__:${e}:${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,$=(0,e.createContext)(null);function Ee(){let t=(0,e.useContext)($);if(t===null)throw Error(`useInlineTool() must be called from a component rendered by createReactInlineTool`);return t}function De(t){var i;return i=class{static get type(){return t.type}static get title(){return t.title}static get titleKey(){var e;return(e=t.titleKey)==null?t.type:e}static get shortcut(){return t.shortcut}static get mark(){return t.mark}static get sanitize(){return t.sanitize===void 0?t.mark===void 0?void 0:(0,n.markSanitizerConfig)(t.mark):t.sanitize}static get isReadOnlySupported(){var e;return(e=t.isReadOnlySupported)!=null&&e}constructor(e){var n;this.active=!1,this.registered=!1;let r=(n=e==null?void 0:e.config)==null?{}:n;this.api=e==null?void 0:e.api,this.registry=r[S];let i=r[C];this.toolName=typeof i==`string`?i:t.type,this.portalKey=Te(this.toolName);let a={};for(let[e,t]of Object.entries(r))we.includes(e)||(a[e]=t);this.toolConfig=Object.freeze(a),this.portalComponent=this.createPortalComponent()}render(){let e=document.createElement(`div`);return e.setAttribute(`data-blok-mutation-free`,`true`),this.registry!==void 0&&(this.registry.register(this.portalKey,{hostEl:e,component:this.portalComponent,props:{active:this.active,config:this.toolConfig},toolName:this.toolName}),this.registered=!0),{name:this.toolName,title:t.title,icon:e,onActivate:()=>{this.activate()},isActive:()=>this.refreshActiveState()}}destroy(){var e;this.registered&&(this.registered=!1,(e=this.registry)==null||e.unregister(this.portalKey))}activate(){var e;if(typeof t.surround==`function`){let e=window.getSelection();if(!e||e.rangeCount===0)return;t.surround(e.getRangeAt(0),this.api);return}t.mark!==void 0&&((e=this.api)==null?void 0:e.marks)!==void 0&&this.api.marks.toggle(t.mark)}refreshActiveState(){let e=this.computeActiveState();if(e!==this.active&&(this.active=e,this.registered)){var t;(t=this.registry)==null||t.setProps(this.portalKey,{active:e})}return e}computeActiveState(){var e;return typeof t.checkState==`function`?!!t.checkState(window.getSelection(),this.api):t.mark!==void 0&&((e=this.api)==null?void 0:e.marks)!==void 0&&this.api.marks.has(t.mark)}createPortalComponent(){let n=this.api,i=t.mark,a=t.component,o=i!==void 0&&(n==null?void 0:n.marks)!==void 0?{has:()=>n.marks.has(i),toggle:e=>n.marks.toggle(i,e),apply:e=>n.marks.apply(i,e),remove:()=>n.marks.remove(i),read:()=>n.marks.read(i)}:null,s=t=>{let i=(0,e.useMemo)(()=>({active:t.active,config:t.config,api:n,mark:o}),[t.active,t.config]);return(0,r.jsx)($.Provider,{value:i,children:(0,r.jsx)(a,{active:t.active,config:t.config})})};return s.displayName=`BlokInlineTool(${this.toolName})`,s}},i.__isBlokReactInlineTool=!0,i.isInline=!0,i}exports.BLOK_PORTAL_REGISTRY_CONFIG_KEY=S,exports.BLOK_TOOL_NAME_CONFIG_KEY=C,exports.BlockPortalHost=R,exports.BlokContent=K,exports.BlokEditor=X,exports.BlokProvider=y,exports.BlokView=ge,exports.createBlockPortalRegistry=w,exports.createReactBlock=Ce,exports.createReactInlineTool=De,Object.defineProperty(exports,"getDirection",{enumerable:!0,get:function(){return i.getDirection}}),Object.defineProperty(exports,"normalizeLocale",{enumerable:!0,get:function(){return i.normalizeLocale}}),exports.useBlocks=oe,exports.useBlok=F,exports.useBlokDefaults=b,exports.useBlokHandle=Z,exports.useBlokInstance=B,exports.useBlokReady=se,exports.useBlokView=me,exports.useInlineTool=Ee;
package/dist/index.mjs CHANGED
@@ -11,44 +11,44 @@ var I = /* @__PURE__ */ new WeakMap();
11
11
  function ie(e, t) {
12
12
  I.set(e, t);
13
13
  }
14
- function L(e) {
14
+ function ae(e) {
15
15
  return I.get(e);
16
16
  }
17
- function R(e) {
17
+ function L(e) {
18
18
  I.delete(e);
19
19
  }
20
20
  //#endregion
21
- //#region \0@oxc-project+runtime@0.139.0/helpers/esm/typeof.js
22
- function z(e) {
21
+ //#region \0@oxc-project+runtime@0.147.0/helpers/esm/typeof.js
22
+ function R(e) {
23
23
  "@babel/helpers - typeof";
24
- return z = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) {
24
+ return R = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) {
25
25
  return typeof e;
26
26
  } : function(e) {
27
27
  return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
28
- }, z(e);
28
+ }, R(e);
29
29
  }
30
30
  //#endregion
31
- //#region \0@oxc-project+runtime@0.139.0/helpers/esm/toPrimitive.js
32
- function B(e, t) {
33
- if (z(e) != "object" || !e) return e;
31
+ //#region \0@oxc-project+runtime@0.147.0/helpers/esm/toPrimitive.js
32
+ function z(e, t) {
33
+ if (R(e) != "object" || !e) return e;
34
34
  var n = e[Symbol.toPrimitive];
35
35
  if (n !== void 0) {
36
36
  var r = n.call(e, t || "default");
37
- if (z(r) != "object") return r;
37
+ if (R(r) != "object") return r;
38
38
  throw TypeError("@@toPrimitive must return a primitive value.");
39
39
  }
40
40
  return (t === "string" ? String : Number)(e);
41
41
  }
42
42
  //#endregion
43
- //#region \0@oxc-project+runtime@0.139.0/helpers/esm/toPropertyKey.js
44
- function V(e) {
45
- var t = B(e, "string");
46
- return z(t) == "symbol" ? t : t + "";
43
+ //#region \0@oxc-project+runtime@0.147.0/helpers/esm/toPropertyKey.js
44
+ function B(e) {
45
+ var t = z(e, "string");
46
+ return R(t) == "symbol" ? t : t + "";
47
47
  }
48
48
  //#endregion
49
- //#region \0@oxc-project+runtime@0.139.0/helpers/esm/defineProperty.js
50
- function H(e, t, n) {
51
- return (t = V(t)) in e ? Object.defineProperty(e, t, {
49
+ //#region \0@oxc-project+runtime@0.147.0/helpers/esm/defineProperty.js
50
+ function V(e, t, n) {
51
+ return (t = B(t)) in e ? Object.defineProperty(e, t, {
52
52
  value: n,
53
53
  enumerable: !0,
54
54
  configurable: !0,
@@ -56,8 +56,8 @@ function H(e, t, n) {
56
56
  }) : e[t] = n, e;
57
57
  }
58
58
  //#endregion
59
- //#region \0@oxc-project+runtime@0.139.0/helpers/esm/objectSpread2.js
60
- function U(e, t) {
59
+ //#region \0@oxc-project+runtime@0.147.0/helpers/esm/objectSpread2.js
60
+ function H(e, t) {
61
61
  var n = Object.keys(e);
62
62
  if (Object.getOwnPropertySymbols) {
63
63
  var r = Object.getOwnPropertySymbols(e);
@@ -67,12 +67,12 @@ function U(e, t) {
67
67
  }
68
68
  return n;
69
69
  }
70
- function W(e) {
70
+ function U(e) {
71
71
  for (var t = 1; t < arguments.length; t++) {
72
72
  var n = arguments[t] == null ? {} : arguments[t];
73
- t % 2 ? U(Object(n), !0).forEach(function(t) {
74
- H(e, t, n[t]);
75
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : U(Object(n)).forEach(function(t) {
73
+ t % 2 ? H(Object(n), !0).forEach(function(t) {
74
+ V(e, t, n[t]);
75
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : H(Object(n)).forEach(function(t) {
76
76
  Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));
77
77
  });
78
78
  }
@@ -80,24 +80,24 @@ function W(e) {
80
80
  }
81
81
  //#endregion
82
82
  //#region src/provide-blok.tsx
83
- var G = n({});
84
- function K({ defaults: e, children: t }) {
85
- return /* @__PURE__ */ k(G.Provider, {
83
+ var W = n({});
84
+ function G({ defaults: e, children: t }) {
85
+ return /* @__PURE__ */ k(W.Provider, {
86
86
  value: e,
87
87
  children: t
88
88
  });
89
89
  }
90
- function ae() {
91
- return s(G);
90
+ function K() {
91
+ return s(W);
92
92
  }
93
93
  function oe(e, t) {
94
94
  if (Object.keys(e).length === 0) return t;
95
- let n = W({}, e);
95
+ let n = U({}, e);
96
96
  for (let e of Object.keys(t)) {
97
97
  let r = t[e];
98
98
  r !== void 0 && (n[e] = r);
99
99
  }
100
- return (e.tools !== void 0 || t.tools !== void 0) && (n.tools = W(W({}, e.tools), t.tools)), n;
100
+ return (e.tools !== void 0 || t.tools !== void 0) && (n.tools = U(U({}, e.tools), t.tools)), n;
101
101
  }
102
102
  //#endregion
103
103
  //#region src/block-portal-registry.ts
@@ -108,7 +108,7 @@ var q = "__blokPortalRegistry", J = "__blokToolName", se = () => {
108
108
  return {
109
109
  register(t, i) {
110
110
  let a = new Map(e.snapshot), o = i.toolName === void 0 ? void 0 : n.get(i.toolName);
111
- a.set(t, o === void 0 ? i : W(W({}, i), {}, { props: W(W({}, i.props), {}, { config: o }) })), r(a);
111
+ a.set(t, o === void 0 ? i : U(U({}, i), {}, { props: U(U({}, i.props), {}, { config: o }) })), r(a);
112
112
  },
113
113
  unregister(t, n) {
114
114
  let i = e.snapshot.get(t);
@@ -120,14 +120,14 @@ var q = "__blokPortalRegistry", J = "__blokToolName", se = () => {
120
120
  let i = e.snapshot.get(t);
121
121
  if (i === void 0) return;
122
122
  let a = new Map(e.snapshot);
123
- a.set(t, W(W({}, i), {}, { props: W(W({}, i.props), n) })), r(a);
123
+ a.set(t, U(U({}, i), {}, { props: U(U({}, i.props), n) })), r(a);
124
124
  },
125
125
  setToolConfig(t, i) {
126
126
  n.set(t, i);
127
127
  let a = [...e.snapshot].filter(([, e]) => e.toolName === t);
128
128
  if (a.length === 0) return;
129
129
  let o = new Map(e.snapshot);
130
- for (let [e, t] of a) o.set(e, W(W({}, t), {}, { props: W(W({}, t.props), {}, { config: i }) }));
130
+ for (let [e, t] of a) o.set(e, U(U({}, t), {}, { props: U(U({}, t.props), {}, { config: i }) }));
131
131
  r(o);
132
132
  },
133
133
  subscribe(e) {
@@ -211,26 +211,26 @@ var Q = (e) => {
211
211
  }
212
212
  return n;
213
213
  };
214
- n[r] = W(W({}, i), {}, { config: a(i.config, []) });
214
+ n[r] = U(U({}, i), {}, { config: a(i.config, []) });
215
215
  }
216
216
  return n;
217
- }, ge = (e) => {
217
+ }, ge = (e) => `[Blok] \`data\` is ignored while collaboration is on: the document lives on the sync service and is shared with everyone editing it, so replacing it from this editor would overwrite their work. To replace the whole document, call POST /sync/${e == null ? "{doc}" : e}/reset on your server — it reloads the document from your own document endpoint and every open editor picks it up. To change part of it, use the blocks API (insert/update/delete).`, _e = (e) => {
218
218
  let t = typeof e == "function" ? e : e == null ? void 0 : e.class;
219
219
  return typeof t == "function" && t.__isBlokReactBlock === !0;
220
- }, _e = (e) => {
220
+ }, ve = (e) => {
221
221
  let t = typeof e == "function" ? e : e == null ? void 0 : e.class;
222
222
  return typeof t == "function" && t.__isBlokReactInlineTool === !0;
223
- }, ve = (e, t) => {
223
+ }, ye = (e, t) => {
224
224
  if (typeof e != "object" || !e) return e;
225
225
  let n = {};
226
226
  for (let [i, a] of Object.entries(e)) {
227
227
  var r;
228
- if (!ge(a) && !_e(a)) {
228
+ if (!_e(a) && !ve(a)) {
229
229
  n[i] = a;
230
230
  continue;
231
231
  }
232
- let e = typeof a == "function" ? { class: a } : W({}, a);
233
- e.config = W(W({}, (r = e.config) == null ? {} : r), {}, {
232
+ let e = typeof a == "function" ? { class: a } : U({}, a);
233
+ e.config = U(U({}, (r = e.config) == null ? {} : r), {}, {
234
234
  [q]: t,
235
235
  [J]: i
236
236
  });
@@ -239,9 +239,9 @@ var Q = (e) => {
239
239
  }
240
240
  return n;
241
241
  };
242
- function ye(e, t) {
242
+ function be(e, t) {
243
243
  var n, r;
244
- let i = oe(s(G), e), [a, o] = f(null), l = d(i);
244
+ let i = oe(s(W), e), [a, o] = f(null), l = d(i);
245
245
  l.current = i;
246
246
  let p = d({
247
247
  editor: null,
@@ -250,7 +250,7 @@ function ye(e, t) {
250
250
  isDestroyed: !1,
251
251
  isEditorReady: !1,
252
252
  depsToken: null
253
- }), h = u(() => ({}), t == null ? [] : t), g = d(i.data), _ = d(ee()), v = d(null), y = d(i.data), b = d(Promise.resolve()), x = d(void 0), S = d(null), C = d(void 0), T = d(/* @__PURE__ */ new Map()), E = d(/* @__PURE__ */ new Map()), D = d(null), O = d({
253
+ }), h = u(() => ({}), t == null ? [] : t), g = d(i.data), _ = d(ee()), v = d(null), y = d(i.data), b = d(i.collaboration), x = d(Promise.resolve()), S = d(!1), C = d(void 0), T = d(null), E = d(void 0), D = d(/* @__PURE__ */ new Map()), O = d(/* @__PURE__ */ new Map()), k = d(null), A = d({
254
254
  onChange: !1,
255
255
  onSave: !1,
256
256
  onEnter: !1,
@@ -263,10 +263,10 @@ function ye(e, t) {
263
263
  if (typeof window > "u") return;
264
264
  let t = p.current;
265
265
  if (t.destroyTimeout !== null && (clearTimeout(t.destroyTimeout), t.destroyTimeout = null), t.editor !== null && !t.isDestroyed && t.depsToken === h) return t.isEditorReady && o(t.editor), () => {
266
- be(t, o);
266
+ xe(t, o);
267
267
  };
268
268
  if (t.editor !== null && !t.isDestroyed) {
269
- R(t.editor), X(t.editor), fe(t.editor);
269
+ L(t.editor), X(t.editor), fe(t.editor);
270
270
  try {
271
271
  t.editor.destroy();
272
272
  } catch (e) {}
@@ -274,8 +274,8 @@ function ye(e, t) {
274
274
  }
275
275
  let n = document.createElement("div");
276
276
  t.holder = n, t.isDestroyed = !1, t.isEditorReady = !1, t.depsToken = h;
277
- let r = l.current, i = se(), a = r.tools === void 0 ? void 0 : he(r.tools, () => l.current.tools), s = a === void 0 ? void 0 : ve(a, i);
278
- S.current = i, C.current = a, T.current = /* @__PURE__ */ new Map(), E.current = new Map(Object.entries((e = r.tools) == null ? {} : e).map(([e, t]) => [e, typeof t == "object" && t ? t.toolbox : void 0]));
277
+ let r = l.current, i = se(), a = r.tools === void 0 ? void 0 : he(r.tools, () => l.current.tools), s = a === void 0 ? void 0 : ye(a, i);
278
+ T.current = i, E.current = a, D.current = /* @__PURE__ */ new Map(), O.current = new Map(Object.entries((e = r.tools) == null ? {} : e).map(([e, t]) => [e, typeof t == "object" && t ? t.toolbox : void 0]));
279
279
  let c = {
280
280
  onChange: (...e) => {
281
281
  var t, n;
@@ -302,7 +302,7 @@ function ye(e, t) {
302
302
  (t = (n = l.current).onAfterRender) == null || t.call(n, ...e);
303
303
  }
304
304
  };
305
- D.current = c;
305
+ k.current = c;
306
306
  let u = {
307
307
  onChange: r.onChange !== void 0,
308
308
  onSave: r.onSave !== void 0,
@@ -311,42 +311,42 @@ function ye(e, t) {
311
311
  onBeforeRender: r.onBeforeRender !== void 0,
312
312
  onAfterRender: r.onAfterRender !== void 0
313
313
  };
314
- O.current = u;
315
- let d = new m(W(W(W(W(W(W(W(W({}, r), s === void 0 ? {} : { tools: s }), {}, {
314
+ A.current = u;
315
+ let d = U(U(U(U(U(U(U(U({}, r), s === void 0 ? {} : { tools: s }), {}, {
316
316
  holder: n,
317
317
  onReady: (...e) => {
318
318
  var t, n;
319
319
  (t = (n = l.current).onReady) == null || t.call(n, ...e);
320
320
  }
321
- }, u.onChange ? { onChange: c.onChange } : {}), u.onSave ? { onSave: c.onSave } : {}), u.onEnter ? { onEnter: c.onEnter } : {}), u.onSubmit ? { onSubmit: c.onSubmit } : {}), u.onBeforeRender ? { onBeforeRender: c.onBeforeRender } : {}), u.onAfterRender ? { onAfterRender: c.onAfterRender } : {}));
322
- return t.editor = d, y.current = r.data, ie(d, n), ce(d, i), ue(d, { markRendered: (e) => {
323
- _.current.clear(), g.current = e, x.current = void 0;
324
- } }), d.isReady.then(() => {
325
- t.editor === d && !t.isDestroyed && (t.isEditorReady = !0, o(d));
321
+ }, u.onChange ? { onChange: c.onChange } : {}), u.onSave ? { onSave: c.onSave } : {}), u.onEnter ? { onEnter: c.onEnter } : {}), u.onSubmit ? { onSubmit: c.onSubmit } : {}), u.onBeforeRender ? { onBeforeRender: c.onBeforeRender } : {}), u.onAfterRender ? { onAfterRender: c.onAfterRender } : {}), f = new m(d);
322
+ return t.editor = f, y.current = r.data, b.current = r.collaboration, ie(f, n), ce(f, i), ue(f, { markRendered: (e) => {
323
+ _.current.clear(), g.current = e, C.current = void 0;
324
+ } }), f.isReady.then(() => {
325
+ t.editor === f && !t.isDestroyed && (t.isEditorReady = !0, o(f));
326
326
  }).catch(() => {
327
- if (t.editor === d && !t.isDestroyed) {
328
- R(d), X(d), fe(d);
327
+ if (t.editor === f && !t.isDestroyed) {
328
+ L(f), X(f), fe(f);
329
329
  try {
330
- d.destroy();
330
+ f.destroy();
331
331
  } catch (e) {}
332
332
  t.editor = null, t.holder = null, t.isDestroyed = !0, t.isEditorReady = !1, o(null);
333
333
  }
334
334
  }), () => {
335
- be(t, o);
335
+ xe(t, o);
336
336
  };
337
337
  }, [h]), c(() => {
338
- let e = S.current, t = p.current;
338
+ let e = T.current, t = p.current;
339
339
  if (e === null || t.editor === null || t.isDestroyed) return;
340
340
  let n = l.current.tools;
341
341
  if (typeof n != "object" || !n) return;
342
- let r = C.current;
342
+ let r = E.current;
343
343
  for (let [t, a] of Object.entries(n)) {
344
344
  var i;
345
- if (!ge(a)) continue;
346
- let n = typeof a == "function" || (i = a.config) == null ? {} : i, o = r == null ? void 0 : r[t], s = me(typeof o == "object" && o ? o.config : void 0, n), c = T.current.get(t);
345
+ if (!_e(a)) continue;
346
+ let n = typeof a == "function" || (i = a.config) == null ? {} : i, o = r == null ? void 0 : r[t], s = me(typeof o == "object" && o ? o.config : void 0, n), c = D.current.get(t);
347
347
  if (c !== void 0 && w(s, c)) continue;
348
348
  let l = Object.freeze(s);
349
- T.current.set(t, l), e.setToolConfig(t, l);
349
+ D.current.set(t, l), e.setToolConfig(t, l);
350
350
  }
351
351
  }), c(() => {
352
352
  let e = p.current;
@@ -354,14 +354,14 @@ function ye(e, t) {
354
354
  let t = l.current.tools;
355
355
  if (!(typeof t != "object" || !t)) for (let [r, i] of Object.entries(t)) {
356
356
  var n;
357
- if (!E.current.has(r)) continue;
358
- let t = typeof i == "object" && i ? i.toolbox : void 0;
359
- w(t, E.current.get(r)) || (E.current.set(r, t), (n = e.editor.tools) == null || n.update(r, { toolbox: t }));
357
+ if (!O.current.has(r)) continue;
358
+ let t = typeof i == "object" && i ? i.toolbox : void 0, a = O.current.get(r);
359
+ w(t, a) || (O.current.set(r, t), (n = e.editor.tools) == null || n.update(r, { toolbox: t }));
360
360
  }
361
361
  }), c(() => {
362
- let e = p.current, t = D.current;
362
+ let e = p.current, t = k.current;
363
363
  if (e.editor === null || e.isDestroyed || !e.isEditorReady || t === null) return;
364
- let n = l.current, r = O.current, i = {}, a = { value: !1 }, o = (e, i) => {
364
+ let n = l.current, r = A.current, i = {}, a = { value: !1 }, o = (e, i) => {
365
365
  let o = n[e] !== void 0;
366
366
  o !== r[e] && (r[e] = o, a.value = !0, i(o ? t[e] : void 0));
367
367
  };
@@ -379,75 +379,81 @@ function ye(e, t) {
379
379
  i.onAfterRender = e;
380
380
  }), a.value && e.editor.handlers.set(i);
381
381
  });
382
- let k = typeof i.readOnly == "object" && i.readOnly !== null, { enabled: A, hideControls: j } = ne(i.readOnly);
382
+ let j = typeof i.readOnly == "object" && i.readOnly !== null, { enabled: M, hideControls: N } = ne(i.readOnly);
383
383
  c(() => {
384
- a !== null && (k ? a.readOnly.set(A, { hideControls: j }) : a.readOnly.set(A));
384
+ a !== null && (j ? a.readOnly.set(M, { hideControls: N }) : a.readOnly.set(M));
385
385
  }, [
386
386
  a,
387
- A,
388
- j,
389
- k
387
+ M,
388
+ N,
389
+ j
390
390
  ]);
391
- let { hideToolbar: M } = i;
392
- c(() => {
393
- a === null || M === void 0 || a.toolbar.setHidden(M);
394
- }, [a, M]);
395
- let { toolbarPosition: N } = i;
391
+ let { hideToolbar: P } = i;
396
392
  c(() => {
397
- a === null || N === void 0 || a.toolbar.setPosition(N);
398
- }, [a, N]);
399
- let { inlineToolbar: P } = i;
393
+ a !== null && P !== void 0 && a.toolbar.setHidden(P);
394
+ }, [a, P]);
395
+ let { toolbarPosition: F } = i;
400
396
  c(() => {
401
- a === null || P === void 0 || a.tools.setInlineToolbar(P);
402
- }, [a, P === void 0 ? void 0 : JSON.stringify(P)]);
403
- let { autofocus: F } = i;
404
- c(() => {
405
- a === null || !F || a.focus();
397
+ a !== null && F !== void 0 && a.toolbar.setPosition(F);
406
398
  }, [a, F]);
407
- let { theme: I } = i;
399
+ let { inlineToolbar: I } = i, ae = I === void 0 ? void 0 : JSON.stringify(I);
408
400
  c(() => {
409
- a === null || I === void 0 || a.theme.set(I);
410
- }, [a, I]);
411
- let { width: L } = i;
401
+ a !== null && I !== void 0 && a.tools.setInlineToolbar(I);
402
+ }, [a, ae]);
403
+ let { autofocus: R } = i;
412
404
  c(() => {
413
- a === null || L === void 0 || a.width.set(L);
414
- }, [a, L]);
415
- let z = (n = i.style) == null ? void 0 : n.tokens, B = d((r = i.style) == null ? void 0 : r.tokens);
405
+ a === null || !R || a.focus();
406
+ }, [a, R]);
407
+ let { theme: z } = i;
416
408
  c(() => {
417
- a === null || z === void 0 || w(z, B.current) || (B.current = z, a.tokens.set(z));
409
+ a !== null && z !== void 0 && a.theme.set(z);
418
410
  }, [a, z]);
419
- let { i18n: V } = i, H = d(i.i18n);
411
+ let { width: B } = i;
412
+ c(() => {
413
+ a !== null && B !== void 0 && a.width.set(B);
414
+ }, [a, B]);
415
+ let V = (n = i.style) == null ? void 0 : n.tokens, H = d((r = i.style) == null ? void 0 : r.tokens);
420
416
  c(() => {
421
- if (a === null || V === void 0 || w(V, H.current)) return;
422
- H.current = V;
423
- let { locale: e, messages: t, direction: n } = V;
424
- a.i18n.update(W(W(W({}, e === void 0 ? {} : { locale: e }), t === void 0 ? {} : { messages: t }), n === void 0 ? {} : { direction: n }));
417
+ a !== null && V !== void 0 && (w(V, H.current) || (H.current = V, a.tokens.set(V)));
425
418
  }, [a, V]);
426
- let { placeholder: U } = i;
419
+ let { i18n: G } = i, K = d(i.i18n);
427
420
  c(() => {
428
- a === null || U === void 0 || a.placeholder.set(U);
429
- }, [a, U]);
430
- let { data: K } = i;
421
+ if (a === null || G === void 0 || w(G, K.current)) return;
422
+ K.current = G;
423
+ let { locale: e, messages: t, direction: n } = G;
424
+ a.i18n.update(U(U(U({}, e === void 0 ? {} : { locale: e }), t === void 0 ? {} : { messages: t }), n === void 0 ? {} : { direction: n }));
425
+ }, [a, G]);
426
+ let { placeholder: q } = i;
427
+ c(() => {
428
+ a !== null && q !== void 0 && a.placeholder.set(q);
429
+ }, [a, q]);
430
+ let { data: J } = i;
431
431
  return c(() => {
432
- if (a === null || K === void 0) return;
432
+ if (a === null || J === void 0) return;
433
433
  let e = p.current;
434
434
  if (e.editor !== a || e.isDestroyed) return;
435
- if (v.current !== a && (v.current = a, x.current = void 0, _.current.clear(), w(K, y.current))) {
436
- g.current = K;
435
+ if (v.current !== a && (v.current = a, C.current = void 0, _.current.clear(), w(J, y.current))) {
436
+ g.current = J;
437
+ return;
438
+ }
439
+ let t = g.current, n = C.current;
440
+ if (t !== void 0 && te(J, t) || n !== void 0 && te(J, n) || _.current.matches(J)) return;
441
+ let r = b.current;
442
+ if (r !== void 0) {
443
+ S.current || (S.current = !0, console.warn(ge(r.doc)));
437
444
  return;
438
445
  }
439
- let t = g.current, n = x.current;
440
- t !== void 0 && te(K, t) || n !== void 0 && te(K, n) || _.current.matches(K) || (_.current.clear(), x.current = K, b.current = b.current.catch(() => void 0).then(() => a.render(re(K))).then(() => {
441
- g.current = K;
446
+ _.current.clear(), C.current = J, x.current = x.current.catch(() => void 0).then(() => a.render(re(J))).then(() => {
447
+ g.current = J;
442
448
  }, () => {}).then(() => {
443
- x.current === K && (x.current = void 0);
444
- }));
445
- }, [a, K]), a;
449
+ C.current === J && (C.current = void 0);
450
+ });
451
+ }, [a, J]), a;
446
452
  }
447
- function be(e, t) {
453
+ function xe(e, t) {
448
454
  e.destroyTimeout = setTimeout(() => {
449
455
  if (e.editor !== null) {
450
- R(e.editor), X(e.editor), fe(e.editor);
456
+ L(e.editor), X(e.editor), fe(e.editor);
451
457
  try {
452
458
  e.editor.destroy();
453
459
  } catch (e) {}
@@ -457,7 +463,7 @@ function be(e, t) {
457
463
  }
458
464
  //#endregion
459
465
  //#region src/BlockPortalHost.tsx
460
- var xe = class extends e {
466
+ var Se = class extends e {
461
467
  constructor(...e) {
462
468
  super(...e), this.state = { failed: !1 };
463
469
  }
@@ -469,22 +475,22 @@ var xe = class extends e {
469
475
  return this.state.failed ? null : this.props.children;
470
476
  }
471
477
  };
472
- function Se({ registry: e }) {
478
+ function Ce({ registry: e }) {
473
479
  let t = p(e.subscribe, e.getSnapshot, e.getSnapshot);
474
480
  return /* @__PURE__ */ k(O, { children: Array.from(t.entries()).map(([e, t]) => {
475
481
  let n = t.component;
476
- return M(/* @__PURE__ */ k(xe, { children: /* @__PURE__ */ k(n, W({}, t.props)) }), t.hostEl, e);
482
+ return M(/* @__PURE__ */ k(Se, { children: /* @__PURE__ */ k(n, U({}, t.props)) }), t.hostEl, e);
477
483
  }) });
478
484
  }
479
485
  //#endregion
480
486
  //#region src/blok-instance-context.ts
481
- var Ce = n(null);
482
- function we() {
483
- return s(Ce);
487
+ var we = n(null);
488
+ function Te() {
489
+ return s(we);
484
490
  }
485
491
  //#endregion
486
- //#region \0@oxc-project+runtime@0.139.0/helpers/esm/objectWithoutPropertiesLoose.js
487
- function Te(e, t) {
492
+ //#region \0@oxc-project+runtime@0.147.0/helpers/esm/objectWithoutPropertiesLoose.js
493
+ function Ee(e, t) {
488
494
  if (e == null) return {};
489
495
  var n = {};
490
496
  for (var r in e) if ({}.hasOwnProperty.call(e, r)) {
@@ -494,10 +500,10 @@ function Te(e, t) {
494
500
  return n;
495
501
  }
496
502
  //#endregion
497
- //#region \0@oxc-project+runtime@0.139.0/helpers/esm/objectWithoutProperties.js
503
+ //#region \0@oxc-project+runtime@0.147.0/helpers/esm/objectWithoutProperties.js
498
504
  function $(e, t) {
499
505
  if (e == null) return {};
500
- var n, r, i = Te(e, t);
506
+ var n, r, i = Ee(e, t);
501
507
  if (Object.getOwnPropertySymbols) {
502
508
  var a = Object.getOwnPropertySymbols(e);
503
509
  for (r = 0; r < a.length; r++) n = a[r], t.includes(n) || {}.propertyIsEnumerable.call(e, n) && (i[n] = e[n]);
@@ -506,22 +512,22 @@ function $(e, t) {
506
512
  }
507
513
  //#endregion
508
514
  //#region src/BlokContent.tsx
509
- var Ee = ["editor"];
510
- function De(e) {
515
+ var De = ["editor"];
516
+ function Oe(e) {
511
517
  var t, n;
512
518
  if (typeof window > "u") return;
513
519
  let r = window.location.hash.slice(1);
514
- r !== "" && ((t = (n = e.blocks).scrollToBlock) == null || t.call(n, Oe(r)));
520
+ r !== "" && ((t = (n = e.blocks).scrollToBlock) == null || t.call(n, ke(r)));
515
521
  }
516
- function Oe(e) {
522
+ function ke(e) {
517
523
  try {
518
524
  return decodeURIComponent(e);
519
525
  } catch (t) {
520
526
  return e;
521
527
  }
522
528
  }
523
- var ke = i(function(e, t) {
524
- let { editor: n } = e, r = $(e, Ee), i = d(null), a = (e) => {
529
+ var Ae = i(function(e, t) {
530
+ let { editor: n } = e, r = $(e, De), i = d(null), a = (e) => {
525
531
  if (i.current = e, typeof t == "function") t(e);
526
532
  else if (t != null) {
527
533
  let n = t;
@@ -530,33 +536,33 @@ var ke = i(function(e, t) {
530
536
  };
531
537
  c(() => {
532
538
  if (n === null || i.current === null) return;
533
- let e = L(n);
534
- if (e !== void 0) return i.current.appendChild(e), De(n), () => {
539
+ let e = ae(n);
540
+ if (e !== void 0) return i.current.appendChild(e), Oe(n), () => {
535
541
  e.remove();
536
542
  };
537
543
  }, [n]);
538
544
  let o = n === null ? void 0 : le(n);
539
- return /* @__PURE__ */ k("div", W(W({ ref: a }, r), {}, { children: o === void 0 ? null : /* @__PURE__ */ k(Ce.Provider, {
545
+ return /* @__PURE__ */ k("div", U(U({ ref: a }, r), {}, { children: o === void 0 ? null : /* @__PURE__ */ k(we.Provider, {
540
546
  value: n,
541
- children: /* @__PURE__ */ k(Se, { registry: o })
547
+ children: /* @__PURE__ */ k(Ce, { registry: o })
542
548
  }) }));
543
- }), Ae = /* @__PURE__ */ "autofocus.defaultBlock.dataModel.placeholder.sanitizer.hideToolbar.toolbarPosition.maxHistoryLength.historyDebounceTime.newGroupDelay.globalUndoRedo.tools.data.minHeight.logLevel.readOnly.i18n.link.linkPaste.onBeforePaste.onReady.onChange.onSave.onError.onEnter.onSubmit.onBeforeRender.onAfterRender.inlineToolbar.tunes.style.theme.onThemeChange.scrollToBlock.user.resolveUser.notifierPosition.notifier.width.migrations.uploader.captureClicksBelowEditor".split("."), je = [
549
+ }), je = /* @__PURE__ */ "autofocus.defaultBlock.dataModel.placeholder.sanitizer.hideToolbar.toolbarPosition.maxHistoryLength.historyDebounceTime.newGroupDelay.globalUndoRedo.tools.data.minHeight.logLevel.readOnly.i18n.link.linkPaste.onBeforePaste.onReady.onChange.onSave.onError.onEnter.onSubmit.onBeforeRender.onAfterRender.inlineToolbar.inlineEmoji.tunes.style.theme.onThemeChange.scrollToBlock.user.resolveUser.notifierPosition.notifier.width.migrations.uploader.server.ticket.persistence.collaboration.captureClicksBelowEditor".split("."), Me = [
544
550
  "deps",
545
551
  "onReady",
546
552
  "locale",
547
553
  "onBlocksRendered",
548
554
  "onBlockRendered"
549
- ], Me = new Set(Ae), Ne = i(function(e, t) {
550
- let { deps: n, onReady: r, locale: i, onBlocksRendered: a, onBlockRendered: o } = e, s = $(e, je), u = {}, f = {};
555
+ ], Ne = new Set(je), Pe = i(function(e, t) {
556
+ let { deps: n, onReady: r, locale: i, onBlocksRendered: a, onBlockRendered: o } = e, s = $(e, Me), u = {}, f = {};
551
557
  for (let e of Object.keys(s)) {
552
558
  let t = s[e];
553
- Me.has(e) ? u[e] = t : f[e] = t;
559
+ Ne.has(e) ? u[e] = t : f[e] = t;
554
560
  }
555
561
  if (i !== void 0) {
556
562
  let e = u.i18n;
557
- u.i18n = W(W({}, e), {}, { locale: i });
563
+ u.i18n = U(U({}, e), {}, { locale: i });
558
564
  }
559
- let p = ye(u, n);
565
+ let p = be(u, n);
560
566
  l(t, () => p, [p]);
561
567
  let m = d(r);
562
568
  m.current = r;
@@ -596,11 +602,11 @@ var ke = i(function(e, t) {
596
602
  p,
597
603
  v,
598
604
  y
599
- ]), /* @__PURE__ */ k(ke, W({ editor: p }, f));
605
+ ]), /* @__PURE__ */ k(Ae, U({ editor: p }, f));
600
606
  });
601
607
  //#endregion
602
608
  //#region src/useBlokHandle.ts
603
- function Pe() {
609
+ function Fe() {
604
610
  let e = d(null);
605
611
  return u(() => ({
606
612
  ref: (t) => {
@@ -639,8 +645,8 @@ function Pe() {
639
645
  }
640
646
  //#endregion
641
647
  //#region src/useBlocks.ts
642
- var Fe = "block changed";
643
- function Ie(e, t = {}) {
648
+ var Ie = "block changed";
649
+ function Le(e, t = {}) {
644
650
  var n;
645
651
  let r = (n = t.within) == null ? null : n, i = d(0), a = d(e);
646
652
  a.current !== e && (a.current = e, i.current = 0);
@@ -649,13 +655,13 @@ function Ie(e, t = {}) {
649
655
  let n = (n) => {
650
656
  r !== null && !b(e, n, r) || (i.current += 1, t());
651
657
  };
652
- return e.on(Fe, n), () => e.off(Fe, n);
658
+ return e.on(Ie, n), () => e.off(Ie, n);
653
659
  }, [e, r]), c = o(() => i.current, []);
654
660
  return p(s, c, c), u(() => e === null ? _ : x(e), [e]);
655
661
  }
656
662
  //#endregion
657
663
  //#region src/useBlokReady.ts
658
- function Le(e = {}) {
664
+ function Re(e = {}) {
659
665
  let { within: t, settleOn: n } = e, [r, i] = f(!1);
660
666
  return c(() => {
661
667
  let e = () => {
@@ -671,7 +677,7 @@ function Le(e = {}) {
671
677
  }
672
678
  //#endregion
673
679
  //#region src/view-nodes-to-react.ts
674
- var Re = /* @__PURE__ */ new Set([
680
+ var ze = /* @__PURE__ */ new Set([
675
681
  "area",
676
682
  "base",
677
683
  "br",
@@ -686,7 +692,7 @@ var Re = /* @__PURE__ */ new Set([
686
692
  "source",
687
693
  "track",
688
694
  "wbr"
689
- ]), ze = /* @__PURE__ */ new Set([
695
+ ]), Be = /* @__PURE__ */ new Set([
690
696
  "disabled",
691
697
  "open",
692
698
  "controls",
@@ -702,7 +708,7 @@ var Re = /* @__PURE__ */ new Set([
702
708
  "novalidate",
703
709
  "allowfullscreen",
704
710
  "itemscope"
705
- ]), Be = {
711
+ ]), Ve = {
706
712
  class: "className",
707
713
  for: "htmlFor",
708
714
  colspan: "colSpan",
@@ -724,7 +730,7 @@ var Re = /* @__PURE__ */ new Set([
724
730
  minlength: "minLength",
725
731
  usemap: "useMap",
726
732
  itemscope: "itemScope"
727
- }, Ve = (e) => {
733
+ }, He = (e) => {
728
734
  let t = {};
729
735
  for (let n of e.split(";")) {
730
736
  let e = n.indexOf(":");
@@ -735,12 +741,12 @@ var Re = /* @__PURE__ */ new Set([
735
741
  t[a] = i;
736
742
  }
737
743
  return t;
738
- }, He = (e, t) => {
744
+ }, Ue = (e, t) => {
739
745
  let n = { key: t };
740
746
  for (let [t, a] of Object.entries(e)) {
741
747
  var r;
742
748
  if (t === "style") {
743
- n.style = Ve(a);
749
+ n.style = He(a);
744
750
  continue;
745
751
  }
746
752
  if (t === "checked") {
@@ -751,21 +757,21 @@ var Re = /* @__PURE__ */ new Set([
751
757
  n.defaultValue = a;
752
758
  continue;
753
759
  }
754
- if (ze.has(t)) {
760
+ if (Be.has(t)) {
755
761
  var i;
756
- n[(i = Be[t]) == null ? t : i] = !0;
762
+ n[(i = Ve[t]) == null ? t : i] = !0;
757
763
  continue;
758
764
  }
759
- n[(r = Be[t]) == null ? t : r] = a;
765
+ n[(r = Ve[t]) == null ? t : r] = a;
760
766
  }
761
767
  return n;
762
- }, Ue = (e) => e.map((e, t) => {
768
+ }, We = (e) => e.map((e, t) => {
763
769
  if ("text" in e) return e.text;
764
- let n = He(e.attrs, t);
765
- return Re.has(e.tag) || e.children.length === 0 ? r(e.tag, n) : r(e.tag, n, ...Ue(e.children));
766
- }), We = (e, n) => {
770
+ let n = Ue(e.attrs, t);
771
+ return ze.has(e.tag) || e.children.length === 0 ? r(e.tag, n) : r(e.tag, n, ...We(e.children));
772
+ }), Ge = (e, n) => {
767
773
  let i = n == null ? void 0 : n.schema, a = n == null ? void 0 : n.renderers, o = n == null ? void 0 : n.onUnknownBlock, s = n == null ? void 0 : n.toolAttributes, c = n == null ? void 0 : n.blockIds, l = n == null ? void 0 : n.transformUrl, d = n == null ? void 0 : n.inlineRenderers, f = n == null ? void 0 : n.classes;
768
- return u(() => r(t, null, ...Ue(P(e, {
774
+ return u(() => r(t, null, ...We(P(e, {
769
775
  schema: i,
770
776
  renderers: a,
771
777
  onUnknownBlock: o,
@@ -785,7 +791,7 @@ var Re = /* @__PURE__ */ new Set([
785
791
  d,
786
792
  f
787
793
  ]);
788
- }, Ge = [
794
+ }, Ke = [
789
795
  "data",
790
796
  "schema",
791
797
  "renderers",
@@ -795,8 +801,8 @@ var Re = /* @__PURE__ */ new Set([
795
801
  "transformUrl",
796
802
  "inlineRenderers",
797
803
  "classes"
798
- ], Ke = (e) => {
799
- let { data: t, schema: n, renderers: r, onUnknownBlock: i, toolAttributes: a, blockIds: o, transformUrl: s, inlineRenderers: c, classes: l } = e, u = $(e, Ge), d = We(t, {
804
+ ], qe = (e) => {
805
+ let { data: t, schema: n, renderers: r, onUnknownBlock: i, toolAttributes: a, blockIds: o, transformUrl: s, inlineRenderers: c, classes: l } = e, u = $(e, Ke), d = Ge(t, {
800
806
  schema: n,
801
807
  renderers: r,
802
808
  onUnknownBlock: i,
@@ -806,25 +812,25 @@ var Re = /* @__PURE__ */ new Set([
806
812
  inlineRenderers: c,
807
813
  classes: l == null || l
808
814
  });
809
- return /* @__PURE__ */ k("div", W(W({ "data-blok-interface": "view" }, u), {}, { children: d }));
810
- }, qe = ["icon", "title"], Je = ["commit", "readOnly"], Ye = [q, J], Xe = (e, t, n) => {
815
+ return /* @__PURE__ */ k("div", U(U({ "data-blok-interface": "view" }, u), {}, { children: d }));
816
+ }, Je = ["icon", "title"], Ye = ["commit", "readOnly"], Xe = [q, J], Ze = (e, t, n) => {
811
817
  var r;
812
818
  e == null || (r = e.events) == null || r.emit(h, {
813
819
  blockId: t,
814
820
  childIds: n.map((e) => e.id)
815
821
  });
816
- }, Ze = /* @__PURE__ */ new Set([
822
+ }, Qe = /* @__PURE__ */ new Set([
817
823
  void 0,
818
824
  "user",
819
825
  "api",
820
826
  "convert"
821
- ]), Qe = [
827
+ ]), $e = [
822
828
  "toolbox",
823
829
  "isReadOnlySupported",
824
830
  "__isBlokReactBlock",
825
831
  "__buildPortalToolbox"
826
832
  ];
827
- function $e(e) {
833
+ function et(e) {
828
834
  var t, n;
829
835
  let r = (e) => {
830
836
  if (typeof document > "u") return null;
@@ -835,7 +841,7 @@ function $e(e) {
835
841
  let r = t.innerHTML;
836
842
  return n.unmount(), r === "" ? null : r;
837
843
  }, i = (e) => {
838
- let { icon: t, title: n } = e, i = W({}, $(e, qe));
844
+ let { icon: t, title: n } = e, i = U({}, $(e, Je));
839
845
  if (typeof n == "string" && (i.title = n), !a(t)) return t !== void 0 && (i.icon = t), {
840
846
  entry: i,
841
847
  deferred: !1
@@ -873,7 +879,7 @@ function $e(e) {
873
879
  component: u,
874
880
  props: {},
875
881
  toolName: n
876
- }), W(W({}, o), {}, { titleEl: c });
882
+ }), U(U({}, o), {}, { titleEl: c });
877
883
  });
878
884
  return Array.isArray(e.toolbox) ? o : o[0];
879
885
  }, l = {
@@ -886,11 +892,11 @@ function $e(e) {
886
892
  }, f = e.viewComponent === void 0 ? e.component : (t) => {
887
893
  let n = e.viewComponent;
888
894
  if (t.readOnly && n !== void 0) {
889
- let { commit: e, readOnly: r } = t;
890
- return /* @__PURE__ */ k(n, W({}, $(t, Je)));
895
+ let { commit: e, readOnly: r } = t, i = $(t, Ye);
896
+ return /* @__PURE__ */ k(n, U({}, i));
891
897
  }
892
898
  let r = e.component;
893
- return /* @__PURE__ */ k(r, W({}, t));
899
+ return /* @__PURE__ */ k(r, U({}, t));
894
900
  }, p = (t = class {
895
901
  static get toolbox() {
896
902
  return u();
@@ -907,7 +913,7 @@ function $e(e) {
907
913
  this.anchorEl = e;
908
914
  }, this.commit = (t) => {
909
915
  var n;
910
- let r = T(e.propSchema, W(W({}, this.mirror), t));
916
+ let r = T(e.propSchema, U(U({}, this.mirror), t));
911
917
  C(r, this.mirror) || (this.mirror = r, this.lastRendered = r, (n = this.registry) == null || n.setProps(this.blockApi.id, { data: r }), this.flushDispatch());
912
918
  }, this.blockApi = t.block;
913
919
  let a = (n = t.config) == null ? {} : n;
@@ -915,7 +921,7 @@ function $e(e) {
915
921
  let o = a[J];
916
922
  this.toolName = typeof o == "string" ? o : void 0;
917
923
  let s = {};
918
- for (let [e, t] of Object.entries(a)) Ye.includes(e) || (s[e] = t);
924
+ for (let [e, t] of Object.entries(a)) Xe.includes(e) || (s[e] = t);
919
925
  this.toolConfig = Object.freeze(s), this.api = t.api;
920
926
  let l = t.api;
921
927
  this.pointerDrag = () => {
@@ -931,7 +937,7 @@ function $e(e) {
931
937
  D(n.current, i), y(r.current, i, {
932
938
  childAttributes: e,
933
939
  childContentAttributes: t
934
- }), Xe(f, u.id, i);
940
+ }), Ze(f, u.id, i);
935
941
  }), /* @__PURE__ */ k("div", {
936
942
  ref: n,
937
943
  [g.nestedBlocks]: ""
@@ -948,8 +954,8 @@ function $e(e) {
948
954
  origin: this.origin,
949
955
  api: this.api
950
956
  };
951
- t == null || t(this.blockApi, e), Ze.has(this.origin) && (n == null || n(this.blockApi, e));
952
- }, a = (e) => (c(i, []), /* @__PURE__ */ k(r, W({}, e)));
957
+ t == null || t(this.blockApi, e), Qe.has(this.origin) && (n == null || n(this.blockApi, e));
958
+ }, a = (e) => (c(i, []), /* @__PURE__ */ k(r, U({}, e)));
953
959
  return a.displayName = `BlokBlockMount(${e.type})`, a;
954
960
  }
955
961
  render() {
@@ -982,7 +988,7 @@ function $e(e) {
982
988
  let n = this.anchorEl;
983
989
  if (n !== null && n.isConnected) return n;
984
990
  let r = this.hostEl;
985
- if (!(r === null || e.getToolbarAnchorElement === void 0)) return (t = e.getToolbarAnchorElement(r, this.blockApi)) == null ? void 0 : t;
991
+ if (r !== null && e.getToolbarAnchorElement !== void 0) return (t = e.getToolbarAnchorElement(r, this.blockApi)) == null ? void 0 : t;
986
992
  }
987
993
  moved() {
988
994
  var t;
@@ -1031,7 +1037,7 @@ function $e(e) {
1031
1037
  requestAnimationFrame(e);
1032
1038
  }
1033
1039
  }, t.__isBlokReactBlock = !0, t);
1034
- for (let [t, r] of Object.entries((n = e.statics) == null ? {} : n)) Qe.includes(t) || Object.defineProperty(p, t, {
1040
+ for (let [t, r] of Object.entries((n = e.statics) == null ? {} : n)) $e.includes(t) || Object.defineProperty(p, t, {
1035
1041
  value: r,
1036
1042
  writable: !0,
1037
1043
  enumerable: !0,
@@ -1041,13 +1047,13 @@ function $e(e) {
1041
1047
  }
1042
1048
  //#endregion
1043
1049
  //#region src/createReactInlineTool.tsx
1044
- var et = [q, J], tt = (e) => `__blok-inline-tool__:${e}:${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`, nt = n(null);
1045
- function rt() {
1046
- let e = s(nt);
1050
+ var tt = [q, J], nt = (e) => `__blok-inline-tool__:${e}:${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`, rt = n(null);
1051
+ function it() {
1052
+ let e = s(rt);
1047
1053
  if (e === null) throw Error("useInlineTool() must be called from a component rendered by createReactInlineTool");
1048
1054
  return e;
1049
1055
  }
1050
- function it(e) {
1056
+ function at(e) {
1051
1057
  var t;
1052
1058
  return t = class {
1053
1059
  static get type() {
@@ -1079,9 +1085,9 @@ function it(e) {
1079
1085
  let r = (n = t == null ? void 0 : t.config) == null ? {} : n;
1080
1086
  this.api = t == null ? void 0 : t.api, this.registry = r[q];
1081
1087
  let i = r[J];
1082
- this.toolName = typeof i == "string" ? i : e.type, this.portalKey = tt(this.toolName);
1088
+ this.toolName = typeof i == "string" ? i : e.type, this.portalKey = nt(this.toolName);
1083
1089
  let a = {};
1084
- for (let [e, t] of Object.entries(r)) et.includes(e) || (a[e] = t);
1090
+ for (let [e, t] of Object.entries(r)) tt.includes(e) || (a[e] = t);
1085
1091
  this.toolConfig = Object.freeze(a), this.portalComponent = this.createPortalComponent();
1086
1092
  }
1087
1093
  render() {
@@ -1144,7 +1150,7 @@ function it(e) {
1144
1150
  api: t,
1145
1151
  mark: i
1146
1152
  }), [e.active, e.config]);
1147
- return /* @__PURE__ */ k(nt.Provider, {
1153
+ return /* @__PURE__ */ k(rt.Provider, {
1148
1154
  value: n,
1149
1155
  children: /* @__PURE__ */ k(r, {
1150
1156
  active: e.active,
@@ -1157,4 +1163,4 @@ function it(e) {
1157
1163
  }, t.__isBlokReactInlineTool = !0, t.isInline = !0, t;
1158
1164
  }
1159
1165
  //#endregion
1160
- export { q as BLOK_PORTAL_REGISTRY_CONFIG_KEY, J as BLOK_TOOL_NAME_CONFIG_KEY, Se as BlockPortalHost, ke as BlokContent, Ne as BlokEditor, K as BlokProvider, Ke as BlokView, se as createBlockPortalRegistry, $e as createReactBlock, it as createReactInlineTool, A as getDirection, j as normalizeLocale, Ie as useBlocks, ye as useBlok, ae as useBlokDefaults, Pe as useBlokHandle, we as useBlokInstance, Le as useBlokReady, We as useBlokView, rt as useInlineTool };
1166
+ export { q as BLOK_PORTAL_REGISTRY_CONFIG_KEY, J as BLOK_TOOL_NAME_CONFIG_KEY, Ce as BlockPortalHost, Ae as BlokContent, Pe as BlokEditor, G as BlokProvider, qe as BlokView, se as createBlockPortalRegistry, et as createReactBlock, at as createReactInlineTool, A as getDirection, j as normalizeLocale, Le as useBlocks, be as useBlok, K as useBlokDefaults, Fe as useBlokHandle, Te as useBlokInstance, Re as useBlokReady, Ge as useBlokView, it as useInlineTool };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bloklabs/react",
3
- "version": "1.12.0",
3
+ "version": "1.14.0",
4
4
  "description": "React block editor — official React bindings for Blok, the headless Notion-like rich text editor. Hooks and components that render blocks and save to JSON.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "JackUait",
@@ -54,7 +54,7 @@
54
54
  "test": "yarn run -T vitest run"
55
55
  },
56
56
  "peerDependencies": {
57
- "@bloklabs/core": "^1.12.0",
57
+ "@bloklabs/core": "^1.14.0",
58
58
  "react": "^18.0.0 || ^19.0.0",
59
59
  "react-dom": "^18.0.0 || ^19.0.0"
60
60
  }
@@ -38,6 +38,7 @@ export const USE_BLOK_CONFIG_KEYS = [
38
38
  'onBeforeRender',
39
39
  'onAfterRender',
40
40
  'inlineToolbar',
41
+ 'inlineEmoji',
41
42
  'tunes',
42
43
  'style',
43
44
  'theme',
@@ -50,6 +51,10 @@ export const USE_BLOK_CONFIG_KEYS = [
50
51
  'width',
51
52
  'migrations',
52
53
  'uploader',
54
+ 'server',
55
+ 'ticket',
56
+ 'persistence',
57
+ 'collaboration',
53
58
  'captureClicksBelowEditor',
54
59
  ] as const satisfies readonly (keyof UseBlokConfig)[];
55
60
 
package/src/useBlok.ts CHANGED
@@ -32,6 +32,19 @@ interface EditorInstanceState {
32
32
  depsToken: Record<string, unknown> | null;
33
33
  }
34
34
 
35
+ /**
36
+ * Warning text for a controlled `data` change the adapter refuses to render
37
+ * under collaboration. Kept verbatim in all three adapters (they share no code).
38
+ * @param doc - the collaboration document id, for the reset endpoint in the text
39
+ * @returns the message to warn with, once per adapter instance
40
+ */
41
+ const collaborationDataIgnoredMessage = (doc?: string): string =>
42
+ '[Blok] `data` is ignored while collaboration is on: the document lives on the sync service ' +
43
+ 'and is shared with everyone editing it, so replacing it from this editor would overwrite their work. ' +
44
+ `To replace the whole document, call POST /sync/${doc ?? '{doc}'}/reset on your server — ` +
45
+ 'it reloads the document from your own document endpoint and every open editor picks it up. ' +
46
+ 'To change part of it, use the blocks API (insert/update/delete).';
47
+
35
48
  /**
36
49
  * Inject the editor's portal registry into every `createReactBlock` tool's
37
50
  * config (vanilla tools are left untouched), returning a NEW tools object so
@@ -165,7 +178,16 @@ export function useBlok(configInput: UseBlokConfig, deps?: DependencyList): Blok
165
178
  // undefined-at-mount then loaded, or changed before the editor finished
166
179
  // initializing — still renders instead of being mistaken for the seed.
167
180
  const constructedDataRef = useRef(config.data);
181
+ // The `collaboration` the live editor was CONSTRUCTED with. The key is
182
+ // mount-fixed, so dropping it from the prop (`collaboration: on ? {...} :
183
+ // undefined`) cannot turn a live session into a single-player editor —
184
+ // reading the current prop instead would let that change fall through into
185
+ // render(), which refuses under collaboration and rejects with nothing
186
+ // surfaced anywhere.
187
+ const constructedCollaborationRef = useRef(config.collaboration);
168
188
  const renderChainRef = useRef<Promise<void>>(Promise.resolve());
189
+ // One collaboration warning per hook instance (see the data effect).
190
+ const collaborationWarnedRef = useRef(false);
169
191
  // The content of the render currently queued/in-flight (distinct from
170
192
  // `lastRenderedDataRef`, which tracks the last SUCCESSFULLY rendered content).
171
193
  // Used to dedupe a re-queue of the same in-flight content without advancing the
@@ -351,6 +373,7 @@ export function useBlok(configInput: UseBlokConfig, deps?: DependencyList): Blok
351
373
  // Remember what this editor was seeded with so the reactive-`data` effect can
352
374
  // tell a genuine post-construction change from the construction value itself.
353
375
  constructedDataRef.current = currentConfig.data;
376
+ constructedCollaborationRef.current = currentConfig.collaboration;
354
377
  setHolder(blok, holder);
355
378
  setRegistry(blok, registry);
356
379
  // Imperative-content channel: `useBlokHandle().clear()` / `.render()` change
@@ -797,6 +820,23 @@ export function useBlok(configInput: UseBlokConfig, deps?: DependencyList): Blok
797
820
  return;
798
821
  }
799
822
 
823
+ // Under collaboration the document belongs to the sync service, and render()
824
+ // refuses a wholesale replace — so don't attempt one. The prop's premise
825
+ // ("this value IS the document") does not hold here. Decided against the
826
+ // MOUNTED config, never the current prop: `collaboration` is mount-fixed,
827
+ // so a host that drops the key is still driving a collaboration session and
828
+ // deserves the warning rather than a silently rejected render.
829
+ const mountedCollaboration = constructedCollaborationRef.current;
830
+
831
+ if (mountedCollaboration !== undefined) {
832
+ if (!collaborationWarnedRef.current) {
833
+ collaborationWarnedRef.current = true;
834
+ console.warn(collaborationDataIgnoredMessage(mountedCollaboration.doc));
835
+ }
836
+
837
+ return;
838
+ }
839
+
800
840
  // Genuinely external content takes over: earlier emitted payloads are moot,
801
841
  // and keeping them could wrongly no-op a later deliberate revert to one.
802
842
  echoWindowRef.current.clear();