@bloklabs/react 1.3.0 → 1.4.1

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 ADDED
@@ -0,0 +1,69 @@
1
+ # @bloklabs/react
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.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @bloklabs/react @bloklabs/core
9
+ ```
10
+
11
+ `@bloklabs/core`, `react` and `react-dom` are peer dependencies.
12
+
13
+ ## Usage
14
+
15
+ `<BlokEditor>` is the all-in-one component: it mounts the editor, manages its lifecycle, and takes every editor config option as a prop.
16
+
17
+ ```tsx
18
+ import { BlokEditor } from '@bloklabs/react';
19
+ import { Header, Paragraph, List } from '@bloklabs/core/tools';
20
+
21
+ export function Editor() {
22
+ return (
23
+ <BlokEditor
24
+ tools={{
25
+ paragraph: Paragraph,
26
+ header: { class: Header, placeholder: 'Enter a heading' },
27
+ list: List,
28
+ }}
29
+ />
30
+ );
31
+ }
32
+ ```
33
+
34
+ ## Saving
35
+
36
+ `onSave` fires with the latest content on every change, so you never have to call `save()` by hand.
37
+
38
+ ```tsx
39
+ import { useState } from 'react';
40
+ import { BlokEditor } from '@bloklabs/react';
41
+ import type { OutputData } from '@bloklabs/core';
42
+
43
+ export function Editor() {
44
+ const [data, setData] = useState<OutputData>();
45
+
46
+ return (
47
+ <>
48
+ <BlokEditor onSave={setData} />
49
+ <pre>{JSON.stringify(data?.blocks, null, 2)}</pre>
50
+ </>
51
+ );
52
+ }
53
+ ```
54
+
55
+ ## Also exported
56
+
57
+ - `useBlok(config, deps?)` — the hook behind the component, returns `Blok | null`.
58
+ - `BlokContent` — the mount-point `<div>`, if you want to wire the hook yourself.
59
+ - `useBlocks(editor)` — a reactive snapshot of the block tree plus a manipulation API.
60
+ - `createReactBlock` / `createReactInlineTool` — author block and inline tools as React components.
61
+ - `BlokProvider` / `useBlokDefaults` — share default editor config through context.
62
+
63
+ ## Docs
64
+
65
+ - [Quick start](https://blokeditor.com/docs/quick-start?framework=react)
66
+ - [`BlokEditor` reference](https://blokeditor.com/docs/blok-editor?framework=react)
67
+ - [`useBlocks` reference](https://blokeditor.com/docs/use-blocks?framework=react)
68
+
69
+ Licensed under Apache-2.0.
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("react-dom"),a=require("react-dom/client");var o=new WeakMap;function s(e,t){o.set(e,t)}function c(e){return o.get(e)}function l(e){o.delete(e)}function u(e){"@babel/helpers - typeof";return u=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},u(e)}function d(e,t){if(u(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(u(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function f(e){var t=d(e,`string`);return u(t)==`symbol`?t:t+``}function p(e,t,n){return(t=f(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(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 h(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?m(Object(n),!0).forEach(function(t){p(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var g=(0,e.createContext)({});function _({defaults:e,children:t}){return(0,r.jsx)(g.Provider,{value:e,children:t})}function v(){return(0,e.useContext)(g)}function y(e,t){if(Object.keys(e).length===0)return t;let n=h({},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=h(h({},e.tools),t.tools)),n}var b=`__blokPortalRegistry`,x=`__blokToolName`,S=()=>{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:h(h({},i),{},{props:h(h({},i.props),{},{config:o})})),r(a)},unregister(t){if(!e.snapshot.has(t))return;let n=new Map(e.snapshot);n.delete(t),r(n)},setProps(t,n){let i=e.snapshot.get(t);if(i===void 0)return;let a=new Map(e.snapshot);a.set(t,h(h({},i),{},{props:h(h({},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,h(h({},t),{},{props:h(h({},t.props),{},{config:i})}));r(o)},subscribe(e){return t.add(e),()=>{t.delete(e)}},getSnapshot(){return e.snapshot}}},C=new WeakMap;function w(e,t){C.set(e,t)}function T(e){return C.get(e)}function E(e){C.delete(e)}var D=e=>{if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},O=(e,t)=>t.reduce((e,t)=>{if(Array.isArray(e))return typeof t==`number`?e[t]:void 0;if(D(e))return e[t]},e),k=(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(D(e)){let r=D(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 D(r)?r:{}},A=(e,t)=>{if(!D(e))return e;let n={};for(let[r,i]of Object.entries(e)){if(!D(i)||!D(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=D(a)?a[r]:void 0,s=O(D(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(D(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]=h(h({},i),{},{config:a(i.config,[])})}return n},j=e=>{let t=typeof e==`function`?e:e==null?void 0:e.class;return typeof t==`function`&&t.__isBlokReactBlock===!0},M=e=>{let t=typeof e==`function`?e:e==null?void 0:e.class;return typeof t==`function`&&t.__isBlokReactInlineTool===!0},N=(e,t)=>{if(typeof e!=`object`||!e)return e;let n={};for(let[i,a]of Object.entries(e)){var r;if(!j(a)&&!M(a)){n[i]=a;continue}let e=typeof a==`function`?{class:a}:h({},a);e.config=h(h({},(r=e.config)==null?{}:r),{},{[b]:t,[x]:i}),n[i]=e}return n};function P(r,i){var a,o;let c=y((0,e.useContext)(g),r),[u,d]=(0,e.useState)(null),f=(0,e.useRef)(c);f.current=c;let p=(0,e.useRef)({editor:null,holder:null,destroyTimeout:null,isDestroyed:!1,isEditorReady:!1,depsToken:null}),m=(0,e.useMemo)(()=>({}),i==null?[]:i),_=(0,e.useRef)(c.data),v=(0,e.useRef)((0,n.createEmittedEchoWindow)()),b=(0,e.useRef)(null),x=(0,e.useRef)(c.data),C=(0,e.useRef)(Promise.resolve()),T=(0,e.useRef)(void 0),D=(0,e.useRef)(null),O=(0,e.useRef)(void 0),M=(0,e.useRef)(new Map),P=(0,e.useRef)(new Map);(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&&d(n.editor),()=>{F(n,d)};if(n.editor!==null&&!n.isDestroyed){l(n.editor),E(n.editor);try{n.editor.destroy()}catch(e){}n.editor=null,n.holder=null,n.isDestroyed=!0,n.isEditorReady=!1,d(null)}let r=document.createElement(`div`);n.holder=r,n.isDestroyed=!1,n.isEditorReady=!1,n.depsToken=m;let i=f.current,a=S(),o=i.tools===void 0?void 0:A(i.tools,()=>f.current.tools),c=o===void 0?void 0:N(o,a);D.current=a,O.current=o,M.current=new Map,P.current=new Map(Object.entries((e=i.tools)==null?{}:e).map(([e,t])=>[e,typeof t==`object`&&t?t.toolbox:void 0]));let u=h(h(h({},i),c===void 0?{}:{tools:c}),{},{holder:r,onReady:(...e)=>{var t,n;(t=(n=f.current).onReady)==null||t.call(n,...e)},onChange:(...e)=>{var t,n;(t=(n=f.current).onChange)==null||t.call(n,...e)},onEnter:(...e)=>{var t,n;return(t=(n=f.current).onEnter)==null?void 0:t.call(n,...e)}});i.onSave&&(u.onSave=(...e)=>{var t,n;_.current=e[0],v.current.record(e[0]),(t=(n=f.current).onSave)==null||t.call(n,...e)}),i.onBeforeRender&&(u.onBeforeRender=(...e)=>{var t,n,r;return(t=(n=(r=f.current).onBeforeRender)==null?void 0:n.call(r,...e))==null?e[0]:t}),i.onAfterRender&&(u.onAfterRender=(...e)=>{var t,n;(t=(n=f.current).onAfterRender)==null||t.call(n,...e)});let g=new t.Blok(u);return n.editor=g,x.current=i.data,s(g,r),w(g,a),g.isReady.then(()=>{n.editor===g&&!n.isDestroyed&&(n.isEditorReady=!0,d(g))}).catch(()=>{if(n.editor===g&&!n.isDestroyed){l(g),E(g);try{g.destroy()}catch(e){}n.editor=null,n.holder=null,n.isDestroyed=!0,n.isEditorReady=!1,d(null)}}),()=>{F(n,d)}},[m]),(0,e.useEffect)(()=>{let e=D.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=O.current;for(let[t,o]of Object.entries(r)){var a;if(!j(o))continue;let r=typeof o==`function`||(a=o.config)==null?{}:a,s=i==null?void 0:i[t],c=k(typeof s==`object`&&s?s.config:void 0,r),l=M.current.get(t);if(l!==void 0&&(0,n.deepEqual)(c,l))continue;let u=Object.freeze(c);M.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(!P.current.has(i))continue;let t=typeof a==`object`&&a?a.toolbox:void 0;(0,n.deepEqual)(t,P.current.get(i))||(P.current.set(i,t),(r=e.editor.tools)==null||r.update(i,{toolbox:t}))}});let I=(0,n.normalizeReadOnlyConfig)(c.readOnly).enabled;(0,e.useEffect)(()=>{u!==null&&u.readOnly.set(I)},[u,I]);let{autofocus:L}=c;(0,e.useEffect)(()=>{u===null||!L||u.focus()},[u,L]);let{theme:R}=c;(0,e.useEffect)(()=>{u===null||R===void 0||u.theme.set(R)},[u,R]);let{width:z}=c;(0,e.useEffect)(()=>{u===null||z===void 0||u.width.set(z)},[u,z]);let B=(a=c.style)==null?void 0:a.tokens,V=(0,e.useRef)((o=c.style)==null?void 0:o.tokens);(0,e.useEffect)(()=>{u===null||B===void 0||(0,n.deepEqual)(B,V.current)||(V.current=B,u.tokens.set(B))},[u,B]);let{placeholder:H}=c;(0,e.useEffect)(()=>{u===null||H===void 0||u.placeholder.set(H)},[u,H]);let{data:U}=c;return(0,e.useEffect)(()=>{if(u===null||U===void 0)return;let e=p.current;if(!(e.editor!==u||e.isDestroyed)){if(b.current!==u&&(b.current=u,T.current=void 0,v.current.clear(),(0,n.deepEqual)(U,x.current))){_.current=U;return}(0,n.deepEqual)(U,_.current)||(0,n.deepEqual)(U,T.current)||v.current.matches(U)||(v.current.clear(),T.current=U,C.current=C.current.catch(()=>void 0).then(()=>u.render(U)).then(()=>{_.current=U},()=>{}).then(()=>{T.current===U&&(T.current=void 0)}))}},[u,U]),u}function F(e,t){e.destroyTimeout=setTimeout(()=>{if(e.editor!==null){l(e.editor),E(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,i.createPortal)((0,r.jsx)(I,{children:(0,r.jsx)(n,h({},t.props))}),t.hostEl,e)})})}function R(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 z(e,t){if(e==null)return{};var n,r,i=R(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 B=[`editor`],V=(0,e.forwardRef)(function(t,n){let{editor:i}=t,a=z(t,B),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=c(i);if(e!==void 0)return o.current.appendChild(e),()=>{e.remove()}},[i]);let l=i===null?void 0:T(i);return(0,r.jsx)(`div`,h(h({ref:s},a),{},{children:l===void 0?null:(0,r.jsx)(L,{registry:l})}))}),H=`autofocus.defaultBlock.dataModel.placeholder.sanitizer.hideToolbar.maxHistoryLength.historyDebounceTime.newGroupDelay.globalUndoRedo.tools.data.minHeight.logLevel.readOnly.i18n.link.linkPaste.onBeforePaste.onReady.onChange.onSave.onEnter.onBeforeRender.onAfterRender.inlineToolbar.tunes.style.theme.onThemeChange.scrollToBlock.user.resolveUser.notifierPosition.notifier.width`.split(`.`),U=[`deps`,`onReady`,`onBlocksRendered`,`onBlockRendered`],W=new Set(H),G=(0,e.forwardRef)(function(t,n){let{deps:i,onReady:a,onBlocksRendered:o,onBlockRendered:s}=t,c=z(t,U),l={},u={};for(let e of Object.keys(c)){let t=c[e];W.has(e)?l[e]=t:u[e]=t}let d=P(l,i);(0,e.useImperativeHandle)(n,()=>d,[d]);let f=(0,e.useRef)(a);f.current=a;let p=(0,e.useRef)(null);(0,e.useEffect)(()=>{if(d!==null&&p.current!==d){var e;p.current=d,(e=f.current)==null||e.call(f,d)}},[d]);let m=(0,e.useRef)(o);m.current=o;let g=(0,e.useRef)(s);g.current=s;let _=!!o,v=!!s;return(0,e.useEffect)(()=>{if(d===null)return;let e=[];if(_){let t=e=>{var t;return(t=m.current)==null?void 0:t.call(m,e)};d.on(`blocks:rendered`,t),e.push([`blocks:rendered`,t])}if(v){let t=e=>{var t;return(t=g.current)==null?void 0:t.call(g,e)};d.on(`block:rendered`,t),e.push([`block:rendered`,t])}return()=>{for(let[t,n]of e)d.off(t,n)}},[d,_,v]),(0,r.jsx)(V,h({editor:d},u))}),K=`block changed`;function q(t){let r=(0,e.useRef)(0),i=(0,e.useRef)(t);i.current!==t&&(i.current=t,r.current=0);let a=(0,e.useCallback)(e=>{if(t===null)return()=>void 0;let n=()=>{r.current+=1,e()};return t.on(K,n),()=>t.off(K,n)},[t]),o=(0,e.useCallback)(()=>r.current,[]);return(0,e.useSyncExternalStore)(a,o,o),(0,e.useMemo)(()=>t===null?n.EMPTY_API:(0,n.createBlocksApiForEditor)(t),[t])}var J=[`commit`,`readOnly`],Y=[b,x];function X(t){var o;let s=e=>{if(typeof document>`u`)return null;let t=document.createElement(`div`),n=(0,a.createRoot)(t);(0,i.flushSync)(()=>{n.render(e)});let r=t.innerHTML;return n.unmount(),r===``?null:r},c=()=>{let n={complete:!0},r=t=>{if(!(0,e.isValidElement)(t.icon))return t;let r=s(t.icon);return r===null?(n.complete=!1,t):h(h({},t),{},{icon:r})};return t.toolbox===void 0?{value:void 0,complete:n.complete}:{value:Array.isArray(t.toolbox)?t.toolbox.map(r):r(t.toolbox),complete:n.complete}},l={resolved:!1,value:void 0},u=()=>{if(l.resolved)return l.value;let{value:e,complete:t}=c();return t&&(l.value=e,l.resolved=!0),e},d=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,h({},z(e,J)))}let i=t.component;return(0,r.jsx)(i,h({},e))};return o=class{static get toolbox(){return u()}static get isReadOnlySupported(){return!0}constructor(i){var a,o;this.hostEl=null,this.pendingDispatch=!1,this.commit=e=>{var r;let i=(0,n.fillDefaults)(t.propSchema,h(h({},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 s=(a=i.config)==null?{}:a;this.registry=s[b];let c=s[x];this.toolName=typeof c==`string`?c:void 0;let l={};for(let[e,t]of Object.entries(s))Y.includes(e)||(l[e]=t);this.toolConfig=Object.freeze(l);let u=i.api;this.pointerDrag=()=>{var e;return(u==null||(e=u.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;let d=this.blockApi;this.childrenComponent=function(){let t=(0,e.useRef)(null);return(0,e.useEffect)(()=>{t.current!==null&&(0,n.mountChildBlocks)(t.current,d.getChildren())}),(0,r.jsx)(`div`,{ref:t,[n.DATA_ATTR.nestedBlocks]:``})}}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:d,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})}moved(){var e;(e=t.onMoved)==null||e.call(t,this.blockApi)}removed(){var e,n;(e=this.registry)==null||e.unregister(this.blockApi.id),(n=t.onRemoved)==null||n.call(t,this.blockApi)}destroy(){var e;(e=this.registry)==null||e.unregister(this.blockApi.id)}buildProps(){return{data:this.mirror,commit:this.commit,block:this.blockApi,readOnly:this.readOnly,config:this.toolConfig,BlockChildren:this.childrenComponent}}pushProps(e){let t=this.registry;t!==void 0&&(0,i.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)}},o.__isBlokReactBlock=!0,o}var Z=[b,x],Q=e=>`__blok-inline-tool__:${e}:${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;function $(e){var t;return t=class{static get title(){return e.title}static get titleKey(){return e.titleKey}static get shortcut(){return e.shortcut}static get sanitize(){return e.sanitize}static get isReadOnlySupported(){var t;return(t=e.isReadOnlySupported)!=null&&t}constructor(t){var n;this.active=!1,this.registered=!1;let r=(n=t==null?void 0:t.config)==null?{}:n;this.registry=r[b];let i=r[x];this.toolName=typeof i==`string`?i:e.type,this.portalKey=Q(this.toolName);let a={};for(let[e,t]of Object.entries(r))Z.includes(e)||(a[e]=t);this.toolConfig=Object.freeze(a)}render(){let t=document.createElement(`div`);return t.setAttribute(`data-blok-mutation-free`,`true`),this.registry!==void 0&&(this.registry.register(this.portalKey,{hostEl:t,component:e.component,props:{active:this.active,config:this.toolConfig},toolName:this.toolName}),this.registered=!0),{name:this.toolName,title:e.title,icon:t,onActivate:()=>{if(typeof e.surround!=`function`)return;let t=window.getSelection();!t||t.rangeCount===0||e.surround(t.getRangeAt(0))},isActive:()=>this.refreshActiveState()}}destroy(){var e;this.registered&&(this.registered=!1,(e=this.registry)==null||e.unregister(this.portalKey))}refreshActiveState(){let t=typeof e.checkState==`function`&&!!e.checkState(window.getSelection());if(t!==this.active&&(this.active=t,this.registered)){var n;(n=this.registry)==null||n.setProps(this.portalKey,{active:t})}return t}},t.__isBlokReactInlineTool=!0,t.isInline=!0,t}exports.BLOK_PORTAL_REGISTRY_CONFIG_KEY=b,exports.BLOK_TOOL_NAME_CONFIG_KEY=x,exports.BlockPortalHost=L,exports.BlokContent=V,exports.BlokEditor=G,exports.BlokProvider=_,exports.createBlockPortalRegistry=S,exports.createReactBlock=X,exports.createReactInlineTool=$,exports.useBlocks=q,exports.useBlok=P,exports.useBlokDefaults=v;
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("react-dom"),a=require("@bloklabs/core/view"),o=require("react-dom/client");var s=new WeakMap;function c(e,t){s.set(e,t)}function l(e){return s.get(e)}function u(e){s.delete(e)}function d(e){"@babel/helpers - typeof";return d=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},d(e)}function f(e,t){if(d(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(d(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function p(e){var t=f(e,`string`);return d(t)==`symbol`?t:t+``}function m(e,t,n){return(t=p(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function h(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 g(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?h(Object(n),!0).forEach(function(t){m(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):h(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}var _=(0,e.createContext)({});function v({defaults:e,children:t}){return(0,r.jsx)(_.Provider,{value:e,children:t})}function y(){return(0,e.useContext)(_)}function b(e,t){if(Object.keys(e).length===0)return t;let n=g({},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=g(g({},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:g(g({},i),{},{props:g(g({},i.props),{},{config:o})})),r(a)},unregister(t){if(!e.snapshot.has(t))return;let n=new Map(e.snapshot);n.delete(t),r(n)},setProps(t,n){let i=e.snapshot.get(t);if(i===void 0)return;let a=new Map(e.snapshot);a.set(t,g(g({},i),{},{props:g(g({},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,g(g({},t),{},{props:g(g({},t.props),{},{config:i})}));r(o)},subscribe(e){return t.add(e),()=>{t.delete(e)}},getSnapshot(){return e.snapshot}}},w=new WeakMap;function T(e,t){w.set(e,t)}function E(e){return w.get(e)}function D(e){w.delete(e)}var O=e=>{if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null},k=(e,t)=>t.reduce((e,t)=>{if(Array.isArray(e))return typeof t==`number`?e[t]:void 0;if(O(e))return e[t]},e),A=(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(O(e)){let r=O(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 O(r)?r:{}},j=(e,t)=>{if(!O(e))return e;let n={};for(let[r,i]of Object.entries(e)){if(!O(i)||!O(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=O(a)?a[r]:void 0,s=k(O(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(O(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]=g(g({},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},ee=(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}:g({},a);e.config=g(g({},(r=e.config)==null?{}:r),{},{[x]:t,[S]:i}),n[i]=e}return n};function P(r,i){var a,o;let s=b((0,e.useContext)(_),r),[l,d]=(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),v=(0,e.useRef)((0,n.createEmittedEchoWindow)()),y=(0,e.useRef)(null),x=(0,e.useRef)(s.data),S=(0,e.useRef)(Promise.resolve()),w=(0,e.useRef)(void 0),E=(0,e.useRef)(null),O=(0,e.useRef)(void 0),k=(0,e.useRef)(new Map),N=(0,e.useRef)(new Map);(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&&d(n.editor),()=>{F(n,d)};if(n.editor!==null&&!n.isDestroyed){u(n.editor),D(n.editor);try{n.editor.destroy()}catch(e){}n.editor=null,n.holder=null,n.isDestroyed=!0,n.isEditorReady=!1,d(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:j(i.tools,()=>f.current.tools),s=o===void 0?void 0:ee(o,a);E.current=a,O.current=o,k.current=new Map,N.current=new Map(Object.entries((e=i.tools)==null?{}:e).map(([e,t])=>[e,typeof t==`object`&&t?t.toolbox:void 0]));let l=g(g(g({},i),s===void 0?{}:{tools:s}),{},{holder:r,onReady:(...e)=>{var t,n;(t=(n=f.current).onReady)==null||t.call(n,...e)},onChange:(...e)=>{var t,n;(t=(n=f.current).onChange)==null||t.call(n,...e)},onEnter:(...e)=>{var t,n;return(t=(n=f.current).onEnter)==null?void 0:t.call(n,...e)}});i.onSave&&(l.onSave=(...e)=>{var t,n;h.current=e[0],v.current.record(e[0]),(t=(n=f.current).onSave)==null||t.call(n,...e)}),i.onBeforeRender&&(l.onBeforeRender=(...e)=>{var t,n,r;return(t=(n=(r=f.current).onBeforeRender)==null?void 0:n.call(r,...e))==null?e[0]:t}),i.onAfterRender&&(l.onAfterRender=(...e)=>{var t,n;(t=(n=f.current).onAfterRender)==null||t.call(n,...e)});let _=new t.Blok(l);return n.editor=_,x.current=i.data,c(_,r),T(_,a),_.isReady.then(()=>{n.editor===_&&!n.isDestroyed&&(n.isEditorReady=!0,d(_))}).catch(()=>{if(n.editor===_&&!n.isDestroyed){u(_),D(_);try{_.destroy()}catch(e){}n.editor=null,n.holder=null,n.isDestroyed=!0,n.isEditorReady=!1,d(null)}}),()=>{F(n,d)}},[m]),(0,e.useEffect)(()=>{let e=E.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=O.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=A(typeof s==`object`&&s?s.config:void 0,r),l=k.current.get(t);if(l!==void 0&&(0,n.deepEqual)(c,l))continue;let u=Object.freeze(c);k.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(!N.current.has(i))continue;let t=typeof a==`object`&&a?a.toolbox:void 0;(0,n.deepEqual)(t,N.current.get(i))||(N.current.set(i,t),(r=e.editor.tools)==null||r.update(i,{toolbox:t}))}});let P=typeof s.readOnly==`object`&&s.readOnly!==null,{enabled:I,hideControls:L}=(0,n.normalizeReadOnlyConfig)(s.readOnly);(0,e.useEffect)(()=>{l!==null&&(P?l.readOnly.set(I,{hideControls:L}):l.readOnly.set(I))},[l,I,L,P]);let{hideToolbar:R}=s;(0,e.useEffect)(()=>{l===null||R===void 0||l.toolbar.setHidden(R)},[l,R]);let{inlineToolbar:z}=s;(0,e.useEffect)(()=>{l===null||z===void 0||l.tools.setInlineToolbar(z)},[l,z===void 0?void 0:JSON.stringify(z)]);let{autofocus:B}=s;(0,e.useEffect)(()=>{l===null||!B||l.focus()},[l,B]);let{theme:V}=s;(0,e.useEffect)(()=>{l===null||V===void 0||l.theme.set(V)},[l,V]);let{width:H}=s;(0,e.useEffect)(()=>{l===null||H===void 0||l.width.set(H)},[l,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)(()=>{l===null||U===void 0||(0,n.deepEqual)(U,W.current)||(W.current=U,l.tokens.set(U))},[l,U]);let{i18n:G}=s,K=(0,e.useRef)(s.i18n);(0,e.useEffect)(()=>{if(l===null||G===void 0||(0,n.deepEqual)(G,K.current))return;K.current=G;let{locale:e,messages:t,direction:r}=G;l.i18n.update(g(g(g({},e===void 0?{}:{locale:e}),t===void 0?{}:{messages:t}),r===void 0?{}:{direction:r}))},[l,G]);let{placeholder:q}=s;(0,e.useEffect)(()=>{l===null||q===void 0||l.placeholder.set(q)},[l,q]);let{data:J}=s;return(0,e.useEffect)(()=>{if(l===null||J===void 0)return;let e=p.current;if(!(e.editor!==l||e.isDestroyed)){if(y.current!==l&&(y.current=l,w.current=void 0,v.current.clear(),(0,n.deepEqual)(J,x.current))){h.current=J;return}(0,n.deepEqual)(J,h.current)||(0,n.deepEqual)(J,w.current)||v.current.matches(J)||(v.current.clear(),w.current=J,S.current=S.current.catch(()=>void 0).then(()=>l.render(J)).then(()=>{h.current=J},()=>{}).then(()=>{w.current===J&&(w.current=void 0)}))}},[l,J]),l}function F(e,t){e.destroyTimeout=setTimeout(()=>{if(e.editor!==null){u(e.editor),D(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,i.createPortal)((0,r.jsx)(I,{children:(0,r.jsx)(n,g({},t.props))}),t.hostEl,e)})})}function R(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 z(e,t){if(e==null)return{};var n,r,i=R(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 B=[`editor`],V=(0,e.forwardRef)(function(t,n){let{editor:i}=t,a=z(t,B),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=l(i);if(e!==void 0)return o.current.appendChild(e),()=>{e.remove()}},[i]);let c=i===null?void 0:E(i);return(0,r.jsx)(`div`,g(g({ref:s},a),{},{children:c===void 0?null:(0,r.jsx)(L,{registry:c})}))}),H=`autofocus.defaultBlock.dataModel.placeholder.sanitizer.hideToolbar.maxHistoryLength.historyDebounceTime.newGroupDelay.globalUndoRedo.tools.data.minHeight.logLevel.readOnly.i18n.link.linkPaste.onBeforePaste.onReady.onChange.onSave.onError.onEnter.onBeforeRender.onAfterRender.inlineToolbar.tunes.style.theme.onThemeChange.scrollToBlock.user.resolveUser.notifierPosition.notifier.width`.split(`.`),U=[`deps`,`onReady`,`onBlocksRendered`,`onBlockRendered`],W=new Set(H),G=(0,e.forwardRef)(function(t,n){let{deps:i,onReady:a,onBlocksRendered:o,onBlockRendered:s}=t,c=z(t,U),l={},u={};for(let e of Object.keys(c)){let t=c[e];W.has(e)?l[e]=t:u[e]=t}let d=P(l,i);(0,e.useImperativeHandle)(n,()=>d,[d]);let f=(0,e.useRef)(a);f.current=a;let p=(0,e.useRef)(null);(0,e.useEffect)(()=>{if(d!==null&&p.current!==d){var e;p.current=d,(e=f.current)==null||e.call(f,d)}},[d]);let m=(0,e.useRef)(o);m.current=o;let h=(0,e.useRef)(s);h.current=s;let _=!!o,v=!!s;return(0,e.useEffect)(()=>{if(d===null)return;let e=[];if(_){let t=e=>{var t;return(t=m.current)==null?void 0:t.call(m,e)};d.on(`blocks:rendered`,t),e.push([`blocks:rendered`,t])}if(v){let t=e=>{var t;return(t=h.current)==null?void 0:t.call(h,e)};d.on(`block:rendered`,t),e.push([`block:rendered`,t])}return()=>{for(let[t,n]of e)d.off(t,n)}},[d,_,v]),(0,r.jsx)(V,g({editor:d},u))}),K=`block changed`;function q(t){let r=(0,e.useRef)(0),i=(0,e.useRef)(t);i.current!==t&&(i.current=t,r.current=0);let a=(0,e.useCallback)(e=>{if(t===null)return()=>void 0;let n=()=>{r.current+=1,e()};return t.on(K,n),()=>t.off(K,n)},[t]),o=(0,e.useCallback)(()=>r.current,[]);return(0,e.useSyncExternalStore)(a,o,o),(0,e.useMemo)(()=>t===null?n.EMPTY_API:(0,n.createBlocksApiForEditor)(t),[t])}function J(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 Y=new Set([`area`,`base`,`br`,`col`,`embed`,`hr`,`img`,`input`,`link`,`meta`,`param`,`source`,`track`,`wbr`]),te=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`},ne=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},re=(e,t)=>{let n={key:t};for(let[t,a]of Object.entries(e)){var r;if(t===`style`){n.style=ne(a);continue}if(t===`checked`){n.defaultChecked=!0;continue}if(t===`value`){n.defaultValue=a;continue}if(te.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=re(t.attrs,n);return Y.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,o=n==null?void 0:n.onUnknownBlock;return(0,e.useMemo)(()=>(0,e.createElement)(e.Fragment,null,...Z((0,a.blocksToViewNodes)(t,{schema:r,renderers:i,onUnknownBlock:o}))),[t,r,i,o])},ie=({data:e,schema:t,renderers:n,onUnknownBlock:i,className:a})=>(0,r.jsx)(`div`,{className:a,children:Q(e,{schema:t,renderers:n,onUnknownBlock:i})}),ae=[`commit`,`readOnly`],oe=[x,S];function se(t){var a;let s=e=>{if(typeof document>`u`)return null;let t=document.createElement(`div`),n=(0,o.createRoot)(t);(0,i.flushSync)(()=>{n.render(e)});let r=t.innerHTML;return n.unmount(),r===``?null:r},c=()=>{let n={complete:!0},r=t=>{if(!(0,e.isValidElement)(t.icon))return t;let r=s(t.icon);return r===null?(n.complete=!1,t):g(g({},t),{},{icon:r})};return t.toolbox===void 0?{value:void 0,complete:n.complete}:{value:Array.isArray(t.toolbox)?t.toolbox.map(r):r(t.toolbox),complete:n.complete}},l={resolved:!1,value:void 0},u=()=>{if(l.resolved)return l.value;let{value:e,complete:t}=c();return t&&(l.value=e,l.resolved=!0),e},d=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,g({},z(e,ae)))}let i=t.component;return(0,r.jsx)(i,g({},e))};return a=class{static get toolbox(){return u()}static get isReadOnlySupported(){return!0}constructor(i){var a,o;this.hostEl=null,this.pendingDispatch=!1,this.commit=e=>{var r;let i=(0,n.fillDefaults)(t.propSchema,g(g({},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 s=(a=i.config)==null?{}:a;this.registry=s[x];let c=s[S];this.toolName=typeof c==`string`?c:void 0;let l={};for(let[e,t]of Object.entries(s))oe.includes(e)||(l[e]=t);this.toolConfig=Object.freeze(l);let u=i.api;this.pointerDrag=()=>{var e;return(u==null||(e=u.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;let d=this.blockApi;this.childrenComponent=function(){let t=(0,e.useRef)(null);return(0,e.useEffect)(()=>{t.current!==null&&(0,n.mountChildBlocks)(t.current,d.getChildren())}),(0,r.jsx)(`div`,{ref:t,[n.DATA_ATTR.nestedBlocks]:``})}}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:d,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})}moved(){var e;(e=t.onMoved)==null||e.call(t,this.blockApi)}removed(){var e,n;(e=this.registry)==null||e.unregister(this.blockApi.id),(n=t.onRemoved)==null||n.call(t,this.blockApi)}destroy(){var e;(e=this.registry)==null||e.unregister(this.blockApi.id)}buildProps(){return{data:this.mirror,commit:this.commit,block:this.blockApi,readOnly:this.readOnly,config:this.toolConfig,BlockChildren:this.childrenComponent}}pushProps(e){let t=this.registry;t!==void 0&&(0,i.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)}},a.__isBlokReactBlock=!0,a}var ce=[x,S],le=e=>`__blok-inline-tool__:${e}:${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,$=(0,e.createContext)(null);function ue(){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 title(){return t.title}static get titleKey(){return t.titleKey}static get shortcut(){return t.shortcut}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=le(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=V,exports.BlokEditor=G,exports.BlokProvider=v,exports.BlokView=ie,exports.createBlockPortalRegistry=C,exports.createReactBlock=se,exports.createReactInlineTool=de,exports.useBlocks=q,exports.useBlok=P,exports.useBlokDefaults=y,exports.useBlokReady=J,exports.useBlokView=Q,exports.useInlineTool=ue;