@yoopta/table-of-contents 6.0.0-beta.10

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023-present Akhmed Ibragimov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
File without changes
@@ -0,0 +1,15 @@
1
+ import type { YooEditor, YooptaPathIndex } from '@yoopta/editor';
2
+ import type { TableOfContentsElement, TableOfContentsElementProps } from '../types';
3
+ type TableOfContentsInsertOptions = Partial<TableOfContentsElementProps> & {
4
+ at?: YooptaPathIndex;
5
+ focus?: boolean;
6
+ };
7
+ export type TableOfContentsCommands = {
8
+ buildTableOfContentsElements: (editor: YooEditor, options?: Partial<TableOfContentsElementProps>) => TableOfContentsElement;
9
+ insertTableOfContents: (editor: YooEditor, options?: Partial<TableOfContentsInsertOptions>) => void;
10
+ deleteTableOfContents: (editor: YooEditor, blockId: string) => void;
11
+ updateTableOfContents: (editor: YooEditor, blockId: string, props: Partial<TableOfContentsElementProps>) => void;
12
+ };
13
+ export declare const TableOfContentsCommands: TableOfContentsCommands;
14
+ export {};
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,KAAK,EACV,sBAAsB,EACtB,2BAA2B,EAC5B,MAAM,UAAU,CAAC;AAGlB,KAAK,4BAA4B,GAAG,OAAO,CAAC,2BAA2B,CAAC,GAAG;IACzE,EAAE,CAAC,EAAE,eAAe,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,4BAA4B,EAAE,CAC5B,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,KAC3C,sBAAsB,CAAC;IAC5B,qBAAqB,EAAE,CACrB,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE,OAAO,CAAC,4BAA4B,CAAC,KAC5C,IAAI,CAAC;IACV,qBAAqB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpE,qBAAqB,EAAE,CACrB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,CAAC,2BAA2B,CAAC,KACxC,IAAI,CAAC;CACX,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,uBAoCrC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { TableOfContents } from './plugin/toc-plugin';
2
+ import type { TableOfContentsDepth, TableOfContentsElement, TableOfContentsElementMap, TableOfContentsElementProps } from './types';
3
+ export { TableOfContentsCommands } from './commands';
4
+ export { DEFAULT_HEADING_TYPES, HEADING_TYPE_LEVEL } from './types';
5
+ export { useTableOfContentsItems } from './useTableOfContentsItems';
6
+ export default TableOfContents;
7
+ export type { TableOfContentsDepth, TableOfContentsElement, TableOfContentsElementMap, TableOfContentsElementProps, };
8
+ export type { TableOfContentsEditor, TableOfContentsItem, UseTableOfContentsItemsOptions, } from './useTableOfContentsItems';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,eAAe,eAAe,CAAC;AAE/B,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,2BAA2B,GAC5B,CAAC;AACF,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ import{jsx as e}from"react/jsx-runtime";import{generateId as t,buildBlockData as r,Blocks as n,Elements as o,YooptaPlugin as i}from"@yoopta/editor";import{useState as a,useEffect as s}from"react";"function"==typeof SuppressedError&&SuppressedError;const l={HeadingOne:1,HeadingTwo:2,HeadingThree:3},c=["HeadingOne","HeadingTwo","HeadingThree"],f={buildTableOfContentsElements:(e,r={})=>{var n,o,i,a,s;return{id:t(),type:"table-of-contents",children:[{text:""}],props:{nodeType:"void",depth:null!==(n=r.depth)&&void 0!==n?n:3,title:null!==(o=r.title)&&void 0!==o?o:"Table of Contents",headingTypes:null!==(i=r.headingTypes)&&void 0!==i?i:[...c],showNumbers:null!==(a=r.showNumbers)&&void 0!==a&&a,collapsible:null!==(s=r.collapsible)&&void 0!==s&&s}}},insertTableOfContents:(e,t={})=>{const{at:o,focus:i}=t,a=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}(t,["at","focus"]),s=f.buildTableOfContentsElements(e,a),l=r({value:[s],type:"TableOfContents"});n.insertBlock(e,l.type,{at:o,focus:i,blockData:l})},deleteTableOfContents:(e,t)=>{n.deleteBlock(e,{blockId:t})},updateTableOfContents:(e,t,r)=>{o.updateElement(e,{blockId:t,type:"table-of-contents",props:r})}},p={depth:3,title:"Table of Contents",headingTypes:[...c],showNumbers:!1,collapsible:!1},u=new i({type:"TableOfContents",elements:e("table-of-contents",{render:t=>e("div",Object.assign({},t.attributes,{contentEditable:!1,"data-type":"table-of-contents"},{children:t.children})),props:p,nodeType:"void"}),options:{display:{title:"Table of Contents",description:"Insert a table of contents from document headings"},shortcuts:["toc","table of contents","contents"]},parsers:{html:{deserialize:{nodeNames:["NAV","DIV"],parse:e=>{var r;if(!("table-of-contents"===e.getAttribute("data-type")||e.classList.contains("yoopta-table-of-contents")))return;const n=Number(e.getAttribute("data-depth"))||3,o=null!==(r=e.getAttribute("data-title"))&&void 0!==r?r:p.title,i="true"===e.getAttribute("data-show-numbers"),a="true"===e.getAttribute("data-collapsible"),s=e.getAttribute("data-heading-types"),l=s?s.split(","):[...c];return{id:t(),type:"table-of-contents",props:{nodeType:"void",depth:Math.min(3,Math.max(1,n)),title:o,headingTypes:l,showNumbers:i,collapsible:a},children:[{text:""}]}}},serialize:e=>{const t=e.props||p,{depth:r=3,title:n="",headingTypes:o=c,showNumbers:i=!1,collapsible:a=!1}=t;return`<nav class="yoopta-table-of-contents" ${['data-type="table-of-contents"',`data-depth="${r}"`,`data-title="${(n||"").replace(/"/g,"&quot;")}"`,`data-show-numbers="${i}"`,`data-collapsible="${a}"`,`data-heading-types="${o.join(",")}"`].join(" ")} role="navigation" aria-label="${(n||"Table of contents").replace(/"/g,"&quot;")}"></nav>`}},markdown:{serialize:()=>"[TOC]\n"},email:{serialize:e=>{var t,r;return`<p style="font-weight: 600;">${null!==(r=(null!==(t=e.props)&&void 0!==t?t:p).title)&&void 0!==r?r:"Table of Contents"}</p><p>(Table of contents – view in browser for links)</p>`}}},commands:f});var d={ancestors(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{reverse:r=!1}=t,n=d.levels(e,t);return n=r?n.slice(1):n.slice(0,-1)},common(e,t){for(var r=[],n=0;n<e.length&&n<t.length;n++){var o=e[n];if(o!==t[n])break;r.push(o)}return r},compare(e,t){for(var r=Math.min(e.length,t.length),n=0;n<r;n++){if(e[n]<t[n])return-1;if(e[n]>t[n])return 1}return 0},endsAfter(e,t){var r=e.length-1,n=e.slice(0,r),o=t.slice(0,r),i=e[r],a=t[r];return d.equals(n,o)&&i>a},endsAt(e,t){var r=e.length,n=e.slice(0,r),o=t.slice(0,r);return d.equals(n,o)},endsBefore(e,t){var r=e.length-1,n=e.slice(0,r),o=t.slice(0,r),i=e[r],a=t[r];return d.equals(n,o)&&i<a},equals:(e,t)=>e.length===t.length&&e.every((e,r)=>e===t[r]),hasPrevious:e=>e[e.length-1]>0,isAfter:(e,t)=>1===d.compare(e,t),isAncestor:(e,t)=>e.length<t.length&&0===d.compare(e,t),isBefore:(e,t)=>-1===d.compare(e,t),isChild:(e,t)=>e.length===t.length+1&&0===d.compare(e,t),isCommon:(e,t)=>e.length<=t.length&&0===d.compare(e,t),isDescendant:(e,t)=>e.length>t.length&&0===d.compare(e,t),isParent:(e,t)=>e.length+1===t.length&&0===d.compare(e,t),isPath:e=>Array.isArray(e)&&(0===e.length||"number"==typeof e[0]),isSibling(e,t){if(e.length!==t.length)return!1;var r=e.slice(0,-1),n=t.slice(0,-1);return e[e.length-1]!==t[t.length-1]&&d.equals(r,n)},levels(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{reverse:r=!1}=t,n=[],o=0;o<=e.length;o++)n.push(e.slice(0,o));return r&&n.reverse(),n},next(e){if(0===e.length)throw new Error("Cannot get the next path of a root path [".concat(e,"], because it has no next index."));var t=e[e.length-1];return e.slice(0,-1).concat(t+1)},operationCanTransformPath(e){switch(e.type){case"insert_node":case"remove_node":case"merge_node":case"split_node":case"move_node":return!0;default:return!1}},parent(e){if(0===e.length)throw new Error("Cannot get the parent path of the root path [".concat(e,"]."));return e.slice(0,-1)},previous(e){if(0===e.length)throw new Error("Cannot get the previous path of a root path [".concat(e,"], because it has no previous index."));var t=e[e.length-1];if(t<=0)throw new Error("Cannot get the previous path of a first child path [".concat(e,"] because it would result in a negative index."));return e.slice(0,-1).concat(t-1)},relative(e,t){if(!d.isAncestor(t,e)&&!d.equals(e,t))throw new Error("Cannot get the relative path of [".concat(e,"] inside ancestor [").concat(t,"], because it is not above or equal to the path."));return e.slice(t.length)},transform(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!e)return null;var n=[...e],{affinity:o="forward"}=r;if(0===e.length)return n;switch(t.type){case"insert_node":var{path:i}=t;(d.equals(i,n)||d.endsBefore(i,n)||d.isAncestor(i,n))&&(n[i.length-1]+=1);break;case"remove_node":var{path:a}=t;if(d.equals(a,n)||d.isAncestor(a,n))return null;d.endsBefore(a,n)&&(n[a.length-1]-=1);break;case"merge_node":var{path:s,position:l}=t;d.equals(s,n)||d.endsBefore(s,n)?n[s.length-1]-=1:d.isAncestor(s,n)&&(n[s.length-1]-=1,n[s.length]+=l);break;case"split_node":var{path:c,position:f}=t;if(d.equals(c,n)){if("forward"===o)n[n.length-1]+=1;else if("backward"!==o)return null}else d.endsBefore(c,n)?n[c.length-1]+=1:d.isAncestor(c,n)&&e[c.length]>=f&&(n[c.length-1]+=1,n[c.length]-=f);break;case"move_node":var{path:p,newPath:u}=t;if(d.equals(p,u))return n;if(d.isAncestor(p,n)||d.equals(p,n)){var h=u.slice();return d.endsBefore(p,u)&&p.length<u.length&&(h[p.length-1]-=1),h.concat(n.slice(p.length))}d.isSibling(p,u)&&(d.isAncestor(u,n)||d.equals(u,n))?d.endsBefore(p,n)?n[p.length-1]-=1:n[p.length-1]+=1:d.endsBefore(u,n)||d.equals(u,n)||d.isAncestor(u,n)?(d.endsBefore(p,n)&&(n[p.length-1]-=1),n[u.length-1]+=1):d.endsBefore(p,n)&&(d.equals(u,n)&&(n[u.length-1]+=1),n[p.length-1]-=1)}return n}};function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function v(e){var t=function(e,t){if("object"!==h(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==h(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===h(t)?t:String(t)}function g(e,t,r){return(t=v(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function y(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var b=["anchor","focus"];function m(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}var O={edges(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{reverse:r=!1}=t,{anchor:n,focus:o}=e;return O.isBackward(e)===r?[n,o]:[o,n]},end(e){var[,t]=O.edges(e);return t},equals:(e,t)=>V.equals(e.anchor,t.anchor)&&V.equals(e.focus,t.focus),surrounds(e,t){var r=O.intersection(e,t);return!!r&&O.equals(r,t)},includes(e,t){if(O.isRange(t)){if(O.includes(e,t.anchor)||O.includes(e,t.focus))return!0;var[r,n]=O.edges(e),[o,i]=O.edges(t);return V.isBefore(r,o)&&V.isAfter(n,i)}var[a,s]=O.edges(e),l=!1,c=!1;return V.isPoint(t)?(l=V.compare(t,a)>=0,c=V.compare(t,s)<=0):(l=d.compare(t,a.path)>=0,c=d.compare(t,s.path)<=0),l&&c},intersection(e,t){var r=y(e,b),[n,o]=O.edges(e),[i,a]=O.edges(t),s=V.isBefore(n,i)?i:n,l=V.isBefore(o,a)?o:a;return V.isBefore(l,s)?null:function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?m(Object(r),!0).forEach(function(t){g(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):m(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}({anchor:s,focus:l},r)},isBackward(e){var{anchor:t,focus:r}=e;return V.isAfter(t,r)},isCollapsed(e){var{anchor:t,focus:r}=e;return V.equals(t,r)},isExpanded:e=>!O.isCollapsed(e),isForward:e=>!O.isBackward(e),isRange:e=>C(e)&&V.isPoint(e.anchor)&&V.isPoint(e.focus),*points(e){yield[e.anchor,"anchor"],yield[e.focus,"focus"]},start(e){var[t]=O.edges(e);return t},transform(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(null===e)return null;var n,o,{affinity:i="inward"}=r;if("inward"===i){var a=O.isCollapsed(e);O.isForward(e)?(n="forward",o=a?n:"backward"):(n="backward",o=a?n:"forward")}else"outward"===i?O.isForward(e)?(n="backward",o="forward"):(n="forward",o="backward"):(n=i,o=i);var s=V.transform(e.anchor,t,{affinity:n}),l=V.transform(e.focus,t,{affinity:o});return s&&l?{anchor:s,focus:l}:null}},w=function(e){var{deep:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return!!C(e)&&("function"!=typeof e.apply&&(t?T.isNodeList(e.children):Array.isArray(e.children)))},P={isAncestor(e){var{deep:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return C(e)&&T.isNodeList(e.children,{deep:t})},isElement:w,isElementList(e){var{deep:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Array.isArray(e)&&e.every(e=>P.isElement(e,{deep:t}))},isElementProps:e=>void 0!==e.children,isElementType:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"type";return w(e)&&e[r]===t},matches(e,t){for(var r in t)if("children"!==r&&e[r]!==t[r])return!1;return!0}},x=["children"],j=["text"];function E(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function k(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?E(Object(r),!0).forEach(function(t){g(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):E(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var T={ancestor(e,t){var r=T.get(e,t);if(H.isText(r))throw new Error("Cannot get the ancestor node at path [".concat(t,"] because it refers to a text node instead: ").concat(M.stringify(r)));return r},ancestors(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return function*(){for(var n of d.ancestors(t,r)){var o=[T.ancestor(e,n),n];yield o}}()},child(e,t){if(H.isText(e))throw new Error("Cannot get the child of a text node: ".concat(M.stringify(e)));var r=e.children[t];if(null==r)throw new Error("Cannot get child at index `".concat(t,"` in node: ").concat(M.stringify(e)));return r},children(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return function*(){for(var{reverse:n=!1}=r,o=T.ancestor(e,t),{children:i}=o,a=n?i.length-1:0;n?a>=0:a<i.length;){var s=T.child(o,a),l=t.concat(a);yield[s,l],a=n?a-1:a+1}}()},common(e,t,r){var n=d.common(t,r);return[T.get(e,n),n]},descendant(e,t){var r=T.get(e,t);if(B.isEditor(r))throw new Error("Cannot get the descendant node at path [".concat(t,"] because it refers to the root editor node instead: ").concat(M.stringify(r)));return r},descendants(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function*(){for(var[r,n]of T.nodes(e,t))0!==n.length&&(yield[r,n])}()},elements(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function*(){for(var[r,n]of T.nodes(e,t))P.isElement(r)&&(yield[r,n])}()},extractProps:e=>P.isAncestor(e)?y(e,x):y(e,j),first(e,t){for(var r=t.slice(),n=T.get(e,r);n&&!H.isText(n)&&0!==n.children.length;)n=n.children[0],r.push(0);return[n,r]},fragment(e,t){var r={children:e.children},[n,o]=O.edges(t),i=T.nodes(r,{reverse:!0,pass:e=>{var[,r]=e;return!O.includes(t,r)}}),a=function(){if(!O.includes(t,s)){var e=s[s.length-1];X(r,d.parent(s),t=>Q(t,e,1))}d.equals(s,o.path)&&Y(r,s,e=>{var t=e.text.slice(0,o.offset);return k(k({},e),{},{text:t})}),d.equals(s,n.path)&&Y(r,s,e=>{var t=e.text.slice(n.offset);return k(k({},e),{},{text:t})})};for(var[,s]of i)a();return r.children},get(e,t){var r=T.getIf(e,t);if(void 0===r)throw new Error("Cannot find a descendant at path [".concat(t,"] in node: ").concat(M.stringify(e)));return r},getIf(e,t){for(var r=e,n=0;n<t.length;n++){var o=t[n];if(H.isText(r)||!r.children[o])return;r=r.children[o]}return r},has(e,t){for(var r=e,n=0;n<t.length;n++){var o=t[n];if(H.isText(r)||!r.children[o])return!1;r=r.children[o]}return!0},isNode(e){var{deep:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return H.isText(e)||P.isElement(e,{deep:t})||B.isEditor(e,{deep:t})},isNodeList(e){var{deep:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Array.isArray(e)&&e.every(e=>T.isNode(e,{deep:t}))},last(e,t){for(var r=t.slice(),n=T.get(e,r);n&&!H.isText(n)&&0!==n.children.length;){var o=n.children.length-1;n=n.children[o],r.push(o)}return[n,r]},leaf(e,t){var r=T.get(e,t);if(!H.isText(r))throw new Error("Cannot get the leaf node at path [".concat(t,"] because it refers to a non-leaf node: ").concat(M.stringify(r)));return r},levels(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return function*(){for(var n of d.levels(t,r)){var o=T.get(e,n);yield[o,n]}}()},matches:(e,t)=>P.isElement(e)&&P.isElementProps(t)&&P.matches(e,t)||H.isText(e)&&H.isTextProps(t)&&H.matches(e,t),nodes(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function*(){for(var{pass:r,reverse:n=!1}=t,{from:o=[],to:i}=t,a=new Set,s=[],l=e;!i||!(n?d.isBefore(s,i):d.isAfter(s,i));)if(a.has(l)||(yield[l,s]),a.has(l)||H.isText(l)||0===l.children.length||null!=r&&!1!==r([l,s])){if(0===s.length)break;if(!n){var c=d.next(s);if(T.has(e,c)){s=c,l=T.get(e,s);continue}}if(n&&0!==s[s.length-1])s=d.previous(s),l=T.get(e,s);else s=d.parent(s),l=T.get(e,s),a.add(l)}else{a.add(l);var f=n?l.children.length-1:0;d.isAncestor(s,o)&&(f=o[s.length]),s=s.concat(f),l=T.get(e,s)}}()},parent(e,t){var r=d.parent(t),n=T.get(e,r);if(H.isText(n))throw new Error("Cannot get the parent of path [".concat(t,"] because it does not exist in the root."));return n},string:e=>H.isText(e)?e.text:e.children.map(T.string).join(""),texts(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function*(){for(var[r,n]of T.nodes(e,t))H.isText(r)&&(yield[r,n])}()}};function _(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function N(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?_(Object(r),!0).forEach(function(t){g(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):_(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var S,A={isNodeOperation:e=>A.isOperation(e)&&e.type.endsWith("_node"),isOperation(e){if(!C(e))return!1;switch(e.type){case"insert_node":case"remove_node":return d.isPath(e.path)&&T.isNode(e.node);case"insert_text":case"remove_text":return"number"==typeof e.offset&&"string"==typeof e.text&&d.isPath(e.path);case"merge_node":return"number"==typeof e.position&&d.isPath(e.path)&&C(e.properties);case"move_node":return d.isPath(e.path)&&d.isPath(e.newPath);case"set_node":return d.isPath(e.path)&&C(e.properties)&&C(e.newProperties);case"set_selection":return null===e.properties&&O.isRange(e.newProperties)||null===e.newProperties&&O.isRange(e.properties)||C(e.properties)&&C(e.newProperties);case"split_node":return d.isPath(e.path)&&"number"==typeof e.position&&C(e.properties);default:return!1}},isOperationList:e=>Array.isArray(e)&&e.every(e=>A.isOperation(e)),isSelectionOperation:e=>A.isOperation(e)&&e.type.endsWith("_selection"),isTextOperation:e=>A.isOperation(e)&&e.type.endsWith("_text"),inverse(e){switch(e.type){case"insert_node":return N(N({},e),{},{type:"remove_node"});case"insert_text":return N(N({},e),{},{type:"remove_text"});case"merge_node":return N(N({},e),{},{type:"split_node",path:d.previous(e.path)});case"move_node":var{newPath:t,path:r}=e;if(d.equals(t,r))return e;if(d.isSibling(r,t))return N(N({},e),{},{path:t,newPath:r});var n=d.transform(r,e),o=d.transform(d.next(r),e);return N(N({},e),{},{path:n,newPath:o});case"remove_node":return N(N({},e),{},{type:"insert_node"});case"remove_text":return N(N({},e),{},{type:"insert_text"});case"set_node":var{properties:i,newProperties:a}=e;return N(N({},e),{},{properties:a,newProperties:i});case"set_selection":var{properties:s,newProperties:l}=e;return N(N({},e),{},null==s?{properties:l,newProperties:null}:null==l?{properties:null,newProperties:s}:{properties:l,newProperties:s});case"split_node":return N(N({},e),{},{type:"merge_node",path:d.next(e.path)})}}},C=e=>"object"==typeof e&&null!==e,q=(e,t)=>{for(var r in e){var n=e[r],o=t[r];if(Array.isArray(n)&&Array.isArray(o)){if(n.length!==o.length)return!1;for(var i=0;i<n.length;i++)if(n[i]!==o[i])return!1}else if(C(n)&&C(o)){if(!q(n,o))return!1}else if(n!==o)return!1}for(var a in t)if(void 0===e[a]&&void 0!==t[a])return!1;return!0},D=e=>e.selection?e.selection:e.children.length>0?B.end(e,[]):[0];!function(e){e[e.None=0]="None",e[e.Extend=1]="Extend",e[e.ZWJ=2]="ZWJ",e[e.RI=4]="RI",e[e.Prepend=8]="Prepend",e[e.SpacingMark=16]="SpacingMark",e[e.L=32]="L",e[e.V=64]="V",e[e.T=128]="T",e[e.LV=256]="LV",e[e.LVT=512]="LVT",e[e.ExtPict=1024]="ExtPict",e[e.Any=2048]="Any"}(S||(S={})),S.L,S.L,S.V,S.LV,S.LVT,S.LV,S.V,S.V,S.T,S.LVT,S.T,S.T,S.Any,S.Extend,S.ZWJ,S.Any,S.SpacingMark,S.Prepend,S.Any,S.ZWJ,S.ExtPict,S.RI,S.RI;var B={above:(e,t)=>e.above(t),addMark(e,t,r){e.addMark(t,r)},after:(e,t,r)=>e.after(t,r),before:(e,t,r)=>e.before(t,r),deleteBackward(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{unit:r="character"}=t;e.deleteBackward(r)},deleteForward(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{unit:r="character"}=t;e.deleteForward(r)},deleteFragment(e,t){e.deleteFragment(t)},edges:(e,t)=>e.edges(t),elementReadOnly(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.elementReadOnly(t)},end:(e,t)=>e.end(t),first:(e,t)=>e.first(t),fragment:(e,t)=>e.fragment(t),hasBlocks:(e,t)=>e.hasBlocks(t),hasInlines:(e,t)=>e.hasInlines(t),hasPath:(e,t)=>e.hasPath(t),hasTexts:(e,t)=>e.hasTexts(t),insertBreak(e){e.insertBreak()},insertFragment(e,t,r){e.insertFragment(t,r)},insertNode(e,t){e.insertNode(t)},insertSoftBreak(e){e.insertSoftBreak()},insertText(e,t){e.insertText(t)},isBlock:(e,t)=>e.isBlock(t),isEdge:(e,t,r)=>e.isEdge(t,r),isEditor:e=>function(e){var{deep:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!C(e))return!1;var r="function"==typeof e.addMark&&"function"==typeof e.apply&&"function"==typeof e.deleteFragment&&"function"==typeof e.insertBreak&&"function"==typeof e.insertSoftBreak&&"function"==typeof e.insertFragment&&"function"==typeof e.insertNode&&"function"==typeof e.insertText&&"function"==typeof e.isElementReadOnly&&"function"==typeof e.isInline&&"function"==typeof e.isSelectable&&"function"==typeof e.isVoid&&"function"==typeof e.normalizeNode&&"function"==typeof e.onChange&&"function"==typeof e.removeMark&&"function"==typeof e.getDirtyPaths&&(null===e.marks||C(e.marks))&&(null===e.selection||O.isRange(e.selection))&&(!t||T.isNodeList(e.children))&&A.isOperationList(e.operations);return r}(e),isElementReadOnly:(e,t)=>e.isElementReadOnly(t),isEmpty:(e,t)=>e.isEmpty(t),isEnd:(e,t,r)=>e.isEnd(t,r),isInline:(e,t)=>e.isInline(t),isNormalizing:e=>e.isNormalizing(),isSelectable:(e,t)=>e.isSelectable(t),isStart:(e,t,r)=>e.isStart(t,r),isVoid:(e,t)=>e.isVoid(t),last:(e,t)=>e.last(t),leaf:(e,t,r)=>e.leaf(t,r),levels:(e,t)=>e.levels(t),marks:e=>e.getMarks(),next:(e,t)=>e.next(t),node:(e,t,r)=>e.node(t,r),nodes:(e,t)=>e.nodes(t),normalize(e,t){e.normalize(t)},parent:(e,t,r)=>e.parent(t,r),path:(e,t,r)=>e.path(t,r),pathRef:(e,t,r)=>e.pathRef(t,r),pathRefs:e=>e.pathRefs(),point:(e,t,r)=>e.point(t,r),pointRef:(e,t,r)=>e.pointRef(t,r),pointRefs:e=>e.pointRefs(),positions:(e,t)=>e.positions(t),previous:(e,t)=>e.previous(t),range:(e,t,r)=>e.range(t,r),rangeRef:(e,t,r)=>e.rangeRef(t,r),rangeRefs:e=>e.rangeRefs(),removeMark(e,t){e.removeMark(t)},setNormalizing(e,t){e.setNormalizing(t)},start:(e,t)=>e.start(t),string:(e,t,r)=>e.string(t,r),unhangRange:(e,t,r)=>e.unhangRange(t,r),void:(e,t)=>e.void(t),withoutNormalizing(e,t){e.withoutNormalizing(t)},shouldMergeNodesRemovePrevNode:(e,t,r)=>e.shouldMergeNodesRemovePrevNode(t,r)};function R(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function L(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?R(Object(r),!0).forEach(function(t){g(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):R(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var V={compare(e,t){var r=d.compare(e.path,t.path);return 0===r?e.offset<t.offset?-1:e.offset>t.offset?1:0:r},isAfter:(e,t)=>1===V.compare(e,t),isBefore:(e,t)=>-1===V.compare(e,t),equals:(e,t)=>e.offset===t.offset&&d.equals(e.path,t.path),isPoint:e=>C(e)&&"number"==typeof e.offset&&d.isPath(e.path),transform(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(null===e)return null;var{affinity:n="forward"}=r,{path:o,offset:i}=e;switch(t.type){case"insert_node":case"move_node":o=d.transform(o,t,r);break;case"insert_text":d.equals(t.path,o)&&(t.offset<i||t.offset===i&&"forward"===n)&&(i+=t.text.length);break;case"merge_node":d.equals(t.path,o)&&(i+=t.position),o=d.transform(o,t,r);break;case"remove_text":d.equals(t.path,o)&&t.offset<=i&&(i-=Math.min(i-t.offset,t.text.length));break;case"remove_node":if(d.equals(t.path,o)||d.isAncestor(t.path,o))return null;o=d.transform(o,t,r);break;case"split_node":if(d.equals(t.path,o)){if(t.position===i&&null==n)return null;(t.position<i||t.position===i&&"forward"===n)&&(i-=t.position,o=d.transform(o,t,L(L({},r),{},{affinity:"forward"})))}else o=d.transform(o,t,r);break;default:return e}return{path:o,offset:i}}},I=void 0,M={setScrubber(e){I=e},stringify:e=>JSON.stringify(e,I)},z=["text"],F=["anchor","focus","merge"];function $(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function W(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?$(Object(r),!0).forEach(function(t){g(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):$(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var H={equals(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{loose:n=!1}=r;function o(e){return y(e,z)}return q(n?o(e):e,n?o(t):t)},isText:e=>C(e)&&"string"==typeof e.text,isTextList:e=>Array.isArray(e)&&e.every(e=>H.isText(e)),isTextProps:e=>void 0!==e.text,matches(e,t){for(var r in t)if("text"!==r&&(!e.hasOwnProperty(r)||e[r]!==t[r]))return!1;return!0},decorations(e,t){var r=[{leaf:W({},e)}];for(var n of t){var{anchor:o,focus:i,merge:a}=n,s=y(n,F),[l,c]=O.edges(n),f=[],p=0,u=l.offset,d=c.offset,h=null!=a?a:Object.assign;for(var{leaf:v}of r){var{length:g}=v.text,b=p;if(p+=g,u<=b&&p<=d)h(v,s),f.push({leaf:v});else if(u!==d&&(u===p||d===b)||u>p||d<b||d===b&&0!==b)f.push({leaf:v});else{var m=v,w=void 0,P=void 0;if(d<p){var x=d-b;P={leaf:W(W({},m),{},{text:m.text.slice(x)})},m=W(W({},m),{},{text:m.text.slice(0,x)})}if(u>b){var j=u-b;w={leaf:W(W({},m),{},{text:m.text.slice(0,j)})},m=W(W({},m),{},{text:m.text.slice(j)})}h(m,s),w&&f.push(w),f.push({leaf:m}),P&&f.push(P)}}r=f}if(r.length>1){var E=0;for(var[k,T]of r.entries()){var _=E,N=_+T.leaf.text.length,S={start:_,end:N};0===k&&(S.isFirst=!0),k===r.length-1&&(S.isLast=!0),T.position=S,E=N}}return r}};function J(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function Z(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?J(Object(r),!0).forEach(function(t){g(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):J(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var G=function(e,t){for(var r=arguments.length,n=new Array(r>2?r-2:0),o=2;o<r;o++)n[o-2]=arguments[o];return[...e.slice(0,t),...n,...e.slice(t)]},K=function(e,t,r){for(var n=arguments.length,o=new Array(n>3?n-3:0),i=3;i<n;i++)o[i-3]=arguments[i];return[...e.slice(0,t),...o,...e.slice(t+r)]},Q=K,U=(e,t,r)=>{if(0===t.length)throw new Error("Cannot modify the editor");for(var n=T.get(e,t),o=t.slice(),i=r(n);o.length>1;){var a=o.pop(),s=T.get(e,o);i=Z(Z({},s),{},{children:K(s.children,a,1,i)})}var l=o.pop();e.children=K(e.children,l,1,i)},X=(e,t,r)=>{0===t.length?e.children=r(e.children):U(e,t,e=>{if(H.isText(e))throw new Error("Cannot get the element at path [".concat(t,"] because it refers to a leaf node: ").concat(M.stringify(e)));return Z(Z({},e),{},{children:r(e.children)})})},Y=(e,t,r)=>U(e,t,e=>{if(!H.isText(e))throw new Error("Cannot get the leaf node at path [".concat(t,"] because it refers to a non-leaf node: ").concat(M.stringify(e)));return r(e)});function ee(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function te(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ee(Object(r),!0).forEach(function(t){g(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ee(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var re={transform(e,t){var r=!1;switch(t.type){case"insert_node":var{path:n,node:o}=t;X(e,d.parent(n),e=>{var t=n[n.length-1];if(t>e.length)throw new Error('Cannot apply an "insert_node" operation at path ['.concat(n,"] because the destination is past the end of the node."));return G(e,t,o)}),r=!0;break;case"insert_text":var{path:i,offset:a,text:s}=t;if(0===s.length)break;Y(e,i,e=>{var t=e.text.slice(0,a),r=e.text.slice(a);return te(te({},e),{},{text:t+s+r})}),r=!0;break;case"merge_node":var{path:l}=t,c=l[l.length-1],f=d.previous(l),p=f[f.length-1];X(e,d.parent(l),e=>{var t,r=e[c],n=e[p];if(H.isText(r)&&H.isText(n))t=te(te({},n),{},{text:n.text+r.text});else{if(H.isText(r)||H.isText(n))throw new Error('Cannot apply a "merge_node" operation at path ['.concat(l,"] to nodes of different interfaces: ").concat(M.stringify(r)," ").concat(M.stringify(n)));t=te(te({},n),{},{children:n.children.concat(r.children)})}return K(e,p,2,t)}),r=!0;break;case"move_node":var{path:u,newPath:h}=t,v=u[u.length-1];if(d.isAncestor(u,h))throw new Error("Cannot move a path [".concat(u,"] to new path [").concat(h,"] because the destination is inside itself."));var g=T.get(e,u);X(e,d.parent(u),e=>Q(e,v,1));var y=d.transform(u,t),b=y[y.length-1];X(e,d.parent(y),e=>G(e,b,g)),r=!0;break;case"remove_node":var{path:m}=t,w=m[m.length-1];if(X(e,d.parent(m),e=>Q(e,w,1)),e.selection){var P=te({},e.selection);for(var[x,j]of O.points(P)){var E=V.transform(x,t);if(null!=P&&null!=E)P[j]=E;else{var k=void 0,_=void 0;for(var[N,S]of T.texts(e)){if(-1!==d.compare(S,m)){_=[N,S];break}k=[N,S]}var A=!1;k&&_&&(A=!d.isSibling(k[1],m)&&(!!d.equals(_[1],m)||d.common(k[1],m).length<d.common(_[1],m).length)),k&&!A?P[j]={path:k[1],offset:k[0].text.length}:_?P[j]={path:_[1],offset:0}:P=null}}P&&O.equals(P,e.selection)||(e.selection=P)}break;case"remove_text":var{path:C,offset:q,text:D}=t;if(0===D.length)break;Y(e,C,e=>{var t=e.text.slice(0,q),r=e.text.slice(q+D.length);return te(te({},e),{},{text:t+r})}),r=!0;break;case"set_node":var{path:B,properties:R,newProperties:L}=t;if(0===B.length)throw new Error("Cannot set properties on the root node!");U(e,B,e=>{var t=te({},e);for(var r in L){if("children"===r||"text"===r)throw new Error('Cannot set the "'.concat(r,'" property of nodes!'));var n=L[r];null==n?delete t[r]:t[r]=n}for(var o in R)L.hasOwnProperty(o)||delete t[o];return t});break;case"set_selection":var{newProperties:I}=t;if(null==I){e.selection=null;break}if(null==e.selection){if(!O.isRange(I))throw new Error('Cannot apply an incomplete "set_selection" operation properties '.concat(M.stringify(I)," when there is no current selection."));e.selection=te({},I);break}var z=te({},e.selection);for(var F in I){var $=I[F];if(null==$){if("anchor"===F||"focus"===F)throw new Error('Cannot remove the "'.concat(F,'" selection property'));delete z[F]}else z[F]=$}e.selection=z;break;case"split_node":var{path:W,position:J,properties:Z}=t,ee=W[W.length-1];if(0===W.length)throw new Error('Cannot apply a "split_node" operation at path ['.concat(W,"] because the root node cannot be split."));X(e,d.parent(W),e=>{var t,r,n=e[ee];if(H.isText(n)){var o=n.text.slice(0,J),i=n.text.slice(J);t=te(te({},n),{},{text:o}),r=te(te({},Z),{},{text:i})}else{var a=n.children.slice(0,J),s=n.children.slice(J);t=te(te({},n),{},{children:a}),r=te(te({},Z),{},{children:s})}return K(e,ee,1,t,r)}),r=!0}if(r&&e.selection){var re=te({},e.selection);for(var[ne,oe]of O.points(re))re[oe]=V.transform(ne,t);O.equals(re,e.selection)||(e.selection=re)}}},ne={insertNodes(e,t,r){e.insertNodes(t,r)},liftNodes(e,t){e.liftNodes(t)},mergeNodes(e,t){e.mergeNodes(t)},moveNodes(e,t){e.moveNodes(t)},removeNodes(e,t){e.removeNodes(t)},setNodes(e,t,r){e.setNodes(t,r)},splitNodes(e,t){e.splitNodes(t)},unsetNodes(e,t,r){e.unsetNodes(t,r)},unwrapNodes(e,t){e.unwrapNodes(t)},wrapNodes(e,t,r){e.wrapNodes(t,r)}},oe={collapse(e,t){e.collapse(t)},deselect(e){e.deselect()},move(e,t){e.move(t)},select(e,t){e.select(t)},setPoint(e,t,r){e.setPoint(t,r)},setSelection(e,t){e.setSelection(t)}},ie={delete(e,t){e.delete(t)},insertFragment(e,t,r){e.insertFragment(t,r)},insertText(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};B.withoutNormalizing(e,()=>{var{voids:n=!1}=r,{at:o=D(e)}=r;if(d.isPath(o)&&(o=B.range(e,o)),O.isRange(o))if(O.isCollapsed(o))o=o.anchor;else{var i=O.end(o);if(!n&&B.void(e,{at:i}))return;var a=O.start(o),s=B.pointRef(e,a),l=B.pointRef(e,i);le.delete(e,{at:o,voids:n});var c=s.unref(),f=l.unref();o=c||f,le.setSelection(e,{anchor:o,focus:o})}if(!(!n&&B.void(e,{at:o})||B.elementReadOnly(e,{at:o}))){var{path:p,offset:u}=o;t.length>0&&e.apply({type:"insert_text",path:p,offset:u,text:t})}})}};function ae(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function se(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ae(Object(r),!0).forEach(function(t){g(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ae(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var le=se(se(se(se({},re),ne),oe),ie);function ce(e){return e.map(e=>{var t;return H.isText(e)?e.text:P.isElement(e)&&(null===(t=e.children)||void 0===t?void 0:t.length)?ce(e.children):""}).join("")}function fe(e,t,r){const{depth:n=3,headingTypes:o=c}=r;return Object.keys(e).filter(e=>e!==t).map(t=>e[t]).filter(e=>Boolean(null==e?void 0:e.meta)).sort((e,t)=>e.meta.order-t.meta.order).filter(e=>{var t;if(!o.includes(e.type))return!1;return(null!==(t=l[e.type])&&void 0!==t?t:99)<=n}).map(e=>{var t,r,n;const o=null===(t=e.value)||void 0===t?void 0:t[0],i=o&&P.isElement(o)?o:null,a=(null===(r=null==i?void 0:i.children)||void 0===r?void 0:r.length)?ce(i.children):"",s=null!==(n=l[e.type])&&void 0!==n?n:1;return{id:e.id,text:a,level:s}})}function pe(e,t,r){const{depth:n=3,headingTypes:o=c}=r,[i,l]=a([]);return s(()=>{if(!e)return;const r=()=>{var r,i,a;const s=null!==(a=null!==(i=null===(r=e.getEditorValue)||void 0===r?void 0:r.call(e))&&void 0!==i?i:e.children)&&void 0!==a?a:{};l(fe(s,t,{depth:n,headingTypes:o}))};return r(),e.on("change",r),()=>{e.off("change",r)}},[e,t,n,o]),i}export{c as DEFAULT_HEADING_TYPES,l as HEADING_TYPE_LEVEL,f as TableOfContentsCommands,u as default,pe as useTableOfContentsItems};
@@ -0,0 +1,5 @@
1
+ import { YooptaPlugin } from '@yoopta/editor';
2
+ import type { TableOfContentsElementMap } from '../types';
3
+ declare const TableOfContents: YooptaPlugin<TableOfContentsElementMap, Record<string, unknown>>;
4
+ export { TableOfContents };
5
+ //# sourceMappingURL=toc-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toc-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/toc-plugin.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAc,MAAM,gBAAgB,CAAC;AAG1D,OAAO,KAAK,EACV,yBAAyB,EAE1B,MAAM,UAAU,CAAC;AAkBlB,QAAA,MAAM,eAAe,kEAoFnB,CAAC;AAEH,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { SlateElement } from '@yoopta/editor';
2
+ export type TableOfContentsDepth = 1 | 2 | 3;
3
+ export type TableOfContentsElementProps = {
4
+ /** Max heading level to show: 1 = H1 only, 2 = H1+H2, 3 = H1+H2+H3 */
5
+ depth: TableOfContentsDepth;
6
+ /** Optional title above the list (e.g. "Table of Contents") */
7
+ title?: string;
8
+ /** Block types to treat as headings (e.g. ['HeadingOne', 'HeadingTwo', 'HeadingThree']) */
9
+ headingTypes: string[];
10
+ /** Show numbered list (1. 2. 3.) */
11
+ showNumbers: boolean;
12
+ /** Allow collapsing the TOC block */
13
+ collapsible?: boolean;
14
+ };
15
+ export type TableOfContentsElement = SlateElement<'table-of-contents', TableOfContentsElementProps>;
16
+ export type TableOfContentsElementMap = {
17
+ 'table-of-contents': TableOfContentsElement;
18
+ };
19
+ /** Heading level for known Yoopta heading types */
20
+ export declare const HEADING_TYPE_LEVEL: Record<string, number>;
21
+ export declare const DEFAULT_HEADING_TYPES: string[];
22
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,MAAM,oBAAoB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE7C,MAAM,MAAM,2BAA2B,GAAG;IACxC,sEAAsE;IACtE,KAAK,EAAE,oBAAoB,CAAC;IAC5B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAC/C,mBAAmB,EACnB,2BAA2B,CAC5B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,mBAAmB,EAAE,sBAAsB,CAAC;CAC7C,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIrD,CAAC;AAEF,eAAO,MAAM,qBAAqB,UAA+C,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { YooEditor } from '@yoopta/editor';
2
+ import type { TableOfContentsElementProps } from './types';
3
+ export type TableOfContentsItem = {
4
+ id: string;
5
+ text: string;
6
+ level: number;
7
+ };
8
+ export type UseTableOfContentsItemsOptions = Pick<TableOfContentsElementProps, 'depth' | 'headingTypes'>;
9
+ /**
10
+ * Returns TOC items (headings) from the editor content, updated on every change.
11
+ * Subscribes to editor.on('change') so the list stays in sync.
12
+ * Use this in theme components to render the table of contents.
13
+ *
14
+ * @param editor - Yoopta editor instance (e.g. from useYooptaEditor())
15
+ * @param blockId - Current TOC block id (to exclude it from content)
16
+ * @param options - depth, headingTypes from the TOC element props
17
+ */
18
+ export declare function useTableOfContentsItems(editor: YooEditor | null, blockId: string, options: UseTableOfContentsItemsOptions): TableOfContentsItem[];
19
+ //# sourceMappingURL=useTableOfContentsItems.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTableOfContentsItems.d.ts","sourceRoot":"","sources":["../src/useTableOfContentsItems.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAsB,MAAM,gBAAgB,CAAC;AAGpE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAK3D,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,IAAI,CAC/C,2BAA2B,EAC3B,OAAO,GAAG,cAAc,CACzB,CAAC;AAgCF;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,GAAG,IAAI,EACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,8BAA8B,GACtC,mBAAmB,EAAE,CAqBvB"}
@@ -0,0 +1,7 @@
1
+ import type { Descendant } from 'slate';
2
+ /**
3
+ * Extracts plain text from Slate nodes (no HTML).
4
+ * Use this for TOC labels instead of serializeTextNodes (which returns HTML).
5
+ */
6
+ export declare function getPlainTextFromNodes(nodes: Descendant[]): string;
7
+ //# sourceMappingURL=getPlainTextFromNodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPlainTextFromNodes.d.ts","sourceRoot":"","sources":["../../src/utils/getPlainTextFromNodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGxC;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAUjE"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@yoopta/table-of-contents",
3
+ "version": "6.0.0-beta.10",
4
+ "description": "Table of Contents plugin for Yoopta Editor",
5
+ "author": "Darginec05 <devopsbanda@gmail.com>",
6
+ "homepage": "https://github.com/Darginec05/Yoopta-Editor#readme",
7
+ "license": "MIT",
8
+ "private": false,
9
+ "main": "dist/index.js",
10
+ "type": "module",
11
+ "module": "dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "files": [
14
+ "dist/"
15
+ ],
16
+ "peerDependencies": {
17
+ "@yoopta/editor": "6.0.0-beta.4",
18
+ "react": ">=18.2.0",
19
+ "react-dom": ">=18.2.0"
20
+ },
21
+ "publishConfig": {
22
+ "registry": "https://registry.npmjs.org",
23
+ "access": "public"
24
+ },
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "git+https://github.com/Darginec05/Yoopta-Editor.git"
28
+ },
29
+ "scripts": {
30
+ "test": "node ./__tests__/yoopta-table-of-contents.test.js",
31
+ "start": "rollup --config rollup.config.js --watch --bundleConfigAsCjs --environment NODE_ENV:development",
32
+ "prepublishOnly": "yarn build",
33
+ "build": "rollup --config rollup.config.js --bundleConfigAsCjs --environment NODE_ENV:production"
34
+ },
35
+ "bugs": {
36
+ "url": "https://github.com/Darginec05/Yoopta-Editor/issues"
37
+ },
38
+ "gitHead": "cab1b9a3d5f104c46da98df464f1806d968b12fd"
39
+ }